diff --git a/README.md b/README.md new file mode 100644 index 0000000..f989fcf --- /dev/null +++ b/README.md @@ -0,0 +1,62 @@ +# Growthcraft 7 for Minecraft 1.18.2 (Forge) + +[![Growthcraft Version](https://img.shields.io/badge/Growthcraft-8.1.0-orange.svg)](https://github.com/GrowthcraftCE/Growthcraft-1.19) +[![](http://cf.way2muchnoise.eu/versions/growthcraft-community-edition_latest.svg)](https://minecraft.curseforge.com/projects/growthcraft-community-edition/) +[![](http://cf.way2muchnoise.eu/short_growthcraft-community-edition.svg)](https://minecraft.curseforge.com/projects/growthcraft-community-edition/) +[![Forge Version](https://img.shields.io/badge/Minecraft%20Forge-43.1.7-yellow.svg)](http://files.minecraftforge.net/maven/net/minecraftforge/forge/index_1.19.3.html) + +[![Build Status](https://img.shields.io/endpoint.svg?url=https%3A%2F%2Factions-badge.atrox.dev%2FGrowthcraftCE%2FGrowthcraft-1.19%2Fbadge%3Fref%3Ddevelopment&style=flat)](https://actions-badge.atrox.dev/GrowthcraftCE/Growthcraft-1.19/goto?ref=development) +[![Gitpod Ready-to-Code](https://img.shields.io/badge/Gitpod-Ready--to--Code-blue?logo=gitpod)](https://gitpod.io/#https://github.com/GrowthcraftCE/Growthcraft-1.19) +[![Discord Channel](https://img.shields.io/discord/333690296334548994.svg?color=green)](https://discord.gg/Quh76Jn) + +Welcome to Growthcraft. Growthcraft is a collection of Minecraft mods that adds an extra layer of immersion into the +world of Minecraft. Growthcraft adds the ability to grow Apple tress, collect honey from bees, grow hops and grapes on vines that will crawl along rope. You can make cheese, yogurt, ice cream, butter, rice for a flavorfull meal. Additionally, you can make Ale, Wine, Juice, Ciders, kumis, and sake and make it extra potent for a stronger affect. + +## Getting Started + +There are multiple starting points to Growthcraft. As we continue to develop and expand Growthcraft, we will be adding to our GitHub wiki documentation. + +## History + +### Growthcraft 8 (Minecraft 1.19) + +End of Support: TBD +Latest Version: 8.1.0 +Stable Version: TBD + +### Growthcraft 7 (Minecraft 1.18) + +End of Support: TBD +Latest Version: 7.0.0 +Stable Version: TBD + +### Growthcraft 6 (Minecraft 1.16) + +Going from Minecraft Forge 1.12 to 1.16 made a lot of changes to the MCP mappings to the point that it prompted a +complete rewrite from the ground. + +### Growthcraft 4 (Minecraft 1.12.2) + + + +### Growthcraft 2 (Minecraft 1.7.10) + +End of Support: 11 AUG 2018 +Latest Version: 2.7.2 +Stable Version: 2.7.2 + +Growthcraft 2 was a major re-release of Gwafu's original work. In 2015, the Growthcraft +"Community Edition" Team was given permission to take over the mod development. + +In this version, we added village structures. We added two additional sub-muodules, Growthcraft Milk and Rice. These new +mods added, Cheese, yogurt, ice cream, Sake, Rice, rice and thistle crops. When we first rolled out the thistle crop, it +was k nown to wildly grow and take over entire worlds. + +### Growthcraft 1 (Minecraft 1.7.2) + +End of Support: 13 JUL 2014 +Latest Version: 2.1.0a +Stable Version: 2.1.0a + +The original Growthcraft mod was created and developed by Gwafu. He did a lot of improving it over a period of three +years. diff --git a/build.gradle b/build.gradle index 1cb28e4..a6a8cf8 100644 --- a/build.gradle +++ b/build.gradle @@ -2,61 +2,61 @@ buildscript { repositories { // These repositories are only for Gradle plugins, put any other repositories in the repository block further below maven { url = 'https://maven.minecraftforge.net' } + // maven { url = 'https://maven.parchmentmc.org' } mavenCentral() } dependencies { classpath group: 'net.minecraftforge.gradle', name: 'ForgeGradle', version: '5.1.+', changing: true + // classpath 'org.parchmentmc:librarian:1.+' } } + +plugins { + id 'eclipse' + id 'maven-publish' + id "org.sonarqube" version "3.4.0.2513" +} + apply plugin: 'net.minecraftforge.gradle' -// Only edit below this line, the above code adds and enables the necessary things for Forge to be setup. -apply plugin: 'eclipse' -apply plugin: 'maven-publish' +//apply plugin: 'org.parchmentmc.librarian.forgegradle' + +version = "${minecraft_version}-${growthcraft_version}" +group = 'growthcraft' +archivesBaseName = 'growthcraft' -version = '1.0' -group = 'com.yourname.modid' // http://maven.apache.org/guides/mini/guide-naming-conventions.html -archivesBaseName = 'modid' +sonarqube { + properties { + property "sonar.projectKey", "Growthcraft-1.18" + property "sonar.organization", "growthcraftce" + property "sonar.host.url", "https://sonarcloud.io" + } +} -// Mojang ships Java 17 to end users in 1.18+, so your mod should target Java 17. java.toolchain.languageVersion = JavaLanguageVersion.of(17) -println('Java: ' + System.getProperty('java.version') + ' JVM: ' + System.getProperty('java.vm.version') + '(' + System.getProperty('java.vendor') + ') Arch: ' + System.getProperty('os.arch')) +println('========================================') +println('Java: ' + System.getProperty('java.version')) +println(' JVM: ' + System.getProperty('java.vm.version') + '(' + System.getProperty('java.vendor') + ')') +println('Arch: ' + System.getProperty('os.arch')) +println("Build Version: ${growthcraft_version}") +println('----------------------------------------') + minecraft { - // The mappings can be changed at any time and must be in the following format. - // Channel: Version: - // snapshot YYYYMMDD Snapshot are built nightly. - // stable # Stables are built at the discretion of the MCP team. - // official MCVersion Official field/method names from Mojang mapping files - // - // You must be aware of the Mojang license when using the 'official' mappings. - // See more information here: https://github.com/MinecraftForge/MCPConfig/blob/master/Mojang.md - // - // Use non-default mappings at your own risk. They may not always work. - // Simply re-run your setup task after changing the mappings to update your workspace. - mappings channel: 'official', version: '1.18' - - // accessTransformer = file('src/main/resources/META-INF/accesstransformer.cfg') // Currently, this location cannot be changed from the default. - - // Default run configurations. - // These can be tweaked, removed, or duplicated as needed. + // Mappings + mappings channel: 'official', version: "${minecraft_version}" + // Access Transformers, this is a fixed path. + accessTransformer = file('src/main/resources/META-INF/accesstransformer.cfg') + runs { client { workingDirectory project.file('run') - - // Recommended logging data for a userdev environment - // The markers can be added/remove as needed separated by commas. - // "SCAN": For mods scan. - // "REGISTRIES": For firing of registry events. - // "REGISTRYDUMP": For getting the contents of all registries. property 'forge.logging.markers', 'REGISTRIES' - - // Recommended logging level for the console - // You can set various levels here. - // Please read: https://stackoverflow.com/questions/2031163/when-to-use-the-different-log-levels property 'forge.logging.console.level', 'debug' + property 'mixin.env.remapRefMap', 'true' + property 'mixin.env.refMapRemappingFile', "${projectDir}/build/createSrgToMcp/output.srg" mods { - examplemod { + growthcraft { source sourceSets.main } } @@ -64,21 +64,26 @@ minecraft { server { workingDirectory project.file('run') - - // Recommended logging data for a userdev environment - // The markers can be added/remove as needed separated by commas. - // "SCAN": For mods scan. - // "REGISTRIES": For firing of registry events. - // "REGISTRYDUMP": For getting the contents of all registries. property 'forge.logging.markers', 'REGISTRIES' + property 'forge.logging.console.level', 'debug' + property 'mixin.env.remapRefMap', 'true' + property 'mixin.env.refMapRemappingFile', "${projectDir}/build/createSrgToMcp/output.srg" - // Recommended logging level for the console - // You can set various levels here. - // Please read: https://stackoverflow.com/questions/2031163/when-to-use-the-different-log-levels + mods { + growthcraft { source sourceSets.main } + } + } + + gameTestServer { + workingDirectory project.file('run') + property 'forge.logging.markers', 'REGISTRIES' property 'forge.logging.console.level', 'debug' + property 'forge.enabledGameTestNamespaces', 'growthcraft' + property 'mixin.env.remapRefMap', 'true' + property 'mixin.env.refMapRemappingFile', "${projectDir}/build/createSrgToMcp/output.srg" mods { - examplemod { + growthcraft { source sourceSets.main } } @@ -86,74 +91,57 @@ minecraft { data { workingDirectory project.file('run') - - // Recommended logging data for a userdev environment - // The markers can be added/remove as needed separated by commas. - // "SCAN": For mods scan. - // "REGISTRIES": For firing of registry events. - // "REGISTRYDUMP": For getting the contents of all registries. property 'forge.logging.markers', 'REGISTRIES' - - // Recommended logging level for the console - // You can set various levels here. - // Please read: https://stackoverflow.com/questions/2031163/when-to-use-the-different-log-levels property 'forge.logging.console.level', 'debug' + property 'mixin.env.remapRefMap', 'true' + property 'mixin.env.refMapRemappingFile', "${projectDir}/build/createSrgToMcp/output.srg" - // Specify the modid for data generation, where to output the resulting resource, and where to look for existing resources. - args '--mod', 'examplemod', '--all', '--output', file('src/generated/resources/'), '--existing', file('src/main/resources/') + args '--flat', '--all', 'validate', + '--mod', 'growthcraft', + '--output', file('src/generated/resources/'), + '--existing', file('src/main/resources/') mods { - examplemod { - source sourceSets.main - } + growthcraft { source sourceSets.main } } } } } -// Include resources generated by data generators. sourceSets.main.resources { srcDir 'src/generated/resources' } +/** + * Project Dependent Repositories + * ForgeGradle automatically adds the Forge maven and Maven Central for you + */ repositories { - // Put repositories for dependencies here - // ForgeGradle automatically adds the Forge maven and Maven Central for you - - // If you have mod jar dependencies in ./libs, you can declare them as a repository like so: - // flatDir { - // dir 'libs' - // } + // Curse Forge + maven { url "https://www.cursemaven.com" } } dependencies { - // Specify the version of Minecraft to use. If this is any group other than 'net.minecraft', it is assumed - // that the dep is a ForgeGradle 'patcher' dependency, and its patches will be applied. - // The userdev artifact is a special name and will get all sorts of transformations applied to it. - minecraft 'net.minecraftforge:forge:1.18-38.0.17' - - // Real mod deobf dependency examples - these get remapped to your current mappings - // compileOnly fg.deobf("mezz.jei:jei-${mc_version}:${jei_version}:api") // Adds JEI API as a compile dependency - // runtimeOnly fg.deobf("mezz.jei:jei-${mc_version}:${jei_version}") // Adds the full JEI mod as a runtime dependency - // implementation fg.deobf("com.tterrag.registrate:Registrate:MC${mc_version}-${registrate_version}") // Adds registrate as a dependency - - // Examples using mod jars from ./libs - // implementation fg.deobf("blank:coolmod-${mc_version}:${coolmod_version}") - - // For more info... - // http://www.gradle.org/docs/current/userguide/artifact_dependencies_tutorial.html - // http://www.gradle.org/docs/current/userguide/dependency_management.html + minecraft "net.minecraftforge:forge:${forge_version}" + + // compile against the JEI API but do not include it at runtime + compileOnly fg.deobf("mezz.jei:jei-${minecraft_version}:${jei_version}:api") + + // Runtime mods for testing + runtimeOnly fg.deobf("curse.maven:theoneprobe-${curseforge_theoneprobe}") + runtimeOnly fg.deobf("curse.maven:jei-${curseforge_jei}") + runtimeOnly fg.deobf("curse.maven:patchouli-${curseforge_patchouli}") + runtimeOnly fg.deobf("curse.maven:appleskin-${curseforge_appleskin}") } -// Example for how to get properties into the manifest for reading at runtime. jar { manifest { attributes([ - "Specification-Title" : "examplemod", - "Specification-Vendor" : "examplemodsareus", - "Specification-Version" : "1", // We are version 1 of ourselves - "Implementation-Title" : project.name, - "Implementation-Version" : project.jar.archiveVersion, - "Implementation-Vendor" : "examplemodsareus", - "Implementation-Timestamp": new Date().format("yyyy-MM-dd'T'HH:mm:ssZ") + "Specification-Title": "growthcraft", + "Specification-Vendor": "growthcraft", + "Specification-Version": "7", + "Implementation-Title": project.name, + "Implementation-Version": "${growthcraft_version}", + "Implementation-Vendor" :"growthcraft", + "Implementation-Timestamp": new Date().format("yyyy-MM-dd'T'HH:mm:ssZ") ]) } } @@ -164,6 +152,20 @@ jar.finalizedBy('reobfJar') // However if you are in a multi-project build, dev time needs unobfed jar files, so you can delay the obfuscation until publishing by doing // publish.dependsOn('reobfJar') +task sourcesJar(type: Jar) { + from sourceSets.main.allJava + classifier = 'src' +} + +task deobjJar(type: Jar) { + from sourceSets.main.output + classifier 'deobf' +} + +artifacts { + archives sourcesJar, deobjJar +} + publishing { publications { mavenJava(MavenPublication) { diff --git a/gradle.properties b/gradle.properties index 878bf1f..aa6420f 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,42 @@ # Sets default memory used for gradle commands. Can be overridden by user or command line properties. # This is required to provide enough memory for the Minecraft decompilation process. -org.gradle.jvmargs=-Xmx3G -org.gradle.daemon=false \ No newline at end of file +org.gradle.jvmargs=-Xmx2G +org.gradle.daemon=false +# Versioning Scheme +# 7.x.x +# | | Bug Fix / Maintenance Release +# | Feature Release +# Product Release +growthcraft_version=7.1.0 + +# Changing these values prompts a Product release +minecraft_version=1.18.2 +minecraft_version_short=1.18 + +# Change these values prompts a Feature release +# https://files.minecraftforge.net/net/minecraftforge/forge/index_1.19.4.html +forge_version=1.18.2-40.2.10 + +# Mod Compatibility +# ------------------------------------------------ +# Mod Title - Curse Forge URL +# curseforge_MODNAME=CURSE_PROJ_ID:CURSE_FILE_ID +# ------------------------------------------------ +# Growthcraft Trapper - https://www.curseforge.com/minecraft/mc-mods/growthcraft-trapper/files +curseforge_growthcraft_trapper=453124:4458345 +# ------------------------------------------------ +# Growthcraft Decorations - https://www.curseforge.com/minecraft/mc-mods/growthcraft-decorations/files +curseforge_growthcraft_deco=454039:3859414 +# JEI - https://www.curseforge.com/minecraft/mc-mods/jei/files +curseforge_jei=238222:4593548 +jei_version=10.2.1.1005 +# ------------------------------------------------ +# TheOneProbe https://www.curseforge.com/minecraft/mc-mods/the-one-probe/files +curseforge_theoneprobe=245211:3965688 +# ------------------------------------------------ +# Patchouli https://www.curseforge.com/minecraft/mc-mods/patchouli/files +# 2023.04.23 - Not available for 1.19.4 +curseforge_patchouli=306770:3846086 +# ------------------------------------------------ +# AppleSkin https://www.curseforge.com/minecraft/mc-mods/appleskin/files +curseforge_appleskin=248787:4770822 \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index e750102..ae04661 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.3-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/src/main/java/com/example/examplemod/ExampleMod.java b/src/main/java/com/example/examplemod/ExampleMod.java deleted file mode 100644 index 27476be..0000000 --- a/src/main/java/com/example/examplemod/ExampleMod.java +++ /dev/null @@ -1,76 +0,0 @@ -package com.example.examplemod; - -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.Blocks; -import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.event.RegistryEvent; -import net.minecraftforge.eventbus.api.SubscribeEvent; -import net.minecraftforge.fml.InterModComms; -import net.minecraftforge.fml.common.Mod; -import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; -import net.minecraftforge.fml.event.lifecycle.InterModEnqueueEvent; -import net.minecraftforge.fml.event.lifecycle.InterModProcessEvent; -import net.minecraftforge.event.server.ServerStartingEvent; -import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; - -import java.util.stream.Collectors; - -// The value here should match an entry in the META-INF/mods.toml file -@Mod("examplemod") -public class ExampleMod -{ - // Directly reference a log4j logger. - private static final Logger LOGGER = LogManager.getLogger(); - - public ExampleMod() { - // 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); - - // Register ourselves for server and other game events we are interested in - MinecraftForge.EVENT_BUS.register(this); - } - - private void setup(final FMLCommonSetupEvent event) - { - // some preinit code - LOGGER.info("HELLO FROM PREINIT"); - LOGGER.info("DIRT BLOCK >> {}", Blocks.DIRT.getRegistryName()); - } - - private void enqueueIMC(final InterModEnqueueEvent event) - { - // some example code to dispatch IMC to another mod - InterModComms.sendTo("examplemod", "helloworld", () -> { LOGGER.info("Hello world from the MDK"); return "Hello world";}); - } - - private void processIMC(final InterModProcessEvent event) - { - // some example code to receive and process InterModComms from other mods - LOGGER.info("Got IMC {}", event.getIMCStream(). - map(m->m.messageSupplier().get()). - collect(Collectors.toList())); - } - // You can use SubscribeEvent and let the Event Bus discover methods to call - @SubscribeEvent - public void onServerStarting(ServerStartingEvent event) { - // do something when the server starts - LOGGER.info("HELLO from server starting"); - } - - // You can use EventBusSubscriber to automatically subscribe events on the contained class (this is subscribing to the MOD - // Event bus for receiving Registry Events) - @Mod.EventBusSubscriber(bus=Mod.EventBusSubscriber.Bus.MOD) - public static class RegistryEvents { - @SubscribeEvent - public static void onBlocksRegistry(final RegistryEvent.Register blockRegistryEvent) { - // register a new block here - LOGGER.info("HELLO from Register Block"); - } - } -} diff --git a/src/main/java/growthcraft/apiary/GrowthcraftApiary.java b/src/main/java/growthcraft/apiary/GrowthcraftApiary.java new file mode 100644 index 0000000..dbb0f42 --- /dev/null +++ b/src/main/java/growthcraft/apiary/GrowthcraftApiary.java @@ -0,0 +1,61 @@ +package growthcraft.apiary; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import growthcraft.apiary.init.GrowthcraftApiaryBlockEntities; +import growthcraft.apiary.init.GrowthcraftApiaryBlocks; +import growthcraft.apiary.init.GrowthcraftApiaryFluids; +import growthcraft.apiary.init.GrowthcraftApiaryItems; +import growthcraft.apiary.init.GrowthcraftApiaryMenus; +import growthcraft.apiary.init.client.GrowthcraftApiaryBlockRenders; +import growthcraft.apiary.init.config.GrowthcraftApiaryConfig; +import growthcraft.apiary.shared.Reference; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.event.server.ServerStartingEvent; +import net.minecraftforge.eventbus.api.IEventBus; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; +import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; +import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; + +@Mod(Reference.MODID) +@Mod.EventBusSubscriber(modid = Reference.MODID, bus = Mod.EventBusSubscriber.Bus.MOD) +public class GrowthcraftApiary { + + public static final Logger LOGGER = LogManager.getLogger(Reference.MODID); + + public GrowthcraftApiary() { + IEventBus modEventBus = FMLJavaModLoadingContext.get().getModEventBus(); + modEventBus.addListener(this::setup); + modEventBus.addListener(this::clientSetupEvent); + + GrowthcraftApiaryConfig.loadConfig(); + + GrowthcraftApiaryBlocks.BLOCKS.register(modEventBus); + GrowthcraftApiaryItems.ITEMS.register(modEventBus); + GrowthcraftApiaryFluids.FLUIDS.register(modEventBus); + GrowthcraftApiaryBlockEntities.BLOCK_ENTITIES.register(modEventBus); + GrowthcraftApiaryMenus.MENUS.register(modEventBus); + + MinecraftForge.EVENT_BUS.register(this); + } + + private void clientSetupEvent(final FMLClientSetupEvent event) { + GrowthcraftApiaryBlockRenders.setRenderLayers(); + GrowthcraftApiaryMenus.registerMenus(); + } + + private void setup(final FMLCommonSetupEvent event) { +// event.enqueueWork( () -> { +// GrowthcraftOreGeneration.registerConfiguredFeatures(); +// }); + } + + @SubscribeEvent + public void onServerStarting(ServerStartingEvent event) { + LOGGER.info("Growthcraft Apiary starting up server-side ..."); + } + +} diff --git a/src/main/java/growthcraft/apiary/block/BeeBoxBlock.java b/src/main/java/growthcraft/apiary/block/BeeBoxBlock.java new file mode 100644 index 0000000..359f6ee --- /dev/null +++ b/src/main/java/growthcraft/apiary/block/BeeBoxBlock.java @@ -0,0 +1,131 @@ +package growthcraft.apiary.block; + +import growthcraft.apiary.GrowthcraftApiary; +import growthcraft.apiary.block.entity.BeeBoxBlockEntity; +import growthcraft.apiary.init.GrowthcraftApiaryBlockEntities; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.sounds.SoundSource; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.*; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityTicker; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockBehaviour; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.StateDefinition; +import net.minecraft.world.level.block.state.properties.BlockStateProperties; +import net.minecraft.world.level.block.state.properties.DirectionProperty; +import net.minecraft.world.level.material.PushReaction; +import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.world.phys.shapes.VoxelShape; +import net.minecraftforge.network.NetworkHooks; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import static net.minecraft.world.level.block.state.properties.BlockStateProperties.HORIZONTAL_FACING; + +public class BeeBoxBlock extends BaseEntityBlock { + public static final DirectionProperty FACING = BlockStateProperties.HORIZONTAL_FACING; + + private static final VoxelShape VOXEL_SHAPE = Block.box( + 2.0D, 0.0D, 2.0D, + 14.0D, 16.0D, 14.0D + ); + + public BeeBoxBlock() { + this(getInitProperties()); + } + + public BeeBoxBlock(Properties properties) { + super(properties); + this.registerDefaultState(this.stateDefinition.any().setValue(FACING, Direction.NORTH)); + } + + private static Properties getInitProperties() { + Properties properties = BlockBehaviour.Properties.copy(Blocks.BEEHIVE); + properties.strength(1.5F); + properties.noOcclusion(); + return properties; + } + + @Override + public RenderShape getRenderShape(BlockState blockState) { + return RenderShape.MODEL; + } + + @Override + protected void createBlockStateDefinition(StateDefinition.Builder blockStateBuilder) { + blockStateBuilder.add(HORIZONTAL_FACING); + } + + @Nullable + @Override + public BlockState getStateForPlacement(BlockPlaceContext context) { + return this.defaultBlockState().setValue(FACING, context.getHorizontalDirection().getOpposite()); + } + + @Override + public @NotNull PushReaction getPistonPushReaction(@NotNull BlockState blockState) { + return PushReaction.DESTROY; + } + + public BlockState rotate(BlockState state, Rotation rotation) { + return state.setValue(FACING, rotation.rotate(state.getValue(FACING))); + } + + public BlockState mirror(BlockState state, Mirror mirror) { + return state.rotate(mirror.getRotation(state.getValue(FACING))); + } + + @Nullable + @Override + public BlockEntity newBlockEntity(BlockPos pos, BlockState state) { + return GrowthcraftApiaryBlockEntities.BEE_BOX_BLOCK_ENTITY.get().create(pos, state); + } + + @Nullable + @Override + public BlockEntityTicker getTicker(Level level, BlockState state, BlockEntityType blockEntityType) { + return createTickerHelper( + blockEntityType, + GrowthcraftApiaryBlockEntities.BEE_BOX_BLOCK_ENTITY.get(), + (worldLevel, pos, blockState, blockEntity) -> (blockEntity).tick() + ); + } + + @Override + public void onRemove(BlockState state, Level level, BlockPos pos, BlockState newState, boolean isMoving) { + if (state.getBlock() != newState.getBlock()) { + try { + BeeBoxBlockEntity blockEntity = (BeeBoxBlockEntity) level.getBlockEntity(pos); + blockEntity.dropItems(); + } catch (Exception ex) { + GrowthcraftApiary.LOGGER.error(String.format("Invalid blockEntity type at %s, expected BeeBoxBlockEntity", pos.toString())); + } + } + super.onRemove(state, level, pos, newState, isMoving); + } + + @Override + public InteractionResult use(BlockState state, Level level, BlockPos pos, Player player, InteractionHand hand, BlockHitResult hitResult) { + if(!level.isClientSide) { + level.playSound(player, pos, SoundEvents.BARREL_OPEN, SoundSource.BLOCKS, 1.0F, 1.0F); + try { + BeeBoxBlockEntity blockEntity = (BeeBoxBlockEntity) level.getBlockEntity(pos); + NetworkHooks.openGui(((ServerPlayer) player), blockEntity, pos); + } catch (Exception ex) { + GrowthcraftApiary.LOGGER.error(String.format("%s unable to open BeeBoxBlockEntity GUI at %s.", + player.getDisplayName().getString(), pos)); + GrowthcraftApiary.LOGGER.error(ex.getMessage()); + } + } + return InteractionResult.SUCCESS; + } +} diff --git a/src/main/java/growthcraft/apiary/block/entity/BeeBoxBlockEntity.java b/src/main/java/growthcraft/apiary/block/entity/BeeBoxBlockEntity.java new file mode 100644 index 0000000..6dee05f --- /dev/null +++ b/src/main/java/growthcraft/apiary/block/entity/BeeBoxBlockEntity.java @@ -0,0 +1,288 @@ +package growthcraft.apiary.block.entity; + +import java.security.SecureRandom; +import java.util.ArrayList; +import java.util.List; +import net.minecraft.network.chat.TranslatableComponent; +import javax.annotation.ParametersAreNonnullByDefault; + +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import growthcraft.apiary.init.GrowthcraftApiaryBlockEntities; +import growthcraft.apiary.init.GrowthcraftApiaryItems; +import growthcraft.apiary.init.GrowthcraftApiaryTags; +import growthcraft.apiary.init.config.GrowthcraftApiaryConfig; +import growthcraft.apiary.screen.BeeBoxMenu; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.Connection; +import net.minecraft.network.chat.Component; +import net.minecraft.network.protocol.Packet; +import net.minecraft.network.protocol.game.ClientGamePacketListener; +import net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket; +import net.minecraft.tags.BlockTags; +import net.minecraft.world.Containers; +import net.minecraft.world.MenuProvider; +import net.minecraft.world.SimpleContainer; +import net.minecraft.world.entity.player.Inventory; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.inventory.AbstractContainerMenu; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityTicker; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.common.util.LazyOptional; +import net.minecraftforge.items.CapabilityItemHandler; +import net.minecraftforge.items.IItemHandler; +import net.minecraftforge.items.ItemStackHandler; + +public class BeeBoxBlockEntity extends BlockEntity implements BlockEntityTicker, MenuProvider { + + private int tickClock = 0; + private final int tickMax; + + private Component customName; + + private final ItemStackHandler itemStackHandler = new ItemStackHandler(28) { + @Override + protected void onContentsChanged(int slot) { + setChanged(); + } + + @Override + public boolean isItemValid(int slot, @NotNull ItemStack stack) { + return (slot == 0 && stack.is(GrowthcraftApiaryTags.Items.BEE)) || + (slot > 0 && slot <= 27 && stack.is(GrowthcraftApiaryTags.Items.HONEY_COMB)); + } + }; + + private LazyOptional itemHandlerLazyOptional = LazyOptional.empty(); + + public BeeBoxBlockEntity(BlockPos pos, BlockState state) { + this(GrowthcraftApiaryBlockEntities.BEE_BOX_BLOCK_ENTITY.get(), pos, state, GrowthcraftApiaryConfig.getBeeBoxMaxProcessingTime()); + } + + public BeeBoxBlockEntity(BlockEntityType blockEntityType, BlockPos pos, BlockState state, int tickMax) { + super(blockEntityType, pos, state); + this.tickMax = tickMax; + } + + @Override + public @NotNull Component getDisplayName() { + return new TranslatableComponent("container.growthcraft_apiary.bee_box"); + } + + @Nullable + @Override + public AbstractContainerMenu createMenu(int containerId, @NotNull Inventory inventory, @NotNull Player player) { + return new BeeBoxMenu(containerId, inventory, this); + } + + public void tick() { + if (this.getLevel() != null) { + this.tick(this.getLevel(), this.getBlockPos(), this.getBlockState(), this); + } + } + + @Override + public void tick(Level level, BlockPos pos, BlockState blockState, BeeBoxBlockEntity beeBoxBlockEntity) { + if (!level.isClientSide && this.itemStackHandler.getStackInSlot(0).getCount() > 0) { + SecureRandom random = new SecureRandom(); + + if (tickClock >= tickMax) { + int workers = this.itemStackHandler.getStackInSlot(0).getCount(); + + // Try and increase the bee population. + if (workers < 64 && random.nextInt(100) <= GrowthcraftApiaryConfig.getChanceToIncreaseBees()) { + this.itemStackHandler.getStackInSlot(0).grow(1); + } + + // For each worker bee try to do a task + for (int i = 0; i < workers; i++) { + int jobID = random.nextInt(4); + + switch (jobID) { + case 0: + // Do Nothing + break; + case 1: + // Check for comb conversion + int slotNeedsCombConversion = getSlotWithVanillaHoneyComb(); + + if (slotNeedsCombConversion < 0) { + slotNeedsCombConversion = getSlotWithEmptyHoneyComb(); + } + + // Try and fill an empty honey comb. + if (slotNeedsCombConversion > 0) { + this.itemStackHandler.setStackInSlot( + slotNeedsCombConversion, + new ItemStack(GrowthcraftApiaryItems.HONEY_COMB_FULL.get()) + ); + } + break; + case 2: + // Try and duplicate any FlowerBlock + if (GrowthcraftApiaryConfig.shouldReplicateFlowers()) { + // search the surrounding area for FlowerBlock. + tryReplicateFlower(level, pos); + } + break; + default: + // Add new empty honey comb. + int emptySlotID = getEmptySlot(); + if (emptySlotID > 0) { + this.itemStackHandler.setStackInSlot( + emptySlotID, + new ItemStack(GrowthcraftApiaryItems.HONEY_COMB_EMPTY.get()) + ); + } + + } + } + + this.tickClock = 0; + } else { + this.tickClock++; + } + } + } + + private int getSlotWithVanillaHoneyComb() { + for (int slotID = 1; slotID < this.itemStackHandler.getSlots(); slotID++) { + if (this.itemStackHandler.getStackInSlot(slotID).getItem() == Items.HONEYCOMB) return slotID; + } + return -1; + } + + private int getSlotWithEmptyHoneyComb() { + for (int slotID = 1; slotID < this.itemStackHandler.getSlots(); slotID++) { + if (this.itemStackHandler.getStackInSlot(slotID).getItem() == GrowthcraftApiaryItems.HONEY_COMB_EMPTY.get()) + return slotID; + } + return -1; + } + + private int getEmptySlot() { + for (int slotID = 1; slotID < this.itemStackHandler.getSlots(); slotID++) { + if (this.itemStackHandler.getStackInSlot(slotID).isEmpty()) return slotID; + } + return -1; + } + + + @Nullable + @Override + public Packet getUpdatePacket() { + return ClientboundBlockEntityDataPacket.create(this); + } + + @Override + public @NotNull CompoundTag getUpdateTag() { + return this.serializeNBT(); + } + + @Override + public void handleUpdateTag(CompoundTag tag) { + this.load(tag); + } + + @Override + public void load(@NotNull CompoundTag nbt) { + super.load(nbt); + this.itemStackHandler.deserializeNBT(nbt.getCompound("inventory")); + this.tickClock = nbt.getInt("CurrentProcessTicks"); + + if (nbt.contains("CustomName", 8)) { + this.customName = Component.Serializer.fromJson(nbt.getString("CustomName")); + } + } + + @Override + @ParametersAreNonnullByDefault + protected void saveAdditional(CompoundTag nbt) { + super.saveAdditional(nbt); + nbt.put("inventory", this.itemStackHandler.serializeNBT()); + nbt.putInt("CurrentProcessTicks", this.tickClock); + + if (this.customName != null) { + nbt.putString("CustomName", Component.Serializer.toJson(this.customName)); + } + } + + @Override + public void onDataPacket(Connection net, ClientboundBlockEntityDataPacket pkt) { + this.load(pkt.getTag()); + } + + @Override + public void onLoad() { + super.onLoad(); + itemHandlerLazyOptional = LazyOptional.of(() -> itemStackHandler); + } + + @Override + public void invalidateCaps() { + super.invalidateCaps(); + itemHandlerLazyOptional.invalidate(); + } + + private void tryReplicateFlower(Level level, BlockPos pos) { + int beeBoxFlowerRange = GrowthcraftApiaryConfig.getBeeBoxFlowerRange(); + + List flowerBlocks = new ArrayList<>(); + List airBlocks = new ArrayList<>(); + + BlockPos lowerBoundPos = pos.below(2).south(beeBoxFlowerRange).west(beeBoxFlowerRange); + BlockPos upperBoundPos = pos.above(2).north(beeBoxFlowerRange).east(beeBoxFlowerRange); + + for (BlockPos blockpos : BlockPos.betweenClosed(lowerBoundPos, upperBoundPos)) { + BlockPos surroundingPos = blockpos.immutable(); + + if (level.getBlockState(surroundingPos).is(BlockTags.FLOWERS)) { + flowerBlocks.add(level.getBlockState(surroundingPos)); + } else if (level.getBlockState(surroundingPos).isAir() && level.getBlockState(surroundingPos.below()).is(BlockTags.DIRT)) { + airBlocks.add(surroundingPos); + } else { + // Do nothing + } + + } + + SecureRandom random = new SecureRandom(); + int rand = random.nextInt(100); + + if (!flowerBlocks.isEmpty() && !airBlocks.isEmpty() && rand <= GrowthcraftApiaryConfig.getChanceToReplicateFlowers()) { + int randomFlower = level.getRandom().nextInt(flowerBlocks.size()); + int randomAirBlock = level.getRandom().nextInt(airBlocks.size()); + + level.setBlock(airBlocks.get(randomAirBlock), flowerBlocks.get(randomFlower), Block.UPDATE_ALL_IMMEDIATE); + } + + } + + @NotNull + @Override + public LazyOptional getCapability(@NotNull Capability cap, @Nullable Direction side) { + if (cap == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) { + return itemHandlerLazyOptional.cast(); + } + return super.getCapability(cap, side); + } + + public void dropItems() { + SimpleContainer inventory = new SimpleContainer(itemStackHandler.getSlots()); + for (int i = 0; i < itemStackHandler.getSlots(); i++) { + inventory.setItem(i, itemStackHandler.getStackInSlot(i)); + } + Containers.dropContents(this.getLevel(), this.worldPosition, inventory); + } + +} diff --git a/src/main/java/growthcraft/apiary/init/GrowthcraftApiaryBlockEntities.java b/src/main/java/growthcraft/apiary/init/GrowthcraftApiaryBlockEntities.java new file mode 100644 index 0000000..649fa98 --- /dev/null +++ b/src/main/java/growthcraft/apiary/init/GrowthcraftApiaryBlockEntities.java @@ -0,0 +1,33 @@ +package growthcraft.apiary.init; + +import growthcraft.apiary.block.entity.BeeBoxBlockEntity; +import growthcraft.apiary.shared.Reference; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraftforge.registries.DeferredRegister; +import net.minecraftforge.registries.ForgeRegistries; +import net.minecraftforge.registries.RegistryObject; + +public class GrowthcraftApiaryBlockEntities { + + public static final DeferredRegister> BLOCK_ENTITIES = DeferredRegister.create( + ForgeRegistries.BLOCK_ENTITIES, Reference.MODID + ); + + public static final RegistryObject> BEE_BOX_BLOCK_ENTITY = BLOCK_ENTITIES.register( + Reference.UnlocalizedName.BEE_BOX, + () -> BlockEntityType.Builder.of(BeeBoxBlockEntity::new, + GrowthcraftApiaryBlocks.BEE_BOX_ACACIA.get(), + GrowthcraftApiaryBlocks.BEE_BOX_BIRCH.get(), + GrowthcraftApiaryBlocks.BEE_BOX_CRIMSON.get(), + GrowthcraftApiaryBlocks.BEE_BOX_DARK_OAK.get(), + GrowthcraftApiaryBlocks.BEE_BOX_JUNGLE.get(), + GrowthcraftApiaryBlocks.BEE_BOX_OAK.get(), + GrowthcraftApiaryBlocks.BEE_BOX_SPRUCE.get(), + GrowthcraftApiaryBlocks.BEE_BOX_WARPED.get() + ).build(null) + ); + + private GrowthcraftApiaryBlockEntities() { + /* Disable automatic default public constructor */ + } +} diff --git a/src/main/java/growthcraft/apiary/init/GrowthcraftApiaryBlocks.java b/src/main/java/growthcraft/apiary/init/GrowthcraftApiaryBlocks.java new file mode 100644 index 0000000..65bbec2 --- /dev/null +++ b/src/main/java/growthcraft/apiary/init/GrowthcraftApiaryBlocks.java @@ -0,0 +1,77 @@ +package growthcraft.apiary.init; + +import growthcraft.apiary.block.BeeBoxBlock; +import growthcraft.apiary.shared.Reference; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.BlockItem; +import net.minecraft.world.item.Item; +import net.minecraft.world.level.block.Block; +import net.minecraftforge.registries.DeferredRegister; +import net.minecraftforge.registries.ForgeRegistries; +import net.minecraftforge.registries.RegistryObject; + +import java.util.ArrayList; +import java.util.function.Supplier; + +public class GrowthcraftApiaryBlocks { + public static final DeferredRegister BLOCKS = DeferredRegister.create( + ForgeRegistries.BLOCKS, Reference.MODID + ); + + public static final RegistryObject BEE_BOX_ACACIA = registerBlock( + Reference.UnlocalizedName.BEE_BOX_ACACIA, BeeBoxBlock::new + ); + + public static final RegistryObject BEE_BOX_BIRCH = registerBlock( + Reference.UnlocalizedName.BEE_BOX_BIRCH, BeeBoxBlock::new + ); + + public static final RegistryObject BEE_BOX_CRIMSON = registerBlock( + Reference.UnlocalizedName.BEE_BOX_CRIMSON, BeeBoxBlock::new + ); + + public static final RegistryObject BEE_BOX_DARK_OAK = registerBlock( + Reference.UnlocalizedName.BEE_BOX_DARK_OAK, BeeBoxBlock::new + ); + + public static final RegistryObject BEE_BOX_JUNGLE = registerBlock( + Reference.UnlocalizedName.BEE_BOX_JUNGLE, BeeBoxBlock::new + ); + public static final RegistryObject BEE_BOX_OAK = registerBlock( + Reference.UnlocalizedName.BEE_BOX_OAK, BeeBoxBlock::new + ); + + public static final RegistryObject BEE_BOX_SPRUCE = registerBlock( + Reference.UnlocalizedName.BEE_BOX_SPRUCE, BeeBoxBlock::new + ); + public static final RegistryObject BEE_BOX_WARPED = registerBlock( + Reference.UnlocalizedName.BEE_BOX_WARPED, BeeBoxBlock::new + ); + + private static RegistryObject registerBlock(String name, Supplier block) { + RegistryObject registryObject = BLOCKS.register(name, block); + if (!excludeBlockItemRegistry(registryObject.getId())) { + registerBlockItem(name, registryObject); + } + return registryObject; + } + + private static void registerBlockItem(String name, RegistryObject blockRegistryObject) { + GrowthcraftApiaryItems.ITEMS.register( + name, + () -> new BlockItem(blockRegistryObject.get(), getDefaultItemProperties()) + ); + } + + private static Item.Properties getDefaultItemProperties() { + Item.Properties properties = new Item.Properties().tab(growthcraft.core.shared.Reference.ITEM_GROUP); + return properties; + } + + public static boolean excludeBlockItemRegistry(ResourceLocation registryName) { + ArrayList excludeBlocks = new ArrayList<>(); + //excludeBlocks.add(Reference.MODID + ":" + Reference.UnlocalizedName.APPLE_TREE_FRUIT); + return excludeBlocks.contains(registryName.toString()); + } + +} diff --git a/src/main/java/growthcraft/apiary/init/GrowthcraftApiaryFluids.java b/src/main/java/growthcraft/apiary/init/GrowthcraftApiaryFluids.java new file mode 100644 index 0000000..9cf3525 --- /dev/null +++ b/src/main/java/growthcraft/apiary/init/GrowthcraftApiaryFluids.java @@ -0,0 +1,77 @@ +package growthcraft.apiary.init; + +import growthcraft.apiary.shared.Reference; +import growthcraft.lib.utils.FluidUtils; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.world.level.block.LiquidBlock; +import net.minecraft.world.level.block.state.BlockBehaviour; +import net.minecraft.world.level.material.FlowingFluid; +import net.minecraft.world.level.material.Fluid; +import net.minecraft.world.level.material.Material; +import net.minecraftforge.fluids.FluidAttributes; +import net.minecraftforge.fluids.ForgeFlowingFluid; +import net.minecraftforge.registries.DeferredRegister; +import net.minecraftforge.registries.ForgeRegistries; +import net.minecraftforge.registries.RegistryObject; + +public class GrowthcraftApiaryFluids { + + public static final DeferredRegister FLUIDS = DeferredRegister.create( + ForgeRegistries.FLUIDS, Reference.MODID + ); + + public static final RegistryObject HONEY_FLUID + = FLUIDS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.HONEY).get(FluidUtils.STILL), () -> new ForgeFlowingFluid.Source(GrowthcraftApiaryFluids.HONEY_PROPERTIES)); + + public static final RegistryObject HONEY_FLUID_FLOWING + = FLUIDS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.HONEY).get(FluidUtils.FLOWING), () -> new ForgeFlowingFluid.Flowing(GrowthcraftApiaryFluids.HONEY_PROPERTIES)); + + + public static final ForgeFlowingFluid.Properties HONEY_PROPERTIES = new ForgeFlowingFluid.Properties( + () -> HONEY_FLUID.get(), () -> HONEY_FLUID_FLOWING.get(), FluidAttributes.builder(FluidUtils.FluidResource.STILL, FluidUtils.FluidResource.FLOWING) + .sound(SoundEvents.HONEY_DRINK).overlay(FluidUtils.FluidResource.OVERLAY) + .color(Reference.FluidColor.HONEY.toIntValue())).slopeFindDistance(2).levelDecreasePerBlock(2) + .block(() -> GrowthcraftApiaryFluids.HONEY_FLUID_BLOCK.get()).bucket(() -> GrowthcraftApiaryItems.HONEY_BUCKET.get()); + + public static final RegistryObject HONEY_FLUID_BLOCK = GrowthcraftApiaryBlocks.BLOCKS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.HONEY).get(FluidUtils.STILL), + () -> new LiquidBlock(() -> GrowthcraftApiaryFluids.HONEY_FLUID.get(), BlockBehaviour.Properties.of(Material.WATER) + .noCollission().strength(100f).noDrops())); + + + public static final RegistryObject HONEY_MEAD_FLUID + = FLUIDS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.HONEY_MEAD).get(FluidUtils.STILL), () -> new ForgeFlowingFluid.Source(GrowthcraftApiaryFluids.HONEY_MEAD_PROPERTIES)); + + public static final RegistryObject HONEY_MEAD_FLUID_FLOWING + = FLUIDS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.HONEY_MEAD).get(FluidUtils.FLOWING), () -> new ForgeFlowingFluid.Flowing(GrowthcraftApiaryFluids.HONEY_MEAD_PROPERTIES)); + + + public static final ForgeFlowingFluid.Properties HONEY_MEAD_PROPERTIES = new ForgeFlowingFluid.Properties( + () -> HONEY_MEAD_FLUID.get(), () -> HONEY_MEAD_FLUID_FLOWING.get(), FluidAttributes.builder(FluidUtils.FluidResource.STILL, FluidUtils.FluidResource.FLOWING) + .sound(SoundEvents.HONEY_DRINK).overlay(FluidUtils.FluidResource.OVERLAY) + .color(Reference.FluidColor.HONEY_MEAD.toIntValue())).slopeFindDistance(2).levelDecreasePerBlock(2) + .block(() -> GrowthcraftApiaryFluids.HONEY_MEAD_FLUID_BLOCK.get()).bucket(() -> GrowthcraftApiaryItems.HONEY_MEAD_BUCKET.get()); + + public static final RegistryObject HONEY_MEAD_FLUID_BLOCK = GrowthcraftApiaryBlocks.BLOCKS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.HONEY_MEAD).get(FluidUtils.STILL), + () -> new LiquidBlock(() -> GrowthcraftApiaryFluids.HONEY_MEAD_FLUID.get(), BlockBehaviour.Properties.of(Material.WATER) + .noCollission().strength(100f).noDrops())); + + public static final RegistryObject HONEY_MEAD_MUST_FLUID + = FLUIDS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.HONEY_MEAD_MUST).get(FluidUtils.STILL), () -> new ForgeFlowingFluid.Source(GrowthcraftApiaryFluids.HONEY_MEAD_MUST_PROPERTIES)); + + public static final RegistryObject HONEY_MEAD_MUST_FLOWING + = FLUIDS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.HONEY_MEAD_MUST).get(FluidUtils.FLOWING), () -> new ForgeFlowingFluid.Flowing(GrowthcraftApiaryFluids.HONEY_MEAD_MUST_PROPERTIES)); + + public static final ForgeFlowingFluid.Properties HONEY_MEAD_MUST_PROPERTIES = new ForgeFlowingFluid.Properties( + () -> HONEY_MEAD_MUST_FLUID.get(), () -> HONEY_MEAD_MUST_FLOWING.get(), FluidAttributes.builder(FluidUtils.FluidResource.STILL, FluidUtils.FluidResource.FLOWING) + .sound(SoundEvents.HONEY_DRINK).overlay(FluidUtils.FluidResource.OVERLAY) + .color(Reference.FluidColor.HONEY_MEAD_MUST.toIntValue())).slopeFindDistance(2).levelDecreasePerBlock(2) + .block(() -> GrowthcraftApiaryFluids.HONEY_MEAD_MUST_FLUID_BLOCK.get()).bucket(() -> GrowthcraftApiaryItems.HONEY_MEAD_MUST_BUCKET.get()); + + public static final RegistryObject HONEY_MEAD_MUST_FLUID_BLOCK = GrowthcraftApiaryBlocks.BLOCKS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.HONEY_MEAD_MUST).get(FluidUtils.STILL), + () -> new LiquidBlock(() -> GrowthcraftApiaryFluids.HONEY_MEAD_MUST_FLUID.get(), BlockBehaviour.Properties.of(Material.WATER) + .noCollission().strength(100f).noDrops())); + + private GrowthcraftApiaryFluids() { + /* Prevent default public constructor */ + } +} diff --git a/src/main/java/growthcraft/apiary/init/GrowthcraftApiaryItems.java b/src/main/java/growthcraft/apiary/init/GrowthcraftApiaryItems.java new file mode 100644 index 0000000..35a4788 --- /dev/null +++ b/src/main/java/growthcraft/apiary/init/GrowthcraftApiaryItems.java @@ -0,0 +1,122 @@ +package growthcraft.apiary.init; + +import java.util.ArrayList; + +import growthcraft.apiary.shared.Reference; +import growthcraft.lib.item.GrowthcraftBucketItem; +import growthcraft.lib.item.GrowthcraftItem; +import growthcraft.lib.utils.FluidUtils; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.Item; +import net.minecraftforge.registries.DeferredRegister; +import net.minecraftforge.registries.ForgeRegistries; +import net.minecraftforge.registries.RegistryObject; + +public class GrowthcraftApiaryItems { + public static final DeferredRegister ITEMS = DeferredRegister.create( + ForgeRegistries.ITEMS, Reference.MODID + ); + + public static final RegistryObject BEE = ITEMS.register( + Reference.UnlocalizedName.BEE, GrowthcraftItem::new + ); + + public static final RegistryObject BEES_WAX = ITEMS.register( + Reference.UnlocalizedName.BEES_WAX, GrowthcraftItem::new + ); + + public static final RegistryObject BEES_WAX_BLACK = ITEMS.register( + Reference.UnlocalizedName.BEES_WAX_BLACK, GrowthcraftItem::new + ); + + public static final RegistryObject BEES_WAX_BLUE = ITEMS.register( + Reference.UnlocalizedName.BEES_WAX_BLUE, GrowthcraftItem::new + ); + + public static final RegistryObject BEES_WAX_BROWN = ITEMS.register( + Reference.UnlocalizedName.BEES_WAX_BROWN, GrowthcraftItem::new + ); + + public static final RegistryObject BEES_WAX_CYAN = ITEMS.register( + Reference.UnlocalizedName.BEES_WAX_CYAN, GrowthcraftItem::new + ); + + public static final RegistryObject BEES_WAX_GRAY = ITEMS.register( + Reference.UnlocalizedName.BEES_WAX_GRAY, GrowthcraftItem::new + ); + + public static final RegistryObject BEES_WAX_GREEN = ITEMS.register( + Reference.UnlocalizedName.BEES_WAX_GREEN, GrowthcraftItem::new + ); + + public static final RegistryObject BEES_WAX_LIGHT_BLUE = ITEMS.register( + Reference.UnlocalizedName.BEES_WAX_LIGHT_BLUE, GrowthcraftItem::new + ); + + public static final RegistryObject BEES_WAX_LIGHT_GRAY = ITEMS.register( + Reference.UnlocalizedName.BEES_WAX_LIGHT_GRAY, GrowthcraftItem::new + ); + + public static final RegistryObject BEES_WAX_LIME = ITEMS.register( + Reference.UnlocalizedName.BEES_WAX_LIME, GrowthcraftItem::new + ); + + public static final RegistryObject BEES_WAX_MAGENTA = ITEMS.register( + Reference.UnlocalizedName.BEES_WAX_MAGENTA, GrowthcraftItem::new + ); + + public static final RegistryObject BEES_WAX_ORANGE = ITEMS.register( + Reference.UnlocalizedName.BEES_WAX_ORANGE, GrowthcraftItem::new + ); + + public static final RegistryObject BEES_WAX_PINK = ITEMS.register( + Reference.UnlocalizedName.BEES_WAX_PINK, GrowthcraftItem::new + ); + + public static final RegistryObject BEES_WAX_PURPLE = ITEMS.register( + Reference.UnlocalizedName.BEES_WAX_PURPLE, GrowthcraftItem::new + ); + + public static final RegistryObject BEES_WAX_RED = ITEMS.register( + Reference.UnlocalizedName.BEES_WAX_RED, GrowthcraftItem::new + ); + + public static final RegistryObject BEES_WAX_WHITE = ITEMS.register( + Reference.UnlocalizedName.BEES_WAX_WHITE, GrowthcraftItem::new + ); + + public static final RegistryObject BEES_WAX_YELLOW = ITEMS.register( + Reference.UnlocalizedName.BEES_WAX_YELLOW, GrowthcraftItem::new + ); + + + public static final RegistryObject HONEY_COMB_EMPTY = ITEMS.register( + Reference.UnlocalizedName.HONEY_COMB_EMPTY, GrowthcraftItem::new + ); + + public static final RegistryObject HONEY_COMB_FULL = ITEMS.register( + Reference.UnlocalizedName.HONEY_COMB_FULL, GrowthcraftItem::new + ); + + public static final RegistryObject HONEY_BUCKET = ITEMS.register( + FluidUtils.getFluidNames(Reference.UnlocalizedName.HONEY).get(FluidUtils.BUCKET), + () -> new GrowthcraftBucketItem(GrowthcraftApiaryFluids.HONEY_FLUID, Reference.FluidColor.HONEY.getColor())); + + public static final RegistryObject HONEY_MEAD_BUCKET = ITEMS.register( + FluidUtils.getFluidNames(Reference.UnlocalizedName.HONEY_MEAD).get(FluidUtils.BUCKET), + () -> new GrowthcraftBucketItem(GrowthcraftApiaryFluids.HONEY_MEAD_FLUID, Reference.FluidColor.HONEY_MEAD.getColor())); + + public static final RegistryObject HONEY_MEAD_MUST_BUCKET = ITEMS.register( + FluidUtils.getFluidNames(Reference.UnlocalizedName.HONEY_MEAD_MUST).get(FluidUtils.BUCKET), + () -> new GrowthcraftBucketItem(GrowthcraftApiaryFluids.HONEY_MEAD_MUST_FLUID, Reference.FluidColor.HONEY_MEAD_MUST.getColor())); + + private GrowthcraftApiaryItems() { + /* Prevent default public constructor */ + } + + public static boolean excludeItemRegistry(ResourceLocation registryName) { + ArrayList excludeItems = new ArrayList<>(); + //excludeItems.add(Reference.MODID + ":" + Reference.UnlocalizedName.APPLE_TREE_FRUIT); + return excludeItems.contains(registryName.toString()); + } +} diff --git a/src/main/java/growthcraft/apiary/init/GrowthcraftApiaryMenus.java b/src/main/java/growthcraft/apiary/init/GrowthcraftApiaryMenus.java new file mode 100644 index 0000000..48a5ffb --- /dev/null +++ b/src/main/java/growthcraft/apiary/init/GrowthcraftApiaryMenus.java @@ -0,0 +1,33 @@ +package growthcraft.apiary.init; + +import growthcraft.apiary.screen.BeeBoxMenu; +import growthcraft.apiary.screen.BeeBoxScreen; +import growthcraft.apiary.shared.Reference; +import net.minecraft.client.gui.screens.MenuScreens; +import net.minecraft.world.inventory.AbstractContainerMenu; +import net.minecraft.world.inventory.MenuType; +import net.minecraftforge.common.extensions.IForgeMenuType; +import net.minecraftforge.network.IContainerFactory; +import net.minecraftforge.registries.DeferredRegister; +import net.minecraftforge.registries.ForgeRegistries; +import net.minecraftforge.registries.RegistryObject; + +public class GrowthcraftApiaryMenus { + + public static final DeferredRegister> MENUS = DeferredRegister.create( + ForgeRegistries.CONTAINERS, Reference.MODID + ); + + public static final RegistryObject> BEE_BOX_MENU = + registerMenuType(Reference.UnlocalizedName.BEE_BOX, BeeBoxMenu::new); + + private static RegistryObject> registerMenuType( + String name, IContainerFactory factory) { + return MENUS.register(name, () -> IForgeMenuType.create(factory)); + } + + public static void registerMenus() { + MenuScreens.register(BEE_BOX_MENU.get(), BeeBoxScreen::new); + } + +} diff --git a/src/main/java/growthcraft/apiary/init/GrowthcraftApiaryTags.java b/src/main/java/growthcraft/apiary/init/GrowthcraftApiaryTags.java new file mode 100644 index 0000000..fc24017 --- /dev/null +++ b/src/main/java/growthcraft/apiary/init/GrowthcraftApiaryTags.java @@ -0,0 +1,73 @@ +package growthcraft.apiary.init; + +import growthcraft.apiary.shared.Reference; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.tags.BlockTags; +import net.minecraft.tags.FluidTags; +import net.minecraft.tags.ItemTags; +import net.minecraft.tags.TagKey; +import net.minecraft.world.item.Item; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.material.Fluid; + +public class GrowthcraftApiaryTags { + + public static void init() { + Blocks.init(); + Items.init(); + Fluids.init(); + EntityTypes.init(); + } + + public static class Blocks { + + public static void init() { + // Do nothing, simply instantiate static variables + } + + //public static final TagKey HEATSOURCES = tag(Reference.UnlocalizedName.TAG_HEATSOURCES); + + private static TagKey tag(String name) { + return BlockTags.create(new ResourceLocation(Reference.MODID, name)); + } + } + + public static class Items { + + public static void init() { + // Do nothing, simply instantiate static variables + } + + public static final TagKey BEE = tag(Reference.UnlocalizedName.BEE); + public static final TagKey BEES_WAX = tag(Reference.UnlocalizedName.BEES_WAX); + public static final TagKey HONEY_COMB = tag(Reference.UnlocalizedName.HONEY_COMB); + + private static TagKey tag(String name) { + return ItemTags.create(new ResourceLocation(Reference.MODID, name)); + } + } + + public static class Fluids { + + private static void init() { + // Do nothing, simply instantiate static variables + } + + private static TagKey tag(String name) { + return FluidTags.create(new ResourceLocation(Reference.MODID, name)); + } + } + + public static class EntityTypes { + + private static void init() { + // Do nothing, simply instantiate static variables + } + + //public static final TagKey> MILKABLE = tag("milkable"); + + //private static TagKey> tag(String name) { + // return TagKey.create(Registry.ENTITY_TYPE_REGISTRY, new ResourceLocation(Reference.MODID, name)); + //} + } +} diff --git a/src/main/java/growthcraft/apiary/init/client/GrowthcraftApiaryBlockRenders.java b/src/main/java/growthcraft/apiary/init/client/GrowthcraftApiaryBlockRenders.java new file mode 100644 index 0000000..f18fab5 --- /dev/null +++ b/src/main/java/growthcraft/apiary/init/client/GrowthcraftApiaryBlockRenders.java @@ -0,0 +1,25 @@ +package growthcraft.apiary.init.client; + +import growthcraft.apiary.init.GrowthcraftApiaryFluids; +import net.minecraft.client.renderer.ItemBlockRenderTypes; +import net.minecraft.client.renderer.RenderType; + +public class GrowthcraftApiaryBlockRenders { + + public static void setRenderLayers() { + setFluidRenderLayers(); + } + + private static void setFluidRenderLayers() { + ItemBlockRenderTypes.setRenderLayer(GrowthcraftApiaryFluids.HONEY_MEAD_FLUID.get().getSource(), RenderType.translucent()); + ItemBlockRenderTypes.setRenderLayer(GrowthcraftApiaryFluids.HONEY_MEAD_FLUID.get().getSource(), RenderType.translucent()); + ItemBlockRenderTypes.setRenderLayer(GrowthcraftApiaryFluids.HONEY_FLUID.get().getSource(), RenderType.translucent()); + ItemBlockRenderTypes.setRenderLayer(GrowthcraftApiaryFluids.HONEY_FLUID.get().getFlowing(), RenderType.translucent()); + ItemBlockRenderTypes.setRenderLayer(GrowthcraftApiaryFluids.HONEY_MEAD_MUST_FLUID.get().getSource(), RenderType.translucent()); + ItemBlockRenderTypes.setRenderLayer(GrowthcraftApiaryFluids.HONEY_MEAD_MUST_FLUID.get().getFlowing(), RenderType.translucent()); + } + + private GrowthcraftApiaryBlockRenders() { + /* Prevent default public constructor */ + } +} diff --git a/src/main/java/growthcraft/apiary/init/client/GrowthcraftApiaryItemRenders.java b/src/main/java/growthcraft/apiary/init/client/GrowthcraftApiaryItemRenders.java new file mode 100644 index 0000000..78bac58 --- /dev/null +++ b/src/main/java/growthcraft/apiary/init/client/GrowthcraftApiaryItemRenders.java @@ -0,0 +1,21 @@ +package growthcraft.apiary.init.client; + +import growthcraft.apiary.init.GrowthcraftApiaryFluids; +import growthcraft.apiary.shared.Reference; +import growthcraft.lib.client.ItemRendererUtils; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.client.event.ColorHandlerEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; + +@Mod.EventBusSubscriber(value = Dist.CLIENT, bus = Mod.EventBusSubscriber.Bus.MOD) +public class GrowthcraftApiaryItemRenders { + + @SubscribeEvent + public static void registerItemRenders(ColorHandlerEvent.Item event) { + ItemRendererUtils.registerItem(event, Reference.FluidColor.HONEY.toItemColor(), GrowthcraftApiaryFluids.HONEY_FLUID.get().getBucket()); + ItemRendererUtils.registerItem(event, Reference.FluidColor.HONEY_MEAD.toItemColor(), GrowthcraftApiaryFluids.HONEY_MEAD_FLUID.get().getBucket()); + ItemRendererUtils.registerItem(event, Reference.FluidColor.HONEY_MEAD_MUST.toItemColor(), GrowthcraftApiaryFluids.HONEY_MEAD_MUST_FLUID.get().getBucket()); + } + +} diff --git a/src/main/java/growthcraft/apiary/init/config/GrowthcraftApiaryConfig.java b/src/main/java/growthcraft/apiary/init/config/GrowthcraftApiaryConfig.java new file mode 100644 index 0000000..a3ed426 --- /dev/null +++ b/src/main/java/growthcraft/apiary/init/config/GrowthcraftApiaryConfig.java @@ -0,0 +1,84 @@ +package growthcraft.apiary.init.config; + +import com.electronwill.nightconfig.core.file.CommentedFileConfig; +import com.electronwill.nightconfig.core.io.WritingMode; +import net.minecraftforge.common.ForgeConfigSpec; +import net.minecraftforge.fml.loading.FMLPaths; + +import java.io.File; + +public class GrowthcraftApiaryConfig { + + public static final ForgeConfigSpec.Builder SERVER_BUILDER = new ForgeConfigSpec.Builder(); + public static final ForgeConfigSpec SERVER; + + public static final String SERVER_CONFIG = "growthcraft-apiary-server.toml"; + + private static final String CATEGORY_BEE_BOX = "beeBox"; + + private static ForgeConfigSpec.IntValue bee_box_flower_range; + private static ForgeConfigSpec.IntValue bee_box_max_processing_time; + private static ForgeConfigSpec.BooleanValue replicate_flowers; + private static ForgeConfigSpec.IntValue bee_box_chance_bee_increment; + private static ForgeConfigSpec.IntValue bee_box_chance_chance_replicate_flower; + + static { + initServerConfig(SERVER_BUILDER); + SERVER = SERVER_BUILDER.build(); + } + + private GrowthcraftApiaryConfig() { + /* Prevent generation of public constructor */ + } + + public static void loadConfig() { + loadConfig(SERVER, FMLPaths.CONFIGDIR.get().resolve(SERVER_CONFIG).toString()); + } + + public static void loadConfig(ForgeConfigSpec configSpec, String path) { + final CommentedFileConfig fileConfig = CommentedFileConfig.builder( + new File(path)).sync().autosave().writingMode(WritingMode.REPLACE).build(); + + fileConfig.load(); + configSpec.setConfig(fileConfig); + } + + public static void initServerConfig(ForgeConfigSpec.Builder specBuilder) { + bee_box_flower_range = specBuilder + .comment("Set the range for the bee box to look for flowers.") + .defineInRange(String.format("%s.%s", CATEGORY_BEE_BOX, "flowerRange"), 9, 0, 18); + bee_box_max_processing_time = specBuilder + .comment("Set the process time for the bee box to update. Default is once a minute.") + .defineInRange(String.format("%s.%s", CATEGORY_BEE_BOX, "maxProcessingTime"), 1200, 200, 1728000); + bee_box_chance_bee_increment = specBuilder + .comment("Set the percentage chance to increment bee population in the Bee Box.") + .defineInRange(String.format("%s.%s", CATEGORY_BEE_BOX, "chanceBeeIncrement"), 33, 1, 100); + bee_box_chance_chance_replicate_flower = specBuilder + .comment("Set the percentage chance to replicate a flower near by.") + .defineInRange(String.format("%s.%s", CATEGORY_BEE_BOX, "chanceReplicateFlower"), 10, 1, 100); + replicate_flowers = specBuilder + .comment("Set to false to disable flower replication by the bee box") + .define(String.format("%s.%s", CATEGORY_BEE_BOX, "replicateFlowers"), true); + } + + public static int getBeeBoxFlowerRange() { + return bee_box_flower_range.get(); + } + + public static int getBeeBoxMaxProcessingTime() { + return bee_box_max_processing_time.get(); + } + + public static boolean shouldReplicateFlowers() { + return replicate_flowers.get(); + } + + public static int getChanceToIncreaseBees() { + return bee_box_chance_bee_increment.get(); + } + + public static int getChanceToReplicateFlowers() { + return bee_box_chance_chance_replicate_flower.get(); + } + +} \ No newline at end of file diff --git a/src/main/java/growthcraft/apiary/screen/BeeBoxMenu.java b/src/main/java/growthcraft/apiary/screen/BeeBoxMenu.java new file mode 100644 index 0000000..779a949 --- /dev/null +++ b/src/main/java/growthcraft/apiary/screen/BeeBoxMenu.java @@ -0,0 +1,148 @@ +package growthcraft.apiary.screen; + +import growthcraft.apiary.block.BeeBoxBlock; +import growthcraft.apiary.block.entity.BeeBoxBlockEntity; +import growthcraft.apiary.init.GrowthcraftApiaryMenus; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.world.entity.player.Inventory; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.inventory.AbstractContainerMenu; +import net.minecraft.world.inventory.ContainerLevelAccess; +import net.minecraft.world.inventory.Slot; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraftforge.items.CapabilityItemHandler; +import net.minecraftforge.items.SlotItemHandler; + +public class BeeBoxMenu extends AbstractContainerMenu { + + private final BeeBoxBlockEntity blockEntity; + private final BeeBoxBlock block; + private final int PLAYER_HOTBAR_BASE_X = 8; + private final int PLAYER_HOTBAR_BASE_Y = 176; + private final int PLAYER_INVENTORY_BASE_X = 8; + private final int PLAYER_INVENTORY_BASE_Y = 118; + + private final Level level; + + public BeeBoxMenu(int containerID, Inventory inventory, FriendlyByteBuf extraData) { + this(containerID, inventory, inventory.player.level.getBlockEntity(extraData.readBlockPos())); + } + + public BeeBoxMenu(int containerID, Inventory inventory, BlockEntity blockEntity) { + super(GrowthcraftApiaryMenus.BEE_BOX_MENU.get(), containerID); + + this.blockEntity = (BeeBoxBlockEntity) blockEntity; + this.block = (BeeBoxBlock) inventory.player.level.getBlockEntity(this.blockEntity.getBlockPos()).getBlockState().getBlock(); + this.level = inventory.player.level; + + addPlayerInventory(inventory); + addPlayerHotbar(inventory); + + this.blockEntity.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY).ifPresent(handler -> { + int index = 0; + int itemSlotWidth = 18; + + // Bee Slot + this.addSlot(new SlotItemHandler(handler, 0, 80, 18)); + index++; + + // Honey Comb Slots + int outputSlotBaseY = 50; + int outputSlotBaseX = 8; + for (int row = 0; row < 3; row++) { + for (int column = 0; column < 9; column++) { + int slotIndex = 9 + (row * 9) + column; + + SlotItemHandler slot = new SlotItemHandler( + handler, + index, + outputSlotBaseX + (column * itemSlotWidth), + outputSlotBaseY + (row * itemSlotWidth) + ); + + this.addSlot(slot); + index++; + } + } + } + ); + } + + // CREDIT GOES TO: diesieben07 | https://github.com/diesieben07/SevenCommons + // must assign a slot number to each of the slots used by the GUI. + // For this container, we can see both the tile inventory's slots as well as the player inventory slots and the hotbar. + // Each time we add a Slot to the container, it automatically increases the slotIndex, which means + // 0 - 8 = hotbar slots (which will map to the InventoryPlayer slot numbers 0 - 8) + // 9 - 35 = player inventory slots (which map to the InventoryPlayer slot numbers 9 - 35) + // 36 - 44 = TileInventory slots, which map to our TileEntity slot numbers 0 - 8) + private static final int HOTBAR_SLOT_COUNT = 9; + private static final int PLAYER_INVENTORY_ROW_COUNT = 3; + private static final int PLAYER_INVENTORY_COLUMN_COUNT = 9; + private static final int PLAYER_INVENTORY_SLOT_COUNT = PLAYER_INVENTORY_COLUMN_COUNT * PLAYER_INVENTORY_ROW_COUNT; + private static final int VANILLA_SLOT_COUNT = HOTBAR_SLOT_COUNT + PLAYER_INVENTORY_SLOT_COUNT; + private static final int VANILLA_FIRST_SLOT_INDEX = 0; + private static final int TE_INVENTORY_FIRST_SLOT_INDEX = VANILLA_FIRST_SLOT_INDEX + VANILLA_SLOT_COUNT; + + private static final int TE_INVENTORY_SLOT_COUNT = 28; // must be the number of slots you have! + + @Override + public ItemStack quickMoveStack(Player playerIn, int index) { + Slot sourceSlot = slots.get(index); + if (sourceSlot == null || !sourceSlot.hasItem()) return ItemStack.EMPTY; //EMPTY_ITEM + ItemStack sourceStack = sourceSlot.getItem(); + ItemStack copyOfSourceStack = sourceStack.copy(); + + // Check if the slot clicked is one of the vanilla container slots + if (index < VANILLA_FIRST_SLOT_INDEX + VANILLA_SLOT_COUNT) { + // This is a vanilla container slot so merge the stack into the tile inventory + if (!moveItemStackTo(sourceStack, TE_INVENTORY_FIRST_SLOT_INDEX, TE_INVENTORY_FIRST_SLOT_INDEX + + TE_INVENTORY_SLOT_COUNT, false)) { + return ItemStack.EMPTY; // EMPTY_ITEM + } + } else if (index < TE_INVENTORY_FIRST_SLOT_INDEX + TE_INVENTORY_SLOT_COUNT) { + // This is a TE slot so merge the stack into the players inventory + if (!moveItemStackTo(sourceStack, VANILLA_FIRST_SLOT_INDEX, VANILLA_FIRST_SLOT_INDEX + VANILLA_SLOT_COUNT, false)) { + return ItemStack.EMPTY; + } + } else { + System.out.println("Invalid slotIndex:" + index); + return ItemStack.EMPTY; + } + // If stack size == 0 (the entire stack was moved) set slot contents to null + if (sourceStack.getCount() == 0) { + sourceSlot.set(ItemStack.EMPTY); + } else { + sourceSlot.setChanged(); + } + sourceSlot.onTake(playerIn, sourceStack); + return copyOfSourceStack; + } + + @Override + public boolean stillValid(Player player) { + return stillValid( + ContainerLevelAccess.create( + this.level, + this.blockEntity.getBlockPos() + ), + player, + this.block + ); + } + + private void addPlayerInventory(Inventory playerInventory) { + for (int i = 0; i < 3; ++i) { + for (int l = 0; l < 9; ++l) { + this.addSlot(new Slot(playerInventory, l + i * 9 + 9, PLAYER_INVENTORY_BASE_X + l * 18, PLAYER_INVENTORY_BASE_Y + i * 18)); + } + } + } + + private void addPlayerHotbar(Inventory playerInventory) { + for (int i = 0; i < 9; ++i) { + this.addSlot(new Slot(playerInventory, i, PLAYER_HOTBAR_BASE_X + i * 18, PLAYER_HOTBAR_BASE_Y)); + } + } +} diff --git a/src/main/java/growthcraft/apiary/screen/BeeBoxScreen.java b/src/main/java/growthcraft/apiary/screen/BeeBoxScreen.java new file mode 100644 index 0000000..972c68a --- /dev/null +++ b/src/main/java/growthcraft/apiary/screen/BeeBoxScreen.java @@ -0,0 +1,51 @@ +package growthcraft.apiary.screen; + +import com.mojang.blaze3d.systems.RenderSystem; +import com.mojang.blaze3d.vertex.PoseStack; +import growthcraft.apiary.shared.Reference; +import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; +import net.minecraft.client.renderer.GameRenderer; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.player.Inventory; + +public class BeeBoxScreen extends AbstractContainerScreen { + + private static final ResourceLocation TEXTURE = new ResourceLocation(Reference.MODID, + "textures/gui/bee_box.png"); + + public BeeBoxScreen(BeeBoxMenu menu, Inventory inventory, Component component) { + super(menu, inventory, component); + this.width = 0; + this.height = 0; + this.imageWidth = 176; + this.imageHeight = 200; + } + + @Override + protected void renderBg(PoseStack poseStack, float partialTick, int mouseX, int mouseY) { + RenderSystem.setShader(GameRenderer::getPositionTexShader); + RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); + RenderSystem.setShaderTexture(0, TEXTURE); + + int x = (width - imageWidth) / 2; + int y = (height - imageHeight) / 2; + + this.blit(poseStack, x, y, 0, 0, imageWidth, imageHeight); + } + + @Override + public void render(PoseStack poseStack, int mouseX, int mouseY, float delta) { + renderBackground(poseStack); + super.render(poseStack, mouseX, mouseY, delta); + renderTooltip(poseStack, mouseX, mouseY); + } + + @Override + protected void renderLabels(PoseStack poseStack, int mouseX, int mouseY) { + // Do nothing as this isn't a standard size GUI. + // We will have to render the GUI title and inventory label ourselves. + this.font.draw(poseStack, this.title, (float) this.titleLabelX, (float) this.titleLabelY, 4210752); + this.font.draw(poseStack, this.playerInventoryTitle, (float) this.inventoryLabelX, (float) this.inventoryLabelY - 32, 4210752); + } +} diff --git a/src/main/java/growthcraft/apiary/shared/Reference.java b/src/main/java/growthcraft/apiary/shared/Reference.java new file mode 100644 index 0000000..dff2413 --- /dev/null +++ b/src/main/java/growthcraft/apiary/shared/Reference.java @@ -0,0 +1,99 @@ +package growthcraft.apiary.shared; + +import growthcraft.lib.utils.ColorUtils; + +public class Reference { + public static final String MODID = "growthcraft_apiary"; + public static final String NAME = "Growthcraft Apiary"; + public static final String NAME_SHORT = "apiary"; + public static final String VERSION = growthcraft.core.shared.Reference.VERSION; + + public static class UnlocalizedName { + public static final String BEE = "bee"; + public static final String BEES_WAX = "bees_wax"; + public static final String BEES_WAX_BLACK = "bees_wax_black"; + public static final String BEES_WAX_BLUE = "bees_wax_blue"; + public static final String BEES_WAX_BROWN = "bees_wax_brown"; + public static final String BEES_WAX_CYAN = "bees_wax_cyan"; + public static final String BEES_WAX_GRAY = "bees_wax_gray"; + public static final String BEES_WAX_GREEN = "bees_wax_green"; + public static final String BEES_WAX_LIGHT_BLUE = "bees_wax_light_blue"; + public static final String BEES_WAX_LIGHT_GRAY = "bees_wax_light_gray"; + public static final String BEES_WAX_LIME = "bees_wax_lime"; + public static final String BEES_WAX_MAGENTA = "bees_wax_magenta"; + public static final String BEES_WAX_ORANGE = "bees_wax_orange"; + public static final String BEES_WAX_PINK = "bees_wax_pink"; + public static final String BEES_WAX_PURPLE = "bees_wax_purple"; + public static final String BEES_WAX_RED = "bees_wax_red"; + public static final String BEES_WAX_WHITE = "bees_wax_white"; + public static final String BEES_WAX_YELLOW = "bees_wax_yellow"; + public static final String BEE_BOX = "bee_box"; + public static final String BEE_BOX_ACACIA = "bee_box_acacia"; + public static final String BEE_BOX_BIRCH = "bee_box_birch"; + public static final String BEE_BOX_CRIMSON = "bee_box_crimson"; + public static final String BEE_BOX_DARK_OAK = "bee_box_dark_oak"; + public static final String BEE_BOX_JUNGLE = "bee_box_jungle"; + public static final String BEE_BOX_OAK = "bee_box_oak"; + public static final String BEE_BOX_SPRUCE = "bee_box_spruce"; + public static final String BEE_BOX_WARPED = "bee_box_warped"; + + public static final String BEE_TAG = "bee"; + public static final String HONEY = "honey"; + public static final String HONEY_COMB_EMPTY = "honey_comb_empty"; + public static final String HONEY_COMB_FULL = "honey_comb_full"; + public static final String HONEY_COMB = "honey_comb"; + public static final String HONEY_MEAD = "honey_mead"; + public static final String HONEY_MEAD_MUST = "honey_mead_must"; + public static final String LOOT_SERIALIZER_BLOCK = "global_block_loot_modifier"; + public static final String WAX_BLACK = "wax_black"; + public static final String WAX_BLUE = "wax_blue"; + public static final String WAX_BROWN = "wax_brown"; + public static final String WAX_CYAN = "wax_cyan"; + public static final String WAX_GRAY = "wax_gray"; + public static final String WAX_GREEN = "wax_green"; + public static final String WAX_LIGHT_BLUE = "wax_light_blue"; + public static final String WAX_LIGHT_GRAY = "wax_light_gray"; + public static final String WAX_LIME = "wax_lime"; + public static final String WAX_MAGENTA = "wax_magenta"; + public static final String WAX_ORANGE = "wax_orange"; + public static final String WAX_PINK = "wax_pink"; + public static final String WAX_PURPLE = "wax_purple"; + public static final String WAX_RED = "wax_red"; + public static final String WAX_WHITE = "wax_white"; + public static final String WAX_YELLOW = "wax_yellow"; + + private UnlocalizedName() { + /* Disable Automatic Creation of Public Constructor */ + } + } + + public static class FluidColor { + public static final ColorUtils.GrowthcraftColor HONEY = new ColorUtils.GrowthcraftColor(0xFFF5A61A); + public static final ColorUtils.GrowthcraftColor HONEY_MEAD = new ColorUtils.GrowthcraftColor(0xFFD79334); + public static final ColorUtils.GrowthcraftColor HONEY_MEAD_MUST = new ColorUtils.GrowthcraftColor(0xFFCD7A00); + public static final ColorUtils.GrowthcraftColor WAX_BLACK_COLOR = new ColorUtils.GrowthcraftColor(0xFF232323); + public static final ColorUtils.GrowthcraftColor WAX_BLUE_COLOR = new ColorUtils.GrowthcraftColor(0xFF0000FF); + public static final ColorUtils.GrowthcraftColor WAX_BROWN_COLOR = new ColorUtils.GrowthcraftColor(0xFF964B00); + public static final ColorUtils.GrowthcraftColor WAX_CYAN_COLOR = new ColorUtils.GrowthcraftColor(0xFF00B7EB); + public static final ColorUtils.GrowthcraftColor WAX_GRAY_COLOR = new ColorUtils.GrowthcraftColor(0xFF808080); + public static final ColorUtils.GrowthcraftColor WAX_GREEN_COLOR = new ColorUtils.GrowthcraftColor(0xFF00FF00); + public static final ColorUtils.GrowthcraftColor WAX_LIGHT_BLUE_COLOR = new ColorUtils.GrowthcraftColor(0xFFADD8E6); + public static final ColorUtils.GrowthcraftColor WAX_LIGHT_GRAY_COLOR = new ColorUtils.GrowthcraftColor(0xFFD3D3D3); + public static final ColorUtils.GrowthcraftColor WAX_LIME_COLOR = new ColorUtils.GrowthcraftColor(0xFF32CD32); + public static final ColorUtils.GrowthcraftColor WAX_MAGENTA_COLOR = new ColorUtils.GrowthcraftColor(0xFFFF00FF); + public static final ColorUtils.GrowthcraftColor WAX_ORANGE_COLOR = new ColorUtils.GrowthcraftColor(0xFFFFA500); + public static final ColorUtils.GrowthcraftColor WAX_PINK_COLOR = new ColorUtils.GrowthcraftColor(0xFFFFC0CB); + public static final ColorUtils.GrowthcraftColor WAX_PURPLE_COLOR = new ColorUtils.GrowthcraftColor(0xFF6A0DAD); + public static final ColorUtils.GrowthcraftColor WAX_RED_COLOR = new ColorUtils.GrowthcraftColor(0xFFFF0000); + public static final ColorUtils.GrowthcraftColor WAX_WHITE_COLOR = new ColorUtils.GrowthcraftColor(0xFFF8F0E3); + public static final ColorUtils.GrowthcraftColor WAX_YELLOW_COLOR = new ColorUtils.GrowthcraftColor(0xFFFFFF00); + + private FluidColor() { + /* Disable Automatic Creation of Public Constructor */ + } + } + + private Reference() { + /* Disable Automatic Creation of Public Constructor */ + } +} diff --git a/src/main/java/growthcraft/apples/GrowthcraftApples.java b/src/main/java/growthcraft/apples/GrowthcraftApples.java new file mode 100644 index 0000000..3ad6998 --- /dev/null +++ b/src/main/java/growthcraft/apples/GrowthcraftApples.java @@ -0,0 +1,56 @@ +package growthcraft.apples; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import growthcraft.apples.init.GrowthcraftApplesBlockEntities; +import growthcraft.apples.init.GrowthcraftApplesBlocks; +import growthcraft.apples.init.GrowthcraftApplesFluids; +import growthcraft.apples.init.GrowthcraftApplesItems; +import growthcraft.apples.init.client.GrowthcraftApplesBlockRenders; +import growthcraft.apples.init.config.GrowthcraftApplesConfig; +import growthcraft.apples.shared.Reference; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.event.server.ServerStartingEvent; +import net.minecraftforge.eventbus.api.IEventBus; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; +import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; +import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; + +@Mod(Reference.MODID) +@Mod.EventBusSubscriber(modid = Reference.MODID, bus = Mod.EventBusSubscriber.Bus.MOD) +public class GrowthcraftApples { + public static final Logger LOGGER = LogManager.getLogger(Reference.MODID); + + public GrowthcraftApples() { + IEventBus modEventBus = FMLJavaModLoadingContext.get().getModEventBus(); + modEventBus.addListener(this::setup); + modEventBus.addListener(this::clientSetupEvent); + + // Config + GrowthcraftApplesConfig.loadConfig(); + + // Blocks, Items, Fluids, Block Entities, Containers + GrowthcraftApplesBlocks.BLOCKS.register(modEventBus); + GrowthcraftApplesItems.ITEMS.register(modEventBus); + GrowthcraftApplesFluids.FLUIDS.register(modEventBus); + GrowthcraftApplesBlockEntities.BLOCK_ENTITIES.register(modEventBus); + + MinecraftForge.EVENT_BUS.register(this); + } + + private void clientSetupEvent(final FMLClientSetupEvent event) { + GrowthcraftApplesBlockRenders.setRenderLayers(); + } + + private void setup(final FMLCommonSetupEvent event) { + GrowthcraftApplesItems.registerCompostables(); + } + + @SubscribeEvent + public void onServerStarting(ServerStartingEvent event) { + LOGGER.info("Growthcraft Apples starting up ..."); + } +} diff --git a/src/main/java/growthcraft/apples/block/AppleBeeBoxBlock.java b/src/main/java/growthcraft/apples/block/AppleBeeBoxBlock.java new file mode 100644 index 0000000..0dae72b --- /dev/null +++ b/src/main/java/growthcraft/apples/block/AppleBeeBoxBlock.java @@ -0,0 +1,29 @@ +package growthcraft.apples.block; + +import growthcraft.apiary.block.BeeBoxBlock; +import growthcraft.apples.init.GrowthcraftApplesBlockEntities; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityTicker; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockState; +import org.jetbrains.annotations.Nullable; + +public class AppleBeeBoxBlock extends BeeBoxBlock { + + @Override + public @Nullable BlockEntity newBlockEntity(BlockPos pos, BlockState state) { + return GrowthcraftApplesBlockEntities.BEE_BOX_BLOCK_ENTITY.get().create(pos, state); + } + + @Override + public @Nullable BlockEntityTicker getTicker(Level level, BlockState state, BlockEntityType blockEntityType) { + return createTickerHelper( + blockEntityType, + GrowthcraftApplesBlockEntities.BEE_BOX_BLOCK_ENTITY.get(), + (worldLevel, pos, blockState, blockEntity) -> (blockEntity).tick() + ); + } + +} diff --git a/src/main/java/growthcraft/apples/block/AppleRopeBlock.java b/src/main/java/growthcraft/apples/block/AppleRopeBlock.java new file mode 100644 index 0000000..152e653 --- /dev/null +++ b/src/main/java/growthcraft/apples/block/AppleRopeBlock.java @@ -0,0 +1,16 @@ +package growthcraft.apples.block; + +import growthcraft.apples.init.GrowthcraftApplesBlockEntities; +import growthcraft.core.block.RopeBlock; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.state.BlockState; +import org.jetbrains.annotations.Nullable; + +public class AppleRopeBlock extends RopeBlock { + @Nullable + @Override + public BlockEntity newBlockEntity(BlockPos blockPos, BlockState blockState) { + return GrowthcraftApplesBlockEntities.APPLE_WOOD_ROPE_BLOCK_ENTITY.get().create(blockPos, blockState); + } +} diff --git a/src/main/java/growthcraft/apples/block/AppleTreeFruit.java b/src/main/java/growthcraft/apples/block/AppleTreeFruit.java new file mode 100644 index 0000000..9fc4b70 --- /dev/null +++ b/src/main/java/growthcraft/apples/block/AppleTreeFruit.java @@ -0,0 +1,224 @@ +package growthcraft.apples.block; + +import java.util.Random; + +import org.jetbrains.annotations.NotNull; + +import growthcraft.apples.init.GrowthcraftApplesBlocks; +import growthcraft.apples.init.GrowthcraftApplesItems; +import net.minecraft.core.BlockPos; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.util.Mth; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.item.ItemEntity; +import net.minecraft.world.entity.monster.Ravager; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.ItemLike; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.LevelReader; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.BonemealableBlock; +import net.minecraft.world.level.block.BushBlock; +import net.minecraft.world.level.block.SoundType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.StateDefinition; +import net.minecraft.world.level.block.state.properties.BlockStateProperties; +import net.minecraft.world.level.block.state.properties.IntegerProperty; +import net.minecraft.world.level.material.Material; +import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.VoxelShape; + +public class AppleTreeFruit extends BushBlock implements BonemealableBlock { + public static final int MAX_AGE = 7; + public static final IntegerProperty AGE = BlockStateProperties.AGE_7; + + private static final VoxelShape[] SHAPE_BY_AGE = new VoxelShape[]{ + Block.box(6.0D, 10.0D, 6.0D, 10.0D, 14.0D, 10.0D), + Block.box(6.0D, 10.0D, 6.0D, 10.0D, 14.0D, 10.0D), + Block.box(6.0D, 10.0D, 6.0D, 10.0D, 14.0D, 10.0D), + Block.box(5.0D, 9.0D, 5.0D, 11.0D, 14.0D, 11.0D), + Block.box(5.0D, 9.0D, 5.0D, 11.0D, 14.0D, 11.0D), + Block.box(5.0D, 9.0D, 5.0D, 11.0D, 14.0D, 11.0D), + Block.box(5.0D, 9.0D, 5.0D, 11.0D, 14.0D, 11.0D), + Block.box(4.0D, 7.0D, 4.0D, 12.0D, 14.0D, 12.0D)}; + + public AppleTreeFruit() { + super(getInitProperties()); + } + + @Override + public VoxelShape getShape(BlockState state, BlockGetter blockGetter, BlockPos pos, CollisionContext context) { + return SHAPE_BY_AGE[state.getValue(this.getAgeProperty())]; + } + + @Override + protected boolean mayPlaceOn(BlockState state, @NotNull BlockGetter blockGetter, @NotNull BlockPos blockPos) { + return state.is(GrowthcraftApplesBlocks.APPLE_TREE_LEAVES.get()); + } + + public IntegerProperty getAgeProperty() { + return AGE; + } + + public int getMaxAge() { + return 7; + } + + protected int getAge(BlockState blockState) { + return blockState.getValue(this.getAgeProperty()); + } + + public BlockState getStateForAge(int i) { + return this.defaultBlockState().setValue(this.getAgeProperty(), Integer.valueOf(i)); + } + + public boolean isMaxAge(BlockState blockState) { + return blockState.getValue(this.getAgeProperty()) >= this.getMaxAge(); + } + + @Override + public boolean canSurvive(@NotNull BlockState state, LevelReader level, BlockPos pos) { + return level.getBlockState(pos.above()).is(GrowthcraftApplesBlocks.APPLE_TREE_LEAVES.get()); + } + + protected ItemLike getBaseSeedId() { + return GrowthcraftApplesItems.APPLE_SEEDS.get(); + } + + @Override + public boolean isRandomlyTicking(@NotNull BlockState blockState) { + return !this.isMaxAge(blockState); + } + + @Override + public void randomTick(@NotNull BlockState blockState, ServerLevel level, @NotNull BlockPos blockPos, @NotNull Random random) { + if (!level.isAreaLoaded(blockPos, 1)) return; // Forge: prevent loading unloaded chunks when checking neighbor's light + if (level.getRawBrightness(blockPos, 0) >= 9) { + int i = this.getAge(blockState); + if (i < this.getMaxAge()) { + float f = getGrowthSpeed(this, level, blockPos); + if (net.minecraftforge.common.ForgeHooks.onCropsGrowPre(level, blockPos, blockState, random.nextInt((int)(25.0F / f) + 1) == 0)) { + level.setBlock(blockPos, this.getStateForAge(i + 1), 2); + net.minecraftforge.common.ForgeHooks.onCropsGrowPost(level, blockPos, blockState); + } + } + } + + } + + public void growCrops(Level level, BlockPos blockPos, BlockState state) { + int i = this.getAge(state) + this.getBonemealAgeIncrease(level); + int j = this.getMaxAge(); + if (i > j) { + i = j; + } + + level.setBlock(blockPos, this.getStateForAge(i), 2); + } + + protected int getBonemealAgeIncrease(Level level) { + return Mth.nextInt(level.random, 2, 5); + } + + protected static float getGrowthSpeed(Block block, BlockGetter blockGetter, BlockPos pos) { + float f = 1.0F; + BlockPos blockpos = pos.below(); + + for(int i = -1; i <= 1; ++i) { + for(int j = -1; j <= 1; ++j) { + float f1 = 0.0F; + BlockState blockstate = blockGetter.getBlockState(blockpos.offset(i, 0, j)); + if (blockstate.canSustainPlant(blockGetter, blockpos.offset(i, 0, j), net.minecraft.core.Direction.UP, (net.minecraftforge.common.IPlantable) block)) { + f1 = 1.0F; + if (blockstate.isFertile(blockGetter, pos.offset(i, 0, j))) { + f1 = 3.0F; + } + } + + if (i != 0 || j != 0) { + f1 /= 4.0F; + } + + f += f1; + } + } + + BlockPos blockpos1 = pos.north(); + BlockPos blockpos2 = pos.south(); + BlockPos blockpos3 = pos.west(); + BlockPos blockpos4 = pos.east(); + boolean flag = blockGetter.getBlockState(blockpos3).is(block) || blockGetter.getBlockState(blockpos4).is(block); + boolean flag1 = blockGetter.getBlockState(blockpos1).is(block) || blockGetter.getBlockState(blockpos2).is(block); + if (flag && flag1) { + f /= 2.0F; + } else { + boolean flag2 = blockGetter.getBlockState(blockpos3.north()).is(block) || blockGetter.getBlockState(blockpos4.north()).is(block) || blockGetter.getBlockState(blockpos4.south()).is(block) || blockGetter.getBlockState(blockpos3.south()).is(block); + if (flag2) { + f /= 2.0F; + } + } + + return f * 2.0F; + } + + @Override + public void entityInside(BlockState blockState, Level level, BlockPos pos, Entity entity) { + if (entity instanceof Ravager && net.minecraftforge.event.ForgeEventFactory.getMobGriefingEvent(level, entity)) { + level.destroyBlock(pos, true, entity); + } + + super.entityInside(blockState, level, pos, entity); + } + + public ItemStack getCloneItemStack(BlockGetter p_52254_, BlockPos p_52255_, BlockState p_52256_) { + return new ItemStack(this.getBaseSeedId()); + } + + public boolean isValidBonemealTarget(BlockGetter blockGetter, BlockPos blockPos, BlockState state, boolean p_52261_) { + return !this.isMaxAge(state); + } + +// @Override +// public boolean isValidBonemealTarget(LevelReader level, BlockPos blockPos, BlockState state, boolean p_50900_) { +// return this.getAge(state) < this.getMaxAge(); +// } + + @Override + public boolean isBonemealSuccess(Level level, Random random, BlockPos blockPos, BlockState state) { + return true; + } + + @Override + public void performBonemeal(ServerLevel level, Random random, BlockPos blockPos, BlockState state) { + this.growCrops(level, blockPos, state); + } + + protected void createBlockStateDefinition(StateDefinition.Builder p_52286_) { + p_52286_.add(AGE); + } + + @Override + public InteractionResult use(BlockState state, Level level, BlockPos pos, Player player, InteractionHand hand, BlockHitResult hitResult) { + if(state.getValue(AGE) == this.getMaxAge()) { + level.destroyBlock(pos, true); + ItemEntity itemEntity = new ItemEntity(level, pos.getX(), pos.getY(), pos.getZ(), new ItemStack(Items.APPLE)); + level.addFreshEntity(itemEntity); + } + return InteractionResult.PASS; + } + + private static Properties getInitProperties() { + Properties properties = Properties.of(Material.LEAVES); + properties.randomTicks(); + properties.sound(SoundType.CROP); + properties.noOcclusion(); + properties.instabreak(); + return properties; + } +} diff --git a/src/main/java/growthcraft/apples/block/AppleTreeLeaves.java b/src/main/java/growthcraft/apples/block/AppleTreeLeaves.java new file mode 100644 index 0000000..3a79ed7 --- /dev/null +++ b/src/main/java/growthcraft/apples/block/AppleTreeLeaves.java @@ -0,0 +1,80 @@ +package growthcraft.apples.block; + +import growthcraft.apples.init.GrowthcraftApplesBlocks; +import growthcraft.core.utils.BlockPropertiesUtils; +import net.minecraft.core.BlockPos; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.level.block.LeavesBlock; +import net.minecraft.world.level.block.SoundType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.material.Material; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; + +public class AppleTreeLeaves extends LeavesBlock { + + private static final int APPLE_CHECK_AREA = 3; + private static final int MAX_APPLES_IN_AREA = 5; + private static final int TICK_DELAY = 1; + + public AppleTreeLeaves() { + this(getInitProperties()); + } + + public AppleTreeLeaves(Properties p_54422_) { + super(p_54422_); + } + + @Override + public boolean isRandomlyTicking(BlockState p_54449_) { + return true; + } + + @Override + public void randomTick(BlockState state, ServerLevel level, BlockPos pos, Random random) { + super.randomTick(state, level, pos, random); + if (level.getBlockState(pos.below()).isAir()) { + this.tryGrowAppleFruit(level, pos, random); + } + } + + private void tryGrowAppleFruit(ServerLevel level, BlockPos pos, Random random) { + + BlockPos posLowerBound = pos.below(1).south(APPLE_CHECK_AREA).west(APPLE_CHECK_AREA); + BlockPos posUpperBound = pos.below(1).north(APPLE_CHECK_AREA).east(APPLE_CHECK_AREA); + int applesInArea = 0; + + List validGrowthPos = new ArrayList<>(); + + for (BlockPos p : BlockPos.betweenClosed(posLowerBound, posUpperBound)) { + BlockPos surroundingPos = p.immutable(); + if (level.getBlockState(surroundingPos).getBlock() == GrowthcraftApplesBlocks.APPLE_TREE_FRUIT.get()) { + applesInArea++; + } else if (level.getBlockState(surroundingPos).isAir() && level.getBlockState(surroundingPos.above()).getBlock() == GrowthcraftApplesBlocks.APPLE_TREE_LEAVES.get()) { + validGrowthPos.add(surroundingPos); + } + } + + if (applesInArea < MAX_APPLES_IN_AREA && validGrowthPos.size() > 0) { + BlockPos spawnBlockPos = validGrowthPos.get(random.nextInt(validGrowthPos.size())); + + if (level.getBlockState(spawnBlockPos).isAir() && level.getBlockState(spawnBlockPos.above()).getBlock() == GrowthcraftApplesBlocks.APPLE_TREE_LEAVES.get()) { + level.setBlock(spawnBlockPos, GrowthcraftApplesBlocks.APPLE_TREE_FRUIT.get().defaultBlockState(), 2); + } + } + + } + + private static Properties getInitProperties() { + Properties properties = Properties.of(Material.LEAVES); + properties.strength(0.2F); + properties.randomTicks(); + properties.sound(SoundType.GRASS); + properties.noOcclusion(); + properties.isViewBlocking(BlockPropertiesUtils::never); + properties.isSuffocating(BlockPropertiesUtils::never); + return properties; + } +} diff --git a/src/main/java/growthcraft/apples/block/entity/AppleBeeBoxBlockEntity.java b/src/main/java/growthcraft/apples/block/entity/AppleBeeBoxBlockEntity.java new file mode 100644 index 0000000..038e6d4 --- /dev/null +++ b/src/main/java/growthcraft/apples/block/entity/AppleBeeBoxBlockEntity.java @@ -0,0 +1,14 @@ +package growthcraft.apples.block.entity; + +import growthcraft.apiary.block.entity.BeeBoxBlockEntity; +import growthcraft.apples.init.GrowthcraftApplesBlockEntities; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.block.state.BlockState; + +public class AppleBeeBoxBlockEntity extends BeeBoxBlockEntity { + + public AppleBeeBoxBlockEntity(BlockPos pos, BlockState state) { + super(GrowthcraftApplesBlockEntities.BEE_BOX_BLOCK_ENTITY.get(), pos, state, 1200); + } + +} diff --git a/src/main/java/growthcraft/apples/block/entity/AppleRopeBlockEntity.java b/src/main/java/growthcraft/apples/block/entity/AppleRopeBlockEntity.java new file mode 100644 index 0000000..ea9c210 --- /dev/null +++ b/src/main/java/growthcraft/apples/block/entity/AppleRopeBlockEntity.java @@ -0,0 +1,13 @@ +package growthcraft.apples.block.entity; + +import growthcraft.apples.init.GrowthcraftApplesBlockEntities; +import growthcraft.core.block.entity.RopeBlockEntity; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.block.state.BlockState; + +public class AppleRopeBlockEntity extends RopeBlockEntity { + + public AppleRopeBlockEntity(BlockPos blockPos, BlockState blockState) { + super(GrowthcraftApplesBlockEntities.APPLE_WOOD_ROPE_BLOCK_ENTITY.get(), blockPos, blockState); + } +} diff --git a/src/main/java/growthcraft/apples/init/GrowthcraftApplesBlockEntities.java b/src/main/java/growthcraft/apples/init/GrowthcraftApplesBlockEntities.java new file mode 100644 index 0000000..93b0aa6 --- /dev/null +++ b/src/main/java/growthcraft/apples/init/GrowthcraftApplesBlockEntities.java @@ -0,0 +1,34 @@ +package growthcraft.apples.init; + +import growthcraft.apples.block.entity.AppleBeeBoxBlockEntity; +import growthcraft.apples.block.entity.AppleRopeBlockEntity; +import growthcraft.apples.shared.Reference; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraftforge.registries.DeferredRegister; +import net.minecraftforge.registries.ForgeRegistries; +import net.minecraftforge.registries.RegistryObject; + +public class GrowthcraftApplesBlockEntities { + + public static final DeferredRegister> BLOCK_ENTITIES = DeferredRegister.create( + ForgeRegistries.BLOCK_ENTITIES, Reference.MODID + ); + + public static final RegistryObject> APPLE_WOOD_ROPE_BLOCK_ENTITY = BLOCK_ENTITIES.register( + Reference.UnlocalizedName.APPLE_PLANK_FENCE_ROPE_LINEN, + () -> BlockEntityType.Builder.of(AppleRopeBlockEntity::new, + GrowthcraftApplesBlocks.APPLE_PLANK_FENCE_ROPE_LINEN.get() + ).build(null) + ); + + public static final RegistryObject> BEE_BOX_BLOCK_ENTITY = BLOCK_ENTITIES.register( + Reference.UnlocalizedName.BEE_BOX, + () -> BlockEntityType.Builder.of(AppleBeeBoxBlockEntity::new, + GrowthcraftApplesBlocks.BEE_BOX_APPLE.get() + ).build(null) + ); + + private GrowthcraftApplesBlockEntities() { + /* Disable automatic default public constructor */ + } +} diff --git a/src/main/java/growthcraft/apples/init/GrowthcraftApplesBlocks.java b/src/main/java/growthcraft/apples/init/GrowthcraftApplesBlocks.java new file mode 100644 index 0000000..ba06dbb --- /dev/null +++ b/src/main/java/growthcraft/apples/init/GrowthcraftApplesBlocks.java @@ -0,0 +1,160 @@ +package growthcraft.apples.init; + +import java.util.ArrayList; +import java.util.function.Supplier; + +import growthcraft.apples.block.AppleBeeBoxBlock; +import growthcraft.apples.block.AppleRopeBlock; +import growthcraft.apples.block.AppleTreeFruit; +import growthcraft.apples.block.AppleTreeLeaves; +import growthcraft.apples.shared.Reference; +import growthcraft.apples.world.feature.tree.AppleTreeGrower; +import growthcraft.lib.block.GrowthcraftButtonBlock; +import growthcraft.lib.block.GrowthcraftDoorBlock; +import growthcraft.lib.block.GrowthcraftFenceBlock; +import growthcraft.lib.block.GrowthcraftFenceGateBlock; +import growthcraft.lib.block.GrowthcraftLogBlock; +import growthcraft.lib.block.GrowthcraftPlankBlock; +import growthcraft.lib.block.GrowthcraftPressurePlateBlock; +import growthcraft.lib.block.GrowthcraftSaplingBlock; +import growthcraft.lib.block.GrowthcraftSlabBlock; +import growthcraft.lib.block.GrowthcraftStairsBlock; +import growthcraft.lib.block.GrowthcraftTrapDoorBlock; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.BlockItem; +import net.minecraft.world.item.Item; +import net.minecraft.world.level.block.Block; +import net.minecraftforge.registries.DeferredRegister; +import net.minecraftforge.registries.ForgeRegistries; +import net.minecraftforge.registries.RegistryObject; + +public class GrowthcraftApplesBlocks { + + public static final DeferredRegister BLOCKS = DeferredRegister.create( + ForgeRegistries.BLOCKS, Reference.MODID + ); + + public static final RegistryObject APPLE_PLANK = registerBlock( + Reference.UnlocalizedName.APPLE_PLANK, + GrowthcraftPlankBlock::new + ); + + public static final RegistryObject APPLE_PLANK_BUTTON = registerBlock( + Reference.UnlocalizedName.APPLE_PLANK_BUTTON, + GrowthcraftButtonBlock::new + ); + + public static final RegistryObject APPLE_PLANK_DOOR = registerBlock( + Reference.UnlocalizedName.APPLE_PLANK_DOOR, + GrowthcraftDoorBlock::new + ); + + public static final RegistryObject APPLE_PLANK_FENCE = registerBlock( + Reference.UnlocalizedName.APPLE_PLANK_FENCE, + GrowthcraftFenceBlock::new + ); + + public static final RegistryObject APPLE_PLANK_FENCE_GATE = registerBlock( + Reference.UnlocalizedName.APPLE_PLANK_FENCE_GATE, + GrowthcraftFenceGateBlock::new + ); + + public static final RegistryObject APPLE_PLANK_PRESSURE_PLATE = registerBlock( + Reference.UnlocalizedName.APPLE_PLANK_PRESSURE_PLATE, + GrowthcraftPressurePlateBlock::new + ); + + public static final RegistryObject APPLE_PLANK_SLAB = registerBlock( + Reference.UnlocalizedName.APPLE_PLANK_SLAB, + GrowthcraftSlabBlock::new + ); + + public static final RegistryObject APPLE_PLANK_STAIRS = registerBlock( + Reference.UnlocalizedName.APPLE_PLANK_STAIRS, + GrowthcraftStairsBlock::new + ); + + public static final RegistryObject APPLE_PLANK_TRAPDOOR = registerBlock( + Reference.UnlocalizedName.APPLE_PLANK_TRAPDOOR, + GrowthcraftTrapDoorBlock::new + ); + + public static final RegistryObject APPLE_TREE_FRUIT = registerBlock( + Reference.UnlocalizedName.APPLE_TREE_FRUIT, + AppleTreeFruit::new, + true + ); + + public static final RegistryObject APPLE_TREE_LEAVES = registerBlock( + Reference.UnlocalizedName.APPLE_TREE_LEAVES, + AppleTreeLeaves::new + ); + + public static final RegistryObject APPLE_TREE_SAPLING = registerBlock( + Reference.UnlocalizedName.APPLE_TREE_SAPLING, + () -> new GrowthcraftSaplingBlock( + new AppleTreeGrower() + ) + ); + + public static final RegistryObject APPLE_WOOD = registerBlock( + Reference.UnlocalizedName.APPLE_WOOD, + GrowthcraftLogBlock::new + ); + + public static final RegistryObject APPLE_WOOD_LOG = registerBlock( + Reference.UnlocalizedName.APPLE_WOOD_LOG, + GrowthcraftLogBlock::new + ); + + public static final RegistryObject APPLE_WOOD_LOG_STRIPPED = registerBlock( + Reference.UnlocalizedName.APPLE_WOOD_LOG_STRIPPED, + GrowthcraftLogBlock::new + ); + + public static final RegistryObject APPLE_WOOD_STRIPPED = registerBlock( + Reference.UnlocalizedName.APPLE_WOOD_STRIPPED, + GrowthcraftLogBlock::new + ); + + public static final RegistryObject APPLE_PLANK_FENCE_ROPE_LINEN = registerBlock( + Reference.UnlocalizedName.APPLE_PLANK_FENCE_ROPE_LINEN, + AppleRopeBlock::new, + true + ); + + public static final RegistryObject BEE_BOX_APPLE = registerBlock( + Reference.UnlocalizedName.BEE_BOX_APPLE, AppleBeeBoxBlock::new + ); + + private static RegistryObject registerBlock(String name, Supplier block) { + return registerBlock(name, block, false); + } + + private static RegistryObject registerBlock(String name, Supplier block, boolean excludeBlockItemRegistry) { + RegistryObject registryObject = BLOCKS.register(name, block); + if (!excludeBlockItemRegistry) { + registerBlockItem(name, registryObject); + } + return registryObject; + } + + private static void registerBlockItem(String name, RegistryObject blockRegistryObject) { + GrowthcraftApplesItems.ITEMS.register( + name, + () -> new BlockItem(blockRegistryObject.get(), getDefaultItemProperties()) + ); + } + + private static Item.Properties getDefaultItemProperties() { + Item.Properties properties = new Item.Properties().tab(growthcraft.core.shared.Reference.ITEM_GROUP); + return properties; + } + + @Deprecated + private static boolean excludeBlockItemRegistry(ResourceLocation registryName) { + ArrayList excludeBlocks = new ArrayList<>(); + //excludeBlocks.add(Reference.MODID + ":" + Reference.UnlocalizedName.APPLE_TREE_FRUIT); + return excludeBlocks.contains(registryName.toString()); + } +} diff --git a/src/main/java/growthcraft/apples/init/GrowthcraftApplesFluids.java b/src/main/java/growthcraft/apples/init/GrowthcraftApplesFluids.java new file mode 100644 index 0000000..f32f331 --- /dev/null +++ b/src/main/java/growthcraft/apples/init/GrowthcraftApplesFluids.java @@ -0,0 +1,60 @@ +package growthcraft.apples.init; + +import growthcraft.apples.shared.Reference; +import growthcraft.lib.utils.FluidUtils; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.world.level.block.LiquidBlock; +import net.minecraft.world.level.block.state.BlockBehaviour; +import net.minecraft.world.level.material.FlowingFluid; +import net.minecraft.world.level.material.Fluid; +import net.minecraft.world.level.material.Material; +import net.minecraftforge.fluids.FluidAttributes; +import net.minecraftforge.fluids.ForgeFlowingFluid; +import net.minecraftforge.registries.DeferredRegister; +import net.minecraftforge.registries.ForgeRegistries; +import net.minecraftforge.registries.RegistryObject; + +public class GrowthcraftApplesFluids { + + public static final DeferredRegister FLUIDS = DeferredRegister.create( + ForgeRegistries.FLUIDS, Reference.MODID + ); + + public static final RegistryObject APPLE_CIDER_FLUID + = FLUIDS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.APPLE_CIDER).get(FluidUtils.STILL), () -> new ForgeFlowingFluid.Source(GrowthcraftApplesFluids.APPLE_CIDER_PROPERTIES)); + + public static final RegistryObject APPLE_CIDER_FLUID_FLOWING + = FLUIDS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.APPLE_CIDER).get(FluidUtils.FLOWING), () -> new ForgeFlowingFluid.Flowing(GrowthcraftApplesFluids.APPLE_CIDER_PROPERTIES)); + + public static final ForgeFlowingFluid.Properties APPLE_CIDER_PROPERTIES = new ForgeFlowingFluid.Properties( + () -> APPLE_CIDER_FLUID.get(), () -> APPLE_CIDER_FLUID_FLOWING.get(), FluidAttributes.builder(FluidUtils.FluidResource.STILL, FluidUtils.FluidResource.FLOWING) + .sound(SoundEvents.BUCKET_EMPTY).overlay(FluidUtils.FluidResource.OVERLAY) + .color(Reference.FluidColor.APPLE_CIDER_FLUID_COLOR.toIntValue())).slopeFindDistance(2).levelDecreasePerBlock(2) + .block(() -> GrowthcraftApplesFluids.APPLE_CIDER_FLUID_BLOCK.get()).bucket(() -> GrowthcraftApplesItems.APPLE_CIDER_BUCKET.get()); + + public static final RegistryObject APPLE_CIDER_FLUID_BLOCK = GrowthcraftApplesBlocks.BLOCKS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.APPLE_CIDER).get(FluidUtils.STILL), + () -> new LiquidBlock(() -> GrowthcraftApplesFluids.APPLE_CIDER_FLUID.get(), BlockBehaviour.Properties.of(Material.WATER) + .noCollission().strength(100f).noDrops())); + + + public static final RegistryObject APPLE_JUICE_FLUID + = FLUIDS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.APPLE_JUICE).get(FluidUtils.STILL), () -> new ForgeFlowingFluid.Source(GrowthcraftApplesFluids.APPLE_JUICE_PROPERTIES)); + + public static final RegistryObject APPLE_JUICE_FLUID_FLOWING + = FLUIDS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.APPLE_JUICE).get(FluidUtils.FLOWING), () -> new ForgeFlowingFluid.Flowing(GrowthcraftApplesFluids.APPLE_JUICE_PROPERTIES)); + + + public static final ForgeFlowingFluid.Properties APPLE_JUICE_PROPERTIES = new ForgeFlowingFluid.Properties( + () -> APPLE_JUICE_FLUID.get(), () -> APPLE_JUICE_FLUID_FLOWING.get(), FluidAttributes.builder(FluidUtils.FluidResource.STILL, FluidUtils.FluidResource.FLOWING) + .sound(SoundEvents.BUCKET_EMPTY).overlay(FluidUtils.FluidResource.OVERLAY) + .color(Reference.FluidColor.APPLE_JUICE_FLUID_COLOR.toIntValue())).slopeFindDistance(2).levelDecreasePerBlock(2) + .block(() -> GrowthcraftApplesFluids.APPLE_JUICE_FLUID_BLOCK.get()).bucket(() -> GrowthcraftApplesItems.APPLE_JUICE_BUCKET.get()); + + public static final RegistryObject APPLE_JUICE_FLUID_BLOCK = GrowthcraftApplesBlocks.BLOCKS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.APPLE_JUICE).get(FluidUtils.STILL), + () -> new LiquidBlock(() -> GrowthcraftApplesFluids.APPLE_JUICE_FLUID.get(), BlockBehaviour.Properties.of(Material.WATER) + .noCollission().strength(100f).noDrops())); + + private GrowthcraftApplesFluids() { + /* Prevent default public constructor */ + } +} diff --git a/src/main/java/growthcraft/apples/init/GrowthcraftApplesItems.java b/src/main/java/growthcraft/apples/init/GrowthcraftApplesItems.java new file mode 100644 index 0000000..d16eb9a --- /dev/null +++ b/src/main/java/growthcraft/apples/init/GrowthcraftApplesItems.java @@ -0,0 +1,54 @@ +package growthcraft.apples.init; + +import java.util.ArrayList; + +import growthcraft.apples.item.AppleSeedsItem; +import growthcraft.apples.shared.Reference; +import growthcraft.lib.item.GrowthcraftBucketItem; +import growthcraft.lib.utils.FluidUtils; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.Item; +import net.minecraft.world.level.block.ComposterBlock; +import net.minecraftforge.registries.DeferredRegister; +import net.minecraftforge.registries.ForgeRegistries; +import net.minecraftforge.registries.RegistryObject; + +public class GrowthcraftApplesItems { + + public static final DeferredRegister ITEMS = DeferredRegister.create( + ForgeRegistries.ITEMS, Reference.MODID + ); + + public static final RegistryObject APPLE_SEEDS = ITEMS.register( + Reference.UnlocalizedName.APPLE_SEEDS, + AppleSeedsItem::new + ); + + public static final RegistryObject APPLE_CIDER_BUCKET = ITEMS.register( + FluidUtils.getFluidNames(Reference.UnlocalizedName.APPLE_CIDER).get(FluidUtils.BUCKET), + () -> new GrowthcraftBucketItem(GrowthcraftApplesFluids.APPLE_CIDER_FLUID, Reference.FluidColor.APPLE_CIDER_FLUID_COLOR.getColor())); + + public static final RegistryObject APPLE_JUICE_BUCKET = ITEMS.register( + FluidUtils.getFluidNames(Reference.UnlocalizedName.APPLE_JUICE).get(FluidUtils.BUCKET), + () -> new GrowthcraftBucketItem(GrowthcraftApplesFluids.APPLE_JUICE_FLUID, Reference.FluidColor.APPLE_JUICE_FLUID_COLOR.getColor())); + + public static void registerCompostables() { + float f = 0.3F; + float f1 = 0.5F; + float f2 = 0.65F; + float f3 = 0.85F; + float f4 = 1.0F; + + ComposterBlock.COMPOSTABLES.put(GrowthcraftApplesItems.APPLE_SEEDS.get(), f1); + } + + public static boolean excludeItemRegistry(ResourceLocation registryName) { + ArrayList excludeItems = new ArrayList<>(); + //excludeBlocks.add(Reference.MODID + ":" + Reference.UnlocalizedName.APPLE_TREE_FRUIT); + return excludeItems.contains(registryName.toString()); + } + + private GrowthcraftApplesItems() { + /* Prevent default public constructor */ + } +} diff --git a/src/main/java/growthcraft/apples/init/client/GrowthcraftApplesBlockRenders.java b/src/main/java/growthcraft/apples/init/client/GrowthcraftApplesBlockRenders.java new file mode 100644 index 0000000..dea9f72 --- /dev/null +++ b/src/main/java/growthcraft/apples/init/client/GrowthcraftApplesBlockRenders.java @@ -0,0 +1,28 @@ +package growthcraft.apples.init.client; + +import growthcraft.apples.init.GrowthcraftApplesBlocks; +import growthcraft.apples.init.GrowthcraftApplesFluids; +import net.minecraft.client.renderer.ItemBlockRenderTypes; +import net.minecraft.client.renderer.RenderType; + +public class GrowthcraftApplesBlockRenders { + public static void setRenderLayers() { + setFluidRenderLayers(); + setBlockRenderLayers(); + } + + private static void setBlockRenderLayers() { + ItemBlockRenderTypes.setRenderLayer(GrowthcraftApplesBlocks.APPLE_TREE_SAPLING.get(), RenderType.cutout()); + } + + private static void setFluidRenderLayers() { + ItemBlockRenderTypes.setRenderLayer(GrowthcraftApplesFluids.APPLE_CIDER_FLUID.get().getSource(), RenderType.translucent()); + ItemBlockRenderTypes.setRenderLayer(GrowthcraftApplesFluids.APPLE_CIDER_FLUID.get().getFlowing(), RenderType.translucent()); + ItemBlockRenderTypes.setRenderLayer(GrowthcraftApplesFluids.APPLE_JUICE_FLUID.get().getSource(), RenderType.translucent()); + ItemBlockRenderTypes.setRenderLayer(GrowthcraftApplesFluids.APPLE_JUICE_FLUID.get().getFlowing(), RenderType.translucent()); + } + + private GrowthcraftApplesBlockRenders() { + /* Prevent default public constructor */ + } +} diff --git a/src/main/java/growthcraft/apples/init/client/GrowthcraftApplesItemRenders.java b/src/main/java/growthcraft/apples/init/client/GrowthcraftApplesItemRenders.java new file mode 100644 index 0000000..1431950 --- /dev/null +++ b/src/main/java/growthcraft/apples/init/client/GrowthcraftApplesItemRenders.java @@ -0,0 +1,20 @@ +package growthcraft.apples.init.client; + +import growthcraft.apples.init.GrowthcraftApplesFluids; +import growthcraft.apples.shared.Reference; +import growthcraft.lib.client.ItemRendererUtils; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.client.event.ColorHandlerEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; + +@Mod.EventBusSubscriber(value = Dist.CLIENT, bus = Mod.EventBusSubscriber.Bus.MOD, modid = Reference.MODID) +public class GrowthcraftApplesItemRenders { + + @SubscribeEvent + public static void registerItemRenders(ColorHandlerEvent.Item event) { + ItemRendererUtils.registerItem(event, Reference.FluidColor.APPLE_CIDER_FLUID_COLOR.toItemColor(), GrowthcraftApplesFluids.APPLE_CIDER_FLUID.get().getBucket()); + ItemRendererUtils.registerItem(event, Reference.FluidColor.APPLE_JUICE_FLUID_COLOR.toItemColor(), GrowthcraftApplesFluids.APPLE_JUICE_FLUID.get().getBucket()); + } + +} diff --git a/src/main/java/growthcraft/apples/init/config/GrowthcraftApplesConfig.java b/src/main/java/growthcraft/apples/init/config/GrowthcraftApplesConfig.java new file mode 100644 index 0000000..626d8c8 --- /dev/null +++ b/src/main/java/growthcraft/apples/init/config/GrowthcraftApplesConfig.java @@ -0,0 +1,44 @@ +package growthcraft.apples.init.config; + +import com.electronwill.nightconfig.core.file.CommentedFileConfig; +import com.electronwill.nightconfig.core.io.WritingMode; +import net.minecraftforge.common.ForgeConfigSpec; +import net.minecraftforge.fml.loading.FMLPaths; + +import java.io.File; + +public class GrowthcraftApplesConfig { + + public static final ForgeConfigSpec.Builder SERVER_BUILDER = new ForgeConfigSpec.Builder(); + public static final ForgeConfigSpec SERVER; + + public static final String SERVER_CONFIG = "growthcraft-apples-server.toml"; + + static { + initServerConfig(SERVER_BUILDER); + SERVER = SERVER_BUILDER.build(); + } + + private GrowthcraftApplesConfig() { + /* Prevent generation of public constructor */ + } + + public static void loadConfig() { + loadConfig(SERVER, FMLPaths.CONFIGDIR.get().resolve(SERVER_CONFIG).toString()); + } + + public static void loadConfig(ForgeConfigSpec configSpec, String path) { + final CommentedFileConfig fileConfig = CommentedFileConfig.builder( + new File(path)).sync().autosave().writingMode(WritingMode.REPLACE).build(); + + fileConfig.load(); + configSpec.setConfig(fileConfig); + } + + public static void initServerConfig(ForgeConfigSpec.Builder specBuilder) { + // Nothing to config yet + } + + // TODO: Add config for apple growth range check. + +} diff --git a/src/main/java/growthcraft/apples/item/AppleSeedsItem.java b/src/main/java/growthcraft/apples/item/AppleSeedsItem.java new file mode 100644 index 0000000..cebefbf --- /dev/null +++ b/src/main/java/growthcraft/apples/item/AppleSeedsItem.java @@ -0,0 +1,42 @@ +package growthcraft.apples.item; + +import growthcraft.apples.init.GrowthcraftApplesBlocks; +import growthcraft.lib.item.GrowthcraftItem; +import net.minecraft.core.BlockPos; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.sounds.SoundSource; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.context.UseOnContext; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.GrassBlock; +import net.minecraft.world.level.block.state.BlockState; + +public class AppleSeedsItem extends GrowthcraftItem { + + public AppleSeedsItem() { + super(); + } + + @Override + public InteractionResult useOn(UseOnContext context) { + Level level = context.getLevel(); + BlockPos blockpos = context.getClickedPos(); + BlockState blockstate = level.getBlockState(blockpos); + Block targetBlock = blockstate.getBlock(); + if (targetBlock != null && targetBlock instanceof GrassBlock) { + Player playerentity = context.getPlayer(); + level.playSound(playerentity, blockpos, SoundEvents.CROP_PLANTED, SoundSource.BLOCKS, 1.0F, 1.0F); + if (!level.isClientSide) { + level.setBlock(blockpos.above(), GrowthcraftApplesBlocks.APPLE_TREE_SAPLING.get().defaultBlockState(), 11); + if (playerentity != null) { + context.getItemInHand().shrink(1); + } + } + return InteractionResult.SUCCESS; + } else { + return InteractionResult.PASS; + } + } +} diff --git a/src/main/java/growthcraft/apples/shared/Reference.java b/src/main/java/growthcraft/apples/shared/Reference.java new file mode 100644 index 0000000..a111bd8 --- /dev/null +++ b/src/main/java/growthcraft/apples/shared/Reference.java @@ -0,0 +1,61 @@ +package growthcraft.apples.shared; + +import growthcraft.lib.utils.ColorUtils; +import org.codehaus.plexus.util.StringUtils; + +public class Reference { + public static final String NAME_SHORT = "apples"; + + public static final String MODID = growthcraft.core.shared.Reference.MODID + "_" + NAME_SHORT; + + public static final String NAME = String.format("%s %s", + growthcraft.core.shared.Reference.NAME, + StringUtils.capitalise(NAME_SHORT)); + + public static final String VERSION = growthcraft.core.shared.Reference.VERSION; + + public static class UnlocalizedName { + + public static final String APPLE_CIDER = "apple_cider"; + public static final String APPLE_JUICE = "apple_juice"; + public static final String APPLE_PLANK = "apple_plank"; + public static final String APPLE_PLANK_BUTTON = "apple_plank_button"; + public static final String APPLE_PLANK_DOOR = "apple_plank_door"; + public static final String APPLE_PLANK_FENCE = "apple_plank_fence"; + public static final String APPLE_PLANK_FENCE_GATE = "apple_plank_fence_gate"; + public static final String APPLE_PLANK_FENCE_ROPE_LINEN = "apple_plank_fence_rope_linen"; + public static final String APPLE_PLANK_PRESSURE_PLATE = "apple_plank_pressure_plate"; + public static final String APPLE_PLANK_SLAB = "apple_plank_slab"; + public static final String APPLE_PLANK_STAIRS = "apple_plank_stairs"; + public static final String APPLE_PLANK_TRAPDOOR = "apple_plank_trapdoor"; + public static final String APPLE_SEEDS = "apple_seeds"; + public static final String APPLE_TREE_FRUIT = "apple_tree_fruit"; + public static final String APPLE_TREE_LEAVES = "apple_tree_leaves"; + public static final String APPLE_TREE_SAPLING = "apple_tree_sapling"; + public static final String APPLE_WOOD = "apple_wood"; + public static final String APPLE_WOOD_STRIPPED = "apple_wood_stripped"; + public static final String APPLE_WOOD_LOG = "apple_wood_log"; + public static final String APPLE_WOOD_LOG_STRIPPED = "apple_wood_log_stripped"; + public static final String BEE_BOX = "bee_box"; + public static final String BEE_BOX_APPLE = "bee_box_apple"; + public static final String APPLE_TREE = "apple_tree"; + + private UnlocalizedName() { + /* Disable Automatic Creation of Public Constructor */ + } + } + + public static class FluidColor { + + public static final ColorUtils.GrowthcraftColor APPLE_JUICE_FLUID_COLOR = new ColorUtils.GrowthcraftColor(0xFFFFD627); + public static final ColorUtils.GrowthcraftColor APPLE_CIDER_FLUID_COLOR = new ColorUtils.GrowthcraftColor(0xFFDF9C40); + + private FluidColor() { + /* Disable Automatic Creation of Public Constructor */ + } + } + + private Reference() { + /* Disable Automatic Creation of Public Constructor */ + } +} diff --git a/src/main/java/growthcraft/apples/world/GrowthcraftApplesConfiguredFeatures.java b/src/main/java/growthcraft/apples/world/GrowthcraftApplesConfiguredFeatures.java new file mode 100644 index 0000000..653c87c --- /dev/null +++ b/src/main/java/growthcraft/apples/world/GrowthcraftApplesConfiguredFeatures.java @@ -0,0 +1,42 @@ +package growthcraft.apples.world; + +import java.util.List; + +import growthcraft.apples.init.GrowthcraftApplesBlocks; +import net.minecraft.core.Holder; +import net.minecraft.data.worldgen.features.FeatureUtils; +import net.minecraft.data.worldgen.placement.PlacementUtils; +import net.minecraft.util.valueproviders.ConstantInt; +import net.minecraft.world.level.levelgen.feature.ConfiguredFeature; +import net.minecraft.world.level.levelgen.feature.Feature; +import net.minecraft.world.level.levelgen.feature.WeightedPlacedFeature; +import net.minecraft.world.level.levelgen.feature.configurations.RandomFeatureConfiguration; +import net.minecraft.world.level.levelgen.feature.configurations.TreeConfiguration; +import net.minecraft.world.level.levelgen.feature.featuresize.TwoLayersFeatureSize; +import net.minecraft.world.level.levelgen.feature.foliageplacers.BlobFoliagePlacer; +import net.minecraft.world.level.levelgen.feature.stateproviders.BlockStateProvider; +import net.minecraft.world.level.levelgen.feature.trunkplacers.StraightTrunkPlacer; +import net.minecraft.world.level.levelgen.placement.PlacedFeature; + +public class GrowthcraftApplesConfiguredFeatures { + + public static final Holder> APPLE_TREE_KEY = + FeatureUtils.register("ebony", Feature.TREE, new TreeConfiguration.TreeConfigurationBuilder( + // Trunk block + BlockStateProvider.simple(GrowthcraftApplesBlocks.APPLE_WOOD_LOG.get()), + // Trunk placer (baseHeight, heightRandA, heightRandB) + new StraightTrunkPlacer(5, 2, 0), + // Leaves block + BlockStateProvider.simple(GrowthcraftApplesBlocks.APPLE_TREE_LEAVES.get()), + // Leaves placer (radius, offset, height) + new BlobFoliagePlacer(ConstantInt.of(2), ConstantInt.of(0), 3), + // Spawn Area Saturation (limit, lowerSize, upperSize) + new TwoLayersFeatureSize(1, 0, 2)).build()); + + public static final Holder APPLE_TREE_CHECKED = PlacementUtils.register("ebony_checked", APPLE_TREE_KEY, + PlacementUtils.filteredByBlockSurvival(GrowthcraftApplesBlocks.APPLE_TREE_SAPLING.get())); + + public static final Holder> APPLE_TREE_SPAWN = + FeatureUtils.register("apple_tree_spawn", Feature.RANDOM_SELECTOR, + new RandomFeatureConfiguration(List.of(new WeightedPlacedFeature(APPLE_TREE_CHECKED,0.5F)), APPLE_TREE_CHECKED)); +} diff --git a/src/main/java/growthcraft/apples/world/GrowthcraftApplesPlacedFeatures.java b/src/main/java/growthcraft/apples/world/GrowthcraftApplesPlacedFeatures.java new file mode 100644 index 0000000..5ef4973 --- /dev/null +++ b/src/main/java/growthcraft/apples/world/GrowthcraftApplesPlacedFeatures.java @@ -0,0 +1,23 @@ +package growthcraft.apples.world; + +import growthcraft.apples.init.GrowthcraftApplesBlocks; +import growthcraft.apples.shared.Reference; +import net.minecraft.core.Holder; +import net.minecraft.core.Registry; +import net.minecraft.data.worldgen.placement.PlacementUtils; +import net.minecraft.data.worldgen.placement.VegetationPlacements; +import net.minecraft.world.level.levelgen.feature.ConfiguredFeature; +import net.minecraft.world.level.levelgen.placement.PlacedFeature; +import net.minecraftforge.registries.DeferredRegister; +import net.minecraftforge.registries.RegistryObject; + +public class GrowthcraftApplesPlacedFeatures { + + public static final DeferredRegister PLACED_FEATURES = DeferredRegister.create(Registry.PLACED_FEATURE_REGISTRY, Reference.MODID); + + public static final RegistryObject APPLE_TREE_PLACED_KEY = PLACED_FEATURES.register(Reference.UnlocalizedName.APPLE_TREE + "_placed", + () -> new PlacedFeature((Holder>)(Holder>) + GrowthcraftApplesConfiguredFeatures.APPLE_TREE_SPAWN, VegetationPlacements.treePlacement( + PlacementUtils.countExtra(3, 0.1f, 2), GrowthcraftApplesBlocks.APPLE_TREE_SAPLING.get()))); + +} diff --git a/src/main/java/growthcraft/apples/world/feature/tree/AppleTreeGrower.java b/src/main/java/growthcraft/apples/world/feature/tree/AppleTreeGrower.java new file mode 100644 index 0000000..03b91ac --- /dev/null +++ b/src/main/java/growthcraft/apples/world/feature/tree/AppleTreeGrower.java @@ -0,0 +1,19 @@ +package growthcraft.apples.world.feature.tree; + +import java.util.Random; + +import org.jetbrains.annotations.Nullable; + +import growthcraft.apples.world.GrowthcraftApplesConfiguredFeatures; +import net.minecraft.core.Holder; +import net.minecraft.world.level.block.grower.AbstractTreeGrower; +import net.minecraft.world.level.levelgen.feature.ConfiguredFeature; + +public class AppleTreeGrower extends AbstractTreeGrower { + + @Nullable + @Override + protected Holder> getConfiguredFeature(Random randomSource, boolean largeHive) { + return (@Nullable Holder>) GrowthcraftApplesConfiguredFeatures.APPLE_TREE_KEY; + } +} diff --git a/src/main/java/growthcraft/bamboo/GrowthcraftBamboo.java b/src/main/java/growthcraft/bamboo/GrowthcraftBamboo.java new file mode 100644 index 0000000..b89ea25 --- /dev/null +++ b/src/main/java/growthcraft/bamboo/GrowthcraftBamboo.java @@ -0,0 +1,56 @@ +package growthcraft.bamboo; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import growthcraft.bamboo.init.GrowthcraftBambooBlockEntities; +import growthcraft.bamboo.init.GrowthcraftBambooBlocks; +import growthcraft.bamboo.init.GrowthcraftBambooItems; +import growthcraft.bamboo.init.client.GrowthcraftBambooBlockRenderers; +import growthcraft.bamboo.init.config.GrowthcraftBambooConfig; +import growthcraft.bamboo.shared.Reference; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.event.server.ServerStartingEvent; +import net.minecraftforge.eventbus.api.IEventBus; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; +import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; +import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; + + +@Mod(Reference.MODID) +@Mod.EventBusSubscriber(modid = Reference.MODID, bus = Mod.EventBusSubscriber.Bus.MOD) +public class GrowthcraftBamboo { + public static final Logger LOGGER = LogManager.getLogger(Reference.MODID); + + public GrowthcraftBamboo() { + IEventBus modEventBus = FMLJavaModLoadingContext.get().getModEventBus(); + modEventBus.addListener(this::setup); + modEventBus.addListener(this::clientSetupEvent); + + // Config + GrowthcraftBambooConfig.loadConfig(); + + // Blocks, Items, Fluids, Block Entities, Containers + GrowthcraftBambooBlocks.BLOCKS.register(modEventBus); + GrowthcraftBambooItems.ITEMS.register(modEventBus); + GrowthcraftBambooBlockEntities.BLOCK_ENTITIES.register(modEventBus); + + MinecraftForge.EVENT_BUS.register(this); + } + + private void clientSetupEvent(final FMLClientSetupEvent event) { + GrowthcraftBambooBlockRenderers.setRenderLayers(); + } + + private void setup(final FMLCommonSetupEvent event) { + // Do Nothing for now ... + } + + @SubscribeEvent + public void onServerStarting(ServerStartingEvent event) { + LOGGER.info("Growthcraft Bamboo starting up ..."); + } + +} diff --git a/src/main/java/growthcraft/bamboo/block/BambooBeeBoxBlock.java b/src/main/java/growthcraft/bamboo/block/BambooBeeBoxBlock.java new file mode 100644 index 0000000..b64f94a --- /dev/null +++ b/src/main/java/growthcraft/bamboo/block/BambooBeeBoxBlock.java @@ -0,0 +1,29 @@ +package growthcraft.bamboo.block; + +import growthcraft.apiary.block.BeeBoxBlock; +import growthcraft.bamboo.init.GrowthcraftBambooBlockEntities; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityTicker; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockState; +import org.jetbrains.annotations.Nullable; + +public class BambooBeeBoxBlock extends BeeBoxBlock { + + @Override + public @Nullable BlockEntity newBlockEntity(BlockPos pos, BlockState state) { + return GrowthcraftBambooBlockEntities.BAMBOO_BEE_BOX_BLOCK_ENTITY.get().create(pos, state); + } + + @Override + public @Nullable BlockEntityTicker getTicker(Level level, BlockState state, BlockEntityType blockEntityType) { + return createTickerHelper( + blockEntityType, + GrowthcraftBambooBlockEntities.BAMBOO_BEE_BOX_BLOCK_ENTITY.get(), + (worldLevel, pos, blockState, blockEntity) -> (blockEntity).tick() + ); + } + +} diff --git a/src/main/java/growthcraft/bamboo/block/BambooLogBlock.java b/src/main/java/growthcraft/bamboo/block/BambooLogBlock.java new file mode 100644 index 0000000..96e8820 --- /dev/null +++ b/src/main/java/growthcraft/bamboo/block/BambooLogBlock.java @@ -0,0 +1,42 @@ +package growthcraft.bamboo.block; + +import growthcraft.lib.block.GrowthcraftLogBlock; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.SoundType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.material.Material; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.VoxelShape; + +public class BambooLogBlock extends GrowthcraftLogBlock { + protected static final VoxelShape BOUNDING_BOX = Block.box( + 4.0D, 0.0D, 4.0D, + 12.0D, 16.0D, 12.0D + ); + + public BambooLogBlock() { + super(getInitProperties(Material.BAMBOO)); + } + + private static Properties getInitProperties(Material material) { + Properties properties = Properties.of(material); + properties.strength(1.0F, 1.0F); + properties.sound(SoundType.BAMBOO); + properties.noCollission(); + return properties; + } + + @Override + public VoxelShape getShape(BlockState p_60555_, BlockGetter p_60556_, BlockPos p_60557_, CollisionContext p_60558_) { + return BOUNDING_BOX; + } + + @Override + public VoxelShape getCollisionShape(BlockState p_60572_, BlockGetter p_60573_, BlockPos p_60574_, CollisionContext p_60575_) { + return BOUNDING_BOX; + } + +} + diff --git a/src/main/java/growthcraft/bamboo/block/BambooRopeBlock.java b/src/main/java/growthcraft/bamboo/block/BambooRopeBlock.java new file mode 100644 index 0000000..06e102e --- /dev/null +++ b/src/main/java/growthcraft/bamboo/block/BambooRopeBlock.java @@ -0,0 +1,16 @@ +package growthcraft.bamboo.block; + +import growthcraft.bamboo.init.GrowthcraftBambooBlockEntities; +import growthcraft.core.block.RopeBlock; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.state.BlockState; +import org.jetbrains.annotations.Nullable; + +public class BambooRopeBlock extends RopeBlock { + @Nullable + @Override + public BlockEntity newBlockEntity(BlockPos blockPos, BlockState blockState) { + return GrowthcraftBambooBlockEntities.BAMBOO_FENCE_ROPE_BLOCK_ENTITY.get().create(blockPos, blockState); + } +} diff --git a/src/main/java/growthcraft/bamboo/block/entity/BambooBeeBoxBlockEntity.java b/src/main/java/growthcraft/bamboo/block/entity/BambooBeeBoxBlockEntity.java new file mode 100644 index 0000000..103470a --- /dev/null +++ b/src/main/java/growthcraft/bamboo/block/entity/BambooBeeBoxBlockEntity.java @@ -0,0 +1,14 @@ +package growthcraft.bamboo.block.entity; + +import growthcraft.apiary.block.entity.BeeBoxBlockEntity; +import growthcraft.bamboo.init.GrowthcraftBambooBlockEntities; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.block.state.BlockState; + +public class BambooBeeBoxBlockEntity extends BeeBoxBlockEntity { + + public BambooBeeBoxBlockEntity(BlockPos pos, BlockState state) { + super(GrowthcraftBambooBlockEntities.BAMBOO_BEE_BOX_BLOCK_ENTITY.get(), pos, state, 1200); + } + +} diff --git a/src/main/java/growthcraft/bamboo/block/entity/BambooRopeBlockEntity.java b/src/main/java/growthcraft/bamboo/block/entity/BambooRopeBlockEntity.java new file mode 100644 index 0000000..5218994 --- /dev/null +++ b/src/main/java/growthcraft/bamboo/block/entity/BambooRopeBlockEntity.java @@ -0,0 +1,13 @@ +package growthcraft.bamboo.block.entity; + +import growthcraft.bamboo.init.GrowthcraftBambooBlockEntities; +import growthcraft.core.block.entity.RopeBlockEntity; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.block.state.BlockState; + +public class BambooRopeBlockEntity extends RopeBlockEntity { + + public BambooRopeBlockEntity(BlockPos blockPos, BlockState blockState) { + super(GrowthcraftBambooBlockEntities.BAMBOO_FENCE_ROPE_BLOCK_ENTITY.get(), blockPos, blockState); + } +} diff --git a/src/main/java/growthcraft/bamboo/init/GrowthcraftBambooBlockEntities.java b/src/main/java/growthcraft/bamboo/init/GrowthcraftBambooBlockEntities.java new file mode 100644 index 0000000..bad5997 --- /dev/null +++ b/src/main/java/growthcraft/bamboo/init/GrowthcraftBambooBlockEntities.java @@ -0,0 +1,34 @@ +package growthcraft.bamboo.init; + +import growthcraft.bamboo.block.entity.BambooBeeBoxBlockEntity; +import growthcraft.bamboo.block.entity.BambooRopeBlockEntity; +import growthcraft.bamboo.shared.Reference; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraftforge.registries.DeferredRegister; +import net.minecraftforge.registries.ForgeRegistries; +import net.minecraftforge.registries.RegistryObject; + +public class GrowthcraftBambooBlockEntities { + + public static final DeferredRegister> BLOCK_ENTITIES = DeferredRegister.create( + ForgeRegistries.BLOCK_ENTITIES, Reference.MODID + ); + + public static final RegistryObject> BAMBOO_FENCE_ROPE_BLOCK_ENTITY = BLOCK_ENTITIES.register( + Reference.UnlocalizedName.BAMBOO_PLANK_FENCE_ROPE_LINEN, + () -> BlockEntityType.Builder.of(BambooRopeBlockEntity::new, + GrowthcraftBambooBlocks.BAMBOO_PLANK_FENCE_ROPE_LINEN.get() + ).build(null) + ); + + public static final RegistryObject> BAMBOO_BEE_BOX_BLOCK_ENTITY = BLOCK_ENTITIES.register( + Reference.UnlocalizedName.BAMBOO_PLANK_BEE_BOX, + () -> BlockEntityType.Builder.of(BambooBeeBoxBlockEntity::new, + GrowthcraftBambooBlocks.BAMBOO_PLANK_BEE_BOX.get() + ).build(null) + ); + + private GrowthcraftBambooBlockEntities() { + /* Disable automatic default public constructor */ + } +} diff --git a/src/main/java/growthcraft/bamboo/init/GrowthcraftBambooBlocks.java b/src/main/java/growthcraft/bamboo/init/GrowthcraftBambooBlocks.java new file mode 100644 index 0000000..f668708 --- /dev/null +++ b/src/main/java/growthcraft/bamboo/init/GrowthcraftBambooBlocks.java @@ -0,0 +1,134 @@ +package growthcraft.bamboo.init; + +import java.util.ArrayList; +import java.util.function.Supplier; + +import growthcraft.bamboo.block.BambooBeeBoxBlock; +import growthcraft.bamboo.block.BambooLogBlock; +import growthcraft.bamboo.block.BambooRopeBlock; +import growthcraft.bamboo.shared.Reference; +import growthcraft.lib.block.GrowthcraftButtonBlock; +import growthcraft.lib.block.GrowthcraftDoorBlock; +import growthcraft.lib.block.GrowthcraftFenceBlock; +import growthcraft.lib.block.GrowthcraftFenceGateBlock; +import growthcraft.lib.block.GrowthcraftPlankBlock; +import growthcraft.lib.block.GrowthcraftPressurePlateBlock; +import growthcraft.lib.block.GrowthcraftSlabBlock; +import growthcraft.lib.block.GrowthcraftStairsBlock; +import growthcraft.lib.block.GrowthcraftTrapDoorBlock; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.BlockItem; +import net.minecraft.world.item.Item; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockBehaviour; +import net.minecraft.world.level.material.Material; +import net.minecraftforge.registries.DeferredRegister; +import net.minecraftforge.registries.ForgeRegistries; +import net.minecraftforge.registries.RegistryObject; + +public class GrowthcraftBambooBlocks { + + public static final DeferredRegister BLOCKS = DeferredRegister.create( + ForgeRegistries.BLOCKS, Reference.MODID + ); + + public static final RegistryObject BAMBOO_PLANK = registerBlock( + Reference.UnlocalizedName.BAMBOO_PLANK, () -> new GrowthcraftPlankBlock(Material.BAMBOO) + ); + + public static final RegistryObject BAMBOO_PLANK_STAIRS = registerBlock( + Reference.UnlocalizedName.BAMBOO_PLANK_STAIRS, + () -> new GrowthcraftStairsBlock( + () -> GrowthcraftBambooBlocks.BAMBOO_PLANK.get().defaultBlockState(), + BlockBehaviour.Properties.copy(GrowthcraftBambooBlocks.BAMBOO_PLANK.get()) + ) + ); + + public static final RegistryObject BAMBOO_PLANK_BUTTON = registerBlock( + Reference.UnlocalizedName.BAMBOO_PLANK_BUTTON, GrowthcraftButtonBlock::new + ); + + public static final RegistryObject BAMBOO_PLANK_DOOR = registerBlock( + Reference.UnlocalizedName.BAMBOO_PLANK_DOOR, GrowthcraftDoorBlock::new + ); + + public static final RegistryObject BAMBOO_PLANK_FENCE = registerBlock( + Reference.UnlocalizedName.BAMBOO_PLANK_FENCE, GrowthcraftFenceBlock::new + ); + + public static final RegistryObject BAMBOO_PLANK_FENCE_ROPE_LINEN = registerBlock( + Reference.UnlocalizedName.BAMBOO_PLANK_FENCE_ROPE_LINEN, + BambooRopeBlock::new, + true + ); + + public static final RegistryObject BAMBOO_PLANK_BEE_BOX = registerBlock( + Reference.UnlocalizedName.BAMBOO_PLANK_BEE_BOX, + BambooBeeBoxBlock::new + ); + + public static final RegistryObject BAMBOO_PLANK_FENCE_GATE = registerBlock( + Reference.UnlocalizedName.BAMBOO_PLANK_FENCE_GATE, GrowthcraftFenceGateBlock::new + ); + + public static final RegistryObject BAMBOO_PLANK_PRESSURE_PLATE = registerBlock( + Reference.UnlocalizedName.BAMBOO_PLANK_PRESSURE_PLATE, GrowthcraftPressurePlateBlock::new + ); + + public static final RegistryObject BAMBOO_PLANK_SLAB = registerBlock( + Reference.UnlocalizedName.BAMBOO_PLANK_SLAB, GrowthcraftSlabBlock::new + ); + + public static final RegistryObject BAMBOO_PLANK_TRAPDOOR = registerBlock( + Reference.UnlocalizedName.BAMBOO_PLANK_TRAPDOOR, GrowthcraftTrapDoorBlock::new + ); + + public static final RegistryObject BAMBOO_WOOD = registerBlock( + Reference.UnlocalizedName.BAMBOO_WOOD, BambooLogBlock::new + ); + + public static final RegistryObject BAMBOO_WOOD_LOG = registerBlock( + Reference.UnlocalizedName.BAMBOO_WOOD_LOG, BambooLogBlock::new + ); + + public static final RegistryObject BAMBOO_WOOD_LOG_STRIPPED = registerBlock( + Reference.UnlocalizedName.BAMBOO_WOOD_LOG_STRIPPED, BambooLogBlock::new + ); + + public static final RegistryObject BAMBOO_WOOD_STRIPPED = registerBlock( + Reference.UnlocalizedName.BAMBOO_WOOD_STRIPPED, BambooLogBlock::new + ); + + private static RegistryObject registerBlock(String name, Supplier block) { + return registerBlock(name, block, false); + } + + private static RegistryObject registerBlock(String name, Supplier block, boolean excludeBlockItemRegistry) { + RegistryObject registryObject = BLOCKS.register(name, block); + if (!excludeBlockItemRegistry) { + registerBlockItem(name, registryObject); + } + return registryObject; + } + + private static void registerBlockItem(String name, RegistryObject blockRegistryObject) { + GrowthcraftBambooItems.ITEMS.register( + name, + () -> new BlockItem(blockRegistryObject.get(), getDefaultItemProperties()) + ); + } + + private static Item.Properties getDefaultItemProperties() { + Item.Properties properties = new Item.Properties().tab(growthcraft.core.shared.Reference.ITEM_GROUP); + return properties; + } + + @Deprecated + private static boolean excludeBlockItemRegistry(ResourceLocation registryName) { + ArrayList excludeBlocks = new ArrayList<>(); + //excludeBlocks.add(Reference.MODID + ":" + Reference.UnlocalizedName.APPLE_TREE_FRUIT); + return excludeBlocks.contains(registryName.toString()); + } + + +} \ No newline at end of file diff --git a/src/main/java/growthcraft/bamboo/init/GrowthcraftBambooItems.java b/src/main/java/growthcraft/bamboo/init/GrowthcraftBambooItems.java new file mode 100644 index 0000000..4d72795 --- /dev/null +++ b/src/main/java/growthcraft/bamboo/init/GrowthcraftBambooItems.java @@ -0,0 +1,37 @@ +package growthcraft.bamboo.init; + +import java.util.ArrayList; + +import growthcraft.bamboo.shared.Reference; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.Item; +import net.minecraftforge.registries.DeferredRegister; +import net.minecraftforge.registries.ForgeRegistries; + +public class GrowthcraftBambooItems { + public static final DeferredRegister ITEMS = DeferredRegister.create( + ForgeRegistries.ITEMS, Reference.MODID + ); + + public static void registerCompostables() { + float f = 0.3F; + float f1 = 0.5F; + float f2 = 0.65F; + float f3 = 0.85F; + float f4 = 1.0F; + + // ComposterBlock.COMPOSTABLES.put(GrowthcraftRiceItems.RICE.get(), f2); + + } + + public static boolean excludeItemRegistry(ResourceLocation registryName) { + ArrayList excludeItems = new ArrayList<>(); + //excludeItems.add(Reference.MODID + ":" + Reference.UnlocalizedName.APPLE_TREE_FRUIT); + return excludeItems.contains(registryName.toString()); + } + + private GrowthcraftBambooItems() { + /* Prevent default public constructor */ + } + +} diff --git a/src/main/java/growthcraft/bamboo/init/client/GrowthcraftBambooBlockRenderers.java b/src/main/java/growthcraft/bamboo/init/client/GrowthcraftBambooBlockRenderers.java new file mode 100644 index 0000000..53f095a --- /dev/null +++ b/src/main/java/growthcraft/bamboo/init/client/GrowthcraftBambooBlockRenderers.java @@ -0,0 +1,16 @@ +package growthcraft.bamboo.init.client; + +import growthcraft.bamboo.init.GrowthcraftBambooBlocks; +import net.minecraft.client.renderer.ItemBlockRenderTypes; +import net.minecraft.client.renderer.RenderType; + +public class GrowthcraftBambooBlockRenderers { + + public static void setRenderLayers() { + setBlockRenderLayers(); + } + + private static void setBlockRenderLayers() { + ItemBlockRenderTypes.setRenderLayer(GrowthcraftBambooBlocks.BAMBOO_PLANK_DOOR.get(), RenderType.cutout()); + } +} diff --git a/src/main/java/growthcraft/bamboo/init/config/GrowthcraftBambooConfig.java b/src/main/java/growthcraft/bamboo/init/config/GrowthcraftBambooConfig.java new file mode 100644 index 0000000..003d543 --- /dev/null +++ b/src/main/java/growthcraft/bamboo/init/config/GrowthcraftBambooConfig.java @@ -0,0 +1,39 @@ +package growthcraft.bamboo.init.config; + +import com.electronwill.nightconfig.core.file.CommentedFileConfig; +import com.electronwill.nightconfig.core.io.WritingMode; +import net.minecraftforge.common.ForgeConfigSpec; +import net.minecraftforge.fml.loading.FMLPaths; + +import java.io.File; + +public class GrowthcraftBambooConfig { + public static final ForgeConfigSpec.Builder SERVER_BUILDER = new ForgeConfigSpec.Builder(); + public static final ForgeConfigSpec SERVER; + public static final String SERVER_CONFIG = "growthcraft-bamboo-server.toml"; + + static { + initServerConfig(SERVER_BUILDER); + SERVER = SERVER_BUILDER.build(); + } + + private GrowthcraftBambooConfig() { + /* Prevent generation of public constructor */ + } + + public static void loadConfig() { + loadConfig(SERVER, FMLPaths.CONFIGDIR.get().resolve(SERVER_CONFIG).toString()); + } + + public static void loadConfig(ForgeConfigSpec configSpec, String path) { + final CommentedFileConfig fileConfig = CommentedFileConfig.builder( + new File(path)).sync().autosave().writingMode(WritingMode.REPLACE).build(); + + fileConfig.load(); + configSpec.setConfig(fileConfig); + } + + public static void initServerConfig(ForgeConfigSpec.Builder specBuilder) { + // Nothing to config yet + } +} diff --git a/src/main/java/growthcraft/bamboo/shared/Reference.java b/src/main/java/growthcraft/bamboo/shared/Reference.java new file mode 100644 index 0000000..0a14480 --- /dev/null +++ b/src/main/java/growthcraft/bamboo/shared/Reference.java @@ -0,0 +1,53 @@ +package growthcraft.bamboo.shared; + +import org.codehaus.plexus.util.StringUtils; + +public class Reference { + public static final String NAME_SHORT = "bamboo"; + + public static final String MODID = growthcraft.core.shared.Reference.MODID + "_" + NAME_SHORT; + + public static final String NAME = String.format("%s %s", + growthcraft.core.shared.Reference.NAME, + StringUtils.capitalise(NAME_SHORT)); + + public static final String VERSION = growthcraft.core.shared.Reference.VERSION; + + public static class UnlocalizedName { + public static final String BAMBOO_PLANK = "bamboo_plank"; + public static final String BAMBOO_PLANK_BUTTON = "bamboo_plank_button"; + public static final String BAMBOO_PLANK_DOOR = "bamboo_plank_door"; + public static final String BAMBOO_PLANK_FENCE = "bamboo_plank_fence"; + public static final String BAMBOO_PLANK_FENCE_ROPE_LINEN = "bamboo_plank_fence_rope_linen"; + + public static final String BAMBOO_PLANK_FENCE_GATE = "bamboo_plank_fence_gate"; + public static final String BAMBOO_PLANK_PRESSURE_PLATE = "bamboo_plank_pressure_plate"; + public static final String BAMBOO_PLANK_SLAB = "bamboo_plank_slab"; + public static final String BAMBOO_PLANK_STAIRS = "bamboo_plank_stairs"; + public static final String BAMBOO_PLANK_TRAPDOOR = "bamboo_plank_trapdoor"; + public static final String BAMBOO_SEEDS = "bamboo_seeds"; + public static final String BAMBOO_TREE_FRUIT = "bamboo_tree_fruit"; + public static final String BAMBOO_TREE_LEAVES = "bamboo_tree_leaves"; + public static final String BAMBOO_TREE_SAPLING = "bamboo_tree_sapling"; + public static final String BAMBOO_WOOD = "bamboo_wood"; + public static final String BAMBOO_WOOD_STRIPPED = "bamboo_wood_stripped"; + public static final String BAMBOO_WOOD_LOG = "bamboo_wood_log"; + public static final String BAMBOO_WOOD_LOG_STRIPPED = "bamboo_wood_log_stripped"; + public static final String BAMBOO_PLANK_BEE_BOX = "bee_box_bamboo"; + + private UnlocalizedName() { + /* Disable Automatic Creation of Public Constructor */ + } + } + + public static class FluidColor { + + private FluidColor() { + /* Disable Automatic Creation of Public Constructor */ + } + } + + private Reference() { + /* Disable Automatic Creation of Public Constructor */ + } +} diff --git a/src/main/java/growthcraft/cellar/GrowthcraftCellar.java b/src/main/java/growthcraft/cellar/GrowthcraftCellar.java new file mode 100644 index 0000000..57a1b7a --- /dev/null +++ b/src/main/java/growthcraft/cellar/GrowthcraftCellar.java @@ -0,0 +1,102 @@ +package growthcraft.cellar; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import growthcraft.cellar.init.GrowthcraftCellarBlockEntities; +import growthcraft.cellar.init.GrowthcraftCellarBlocks; +import growthcraft.cellar.init.GrowthcraftCellarFluids; +import growthcraft.cellar.init.GrowthcraftCellarItems; +import growthcraft.cellar.init.GrowthcraftCellarMenus; +import growthcraft.cellar.init.GrowthcraftCellarRecipes; +import growthcraft.cellar.init.client.GrowthcraftCellarBlockEntityRenderers; +import growthcraft.cellar.init.client.GrowthcraftCellarBlockRenderers; +import growthcraft.cellar.init.config.GrowthcraftCellarConfig; +import growthcraft.cellar.lib.networking.GrowthcraftCellarMessages; +import growthcraft.cellar.screen.BrewKettleScreen; +import growthcraft.cellar.screen.CultureJarScreen; +import growthcraft.cellar.screen.FermentationBarrelScreen; +import growthcraft.cellar.screen.FruitPressScreen; +import growthcraft.cellar.screen.RoasterScreen; +import growthcraft.cellar.shared.Reference; +import net.minecraft.client.gui.screens.MenuScreens; +import net.minecraftforge.client.event.EntityRenderersEvent; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.event.server.ServerStartingEvent; +import net.minecraftforge.eventbus.api.IEventBus; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; +import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; +import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; + + +@Mod(Reference.MODID) +@Mod.EventBusSubscriber(modid = Reference.MODID, bus = Mod.EventBusSubscriber.Bus.MOD) +public class GrowthcraftCellar { + public static final Logger LOGGER = LogManager.getLogger(Reference.MODID); + + public GrowthcraftCellar() { + IEventBus modEventBus = FMLJavaModLoadingContext.get().getModEventBus(); + modEventBus.addListener(this::setup); + modEventBus.addListener(this::clientSetupEvent); + modEventBus.addListener(this::onRegisterRenderers); + + // Config + GrowthcraftCellarConfig.loadConfig(); + + // Blocks, Items, Fluids, Block Entities, Containers + GrowthcraftCellarBlocks.BLOCKS.register(modEventBus); + GrowthcraftCellarItems.ITEMS.register(modEventBus); + GrowthcraftCellarBlockEntities.BLOCK_ENTITIES.register(modEventBus); + GrowthcraftCellarFluids.FLUIDS.register(modEventBus); + GrowthcraftCellarMenus.MENUS.register(modEventBus); + + GrowthcraftCellarRecipes.register(modEventBus); + + MinecraftForge.EVENT_BUS.register(this); + } + + + private void clientSetupEvent(final FMLClientSetupEvent event) { + GrowthcraftCellarBlockRenderers.setRenderLayers(); + + MenuScreens.register( + GrowthcraftCellarMenus.BREW_KETTLE_MENU.get(), + BrewKettleScreen::new + ); + + MenuScreens.register( + GrowthcraftCellarMenus.CULTURE_JAR_MENU.get(), + CultureJarScreen::new + ); + + MenuScreens.register( + GrowthcraftCellarMenus.FERMENTATION_BARREL_MENU.get(), + FermentationBarrelScreen::new + ); + + MenuScreens.register( + GrowthcraftCellarMenus.FRUIT_PRESS_MENU.get(), + FruitPressScreen::new + ); + + MenuScreens.register( + GrowthcraftCellarMenus.ROASTER_MENU.get(), + RoasterScreen::new) + ; + } + + private void setup(final FMLCommonSetupEvent event) { + GrowthcraftCellarMessages.register(); + } + + @SubscribeEvent + public void onServerStarting(ServerStartingEvent event) { + LOGGER.info("Growthcraft Cellar starting up ..."); + } + + public void onRegisterRenderers(EntityRenderersEvent.RegisterRenderers event) { + GrowthcraftCellarBlockEntityRenderers.register(event); + } +} diff --git a/src/main/java/growthcraft/cellar/block/BrewKettleBlock.java b/src/main/java/growthcraft/cellar/block/BrewKettleBlock.java new file mode 100644 index 0000000..a20db75 --- /dev/null +++ b/src/main/java/growthcraft/cellar/block/BrewKettleBlock.java @@ -0,0 +1,248 @@ +package growthcraft.cellar.block; + +import static net.minecraft.world.phys.shapes.BooleanOp.OR; + +import java.util.Arrays; +import java.util.Random; + +import javax.annotation.Nonnull; +import javax.annotation.ParametersAreNonnullByDefault; + +import org.jetbrains.annotations.Nullable; + +import growthcraft.cellar.GrowthcraftCellar; +import growthcraft.cellar.block.entity.BrewKettleBlockEntity; +import growthcraft.cellar.init.GrowthcraftCellarBlockEntities; +import growthcraft.core.utils.BlockPropertiesUtils; +import growthcraft.lib.utils.BlockStateUtils; +import growthcraft.milk.init.GrowthcraftMilkFluids; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.core.particles.ParticleTypes; +import net.minecraft.core.particles.SimpleParticleType; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.sounds.SoundSource; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.LevelReader; +import net.minecraft.world.level.block.BaseEntityBlock; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.RenderShape; +import net.minecraft.world.level.block.SoundType; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityTicker; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.StateDefinition; +import net.minecraft.world.level.block.state.properties.BooleanProperty; +import net.minecraft.world.level.material.PushReaction; +import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.Shapes; +import net.minecraft.world.phys.shapes.VoxelShape; +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.network.NetworkHooks; + +public class BrewKettleBlock extends BaseEntityBlock { + + public static final BooleanProperty LIT = BooleanProperty.create("lit"); + public static final BooleanProperty HAS_LID = BooleanProperty.create("has_lid"); + + private final VoxelShape[] VOXEL_SHAPES_LID = new VoxelShape[]{ + Block.box(0, 0, 2, 2, 3, 4), + Block.box(1, 3, 1, 15, 4, 15), + Block.box(1, 3, 0, 15, 16, 1), + Block.box(15, 3, 0, 16, 16, 16), + Block.box(1, 3, 15, 15, 16, 16), + Block.box(0, 3, 0, 1, 16, 16), + Block.box(0, 0, 0, 4, 3, 2), + Block.box(12, 0, 0, 16, 3, 2), + Block.box(12, 0, 14, 16, 3, 16), + Block.box(0, 0, 14, 4, 3, 16), + Block.box(14, 0, 2, 16, 3, 4), + Block.box(14, 0, 12, 16, 3, 14), + Block.box(1, 15, 1, 15, 16, 15), + Block.box(0, 0, 12, 2, 3, 14) + }; + + public BrewKettleBlock() { + this(getInitProperties()); + } + + public BrewKettleBlock(Properties properties) { + super(properties); + + this.registerDefaultState(this.stateDefinition.any() + .setValue(LIT, false) + .setValue(HAS_LID, false) + ); + } + + private static Properties getInitProperties() { + Properties properties = Properties.copy(Blocks.FURNACE); + properties.noOcclusion(); + properties.sound(SoundType.METAL); + properties.isRedstoneConductor(BlockPropertiesUtils::never); + return properties; + } + + @Override + public RenderShape getRenderShape(BlockState blockState) { + return RenderShape.MODEL; + } + + @Override + public VoxelShape getShape(BlockState blockState, BlockGetter blockGetter, BlockPos blockPos, CollisionContext context) { + return Arrays.stream(VOXEL_SHAPES_LID).reduce((v1, v2) -> Shapes.join(v1, v2, OR)).get(); + } + + @Override + protected void createBlockStateDefinition(StateDefinition.Builder blockStateBuilder) { + blockStateBuilder.add(LIT, HAS_LID); + } + + @Nullable + @Override + public BlockState getStateForPlacement(BlockPlaceContext context) { + return this.defaultBlockState() + .setValue(LIT, BlockStateUtils.isHeated(context.getLevel(), context.getClickedPos())) + .setValue(HAS_LID, false); + } + + @Override + public PushReaction getPistonPushReaction(BlockState blockState) { + return PushReaction.DESTROY; + } + + @Nullable + @Override + public BlockEntity newBlockEntity(BlockPos blockPos, BlockState blockState) { + return GrowthcraftCellarBlockEntities.BREW_KETTLE_BLOCK_ENTITY.get().create(blockPos, blockState); + } + + @Nullable + @Override + public BlockEntityTicker getTicker(Level level, BlockState blockState, BlockEntityType blockEntityType) { + if (level.isClientSide) { + return blockState.getValue(LIT) + ? createTickerHelper(blockEntityType, + GrowthcraftCellarBlockEntities.BREW_KETTLE_BLOCK_ENTITY.get(), BrewKettleBlockEntity::particleTick) + : null; + } else { + return createTickerHelper( + blockEntityType, + GrowthcraftCellarBlockEntities.BREW_KETTLE_BLOCK_ENTITY.get(), + (worldLevel, pos, state, blockEntity) -> (blockEntity).tick() + ); + } + } + + @Override + @Nonnull + @ParametersAreNonnullByDefault + public InteractionResult use(BlockState blockState, Level level, BlockPos blockPos, Player player, InteractionHand interactionHand, BlockHitResult hitResult) { + if (!level.isClientSide) { + BrewKettleBlockEntity blockEntity = (BrewKettleBlockEntity) level.getBlockEntity(blockPos); + if(blockEntity == null) return InteractionResult.FAIL; + + // Try to do fluid handling first. + if(player.getItemInHand(interactionHand) + .getCapability(CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY) + .isPresent() + ) { + boolean fluidInteractionResult = false; + + // If the player is holding a generic bucket. Always try and pull from the output fluid first. + if (player.getItemInHand(interactionHand).getItem() == Items.BUCKET) { + if (!blockEntity.getFluidTank(1).isEmpty()) { + fluidInteractionResult = FluidUtil.interactWithFluidHandler(player, interactionHand, level, blockPos, Direction.NORTH); + } else if (!blockEntity.getFluidTank(0).isEmpty()) { + fluidInteractionResult = FluidUtil.interactWithFluidHandler(player, interactionHand, level, blockPos, Direction.UP); + } + } else if (player.getItemInHand(interactionHand).getItem() == Items.MILK_BUCKET) { + // If the player is holding a vanilla milk bucket, then we need to process it + // into a Growthcraft Milk Fluid. + int capacity = blockEntity.getFluidTank(0).getCapacity(); + int amount = blockEntity.getFluidTank(0).getFluidAmount(); + int remainingFill = capacity - amount; + + if (blockEntity.getFluidTank(0).isEmpty() + || (remainingFill >= 1000 + && blockEntity.getFluidStackInTank(0).getFluid() == GrowthcraftMilkFluids.MILK.get().getSource()) + ) { + FluidStack fluidStack = new FluidStack(GrowthcraftMilkFluids.MILK.get().getSource(), 1000); + blockEntity.getFluidTank(0).fill(fluidStack, IFluidHandler.FluidAction.EXECUTE); + player.setItemInHand(interactionHand, new ItemStack(Items.BUCKET)); + } + } else { + // Otherwise, try and fill the input tank. + fluidInteractionResult = FluidUtil.interactWithFluidHandler(player, interactionHand, level, blockPos, Direction.UP); + } + // Return based on whether interaction with the fluid handler item was successful or not. + return fluidInteractionResult ? InteractionResult.SUCCESS : InteractionResult.FAIL; + } else { + try { + blockEntity.playSound("open"); + NetworkHooks.openGui(((ServerPlayer) player), blockEntity, blockPos); + return InteractionResult.SUCCESS; + } catch (Exception ex) { + GrowthcraftCellar.LOGGER.error( + String.format("%s unable to open BrewKettleBlockEntity GUI at %s.", + player.getDisplayName().getString(), + blockPos) + ); + GrowthcraftCellar.LOGGER.error(ex.getMessage()); + GrowthcraftCellar.LOGGER.error(ex.fillInStackTrace()); + return InteractionResult.FAIL; + } + } + } + // Always return SUCCESS for client side. + return InteractionResult.SUCCESS; + } + + @Override + public boolean canSurvive(BlockState p_60525_, LevelReader p_60526_, BlockPos p_60527_) { + return true; + } + + public static void makeParticles(Level level, BlockPos blockPos, BlockState blockState) { + try { + BrewKettleBlockEntity blockEntity = (BrewKettleBlockEntity) level.getBlockEntity(blockPos); + + if (blockState.getValue(LIT) && blockEntity.getTickClock("current") > 0) { + Random randomsource = level.getRandom(); + SimpleParticleType simpleparticletype = ParticleTypes.CAMPFIRE_COSY_SMOKE; + + level.addAlwaysVisibleParticle( + simpleparticletype, + true, + (double) blockPos.getX() + 0.5D + randomsource.nextDouble() / 3.0D * (double) (randomsource.nextBoolean() ? 1 : -1), + (double) blockPos.getY() + randomsource.nextDouble() + randomsource.nextDouble(), + (double) blockPos.getZ() + 0.5D + randomsource.nextDouble() / 3.0D * (double) (randomsource.nextBoolean() ? 1 : -1), + 0.0D, + 0.07D, + 0.0D + ); + + level.playSound(null, blockPos, SoundEvents.FURNACE_FIRE_CRACKLE, SoundSource.BLOCKS, 1.0F, 1.0F); + } + } catch (Exception e) { + GrowthcraftCellar.LOGGER.error("BrewKettleBlockEntity at %d threw an Exception: %s", blockPos.toString(), e.getMessage()); + } + + } + + +} diff --git a/src/main/java/growthcraft/cellar/block/CultureJarBlock.java b/src/main/java/growthcraft/cellar/block/CultureJarBlock.java new file mode 100644 index 0000000..bc2a087 --- /dev/null +++ b/src/main/java/growthcraft/cellar/block/CultureJarBlock.java @@ -0,0 +1,185 @@ +package growthcraft.cellar.block; + +import org.jetbrains.annotations.Nullable; + +import growthcraft.cellar.GrowthcraftCellar; +import growthcraft.cellar.block.entity.CultureJarBlockEntity; +import growthcraft.cellar.init.GrowthcraftCellarBlockEntities; +import growthcraft.core.utils.BlockPropertiesUtils; +import growthcraft.lib.utils.BlockStateUtils; +import growthcraft.milk.init.GrowthcraftMilkFluids; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.sounds.SoundSource; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.LevelAccessor; +import net.minecraft.world.level.block.BaseEntityBlock; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.Mirror; +import net.minecraft.world.level.block.RenderShape; +import net.minecraft.world.level.block.Rotation; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityTicker; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.StateDefinition; +import net.minecraft.world.level.block.state.properties.BlockStateProperties; +import net.minecraft.world.level.block.state.properties.BooleanProperty; +import net.minecraft.world.level.block.state.properties.DirectionProperty; +import net.minecraft.world.level.material.PushReaction; +import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.VoxelShape; +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.network.NetworkHooks; + +public class CultureJarBlock extends BaseEntityBlock { + + public static final DirectionProperty FACING = BlockStateProperties.HORIZONTAL_FACING; + public static final BooleanProperty LIT = BooleanProperty.create("lit"); + + private static final VoxelShape VOXEL_SHAPE = Block.box( + 5.0D, 0.0D, 5.0D, + 11.0D, 8.0D, 11.0D + ); + + public CultureJarBlock() { + this(getInitProperties()); + } + + public CultureJarBlock(Properties properties) { + super(properties); + this.registerDefaultState( + this.stateDefinition.any() + .setValue(FACING, Direction.NORTH) + .setValue(LIT, false) + ); + } + + private static Properties getInitProperties() { + Properties properties = Properties.copy(Blocks.GLASS); + properties.strength(0.5F); + properties.noOcclusion(); + properties.isValidSpawn(BlockPropertiesUtils::never); + properties.isRedstoneConductor(BlockPropertiesUtils::never); + properties.isSuffocating(BlockPropertiesUtils::never); + properties.isViewBlocking(BlockPropertiesUtils::never); + return properties; + } + + @Override + public RenderShape getRenderShape(BlockState blockState) { + return RenderShape.MODEL; + } + + @Override + public VoxelShape getShape(BlockState blockState, BlockGetter level, BlockPos blockPos, CollisionContext context) { + return VOXEL_SHAPE; + } + + @Override + protected void createBlockStateDefinition(StateDefinition.Builder stateBuilder) { + super.createBlockStateDefinition(stateBuilder.add(FACING).add(LIT)); + } + + @Nullable + @Override + public BlockEntity newBlockEntity(BlockPos blockPos, BlockState blockState) { + return GrowthcraftCellarBlockEntities.CULTURE_JAR_BLOCK_ENTITY.get().create(blockPos, blockState); + } + + @Nullable + @Override + public BlockState getStateForPlacement(BlockPlaceContext context) { + return this.defaultBlockState() + .setValue(FACING, context.getHorizontalDirection().getOpposite()) + .setValue(LIT, BlockStateUtils.isHeated(context.getLevel(), context.getClickedPos())); + } + + @Override + public PushReaction getPistonPushReaction(BlockState p_60584_) { + return PushReaction.DESTROY; + } + + @Override + public BlockState rotate(BlockState state, LevelAccessor level, BlockPos pos, Rotation rotation) { + return state.setValue(FACING, rotation.rotate(state.getValue(FACING))).setValue(LIT, state.getValue(LIT)); + } + + @Override + public BlockState mirror(BlockState state, Mirror mirror) { + return state.rotate(mirror.getRotation(state.getValue(FACING))).setValue(LIT, state.getValue(LIT)); + } + + @Nullable + @Override + public BlockEntityTicker getTicker(Level level, BlockState state, BlockEntityType blockEntityType) { + return createTickerHelper( + blockEntityType, + GrowthcraftCellarBlockEntities.CULTURE_JAR_BLOCK_ENTITY.get(), + (worldLevel, pos, blockState, blockEntity) -> (blockEntity).tick() + ); + } + + @Override + public InteractionResult use(BlockState blockState, Level level, BlockPos blockPos, Player player, InteractionHand interactionHand, BlockHitResult blockHitResult) { + if (!level.isClientSide && player.isCrouching()) { + try { + // Play sound + level.playSound(player, blockPos, SoundEvents.BARREL_OPEN, SoundSource.BLOCKS, 1.0F, 1.0F); + CultureJarBlockEntity blockEntity = (CultureJarBlockEntity) level.getBlockEntity(blockPos); + NetworkHooks.openGui(((ServerPlayer) player), blockEntity, blockPos); + } catch (Exception ex) { + GrowthcraftCellar.LOGGER.error(String.format("%s unable to open CultureJarBlockEntity GUI at %s.", player.getDisplayName().getString(), blockPos)); + GrowthcraftCellar.LOGGER.error(ex.getMessage()); + GrowthcraftCellar.LOGGER.error(ex.fillInStackTrace()); + } + return InteractionResult.SUCCESS; + } + + if (!level.isClientSide) { + try { + // Handling of Vanilla Milk Bucket + if (player.getItemInHand(interactionHand).getItem() == Items.MILK_BUCKET) { + CultureJarBlockEntity blockEntity = (CultureJarBlockEntity) level.getBlockEntity(blockPos); + + int capacity = blockEntity.getFluidTank(0).getCapacity(); + int amount = blockEntity.getFluidTank(0).getFluidAmount(); + int remainingFill = capacity - amount; + + if (blockEntity.getFluidTank(0).isEmpty() + || (remainingFill >= 1000 + && blockEntity.getFluidStackInTank(0).getFluid() == GrowthcraftMilkFluids.MILK.get().getSource()) + ) { + FluidStack fluidStack = new FluidStack(GrowthcraftMilkFluids.MILK.get().getSource(), 1000); + blockEntity.getFluidTank(0).fill(fluidStack, IFluidHandler.FluidAction.EXECUTE); + player.setItemInHand(interactionHand, new ItemStack(Items.BUCKET)); + } + } else if ( + FluidUtil.interactWithFluidHandler(player, interactionHand, level, blockPos, blockHitResult.getDirection()) + || player.getItemInHand(interactionHand).getCapability(CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY).isPresent() + ) { + return InteractionResult.SUCCESS; + } + } catch (Exception ex) { + GrowthcraftCellar.LOGGER.error(String.format("Exception Thrown: %s unable to place fluid in CultureJarBlockEntity at %s.", player.getDisplayName().getString(), blockPos)); + GrowthcraftCellar.LOGGER.error(ex.getMessage()); + GrowthcraftCellar.LOGGER.error(ex.fillInStackTrace()); + } + } + return InteractionResult.SUCCESS; + } +} diff --git a/src/main/java/growthcraft/cellar/block/FermentationBarrelBlock.java b/src/main/java/growthcraft/cellar/block/FermentationBarrelBlock.java new file mode 100644 index 0000000..3b04b43 --- /dev/null +++ b/src/main/java/growthcraft/cellar/block/FermentationBarrelBlock.java @@ -0,0 +1,189 @@ +package growthcraft.cellar.block; + +import java.util.Objects; + +import org.jetbrains.annotations.Nullable; + +import growthcraft.cellar.GrowthcraftCellar; +import growthcraft.cellar.block.entity.FermentationBarrelBlockEntity; +import growthcraft.cellar.init.GrowthcraftCellarBlockEntities; +import net.minecraft.core.BlockPos; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.sounds.SoundSource; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.BottleItem; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.LevelAccessor; +import net.minecraft.world.level.block.BaseEntityBlock; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.DirectionalBlock; +import net.minecraft.world.level.block.Mirror; +import net.minecraft.world.level.block.RenderShape; +import net.minecraft.world.level.block.Rotation; +import net.minecraft.world.level.block.SimpleWaterloggedBlock; +import net.minecraft.world.level.block.SoundType; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityTicker; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.StateDefinition; +import net.minecraft.world.level.block.state.properties.BlockStateProperties; +import net.minecraft.world.level.block.state.properties.BooleanProperty; +import net.minecraft.world.level.block.state.properties.DirectionProperty; +import net.minecraft.world.level.material.FluidState; +import net.minecraft.world.level.material.Fluids; +import net.minecraft.world.level.material.PushReaction; +import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.VoxelShape; +import net.minecraftforge.fluids.FluidUtil; +import net.minecraftforge.fluids.capability.CapabilityFluidHandler; +import net.minecraftforge.network.NetworkHooks; + +public class FermentationBarrelBlock extends BaseEntityBlock implements SimpleWaterloggedBlock { + + public static final DirectionProperty FACING = DirectionalBlock.FACING; + public static final BooleanProperty WATERLOGGED = BlockStateProperties.WATERLOGGED; + + private static final VoxelShape VOXEL_SHAPE = Block.box( + 0.0D, 0.0D, 0.0D, + 16.0D, 16.0D, 16.0D + ); + + public FermentationBarrelBlock() { + this(getInitProperties()); + } + + public FermentationBarrelBlock(Properties properties) { + super(properties); + } + + private static Properties getInitProperties() { + Properties properties = Properties.copy(Blocks.BARREL); + properties.strength(2.0F, 3.0F); + properties.noOcclusion(); + properties.sound(SoundType.WOOD); + return properties; + } + + @Override + public RenderShape getRenderShape(BlockState blockState) { + return RenderShape.MODEL; + } + + @Override + public VoxelShape getShape(BlockState blockState, BlockGetter level, BlockPos blockPos, CollisionContext context) { + return VOXEL_SHAPE; + } + + @Override + protected void createBlockStateDefinition(StateDefinition.Builder blockStateBuilder) { + super.createBlockStateDefinition(blockStateBuilder.add(FACING, WATERLOGGED)); + } + + @Nullable + @Override + public BlockState getStateForPlacement(BlockPlaceContext context) { + FluidState fluidState = context.getLevel().getFluidState(context.getClickedPos()); + BlockState blockState = this.defaultBlockState(); + + return blockState.setValue(FACING, context.getClickedFace()).setValue(WATERLOGGED, fluidState.getType() == Fluids.WATER); + } + + @Override + public BlockState rotate(BlockState state, LevelAccessor level, BlockPos pos, Rotation rotation) { + return state.setValue(FACING, rotation.rotate(state.getValue(FACING))).setValue(WATERLOGGED, state.getValue(WATERLOGGED)); + } + + @Override + public BlockState mirror(BlockState state, Mirror mirror) { + return state.rotate(mirror.getRotation(state.getValue(FACING))).setValue(WATERLOGGED, state.getValue(WATERLOGGED)); + } + + @Override + public PushReaction getPistonPushReaction(BlockState blockState) { + return PushReaction.DESTROY; + } + + @Override + public FluidState getFluidState(BlockState blockState) { + return Boolean.TRUE.equals(blockState.getValue(WATERLOGGED)) + ? Fluids.WATER.getSource(false) + : super.getFluidState(blockState); + } + + @Nullable + @Override + public BlockEntity newBlockEntity(BlockPos blockPos, BlockState blockState) { + return GrowthcraftCellarBlockEntities.FERMENTATION_BARREL_BLOCK_ENTITY.get().create(blockPos, blockState); + } + + @Override + public void onRemove(BlockState blockState, Level level, BlockPos blockPos, BlockState newBlockState, boolean isMoving) { + if (blockState.getBlock() != newBlockState.getBlock()) { + try { + FermentationBarrelBlockEntity blockEntity = (FermentationBarrelBlockEntity) level.getBlockEntity(blockPos); + blockEntity.dropItems(); + } catch (Exception ex) { + GrowthcraftCellar.LOGGER.error(String.format("Invalid blockEntity type at %s, expected FermentationBarrelBlockEntity", blockPos)); + } + } + super.onRemove(blockState, level, blockPos, newBlockState, isMoving); + } + + @Nullable + @Override + public BlockEntityTicker getTicker(Level level, BlockState blockState, BlockEntityType entityType) { + return createTickerHelper( + entityType, + GrowthcraftCellarBlockEntities.FERMENTATION_BARREL_BLOCK_ENTITY.get(), + (worldLevel, pos, state, blockEntity) -> (blockEntity).tick() + ); + } + + @Override + public InteractionResult use(BlockState blockState, Level level, BlockPos blockPos, Player player, InteractionHand interactionHand, BlockHitResult hitResult) { + if (!level.isClientSide) { + FermentationBarrelBlockEntity blockEntity = (FermentationBarrelBlockEntity) level.getBlockEntity(blockPos); + + if(player.getItemInHand(interactionHand).getItem() instanceof BottleItem + && Objects.requireNonNull(blockEntity).getFluidTank(0).getFluidAmount() >= 500) { + // Drain the fluid and produce the final potion. + ItemStack potionItemStack = blockEntity.getResultingPotionItemStack(); + + blockEntity.drainFluidTank(0, 500); + player.getItemInHand(interactionHand).shrink(1); + + if(potionItemStack != null && !player.getInventory().add(potionItemStack)) { + player.drop(potionItemStack, false); + } + + } else if ( + FluidUtil.interactWithFluidHandler(player, interactionHand, level, blockPos, hitResult.getDirection()) + || player.getItemInHand(interactionHand).getCapability(CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY).isPresent() + ) { + return InteractionResult.SUCCESS; + } else if(player.isCrouching()) { + try { + // Play sound + level.playSound(player, blockPos, SoundEvents.BARREL_OPEN, SoundSource.BLOCKS, 1.0F, 1.0F); + NetworkHooks.openGui(((ServerPlayer) player), blockEntity, blockPos); + } catch (Exception ex) { + GrowthcraftCellar.LOGGER.error(String.format("%s unable to open FermentationBarrelBlockEntity GUI at %s.", player.getDisplayName().getString(), blockPos)); + GrowthcraftCellar.LOGGER.error(ex.getMessage()); + GrowthcraftCellar.LOGGER.error(ex.fillInStackTrace()); + } + } + return InteractionResult.SUCCESS; + } + + return InteractionResult.SUCCESS; + } +} diff --git a/src/main/java/growthcraft/cellar/block/FruitPressBlock.java b/src/main/java/growthcraft/cellar/block/FruitPressBlock.java new file mode 100644 index 0000000..2358ce5 --- /dev/null +++ b/src/main/java/growthcraft/cellar/block/FruitPressBlock.java @@ -0,0 +1,198 @@ +package growthcraft.cellar.block; + +import static growthcraft.cellar.block.FruitPressPistonBlock.PRESSED; +import static net.minecraft.world.phys.shapes.BooleanOp.OR; + +import java.util.Arrays; +import java.util.Random; + +import org.jetbrains.annotations.Nullable; + +import growthcraft.cellar.GrowthcraftCellar; +import growthcraft.cellar.block.entity.FruitPressBlockEntity; +import growthcraft.cellar.init.GrowthcraftCellarBlockEntities; +import growthcraft.cellar.init.GrowthcraftCellarBlocks; +import growthcraft.core.utils.BlockPropertiesUtils; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.core.particles.ParticleTypes; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.sounds.SoundSource; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.LevelAccessor; +import net.minecraft.world.level.LevelReader; +import net.minecraft.world.level.block.BaseEntityBlock; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.Mirror; +import net.minecraft.world.level.block.RenderShape; +import net.minecraft.world.level.block.Rotation; +import net.minecraft.world.level.block.SoundType; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityTicker; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.StateDefinition; +import net.minecraft.world.level.block.state.properties.BlockStateProperties; +import net.minecraft.world.level.block.state.properties.DirectionProperty; +import net.minecraft.world.level.material.FluidState; +import net.minecraft.world.level.material.PushReaction; +import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.Shapes; +import net.minecraft.world.phys.shapes.VoxelShape; +import net.minecraftforge.fluids.FluidUtil; +import net.minecraftforge.fluids.capability.CapabilityFluidHandler; +import net.minecraftforge.network.NetworkHooks; + +public class FruitPressBlock extends BaseEntityBlock { + public static final DirectionProperty FACING = BlockStateProperties.HORIZONTAL_FACING; + + private final VoxelShape[] VOXEL_SHAPES = new VoxelShape[]{ + Block.box(1, 0, 1, 15, 3, 15), + Block.box(0, 3, 0, 16, 7, 16), + Block.box(1, 7, 1, 15, 16, 15) + }; + + public FruitPressBlock() { + super(getInitProperties()); + } + + public FruitPressBlock(Properties properties) { + super(properties); + this.registerDefaultState(this.stateDefinition.any().setValue(FACING, Direction.NORTH)); + } + + private static Properties getInitProperties() { + Properties properties = Properties.copy(Blocks.BARREL); + properties.noOcclusion(); + properties.sound(SoundType.CHAIN); + properties.isRedstoneConductor(BlockPropertiesUtils::never); + return properties; + } + + @Override + public RenderShape getRenderShape(BlockState p_49232_) { + return RenderShape.MODEL; + } + + @Override + public VoxelShape getShape(BlockState blockState, BlockGetter blockGetter, BlockPos blockPos, CollisionContext context) { + return Arrays.stream(VOXEL_SHAPES).reduce((v1, v2) -> Shapes.join(v1, v2, OR)).get(); + } + + @Override + protected void createBlockStateDefinition(StateDefinition.Builder blockStateBuilder) { + blockStateBuilder.add(FACING); + } + + @Nullable + @Override + public BlockState getStateForPlacement(BlockPlaceContext context) { + return this.defaultBlockState().setValue(FACING, context.getHorizontalDirection().getOpposite()); + } + + @Override + public PushReaction getPistonPushReaction(BlockState p_60584_) { + return PushReaction.DESTROY; + } + + @Override + public BlockState rotate(BlockState state, LevelAccessor level, BlockPos pos, Rotation rotation) { + return state.setValue(FACING, rotation.rotate(state.getValue(FACING))); + } + + @Override + public BlockState mirror(BlockState state, Mirror mirror) { + return state.rotate(mirror.getRotation(state.getValue(FACING))); + } + + @Nullable + @Override + public BlockEntity newBlockEntity(BlockPos blockPos, BlockState blockState) { + return GrowthcraftCellarBlockEntities.FRUIT_PRESS_BLOCK_ENTITY.get().create(blockPos, blockState); + } + + @Nullable + @Override + public BlockEntityTicker getTicker(Level level, BlockState blockState, BlockEntityType entityType) { + if (level.isClientSide) { + return createTickerHelper( + entityType, + GrowthcraftCellarBlockEntities.FRUIT_PRESS_BLOCK_ENTITY.get(), + FruitPressBlockEntity::particleTick); + } else { + return createTickerHelper( + entityType, + GrowthcraftCellarBlockEntities.FRUIT_PRESS_BLOCK_ENTITY.get(), + (worldLevel, pos, state, blockEntity) -> (blockEntity).tick() + ); + } + } + + @Override + public InteractionResult use(BlockState blockState, Level level, BlockPos blockPos, Player player, InteractionHand interactionHand, BlockHitResult hitResult) { + if (!level.isClientSide) { + FruitPressBlockEntity blockEntity = (FruitPressBlockEntity) level.getBlockEntity(blockPos); + + if (FluidUtil.interactWithFluidHandler(player, interactionHand, level, blockPos, hitResult.getDirection()) || player.getItemInHand(interactionHand).getCapability(CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY).isPresent()) { + return InteractionResult.SUCCESS; + } else if (player.isCrouching() && !level.getBlockState(blockPos.above()).getValue(PRESSED)) { + try { + // Play sound + level.playSound(player, blockPos, SoundEvents.BARREL_OPEN, SoundSource.BLOCKS, 1.0F, 1.0F); + NetworkHooks.openGui(((ServerPlayer) player), blockEntity, blockPos); + } catch (Exception ex) { + GrowthcraftCellar.LOGGER.error(String.format("%s unable to open FruitPressBlockEntity GUI at %s.", player.getDisplayName().getString(), blockPos)); + GrowthcraftCellar.LOGGER.error(ex.getMessage()); + GrowthcraftCellar.LOGGER.error(ex.fillInStackTrace()); + } + } + return InteractionResult.SUCCESS; + } + + return InteractionResult.SUCCESS; + } + + @Override + public boolean canSurvive(BlockState blockState, LevelReader levelReader, BlockPos blockPos) { + return levelReader.getBlockState(blockPos.above()).isAir(); + } + + @Override + public void setPlacedBy(Level level, BlockPos blockPos, BlockState blockState, @Nullable LivingEntity livingEntity, ItemStack itemStack) { + level.setBlock(blockPos.above(), GrowthcraftCellarBlocks.FRUIT_PRESS_PISTON.get().defaultBlockState().setValue(FACING, blockState.getValue(FACING)).setValue(PRESSED, false), Block.UPDATE_ALL_IMMEDIATE); + } + + @Override + public boolean onDestroyedByPlayer(BlockState state, Level level, BlockPos pos, Player player, boolean willHarvest, FluidState fluid) { + if (level.getBlockState(pos.above()).getBlock() instanceof FruitPressPistonBlock) { + level.destroyBlock(pos.above(), false); + } + return super.onDestroyedByPlayer(state, level, pos, player, willHarvest, fluid); + } + + public static void makeParticles(Level level, BlockPos blockPos, BlockState blockState) { + Random randomSource = level.getRandom(); + + FruitPressBlockEntity blockEntity = (FruitPressBlockEntity) level.getBlockEntity(blockPos); + + if (level.getBlockState(blockPos.above()).getValue(PRESSED) && blockEntity.getTickClock("current") > 0) { + double d0 = (double) blockPos.getX() + randomSource.nextDouble(); + //double d1 = (double) blockPos.getY() - 0.05D; + double d1 = blockPos.getY(); + double d2 = (double) blockPos.getZ() + randomSource.nextDouble(); + + level.addParticle(ParticleTypes.FALLING_HONEY, d0, d1, d2, 0.0D, 0.0D, 0.0D); + } + + } +} diff --git a/src/main/java/growthcraft/cellar/block/FruitPressPistonBlock.java b/src/main/java/growthcraft/cellar/block/FruitPressPistonBlock.java new file mode 100644 index 0000000..698a903 --- /dev/null +++ b/src/main/java/growthcraft/cellar/block/FruitPressPistonBlock.java @@ -0,0 +1,188 @@ +package growthcraft.cellar.block; + +import static net.minecraft.world.phys.shapes.BooleanOp.OR; + +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +import org.jetbrains.annotations.Nullable; + +import growthcraft.cellar.GrowthcraftCellar; +import growthcraft.cellar.block.entity.FruitPressBlockEntity; +import growthcraft.cellar.init.GrowthcraftCellarBlocks; +import growthcraft.core.utils.BlockPropertiesUtils; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.sounds.SoundSource; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.item.ItemEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.LevelAccessor; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.Mirror; +import net.minecraft.world.level.block.RenderShape; +import net.minecraft.world.level.block.Rotation; +import net.minecraft.world.level.block.SupportType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.StateDefinition; +import net.minecraft.world.level.block.state.properties.BlockStateProperties; +import net.minecraft.world.level.block.state.properties.BooleanProperty; +import net.minecraft.world.level.block.state.properties.DirectionProperty; +import net.minecraft.world.level.material.FluidState; +import net.minecraft.world.level.material.PushReaction; +import net.minecraft.world.level.storage.loot.LootContext; +import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.Shapes; +import net.minecraft.world.phys.shapes.VoxelShape; +import net.minecraftforge.network.NetworkHooks; + +public class FruitPressPistonBlock extends Block { + + public static final DirectionProperty FACING = BlockStateProperties.HORIZONTAL_FACING; + public static final BooleanProperty PRESSED = BooleanProperty.create("pressed"); + + private VoxelShape[] VOXEL_SHAPES_UP = new VoxelShape[] { + Block.box(0, 15, 0, 16, 16, 16), + Block.box(3, 0, 3, 13, 16, 13) + }; + + private VoxelShape[] VOXEL_SHAPES_DOWN = new VoxelShape[] { + Block.box(0, 15, 0, 16, 16, 16), + Block.box(6.5, 0, 6.5, 9.5, 9, 9.5), + Block.box(3, 9, 3, 13, 16, 13) + }; + + public FruitPressPistonBlock() { + super(getInitProperties()); + } + + public FruitPressPistonBlock(Properties properties) { + super(properties); + this.registerDefaultState( + this.stateDefinition.any().setValue(FACING, Direction.NORTH).setValue(PRESSED, false) + ); + } + + private static Properties getInitProperties() { + Properties properties = Properties.copy(Blocks.PISTON); + properties.noOcclusion(); + properties.isRedstoneConductor(BlockPropertiesUtils::never); + return properties; + } + + @Override + public RenderShape getRenderShape(BlockState p_49232_) { + return RenderShape.MODEL; + } + + @Override + public VoxelShape getShape(BlockState blockState, BlockGetter blockGetter, BlockPos blockPos, CollisionContext context) { + return blockState.getValue(PRESSED) + ? Arrays.stream(VOXEL_SHAPES_DOWN).reduce((v1, v2) -> Shapes.join(v1, v2, OR)).get() + : Arrays.stream(VOXEL_SHAPES_UP).reduce((v1, v2) -> Shapes.join(v1, v2, OR)).get(); + } + + @Override + protected void createBlockStateDefinition(StateDefinition.Builder blockStateBuilder) { + blockStateBuilder.add(FACING, PRESSED); + } + + @Nullable + @Override + public BlockState getStateForPlacement(BlockPlaceContext context) { + return this.defaultBlockState().setValue(FACING, context.getHorizontalDirection().getOpposite()) + .setValue(PRESSED, this.isPowered(context.getLevel(), context.getClickedPos())); + } + + @Override + public PushReaction getPistonPushReaction(BlockState p_60584_) { + return PushReaction.DESTROY; + } + + @Override + public BlockState rotate(BlockState state, LevelAccessor level, BlockPos pos, Rotation rotation) { + return state.setValue(FACING, rotation.rotate(state.getValue(FACING))).setValue(PRESSED, state.getValue(PRESSED)); + } + + @Override + public BlockState mirror(BlockState state, Mirror mirror) { + return state.rotate(mirror.getRotation(state.getValue(FACING))).setValue(PRESSED, state.getValue(PRESSED)); + } + + @Override + public boolean onDestroyedByPlayer(BlockState state, Level level, BlockPos pos, Player player, boolean willHarvest, FluidState fluid) { + if(level.getBlockState(pos.below()).getBlock() instanceof FruitPressBlock) { + level.destroyBlock(pos.below(), false); + ItemEntity itemEntity = new ItemEntity(level, pos.getX(), pos.getY(), pos.getZ(), new ItemStack(GrowthcraftCellarBlocks.FRUIT_PRESS.get().asItem())); + level.addFreshEntity(itemEntity); + } + return super.onDestroyedByPlayer(state, level, pos, player, willHarvest, fluid); + } + + @Override + public List getDrops(BlockState p_60537_, LootContext.Builder p_60538_) { + return Collections.emptyList(); + } + + @Override + public boolean canConnectRedstone(BlockState state, BlockGetter level, BlockPos pos, @Nullable Direction direction) { + return false; + } + + @Override + public InteractionResult use(BlockState blockState, Level level, BlockPos blockPos, Player player, InteractionHand interactionHand, BlockHitResult blockHitResult) { + FruitPressBlockEntity blockEntity = (FruitPressBlockEntity) level.getBlockEntity(blockPos.below()); + + // Handle connecting a lever on the top. + if(!level.isClientSide && player.getItemInHand(interactionHand).getItem() == Items.LEVER) { + level.setBlock(blockPos.above(), Blocks.LEVER.getStateDefinition().any().setValue(FACING, blockState.getValue(FACING)), Block.UPDATE_ALL_IMMEDIATE); + player.getItemInHand(interactionHand).shrink(1); + } else if (!level.isClientSide && player.isCrouching() && !blockState.getValue(PRESSED)) { + try { + // Play sound + level.playSound(player, blockPos, SoundEvents.BARREL_OPEN, SoundSource.BLOCKS, 1.0F, 1.0F); + NetworkHooks.openGui(((ServerPlayer) player), blockEntity, blockPos.below()); + + } catch (Exception ex) { + GrowthcraftCellar.LOGGER.error(String.format("%s unable to open FruitPressBlockEntity GUI at %s.", player.getDisplayName().getString(), blockPos)); + GrowthcraftCellar.LOGGER.error(ex.getMessage()); + GrowthcraftCellar.LOGGER.error(ex.fillInStackTrace()); + } + } + + + return super.use(blockState, level, blockPos, player, interactionHand, blockHitResult); + } + + public boolean isPowered(Level level, BlockPos pos) { + return level.getBestNeighborSignal(pos) == 15; + } + + @Override + public void neighborChanged(BlockState blockState, Level level, BlockPos blockPos, Block neighborBlock, BlockPos neighborBlockPos, boolean isMoving) { + super.neighborChanged(blockState, level, blockPos, neighborBlock, neighborBlockPos, isMoving); + + if(!level.isClientSide) { + boolean flag = level.hasNeighborSignal(blockPos); + if(blockState.getValue(PRESSED) != flag) { + level.setBlock(blockPos, blockState.setValue(PRESSED, flag), Block.UPDATE_CLIENTS); + } + } + } + + public static boolean canSupportRigidBlock(BlockGetter p_49937_, BlockPos p_49938_) { + GrowthcraftCellar.LOGGER.warn("Calling canSupportRigidBlock"); + return p_49937_.getBlockState(p_49938_).isFaceSturdy(p_49937_, p_49938_, Direction.UP, SupportType.RIGID); + } +} diff --git a/src/main/java/growthcraft/cellar/block/GrapeVineCropBlock.java b/src/main/java/growthcraft/cellar/block/GrapeVineCropBlock.java new file mode 100644 index 0000000..1f3360c --- /dev/null +++ b/src/main/java/growthcraft/cellar/block/GrapeVineCropBlock.java @@ -0,0 +1,89 @@ +package growthcraft.cellar.block; + +import java.util.ArrayList; +import java.util.Random; + +import growthcraft.core.block.RopeBlock; +import growthcraft.lib.block.GrowthcraftCropsRopeBlock; +import net.minecraft.core.BlockPos; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.Shapes; +import net.minecraft.world.phys.shapes.VoxelShape; + +public class GrapeVineCropBlock extends GrowthcraftCropsRopeBlock { + + protected static final VoxelShape[] CUSTOM_SHAPE_BY_AGE = new VoxelShape[]{ + Block.box(7.0D, 0.0D, 7.0D, 9.0D, 5.0D, 9.0D), + Block.box(7.0D, 0.0D, 7.0D, 9.0D, 5.0D, 9.0D), + Block.box(7.0D, 0.0D, 7.0D, 9.0D, 5.0D, 9.0D), + Block.box(7.0D, 0.0D, 7.0D, 9.0D, 5.0D, 9.0D), + Block.box(6.0D, 0.0D, 6.0D, 10.0D, 16.0D, 10.0D), + Block.box(6.0D, 0.0D, 6.0D, 10.0D, 16.0D, 10.0D), + Block.box(6.0D, 0.0D, 6.0D, 10.0D, 16.0D, 10.0D), + Block.box(6.0D, 0.0D, 6.0D, 10.0D, 16.0D, 10.0D), + }; + private final GrapeVineLeavesCropBlock grapeVineLeavesCropBlock; + + public GrapeVineCropBlock(GrapeVineLeavesCropBlock grapeVineLeavesCropBlock) { + super(); + this.grapeVineLeavesCropBlock = grapeVineLeavesCropBlock; + } + + @Override + public VoxelShape getShape(BlockState state, BlockGetter blockGetter, BlockPos pos, CollisionContext context) { + VoxelShape ropeVoxel = super.getShape(state, blockGetter, pos, context); + + ArrayList voxelShapeArrayList = new ArrayList(); + voxelShapeArrayList.add(CUSTOM_SHAPE_BY_AGE[state.getValue(AGE)]); + voxelShapeArrayList.add(ropeVoxel); + + VoxelShape[] voxelShapes = new VoxelShape[voxelShapeArrayList.size()]; + voxelShapes = voxelShapeArrayList.toArray(voxelShapes); + + return Shapes.or(KNOT_BOUNDING_BOX, voxelShapes); + } + + @Override + public boolean isRandomlyTicking(BlockState state) { + return true; + } + + @Override + public void randomTick(BlockState state, ServerLevel level, BlockPos pos, Random random) { + super.randomTick(state, level, pos, random); + + BlockPos oneAboveBlockPos = pos.above(); + BlockPos twoAboveBlockPos = pos.above(2); + + BlockState oneAboveBlockState = level.getBlockState(oneAboveBlockPos); + BlockState twoAboveBlockState = level.getBlockState(twoAboveBlockPos); + + if (state.getValue(AGE) == this.getMaxAge() && oneAboveBlockState.getBlock() instanceof RopeBlock) { + if (twoAboveBlockState.getBlock() instanceof RopeBlock) { + // Then keep growing vines. + level.setBlock(pos.above(), state.getBlock().defaultBlockState(), Block.UPDATE_ALL); + } else { + // Else, we need to grow a GrapeVineLeavesCropBlock. + level.setBlock(pos.above(), this.getGrapeVineLeavesCropBlock().defaultBlockState(), Block.UPDATE_ALL_IMMEDIATE); + } + } + } + + @Override + public InteractionResult use(BlockState state, Level level, BlockPos pos, Player player, InteractionHand hand, BlockHitResult hitResult) { + return InteractionResult.PASS; + } + + public GrapeVineLeavesCropBlock getGrapeVineLeavesCropBlock() { + return this.grapeVineLeavesCropBlock; + } +} diff --git a/src/main/java/growthcraft/cellar/block/GrapeVineFruitBlock.java b/src/main/java/growthcraft/cellar/block/GrapeVineFruitBlock.java new file mode 100644 index 0000000..34a43bc --- /dev/null +++ b/src/main/java/growthcraft/cellar/block/GrapeVineFruitBlock.java @@ -0,0 +1,97 @@ +package growthcraft.cellar.block; + +import growthcraft.lib.block.GrowthcraftCropsRopeBlock; +import net.minecraft.core.BlockPos; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.Containers; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.storage.loot.LootContext; +import net.minecraft.world.level.storage.loot.parameters.LootContextParams; +import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.world.phys.Vec3; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.VoxelShape; +import org.jetbrains.annotations.Nullable; + +import java.util.List; + +public class GrapeVineFruitBlock extends GrowthcraftCropsRopeBlock { + + protected static final VoxelShape[] CUSTOM_SHAPE_BY_AGE = new VoxelShape[]{ + Block.box(4.0D, 13.0D, 4.0D, 12.0D, 16.0D, 12.0D), + Block.box(4.0D, 13.0D, 4.0D, 12.0D, 16.0D, 12.0D), + Block.box(4.0D, 13.0D, 4.0D, 12.0D, 16.0D, 12.0D), + Block.box(4.0D, 13.0D, 4.0D, 12.0D, 16.0D, 12.0D), + Block.box(4.0D, 4.0D, 4.0D, 12.0D, 16.0D, 12.0D), + Block.box(4.0D, 4.0D, 4.0D, 12.0D, 16.0D, 12.0D), + Block.box(4.0D, 4.0D, 4.0D, 12.0D, 16.0D, 12.0D), + Block.box(4.0D, 4.0D, 4.0D, 12.0D, 16.0D, 12.0D) + }; + + + public GrapeVineFruitBlock() { + super(); + } + + @Override + public VoxelShape getShape(BlockState state, BlockGetter blockGetter, BlockPos pos, CollisionContext context) { + return CUSTOM_SHAPE_BY_AGE[state.getValue(AGE)]; + } + + @Override + public @Nullable BlockState getStateForPlacement(BlockPlaceContext context) { + return getActualBlockState(context.getLevel(), context.getClickedPos()); + } + + @Override + public BlockState getActualBlockState(BlockGetter level, BlockPos blockPos) { + return getActualBlockStateWithAge(level, blockPos, level.getBlockState(blockPos).getValue(this.getAgeProperty())); + } + + @Override + public BlockState getActualBlockStateWithAge(BlockGetter level, BlockPos pos, int age) { + BlockState state = super.getActualBlockStateWithAge(level, pos, age); + state.setValue(NORTH, false); + state.setValue(EAST, false); + state.setValue(SOUTH, false); + state.setValue(WEST, false); + state.setValue(UP, false); + state.setValue(DOWN, false); + return state; + } + + @Override + public InteractionResult use(BlockState state, Level level, BlockPos pos, Player player, InteractionHand hand, BlockHitResult hitResult) { + if (level.isClientSide) { + return InteractionResult.PASS; + } + + if (state.getValue(AGE) == this.getMaxAge()) { + LootContext.Builder context = new LootContext.Builder((ServerLevel) level) + .withParameter(LootContextParams.ORIGIN, new Vec3(pos.getX(), pos.getY(), pos.getZ())) + .withParameter(LootContextParams.BLOCK_STATE, state) + .withParameter(LootContextParams.THIS_ENTITY, player) + .withOptionalParameter(LootContextParams.TOOL, player.getItemInHand(hand)); + + List drops = state.getDrops(context); + + for (ItemStack stack : drops) { + Containers.dropItemStack(level, pos.getX(), pos.getY(), pos.getZ(), stack); + } + + level.setBlock(pos, this.getStateForAge(level, pos, 1), Block.UPDATE_ALL); + } + + return super.use(state, level, pos, player, hand, hitResult); + } + + +} diff --git a/src/main/java/growthcraft/cellar/block/GrapeVineLeavesCropBlock.java b/src/main/java/growthcraft/cellar/block/GrapeVineLeavesCropBlock.java new file mode 100644 index 0000000..293eec4 --- /dev/null +++ b/src/main/java/growthcraft/cellar/block/GrapeVineLeavesCropBlock.java @@ -0,0 +1,122 @@ +package growthcraft.cellar.block; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Random; + +import growthcraft.core.block.RopeBlock; +import growthcraft.core.block.entity.RopeBlockEntity; +import growthcraft.core.init.GrowthcraftTags; +import growthcraft.core.utils.BlockPropertiesUtils; +import growthcraft.lib.block.GrowthcraftCropsRopeBlock; +import net.minecraft.core.BlockPos; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.SoundType; +import net.minecraft.world.level.block.state.BlockBehaviour; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.material.Material; +import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.VoxelShape; + +public class GrapeVineLeavesCropBlock extends GrowthcraftCropsRopeBlock { + + protected static final VoxelShape[] CUSTOM_SHAPE_BY_AGE = new VoxelShape[]{ + Block.box(0.0D, 0.0D, 0.0D, 16.0D, 16.0D, 16.0D), + Block.box(0.0D, 0.0D, 0.0D, 16.0D, 16.0D, 16.0D), + Block.box(0.0D, 0.0D, 0.0D, 16.0D, 16.0D, 16.0D), + Block.box(0.0D, 0.0D, 0.0D, 16.0D, 16.0D, 16.0D), + Block.box(0.0D, 0.0D, 0.0D, 16.0D, 16.0D, 16.0D), + Block.box(0.0D, 0.0D, 0.0D, 16.0D, 16.0D, 16.0D), + Block.box(0.0D, 0.0D, 0.0D, 16.0D, 16.0D, 16.0D), + Block.box(0.0D, 0.0D, 0.0D, 16.0D, 16.0D, 16.0D)}; + private final GrapeVineFruitBlock grapeVineFruitBlock; + + public GrapeVineLeavesCropBlock(GrapeVineFruitBlock grapeVineFruitBlock) { + super(getInitProperties()); + this.grapeVineFruitBlock = grapeVineFruitBlock; + } + + public static Properties getInitProperties() { + BlockBehaviour.Properties properties = BlockBehaviour.Properties.of(Material.PLANT); + properties.noCollission(); + properties.randomTicks(); + properties.strength(0.3F, 0.3F); + properties.sound(SoundType.CROP); + properties.isValidSpawn(BlockPropertiesUtils::never); + properties.isRedstoneConductor(BlockPropertiesUtils::never); + properties.isSuffocating(BlockPropertiesUtils::never); + properties.isViewBlocking(BlockPropertiesUtils::never); + return properties; + } + + @Override + public VoxelShape getShape(BlockState state, BlockGetter blockGetter, BlockPos pos, CollisionContext context) { + return CUSTOM_SHAPE_BY_AGE[state.getValue(AGE)]; + } + + @Override + public boolean isRandomlyTicking(BlockState state) { + return true; + } + + @Override + public void randomTick(BlockState state, ServerLevel level, BlockPos pos, Random random) { + this.tryGrow(state, level, pos, random.nextInt(2)); + + if (state.getValue(AGE) == this.getMaxAge()) { + Map surroundingBlockStates = new HashMap<>(); + surroundingBlockStates.put(pos.north(), level.getBlockState(pos.north())); + surroundingBlockStates.put(pos.east(), level.getBlockState(pos.east())); + surroundingBlockStates.put(pos.south(), level.getBlockState(pos.south())); + surroundingBlockStates.put(pos.west(), level.getBlockState(pos.west())); + + // Randomly check the surrounding block states. + List directions = new ArrayList<>(surroundingBlockStates.keySet()); + Collections.shuffle(directions); + + for (BlockPos direction : directions) { + if (surroundingBlockStates.get(direction).getBlock() instanceof RopeBlock) { + // If the block is a RopeBlock then it will have a RopeBlockEntity. + RopeBlockEntity ropeBlockEntity = (RopeBlockEntity) level.getBlockEntity(direction); + if (ropeBlockEntity == null || !ropeBlockEntity.hasFenceItemStack()) { + // If the RopeBlockEntity does not have a FenceItemStack, then it is a simple rope block. + BlockState newBlockState = state.getBlock().defaultBlockState(); + newBlockState.setValue(NORTH, level.getBlockState(direction.north()).is(GrowthcraftTags.Blocks.ROPE)); + newBlockState.setValue(EAST, level.getBlockState(direction.east()).is(GrowthcraftTags.Blocks.ROPE)); + newBlockState.setValue(SOUTH, level.getBlockState(direction.south()).is(GrowthcraftTags.Blocks.ROPE)); + newBlockState.setValue(WEST, level.getBlockState(direction.west()).is(GrowthcraftTags.Blocks.ROPE)); + newBlockState.setValue(UP, level.getBlockState(direction.above()).is(GrowthcraftTags.Blocks.ROPE)); + newBlockState.setValue(DOWN, level.getBlockState(direction.below()).is(GrowthcraftTags.Blocks.ROPE)); + + level.setBlock(direction, newBlockState, Block.UPDATE_ALL); + return; + } + } + } + + if (level.getBlockState(pos.below()).isAir()) { + // If the below block is air, then spawn a GrapeVineFruitBlock. + level.setBlock(pos.below(), this.getGrapeVineFruitBlock().defaultBlockState(), Block.UPDATE_ALL); + } + } + } + + @Override + public InteractionResult use(BlockState state, Level level, BlockPos pos, Player player, InteractionHand hand, BlockHitResult hitResult) { + return InteractionResult.PASS; + } + + public GrapeVineFruitBlock getGrapeVineFruitBlock() { + return this.grapeVineFruitBlock; + } +} diff --git a/src/main/java/growthcraft/cellar/block/HopsCropBlock.java b/src/main/java/growthcraft/cellar/block/HopsCropBlock.java new file mode 100644 index 0000000..7645f5a --- /dev/null +++ b/src/main/java/growthcraft/cellar/block/HopsCropBlock.java @@ -0,0 +1,123 @@ +package growthcraft.cellar.block; + +import java.util.ArrayList; +import java.util.Map; +import java.util.Random; + +import org.jetbrains.annotations.NotNull; + +import growthcraft.cellar.init.GrowthcraftCellarBlocks; +import growthcraft.cellar.init.GrowthcraftCellarItems; +import growthcraft.cellar.init.config.GrowthcraftCellarConfig; +import growthcraft.core.block.RopeBlock; +import growthcraft.core.init.GrowthcraftTags; +import growthcraft.lib.block.GrowthcraftCropsRopeBlock; +import growthcraft.lib.utils.BlockStateUtils; +import net.minecraft.core.BlockPos; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.item.ItemEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.ItemLike; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.Shapes; +import net.minecraft.world.phys.shapes.VoxelShape; + +public class HopsCropBlock extends GrowthcraftCropsRopeBlock { + + protected static final VoxelShape[] CUSTOM_SHAPE_BY_AGE = new VoxelShape[]{ + Block.box(6.0D, 0.0D, 6.0D, 10.0D, 5.0D, 10.0D), + Block.box(6.0D, 0.0D, 6.0D, 10.0D, 5.0D, 10.0D), + Block.box(6.0D, 0.0D, 6.0D, 10.0D, 5.0D, 10.0D), + Block.box(6.0D, 0.0D, 6.0D, 10.0D, 5.0D, 10.0D), + Block.box(4.0D, 0.0D, 4.0D, 12.0D, 16.0D, 12.0D), + Block.box(4.0D, 0.0D, 4.0D, 12.0D, 16.0D, 12.0D), + Block.box(4.0D, 0.0D, 4.0D, 12.0D, 16.0D, 12.0D), + Block.box(4.0D, 0.0D, 4.0D, 12.0D, 16.0D, 12.0D) + }; + + private static final int fruitMax = GrowthcraftCellarConfig.getHopsCropMaxFruitYield(); + private static final int fruitMin = GrowthcraftCellarConfig.getHopsCropMinFruitYield(); + + public HopsCropBlock() { + super(); + } + + @Override + public VoxelShape getShape(BlockState state, BlockGetter worldIn, BlockPos pos, CollisionContext context) { + VoxelShape ropeVoxel = super.getShape(state, worldIn, pos, context); + + ArrayList voxelShapeArrayList = new ArrayList(); + Map blockMap = BlockStateUtils.getSurroundingBlockState(worldIn, pos); + + if (blockMap.get("north").is(GrowthcraftTags.Blocks.ROPE)) voxelShapeArrayList.add(NORTH_BOUNDING_BOX); + if (blockMap.get("east").is(GrowthcraftTags.Blocks.ROPE)) voxelShapeArrayList.add(EAST_BOUNDING_BOX); + if (blockMap.get("south").is(GrowthcraftTags.Blocks.ROPE)) voxelShapeArrayList.add(SOUTH_BOUNDING_BOX); + if (blockMap.get("west").is(GrowthcraftTags.Blocks.ROPE)) voxelShapeArrayList.add(WEST_BOUNDING_BOX); + if (blockMap.get("above").is(GrowthcraftTags.Blocks.ROPE)) voxelShapeArrayList.add(UP_BOUNDING_BOX); + if (blockMap.get("below").is(GrowthcraftTags.Blocks.ROPE)) voxelShapeArrayList.add(DOWN_BOUNDING_BOX); + + voxelShapeArrayList.add(CUSTOM_SHAPE_BY_AGE[state.getValue(AGE)]); + voxelShapeArrayList.add(ropeVoxel); + + VoxelShape[] voxelShapes = new VoxelShape[voxelShapeArrayList.size()]; + voxelShapes = voxelShapeArrayList.toArray(voxelShapes); + + return Shapes.or(KNOT_BOUNDING_BOX, voxelShapes); + } + + @Override + public @NotNull ItemStack getCloneItemStack(BlockGetter blockGetter, BlockPos blockPos, BlockState state) { + return new ItemStack(this.getBaseSeedId()); + } + + protected ItemLike getBaseSeedId() { + return GrowthcraftCellarItems.HOPS_SEED.get(); + } + + @Override + public InteractionResult use(BlockState state, Level level, BlockPos pos, Player player, InteractionHand hand, BlockHitResult hitResult) { + if (state.getValue(AGE) == this.getMaxAge()) { + ItemEntity itemEntity = new ItemEntity(level, pos.getX(), pos.getY(), pos.getZ(), new ItemStack(GrowthcraftCellarItems.HOPS.get())); + level.addFreshEntity(itemEntity); + level.setBlock(pos, this.getStateForAge(level, pos, this.getMaxAge() - 1), Block.UPDATE_CLIENTS); + } + return InteractionResult.PASS; + } + + @Override + public void randomTick(BlockState state, ServerLevel level, BlockPos pos, Random random) { + super.randomTick(state, level, pos, random); + this.tryGrowNewHopsVine(level, pos); + } + + @Override + public boolean isValidBonemealTarget(BlockGetter level, BlockPos pos, BlockState state, boolean isClientSide) { + return super.isValidBonemealTarget(level, pos, state, isClientSide) || level.getBlockState(pos.above()).getBlock() instanceof RopeBlock; + } + + @Override + public void performBonemeal(ServerLevel level, Random random, BlockPos pos, BlockState state) { + super.performBonemeal(level, random, pos, state); + this.tryGrowNewHopsVine(level, pos); + } + + private void tryGrowNewHopsVine(ServerLevel level, BlockPos pos) { + BlockState blockState = level.getBlockState(pos); + BlockState blockStateAbove = level.getBlockState(pos.above()); + + if (this.isMaxAge(blockState) + && blockStateAbove.is(GrowthcraftTags.Blocks.ROPE) + && !(blockStateAbove.getBlock() instanceof HopsCropBlock)) { + level.setBlock(pos.above(), GrowthcraftCellarBlocks.HOPS_VINE.get().defaultBlockState(), Block.UPDATE_ALL); + } + } + +} diff --git a/src/main/java/growthcraft/cellar/block/RoasterBlock.java b/src/main/java/growthcraft/cellar/block/RoasterBlock.java new file mode 100644 index 0000000..38a2933 --- /dev/null +++ b/src/main/java/growthcraft/cellar/block/RoasterBlock.java @@ -0,0 +1,208 @@ +package growthcraft.cellar.block; + +import java.util.Random; + +import org.jetbrains.annotations.Nullable; + +import growthcraft.cellar.GrowthcraftCellar; +import growthcraft.cellar.block.entity.RoasterBlockEntity; +import growthcraft.cellar.init.GrowthcraftCellarBlockEntities; +import growthcraft.core.init.GrowthcraftTags; +import growthcraft.core.utils.BlockPropertiesUtils; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.core.particles.ParticleTypes; +import net.minecraft.core.particles.SimpleParticleType; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.BaseEntityBlock; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.Mirror; +import net.minecraft.world.level.block.RenderShape; +import net.minecraft.world.level.block.Rotation; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityTicker; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockBehaviour; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.StateDefinition; +import net.minecraft.world.level.block.state.properties.BlockStateProperties; +import net.minecraft.world.level.block.state.properties.BooleanProperty; +import net.minecraft.world.level.block.state.properties.DirectionProperty; +import net.minecraft.world.level.block.state.properties.IntegerProperty; +import net.minecraft.world.level.material.PushReaction; +import net.minecraft.world.phys.BlockHitResult; +import net.minecraftforge.network.NetworkHooks; + +public class RoasterBlock extends BaseEntityBlock { + + public static final DirectionProperty FACING = BlockStateProperties.HORIZONTAL_FACING; + public static final BooleanProperty LIT = BooleanProperty.create("lit"); + public static final BooleanProperty SIGNAL_FIRE = BooleanProperty.create("signal_fire"); + + public static final IntegerProperty ROASTING_LEVEL = IntegerProperty.create("roasting_level", 1, 8); + + public RoasterBlock() { + this(getInitProperties()); + } + + protected RoasterBlock(Properties properties) { + super(properties); + this.registerDefaultState( + this.stateDefinition.any() + .setValue(FACING, Direction.NORTH) + .setValue(LIT, false) + .setValue(ROASTING_LEVEL, 1) + .setValue(SIGNAL_FIRE, false) + ); + } + + private static Properties getInitProperties() { + Properties properties = BlockBehaviour.Properties.copy(Blocks.FURNACE); + properties.strength(1.5F); + properties.noOcclusion(); + properties.isValidSpawn(BlockPropertiesUtils::never); + properties.isRedstoneConductor(BlockPropertiesUtils::never); + properties.isViewBlocking(BlockPropertiesUtils::never); + return properties; + } + + @Override + public RenderShape getRenderShape(BlockState blockState) { + return RenderShape.MODEL; + } + + //TODO[9]: Add smoke particles if roaster is processing. + // CampfireBlock makeparticles + + @Override + protected void createBlockStateDefinition(StateDefinition.Builder blockStateBuilder) { + blockStateBuilder.add(FACING, LIT, ROASTING_LEVEL, SIGNAL_FIRE); + } + + @Nullable + @Override + public BlockEntity newBlockEntity(BlockPos blockPos, BlockState blockState) { + return GrowthcraftCellarBlockEntities.ROASTER_BLOCK_ENTITY.get().create(blockPos, blockState); + } + + @Nullable + @Override + public BlockState getStateForPlacement(BlockPlaceContext context) { + return this.defaultBlockState() + .setValue(FACING, context.getHorizontalDirection().getOpposite()) + .setValue(LIT, false) + .setValue(SIGNAL_FIRE, false); + } + + @Override + public PushReaction getPistonPushReaction(BlockState blockState) { + return PushReaction.DESTROY; + } + + public BlockState rotate(BlockState state, Rotation rotation) { + return state.setValue(FACING, rotation.rotate(state.getValue(FACING))) + .setValue(LIT, state.getValue(LIT)) + .setValue(ROASTING_LEVEL, state.getValue(ROASTING_LEVEL)) + .setValue(SIGNAL_FIRE, state.getValue(SIGNAL_FIRE)); + } + + public BlockState mirror(BlockState state, Mirror mirror) { + return state.rotate(mirror.getRotation(state.getValue(FACING))) + .setValue(LIT, state.getValue(LIT)) + .setValue(ROASTING_LEVEL, state.getValue(ROASTING_LEVEL)) + .setValue(SIGNAL_FIRE, state.getValue(SIGNAL_FIRE)); + } + + @Nullable + @Override + public BlockEntityTicker getTicker(Level level, BlockState blockState, BlockEntityType blockEntityType) { + if (level.isClientSide) { + return blockState.getValue(SIGNAL_FIRE) ? createTickerHelper(blockEntityType, GrowthcraftCellarBlockEntities.ROASTER_BLOCK_ENTITY.get(), RoasterBlockEntity::particleTick) : null; + } else { + return createTickerHelper( + blockEntityType, + GrowthcraftCellarBlockEntities.ROASTER_BLOCK_ENTITY.get(), + (worldLevel, pos, state, blockEntity) -> (blockEntity).tick() + ); + } + } + + @Override + public InteractionResult use(BlockState state, Level level, BlockPos blockPos, Player player, InteractionHand hand, BlockHitResult hitResult) { + if (!level.isClientSide) { + if (player.getItemInHand(hand).is(GrowthcraftTags.Items.ROASTER_WRENCH)) { + // Then cycle the roaster level + RoasterBlockEntity blockEntity = (RoasterBlockEntity) level.getBlockEntity(blockPos); + // If the tick current is 0 then we are not currently processing anything. + if (blockEntity.getTickClock("current") == 0) { + blockEntity.incrementRoastingLevel(); + } + } else { + // Open the GUI + try { + // Play sound + RoasterBlockEntity blockEntity = (RoasterBlockEntity) level.getBlockEntity(blockPos); + blockEntity.playSound("open"); + NetworkHooks.openGui(((ServerPlayer) player), blockEntity, blockPos); + } catch (Exception ex) { + GrowthcraftCellar.LOGGER.error(String.format("%s unable to open RoasterBlockEntity GUI at %s.", player.getDisplayName().getString(), blockPos)); + GrowthcraftCellar.LOGGER.error(ex.getMessage()); + GrowthcraftCellar.LOGGER.error(ex.fillInStackTrace()); + } + return InteractionResult.SUCCESS; + } + } + + return InteractionResult.SUCCESS; + } + + + @Override + public void onRemove(BlockState blockState, Level level, BlockPos blockPos, BlockState newBlockState, boolean isMoving) { + if (blockState.getBlock() != newBlockState.getBlock()) { + try { + RoasterBlockEntity blockEntity = (RoasterBlockEntity) level.getBlockEntity(blockPos); + blockEntity.dropItems(); + } catch (Exception ex) { + GrowthcraftCellar.LOGGER.error(String.format("Invalid blockEntity type at %s, expected RoasterBlockEntity", blockPos)); + } + } + super.onRemove(blockState, level, blockPos, newBlockState, isMoving); + } + + public static void makeParticles(Level level, BlockPos blockPos, boolean showSignalFire, boolean p_51255_) { + Random randomsource = level.getRandom(); + SimpleParticleType simpleparticletype = ParticleTypes.CAMPFIRE_COSY_SMOKE; + + level.addAlwaysVisibleParticle( + simpleparticletype, + true, + (double) blockPos.getX() + 0.5D + randomsource.nextDouble() / 3.0D * (double) (randomsource.nextBoolean() ? 1 : -1), + (double) blockPos.getY() + randomsource.nextDouble() + randomsource.nextDouble(), + (double) blockPos.getZ() + 0.5D + randomsource.nextDouble() / 3.0D * (double) (randomsource.nextBoolean() ? 1 : -1), + 0.0D, + 0.07D, + 0.0D + ); + + if (p_51255_) { + level.addParticle( + ParticleTypes.SMOKE, + (double) blockPos.getX() + 0.5D + randomsource.nextDouble() / 4.0D * (double) (randomsource.nextBoolean() ? 1 : -1), + (double) blockPos.getY() + 0.4D, (double) blockPos.getZ() + 0.5D + randomsource.nextDouble() / 4.0D * (double) (randomsource.nextBoolean() ? 1 : -1), + 0.0D, + 0.005D, + 0.0D + ); + } + + } + + +} diff --git a/src/main/java/growthcraft/cellar/block/entity/BrewKettleBlockEntity.java b/src/main/java/growthcraft/cellar/block/entity/BrewKettleBlockEntity.java new file mode 100644 index 0000000..00a780c --- /dev/null +++ b/src/main/java/growthcraft/cellar/block/entity/BrewKettleBlockEntity.java @@ -0,0 +1,434 @@ +package growthcraft.cellar.block.entity; + +import static growthcraft.cellar.block.CultureJarBlock.LIT; + +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; +import java.util.Random; + +import javax.annotation.ParametersAreNonnullByDefault; + +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import growthcraft.cellar.block.BrewKettleBlock; +import growthcraft.cellar.init.GrowthcraftCellarBlockEntities; +import growthcraft.cellar.init.GrowthcraftCellarItems; +import growthcraft.cellar.lib.networking.GrowthcraftCellarMessages; +import growthcraft.cellar.lib.networking.packet.BrewKettleFluidTankPacket; +import growthcraft.cellar.recipe.BrewKettleRecipe; +import growthcraft.cellar.screen.container.BrewKettleMenu; +import growthcraft.lib.block.entity.GrowthcraftFluidTank; +import growthcraft.lib.utils.BlockStateUtils; +import growthcraft.lib.utils.DirectionUtils; +import growthcraft.lib.utils.RandomGeneratorUtils; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.Connection; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.TranslatableComponent; +import net.minecraft.network.protocol.Packet; +import net.minecraft.network.protocol.game.ClientGamePacketListener; +import net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.sounds.SoundSource; +import net.minecraft.world.Containers; +import net.minecraft.world.MenuProvider; +import net.minecraft.world.SimpleContainer; +import net.minecraft.world.entity.player.Inventory; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.inventory.AbstractContainerMenu; +import net.minecraft.world.inventory.ContainerData; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityTicker; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.common.util.LazyOptional; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.capability.CapabilityFluidHandler; +import net.minecraftforge.fluids.capability.IFluidHandler; +import net.minecraftforge.items.CapabilityItemHandler; +import net.minecraftforge.items.IItemHandler; +import net.minecraftforge.items.ItemStackHandler; + +public class BrewKettleBlockEntity extends BlockEntity implements BlockEntityTicker, MenuProvider { + + private int tickClock = 0; + private int tickMax = -1; + + protected final ContainerData data; + + private Component customName; + + private final ItemStackHandler itemStackHandler = new ItemStackHandler(3) { + @Override + protected void onContentsChanged(int slot) { + setChanged(); + } + + @Override + public boolean isItemValid(int slot, @NotNull ItemStack stack) { + return switch (slot) { + case 0 -> stack.getItem() == GrowthcraftCellarItems.BREW_KETTLE_LID.get(); + case 2 -> false; + default -> true; + }; + } + }; + + private LazyOptional inventoryItemHandler = LazyOptional.empty(); + + private final GrowthcraftFluidTank FLUID_TANK_0 = new GrowthcraftFluidTank(4000) { + @Override + public void onContentsChanged() { + setChanged(); + if (!level.isClientSide) { + GrowthcraftCellarMessages.sendToClients(new BrewKettleFluidTankPacket(0, this.getFluid(), worldPosition)); + } + } + }; + + private LazyOptional fluidHandler0 = LazyOptional.empty(); + + private final GrowthcraftFluidTank FLUID_TANK_1 = new GrowthcraftFluidTank(4000) { + @Override + public void onContentsChanged() { + setChanged(); + if (!level.isClientSide) { + GrowthcraftCellarMessages.sendToClients(new BrewKettleFluidTankPacket(1, this.fluid, worldPosition)); + } + } + }; + + private LazyOptional fluidHandler1 = LazyOptional.empty(); + + public BrewKettleBlockEntity(BlockPos blockPos, BlockState blockState) { + this(GrowthcraftCellarBlockEntities.BREW_KETTLE_BLOCK_ENTITY.get(), + blockPos, blockState); + } + + public BrewKettleBlockEntity(BlockEntityType blockEntityType, BlockPos blockPos, BlockState blockState) { + super(blockEntityType, blockPos, blockState); + + this.FLUID_TANK_0.allowAnyFluid(true); + this.FLUID_TANK_1.allowAnyFluid(true); + + this.data = new ContainerData() { + @Override + public int get(int index) { + return switch (index) { + case 0 -> BrewKettleBlockEntity.this.tickClock; + case 1 -> BrewKettleBlockEntity.this.tickMax; + default -> 0; + }; + } + + @Override + public void set(int index, int value) { + switch (index) { + case 0 -> BrewKettleBlockEntity.this.tickClock = value; + case 1 -> BrewKettleBlockEntity.this.tickMax = value; + } + } + + @Override + public int getCount() { + return 2; + } + }; + + } + + @Nullable + @Override + public AbstractContainerMenu createMenu(int containerId, @NotNull Inventory inventory, @NotNull Player player) { + return new BrewKettleMenu(containerId, inventory, this, this.data); + } + + @Override + public Component getDisplayName() { + return this.customName != null + ? this.customName + : new TranslatableComponent("container.growthcraft_cellar.brew_kettle"); + } + + public void tick() { + if (this.getLevel() != null) { + this.tick(this.getLevel(), this.getBlockPos(), this.getBlockState(), this); + } + } + + @Override + public void tick(Level level, BlockPos blockPos, BlockState blockState, BrewKettleBlockEntity blockEntity) { + if(!level.isClientSide) { + + if(!this.itemStackHandler.getStackInSlot(1).isEmpty() + && !this.FLUID_TANK_0.isEmpty()) { + List recipes = this.getMatchingRecipes(); + BrewKettleRecipe recipe = recipes.isEmpty() ? null : recipes.get(0); + + if(recipe != null) { + if(this.tickClock <= this.tickMax) { + this.tickClock++; + } else if(this.tickMax > 0) { + // Process recipe results. + this.itemStackHandler.getStackInSlot(1).shrink( + recipe.getInputItemStack().getCount() + ); + + this.getFluidTank(0).drain( + recipe.getInputFluidStack().getAmount(), + IFluidHandler.FluidAction.EXECUTE + ); + + this.getFluidTank(1).fill( + recipe.getOutputFluidStack().copy(), + IFluidHandler.FluidAction.EXECUTE + ); + + // Setting the by_product_chance to 0 in the recipe file should prevent it from being checked. + if (recipe.getByProductChance() != 0 && RandomGeneratorUtils.getRandomInt() <= recipe.getByProductChance()) { + ItemStack byProductItemStack = recipe.getByProduct(); + ItemStack existingByProductInSlot = this.itemStackHandler.getStackInSlot(2); + if (existingByProductInSlot.isEmpty() || existingByProductInSlot.getItem() == byProductItemStack.getItem()) { + byProductItemStack.setCount(byProductItemStack.getCount() + existingByProductInSlot.getCount()); + // Using insertStack does a check against isValiditem which is false by default for output only slots. + this.itemStackHandler.setStackInSlot(2, byProductItemStack); + } + } + + this.resetTickClock(); + } else if (this.tickMax == -1) { + this.tickMax = recipe.getProcessingTime(); + } else { + this.resetTickClock(); + } + + level.sendBlockUpdated(this.getBlockPos(), this.getBlockState(), this.getBlockState(), Block.UPDATE_ALL); + } else { + this.resetTickClock(); + } + } + } else { + // Do nothing on the client side. + } + + level.sendBlockUpdated(this.getBlockPos(), this.getBlockState(), this.getBlockState(), Block.UPDATE_ALL); + + } + + private List getMatchingRecipes() { + List matchingRecipes = new ArrayList<>(); + + List recipes = level.getRecipeManager() + .getAllRecipesFor(BrewKettleRecipe.Type.INSTANCE); + + for (BrewKettleRecipe recipe : recipes) { + if (recipe.matches( + this.itemStackHandler.getStackInSlot(1), + this.FLUID_TANK_0.getFluid(), + this.hasLid(), + BlockStateUtils.isHeated(this.getLevel(), this.getBlockPos()) + )) { + if(!this.FLUID_TANK_1.getFluid().isEmpty()) { + if(this.FLUID_TANK_1.getFluid().getRawFluid() == recipe.getOutputFluidStack().getFluid()) { + matchingRecipes.add(recipe); + } + } else { + matchingRecipes.add(recipe); + } + } + } + return matchingRecipes; + } + + public boolean hasLid() { + return this.itemStackHandler.getStackInSlot(0).getItem() == GrowthcraftCellarItems.BREW_KETTLE_LID.get(); + } + + public boolean isHeated() { + boolean heated = BlockStateUtils.isHeated(this.level, this.getBlockPos()); + // Only change the blockstate if it is different. + if (this.getBlockState().getValue(LIT).booleanValue() != heated) { + this.level.setBlock(this.getBlockPos(), this.getBlockState().setValue(LIT, heated), Block.UPDATE_ALL); + } + return heated; + } + + private void resetTickClock() { + this.tickClock = 0; + this.tickMax = -1; + } + + public void setFluidStackInTank(int tankID, FluidStack fluidStack) { + switch (tankID) { + case 0 -> this.FLUID_TANK_0.setFluid(fluidStack); + case 1 -> this.FLUID_TANK_1.setFluid(fluidStack); + default -> { + // Do nothing + } + } + } + + public FluidStack getFluidStackInTank(int tankID) { + return switch (tankID) { + case 0 -> this.FLUID_TANK_0.getFluid(); + case 1 -> this.FLUID_TANK_1.getFluid(); + default -> null; + }; + } + + public GrowthcraftFluidTank getFluidTank(int tankID) { + return switch (tankID) { + case 0 -> this.FLUID_TANK_0; + case 1 -> this.FLUID_TANK_1; + default -> null; + }; + } + + public boolean isFluidEmpty() { + return getFluidStackInTank(0).isEmpty(); + } + + public int getTickClock(String type) { + switch (type) { + case "current": + return this.tickClock; + case "max": + return this.tickMax; + default: + return 0; + } + } + + @Nullable + @Override + public Packet getUpdatePacket() { + return ClientboundBlockEntityDataPacket.create(this); + } + + @Override + public @NotNull CompoundTag getUpdateTag() { + return this.serializeNBT(); + } + + @Override + public void handleUpdateTag(CompoundTag tag) { + this.load(tag); + } + + @Override + public void load(@NotNull CompoundTag nbt) { + super.load(nbt); + this.itemStackHandler.deserializeNBT(nbt.getCompound("inventory")); + this.FLUID_TANK_0.readFromNBT(nbt.getCompound("fluid_tank_input_0")); + this.FLUID_TANK_1.readFromNBT(nbt.getCompound("fluid_tank_output_0")); + this.tickClock = nbt.getInt("CurrentProcessTicks"); + this.tickMax = nbt.getInt("MaxProcessTicks"); + + if (nbt.contains("CustomName", 8)) { + this.customName = Component.Serializer.fromJson(nbt.getString("CustomName")); + } + } + + @Override + @ParametersAreNonnullByDefault + protected void saveAdditional(CompoundTag nbt) { + nbt.put("inventory", itemStackHandler.serializeNBT()); + nbt.put("fluid_tank_input_0", FLUID_TANK_0.writeToNBT(new CompoundTag())); + nbt.put("fluid_tank_output_0", FLUID_TANK_1.writeToNBT(new CompoundTag())); + nbt.putInt("CurrentProcessTicks", this.tickClock); + nbt.putInt("MaxProcessTicks", this.tickMax); + + if (this.customName != null) { + nbt.putString("CustomName", Component.Serializer.toJson(this.customName)); + } + + super.saveAdditional(nbt); + } + + @Override + public void onDataPacket(Connection net, ClientboundBlockEntityDataPacket pkt) { + super.onDataPacket(net, pkt); + } + + @Override + public void onLoad() { + super.onLoad(); + inventoryItemHandler = LazyOptional.of(() -> itemStackHandler); + fluidHandler0 = LazyOptional.of(() -> FLUID_TANK_0); + fluidHandler1 = LazyOptional.of(() -> FLUID_TANK_1); + } + + @Override + public void invalidateCaps() { + super.invalidateCaps(); + inventoryItemHandler.invalidate(); + fluidHandler0.invalidate(); + fluidHandler1.invalidate(); + } + + @NotNull + @Override + public LazyOptional getCapability(@NotNull Capability cap, @Nullable Direction side) { + + if(cap == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY) { + if(DirectionUtils.isSide(side)) { + return this.fluidHandler1.cast(); + + } else if(DirectionUtils.isTop(side)) { + return this.fluidHandler0.cast(); + + } + } else if (cap == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) { + return this.inventoryItemHandler.cast(); + } + + return super.getCapability(cap, side); + } + + public void dropItems() { + SimpleContainer inventory = new SimpleContainer(itemStackHandler.getSlots()); + for (int i = 0; i < itemStackHandler.getSlots(); i++) { + inventory.setItem(i, itemStackHandler.getStackInSlot(i)); + } + Containers.dropContents(this.getLevel(), this.worldPosition, inventory); + } + + public void drainFluidTank(int tankID, int amount) { + this.getFluidTank(0).drain(amount, IFluidHandler.FluidAction.EXECUTE); + this.level.sendBlockUpdated(this.getBlockPos(), this.getBlockState(), this.getBlockState(), Block.UPDATE_ALL); + } + + public static void particleTick(Level level, BlockPos blockPos, BlockState blockState, BrewKettleBlockEntity blockEntity) { + Random randomsource = level.random; + if (randomsource.nextFloat() < 0.11F) { + for (int i = 0; i < randomsource.nextInt(2) + 2; ++i) { + BrewKettleBlock.makeParticles(level, blockPos, blockState); + } + } + } + + public boolean isProcessing() { + return this.tickClock > 0; + } + + public int getPercentProgress() { + float progress = (float) this.tickClock / this.tickMax; + float percentage = progress * 100; + return Math.round(percentage); + } + + public void playSound(String sound) { + if(Objects.equals(sound, "open") && this.level != null) { + this.level.playSound(null, this.getBlockPos(), SoundEvents.IRON_DOOR_OPEN, SoundSource.BLOCKS, 0, 0); + } + } + +} diff --git a/src/main/java/growthcraft/cellar/block/entity/CultureJarBlockEntity.java b/src/main/java/growthcraft/cellar/block/entity/CultureJarBlockEntity.java new file mode 100644 index 0000000..ccdb165 --- /dev/null +++ b/src/main/java/growthcraft/cellar/block/entity/CultureJarBlockEntity.java @@ -0,0 +1,352 @@ +package growthcraft.cellar.block.entity; + +import static growthcraft.cellar.block.CultureJarBlock.LIT; + +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; + +import javax.annotation.ParametersAreNonnullByDefault; + +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import growthcraft.cellar.init.GrowthcraftCellarBlockEntities; +import growthcraft.cellar.lib.networking.GrowthcraftCellarMessages; +import growthcraft.cellar.lib.networking.packet.CultureJarFluidSyncPacket; +import growthcraft.cellar.recipe.CultureJarRecipe; +import growthcraft.cellar.recipe.CultureJarStarterRecipe; +import growthcraft.cellar.screen.container.CultureJarMenu; +import growthcraft.lib.block.entity.GrowthcraftFluidTank; +import growthcraft.lib.utils.BlockStateUtils; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.Connection; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.TranslatableComponent; +import net.minecraft.network.protocol.Packet; +import net.minecraft.network.protocol.game.ClientGamePacketListener; +import net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket; +import net.minecraft.world.MenuProvider; +import net.minecraft.world.entity.player.Inventory; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.inventory.AbstractContainerMenu; +import net.minecraft.world.inventory.ContainerData; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityTicker; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.common.util.LazyOptional; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.capability.CapabilityFluidHandler; +import net.minecraftforge.fluids.capability.IFluidHandler; +import net.minecraftforge.items.CapabilityItemHandler; +import net.minecraftforge.items.IItemHandler; +import net.minecraftforge.items.ItemStackHandler; + +public class CultureJarBlockEntity extends BlockEntity implements BlockEntityTicker, MenuProvider { + private int tickClock = 0; + private int tickMax = -1; + + protected final ContainerData data; + + private Component customName; + + private final ItemStackHandler itemStackHandler = new ItemStackHandler(1) { + @Override + protected void onContentsChanged(int slot) { + setChanged(); + } + }; + + private LazyOptional itemHandlerLazyOptional = LazyOptional.empty(); + + private final GrowthcraftFluidTank FLUID_TANK_INPUT_0 = new GrowthcraftFluidTank(1000) { + @Override + public void onContentsChanged() { + setChanged(); + if (!level.isClientSide) { + GrowthcraftCellarMessages.sendToClients(new CultureJarFluidSyncPacket(0, this.fluid, worldPosition)); + } + } + }; + + private LazyOptional lazyInputFluidHandler0 = LazyOptional.empty(); + + public CultureJarBlockEntity(BlockPos blockPos, BlockState blockState) { + this(GrowthcraftCellarBlockEntities.CULTURE_JAR_BLOCK_ENTITY.get(), blockPos, blockState); + } + + public CultureJarBlockEntity(BlockEntityType blockEntityType, BlockPos blockPos, BlockState blockState) { + super(blockEntityType, blockPos, blockState); + + this.FLUID_TANK_INPUT_0.allowAnyFluid(true); + + this.data = new ContainerData() { + @Override + public int get(int index) { + return switch (index) { + case 0 -> CultureJarBlockEntity.this.tickClock; + case 1 -> CultureJarBlockEntity.this.tickMax; + default -> 0; + }; + } + + @Override + public void set(int index, int value) { + switch (index) { + case 0 -> CultureJarBlockEntity.this.tickClock = value; + case 1 -> CultureJarBlockEntity.this.tickMax = value; + } + } + + @Override + public int getCount() { + return 2; + } + }; + } + + @Override + public Component getDisplayName() { + return this.customName != null + ? this.customName + : new TranslatableComponent("container.growthcraft_cellar.culture_jar"); + } + + @Override + public void tick(Level level, BlockPos blockPos, BlockState blockState, CultureJarBlockEntity blockEntity) { + + if(!level.isClientSide && this.isHeated()) { + // Do nothing, we are just ensuring that the LIT property is accurate. + } + + // The Culture Jar requires a fluid and an item in order to do anything. + if(!level.isClientSide && this.getFluidTank(0).getFluidAmount() > 0 && !this.itemStackHandler.getStackInSlot(0).isEmpty()) { + // Check for recipe. + List recipes = this.getMatchingRecipes(this.getFluidStackInTank(0), this.itemStackHandler.getStackInSlot(0)); + CultureJarRecipe recipe = recipes.isEmpty() ? null : recipes.get(0); + + if (recipe != null) { + if (recipe.isHeatSourceRequired() && !this.isHeated()) { + return; + } + + if (this.tickClock <= this.tickMax) { + this.tickClock++; + } else if (this.tickMax > 0 && this.tickClock > this.tickMax) { + // Process the resulting recipe. + int amountToDrain = recipe.getInputFluidStack().getAmount(); + + this.getFluidTank(0).drain(amountToDrain, IFluidHandler.FluidAction.EXECUTE); + this.itemStackHandler.getStackInSlot(0).grow(1); + + this.tickMax = -1; + this.tickClock = 0; + + } else if (this.tickMax == -1) { + this.tickMax = recipe.getRecipeProcessingTime(); + } else { + this.tickMax = -1; + this.tickClock = 0; + } + + this.level.sendBlockUpdated(this.getBlockPos(), this.getBlockState(), this.getBlockState(), Block.UPDATE_ALL); + } + } else if(!level.isClientSide && this.getFluidTank(0).getFluidAmount() > 0 && this.itemStackHandler.getStackInSlot(0).isEmpty()) { + // Check for recipe. + List recipes = this.getMatchingRecipes(this.getFluidStackInTank(0)); + CultureJarStarterRecipe recipe = recipes.isEmpty() ? null : recipes.get(0); + + if (recipe != null) { + if (recipe.isHeatSourceRequired() && !this.isHeated()) { + return; + } + + if (this.tickClock <= this.tickMax) { + this.tickClock++; + } else if (this.tickMax > 0 && this.tickClock > this.tickMax) { + // Process the resulting recipe. + int amountToDrain = recipe.getInputFluidStack().getAmount(); + + this.getFluidTank(0).drain(amountToDrain, IFluidHandler.FluidAction.EXECUTE); + this.itemStackHandler.setStackInSlot(0, recipe.getInputItemStack().copy()); + + this.tickMax = -1; + this.tickClock = 0; + + } else if (this.tickMax == -1) { + this.tickMax = recipe.getRecipeProcessingTime(); + } else { + this.tickMax = -1; + this.tickClock = 0; + } + + this.level.sendBlockUpdated(this.getBlockPos(), this.getBlockState(), this.getBlockState(), Block.UPDATE_ALL); + } + } + + } + + @Nullable + @Override + public AbstractContainerMenu createMenu(int containerId, @NotNull Inventory inventory, @NotNull Player player) { + return new CultureJarMenu(containerId, inventory, this, this.data); + } + + public void tick() { + if (this.getLevel() != null) { + this.tick(this.getLevel(), this.getBlockPos(), this.getBlockState(), this); + } + } + + public boolean isHeated() { + boolean heated = BlockStateUtils.isHeated(this.level, this.getBlockPos()); + // Only change the blockstate if it is different. + if(this.getBlockState().getValue(LIT).booleanValue() != heated) { + this.level.setBlock(this.getBlockPos(), this.getBlockState().setValue(LIT, heated), Block.UPDATE_ALL); + } + return heated; + } + + public boolean isInputTankFull() { + return this.getFluidTank(0).getCapacity() == this.getFluidTank(0).getFluidAmount(); + } + + public void setFluidStackInTank(int tankID, FluidStack fluidStack) { + this.FLUID_TANK_INPUT_0.setFluid(fluidStack); + } + + public FluidStack getFluidStackInTank(int tankID) { + return this.FLUID_TANK_INPUT_0.getFluid(); + } + + public GrowthcraftFluidTank getFluidTank(int tankID) { + return this.FLUID_TANK_INPUT_0; + } + + public boolean isFluidEmpty() { + return getFluidStackInTank(0).isEmpty(); + } + + public int getTickClock(String type) { + switch (type) { + case "current": + return this.tickClock; + case "max": + return this.tickMax; + default: + return 0; + } + } + + private List getMatchingRecipes(FluidStack fluidStack, ItemStack itemStack) { + List matchingRecipes = new ArrayList<>(); + + List recipes = level.getRecipeManager() + .getAllRecipesFor(CultureJarRecipe.Type.INSTANCE); + + for (CultureJarRecipe recipe : recipes) { + if (recipe.getInputFluidStack().getFluid() == fluidStack.getFluid() + && recipe.getInputItemStack().getItem() == itemStack.getItem()) { + matchingRecipes.add(recipe); + } + } + return matchingRecipes; + } + + private List getMatchingRecipes(FluidStack fluidStack) { + List matchingRecipes = new ArrayList<>(); + + List recipes = level.getRecipeManager() + .getAllRecipesFor(CultureJarStarterRecipe.Type.INSTANCE); + + for (CultureJarStarterRecipe recipe : recipes) { + if (recipe.getInputFluidStack().getFluid() == fluidStack.getFluid()) { + matchingRecipes.add(recipe); + } + } + return matchingRecipes; + } + + @Nullable + @Override + public Packet getUpdatePacket() { + return ClientboundBlockEntityDataPacket.create(this); + } + + @Override + public @NotNull CompoundTag getUpdateTag() { + return this.serializeNBT(); + } + + @Override + public void handleUpdateTag(CompoundTag tag) { + this.load(tag); + } + + @Override + public void load(@NotNull CompoundTag nbt) { + super.load(nbt); + this.itemStackHandler.deserializeNBT(nbt.getCompound("inventory")); + this.FLUID_TANK_INPUT_0.readFromNBT(nbt.getCompound("fluid_tank_input_0")); + this.tickClock = nbt.getInt("CurrentProcessTicks"); + this.tickMax = nbt.getInt("MaxProcessTicks"); + + if (nbt.contains("CustomName", 8)) { + this.customName = Component.Serializer.fromJson(nbt.getString("CustomName")); + } + } + + @Override + @ParametersAreNonnullByDefault + protected void saveAdditional(CompoundTag nbt) { + nbt.put("inventory", itemStackHandler.serializeNBT()); + nbt.put("fluid_tank_input_0", FLUID_TANK_INPUT_0.writeToNBT(new CompoundTag())); + nbt.putInt("CurrentProcessTicks", this.tickClock); + nbt.putInt("MaxProcessTicks", this.tickMax); + + if (this.customName != null) { + nbt.putString("CustomName", Component.Serializer.toJson(this.customName)); + } + + super.saveAdditional(nbt); + } + + @Override + public void onDataPacket(Connection net, ClientboundBlockEntityDataPacket pkt) { + this.load(Objects.requireNonNull(pkt.getTag())); + } + + @Override + public void onLoad() { + super.onLoad(); + itemHandlerLazyOptional = LazyOptional.of(() -> itemStackHandler); + lazyInputFluidHandler0 = LazyOptional.of(() -> FLUID_TANK_INPUT_0); + } + + @Override + public void invalidateCaps() { + super.invalidateCaps(); + itemHandlerLazyOptional.invalidate(); + lazyInputFluidHandler0.invalidate(); + } + + @NotNull + @Override + public LazyOptional getCapability(@NotNull Capability cap, @Nullable Direction side) { + if (cap == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY) { + return this.lazyInputFluidHandler0.cast(); + } else if (cap == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) { + return itemHandlerLazyOptional.cast(); + } + return super.getCapability(cap, side); + } + + +} diff --git a/src/main/java/growthcraft/cellar/block/entity/FermentationBarrelBlockEntity.java b/src/main/java/growthcraft/cellar/block/entity/FermentationBarrelBlockEntity.java new file mode 100644 index 0000000..7b33bc8 --- /dev/null +++ b/src/main/java/growthcraft/cellar/block/entity/FermentationBarrelBlockEntity.java @@ -0,0 +1,328 @@ +package growthcraft.cellar.block.entity; + +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; + +import javax.annotation.Nonnull; +import javax.annotation.ParametersAreNonnullByDefault; + +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import growthcraft.cellar.init.GrowthcraftCellarBlockEntities; +import growthcraft.cellar.lib.networking.GrowthcraftCellarMessages; +import growthcraft.cellar.lib.networking.packet.FermentationBarrelFluidTankPacket; +import growthcraft.cellar.recipe.FermentationBarrelRecipe; +import growthcraft.cellar.screen.container.FermentationBarrelMenu; +import growthcraft.lib.block.entity.GrowthcraftFluidTank; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.Connection; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.TranslatableComponent; +import net.minecraft.network.protocol.Packet; +import net.minecraft.network.protocol.game.ClientGamePacketListener; +import net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket; +import net.minecraft.world.Containers; +import net.minecraft.world.MenuProvider; +import net.minecraft.world.SimpleContainer; +import net.minecraft.world.entity.player.Inventory; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.inventory.AbstractContainerMenu; +import net.minecraft.world.inventory.ContainerData; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityTicker; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.common.util.LazyOptional; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.capability.CapabilityFluidHandler; +import net.minecraftforge.fluids.capability.IFluidHandler; +import net.minecraftforge.items.CapabilityItemHandler; +import net.minecraftforge.items.IItemHandler; +import net.minecraftforge.items.ItemStackHandler; + +public class FermentationBarrelBlockEntity extends BlockEntity implements BlockEntityTicker, MenuProvider { + + private int tickClock = 0; + private int tickMax = -1; + + protected final ContainerData data; + + private Component customName; + + private final ItemStackHandler itemStackHandler = new ItemStackHandler(1) { + @Override + protected void onContentsChanged(int slot) { + setChanged(); + } + }; + + private LazyOptional itemHandlerLazyOptional = LazyOptional.empty(); + + private final GrowthcraftFluidTank FLUID_TANK_INPUT_0 = new GrowthcraftFluidTank(4000) { + @Override + public void onContentsChanged() { + setChanged(); + if (!level.isClientSide) { + GrowthcraftCellarMessages.sendToClients(new FermentationBarrelFluidTankPacket(0, this.fluid, worldPosition)); + } + } + }; + + private LazyOptional lazyInputFluidHandler0 = LazyOptional.empty(); + + public FermentationBarrelBlockEntity(BlockPos blockPos, BlockState blockState) { + this(GrowthcraftCellarBlockEntities.FERMENTATION_BARREL_BLOCK_ENTITY.get(), blockPos, blockState); + } + + public FermentationBarrelBlockEntity(BlockEntityType blockEntityType, BlockPos blockPos, BlockState blockState) { + super(blockEntityType, blockPos, blockState); + + this.FLUID_TANK_INPUT_0.allowAnyFluid(true); + + this.data = new ContainerData() { + @Override + public int get(int index) { + return switch (index) { + case 0 -> FermentationBarrelBlockEntity.this.tickClock; + case 1 -> FermentationBarrelBlockEntity.this.tickMax; + default -> 0; + }; + } + + @Override + public void set(int index, int value) { + switch (index) { + case 0 -> FermentationBarrelBlockEntity.this.tickClock = value; + case 1 -> FermentationBarrelBlockEntity.this.tickMax = value; + } + } + + @Override + public int getCount() { + return 2; + } + }; + } + + @Override + public Component getDisplayName() { + return this.customName != null + ? this.customName + : new TranslatableComponent("container.growthcraft_cellar.fermentation_barrel"); + } + + public void tick() { + if (this.getLevel() != null) { + this.tick(this.getLevel(), this.getBlockPos(), this.getBlockState(), this); + } + } + + @Override + public void tick(Level level, BlockPos blockPos, BlockState blockState, FermentationBarrelBlockEntity blockEntity) { + + if(!level.isClientSide && !this.getFluidTank(0).isEmpty()) { + List recipes = this.getMatchingRecipes(); + FermentationBarrelRecipe recipe = recipes.isEmpty() ? null : recipes.get(0); + + if(recipe != null && this.tickClock <= this.tickMax) { + this.tickClock++; + } else if (recipe != null && this.tickMax > 0 && this.tickClock > this.tickMax) { + // Determine multiplier for fluid output. + int multiplier = recipe.getOutputMultiplier( + this.getFluidStackInTank(0) + ); + + this.itemStackHandler.getStackInSlot(0).shrink(multiplier); + FluidStack resultingFluidStack = recipe.getResultingFluid().copy(); + int resultingAmount = resultingFluidStack.getAmount() * multiplier; + resultingFluidStack.setAmount(resultingAmount); + + // Clear the current fluid and replace with the resulting FluidStack with amount multiplier. + this.setFluidStackInTank(0, resultingFluidStack); + this.resetTickClock(); + + this.level.sendBlockUpdated(this.getBlockPos(), this.getBlockState(), this.getBlockState(), Block.UPDATE_ALL); + } else if(recipe != null && this.tickMax == -1) { + this.tickMax = recipe.getProcessingTime() * recipe.getOutputMultiplier(this.getFluidStackInTank(0)); + } else { + this.resetTickClock(); + } + + this.level.sendBlockUpdated(this.getBlockPos(), this.getBlockState(), this.getBlockState(), Block.UPDATE_ALL); + } + } + + private List getMatchingRecipes() { + List matchingRecipes = new ArrayList<>(); + + List recipes = level.getRecipeManager() + .getAllRecipesFor(FermentationBarrelRecipe.Type.INSTANCE); + + for(FermentationBarrelRecipe recipe : recipes) { + if(recipe.matches(this.itemStackHandler.getStackInSlot(0), this.getFluidStackInTank(0))) { + matchingRecipes.add(recipe); + } + } + return matchingRecipes; + } + + private List getMatchingRecipes(FluidStack fluidStack) { + List matchingRecipes = new ArrayList<>(); + + List recipes = level.getRecipeManager() + .getAllRecipesFor(FermentationBarrelRecipe.Type.INSTANCE); + + for(FermentationBarrelRecipe recipe : recipes) { + if(recipe.matches(fluidStack)) { + matchingRecipes.add(recipe); + } + } + return matchingRecipes; + } + + @Nullable + public ItemStack getResultingPotionItemStack() { + List matchingRecipes = this.getMatchingRecipes(this.getFluidStackInTank(0)); + FermentationBarrelRecipe recipe = matchingRecipes.isEmpty() ? null : matchingRecipes.get(0); + return recipe != null ? recipe.getBottleItemStack().copy() : null; + } + + private void resetTickClock() { + this.tickClock = 0; + this.tickMax = -1; + } + + @Nullable + @Override + public AbstractContainerMenu createMenu(int containerId, @NotNull Inventory inventory, @NotNull Player player) { + return new FermentationBarrelMenu(containerId, inventory, this, this.data); + } + + public boolean isInputTankFull() { + return this.getFluidTank(0).getCapacity() == this.getFluidTank(0).getFluidAmount(); + } + + public void setFluidStackInTank(int tankID, FluidStack fluidStack) { + this.FLUID_TANK_INPUT_0.setFluid(fluidStack); + } + + public FluidStack getFluidStackInTank(int tankID) { + return this.FLUID_TANK_INPUT_0.getFluid(); + } + + @Nonnull + public GrowthcraftFluidTank getFluidTank(int tankID) { + return this.FLUID_TANK_INPUT_0; + } + + public boolean isFluidEmpty() { + return getFluidStackInTank(0).isEmpty(); + } + + public int getTickClock(String type) { + switch (type) { + case "current": + return this.tickClock; + case "max": + return this.tickMax; + default: + return 0; + } + } + + @Nullable + @Override + public Packet getUpdatePacket() { + return ClientboundBlockEntityDataPacket.create(this); + } + + @Override + public @NotNull CompoundTag getUpdateTag() { + return this.serializeNBT(); + } + + @Override + public void handleUpdateTag(CompoundTag tag) { + this.load(tag); + } + + @Override + public void load(@NotNull CompoundTag nbt) { + super.load(nbt); + this.itemStackHandler.deserializeNBT(nbt.getCompound("inventory")); + this.FLUID_TANK_INPUT_0.readFromNBT(nbt.getCompound("fluid_tank_input_0")); + this.tickClock = nbt.getInt("CurrentProcessTicks"); + this.tickMax = nbt.getInt("MaxProcessTicks"); + + if (nbt.contains("CustomName", 8)) { + this.customName = Component.Serializer.fromJson(nbt.getString("CustomName")); + } + } + + @Override + @ParametersAreNonnullByDefault + protected void saveAdditional(CompoundTag nbt) { + nbt.put("inventory", itemStackHandler.serializeNBT()); + nbt.put("fluid_tank_input_0", FLUID_TANK_INPUT_0.writeToNBT(new CompoundTag())); + nbt.putInt("CurrentProcessTicks", this.tickClock); + nbt.putInt("MaxProcessTicks", this.tickMax); + + if (this.customName != null) { + nbt.putString("CustomName", Component.Serializer.toJson(this.customName)); + } + + super.saveAdditional(nbt); + } + + @Override + public void onDataPacket(Connection net, ClientboundBlockEntityDataPacket pkt) { + this.load(Objects.requireNonNull(pkt.getTag())); + } + + @Override + public void onLoad() { + super.onLoad(); + itemHandlerLazyOptional = LazyOptional.of(() -> itemStackHandler); + lazyInputFluidHandler0 = LazyOptional.of(() -> FLUID_TANK_INPUT_0); + } + + @Override + public void invalidateCaps() { + super.invalidateCaps(); + itemHandlerLazyOptional.invalidate(); + lazyInputFluidHandler0.invalidate(); + } + + @NotNull + @Override + public LazyOptional getCapability(@NotNull Capability cap, @Nullable Direction side) { + if (cap == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY) { + return this.lazyInputFluidHandler0.cast(); + } else if (cap == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) { + return itemHandlerLazyOptional.cast(); + } + return super.getCapability(cap, side); + } + + public void dropItems() { + SimpleContainer inventory = new SimpleContainer(itemStackHandler.getSlots()); + for (int i = 0; i < itemStackHandler.getSlots(); i++) { + inventory.setItem(i, itemStackHandler.getStackInSlot(i)); + } + Containers.dropContents(this.getLevel(), this.worldPosition, inventory); + } + + public void drainFluidTank(int tankID, int amount) { + this.getFluidTank(0).drain(amount, IFluidHandler.FluidAction.EXECUTE); + this.level.sendBlockUpdated(this.getBlockPos(), this.getBlockState(), this.getBlockState(), Block.UPDATE_ALL); + } + +} diff --git a/src/main/java/growthcraft/cellar/block/entity/FruitPressBlockEntity.java b/src/main/java/growthcraft/cellar/block/entity/FruitPressBlockEntity.java new file mode 100644 index 0000000..97030c0 --- /dev/null +++ b/src/main/java/growthcraft/cellar/block/entity/FruitPressBlockEntity.java @@ -0,0 +1,319 @@ +package growthcraft.cellar.block.entity; + +import static growthcraft.cellar.block.FruitPressPistonBlock.PRESSED; + +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; +import java.util.Random; + +import javax.annotation.Nonnull; +import javax.annotation.ParametersAreNonnullByDefault; + +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import growthcraft.cellar.block.FruitPressBlock; +import growthcraft.cellar.init.GrowthcraftCellarBlockEntities; +import growthcraft.cellar.lib.networking.GrowthcraftCellarMessages; +import growthcraft.cellar.lib.networking.packet.FruitPressFluidTankPacket; +import growthcraft.cellar.recipe.FruitPressRecipe; +import growthcraft.cellar.screen.container.FruitPressMenu; +import growthcraft.lib.block.entity.GrowthcraftFluidTank; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.Connection; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.TranslatableComponent; +import net.minecraft.network.protocol.Packet; +import net.minecraft.network.protocol.game.ClientGamePacketListener; +import net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket; +import net.minecraft.world.Containers; +import net.minecraft.world.MenuProvider; +import net.minecraft.world.SimpleContainer; +import net.minecraft.world.entity.player.Inventory; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.inventory.AbstractContainerMenu; +import net.minecraft.world.inventory.ContainerData; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityTicker; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.common.util.LazyOptional; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.capability.CapabilityFluidHandler; +import net.minecraftforge.fluids.capability.IFluidHandler; +import net.minecraftforge.items.CapabilityItemHandler; +import net.minecraftforge.items.IItemHandler; +import net.minecraftforge.items.ItemStackHandler; + +public class FruitPressBlockEntity extends BlockEntity implements BlockEntityTicker, MenuProvider { + private int tickClock = 0; + private int tickMax = -1; + + protected final ContainerData data; + + private Component customName; + + private final ItemStackHandler itemStackHandler = new ItemStackHandler(1) { + @Override + protected void onContentsChanged(int slot) { + setChanged(); + } + }; + + private LazyOptional itemHandlerLazyOptional = LazyOptional.empty(); + + private final GrowthcraftFluidTank FLUID_TANK_INPUT_0 = new GrowthcraftFluidTank(4000) { + @Override + public void onContentsChanged() { + setChanged(); + if (!level.isClientSide) { + GrowthcraftCellarMessages.sendToClients(new FruitPressFluidTankPacket(0, this.fluid, worldPosition)); + } + } + }; + + private LazyOptional lazyInputFluidHandler0 = LazyOptional.empty(); + + public FruitPressBlockEntity(BlockPos blockPos, BlockState blockState) { + this(GrowthcraftCellarBlockEntities.FRUIT_PRESS_BLOCK_ENTITY.get(), + blockPos, blockState); + } + + public FruitPressBlockEntity(BlockEntityType blockEntityType, BlockPos blockPos, BlockState blockState) { + super(blockEntityType, blockPos, blockState); + + this.FLUID_TANK_INPUT_0.allowAnyFluid(true); + + this.data = new ContainerData() { + @Override + public int get(int index) { + return switch (index) { + case 0 -> FruitPressBlockEntity.this.tickClock; + case 1 -> FruitPressBlockEntity.this.tickMax; + default -> 0; + }; + } + + @Override + public void set(int index, int value) { + switch (index) { + case 0 -> FruitPressBlockEntity.this.tickClock = value; + case 1 -> FruitPressBlockEntity.this.tickMax = value; + } + } + + @Override + public int getCount() { + return 2; + } + }; + } + + @Override + public Component getDisplayName() { + return this.customName != null + ? this.customName + : new TranslatableComponent("container.growthcraft_cellar.fruit_press"); + } + + public void tick() { + if (this.getLevel() != null) { + this.tick(this.getLevel(), this.getBlockPos(), this.getBlockState(), this); + } + } + + @Override + public void tick(Level level, BlockPos blockPos, BlockState blockState, FruitPressBlockEntity blockEntity) { + if(!level.isClientSide + && level.getBlockState(blockPos.above()).getValue(PRESSED) + && this.isFluidTankNotFull() + ) { + List recipes = this.getMatchingRecipes(); + FruitPressRecipe recipe = recipes.isEmpty() ? null : recipes.get(0); + + if(recipe != null && this.tickClock <= this.tickMax + && this.getFluidTank(0).canFluidStackFit(recipe.getResultingFluid()) + ) { + // Then continue to increment the ticker. + this.tickClock++; + } else if (recipe != null && this.tickMax > 0) { + // Then process the recipe results. + this.itemStackHandler.getStackInSlot(0).shrink( + recipe.getIngredientItemStack().getCount() + ); + + FluidStack resultingFluidStack = recipe.getResultingFluid().copy(); + this.getFluidTank(0).fill(resultingFluidStack, IFluidHandler.FluidAction.EXECUTE); + + this.resetTickClock(); + + level.sendBlockUpdated(this.getBlockPos(), this.getBlockState(), this.getBlockState(), Block.UPDATE_ALL); + } else if(recipe != null && this.tickMax == -1) { + this.tickMax = recipe.getProcessingTime(); + } else { + this.resetTickClock(); + } + + level.sendBlockUpdated(this.getBlockPos(), this.getBlockState(), this.getBlockState(), Block.UPDATE_ALL); + } + } + + private List getMatchingRecipes() { + List matchingRecipes = new ArrayList<>(); + + List recipes = level.getRecipeManager() + .getAllRecipesFor(FruitPressRecipe.Type.INSTANCE); + + for(FruitPressRecipe recipe : recipes) { + if(recipe.matches(this.itemStackHandler.getStackInSlot(0))) { + matchingRecipes.add(recipe); + } + } + return matchingRecipes; + } + + private void resetTickClock() { + this.tickClock = 0; + this.tickMax = -1; + } + + @Nullable + @Override + public AbstractContainerMenu createMenu(int containerId, @NotNull Inventory inventory, @NotNull Player player) { + return new FruitPressMenu(containerId, inventory, this, this.data); + } + + public void setFluidStackInTank(int tankID, FluidStack fluidStack) { + this.FLUID_TANK_INPUT_0.setFluid(fluidStack); + } + + public FluidStack getFluidStackInTank(int tankID) { + return this.FLUID_TANK_INPUT_0.getFluid(); + } + + @Nonnull + public GrowthcraftFluidTank getFluidTank(int tankID) { + return this.FLUID_TANK_INPUT_0; + } + + public boolean isFluidEmpty() { + return getFluidStackInTank(0).isEmpty(); + } + + public boolean isFluidTankNotFull() { + return getFluidTank(0).getFluidAmount() < getFluidTank(0).getCapacity(); + } + + public int getTickClock(String type) { + switch (type) { + case "current": + return this.tickClock; + case "max": + return this.tickMax; + default: + return 0; + } + } + + @Nullable + @Override + public Packet getUpdatePacket() { + return ClientboundBlockEntityDataPacket.create(this); + } + + @Override + public @NotNull CompoundTag getUpdateTag() { + return this.serializeNBT(); + } + + @Override + public void handleUpdateTag(CompoundTag tag) { + this.load(tag); + } + + @Override + public void load(@NotNull CompoundTag nbt) { + super.load(nbt); + this.itemStackHandler.deserializeNBT(nbt.getCompound("inventory")); + this.FLUID_TANK_INPUT_0.readFromNBT(nbt.getCompound("fluid_tank_input_0")); + this.tickClock = nbt.getInt("CurrentProcessTicks"); + this.tickMax = nbt.getInt("MaxProcessTicks"); + + if (nbt.contains("CustomName", 8)) { + this.customName = Component.Serializer.fromJson(nbt.getString("CustomName")); + } + } + + @Override + @ParametersAreNonnullByDefault + protected void saveAdditional(CompoundTag nbt) { + nbt.put("inventory", itemStackHandler.serializeNBT()); + nbt.put("fluid_tank_input_0", FLUID_TANK_INPUT_0.writeToNBT(new CompoundTag())); + nbt.putInt("CurrentProcessTicks", this.tickClock); + nbt.putInt("MaxProcessTicks", this.tickMax); + + if (this.customName != null) { + nbt.putString("CustomName", Component.Serializer.toJson(this.customName)); + } + + super.saveAdditional(nbt); + } + + @Override + public void onDataPacket(Connection net, ClientboundBlockEntityDataPacket pkt) { + this.load(Objects.requireNonNull(pkt.getTag())); + } + + @Override + public void onLoad() { + super.onLoad(); + itemHandlerLazyOptional = LazyOptional.of(() -> itemStackHandler); + lazyInputFluidHandler0 = LazyOptional.of(() -> FLUID_TANK_INPUT_0); + } + + @Override + public void invalidateCaps() { + super.invalidateCaps(); + itemHandlerLazyOptional.invalidate(); + lazyInputFluidHandler0.invalidate(); + } + + @NotNull + @Override + public LazyOptional getCapability(@NotNull Capability cap, @Nullable Direction side) { + if (cap == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY) { + return this.lazyInputFluidHandler0.cast(); + } else if (cap == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) { + return itemHandlerLazyOptional.cast(); + } + return super.getCapability(cap, side); + } + + public void dropItems() { + SimpleContainer inventory = new SimpleContainer(itemStackHandler.getSlots()); + for (int i = 0; i < itemStackHandler.getSlots(); i++) { + inventory.setItem(i, itemStackHandler.getStackInSlot(i)); + } + Containers.dropContents(this.getLevel(), this.worldPosition, inventory); + } + + public void drainFluidTank(int tankID, int amount) { + this.getFluidTank(0).drain(amount, IFluidHandler.FluidAction.EXECUTE); + this.level.sendBlockUpdated(this.getBlockPos(), this.getBlockState(), this.getBlockState(), Block.UPDATE_ALL); + } + + public static void particleTick(Level level, BlockPos blockPos, BlockState blockState, FruitPressBlockEntity blockEntity) { + Random randomsource = level.random; + if (randomsource.nextFloat() < 0.11F && blockEntity.getTickClock("current") > 0) { + for (int i = 0; i < randomsource.nextInt(2) + 2; ++i) { + FruitPressBlock.makeParticles(level, blockPos, blockState); + } + } + } +} diff --git a/src/main/java/growthcraft/cellar/block/entity/GrapeVineBlockEntity.java b/src/main/java/growthcraft/cellar/block/entity/GrapeVineBlockEntity.java new file mode 100644 index 0000000..cd82857 --- /dev/null +++ b/src/main/java/growthcraft/cellar/block/entity/GrapeVineBlockEntity.java @@ -0,0 +1,4 @@ +package growthcraft.cellar.block.entity; + +public class GrapeVineBlockEntity { +} diff --git a/src/main/java/growthcraft/cellar/block/entity/RoasterBlockEntity.java b/src/main/java/growthcraft/cellar/block/entity/RoasterBlockEntity.java new file mode 100644 index 0000000..c20b19f --- /dev/null +++ b/src/main/java/growthcraft/cellar/block/entity/RoasterBlockEntity.java @@ -0,0 +1,342 @@ +package growthcraft.cellar.block.entity; + +import static growthcraft.cellar.block.RoasterBlock.LIT; +import static growthcraft.cellar.block.RoasterBlock.ROASTING_LEVEL; +import static growthcraft.cellar.block.RoasterBlock.SIGNAL_FIRE; + +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; +import java.util.Random; + +import javax.annotation.ParametersAreNonnullByDefault; + +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import growthcraft.cellar.block.RoasterBlock; +import growthcraft.cellar.init.GrowthcraftCellarBlockEntities; +import growthcraft.cellar.recipe.RoasterRecipe; +import growthcraft.cellar.screen.container.RoasterMenu; +import growthcraft.lib.utils.BlockStateUtils; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.Connection; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.TranslatableComponent; +import net.minecraft.network.protocol.Packet; +import net.minecraft.network.protocol.game.ClientGamePacketListener; +import net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.sounds.SoundSource; +import net.minecraft.world.Containers; +import net.minecraft.world.MenuProvider; +import net.minecraft.world.SimpleContainer; +import net.minecraft.world.entity.player.Inventory; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.inventory.AbstractContainerMenu; +import net.minecraft.world.inventory.ContainerData; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityTicker; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.common.util.LazyOptional; +import net.minecraftforge.items.CapabilityItemHandler; +import net.minecraftforge.items.IItemHandler; +import net.minecraftforge.items.ItemStackHandler; + +public class RoasterBlockEntity extends BlockEntity implements BlockEntityTicker, MenuProvider { + + private int tickClock = 0; + private int tickMax = -1; + private int currentRoastingLevel = 1; + + protected final ContainerData data; + + private Component customName; + + private final ItemStackHandler itemStackHandler = new ItemStackHandler(2) { + @Override + protected void onContentsChanged(int slot) { + setChanged(); + } + + @Override + public boolean isItemValid(int slot, @NotNull ItemStack stack) { + return slot != 1; + } + }; + + private LazyOptional itemHandlerLazyOptional = LazyOptional.empty(); + + public RoasterBlockEntity(BlockPos blockPos, BlockState blockState) { + this(GrowthcraftCellarBlockEntities.ROASTER_BLOCK_ENTITY.get(), blockPos, blockState); + } + + public RoasterBlockEntity(BlockEntityType blockEntityType, BlockPos pos, BlockState state) { + super(blockEntityType, pos, state); + // tickMax is determined by the level of roasting. + this.data = new ContainerData() { + @Override + public int get(int index) { + return switch (index) { + case 0 -> RoasterBlockEntity.this.tickClock; + case 1 -> RoasterBlockEntity.this.tickMax; + case 2 -> RoasterBlockEntity.this.currentRoastingLevel; + default -> 0; + }; + } + + @Override + public void set(int index, int value) { + switch (index) { + case 0 -> RoasterBlockEntity.this.tickClock = value; + case 1 -> RoasterBlockEntity.this.tickMax = value; + case 2 -> RoasterBlockEntity.this.currentRoastingLevel = value; + } + } + + @Override + public int getCount() { + return 2; + } + }; + } + + + public boolean isHeated() { + boolean heated = BlockStateUtils.isHeated(this.level, this.getBlockPos()); + // Only change the blockstate if it is different. + if (Boolean.TRUE.equals(this.getBlockState().getValue(LIT)) != heated) { + if (level != null) + this.level.setBlock(this.getBlockPos(), this.getBlockState().setValue(LIT, heated).setValue(SIGNAL_FIRE, this.isProcessing()), Block.UPDATE_ALL); + } + return heated; + } + + @Override + public @NotNull Component getDisplayName() { + return this.customName != null + ? this.customName + : new TranslatableComponent("container.growthcraft_cellar.roaster"); + } + + @Nullable + @Override + public AbstractContainerMenu createMenu(int containerId, Inventory inventory, Player player) { + return new RoasterMenu(containerId, inventory, this, this.data); + } + + public void tick() { + if (this.getLevel() != null) { + this.tick(this.getLevel(), this.getBlockPos(), this.getBlockState(), this); + } + } + + @Override + public void tick(Level level, BlockPos blockPos, BlockState blockState, RoasterBlockEntity blockEntity) { + + if (!level.isClientSide && isHeated() && !this.itemStackHandler.getStackInSlot(0).isEmpty()) { + try { + List recipes = this.getMatchingRecipes(); + RoasterRecipe recipe = recipes.isEmpty() ? null : recipes.get(0); + + if (recipe != null) { + if (this.tickClock <= this.tickMax) { + this.tickClock++; + } else if (this.tickMax > 0) { + int itemCount = this.itemStackHandler.getStackInSlot(0).getCount(); + ItemStack resultItemStack = recipe.getResultItem().copy(); + resultItemStack.setCount(itemCount); + + this.itemStackHandler.setStackInSlot( + 1, + resultItemStack + ); + + // Shrink the input item count. + this.itemStackHandler.getStackInSlot(0).shrink(itemCount); + + // Reset the tick counters and notify all surrounding blocks + this.resetTickClock(); + level.sendBlockUpdated(this.getBlockPos(), this.getBlockState(), this.getBlockState(), Block.UPDATE_ALL); + } else if (this.tickMax == -1) { + // Roaster processing is based on the roaster level times 600. + // Roaster level of 1 will take 600 ticks (30 secs) to process + // whereas level 8 will take 4800 ticks (4 minutes) to process. + this.tickMax = recipe.getRecipeProcessingTime() * 30 * 20; + } else { + this.resetTickClock(); + } + + level.sendBlockUpdated(this.getBlockPos(), this.getBlockState(), this.getBlockState().setValue(SIGNAL_FIRE, this.isProcessing()), Block.UPDATE_ALL); + } + } catch (Exception e) { + + } + } else { + this.resetTickClock(); + } + } + + public int getTickClock(String type) { + switch (type) { + case "current": + return this.tickClock; + case "max": + return this.tickMax; + default: + return 0; + } + } + + private void resetTickClock() { + this.tickClock = 0; + this.tickMax = -1; + } + + public void incrementRoastingLevel() { + if (this.level != null) { + this.currentRoastingLevel = (this.currentRoastingLevel % 8) + 1; + this.level.setBlock( + this.getBlockPos(), + this.getBlockState().setValue(ROASTING_LEVEL, this.currentRoastingLevel).setValue(SIGNAL_FIRE, this.isProcessing()), + Block.UPDATE_ALL_IMMEDIATE); + } + } + + private List getMatchingRecipes() { + List matchingRecipes = new ArrayList<>(); + + List recipes = level.getRecipeManager() + .getAllRecipesFor(RoasterRecipe.Type.INSTANCE); + + for (RoasterRecipe recipe : recipes) { + if (recipe.matches(this.itemStackHandler.getStackInSlot(0), this.getCurrentRoastingLevel())) { + matchingRecipes.add(recipe); + } + } + + return matchingRecipes; + } + + @Nullable + @Override + public Packet getUpdatePacket() { + return ClientboundBlockEntityDataPacket.create(this); + } + + @Override + public @NotNull CompoundTag getUpdateTag() { + return this.serializeNBT(); + } + + @Override + public void handleUpdateTag(CompoundTag tag) { + this.load(tag); + } + + @Override + public void load(@NotNull CompoundTag nbt) { + super.load(nbt); + this.itemStackHandler.deserializeNBT(nbt.getCompound("inventory")); + this.tickClock = nbt.getInt("CurrentProcessTicks"); + this.currentRoastingLevel = nbt.getInt("RoastingLevel"); + this.tickMax = nbt.getInt("MaxProcessTicks"); + + if (nbt.contains("CustomName", 8)) { + this.customName = Component.Serializer.fromJson(nbt.getString("CustomName")); + } + } + + @Override + @ParametersAreNonnullByDefault + protected void saveAdditional(CompoundTag nbt) { + super.saveAdditional(nbt); + nbt.put("inventory", this.itemStackHandler.serializeNBT()); + nbt.putInt("CurrentProcessTicks", this.tickClock); + nbt.putInt("RoastingLevel", this.currentRoastingLevel); + nbt.putInt("MaxProcessTicks", this.tickMax); + + if (this.customName != null) { + nbt.putString("CustomName", Component.Serializer.toJson(this.customName)); + } + } + + @Override + public void onDataPacket(Connection net, ClientboundBlockEntityDataPacket pkt) { + this.load(pkt.getTag()); + } + + @Override + public void onLoad() { + super.onLoad(); + itemHandlerLazyOptional = LazyOptional.of(() -> itemStackHandler); + } + + @Override + public void invalidateCaps() { + super.invalidateCaps(); + itemHandlerLazyOptional.invalidate(); + } + + @Override + public @NotNull LazyOptional getCapability(@NotNull Capability cap, @Nullable Direction side) { + if (cap == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) { + return itemHandlerLazyOptional.cast(); + } + return super.getCapability(cap, side); + } + + public void dropItems() { + SimpleContainer inventory = new SimpleContainer(itemStackHandler.getSlots()); + + for (int i = 0; i < itemStackHandler.getSlots(); i++) { + inventory.setItem(i, itemStackHandler.getStackInSlot(i)); + } + + Containers.dropContents( + Objects.requireNonNull(this.getLevel()), + this.worldPosition, + inventory + ); + } + + public int getCurrentRoastingLevel() { + return this.currentRoastingLevel; + } + + public boolean isProcessing() { + return this.tickClock > 0; + } + + public static void particleTick(Level level, BlockPos blockPos, BlockState blockState, RoasterBlockEntity blockEntity) { + Random randomsource = level.random; + if (randomsource.nextFloat() < 0.11F) { + for (int i = 0; i < randomsource.nextInt(2) + 2; ++i) { + RoasterBlock.makeParticles(level, blockPos, blockState.getValue(RoasterBlock.SIGNAL_FIRE), false); + } + } + } + + public int getPercentProgress() { + + float progress = (float) this.tickClock / this.tickMax; + + float percentage = progress * 100; + + return Math.round(percentage); + } + + + public void playSound(String sound) { + if (Objects.equals(sound, "open") && this.level != null) { + this.level.playSound(null, this.getBlockPos(), SoundEvents.IRON_DOOR_OPEN, SoundSource.BLOCKS,1.0F, 1.0F); + } + } +} diff --git a/src/main/java/growthcraft/cellar/block/entity/renderer/BrewKettleBlockEntityRenderer.java b/src/main/java/growthcraft/cellar/block/entity/renderer/BrewKettleBlockEntityRenderer.java new file mode 100644 index 0000000..6610324 --- /dev/null +++ b/src/main/java/growthcraft/cellar/block/entity/renderer/BrewKettleBlockEntityRenderer.java @@ -0,0 +1,132 @@ +package growthcraft.cellar.block.entity.renderer; + +import java.awt.Color; + +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.VertexConsumer; +import com.mojang.math.Matrix3f; +import com.mojang.math.Matrix4f; +import com.mojang.math.Quaternion; +import com.mojang.math.Vector3f; + +import growthcraft.cellar.block.entity.BrewKettleBlockEntity; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.blockentity.BlockEntityRenderer; +import net.minecraft.client.renderer.texture.TextureAtlas; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.world.level.material.Fluid; +import net.minecraft.world.phys.Vec3; +import net.minecraftforge.fluids.FluidAttributes; +import net.minecraftforge.fluids.FluidStack; + +public class BrewKettleBlockEntityRenderer implements BlockEntityRenderer { + @Override + public boolean shouldRender(BrewKettleBlockEntity blockEntity, Vec3 p_173569_) { + return true; + } + + @Override + public boolean shouldRenderOffScreen(BrewKettleBlockEntity blockEntity) { + return true; + } + + @Override + public void render(BrewKettleBlockEntity blockEntity, float partialTick, PoseStack poseStack, MultiBufferSource multiBufferSource, int light, int overlay) { + + float baseOffset = 4.0F / 16F; + float maxFluidHeight = 15.0F / 16F; + + if(!blockEntity.getFluidStackInTank(0).isEmpty()) { + + FluidStack inputFluidStack = blockEntity.getFluidStackInTank(0); + + float inputCapacity = blockEntity.getFluidTank(0).getCapacity(); + float inputAmount = inputFluidStack.getAmount(); + float inputFluidHeight = baseOffset + (maxFluidHeight - baseOffset) * inputAmount / inputCapacity; + + renderFluidSingle(poseStack, multiBufferSource, inputFluidStack, 0.0F, inputFluidHeight, 0.0F, Vector3f.XP.rotationDegrees(90.0F), light, overlay); + } + + if(!blockEntity.getFluidStackInTank(1).isEmpty()) { + FluidStack outputFluidStack = blockEntity.getFluidStackInTank(1); + + float outputCapacity = blockEntity.getFluidTank(1).getCapacity(); + float outputAmount = outputFluidStack.getAmount(); + float outputFluidHeight = baseOffset + (maxFluidHeight - baseOffset) * outputAmount / outputCapacity; + + renderFluidSingle(poseStack, multiBufferSource, outputFluidStack, 0.0F, outputFluidHeight, 0.0F, Vector3f.XP.rotationDegrees(90.0F), light, overlay); + } + } + + public void renderFluidSingle(PoseStack poseStack, MultiBufferSource buffer, FluidStack fluidStack, float xOffset, float height, float zOffset, Quaternion rotation, int lightLevel, int overlay) { + poseStack.pushPose(); + poseStack.translate(0.5F, height, 0.5F); + + float s = 15 / 256F; + float v = 1.55F / 8F; + float w = -(v) * 2.5F; + + int alpha = 2 * 255; + + poseStack.translate(w + xOffset, 0.0F, w + zOffset); + poseStack.mulPose(rotation); + + poseStack.scale(s, s, s); + + Fluid fluid = fluidStack.getFluid(); + FluidAttributes fluidAttributes = fluid.getAttributes(); + + //IClientFluidTypeExtensions fluidTypeExtensions = IClientFluidTypeExtensions.of(fluidStack.getFluid()); + Color color = new Color(fluidAttributes.getColor()); + + TextureAtlasSprite sprite = Minecraft.getInstance().getTextureAtlas(TextureAtlas.LOCATION_BLOCKS).apply(fluidAttributes.getStillTexture(fluidStack)); + + VertexConsumer vertexBuilder = buffer.getBuffer(RenderType.translucent()); + + renderIcon(poseStack, vertexBuilder, sprite, color, alpha, overlay, lightLevel); + + poseStack.popPose(); + } + + private static void renderIcon(PoseStack poseStack, VertexConsumer vertexBuilder, TextureAtlasSprite sprite, Color color, int alpha, int overlay, int light) { + + int red = color.getRed(); + int green = color.getGreen(); + int blue = color.getBlue(); + + Matrix3f matrix3f = poseStack.last().normal(); + Matrix4f matrix4f = poseStack.last().pose(); + + vertexBuilder.vertex(matrix4f, 0.0F, 16.0F, 0) + .color(red, green, blue, alpha) + .uv(sprite.getU0(), sprite.getV1()) + .overlayCoords(overlay) + .uv2(light) + .normal(matrix3f, 0, 0, 1) + .endVertex(); + vertexBuilder.vertex(matrix4f, 16.0F, 16.0F, 0) + .color(red, green, blue, alpha) + .uv(sprite.getU1(), sprite.getV1()) + .overlayCoords(overlay) + .uv2(light) + .normal(matrix3f, 0, 0, 1) + .endVertex(); + vertexBuilder.vertex(matrix4f, 16.0F, 0.0F, 0) + .color(red, green, blue, alpha) + .uv(sprite.getU1(), sprite.getV0()) + .overlayCoords(overlay) + .uv2(light) + .normal(matrix3f, 0, 0, 1) + .endVertex(); + vertexBuilder.vertex(matrix4f, 1.0F, 0.0F, 0) + .color(red, green, blue, alpha) + .uv(sprite.getU0(), sprite.getV0()) + .overlayCoords(overlay) + .uv2(light) + .normal(matrix3f, 0, 0, 1) + .endVertex(); + + } +} diff --git a/src/main/java/growthcraft/cellar/block/entity/renderer/CultureJarBlockEntityRenderer.java b/src/main/java/growthcraft/cellar/block/entity/renderer/CultureJarBlockEntityRenderer.java new file mode 100644 index 0000000..08da836 --- /dev/null +++ b/src/main/java/growthcraft/cellar/block/entity/renderer/CultureJarBlockEntityRenderer.java @@ -0,0 +1,139 @@ +package growthcraft.cellar.block.entity.renderer; + +import java.awt.Color; + +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.VertexConsumer; +import com.mojang.math.Matrix3f; +import com.mojang.math.Matrix4f; +import com.mojang.math.Quaternion; +import com.mojang.math.Vector3f; + +import growthcraft.cellar.block.entity.CultureJarBlockEntity; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.blockentity.BlockEntityRenderer; +import net.minecraft.client.renderer.texture.TextureAtlas; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.world.level.material.Fluid; +import net.minecraft.world.phys.Vec3; +import net.minecraftforge.fluids.FluidAttributes; +import net.minecraftforge.fluids.FluidStack; + +public class CultureJarBlockEntityRenderer implements BlockEntityRenderer { + + @Override + public boolean shouldRender(CultureJarBlockEntity p_173568_, Vec3 p_173569_) { + return true; + } + + @Override + public boolean shouldRenderOffScreen(CultureJarBlockEntity p_112306_) { + return true; + } + + @Override + public void render(CultureJarBlockEntity blockEntity, float partialTick, PoseStack poseStack, MultiBufferSource multiBufferSource, int light, int overlay) { + if (blockEntity.getFluidStackInTank(0).isEmpty()) { + return; + } + + float baseOffset = 1 / 16F; + float maxFluidHeight = 4.0F / 16F; + + FluidStack inputFluidStack = blockEntity.getFluidStackInTank(0); + + float capacity = blockEntity.getFluidTank(0).getCapacity(); + float amount = inputFluidStack.getAmount(); + float inputFluidHeight = baseOffset + (maxFluidHeight - baseOffset) * amount / capacity; + + //poseStack.popPose(); + // TOP + renderFluidSingle(poseStack, multiBufferSource, inputFluidStack, 0.0F, inputFluidHeight, 0.0F, Vector3f.XP.rotationDegrees(90.0F), light, overlay); + // SOUTH FACING + renderFluidSingle(poseStack, multiBufferSource, inputFluidStack, 0.0F, 0.605F, 0.6F, Vector3f.XP.rotationDegrees(180.0F), light, overlay); + // NORTH FACING + renderFluidSingle(poseStack, multiBufferSource, inputFluidStack, 0.0F, -0.35F, 0.355F, Vector3f.XP.rotationDegrees(0.0F), light, overlay); + // BOTTOM FACING + renderFluidSingle(poseStack, multiBufferSource, inputFluidStack, 0.0F, 0.01F, 0.955F, Vector3f.XP.rotationDegrees(270.0F), light, overlay); + // WEST FACING + renderFluidSingle(poseStack, multiBufferSource, inputFluidStack, 0.355F, -0.35F, 0.956F, Vector3f.XP.rotationDegrees(90.0F), light, overlay); + // EAST FACING + renderFluidSingle(poseStack, multiBufferSource, inputFluidStack, 0.6F, -0.35F, 0.0F, Vector3f.XP.rotationDegrees(270.0F), light, overlay); + + //poseStack.pushPose(); + + } + + public void renderFluidSingle(PoseStack poseStack, MultiBufferSource buffer, FluidStack fluidStack, float xOffset, float height, float zOffset, Quaternion rotation, int lightLevel, int overlay) { + poseStack.pushPose(); + poseStack.translate(0.5F, height, 0.5F); + + float s = 14 / 256F; + float v = 1.55F / 8F; + float w = -(v) * 2.5F; + + int alpha = 2 * 255; + + poseStack.translate(w + xOffset, 0.0F, w + zOffset); + poseStack.mulPose(rotation); + + poseStack.scale(s, s, s); + + Fluid fluid = fluidStack.getFluid(); + FluidAttributes fluidAttributes = fluid.getAttributes(); + + //IClientFluidTypeExtensions fluidTypeExtensions = IClientFluidTypeExtensions.of(fluidStack.getFluid()); + Color color = new Color(fluidAttributes.getColor()); + + TextureAtlasSprite sprite = Minecraft.getInstance().getTextureAtlas(TextureAtlas.LOCATION_BLOCKS).apply(fluidAttributes.getStillTexture(fluidStack)); + + VertexConsumer vertexBuilder = buffer.getBuffer(RenderType.translucent()); + + renderIcon(poseStack, vertexBuilder, sprite, color, alpha, overlay, lightLevel); + + poseStack.popPose(); + } + + private static void renderIcon(PoseStack poseStack, VertexConsumer vertexBuilder, TextureAtlasSprite sprite, Color color, int alpha, int overlay, int light) { + + int red = color.getRed(); + int green = color.getGreen(); + int blue = color.getBlue(); + + Matrix3f matrix3f = poseStack.last().normal(); + Matrix4f matrix4f = poseStack.last().pose(); + + vertexBuilder.vertex(matrix4f, 6.5F, 11.0F, 0) + .color(red, green, blue, alpha) + .uv(sprite.getU0(), sprite.getV1()) + .overlayCoords(overlay) + .uv2(light) + .normal(matrix3f, 0, 0, 1) + .endVertex(); + vertexBuilder.vertex(matrix4f, 11.0F, 11.0F, 0) + .color(red, green, blue, alpha) + .uv(sprite.getU1(), sprite.getV1()) + .overlayCoords(overlay) + .uv2(light) + .normal(matrix3f, 0, 0, 1) + .endVertex(); + vertexBuilder.vertex(matrix4f, 11.0F, 6.5F, 0) + .color(red, green, blue, alpha) + .uv(sprite.getU1(), sprite.getV0()) + .overlayCoords(overlay) + .uv2(light) + .normal(matrix3f, 0, 0, 1) + .endVertex(); + vertexBuilder.vertex(matrix4f, 6.5F, 6.5F, 0) + .color(red, green, blue, alpha) + .uv(sprite.getU0(), sprite.getV0()) + .overlayCoords(overlay) + .uv2(light) + .normal(matrix3f, 0, 0, 1) + .endVertex(); + + } + +} diff --git a/src/main/java/growthcraft/cellar/compat/jei/JEIGrowthcraftCellarModPlugin.java b/src/main/java/growthcraft/cellar/compat/jei/JEIGrowthcraftCellarModPlugin.java new file mode 100644 index 0000000..a7d351b --- /dev/null +++ b/src/main/java/growthcraft/cellar/compat/jei/JEIGrowthcraftCellarModPlugin.java @@ -0,0 +1,80 @@ +package growthcraft.cellar.compat.jei; + +import growthcraft.cellar.compat.jei.category.*; +import growthcraft.cellar.recipe.*; +import growthcraft.cellar.shared.Reference; +import mezz.jei.api.IModPlugin; +import mezz.jei.api.JeiPlugin; +import mezz.jei.api.recipe.RecipeType; +import mezz.jei.api.registration.IRecipeCategoryRegistration; +import mezz.jei.api.registration.IRecipeRegistration; +import net.minecraft.client.Minecraft; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.crafting.RecipeManager; + +import java.util.List; +import java.util.Objects; + +@JeiPlugin +public class JEIGrowthcraftCellarModPlugin implements IModPlugin { + + public static RecipeType BREW_KETTLE_RECIPE_TYPE = + new RecipeType<>(BrewKettleRecipeCategory.UID, BrewKettleRecipe.class); + + public static RecipeType CULTURE_JAR_RECIPE_TYPE = + new RecipeType<>(CultureJarRecipeCategory.UID, CultureJarRecipe.class); + + public static RecipeType CULTURE_JAR_STARTER_RECIPE_TYPE = + new RecipeType<>(CultureJarStarterRecipeCategory.UID, CultureJarStarterRecipe.class); + + public static RecipeType FERMENTATION_BARREL_RECIPE_TYPE = + new RecipeType<>(FermentationBarrelRecipeCategory.UID, FermentationBarrelRecipe.class); + + public static RecipeType FRUIT_PRESS_RECIPE_TYPE = + new RecipeType<>(FruitPressRecipeCategory.UID, FruitPressRecipe.class); + + public static RecipeType ROASTER_RECIPE_TYPE = + new RecipeType<>(RoasterRecipeCategory.UID, RoasterRecipe.class); + + @Override + public ResourceLocation getPluginUid() { + return new ResourceLocation(Reference.MODID, "jei"); + } + + @Override + public void registerCategories(IRecipeCategoryRegistration registration) { + registration.addRecipeCategories( + new BrewKettleRecipeCategory(registration.getJeiHelpers().getGuiHelper()), + new CultureJarRecipeCategory(registration.getJeiHelpers().getGuiHelper()), + new CultureJarStarterRecipeCategory(registration.getJeiHelpers().getGuiHelper()), + new FermentationBarrelRecipeCategory(registration.getJeiHelpers().getGuiHelper()), + new FruitPressRecipeCategory(registration.getJeiHelpers().getGuiHelper()), + new RoasterRecipeCategory(registration.getJeiHelpers().getGuiHelper()) + ); + } + + @Override + public void registerRecipes(IRecipeRegistration registration) { + RecipeManager recipeManager = Objects.requireNonNull( + Minecraft.getInstance().level).getRecipeManager(); + + List brewKettleRecipes = recipeManager.getAllRecipesFor(BrewKettleRecipe.Type.INSTANCE); + registration.addRecipes(BREW_KETTLE_RECIPE_TYPE, brewKettleRecipes); + + List cultureJarRecipes = recipeManager.getAllRecipesFor(CultureJarRecipe.Type.INSTANCE); + registration.addRecipes(CULTURE_JAR_RECIPE_TYPE, cultureJarRecipes); + + List cultureJarStarterRecipes = recipeManager.getAllRecipesFor(CultureJarStarterRecipe.Type.INSTANCE); + registration.addRecipes(CULTURE_JAR_STARTER_RECIPE_TYPE, cultureJarStarterRecipes); + + List fermentationBarrelRecipes = recipeManager.getAllRecipesFor(FermentationBarrelRecipe.Type.INSTANCE); + registration.addRecipes(FERMENTATION_BARREL_RECIPE_TYPE, fermentationBarrelRecipes); + + List fruitPressRecipes = recipeManager.getAllRecipesFor(FruitPressRecipe.Type.INSTANCE); + registration.addRecipes(FRUIT_PRESS_RECIPE_TYPE, fruitPressRecipes); + + List roasterRecipes = recipeManager.getAllRecipesFor(RoasterRecipe.Type.INSTANCE); + registration.addRecipes(ROASTER_RECIPE_TYPE, roasterRecipes); + + } +} diff --git a/src/main/java/growthcraft/cellar/compat/jei/category/BrewKettleRecipeCategory.java b/src/main/java/growthcraft/cellar/compat/jei/category/BrewKettleRecipeCategory.java new file mode 100644 index 0000000..ca17697 --- /dev/null +++ b/src/main/java/growthcraft/cellar/compat/jei/category/BrewKettleRecipeCategory.java @@ -0,0 +1,141 @@ +package growthcraft.cellar.compat.jei.category; + +import com.mojang.blaze3d.vertex.PoseStack; + +import growthcraft.cellar.GrowthcraftCellar; +import growthcraft.cellar.compat.jei.JEIGrowthcraftCellarModPlugin; +import growthcraft.cellar.init.GrowthcraftCellarBlocks; +import growthcraft.cellar.init.GrowthcraftCellarItems; +import growthcraft.cellar.recipe.BrewKettleRecipe; +import growthcraft.cellar.shared.Reference; +import growthcraft.lib.utils.TextureHelper; +import growthcraft.lib.utils.TickUtils; +import mezz.jei.api.constants.VanillaTypes; +import mezz.jei.api.gui.builder.IRecipeLayoutBuilder; +import mezz.jei.api.gui.drawable.IDrawable; +import mezz.jei.api.gui.drawable.IDrawableStatic; +import mezz.jei.api.gui.ingredient.IRecipeSlotsView; +import mezz.jei.api.helpers.IGuiHelper; +import mezz.jei.api.recipe.IFocusGroup; +import mezz.jei.api.recipe.RecipeIngredientRole; +import mezz.jei.api.recipe.RecipeType; +import mezz.jei.api.recipe.category.IRecipeCategory; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.Font; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.TranslatableComponent; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.ItemStack; + +public class BrewKettleRecipeCategory implements IRecipeCategory { + + public static final ResourceLocation UID = new ResourceLocation(Reference.MODID, Reference.UnlocalizedName.BREW_KETTLE); + + private static final ResourceLocation TEXTURE = TextureHelper.getTextureGui(Reference.MODID, Reference.UnlocalizedName.BREW_KETTLE); + + private final IDrawable background; + private final IDrawable icon; + private final IDrawableStatic overlayHeated; + private final IDrawableStatic overlayTank; + + public BrewKettleRecipeCategory(IGuiHelper guiHelper) { + this.background = guiHelper.createDrawable( + TEXTURE, 10, 10, 160, 70 + ); + + this.icon = guiHelper.createDrawableIngredient( + VanillaTypes.ITEM_STACK, + new ItemStack(GrowthcraftCellarBlocks.BREW_KETTLE.get()) + ); + + // Tank gauge overlay + overlayTank = guiHelper.createDrawable( + TEXTURE, 176, 64, 12, 13 + ); + + // Heated Overlay + overlayHeated = guiHelper.createDrawable( + TEXTURE, 176, 28, 12, 13 + ); + } + + @Override + public RecipeType getRecipeType() { + return JEIGrowthcraftCellarModPlugin.BREW_KETTLE_RECIPE_TYPE; + } + + @Override + public Component getTitle() { + return new TranslatableComponent("block.growthcraft_cellar.brew_kettle"); + } + + @Override + public IDrawable getBackground() { + return this.background; + } + + @Override + public IDrawable getIcon() { + return this.icon; + } + + @Override + public void setRecipe(IRecipeLayoutBuilder builder, BrewKettleRecipe recipe, IFocusGroup focuses) { + // Optional Lid Item + if(recipe.isLidRequired()) { + builder.addSlot(RecipeIngredientRole.INPUT, 9, 7) + .addItemStack(new ItemStack(GrowthcraftCellarItems.BREW_KETTLE_LID.get())); + } + + // Input Item + builder.addSlot(RecipeIngredientRole.INPUT, 70, 25) + .addItemStack(recipe.getInputItemStack()); + + // TODO: Input Fluid + builder.addSlot(RecipeIngredientRole.INPUT, 36, 7) + .setFluidRenderer(4000, true, 16, 52) + .addFluidStack(recipe.getInputFluidStack().getFluid(), recipe.getInputFluidStack().getAmount()); + + builder.addInvisibleIngredients(RecipeIngredientRole.INPUT) + .addFluidStack(recipe.getInputFluidStack().getFluid(), recipe.getInputFluidStack().getAmount()); + + // By-Product Item + builder.addSlot(RecipeIngredientRole.OUTPUT, 131, 7) + .addItemStack(recipe.getByProduct()); + + // TODO: Output Fluid + builder.addSlot(RecipeIngredientRole.INPUT, 104, 7) + .setFluidRenderer(4000, true, 16, 52) + .addFluidStack(recipe.getOutputFluidStack().getFluid(), recipe.getOutputFluidStack().getAmount()); + + builder.addInvisibleIngredients(RecipeIngredientRole.OUTPUT) + .addFluidStack(recipe.getOutputFluidStack().getFluid(), recipe.getOutputFluidStack().getAmount()); + } + + @Override + public void draw(BrewKettleRecipe recipe, IRecipeSlotsView recipeSlotsView, PoseStack stack, double mouseX, double mouseY) { + IRecipeCategory.super.draw(recipe, recipeSlotsView, stack, mouseX, mouseY); + + try { + if (recipe.isHeatRequired()) overlayHeated.draw(stack, 59, 44); + } catch (Exception ex) { + GrowthcraftCellar.LOGGER.error("Failure to draw heat texture for Brew Kettle recipe with JEI integration."); + } + + Font font = Minecraft.getInstance().font; + font.draw(stack, String.format("(%d%%)", recipe.getByProductChance()), 131, 26,0x404040); + + font.draw(stack, TickUtils.toHoursMinutesSeconds(recipe.getProcessingTime()), 59, 60,0x404040 ); + } + + @Override + public Class getRecipeClass() { + return BrewKettleRecipe.class; + } + + @Override + public ResourceLocation getUid() { + return JEIGrowthcraftCellarModPlugin.BREW_KETTLE_RECIPE_TYPE.getUid(); + } + +} diff --git a/src/main/java/growthcraft/cellar/compat/jei/category/CultureJarRecipeCategory.java b/src/main/java/growthcraft/cellar/compat/jei/category/CultureJarRecipeCategory.java new file mode 100644 index 0000000..3f8dcfb --- /dev/null +++ b/src/main/java/growthcraft/cellar/compat/jei/category/CultureJarRecipeCategory.java @@ -0,0 +1,122 @@ +package growthcraft.cellar.compat.jei.category; + +import com.mojang.blaze3d.vertex.PoseStack; + +import growthcraft.cellar.GrowthcraftCellar; +import growthcraft.cellar.compat.jei.JEIGrowthcraftCellarModPlugin; +import growthcraft.cellar.init.GrowthcraftCellarBlocks; +import growthcraft.cellar.recipe.CultureJarRecipe; +import growthcraft.cellar.shared.Reference; +import growthcraft.lib.utils.TextureHelper; +import growthcraft.lib.utils.TickUtils; +import mezz.jei.api.constants.VanillaTypes; +import mezz.jei.api.gui.builder.IRecipeLayoutBuilder; +import mezz.jei.api.gui.drawable.IDrawable; +import mezz.jei.api.gui.drawable.IDrawableStatic; +import mezz.jei.api.gui.ingredient.IRecipeSlotsView; +import mezz.jei.api.helpers.IGuiHelper; +import mezz.jei.api.recipe.IFocusGroup; +import mezz.jei.api.recipe.RecipeIngredientRole; +import mezz.jei.api.recipe.RecipeType; +import mezz.jei.api.recipe.category.IRecipeCategory; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.Font; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.FormattedText; +import net.minecraft.network.chat.TranslatableComponent; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.ItemStack; + +public class CultureJarRecipeCategory implements IRecipeCategory { + + public static final ResourceLocation UID = new ResourceLocation(Reference.MODID, Reference.UnlocalizedName.CULTURE_JAR); + + private static final ResourceLocation TEXTURE = TextureHelper.getTextureGui(Reference.MODID, Reference.UnlocalizedName.CULTURE_JAR); + + private final IDrawable background; + private final IDrawable icon; + private final IDrawableStatic overlayHeated; + private final IDrawableStatic overlayTank; + + @Override + public RecipeType getRecipeType() { + return JEIGrowthcraftCellarModPlugin.CULTURE_JAR_RECIPE_TYPE; + } + + public CultureJarRecipeCategory(IGuiHelper guiHelper) { + this.background = guiHelper.createDrawable( + TEXTURE, 10, 10, 160, 70 + ); + ; + this.icon = guiHelper.createDrawableIngredient( + VanillaTypes.ITEM_STACK, + new ItemStack(GrowthcraftCellarBlocks.CULTURE_JAR.get()) + ); + + this.overlayHeated = guiHelper.createDrawable( + TEXTURE, 176, 28, 12, 13 + ); + + this.overlayTank = guiHelper.createDrawable( + TEXTURE, 176, 64, 12, 13 + ); + } + + @Override + public Component getTitle() { + return new TranslatableComponent("jei.growthcraft_cellar.category.culture_jar"); + } + + @Override + public IDrawable getBackground() { + return this.background; + } + + @Override + public IDrawable getIcon() { + return this.icon; + } + + @Override + public void setRecipe(IRecipeLayoutBuilder builder, CultureJarRecipe recipe, IFocusGroup focuses) { + // Input Item + builder.addSlot(RecipeIngredientRole.INPUT, 84, 25) + .addItemStack(recipe.getInputItemStack()); + + builder.addSlot(RecipeIngredientRole.INPUT, 55, 8) + .setFluidRenderer(4000, true, 16, 52) + .addFluidStack(recipe.getInputFluidStack().getFluid(), recipe.getInputFluidStack().getAmount()); + + builder.addInvisibleIngredients(RecipeIngredientRole.INPUT) + .addFluidStack(recipe.getInputFluidStack().getFluid(), recipe.getInputFluidStack().getAmount()); + + builder.addInvisibleIngredients(RecipeIngredientRole.OUTPUT) + .addItemStack(recipe.getInputItemStack()); + } + + @Override + public void draw(CultureJarRecipe recipe, IRecipeSlotsView recipeSlotsView, PoseStack stack, double mouseX, double mouseY) { + IRecipeCategory.super.draw(recipe, recipeSlotsView, stack, mouseX, mouseY); + Font font = Minecraft.getInstance().font; + + try { + if (recipe.isHeatSourceRequired()) overlayHeated.draw(stack, 86, 47); + } catch (Exception ex) { + GrowthcraftCellar.LOGGER.error("Failure to draw heat texture for Culture Jar recipe with JEI integration."); + } + + font.drawWordWrap(FormattedText.of("Culturing requires a item to grow."), 160, 125, 50, 0x404040); + + font.draw(stack, "(" + TickUtils.toHoursMinutesSeconds(recipe.getRecipeProcessingTime()) + ")", 106, 50, 0x404040); + } + + @Override + public Class getRecipeClass() { + return CultureJarRecipe.class; + } + + @Override + public ResourceLocation getUid() { + return JEIGrowthcraftCellarModPlugin.CULTURE_JAR_RECIPE_TYPE.getUid(); + } +} diff --git a/src/main/java/growthcraft/cellar/compat/jei/category/CultureJarStarterRecipeCategory.java b/src/main/java/growthcraft/cellar/compat/jei/category/CultureJarStarterRecipeCategory.java new file mode 100644 index 0000000..0bebcb4 --- /dev/null +++ b/src/main/java/growthcraft/cellar/compat/jei/category/CultureJarStarterRecipeCategory.java @@ -0,0 +1,119 @@ +package growthcraft.cellar.compat.jei.category; + +import com.mojang.blaze3d.vertex.PoseStack; + +import growthcraft.cellar.GrowthcraftCellar; +import growthcraft.cellar.compat.jei.JEIGrowthcraftCellarModPlugin; +import growthcraft.cellar.init.GrowthcraftCellarBlocks; +import growthcraft.cellar.recipe.BrewKettleRecipe; +import growthcraft.cellar.recipe.CultureJarStarterRecipe; +import growthcraft.cellar.shared.Reference; +import growthcraft.lib.utils.TextureHelper; +import growthcraft.lib.utils.TickUtils; +import mezz.jei.api.constants.VanillaTypes; +import mezz.jei.api.gui.builder.IRecipeLayoutBuilder; +import mezz.jei.api.gui.drawable.IDrawable; +import mezz.jei.api.gui.drawable.IDrawableStatic; +import mezz.jei.api.gui.ingredient.IRecipeSlotsView; +import mezz.jei.api.helpers.IGuiHelper; +import mezz.jei.api.recipe.IFocusGroup; +import mezz.jei.api.recipe.RecipeIngredientRole; +import mezz.jei.api.recipe.RecipeType; +import mezz.jei.api.recipe.category.IRecipeCategory; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.Font; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.FormattedText; +import net.minecraft.network.chat.TranslatableComponent; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.ItemStack; + +public class CultureJarStarterRecipeCategory implements IRecipeCategory { + + public static final ResourceLocation UID = new ResourceLocation(Reference.MODID, Reference.UnlocalizedName.CULTURE_JAR.concat("_starter")); + + private static final ResourceLocation TEXTURE = TextureHelper.getTextureGui(Reference.MODID, Reference.UnlocalizedName.CULTURE_JAR); + + private final IDrawable background; + private final IDrawable icon; + private final IDrawableStatic overlayHeated; + private final IDrawableStatic overlayTank; + + @Override + public RecipeType getRecipeType() { + return JEIGrowthcraftCellarModPlugin.CULTURE_JAR_STARTER_RECIPE_TYPE; + } + + public CultureJarStarterRecipeCategory(IGuiHelper guiHelper) { + this.background = guiHelper.createDrawable( + TEXTURE, 10, 10, 160, 70 + ); + this.icon = guiHelper.createDrawableIngredient( + VanillaTypes.ITEM_STACK, + new ItemStack(GrowthcraftCellarBlocks.CULTURE_JAR.get()) + ); + + this.overlayHeated = guiHelper.createDrawable( + TEXTURE, 176, 28, 12, 13 + ); + + this.overlayTank = guiHelper.createDrawable( + TEXTURE, 176, 64, 12, 13 + ); + } + + @Override + public Component getTitle() { + return new TranslatableComponent("jei.growthcraft_cellar.category.culture_jar_starter"); + } + + @Override + public IDrawable getBackground() { + return this.background; + } + + @Override + public IDrawable getIcon() { + return this.icon; + } + + @Override + public void setRecipe(IRecipeLayoutBuilder builder, CultureJarStarterRecipe recipe, IFocusGroup focuses) { + // Input Item + builder.addSlot(RecipeIngredientRole.OUTPUT, 84, 25) + .addItemStack(recipe.getInputItemStack()); + + builder.addSlot(RecipeIngredientRole.INPUT, 55, 8) + .setFluidRenderer(4000, true, 16, 52) + .addFluidStack(recipe.getInputFluidStack().getFluid(), recipe.getInputFluidStack().getAmount()); + + builder.addInvisibleIngredients(RecipeIngredientRole.INPUT) + .addFluidStack(recipe.getInputFluidStack().getFluid(), recipe.getInputFluidStack().getAmount()); + } + + @Override + public void draw(CultureJarStarterRecipe recipe, IRecipeSlotsView recipeSlotsView, PoseStack stack, double mouseX, double mouseY) { + IRecipeCategory.super.draw(recipe, recipeSlotsView, stack, mouseX, mouseY); + Font font = Minecraft.getInstance().font; + + try { + if (recipe.isHeatSourceRequired()) overlayHeated.draw(stack, 86, 47); + } catch (Exception ex) { + GrowthcraftCellar.LOGGER.error("Failure to draw heat texture for Culture Jar recipe with JEI integration."); + } + + font.drawWordWrap(FormattedText.of("Leave the item slot empty for creating a starter."), 160, 125, 50, 0x404040); + + font.draw(stack, "(" + TickUtils.toHoursMinutesSeconds(recipe.getRecipeProcessingTime()) + ")", 106, 50, 0x404040); + } + + @Override + public Class getRecipeClass() { + return CultureJarStarterRecipe.class; + } + + @Override + public ResourceLocation getUid() { + return JEIGrowthcraftCellarModPlugin.CULTURE_JAR_STARTER_RECIPE_TYPE.getUid(); + } +} diff --git a/src/main/java/growthcraft/cellar/compat/jei/category/FermentationBarrelRecipeCategory.java b/src/main/java/growthcraft/cellar/compat/jei/category/FermentationBarrelRecipeCategory.java new file mode 100644 index 0000000..a889831 --- /dev/null +++ b/src/main/java/growthcraft/cellar/compat/jei/category/FermentationBarrelRecipeCategory.java @@ -0,0 +1,103 @@ +package growthcraft.cellar.compat.jei.category; + +import com.mojang.blaze3d.vertex.PoseStack; + +import growthcraft.cellar.compat.jei.JEIGrowthcraftCellarModPlugin; +import growthcraft.cellar.init.GrowthcraftCellarBlocks; +import growthcraft.cellar.recipe.FermentationBarrelRecipe; +import growthcraft.cellar.shared.Reference; +import growthcraft.lib.utils.TextureHelper; +import growthcraft.lib.utils.TickUtils; +import mezz.jei.api.constants.VanillaTypes; +import mezz.jei.api.gui.builder.IRecipeLayoutBuilder; +import mezz.jei.api.gui.drawable.IDrawable; +import mezz.jei.api.gui.ingredient.IRecipeSlotsView; +import mezz.jei.api.helpers.IGuiHelper; +import mezz.jei.api.recipe.IFocusGroup; +import mezz.jei.api.recipe.RecipeIngredientRole; +import mezz.jei.api.recipe.RecipeType; +import mezz.jei.api.recipe.category.IRecipeCategory; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.Font; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.FormattedText; +import net.minecraft.network.chat.TranslatableComponent; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.ItemStack; + +public class FermentationBarrelRecipeCategory implements IRecipeCategory { + + public static final ResourceLocation UID = new ResourceLocation(Reference.MODID, Reference.UnlocalizedName.FERMENT_BARREL); + + private static final ResourceLocation TEXTURE = TextureHelper.getTextureGui(Reference.MODID, Reference.UnlocalizedName.FERMENT_BARREL); + + private final IDrawable background; + private final IDrawable icon; + + public FermentationBarrelRecipeCategory(IGuiHelper guiHelper) { + this.background = guiHelper.createDrawable( + TEXTURE, 10, 10, 160, 70 + ); + + this.icon = guiHelper.createDrawableIngredient( + VanillaTypes.ITEM_STACK, + new ItemStack(GrowthcraftCellarBlocks.FERMENTATION_BARREL_OAK.get()) + ); + } + + @Override + public RecipeType getRecipeType() { + return JEIGrowthcraftCellarModPlugin.FERMENTATION_BARREL_RECIPE_TYPE; + } + + @Override + public Component getTitle() { + return new TranslatableComponent("jei.growthcraft_cellar.category.fermentation_barrel"); + } + + @Override + public IDrawable getBackground() { + return this.background; + } + + @Override + public IDrawable getIcon() { + return this.icon; + } + + @Override + public void setRecipe(IRecipeLayoutBuilder builder, FermentationBarrelRecipe recipe, IFocusGroup focuses) { + + builder.addSlot(RecipeIngredientRole.INPUT, 42, 43) + .addItemStack(recipe.getIngredientItemStack()); + + builder.addSlot(RecipeIngredientRole.INPUT, 67, 7) + .setFluidRenderer(4000, true, 16, 52) + .addFluidStack(recipe.getIngredientFluidStack().getFluid(), recipe.getIngredientFluidStack().getAmount()); + + builder.addSlot(RecipeIngredientRole.OUTPUT, 88, 7) + .setFluidRenderer(4000, true, 16, 52) + .addFluidStack(recipe.getResultingFluid().getFluid(), recipe.getResultingFluid().getAmount()); + } + + @Override + public void draw(FermentationBarrelRecipe recipe, IRecipeSlotsView recipeSlotsView, PoseStack stack, double mouseX, double mouseY) { + IRecipeCategory.super.draw(recipe, recipeSlotsView, stack, mouseX, mouseY); + Font font = Minecraft.getInstance().font; + + font.drawWordWrap(FormattedText.of("Time multiplies based on amount."), 274, 125, 50, 0x404040); + + font.draw(stack, "(" + TickUtils.toHoursMinutesSeconds(recipe.getProcessingTime()) + ")", 0, 55, 0x404040); + + } + + @Override + public Class getRecipeClass() { + return FermentationBarrelRecipe.class; + } + + @Override + public ResourceLocation getUid() { + return JEIGrowthcraftCellarModPlugin.FERMENTATION_BARREL_RECIPE_TYPE.getUid(); + } +} diff --git a/src/main/java/growthcraft/cellar/compat/jei/category/FruitPressRecipeCategory.java b/src/main/java/growthcraft/cellar/compat/jei/category/FruitPressRecipeCategory.java new file mode 100644 index 0000000..a509b9a --- /dev/null +++ b/src/main/java/growthcraft/cellar/compat/jei/category/FruitPressRecipeCategory.java @@ -0,0 +1,114 @@ +package growthcraft.cellar.compat.jei.category; + +import java.util.List; +import java.util.concurrent.atomic.AtomicInteger; + +import com.mojang.blaze3d.vertex.PoseStack; + +import growthcraft.cellar.compat.jei.JEIGrowthcraftCellarModPlugin; +import growthcraft.cellar.init.GrowthcraftCellarBlocks; +import growthcraft.cellar.recipe.FruitPressRecipe; +import growthcraft.cellar.shared.Reference; +import growthcraft.lib.utils.TextureHelper; +import growthcraft.lib.utils.TickUtils; +import mezz.jei.api.constants.VanillaTypes; +import mezz.jei.api.gui.builder.IRecipeLayoutBuilder; +import mezz.jei.api.gui.drawable.IDrawable; +import mezz.jei.api.gui.ingredient.IRecipeSlotsView; +import mezz.jei.api.helpers.IGuiHelper; +import mezz.jei.api.recipe.IFocusGroup; +import mezz.jei.api.recipe.RecipeIngredientRole; +import mezz.jei.api.recipe.RecipeType; +import mezz.jei.api.recipe.category.IRecipeCategory; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.Font; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.FormattedText; +import net.minecraft.network.chat.TranslatableComponent; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.FormattedCharSequence; +import net.minecraft.world.item.ItemStack; + +public class FruitPressRecipeCategory implements IRecipeCategory { + public static final ResourceLocation UID = new ResourceLocation(Reference.MODID, Reference.UnlocalizedName.FRUIT_PRESS); + + private static final ResourceLocation TEXTURE = TextureHelper.getTextureGui(Reference.MODID, Reference.UnlocalizedName.FRUIT_PRESS); + + private final IDrawable background; + private final IDrawable icon; + + public FruitPressRecipeCategory(IGuiHelper guiHelper) { + this.background = guiHelper.createDrawable( + TEXTURE, 10, 10, 160, 70 + ); + + this.icon = guiHelper.createDrawableIngredient( + VanillaTypes.ITEM_STACK, + new ItemStack(GrowthcraftCellarBlocks.FRUIT_PRESS.get()) + ); + } + + @Override + public RecipeType getRecipeType() { + return JEIGrowthcraftCellarModPlugin.FRUIT_PRESS_RECIPE_TYPE; + } + + @Override + public Component getTitle() { + return new TranslatableComponent("jei.growthcraft_cellar.category.fruit_press"); + } + + @Override + public IDrawable getBackground() { + return this.background; + } + + @Override + public IDrawable getIcon() { + return this.icon; + } + + @Override + public void setRecipe(IRecipeLayoutBuilder builder, FruitPressRecipe recipe, IFocusGroup focuses) { + builder.addSlot(RecipeIngredientRole.INPUT, 42, 43) + .addItemStack(recipe.getIngredientItemStack()); + + builder.addSlot(RecipeIngredientRole.OUTPUT, 62, 7) + .setFluidRenderer(4000, true, 50, 52) + .addFluidStack(recipe.getResultingFluid().getFluid(), recipe.getResultingFluid().getAmount()); + } + + @Override + public void draw(FruitPressRecipe recipe, IRecipeSlotsView recipeSlotsView, PoseStack stack, double mouseX, double mouseY) { + IRecipeCategory.super.draw(recipe, recipeSlotsView, stack, mouseX, mouseY); + Font font = Minecraft.getInstance().font; + + + + font.draw(stack, "(" + TickUtils.toHoursMinutesSeconds(recipe.getProcessingTime()) + ")", 0, 55, 0x404040); + + stack.scale(0.8F, 0.8F, 0.8F); + + List splitFont = font.split(FormattedText.of("Watch for drainage particles until completed."), 60); + font.draw(stack, splitFont.get(0), 144, 7, 0x404040); + font.draw(stack, splitFont.get(1), 144, 17, 0x404040); + font.draw(stack, splitFont.get(2), 144, 27, 0x404040); + font.draw(stack, splitFont.get(3), 144, 37, 0x404040); + font.draw(stack, splitFont.get(4), 144, 47, 0x404040); + + font.split(FormattedText.of("Watch for drainage particles until completed."), 60); + + + + } + + @Override + public Class getRecipeClass() { + return FruitPressRecipe.class; + } + + @Override + public ResourceLocation getUid() { + return JEIGrowthcraftCellarModPlugin.FRUIT_PRESS_RECIPE_TYPE.getUid(); + } +} diff --git a/src/main/java/growthcraft/cellar/compat/jei/category/RoasterRecipeCategory.java b/src/main/java/growthcraft/cellar/compat/jei/category/RoasterRecipeCategory.java new file mode 100644 index 0000000..cba0f17 --- /dev/null +++ b/src/main/java/growthcraft/cellar/compat/jei/category/RoasterRecipeCategory.java @@ -0,0 +1,95 @@ +package growthcraft.cellar.compat.jei.category; + +import com.mojang.blaze3d.vertex.PoseStack; + +import growthcraft.cellar.compat.jei.JEIGrowthcraftCellarModPlugin; +import growthcraft.cellar.init.GrowthcraftCellarBlocks; +import growthcraft.cellar.recipe.RoasterRecipe; +import growthcraft.cellar.shared.Reference; +import growthcraft.lib.utils.TextureHelper; +import growthcraft.lib.utils.TickUtils; +import mezz.jei.api.constants.VanillaTypes; +import mezz.jei.api.gui.builder.IRecipeLayoutBuilder; +import mezz.jei.api.gui.drawable.IDrawable; +import mezz.jei.api.gui.ingredient.IRecipeSlotsView; +import mezz.jei.api.helpers.IGuiHelper; +import mezz.jei.api.recipe.IFocusGroup; +import mezz.jei.api.recipe.RecipeIngredientRole; +import mezz.jei.api.recipe.RecipeType; +import mezz.jei.api.recipe.category.IRecipeCategory; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.Font; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.FormattedText; +import net.minecraft.network.chat.TranslatableComponent; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.ItemStack; + +public class RoasterRecipeCategory implements IRecipeCategory { + public static final ResourceLocation UID = new ResourceLocation(Reference.MODID, Reference.UnlocalizedName.ROASTER); + + private static final ResourceLocation TEXTURE = TextureHelper.getTextureGui(Reference.MODID, Reference.UnlocalizedName.ROASTER); + + private final IDrawable background; + private final IDrawable icon; + + public RoasterRecipeCategory(IGuiHelper guiHelper) { + this.background = guiHelper.createDrawable( + TEXTURE, 10, 10, 160, 70 + ); + + this.icon = guiHelper.createDrawableIngredient( + VanillaTypes.ITEM_STACK, + new ItemStack(GrowthcraftCellarBlocks.ROASTER.get()) + ); + } + + @Override + public RecipeType getRecipeType() { + return JEIGrowthcraftCellarModPlugin.ROASTER_RECIPE_TYPE; + } + + @Override + public Component getTitle() { + return new TranslatableComponent("jei.growthcraft_cellar.category.roaster"); } + + @Override + public IDrawable getBackground() { + return this.background; + } + + @Override + public IDrawable getIcon() { + return this.icon; + } + + @Override + public void setRecipe(IRecipeLayoutBuilder builder, RoasterRecipe recipe, IFocusGroup focuses) { + builder.addSlot(RecipeIngredientRole.INPUT, 44, 32) + .addItemStack(recipe.getInputItemStack()); + + builder.addSlot(RecipeIngredientRole.OUTPUT, 96, 32) + .addItemStack(recipe.getResultItem()); + } + + @Override + public void draw(RoasterRecipe recipe, IRecipeSlotsView recipeSlotsView, PoseStack stack, double mouseX, double mouseY) { + IRecipeCategory.super.draw(recipe, recipeSlotsView, stack, mouseX, mouseY); + Font font = Minecraft.getInstance().font; + + font.drawWordWrap(FormattedText.of("Roasting time is the same regardless of amount."), 160, 119, 150, 0x404040); + + font.drawWordWrap(FormattedText.of("Roasting Level " + recipe.getRecipeProcessingTime() + " for " + TickUtils.toHoursMinutesSeconds(recipe.getRecipeProcessingTime() * 30 * 20)), 160, 181, 150, 0x404040); + + } + + @Override + public Class getRecipeClass() { + return RoasterRecipe.class; + } + + @Override + public ResourceLocation getUid() { + return JEIGrowthcraftCellarModPlugin.ROASTER_RECIPE_TYPE.getUid(); + } +} diff --git a/src/main/java/growthcraft/cellar/init/GrowthcraftCellarBlockEntities.java b/src/main/java/growthcraft/cellar/init/GrowthcraftCellarBlockEntities.java new file mode 100644 index 0000000..6c84484 --- /dev/null +++ b/src/main/java/growthcraft/cellar/init/GrowthcraftCellarBlockEntities.java @@ -0,0 +1,60 @@ +package growthcraft.cellar.init; + +import growthcraft.cellar.block.entity.*; +import growthcraft.cellar.shared.Reference; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraftforge.registries.DeferredRegister; +import net.minecraftforge.registries.ForgeRegistries; +import net.minecraftforge.registries.RegistryObject; + +public class GrowthcraftCellarBlockEntities { + + public static final DeferredRegister> BLOCK_ENTITIES = DeferredRegister.create( + ForgeRegistries.BLOCK_ENTITIES, Reference.MODID + ); + + public static final RegistryObject> BREW_KETTLE_BLOCK_ENTITY = BLOCK_ENTITIES.register( + Reference.UnlocalizedName.BREW_KETTLE, + () -> BlockEntityType.Builder.of( + BrewKettleBlockEntity::new, + GrowthcraftCellarBlocks.BREW_KETTLE.get() + ).build(null) + ); + + public static final RegistryObject> CULTURE_JAR_BLOCK_ENTITY = BLOCK_ENTITIES.register( + Reference.UnlocalizedName.CULTURE_JAR, + () -> BlockEntityType.Builder.of( + CultureJarBlockEntity::new, + GrowthcraftCellarBlocks.CULTURE_JAR.get() + ).build(null) + ); + + public static final RegistryObject> FERMENTATION_BARREL_BLOCK_ENTITY = BLOCK_ENTITIES.register( + Reference.UnlocalizedName.FERMENT_BARREL, + () -> BlockEntityType.Builder.of( + FermentationBarrelBlockEntity::new, + GrowthcraftCellarBlocks.FERMENTATION_BARREL_OAK.get() + ).build(null) + ); + + public static final RegistryObject> FRUIT_PRESS_BLOCK_ENTITY = BLOCK_ENTITIES.register( + Reference.UnlocalizedName.FRUIT_PRESS, + () -> BlockEntityType.Builder.of( + FruitPressBlockEntity::new, + GrowthcraftCellarBlocks.FRUIT_PRESS.get() + ).build(null) + ); + + public static final RegistryObject> ROASTER_BLOCK_ENTITY = BLOCK_ENTITIES.register( + Reference.UnlocalizedName.ROASTER, + () -> BlockEntityType.Builder.of( + RoasterBlockEntity::new, + GrowthcraftCellarBlocks.ROASTER.get() + ).build(null) + ); + + public GrowthcraftCellarBlockEntities() { + /* Disable automatic default public constructor */ + } + +} diff --git a/src/main/java/growthcraft/cellar/init/GrowthcraftCellarBlocks.java b/src/main/java/growthcraft/cellar/init/GrowthcraftCellarBlocks.java new file mode 100644 index 0000000..0bdb01a --- /dev/null +++ b/src/main/java/growthcraft/cellar/init/GrowthcraftCellarBlocks.java @@ -0,0 +1,125 @@ +package growthcraft.cellar.init; + +import growthcraft.cellar.block.*; +import growthcraft.cellar.shared.Reference; +import net.minecraft.world.item.BlockItem; +import net.minecraft.world.item.Item; +import net.minecraft.world.level.block.Block; +import net.minecraftforge.registries.DeferredRegister; +import net.minecraftforge.registries.ForgeRegistries; +import net.minecraftforge.registries.RegistryObject; + +import java.util.function.Supplier; + +public class GrowthcraftCellarBlocks { + + public static final DeferredRegister BLOCKS = DeferredRegister.create( + ForgeRegistries.BLOCKS, Reference.MODID + ); + + public static final RegistryObject BREW_KETTLE = registerBlock( + Reference.UnlocalizedName.BREW_KETTLE, + BrewKettleBlock::new + ); + + public static final RegistryObject CULTURE_JAR = registerBlock( + Reference.UnlocalizedName.CULTURE_JAR, + CultureJarBlock::new + ); + + public static final RegistryObject FERMENTATION_BARREL_OAK = registerBlock( + Reference.UnlocalizedName.FERMENT_BARREL_OAK, + FermentationBarrelBlock::new + ); + + public static final RegistryObject FRUIT_PRESS = registerBlock( + Reference.UnlocalizedName.FRUIT_PRESS, + FruitPressBlock::new + ); + + public static final RegistryObject FRUIT_PRESS_PISTON = registerBlock( + Reference.UnlocalizedName.FRUIT_PRESS_PISTON, + FruitPressPistonBlock::new, + true + ); + + public static final RegistryObject ROASTER = registerBlock( + Reference.UnlocalizedName.ROASTER, + RoasterBlock::new + ); + + // TODO: FRUIT_PRESS_PISTON + + public static final RegistryObject RED_GRAPE_VINE_FRUIT = registerBlock( + Reference.UnlocalizedName.RED_GRAPE_VINE_FRUIT, + GrapeVineFruitBlock::new, true + ); + public static final RegistryObject RED_GRAPE_VINE_LEAVES = registerBlock( + Reference.UnlocalizedName.RED_GRAPE_VINE_LEAVES, + () -> new GrapeVineLeavesCropBlock((GrapeVineFruitBlock) RED_GRAPE_VINE_FRUIT.get()), true + ); + public static final RegistryObject RED_GRAPE_VINE = registerBlock( + Reference.UnlocalizedName.RED_GRAPE_VINE, + () -> new GrapeVineCropBlock((GrapeVineLeavesCropBlock) RED_GRAPE_VINE_LEAVES.get()), true + ); + + public static final RegistryObject PURPLE_GRAPE_VINE_FRUIT = registerBlock( + Reference.UnlocalizedName.PURPLE_GRAPE_VINE_FRUIT, + GrapeVineFruitBlock::new, true + ); + public static final RegistryObject PURPLE_GRAPE_VINE_LEAVES = registerBlock( + Reference.UnlocalizedName.PURPLE_GRAPE_VINE_LEAVES, + () -> new GrapeVineLeavesCropBlock((GrapeVineFruitBlock) PURPLE_GRAPE_VINE_FRUIT.get()), true + ); + public static final RegistryObject PURPLE_GRAPE_VINE = registerBlock( + Reference.UnlocalizedName.PURPLE_GRAPE_VINE, + () -> new GrapeVineCropBlock((GrapeVineLeavesCropBlock) PURPLE_GRAPE_VINE_LEAVES.get()), true + ); + + public static final RegistryObject WHITE_GRAPE_VINE_FRUIT = registerBlock( + Reference.UnlocalizedName.WHITE_GRAPE_VINE_FRUIT, + GrapeVineFruitBlock::new, true + ); + public static final RegistryObject WHITE_GRAPE_VINE_LEAVES = registerBlock( + Reference.UnlocalizedName.WHITE_GRAPE_VINE_LEAVES, + () -> new GrapeVineLeavesCropBlock((GrapeVineFruitBlock) WHITE_GRAPE_VINE_FRUIT.get()), true + ); + public static final RegistryObject WHITE_GRAPE_VINE = registerBlock( + Reference.UnlocalizedName.WHITE_GRAPE_VINE, + () -> new GrapeVineCropBlock((GrapeVineLeavesCropBlock) WHITE_GRAPE_VINE_LEAVES.get()), true + ); + + public static final RegistryObject HOPS_VINE = registerBlock( + Reference.UnlocalizedName.HOPS_VINE, HopsCropBlock::new, true + ); + + private static RegistryObject registerBlock(String name, Supplier block) { + return registerBlock(name, block, false); + } + + private static RegistryObject registerBlock(String name, Supplier block, boolean excludeBlockItemRegistry) { + RegistryObject registryObject = BLOCKS.register(name, block); + if (!excludeBlockItemRegistry) { + registerBlockItem(name, registryObject); + } + return registryObject; + } + + private static void registerBlockItem(String name, RegistryObject blockRegistryObject) { + GrowthcraftCellarItems.ITEMS.register( + name, + () -> new BlockItem(blockRegistryObject.get(), getDefaultItemProperties()) + ); + } + + private static Item.Properties getDefaultItemProperties() { + Item.Properties properties = new Item.Properties().tab(growthcraft.core.shared.Reference.ITEM_GROUP); + return properties; + } + + private GrowthcraftCellarBlocks() { + /* Disable default public constructor */ + } + + +} diff --git a/src/main/java/growthcraft/cellar/init/GrowthcraftCellarFluids.java b/src/main/java/growthcraft/cellar/init/GrowthcraftCellarFluids.java new file mode 100644 index 0000000..3bb5cd1 --- /dev/null +++ b/src/main/java/growthcraft/cellar/init/GrowthcraftCellarFluids.java @@ -0,0 +1,505 @@ +package growthcraft.cellar.init; + +import growthcraft.cellar.shared.Reference; +import growthcraft.lib.utils.FluidUtils; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.world.level.block.LiquidBlock; +import net.minecraft.world.level.block.state.BlockBehaviour; +import net.minecraft.world.level.material.FlowingFluid; +import net.minecraft.world.level.material.Fluid; +import net.minecraft.world.level.material.Material; +import net.minecraftforge.fluids.FluidAttributes; +import net.minecraftforge.fluids.ForgeFlowingFluid; +import net.minecraftforge.registries.DeferredRegister; +import net.minecraftforge.registries.ForgeRegistries; +import net.minecraftforge.registries.RegistryObject; + +public class GrowthcraftCellarFluids { + public static final DeferredRegister FLUIDS = DeferredRegister.create( + ForgeRegistries.FLUIDS, Reference.MODID + ); + + public static final RegistryObject AMBER_ALE_FLUID + = FLUIDS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.AMBER_ALE).get(FluidUtils.STILL), () -> new ForgeFlowingFluid.Source(GrowthcraftCellarFluids.AMBER_ALE_PROPERTIES)); + + public static final RegistryObject AMBER_ALE_FLUID_FLOWING + = FLUIDS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.AMBER_ALE).get(FluidUtils.FLOWING), () -> new ForgeFlowingFluid.Flowing(GrowthcraftCellarFluids.AMBER_ALE_PROPERTIES)); + + public static final ForgeFlowingFluid.Properties AMBER_ALE_PROPERTIES = new ForgeFlowingFluid.Properties( + () -> AMBER_ALE_FLUID.get(), () -> AMBER_ALE_FLUID_FLOWING.get(), FluidAttributes.builder(FluidUtils.FluidResource.STILL, FluidUtils.FluidResource.FLOWING) + .sound(SoundEvents.BUCKET_EMPTY).overlay(FluidUtils.FluidResource.OVERLAY) + .color(Reference.FluidColor.AMBER_ALE.toIntValue())).slopeFindDistance(2).levelDecreasePerBlock(2) + .block(() -> GrowthcraftCellarFluids.AMBER_ALE_FLUID_BLOCK.get()).bucket(() -> GrowthcraftCellarItems.AMBER_ALE_BUCKET.get()); + + public static final RegistryObject AMBER_ALE_FLUID_BLOCK = GrowthcraftCellarBlocks.BLOCKS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.AMBER_ALE).get(FluidUtils.STILL), + () -> new LiquidBlock(() -> GrowthcraftCellarFluids.AMBER_ALE_FLUID.get(), BlockBehaviour.Properties.of(Material.WATER) + .noCollission().strength(100f).noDrops())); + + public static final RegistryObject AMBER_LAGER_FLUID + = FLUIDS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.AMBER_LAGER).get(FluidUtils.STILL), () -> new ForgeFlowingFluid.Source(GrowthcraftCellarFluids.AMBER_LAGER_PROPERTIES)); + + public static final RegistryObject AMBER_LAGER_FLUID_FLOWING + = FLUIDS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.AMBER_LAGER).get(FluidUtils.FLOWING), () -> new ForgeFlowingFluid.Flowing(GrowthcraftCellarFluids.AMBER_LAGER_PROPERTIES)); + + public static final ForgeFlowingFluid.Properties AMBER_LAGER_PROPERTIES = new ForgeFlowingFluid.Properties( + () -> AMBER_LAGER_FLUID.get(), () -> AMBER_LAGER_FLUID_FLOWING.get(), FluidAttributes.builder(FluidUtils.FluidResource.STILL, FluidUtils.FluidResource.FLOWING) + .sound(SoundEvents.BUCKET_EMPTY).overlay(FluidUtils.FluidResource.OVERLAY) + .color(Reference.FluidColor.AMBER_LAGER.toIntValue())).slopeFindDistance(2).levelDecreasePerBlock(2) + .block(() -> GrowthcraftCellarFluids.AMBER_LAGER_FLUID_BLOCK.get()).bucket(() -> GrowthcraftCellarItems.AMBER_LAGER_BUCKET.get()); + + public static final RegistryObject AMBER_LAGER_FLUID_BLOCK = GrowthcraftCellarBlocks.BLOCKS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.AMBER_LAGER).get(FluidUtils.STILL), + () -> new LiquidBlock(() -> GrowthcraftCellarFluids.AMBER_LAGER_FLUID.get(), BlockBehaviour.Properties.of(Material.WATER) + .noCollission().strength(100f).noDrops())); + + public static final RegistryObject AMBER_WORT_FLUID + = FLUIDS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.AMBER_WORT).get(FluidUtils.STILL), () -> new ForgeFlowingFluid.Source(GrowthcraftCellarFluids.AMBER_WORT_PROPERTIES)); + + public static final RegistryObject AMBER_WORT_FLUID_FLOWING + = FLUIDS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.AMBER_WORT).get(FluidUtils.FLOWING), () -> new ForgeFlowingFluid.Flowing(GrowthcraftCellarFluids.AMBER_WORT_PROPERTIES)); + + public static final ForgeFlowingFluid.Properties AMBER_WORT_PROPERTIES = new ForgeFlowingFluid.Properties( + () -> AMBER_WORT_FLUID.get(), () -> AMBER_WORT_FLUID_FLOWING.get(), FluidAttributes.builder(FluidUtils.FluidResource.STILL, FluidUtils.FluidResource.FLOWING) + .sound(SoundEvents.BUCKET_EMPTY).overlay(FluidUtils.FluidResource.OVERLAY) + .color(Reference.FluidColor.AMBER_WORT.toIntValue())).slopeFindDistance(2).levelDecreasePerBlock(2) + .block(() -> GrowthcraftCellarFluids.AMBER_WORT_FLUID_BLOCK.get()).bucket(() -> GrowthcraftCellarItems.AMBER_WORT_BUCKET.get()); + + public static final RegistryObject AMBER_WORT_FLUID_BLOCK = GrowthcraftCellarBlocks.BLOCKS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.AMBER_WORT).get(FluidUtils.STILL), + () -> new LiquidBlock(() -> GrowthcraftCellarFluids.AMBER_WORT_FLUID.get(), BlockBehaviour.Properties.of(Material.WATER) + .noCollission().strength(100f).noDrops())); + + public static final RegistryObject BROWN_ALE_FLUID + = FLUIDS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.BROWN_ALE).get(FluidUtils.STILL), () -> new ForgeFlowingFluid.Source(GrowthcraftCellarFluids.BROWN_ALE_PROPERTIES)); + + public static final RegistryObject BROWN_ALE_FLUID_FLOWING + = FLUIDS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.BROWN_ALE).get(FluidUtils.FLOWING), () -> new ForgeFlowingFluid.Flowing(GrowthcraftCellarFluids.BROWN_ALE_PROPERTIES)); + + public static final ForgeFlowingFluid.Properties BROWN_ALE_PROPERTIES = new ForgeFlowingFluid.Properties( + () -> BROWN_ALE_FLUID.get(), () -> BROWN_ALE_FLUID_FLOWING.get(), FluidAttributes.builder(FluidUtils.FluidResource.STILL, FluidUtils.FluidResource.FLOWING) + .sound(SoundEvents.BUCKET_EMPTY).overlay(FluidUtils.FluidResource.OVERLAY) + .color(Reference.FluidColor.BROWN_ALE.toIntValue())).slopeFindDistance(2).levelDecreasePerBlock(2) + .block(() -> GrowthcraftCellarFluids.BROWN_ALE_FLUID_BLOCK.get()).bucket(() -> GrowthcraftCellarItems.BROWN_ALE_BUCKET.get()); + + public static final RegistryObject BROWN_ALE_FLUID_BLOCK = GrowthcraftCellarBlocks.BLOCKS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.BROWN_ALE).get(FluidUtils.STILL), + () -> new LiquidBlock(() -> GrowthcraftCellarFluids.BROWN_ALE_FLUID.get(), BlockBehaviour.Properties.of(Material.WATER) + .noCollission().strength(100f).noDrops())); + + public static final RegistryObject BROWN_LAGER_FLUID + = FLUIDS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.BROWN_LAGER).get(FluidUtils.STILL), () -> new ForgeFlowingFluid.Source(GrowthcraftCellarFluids.BROWN_LAGER_PROPERTIES)); + + public static final RegistryObject BROWN_LAGER_FLUID_FLOWING + = FLUIDS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.BROWN_LAGER).get(FluidUtils.FLOWING), () -> new ForgeFlowingFluid.Flowing(GrowthcraftCellarFluids.BROWN_LAGER_PROPERTIES)); + + public static final ForgeFlowingFluid.Properties BROWN_LAGER_PROPERTIES = new ForgeFlowingFluid.Properties( + () -> BROWN_LAGER_FLUID.get(), () -> BROWN_LAGER_FLUID_FLOWING.get(), FluidAttributes.builder(FluidUtils.FluidResource.STILL, FluidUtils.FluidResource.FLOWING) + .sound(SoundEvents.BUCKET_EMPTY).overlay(FluidUtils.FluidResource.OVERLAY) + .color(Reference.FluidColor.BROWN_LAGER.toIntValue())).slopeFindDistance(2).levelDecreasePerBlock(2) + .block(() -> GrowthcraftCellarFluids.BROWN_LAGER_FLUID_BLOCK.get()).bucket(() -> GrowthcraftCellarItems.BROWN_LAGER_BUCKET.get()); + + public static final RegistryObject BROWN_LAGER_FLUID_BLOCK = GrowthcraftCellarBlocks.BLOCKS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.BROWN_LAGER).get(FluidUtils.STILL), + () -> new LiquidBlock(() -> GrowthcraftCellarFluids.BROWN_LAGER_FLUID.get(), BlockBehaviour.Properties.of(Material.WATER) + .noCollission().strength(100f).noDrops())); + + public static final RegistryObject BROWN_WORT_FLUID + = FLUIDS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.BROWN_WORT).get(FluidUtils.STILL), () -> new ForgeFlowingFluid.Source(GrowthcraftCellarFluids.BROWN_WORT_PROPERTIES)); + + public static final RegistryObject BROWN_WORT_FLUID_FLOWING + = FLUIDS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.BROWN_WORT).get(FluidUtils.FLOWING), () -> new ForgeFlowingFluid.Flowing(GrowthcraftCellarFluids.BROWN_WORT_PROPERTIES)); + + public static final ForgeFlowingFluid.Properties BROWN_WORT_PROPERTIES = new ForgeFlowingFluid.Properties( + () -> BROWN_WORT_FLUID.get(), () -> BROWN_WORT_FLUID_FLOWING.get(), FluidAttributes.builder(FluidUtils.FluidResource.STILL, FluidUtils.FluidResource.FLOWING) + .sound(SoundEvents.BUCKET_EMPTY).overlay(FluidUtils.FluidResource.OVERLAY) + .color(Reference.FluidColor.BROWN_WORT.toIntValue())).slopeFindDistance(2).levelDecreasePerBlock(2) + .block(() -> GrowthcraftCellarFluids.BROWN_WORT_FLUID_BLOCK.get()).bucket(() -> GrowthcraftCellarItems.BROWN_WORT_BUCKET.get()); + + public static final RegistryObject BROWN_WORT_FLUID_BLOCK = GrowthcraftCellarBlocks.BLOCKS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.BROWN_WORT).get(FluidUtils.STILL), + () -> new LiquidBlock(() -> GrowthcraftCellarFluids.BROWN_WORT_FLUID.get(), BlockBehaviour.Properties.of(Material.WATER) + .noCollission().strength(100f).noDrops())); + + public static final RegistryObject COPPER_ALE_FLUID + = FLUIDS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.COPPER_ALE).get(FluidUtils.STILL), () -> new ForgeFlowingFluid.Source(GrowthcraftCellarFluids.COPPER_ALE_PROPERTIES)); + + public static final RegistryObject COPPER_ALE_FLUID_FLOWING + = FLUIDS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.COPPER_ALE).get(FluidUtils.FLOWING), () -> new ForgeFlowingFluid.Flowing(GrowthcraftCellarFluids.COPPER_ALE_PROPERTIES)); + + public static final ForgeFlowingFluid.Properties COPPER_ALE_PROPERTIES = new ForgeFlowingFluid.Properties( + () -> COPPER_ALE_FLUID.get(), () -> COPPER_ALE_FLUID_FLOWING.get(), FluidAttributes.builder(FluidUtils.FluidResource.STILL, FluidUtils.FluidResource.FLOWING) + .sound(SoundEvents.BUCKET_EMPTY).overlay(FluidUtils.FluidResource.OVERLAY) + .color(Reference.FluidColor.COPPER_ALE.toIntValue())).slopeFindDistance(2).levelDecreasePerBlock(2) + .block(() -> GrowthcraftCellarFluids.COPPER_ALE_FLUID_BLOCK.get()).bucket(() -> GrowthcraftCellarItems.COPPER_ALE_BUCKET.get()); + + public static final RegistryObject COPPER_ALE_FLUID_BLOCK = GrowthcraftCellarBlocks.BLOCKS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.COPPER_ALE).get(FluidUtils.STILL), + () -> new LiquidBlock(() -> GrowthcraftCellarFluids.COPPER_ALE_FLUID.get(), BlockBehaviour.Properties.of(Material.WATER) + .noCollission().strength(100f).noDrops())); + + public static final RegistryObject COPPER_LAGER_FLUID + = FLUIDS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.COPPER_LAGER).get(FluidUtils.STILL), () -> new ForgeFlowingFluid.Source(GrowthcraftCellarFluids.COPPER_LAGER_PROPERTIES)); + + public static final RegistryObject COPPER_LAGER_FLUID_FLOWING + = FLUIDS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.COPPER_LAGER).get(FluidUtils.FLOWING), () -> new ForgeFlowingFluid.Flowing(GrowthcraftCellarFluids.COPPER_LAGER_PROPERTIES)); + + public static final ForgeFlowingFluid.Properties COPPER_LAGER_PROPERTIES = new ForgeFlowingFluid.Properties( + () -> COPPER_LAGER_FLUID.get(), () -> COPPER_LAGER_FLUID_FLOWING.get(), FluidAttributes.builder(FluidUtils.FluidResource.STILL, FluidUtils.FluidResource.FLOWING) + .sound(SoundEvents.BUCKET_EMPTY).overlay(FluidUtils.FluidResource.OVERLAY) + .color(Reference.FluidColor.COPPER_LAGER.toIntValue())).slopeFindDistance(2).levelDecreasePerBlock(2) + .block(() -> GrowthcraftCellarFluids.COPPER_LAGER_FLUID_BLOCK.get()).bucket(() -> GrowthcraftCellarItems.COPPER_LAGER_BUCKET.get()); + + public static final RegistryObject COPPER_LAGER_FLUID_BLOCK = GrowthcraftCellarBlocks.BLOCKS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.COPPER_LAGER).get(FluidUtils.STILL), + () -> new LiquidBlock(() -> GrowthcraftCellarFluids.COPPER_LAGER_FLUID.get(), BlockBehaviour.Properties.of(Material.WATER) + .noCollission().strength(100f).noDrops())); + + public static final RegistryObject COPPER_WORT_FLUID + = FLUIDS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.COPPER_WORT).get(FluidUtils.STILL), () -> new ForgeFlowingFluid.Source(GrowthcraftCellarFluids.COPPER_WORT_PROPERTIES)); + + public static final RegistryObject COPPER_WORT_FLUID_FLOWING + = FLUIDS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.COPPER_WORT).get(FluidUtils.FLOWING), () -> new ForgeFlowingFluid.Flowing(GrowthcraftCellarFluids.COPPER_WORT_PROPERTIES)); + + public static final ForgeFlowingFluid.Properties COPPER_WORT_PROPERTIES = new ForgeFlowingFluid.Properties( + () -> COPPER_WORT_FLUID.get(), () -> COPPER_WORT_FLUID_FLOWING.get(), FluidAttributes.builder(FluidUtils.FluidResource.STILL, FluidUtils.FluidResource.FLOWING) + .sound(SoundEvents.BUCKET_EMPTY).overlay(FluidUtils.FluidResource.OVERLAY) + .color(Reference.FluidColor.COPPER_WORT.toIntValue())).slopeFindDistance(2).levelDecreasePerBlock(2) + .block(() -> GrowthcraftCellarFluids.COPPER_WORT_FLUID_BLOCK.get()).bucket(() -> GrowthcraftCellarItems.COPPER_WORT_BUCKET.get()); + + public static final RegistryObject COPPER_WORT_FLUID_BLOCK = GrowthcraftCellarBlocks.BLOCKS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.COPPER_WORT).get(FluidUtils.STILL), + () -> new LiquidBlock(() -> GrowthcraftCellarFluids.COPPER_WORT_FLUID.get(), BlockBehaviour.Properties.of(Material.WATER) + .noCollission().strength(100f).noDrops())); + + public static final RegistryObject DARK_LAGER_FLUID + = FLUIDS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.DARK_LAGER).get(FluidUtils.STILL), () -> new ForgeFlowingFluid.Source(GrowthcraftCellarFluids.DARK_LAGER_PROPERTIES)); + + public static final RegistryObject DARK_LAGER_FLUID_FLOWING + = FLUIDS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.DARK_LAGER).get(FluidUtils.FLOWING), () -> new ForgeFlowingFluid.Flowing(GrowthcraftCellarFluids.DARK_LAGER_PROPERTIES)); + + public static final ForgeFlowingFluid.Properties DARK_LAGER_PROPERTIES = new ForgeFlowingFluid.Properties( + () -> DARK_LAGER_FLUID.get(), () -> DARK_LAGER_FLUID_FLOWING.get(), FluidAttributes.builder(FluidUtils.FluidResource.STILL, FluidUtils.FluidResource.FLOWING) + .sound(SoundEvents.BUCKET_EMPTY).overlay(FluidUtils.FluidResource.OVERLAY) + .color(Reference.FluidColor.DARK_LAGER.toIntValue())).slopeFindDistance(2).levelDecreasePerBlock(2) + .block(() -> GrowthcraftCellarFluids.DARK_LAGER_FLUID_BLOCK.get()).bucket(() -> GrowthcraftCellarItems.DARK_LAGER_BUCKET.get()); + + public static final RegistryObject DARK_LAGER_FLUID_BLOCK = GrowthcraftCellarBlocks.BLOCKS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.DARK_LAGER).get(FluidUtils.STILL), + () -> new LiquidBlock(() -> GrowthcraftCellarFluids.DARK_LAGER_FLUID.get(), BlockBehaviour.Properties.of(Material.WATER) + .noCollission().strength(100f).noDrops())); + + public static final RegistryObject DARK_WORT_FLUID + = FLUIDS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.DARK_WORT).get(FluidUtils.STILL), () -> new ForgeFlowingFluid.Source(GrowthcraftCellarFluids.DARK_WORT_PROPERTIES)); + + public static final RegistryObject DARK_WORT_FLUID_FLOWING + = FLUIDS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.DARK_WORT).get(FluidUtils.FLOWING), () -> new ForgeFlowingFluid.Flowing(GrowthcraftCellarFluids.DARK_WORT_PROPERTIES)); + + public static final ForgeFlowingFluid.Properties DARK_WORT_PROPERTIES = new ForgeFlowingFluid.Properties( + () -> DARK_WORT_FLUID.get(), () -> DARK_WORT_FLUID_FLOWING.get(), FluidAttributes.builder(FluidUtils.FluidResource.STILL, FluidUtils.FluidResource.FLOWING) + .sound(SoundEvents.BUCKET_EMPTY).overlay(FluidUtils.FluidResource.OVERLAY) + .color(Reference.FluidColor.DARK_WORT.toIntValue())).slopeFindDistance(2).levelDecreasePerBlock(2) + .block(() -> GrowthcraftCellarFluids.DARK_WORT_FLUID_BLOCK.get()).bucket(() -> GrowthcraftCellarItems.DARK_WORT_BUCKET.get()); + + public static final RegistryObject DARK_WORT_FLUID_BLOCK = GrowthcraftCellarBlocks.BLOCKS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.DARK_WORT).get(FluidUtils.STILL), + () -> new LiquidBlock(() -> GrowthcraftCellarFluids.DARK_WORT_FLUID.get(), BlockBehaviour.Properties.of(Material.WATER) + .noCollission().strength(100f).noDrops())); + + public static final RegistryObject DEEP_AMBER_WORT_FLUID + = FLUIDS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.DEEP_AMBER_WORT).get(FluidUtils.STILL), () -> new ForgeFlowingFluid.Source(GrowthcraftCellarFluids.DEEP_AMBER_WORT_PROPERTIES)); + + public static final RegistryObject DEEP_AMBER_WORT_FLUID_FLOWING + = FLUIDS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.DEEP_AMBER_WORT).get(FluidUtils.FLOWING), () -> new ForgeFlowingFluid.Flowing(GrowthcraftCellarFluids.DEEP_AMBER_WORT_PROPERTIES)); + + public static final ForgeFlowingFluid.Properties DEEP_AMBER_WORT_PROPERTIES = new ForgeFlowingFluid.Properties( + () -> DEEP_AMBER_WORT_FLUID.get(), () -> DEEP_AMBER_WORT_FLUID_FLOWING.get(), FluidAttributes.builder(FluidUtils.FluidResource.STILL, FluidUtils.FluidResource.FLOWING) + .sound(SoundEvents.BUCKET_EMPTY).overlay(FluidUtils.FluidResource.OVERLAY) + .color(Reference.FluidColor.DEEP_AMBER_WORT.toIntValue())).slopeFindDistance(2).levelDecreasePerBlock(2) + .block(() -> GrowthcraftCellarFluids.DEEP_AMBER_WORT_FLUID_BLOCK.get()).bucket(() -> GrowthcraftCellarItems.DEEP_AMBER_WORT_BUCKET.get()); + + public static final RegistryObject DEEP_AMBER_WORT_FLUID_BLOCK = GrowthcraftCellarBlocks.BLOCKS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.DEEP_AMBER_WORT).get(FluidUtils.STILL), + () -> new LiquidBlock(() -> GrowthcraftCellarFluids.DEEP_AMBER_WORT_FLUID.get(), BlockBehaviour.Properties.of(Material.WATER) + .noCollission().strength(100f).noDrops())); + + public static final RegistryObject DEEP_COPPER_WORT_FLUID + = FLUIDS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.DEEP_COPPER_WORT).get(FluidUtils.STILL), () -> new ForgeFlowingFluid.Source(GrowthcraftCellarFluids.DEEP_COPPER_WORT_PROPERTIES)); + + public static final RegistryObject DEEP_COPPER_WORT_FLUID_FLOWING + = FLUIDS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.DEEP_COPPER_WORT).get(FluidUtils.FLOWING), () -> new ForgeFlowingFluid.Flowing(GrowthcraftCellarFluids.DEEP_COPPER_WORT_PROPERTIES)); + + public static final ForgeFlowingFluid.Properties DEEP_COPPER_WORT_PROPERTIES = new ForgeFlowingFluid.Properties( + () -> DEEP_COPPER_WORT_FLUID.get(), () -> DEEP_COPPER_WORT_FLUID_FLOWING.get(), FluidAttributes.builder(FluidUtils.FluidResource.STILL, FluidUtils.FluidResource.FLOWING) + .sound(SoundEvents.BUCKET_EMPTY).overlay(FluidUtils.FluidResource.OVERLAY) + .color(Reference.FluidColor.DEEP_COPPER_WORT.toIntValue())).slopeFindDistance(2).levelDecreasePerBlock(2) + .block(() -> GrowthcraftCellarFluids.DEEP_COPPER_WORT_FLUID_BLOCK.get()).bucket(() -> GrowthcraftCellarItems.DEEP_COPPER_WORT_BUCKET.get()); + + public static final RegistryObject DEEP_COPPER_WORT_FLUID_BLOCK = GrowthcraftCellarBlocks.BLOCKS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.DEEP_COPPER_WORT).get(FluidUtils.STILL), + () -> new LiquidBlock(() -> GrowthcraftCellarFluids.DEEP_COPPER_WORT_FLUID.get(), BlockBehaviour.Properties.of(Material.WATER) + .noCollission().strength(100f).noDrops())); + + public static final RegistryObject GOLDEN_WORT_FLUID + = FLUIDS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.GOLDEN_WORT).get(FluidUtils.STILL), () -> new ForgeFlowingFluid.Source(GrowthcraftCellarFluids.GOLDEN_WORT_PROPERTIES)); + + public static final RegistryObject GOLDEN_WORT_FLUID_FLOWING + = FLUIDS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.GOLDEN_WORT).get(FluidUtils.FLOWING), () -> new ForgeFlowingFluid.Flowing(GrowthcraftCellarFluids.GOLDEN_WORT_PROPERTIES)); + + public static final ForgeFlowingFluid.Properties GOLDEN_WORT_PROPERTIES = new ForgeFlowingFluid.Properties( + () -> GOLDEN_WORT_FLUID.get(), () -> GOLDEN_WORT_FLUID_FLOWING.get(), FluidAttributes.builder(FluidUtils.FluidResource.STILL, FluidUtils.FluidResource.FLOWING) + .sound(SoundEvents.BUCKET_EMPTY).overlay(FluidUtils.FluidResource.OVERLAY) + .color(Reference.FluidColor.GOLDEN_WORT.toIntValue())).slopeFindDistance(2).levelDecreasePerBlock(2) + .block(() -> GrowthcraftCellarFluids.GOLDEN_WORT_FLUID_BLOCK.get()).bucket(() -> GrowthcraftCellarItems.GOLDEN_WORT_BUCKET.get()); + + public static final RegistryObject GOLDEN_WORT_FLUID_BLOCK = GrowthcraftCellarBlocks.BLOCKS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.GOLDEN_WORT).get(FluidUtils.STILL), + () -> new LiquidBlock(() -> GrowthcraftCellarFluids.GOLDEN_WORT_FLUID.get(), BlockBehaviour.Properties.of(Material.WATER) + .noCollission().strength(100f).noDrops())); + + public static final RegistryObject HOPPED_GOLDEN_WORT_FLUID + = FLUIDS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.HOPPED_GOLDEN_WORT).get(FluidUtils.STILL), () -> new ForgeFlowingFluid.Source(GrowthcraftCellarFluids.HOPPED_GOLDEN_WORT_PROPERTIES)); + + public static final RegistryObject HOPPED_GOLDEN_WORT_FLUID_FLOWING + = FLUIDS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.HOPPED_GOLDEN_WORT).get(FluidUtils.FLOWING), () -> new ForgeFlowingFluid.Flowing(GrowthcraftCellarFluids.HOPPED_GOLDEN_WORT_PROPERTIES)); + + public static final ForgeFlowingFluid.Properties HOPPED_GOLDEN_WORT_PROPERTIES = new ForgeFlowingFluid.Properties( + () -> HOPPED_GOLDEN_WORT_FLUID.get(), () -> HOPPED_GOLDEN_WORT_FLUID_FLOWING.get(), FluidAttributes.builder(FluidUtils.FluidResource.STILL, FluidUtils.FluidResource.FLOWING) + .sound(SoundEvents.BUCKET_EMPTY).overlay(FluidUtils.FluidResource.OVERLAY) + .color(Reference.FluidColor.HOPPED_GOLDEN_WORT.toIntValue())).slopeFindDistance(2).levelDecreasePerBlock(2) + .block(() -> GrowthcraftCellarFluids.HOPPED_GOLDEN_WORT_FLUID_BLOCK.get()).bucket(() -> GrowthcraftCellarItems.HOPPED_GOLDEN_WORT_BUCKET.get()); + + public static final RegistryObject HOPPED_GOLDEN_WORT_FLUID_BLOCK = GrowthcraftCellarBlocks.BLOCKS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.HOPPED_GOLDEN_WORT).get(FluidUtils.STILL), + () -> new LiquidBlock(() -> GrowthcraftCellarFluids.HOPPED_GOLDEN_WORT_FLUID.get(), BlockBehaviour.Properties.of(Material.WATER) + .noCollission().strength(100f).noDrops())); + + public static final RegistryObject IPA_ALE_FLUID + = FLUIDS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.IPA_ALE).get(FluidUtils.STILL), () -> new ForgeFlowingFluid.Source(GrowthcraftCellarFluids.IPA_ALE_PROPERTIES)); + + public static final RegistryObject IPA_ALE_FLUID_FLOWING + = FLUIDS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.IPA_ALE).get(FluidUtils.FLOWING), () -> new ForgeFlowingFluid.Flowing(GrowthcraftCellarFluids.IPA_ALE_PROPERTIES)); + + public static final ForgeFlowingFluid.Properties IPA_ALE_PROPERTIES = new ForgeFlowingFluid.Properties( + () -> IPA_ALE_FLUID.get(), () -> IPA_ALE_FLUID_FLOWING.get(), FluidAttributes.builder(FluidUtils.FluidResource.STILL, FluidUtils.FluidResource.FLOWING) + .sound(SoundEvents.BUCKET_EMPTY).overlay(FluidUtils.FluidResource.OVERLAY) + .color(Reference.FluidColor.IPA_ALE.toIntValue())).slopeFindDistance(2).levelDecreasePerBlock(2) + .block(() -> GrowthcraftCellarFluids.IPA_ALE_FLUID_BLOCK.get()).bucket(() -> GrowthcraftCellarItems.IPA_ALE_BUCKET.get()); + + public static final RegistryObject IPA_ALE_FLUID_BLOCK = GrowthcraftCellarBlocks.BLOCKS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.IPA_ALE).get(FluidUtils.STILL), + () -> new LiquidBlock(() -> GrowthcraftCellarFluids.IPA_ALE_FLUID.get(), BlockBehaviour.Properties.of(Material.WATER) + .noCollission().strength(100f).noDrops())); + + public static final RegistryObject OLD_PORT_ALE_FLUID + = FLUIDS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.OLD_PORT_ALE).get(FluidUtils.STILL), () -> new ForgeFlowingFluid.Source(GrowthcraftCellarFluids.OLD_PORT_ALE_PROPERTIES)); + + public static final RegistryObject OLD_PORT_ALE_FLUID_FLOWING + = FLUIDS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.OLD_PORT_ALE).get(FluidUtils.FLOWING), () -> new ForgeFlowingFluid.Flowing(GrowthcraftCellarFluids.OLD_PORT_ALE_PROPERTIES)); + + public static final ForgeFlowingFluid.Properties OLD_PORT_ALE_PROPERTIES = new ForgeFlowingFluid.Properties( + () -> OLD_PORT_ALE_FLUID.get(), () -> OLD_PORT_ALE_FLUID_FLOWING.get(), FluidAttributes.builder(FluidUtils.FluidResource.STILL, FluidUtils.FluidResource.FLOWING) + .sound(SoundEvents.BUCKET_EMPTY).overlay(FluidUtils.FluidResource.OVERLAY) + .color(Reference.FluidColor.OLD_PORT_ALE.toIntValue())).slopeFindDistance(2).levelDecreasePerBlock(2) + .block(() -> GrowthcraftCellarFluids.OLD_PORT_ALE_FLUID_BLOCK.get()).bucket(() -> GrowthcraftCellarItems.OLD_PORT_ALE_BUCKET.get()); + + public static final RegistryObject OLD_PORT_ALE_FLUID_BLOCK = GrowthcraftCellarBlocks.BLOCKS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.OLD_PORT_ALE).get(FluidUtils.STILL), + () -> new LiquidBlock(() -> GrowthcraftCellarFluids.OLD_PORT_ALE_FLUID.get(), BlockBehaviour.Properties.of(Material.WATER) + .noCollission().strength(100f).noDrops())); + + public static final RegistryObject PALE_ALE_FLUID + = FLUIDS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.PALE_ALE).get(FluidUtils.STILL), () -> new ForgeFlowingFluid.Source(GrowthcraftCellarFluids.PALE_ALE_PROPERTIES)); + + public static final RegistryObject PALE_ALE_FLUID_FLOWING + = FLUIDS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.PALE_ALE).get(FluidUtils.FLOWING), () -> new ForgeFlowingFluid.Flowing(GrowthcraftCellarFluids.PALE_ALE_PROPERTIES)); + + public static final ForgeFlowingFluid.Properties PALE_ALE_PROPERTIES = new ForgeFlowingFluid.Properties( + () -> PALE_ALE_FLUID.get(), () -> PALE_ALE_FLUID_FLOWING.get(), FluidAttributes.builder(FluidUtils.FluidResource.STILL, FluidUtils.FluidResource.FLOWING) + .sound(SoundEvents.BUCKET_EMPTY).overlay(FluidUtils.FluidResource.OVERLAY) + .color(Reference.FluidColor.PALE_ALE.toIntValue())).slopeFindDistance(2).levelDecreasePerBlock(2) + .block(() -> GrowthcraftCellarFluids.PALE_ALE_FLUID_BLOCK.get()).bucket(() -> GrowthcraftCellarItems.PALE_ALE_BUCKET.get()); + + public static final RegistryObject PALE_ALE_FLUID_BLOCK = GrowthcraftCellarBlocks.BLOCKS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.PALE_ALE).get(FluidUtils.STILL), + () -> new LiquidBlock(() -> GrowthcraftCellarFluids.PALE_ALE_FLUID.get(), BlockBehaviour.Properties.of(Material.WATER) + .noCollission().strength(100f).noDrops())); + + public static final RegistryObject PALE_LAGER_FLUID + = FLUIDS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.PALE_LAGER).get(FluidUtils.STILL), () -> new ForgeFlowingFluid.Source(GrowthcraftCellarFluids.PALE_LAGER_PROPERTIES)); + + public static final RegistryObject PALE_LAGER_FLUID_FLOWING + = FLUIDS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.PALE_LAGER).get(FluidUtils.FLOWING), () -> new ForgeFlowingFluid.Flowing(GrowthcraftCellarFluids.PALE_LAGER_PROPERTIES)); + + public static final ForgeFlowingFluid.Properties PALE_LAGER_PROPERTIES = new ForgeFlowingFluid.Properties( + () -> PALE_LAGER_FLUID.get(), () -> PALE_LAGER_FLUID_FLOWING.get(), FluidAttributes.builder(FluidUtils.FluidResource.STILL, FluidUtils.FluidResource.FLOWING) + .sound(SoundEvents.BUCKET_EMPTY).overlay(FluidUtils.FluidResource.OVERLAY) + .color(Reference.FluidColor.PALE_LAGER.toIntValue())).slopeFindDistance(2).levelDecreasePerBlock(2) + .block(() -> GrowthcraftCellarFluids.PALE_LAGER_FLUID_BLOCK.get()).bucket(() -> GrowthcraftCellarItems.PALE_LAGER_BUCKET.get()); + + public static final RegistryObject PALE_LAGER_FLUID_BLOCK = GrowthcraftCellarBlocks.BLOCKS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.PALE_LAGER).get(FluidUtils.STILL), + () -> new LiquidBlock(() -> GrowthcraftCellarFluids.PALE_LAGER_FLUID.get(), BlockBehaviour.Properties.of(Material.WATER) + .noCollission().strength(100f).noDrops())); + + public static final RegistryObject PALE_GOLDEN_WORT_FLUID + = FLUIDS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.PALE_GOLDEN_WORT).get(FluidUtils.STILL), () -> new ForgeFlowingFluid.Source(GrowthcraftCellarFluids.PALE_GOLDEN_WORT_PROPERTIES)); + + public static final RegistryObject PALE_GOLDEN_WORT_FLUID_FLOWING + = FLUIDS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.PALE_GOLDEN_WORT).get(FluidUtils.FLOWING), () -> new ForgeFlowingFluid.Flowing(GrowthcraftCellarFluids.PALE_GOLDEN_WORT_PROPERTIES)); + + public static final ForgeFlowingFluid.Properties PALE_GOLDEN_WORT_PROPERTIES = new ForgeFlowingFluid.Properties( + () -> PALE_GOLDEN_WORT_FLUID.get(), () -> PALE_GOLDEN_WORT_FLUID_FLOWING.get(), FluidAttributes.builder(FluidUtils.FluidResource.STILL, FluidUtils.FluidResource.FLOWING) + .sound(SoundEvents.BUCKET_EMPTY).overlay(FluidUtils.FluidResource.OVERLAY) + .color(Reference.FluidColor.PALE_GOLDEN_WORT.toIntValue())).slopeFindDistance(2).levelDecreasePerBlock(2) + .block(() -> GrowthcraftCellarFluids.PALE_GOLDEN_WORT_FLUID_BLOCK.get()).bucket(() -> GrowthcraftCellarItems.PALE_GOLDEN_WORT_BUCKET.get()); + + public static final RegistryObject PALE_GOLDEN_WORT_FLUID_BLOCK = GrowthcraftCellarBlocks.BLOCKS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.PALE_GOLDEN_WORT).get(FluidUtils.STILL), + () -> new LiquidBlock(() -> GrowthcraftCellarFluids.PALE_GOLDEN_WORT_FLUID.get(), BlockBehaviour.Properties.of(Material.WATER) + .noCollission().strength(100f).noDrops())); + + public static final RegistryObject PILSNER_LAGER_FLUID + = FLUIDS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.PILSNER_LAGER).get(FluidUtils.STILL), () -> new ForgeFlowingFluid.Source(GrowthcraftCellarFluids.PILSNER_LAGER_PROPERTIES)); + + public static final RegistryObject PILSNER_LAGER_FLUID_FLOWING + = FLUIDS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.PILSNER_LAGER).get(FluidUtils.FLOWING), () -> new ForgeFlowingFluid.Flowing(GrowthcraftCellarFluids.PILSNER_LAGER_PROPERTIES)); + + public static final ForgeFlowingFluid.Properties PILSNER_LAGER_PROPERTIES = new ForgeFlowingFluid.Properties( + () -> PILSNER_LAGER_FLUID.get(), () -> PILSNER_LAGER_FLUID_FLOWING.get(), FluidAttributes.builder(FluidUtils.FluidResource.STILL, FluidUtils.FluidResource.FLOWING) + .sound(SoundEvents.BUCKET_EMPTY).overlay(FluidUtils.FluidResource.OVERLAY) + .color(Reference.FluidColor.PILSNER_LAGER.toIntValue())).slopeFindDistance(2).levelDecreasePerBlock(2) + .block(() -> GrowthcraftCellarFluids.PILSNER_LAGER_FLUID_BLOCK.get()).bucket(() -> GrowthcraftCellarItems.PILSNER_LAGER_BUCKET.get()); + + public static final RegistryObject PILSNER_LAGER_FLUID_BLOCK = GrowthcraftCellarBlocks.BLOCKS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.PILSNER_LAGER).get(FluidUtils.STILL), + () -> new LiquidBlock(() -> GrowthcraftCellarFluids.PILSNER_LAGER_FLUID.get(), BlockBehaviour.Properties.of(Material.WATER) + .noCollission().strength(100f).noDrops())); + + public static final RegistryObject PURPLE_GRAPE_JUICE_FLUID + = FLUIDS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.PURPLE_GRAPE_JUICE).get(FluidUtils.STILL), () -> new ForgeFlowingFluid.Source(GrowthcraftCellarFluids.PURPLE_GRAPE_JUICE_PROPERTIES)); + + public static final RegistryObject PURPLE_GRAPE_JUICE_FLUID_FLOWING + = FLUIDS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.PURPLE_GRAPE_JUICE).get(FluidUtils.FLOWING), () -> new ForgeFlowingFluid.Flowing(GrowthcraftCellarFluids.PURPLE_GRAPE_JUICE_PROPERTIES)); + + public static final ForgeFlowingFluid.Properties PURPLE_GRAPE_JUICE_PROPERTIES = new ForgeFlowingFluid.Properties( + () -> PURPLE_GRAPE_JUICE_FLUID.get(), () -> PURPLE_GRAPE_JUICE_FLUID_FLOWING.get(), FluidAttributes.builder(FluidUtils.FluidResource.STILL, FluidUtils.FluidResource.FLOWING) + .sound(SoundEvents.BUCKET_EMPTY).overlay(FluidUtils.FluidResource.OVERLAY) + .color(Reference.FluidColor.PURPLE_GRAPE_JUICE.toIntValue())).slopeFindDistance(2).levelDecreasePerBlock(2) + .block(() -> GrowthcraftCellarFluids.PURPLE_GRAPE_JUICE_FLUID_BLOCK.get()).bucket(() -> GrowthcraftCellarItems.PURPLE_GRAPE_JUICE_BUCKET.get()); + + public static final RegistryObject PURPLE_GRAPE_JUICE_FLUID_BLOCK = GrowthcraftCellarBlocks.BLOCKS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.PURPLE_GRAPE_JUICE).get(FluidUtils.STILL), + () -> new LiquidBlock(() -> GrowthcraftCellarFluids.PURPLE_GRAPE_JUICE_FLUID.get(), BlockBehaviour.Properties.of(Material.WATER) + .noCollission().strength(100f).noDrops())); + + public static final RegistryObject PURPLE_GRAPE_WINE_FLUID + = FLUIDS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.PURPLE_GRAPE_WINE).get(FluidUtils.STILL), () -> new ForgeFlowingFluid.Source(GrowthcraftCellarFluids.PURPLE_GRAPE_WINE_PROPERTIES)); + + public static final RegistryObject PURPLE_GRAPE_WINE_FLUID_FLOWING + = FLUIDS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.PURPLE_GRAPE_WINE).get(FluidUtils.FLOWING), () -> new ForgeFlowingFluid.Flowing(GrowthcraftCellarFluids.PURPLE_GRAPE_WINE_PROPERTIES)); + + public static final ForgeFlowingFluid.Properties PURPLE_GRAPE_WINE_PROPERTIES = new ForgeFlowingFluid.Properties( + () -> PURPLE_GRAPE_WINE_FLUID.get(), () -> PURPLE_GRAPE_WINE_FLUID_FLOWING.get(), FluidAttributes.builder(FluidUtils.FluidResource.STILL, FluidUtils.FluidResource.FLOWING) + .sound(SoundEvents.BUCKET_EMPTY).overlay(FluidUtils.FluidResource.OVERLAY) + .color(Reference.FluidColor.PURPLE_GRAPE_WINE.toIntValue())).slopeFindDistance(2).levelDecreasePerBlock(2) + .block(() -> GrowthcraftCellarFluids.PURPLE_GRAPE_WINE_FLUID_BLOCK.get()).bucket(() -> GrowthcraftCellarItems.PURPLE_GRAPE_WINE_BUCKET.get()); + + public static final RegistryObject PURPLE_GRAPE_WINE_FLUID_BLOCK = GrowthcraftCellarBlocks.BLOCKS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.PURPLE_GRAPE_WINE).get(FluidUtils.STILL), + () -> new LiquidBlock(() -> GrowthcraftCellarFluids.PURPLE_GRAPE_WINE_FLUID.get(), BlockBehaviour.Properties.of(Material.WATER) + .noCollission().strength(100f).noDrops())); + + public static final RegistryObject RED_GRAPE_JUICE_FLUID + = FLUIDS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.RED_GRAPE_JUICE).get(FluidUtils.STILL), () -> new ForgeFlowingFluid.Source(GrowthcraftCellarFluids.RED_GRAPE_JUICE_PROPERTIES)); + + public static final RegistryObject RED_GRAPE_JUICE_FLUID_FLOWING + = FLUIDS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.RED_GRAPE_JUICE).get(FluidUtils.FLOWING), () -> new ForgeFlowingFluid.Flowing(GrowthcraftCellarFluids.RED_GRAPE_JUICE_PROPERTIES)); + + public static final ForgeFlowingFluid.Properties RED_GRAPE_JUICE_PROPERTIES = new ForgeFlowingFluid.Properties( + () -> RED_GRAPE_JUICE_FLUID.get(), () -> RED_GRAPE_JUICE_FLUID_FLOWING.get(), FluidAttributes.builder(FluidUtils.FluidResource.STILL, FluidUtils.FluidResource.FLOWING) + .sound(SoundEvents.BUCKET_EMPTY).overlay(FluidUtils.FluidResource.OVERLAY) + .color(Reference.FluidColor.RED_GRAPE_JUICE.toIntValue())).slopeFindDistance(2).levelDecreasePerBlock(2) + .block(() -> GrowthcraftCellarFluids.RED_GRAPE_JUICE_FLUID_BLOCK.get()).bucket(() -> GrowthcraftCellarItems.RED_GRAPE_JUICE_BUCKET.get()); + + public static final RegistryObject RED_GRAPE_JUICE_FLUID_BLOCK = GrowthcraftCellarBlocks.BLOCKS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.RED_GRAPE_JUICE).get(FluidUtils.STILL), + () -> new LiquidBlock(() -> GrowthcraftCellarFluids.RED_GRAPE_JUICE_FLUID.get(), BlockBehaviour.Properties.of(Material.WATER) + .noCollission().strength(100f).noDrops())); + + public static final RegistryObject RED_GRAPE_WINE_FLUID + = FLUIDS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.RED_GRAPE_WINE).get(FluidUtils.STILL), () -> new ForgeFlowingFluid.Source(GrowthcraftCellarFluids.RED_GRAPE_WINE_PROPERTIES)); + + public static final RegistryObject RED_GRAPE_WINE_FLUID_FLOWING + = FLUIDS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.RED_GRAPE_WINE).get(FluidUtils.FLOWING), () -> new ForgeFlowingFluid.Flowing(GrowthcraftCellarFluids.RED_GRAPE_WINE_PROPERTIES)); + + public static final ForgeFlowingFluid.Properties RED_GRAPE_WINE_PROPERTIES = new ForgeFlowingFluid.Properties( + () -> RED_GRAPE_WINE_FLUID.get(), () -> RED_GRAPE_WINE_FLUID_FLOWING.get(), FluidAttributes.builder(FluidUtils.FluidResource.STILL, FluidUtils.FluidResource.FLOWING) + .sound(SoundEvents.BUCKET_EMPTY).overlay(FluidUtils.FluidResource.OVERLAY) + .color(Reference.FluidColor.RED_GRAPE_WINE.toIntValue())).slopeFindDistance(2).levelDecreasePerBlock(2) + .block(() -> GrowthcraftCellarFluids.RED_GRAPE_WINE_FLUID_BLOCK.get()).bucket(() -> GrowthcraftCellarItems.RED_GRAPE_WINE_BUCKET.get()); + + public static final RegistryObject RED_GRAPE_WINE_FLUID_BLOCK = GrowthcraftCellarBlocks.BLOCKS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.RED_GRAPE_WINE).get(FluidUtils.STILL), + () -> new LiquidBlock(() -> GrowthcraftCellarFluids.RED_GRAPE_WINE_FLUID.get(), BlockBehaviour.Properties.of(Material.WATER) + .noCollission().strength(100f).noDrops())); + + public static final RegistryObject STOUT_ALE_FLUID + = FLUIDS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.STOUT_ALE).get(FluidUtils.STILL), () -> new ForgeFlowingFluid.Source(GrowthcraftCellarFluids.STOUT_ALE_PROPERTIES)); + + public static final RegistryObject STOUT_ALE_FLUID_FLOWING + = FLUIDS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.STOUT_ALE).get(FluidUtils.FLOWING), () -> new ForgeFlowingFluid.Flowing(GrowthcraftCellarFluids.STOUT_ALE_PROPERTIES)); + + public static final ForgeFlowingFluid.Properties STOUT_ALE_PROPERTIES = new ForgeFlowingFluid.Properties( + () -> STOUT_ALE_FLUID.get(), () -> STOUT_ALE_FLUID_FLOWING.get(), FluidAttributes.builder(FluidUtils.FluidResource.STILL, FluidUtils.FluidResource.FLOWING) + .sound(SoundEvents.BUCKET_EMPTY).overlay(FluidUtils.FluidResource.OVERLAY) + .color(Reference.FluidColor.STOUT_ALE.toIntValue())).slopeFindDistance(2).levelDecreasePerBlock(2) + .block(() -> GrowthcraftCellarFluids.STOUT_ALE_FLUID_BLOCK.get()).bucket(() -> GrowthcraftCellarItems.STOUT_ALE_BUCKET.get()); + + public static final RegistryObject STOUT_ALE_FLUID_BLOCK = GrowthcraftCellarBlocks.BLOCKS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.STOUT_ALE).get(FluidUtils.STILL), + () -> new LiquidBlock(() -> GrowthcraftCellarFluids.STOUT_ALE_FLUID.get(), BlockBehaviour.Properties.of(Material.WATER) + .noCollission().strength(100f).noDrops())); + + public static final RegistryObject VIENNA_LAGER_FLUID + = FLUIDS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.VIENNA_LAGER).get(FluidUtils.STILL), () -> new ForgeFlowingFluid.Source(GrowthcraftCellarFluids.VIENNA_LAGER_PROPERTIES)); + + public static final RegistryObject VIENNA_LAGER_FLUID_FLOWING + = FLUIDS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.VIENNA_LAGER).get(FluidUtils.FLOWING), () -> new ForgeFlowingFluid.Flowing(GrowthcraftCellarFluids.VIENNA_LAGER_PROPERTIES)); + + public static final ForgeFlowingFluid.Properties VIENNA_LAGER_PROPERTIES = new ForgeFlowingFluid.Properties( + () -> VIENNA_LAGER_FLUID.get(), () -> VIENNA_LAGER_FLUID_FLOWING.get(), FluidAttributes.builder(FluidUtils.FluidResource.STILL, FluidUtils.FluidResource.FLOWING) + .sound(SoundEvents.BUCKET_EMPTY).overlay(FluidUtils.FluidResource.OVERLAY) + .color(Reference.FluidColor.VIENNA_LAGER.toIntValue())).slopeFindDistance(2).levelDecreasePerBlock(2) + .block(() -> GrowthcraftCellarFluids.VIENNA_LAGER_FLUID_BLOCK.get()).bucket(() -> GrowthcraftCellarItems.VIENNA_LAGER_BUCKET.get()); + + public static final RegistryObject VIENNA_LAGER_FLUID_BLOCK = GrowthcraftCellarBlocks.BLOCKS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.VIENNA_LAGER).get(FluidUtils.STILL), + () -> new LiquidBlock(() -> GrowthcraftCellarFluids.VIENNA_LAGER_FLUID.get(), BlockBehaviour.Properties.of(Material.WATER) + .noCollission().strength(100f).noDrops())); + + public static final RegistryObject WHITE_GRAPE_JUICE_FLUID + = FLUIDS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.WHITE_GRAPE_JUICE).get(FluidUtils.STILL), () -> new ForgeFlowingFluid.Source(GrowthcraftCellarFluids.WHITE_GRAPE_JUICE_PROPERTIES)); + + public static final RegistryObject WHITE_GRAPE_JUICE_FLUID_FLOWING + = FLUIDS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.WHITE_GRAPE_JUICE).get(FluidUtils.FLOWING), () -> new ForgeFlowingFluid.Flowing(GrowthcraftCellarFluids.WHITE_GRAPE_JUICE_PROPERTIES)); + + public static final ForgeFlowingFluid.Properties WHITE_GRAPE_JUICE_PROPERTIES = new ForgeFlowingFluid.Properties( + () -> WHITE_GRAPE_JUICE_FLUID.get(), () -> WHITE_GRAPE_JUICE_FLUID_FLOWING.get(), FluidAttributes.builder(FluidUtils.FluidResource.STILL, FluidUtils.FluidResource.FLOWING) + .sound(SoundEvents.BUCKET_EMPTY).overlay(FluidUtils.FluidResource.OVERLAY) + .color(Reference.FluidColor.WHITE_GRAPE_JUICE.toIntValue())).slopeFindDistance(2).levelDecreasePerBlock(2) + .block(() -> GrowthcraftCellarFluids.WHITE_GRAPE_JUICE_FLUID_BLOCK.get()).bucket(() -> GrowthcraftCellarItems.WHITE_GRAPE_JUICE_BUCKET.get()); + + public static final RegistryObject WHITE_GRAPE_JUICE_FLUID_BLOCK = GrowthcraftCellarBlocks.BLOCKS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.WHITE_GRAPE_JUICE).get(FluidUtils.STILL), + () -> new LiquidBlock(() -> GrowthcraftCellarFluids.WHITE_GRAPE_JUICE_FLUID.get(), BlockBehaviour.Properties.of(Material.WATER) + .noCollission().strength(100f).noDrops())); + + public static final RegistryObject WHITE_GRAPE_WINE_FLUID + = FLUIDS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.WHITE_GRAPE_WINE).get(FluidUtils.STILL), () -> new ForgeFlowingFluid.Source(GrowthcraftCellarFluids.WHITE_GRAPE_WINE_PROPERTIES)); + + public static final RegistryObject WHITE_GRAPE_WINE_FLUID_FLOWING + = FLUIDS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.WHITE_GRAPE_WINE).get(FluidUtils.FLOWING), () -> new ForgeFlowingFluid.Flowing(GrowthcraftCellarFluids.WHITE_GRAPE_WINE_PROPERTIES)); + + public static final ForgeFlowingFluid.Properties WHITE_GRAPE_WINE_PROPERTIES = new ForgeFlowingFluid.Properties( + () -> WHITE_GRAPE_WINE_FLUID.get(), () -> WHITE_GRAPE_WINE_FLUID_FLOWING.get(), FluidAttributes.builder(FluidUtils.FluidResource.STILL, FluidUtils.FluidResource.FLOWING) + .sound(SoundEvents.BUCKET_EMPTY).overlay(FluidUtils.FluidResource.OVERLAY) + .color(Reference.FluidColor.WHITE_GRAPE_WINE.toIntValue())).slopeFindDistance(2).levelDecreasePerBlock(2) + .block(() -> GrowthcraftCellarFluids.WHITE_GRAPE_WINE_FLUID_BLOCK.get()).bucket(() -> GrowthcraftCellarItems.WHITE_GRAPE_WINE_BUCKET.get()); + + public static final RegistryObject WHITE_GRAPE_WINE_FLUID_BLOCK = GrowthcraftCellarBlocks.BLOCKS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.WHITE_GRAPE_WINE).get(FluidUtils.STILL), + () -> new LiquidBlock(() -> GrowthcraftCellarFluids.WHITE_GRAPE_WINE_FLUID.get(), BlockBehaviour.Properties.of(Material.WATER) + .noCollission().strength(100f).noDrops())); + + public static final RegistryObject WORT_FLUID + = FLUIDS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.WORT).get(FluidUtils.STILL), () -> new ForgeFlowingFluid.Source(GrowthcraftCellarFluids.WORT_PROPERTIES)); + + public static final RegistryObject WORT_FLUID_FLOWING + = FLUIDS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.WORT).get(FluidUtils.FLOWING), () -> new ForgeFlowingFluid.Flowing(GrowthcraftCellarFluids.WORT_PROPERTIES)); + + public static final ForgeFlowingFluid.Properties WORT_PROPERTIES = new ForgeFlowingFluid.Properties( + () -> WORT_FLUID.get(), () -> WORT_FLUID_FLOWING.get(), FluidAttributes.builder(FluidUtils.FluidResource.STILL, FluidUtils.FluidResource.FLOWING) + .sound(SoundEvents.BUCKET_EMPTY).overlay(FluidUtils.FluidResource.OVERLAY) + .color(Reference.FluidColor.WORT.toIntValue())).slopeFindDistance(2).levelDecreasePerBlock(2) + .block(() -> GrowthcraftCellarFluids.WORT_FLUID_BLOCK.get()).bucket(() -> GrowthcraftCellarItems.WORT_BUCKET.get()); + + public static final RegistryObject WORT_FLUID_BLOCK = GrowthcraftCellarBlocks.BLOCKS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.WORT).get(FluidUtils.STILL), + () -> new LiquidBlock(() -> GrowthcraftCellarFluids.WORT_FLUID.get(), BlockBehaviour.Properties.of(Material.WATER) + .noCollission().strength(100f).noDrops())); + + private GrowthcraftCellarFluids() { + /* Prevent default public constructor */ + } +} diff --git a/src/main/java/growthcraft/cellar/init/GrowthcraftCellarItems.java b/src/main/java/growthcraft/cellar/init/GrowthcraftCellarItems.java new file mode 100644 index 0000000..4c4e7a6 --- /dev/null +++ b/src/main/java/growthcraft/cellar/init/GrowthcraftCellarItems.java @@ -0,0 +1,304 @@ +package growthcraft.cellar.init; + +import java.util.ArrayList; +import java.util.List; + +import growthcraft.cellar.item.CellarPotionItem; +import growthcraft.cellar.item.GrapeSeedsItem; +import growthcraft.cellar.item.HopsSeedsItem; +import growthcraft.cellar.shared.Reference; +import growthcraft.lib.item.GrowthcraftBucketItem; +import growthcraft.lib.item.GrowthcraftFoodItem; +import growthcraft.lib.item.GrowthcraftItem; +import growthcraft.lib.utils.FluidUtils; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.Item; +import net.minecraftforge.registries.DeferredRegister; +import net.minecraftforge.registries.ForgeRegistries; +import net.minecraftforge.registries.RegistryObject; + +public class GrowthcraftCellarItems { + + public static final DeferredRegister ITEMS = DeferredRegister.create( + ForgeRegistries.ITEMS, Reference.MODID + ); + + public static final RegistryObject KINDLING = ITEMS.register( + Reference.UnlocalizedName.KINDLING, GrowthcraftItem::new + ); + + public static final RegistryObject BREW_KETTLE_LID = ITEMS.register( + Reference.UnlocalizedName.BREW_KETTLE_LID, GrowthcraftItem::new + ); + + public static final RegistryObject GRAIN = ITEMS.register( + Reference.UnlocalizedName.GRAIN, () -> new GrowthcraftItem(64, Reference.GrainColor.GRAIN.getColor()) + ); + + public static final RegistryObject GRAIN_AMBER = ITEMS.register( + Reference.UnlocalizedName.GRAIN_AMBER, () -> new GrowthcraftItem(64, Reference.GrainColor.GRAIN_AMBER.getColor()) + ); + + public static final RegistryObject GRAIN_BROWN = ITEMS.register( + Reference.UnlocalizedName.GRAIN_BROWN, () -> new GrowthcraftItem(64, Reference.GrainColor.GRAIN_BROWN.getColor()) + ); + + public static final RegistryObject GRAIN_COPPER = ITEMS.register( + Reference.UnlocalizedName.GRAIN_COPPER, () -> new GrowthcraftItem(64, Reference.GrainColor.GRAIN_COPPER.getColor()) + ); + + public static final RegistryObject GRAIN_DARK = ITEMS.register( + Reference.UnlocalizedName.GRAIN_DARK, () -> new GrowthcraftItem(64, Reference.GrainColor.GRAIN_DARK.getColor()) + ); + + public static final RegistryObject GRAIN_DEEP_AMBER = ITEMS.register( + Reference.UnlocalizedName.GRAIN_DEEP_AMBER, () -> new GrowthcraftItem(64, Reference.GrainColor.GRAIN_DEEP_AMBER.getColor()) + ); + + public static final RegistryObject GRAIN_DEEP_COPPER = ITEMS.register( + Reference.UnlocalizedName.GRAIN_DEEP_COPPER, () -> new GrowthcraftItem(64, Reference.GrainColor.GRAIN_DEEP_COPPER.getColor()) + ); + + public static final RegistryObject GRAIN_GOLDEN = ITEMS.register( + Reference.UnlocalizedName.GRAIN_GOLDEN, () -> new GrowthcraftItem(64, Reference.GrainColor.GRAIN_GOLDEN.getColor()) + ); + + public static final RegistryObject GRAIN_PALE_GOLDEN = ITEMS.register( + Reference.UnlocalizedName.GRAIN_PALE_GOLDEN, () -> new GrowthcraftItem(64, Reference.GrainColor.GRAIN_PALE_GOLDEN.getColor()) + ); + + public static final RegistryObject GRAPE_PURPLE = ITEMS.register( + Reference.UnlocalizedName.GRAPE_PURPLE, GrowthcraftFoodItem::new + ); + + public static final RegistryObject PURPLE_RED_SEEDS = ITEMS.register( + Reference.UnlocalizedName.GRAPE_SEEDS_PURPLE, + () -> new GrapeSeedsItem( + GrowthcraftCellarBlocks.PURPLE_GRAPE_VINE.get(), + GrowthcraftCellarBlocks.PURPLE_GRAPE_VINE_LEAVES.get(), + GrowthcraftCellarBlocks.PURPLE_GRAPE_VINE_FRUIT.get()) + ); + + public static final RegistryObject GRAPE_RED = ITEMS.register( + Reference.UnlocalizedName.GRAPE_RED, GrowthcraftFoodItem::new + ); + + public static final RegistryObject GRAPE_RED_SEEDS = ITEMS.register( + Reference.UnlocalizedName.GRAPE_SEEDS_RED, + () -> new GrapeSeedsItem( + GrowthcraftCellarBlocks.RED_GRAPE_VINE.get(), + GrowthcraftCellarBlocks.RED_GRAPE_VINE_LEAVES.get(), + GrowthcraftCellarBlocks.RED_GRAPE_VINE_FRUIT.get()) + ); + + public static final RegistryObject GRAPE_WHITE = ITEMS.register( + Reference.UnlocalizedName.GRAPE_WHITE, GrowthcraftFoodItem::new + ); + + public static final RegistryObject WHITE_RED_SEEDS = ITEMS.register( + Reference.UnlocalizedName.GRAPE_SEEDS_WHITE, + () -> new GrapeSeedsItem( + GrowthcraftCellarBlocks.WHITE_GRAPE_VINE.get(), + GrowthcraftCellarBlocks.WHITE_GRAPE_VINE_LEAVES.get(), + GrowthcraftCellarBlocks.WHITE_GRAPE_VINE_FRUIT.get()) + ); + + public static final RegistryObject HOPS = ITEMS.register( + Reference.UnlocalizedName.HOPS, GrowthcraftFoodItem::new + ); + + public static final RegistryObject HOPS_SEED = ITEMS.register( + Reference.UnlocalizedName.HOPS_SEEDS, HopsSeedsItem::new + ); + + public static final RegistryObject POTION_ALE = ITEMS.register( + Reference.UnlocalizedName.POTION_ALE, CellarPotionItem::new + ); + + public static final RegistryObject POTION_LAGER = ITEMS.register( + Reference.UnlocalizedName.POTION_LAGER, CellarPotionItem::new + ); + + public static final RegistryObject POTION_WINE = ITEMS.register( + Reference.UnlocalizedName.POTION_WINE, CellarPotionItem::new + ); + + public static final RegistryObject YEAST_BAYANUS = ITEMS.register( + Reference.UnlocalizedName.YEAST_BAYANUS, GrowthcraftItem::new + ); + + + public static final RegistryObject YEAST_BAYANUS_ETHEREAL = ITEMS.register( + Reference.UnlocalizedName.YEAST_BAYANUS_ETHEREAL, GrowthcraftItem::new + ); + + public static final RegistryObject YEAST_BREWERS = ITEMS.register( + Reference.UnlocalizedName.YEAST_BREWERS, GrowthcraftItem::new + ); + + public static final RegistryObject YEAST_BREWERS_ETHEREAL = ITEMS.register( + Reference.UnlocalizedName.YEAST_BREWERS_ETHEREAL, GrowthcraftItem::new + ); + + public static final RegistryObject YEAST_ETHEREAL = ITEMS.register( + Reference.UnlocalizedName.YEAST_ETHEREAL, GrowthcraftItem::new + ); + + public static final RegistryObject YEAST_LAGER = ITEMS.register( + Reference.UnlocalizedName.YEAST_LAGER, GrowthcraftItem::new + ); + + public static final RegistryObject YEAST_LAGER_ETHEREAL = ITEMS.register( + Reference.UnlocalizedName.YEAST_LAGER_ETHEREAL, GrowthcraftItem::new + ); + + public static final List> POTIONS = List.of( + POTION_ALE, POTION_LAGER, POTION_WINE + ); + + public static final List> GRAINS = List.of( + GRAIN_AMBER, GRAIN_BROWN, GRAIN_COPPER, GRAIN_DARK, GRAIN_DEEP_AMBER, + GRAIN_DEEP_COPPER, GRAIN_GOLDEN, GRAIN_PALE_GOLDEN + ); + + public static final RegistryObject AMBER_ALE_BUCKET = ITEMS.register( + FluidUtils.getFluidNames(Reference.UnlocalizedName.AMBER_ALE).get(FluidUtils.BUCKET), + () -> new GrowthcraftBucketItem(GrowthcraftCellarFluids.AMBER_ALE_FLUID, Reference.FluidColor.AMBER_ALE.getColor())); + + public static final RegistryObject AMBER_LAGER_BUCKET = ITEMS.register( + FluidUtils.getFluidNames(Reference.UnlocalizedName.AMBER_LAGER).get(FluidUtils.BUCKET), + () -> new GrowthcraftBucketItem(GrowthcraftCellarFluids.AMBER_LAGER_FLUID, Reference.FluidColor.AMBER_LAGER.getColor())); + + public static final RegistryObject AMBER_WORT_BUCKET = ITEMS.register( + FluidUtils.getFluidNames(Reference.UnlocalizedName.AMBER_WORT).get(FluidUtils.BUCKET), + () -> new GrowthcraftBucketItem(GrowthcraftCellarFluids.AMBER_WORT_FLUID, Reference.FluidColor.AMBER_WORT.getColor())); + + public static final RegistryObject BROWN_ALE_BUCKET = ITEMS.register( + FluidUtils.getFluidNames(Reference.UnlocalizedName.BROWN_ALE).get(FluidUtils.BUCKET), + () -> new GrowthcraftBucketItem(GrowthcraftCellarFluids.BROWN_ALE_FLUID, Reference.FluidColor.BROWN_ALE.getColor())); + + public static final RegistryObject BROWN_LAGER_BUCKET = ITEMS.register( + FluidUtils.getFluidNames(Reference.UnlocalizedName.BROWN_LAGER).get(FluidUtils.BUCKET), + () -> new GrowthcraftBucketItem(GrowthcraftCellarFluids.BROWN_LAGER_FLUID, Reference.FluidColor.BROWN_LAGER.getColor())); + + public static final RegistryObject BROWN_WORT_BUCKET = ITEMS.register( + FluidUtils.getFluidNames(Reference.UnlocalizedName.BROWN_WORT).get(FluidUtils.BUCKET), + () -> new GrowthcraftBucketItem(GrowthcraftCellarFluids.BROWN_WORT_FLUID, Reference.FluidColor.BROWN_WORT.getColor())); + + public static final RegistryObject COPPER_ALE_BUCKET = ITEMS.register( + FluidUtils.getFluidNames(Reference.UnlocalizedName.COPPER_ALE).get(FluidUtils.BUCKET), + () -> new GrowthcraftBucketItem(GrowthcraftCellarFluids.COPPER_ALE_FLUID, Reference.FluidColor.COPPER_ALE.getColor())); + + public static final RegistryObject COPPER_LAGER_BUCKET = ITEMS.register( + FluidUtils.getFluidNames(Reference.UnlocalizedName.COPPER_LAGER).get(FluidUtils.BUCKET), + () -> new GrowthcraftBucketItem(GrowthcraftCellarFluids.COPPER_LAGER_FLUID, Reference.FluidColor.COPPER_LAGER.getColor())); + + public static final RegistryObject COPPER_WORT_BUCKET = ITEMS.register( + FluidUtils.getFluidNames(Reference.UnlocalizedName.COPPER_WORT).get(FluidUtils.BUCKET), + () -> new GrowthcraftBucketItem(GrowthcraftCellarFluids.COPPER_WORT_FLUID, Reference.FluidColor.COPPER_WORT.getColor())); + + public static final RegistryObject DARK_LAGER_BUCKET = ITEMS.register( + FluidUtils.getFluidNames(Reference.UnlocalizedName.DARK_LAGER).get(FluidUtils.BUCKET), + () -> new GrowthcraftBucketItem(GrowthcraftCellarFluids.DARK_LAGER_FLUID, Reference.FluidColor.DARK_LAGER.getColor())); + + public static final RegistryObject DARK_WORT_BUCKET = ITEMS.register( + FluidUtils.getFluidNames(Reference.UnlocalizedName.DARK_WORT).get(FluidUtils.BUCKET), + () -> new GrowthcraftBucketItem(GrowthcraftCellarFluids.DARK_WORT_FLUID, Reference.FluidColor.DARK_WORT.getColor())); + + public static final RegistryObject DEEP_AMBER_WORT_BUCKET = ITEMS.register( + FluidUtils.getFluidNames(Reference.UnlocalizedName.DEEP_AMBER_WORT).get(FluidUtils.BUCKET), + () -> new GrowthcraftBucketItem(GrowthcraftCellarFluids.DEEP_AMBER_WORT_FLUID, Reference.FluidColor.DEEP_AMBER_WORT.getColor())); + + public static final RegistryObject DEEP_COPPER_WORT_BUCKET = ITEMS.register( + FluidUtils.getFluidNames(Reference.UnlocalizedName.DEEP_COPPER_WORT).get(FluidUtils.BUCKET), + () -> new GrowthcraftBucketItem(GrowthcraftCellarFluids.DEEP_COPPER_WORT_FLUID, Reference.FluidColor.DEEP_COPPER_WORT.getColor())); + + public static final RegistryObject GOLDEN_WORT_BUCKET = ITEMS.register( + FluidUtils.getFluidNames(Reference.UnlocalizedName.GOLDEN_WORT).get(FluidUtils.BUCKET), + () -> new GrowthcraftBucketItem(GrowthcraftCellarFluids.GOLDEN_WORT_FLUID, Reference.FluidColor.GOLDEN_WORT.getColor())); + + public static final RegistryObject HOPPED_GOLDEN_WORT_BUCKET = ITEMS.register( + FluidUtils.getFluidNames(Reference.UnlocalizedName.HOPPED_GOLDEN_WORT).get(FluidUtils.BUCKET), + () -> new GrowthcraftBucketItem(GrowthcraftCellarFluids.HOPPED_GOLDEN_WORT_FLUID, Reference.FluidColor.HOPPED_GOLDEN_WORT.getColor())); + + public static final RegistryObject IPA_ALE_BUCKET = ITEMS.register( + FluidUtils.getFluidNames(Reference.UnlocalizedName.IPA_ALE).get(FluidUtils.BUCKET), + () -> new GrowthcraftBucketItem(GrowthcraftCellarFluids.IPA_ALE_FLUID, Reference.FluidColor.IPA_ALE.getColor())); + + public static final RegistryObject OLD_PORT_ALE_BUCKET = ITEMS.register( + FluidUtils.getFluidNames(Reference.UnlocalizedName.OLD_PORT_ALE).get(FluidUtils.BUCKET), + () -> new GrowthcraftBucketItem(GrowthcraftCellarFluids.OLD_PORT_ALE_FLUID, Reference.FluidColor.OLD_PORT_ALE.getColor())); + + public static final RegistryObject PALE_ALE_BUCKET = ITEMS.register( + FluidUtils.getFluidNames(Reference.UnlocalizedName.PALE_ALE).get(FluidUtils.BUCKET), + () -> new GrowthcraftBucketItem(GrowthcraftCellarFluids.PALE_ALE_FLUID, Reference.FluidColor.PALE_ALE.getColor())); + + public static final RegistryObject PALE_LAGER_BUCKET = ITEMS.register( + FluidUtils.getFluidNames(Reference.UnlocalizedName.PALE_LAGER).get(FluidUtils.BUCKET), + () -> new GrowthcraftBucketItem(GrowthcraftCellarFluids.PALE_LAGER_FLUID, Reference.FluidColor.PALE_LAGER.getColor())); + + public static final RegistryObject PALE_GOLDEN_WORT_BUCKET = ITEMS.register( + FluidUtils.getFluidNames(Reference.UnlocalizedName.PALE_GOLDEN_WORT).get(FluidUtils.BUCKET), + () -> new GrowthcraftBucketItem(GrowthcraftCellarFluids.PALE_GOLDEN_WORT_FLUID, Reference.FluidColor.PALE_GOLDEN_WORT.getColor())); + + public static final RegistryObject PILSNER_LAGER_BUCKET = ITEMS.register( + FluidUtils.getFluidNames(Reference.UnlocalizedName.PILSNER_LAGER).get(FluidUtils.BUCKET), + () -> new GrowthcraftBucketItem(GrowthcraftCellarFluids.PILSNER_LAGER_FLUID, Reference.FluidColor.PILSNER_LAGER.getColor())); + + public static final RegistryObject PURPLE_GRAPE_JUICE_BUCKET = ITEMS.register( + FluidUtils.getFluidNames(Reference.UnlocalizedName.PURPLE_GRAPE_JUICE).get(FluidUtils.BUCKET), + () -> new GrowthcraftBucketItem(GrowthcraftCellarFluids.PURPLE_GRAPE_JUICE_FLUID, Reference.FluidColor.PURPLE_GRAPE_JUICE.getColor())); + + public static final RegistryObject PURPLE_GRAPE_WINE_BUCKET = ITEMS.register( + FluidUtils.getFluidNames(Reference.UnlocalizedName.PURPLE_GRAPE_WINE).get(FluidUtils.BUCKET), + () -> new GrowthcraftBucketItem(GrowthcraftCellarFluids.PURPLE_GRAPE_WINE_FLUID, Reference.FluidColor.PURPLE_GRAPE_WINE.getColor())); + + public static final RegistryObject RED_GRAPE_JUICE_BUCKET = ITEMS.register( + FluidUtils.getFluidNames(Reference.UnlocalizedName.RED_GRAPE_JUICE).get(FluidUtils.BUCKET), + () -> new GrowthcraftBucketItem(GrowthcraftCellarFluids.RED_GRAPE_JUICE_FLUID, Reference.FluidColor.RED_GRAPE_JUICE.getColor())); + + public static final RegistryObject RED_GRAPE_WINE_BUCKET = ITEMS.register( + FluidUtils.getFluidNames(Reference.UnlocalizedName.RED_GRAPE_WINE).get(FluidUtils.BUCKET), + () -> new GrowthcraftBucketItem(GrowthcraftCellarFluids.RED_GRAPE_WINE_FLUID, Reference.FluidColor.RED_GRAPE_WINE.getColor())); + + public static final RegistryObject STOUT_ALE_BUCKET = ITEMS.register( + FluidUtils.getFluidNames(Reference.UnlocalizedName.STOUT_ALE).get(FluidUtils.BUCKET), + () -> new GrowthcraftBucketItem(GrowthcraftCellarFluids.STOUT_ALE_FLUID, Reference.FluidColor.STOUT_ALE.getColor())); + + public static final RegistryObject VIENNA_LAGER_BUCKET = ITEMS.register( + FluidUtils.getFluidNames(Reference.UnlocalizedName.VIENNA_LAGER).get(FluidUtils.BUCKET), + () -> new GrowthcraftBucketItem(GrowthcraftCellarFluids.VIENNA_LAGER_FLUID, Reference.FluidColor.VIENNA_LAGER.getColor())); + + public static final RegistryObject WHITE_GRAPE_JUICE_BUCKET = ITEMS.register( + FluidUtils.getFluidNames(Reference.UnlocalizedName.WHITE_GRAPE_JUICE).get(FluidUtils.BUCKET), + () -> new GrowthcraftBucketItem(GrowthcraftCellarFluids.WHITE_GRAPE_JUICE_FLUID, Reference.FluidColor.WHITE_GRAPE_JUICE.getColor())); + + public static final RegistryObject WHITE_GRAPE_WINE_BUCKET = ITEMS.register( + FluidUtils.getFluidNames(Reference.UnlocalizedName.WHITE_GRAPE_WINE).get(FluidUtils.BUCKET), + () -> new GrowthcraftBucketItem(GrowthcraftCellarFluids.WHITE_GRAPE_WINE_FLUID, Reference.FluidColor.WHITE_GRAPE_WINE.getColor())); + + public static final RegistryObject WORT_BUCKET = ITEMS.register( + FluidUtils.getFluidNames(Reference.UnlocalizedName.WORT).get(FluidUtils.BUCKET), + () -> new GrowthcraftBucketItem(GrowthcraftCellarFluids.WORT_FLUID, Reference.FluidColor.WORT.getColor())); + + public static void registerCompostables() { + float f = 0.3F; + float f1 = 0.5F; + float f2 = 0.65F; + float f3 = 0.85F; + float f4 = 1.0F; + + // ComposterBlock.COMPOSTABLES.put(GrowthcraftRiceItems.RICE.get(), f2); + + } + + public static boolean excludeItemRegistry(ResourceLocation registryName) { + ArrayList excludeItems = new ArrayList<>(); + //excludeItems.add(Reference.MODID + ":" + Reference.UnlocalizedName.APPLE_TREE_FRUIT); + return excludeItems.contains(registryName.toString()); + } + + private GrowthcraftCellarItems() { + /* Prevent default public constructor */ + } +} diff --git a/src/main/java/growthcraft/cellar/init/GrowthcraftCellarMenus.java b/src/main/java/growthcraft/cellar/init/GrowthcraftCellarMenus.java new file mode 100644 index 0000000..6a00be4 --- /dev/null +++ b/src/main/java/growthcraft/cellar/init/GrowthcraftCellarMenus.java @@ -0,0 +1,49 @@ +package growthcraft.cellar.init; + +import growthcraft.cellar.screen.container.*; +import growthcraft.cellar.shared.Reference; +import net.minecraft.world.inventory.AbstractContainerMenu; +import net.minecraft.world.inventory.MenuType; +import net.minecraftforge.common.extensions.IForgeMenuType; +import net.minecraftforge.network.IContainerFactory; +import net.minecraftforge.registries.DeferredRegister; +import net.minecraftforge.registries.ForgeRegistries; +import net.minecraftforge.registries.RegistryObject; + +public class GrowthcraftCellarMenus { + + public static final DeferredRegister> MENUS = DeferredRegister.create( + ForgeRegistries.CONTAINERS, Reference.MODID + ); + + public static final RegistryObject> BREW_KETTLE_MENU = registerMenuType( + Reference.UnlocalizedName.BREW_KETTLE, + BrewKettleMenu::new + ); + + public static final RegistryObject> CULTURE_JAR_MENU = registerMenuType( + Reference.UnlocalizedName.CULTURE_JAR, + CultureJarMenu::new + ); + + public static final RegistryObject> FERMENTATION_BARREL_MENU = registerMenuType( + Reference.UnlocalizedName.FERMENT_BARREL, + FermentationBarrelMenu::new + ); + + public static final RegistryObject> FRUIT_PRESS_MENU = registerMenuType( + Reference.UnlocalizedName.FRUIT_PRESS, + FruitPressMenu::new + ); + + public static final RegistryObject> ROASTER_MENU = registerMenuType( + Reference.UnlocalizedName.ROASTER, + RoasterMenu::new + ); + + private static RegistryObject> registerMenuType( + String name, IContainerFactory factory) { + return MENUS.register(name, () -> IForgeMenuType.create(factory)); + } + +} diff --git a/src/main/java/growthcraft/cellar/init/GrowthcraftCellarRecipes.java b/src/main/java/growthcraft/cellar/init/GrowthcraftCellarRecipes.java new file mode 100644 index 0000000..f1e3fe6 --- /dev/null +++ b/src/main/java/growthcraft/cellar/init/GrowthcraftCellarRecipes.java @@ -0,0 +1,51 @@ +package growthcraft.cellar.init; + +import growthcraft.cellar.recipe.*; +import growthcraft.cellar.shared.Reference; +import net.minecraft.world.item.crafting.RecipeSerializer; +import net.minecraftforge.eventbus.api.IEventBus; +import net.minecraftforge.registries.DeferredRegister; +import net.minecraftforge.registries.ForgeRegistries; +import net.minecraftforge.registries.RegistryObject; + +public class GrowthcraftCellarRecipes { + + public static final DeferredRegister> SERIALIZERS = + DeferredRegister.create(ForgeRegistries.RECIPE_SERIALIZERS, Reference.MODID); + + private GrowthcraftCellarRecipes() { + /* Private constructor to hide the implicit public one. */ + } + + public static final RegistryObject> BREW_KETTLE_RECIPE_SERIAL = + SERIALIZERS.register(Reference.UnlocalizedName.BREW_KETTLE_RECIPE, + () -> BrewKettleRecipe.Serializer.INSTANCE); + + public static final RegistryObject> CULTURE_JAR_RECIPE_SERIALIZER = + SERIALIZERS.register(Reference.UnlocalizedName.CULTURE_JAR_RECIPE, + () -> CultureJarRecipe.Serializer.INSTANCE); + + public static final RegistryObject> CULTURE_JAR_STARTER_RECIPE_SERIAL = + SERIALIZERS.register(Reference.UnlocalizedName.CULTURE_JAR_STARTER_RECIPE, + () -> CultureJarStarterRecipe.Serializer.INSTANCE); + + public static final RegistryObject> FERMENT_BARREL_RECIPE_SERIAL = + SERIALIZERS.register(Reference.UnlocalizedName.FERMENT_BARREL_RECIPE, + () -> FermentationBarrelRecipe.Serializer.INSTANCE); + + public static final RegistryObject> FRUIT_PRESS_RECIPE_SERIAL = + SERIALIZERS.register(Reference.UnlocalizedName.FRUIT_PRESS_RECIPE, + () -> FruitPressRecipe.Serializer.INSTANCE); + + public static final RegistryObject> ROASTER_RECIPE_SERIAL = + SERIALIZERS.register(Reference.UnlocalizedName.ROASTER_RECIPE, + () -> RoasterRecipe.Serializer.INSTANCE); + + + + public static void register(IEventBus eventBus) { + SERIALIZERS.register(eventBus); + } + + +} diff --git a/src/main/java/growthcraft/cellar/init/GrowthcraftCellarTags.java b/src/main/java/growthcraft/cellar/init/GrowthcraftCellarTags.java new file mode 100644 index 0000000..d1cd657 --- /dev/null +++ b/src/main/java/growthcraft/cellar/init/GrowthcraftCellarTags.java @@ -0,0 +1,72 @@ +package growthcraft.cellar.init; + +import growthcraft.cellar.shared.Reference; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.tags.BlockTags; +import net.minecraft.tags.FluidTags; +import net.minecraft.tags.ItemTags; +import net.minecraft.tags.TagKey; +import net.minecraft.world.item.Item; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.material.Fluid; + +public class GrowthcraftCellarTags { + + public static void init() { + GrowthcraftCellarTags.Blocks.init(); + GrowthcraftCellarTags.Items.init(); + GrowthcraftCellarTags.Fluids.init(); + GrowthcraftCellarTags.EntityTypes.init(); + } + + public static class Blocks { + + private static void init() { + // Do nothing, simply instantiate static variables + } + + //public static final TagKey HEATSOURCES = tag(Reference.UnlocalizedName.TAG_HEATSOURCES); + + private static TagKey tag(String name) { + return BlockTags.create(new ResourceLocation(Reference.MODID, name)); + } + } + + public static class Items { + + public static final TagKey GRAIN = tag(Reference.UnlocalizedName.GRAIN); + + private static void init() { + // Do nothing, simply instantiate static variables + } + + private static TagKey tag(String name) { + return ItemTags.create(new ResourceLocation(Reference.MODID, name)); + } + } + + public static class Fluids { + + private static void init() { + // Do nothing, simply instantiate static variables + } + + private static TagKey tag(String name) { + return FluidTags.create(new ResourceLocation(Reference.MODID, name)); + } + } + + public static class EntityTypes { + + private static void init() { + // Do nothing, simply instantiate static variables + } + + //public static final TagKey> MILKABLE = tag("milkable"); + + //private static TagKey> tag(String name) { + // return TagKey.create(Registry.ENTITY_TYPE_REGISTRY, new ResourceLocation(Reference.MODID, name)); + //} + } + +} diff --git a/src/main/java/growthcraft/cellar/init/client/GrowthcraftCellarBlockEntityRenderers.java b/src/main/java/growthcraft/cellar/init/client/GrowthcraftCellarBlockEntityRenderers.java new file mode 100644 index 0000000..7501385 --- /dev/null +++ b/src/main/java/growthcraft/cellar/init/client/GrowthcraftCellarBlockEntityRenderers.java @@ -0,0 +1,22 @@ +package growthcraft.cellar.init.client; + +import growthcraft.cellar.block.entity.renderer.BrewKettleBlockEntityRenderer; +import growthcraft.cellar.block.entity.renderer.CultureJarBlockEntityRenderer; +import growthcraft.cellar.init.GrowthcraftCellarBlockEntities; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.client.event.EntityRenderersEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; + +@Mod.EventBusSubscriber(value = Dist.CLIENT, bus = Mod.EventBusSubscriber.Bus.MOD) +public class GrowthcraftCellarBlockEntityRenderers { + @SubscribeEvent + public static void register(EntityRenderersEvent.RegisterRenderers event) { + event.registerBlockEntityRenderer(GrowthcraftCellarBlockEntities.CULTURE_JAR_BLOCK_ENTITY.get(), context -> new CultureJarBlockEntityRenderer()); + event.registerBlockEntityRenderer(GrowthcraftCellarBlockEntities.BREW_KETTLE_BLOCK_ENTITY.get(), context -> new BrewKettleBlockEntityRenderer()); + } + + private GrowthcraftCellarBlockEntityRenderers() { + /* Prevent default public constructor */ + } +} diff --git a/src/main/java/growthcraft/cellar/init/client/GrowthcraftCellarBlockRenderers.java b/src/main/java/growthcraft/cellar/init/client/GrowthcraftCellarBlockRenderers.java new file mode 100644 index 0000000..86cb766 --- /dev/null +++ b/src/main/java/growthcraft/cellar/init/client/GrowthcraftCellarBlockRenderers.java @@ -0,0 +1,94 @@ +package growthcraft.cellar.init.client; + +import growthcraft.cellar.init.GrowthcraftCellarBlocks; +import growthcraft.cellar.init.GrowthcraftCellarFluids; +import net.minecraft.client.renderer.ItemBlockRenderTypes; +import net.minecraft.client.renderer.RenderType; + +public class GrowthcraftCellarBlockRenderers { + + public static void setRenderLayers() { + setFluidRenderLayers(); + setBlockRenderLayers(); + } + + private static void setBlockRenderLayers() { + ItemBlockRenderTypes.setRenderLayer(GrowthcraftCellarBlocks.PURPLE_GRAPE_VINE.get(), RenderType.cutout()); + ItemBlockRenderTypes.setRenderLayer(GrowthcraftCellarBlocks.PURPLE_GRAPE_VINE_FRUIT.get(), RenderType.cutout()); + ItemBlockRenderTypes.setRenderLayer(GrowthcraftCellarBlocks.PURPLE_GRAPE_VINE_LEAVES.get(), RenderType.translucent()); + ItemBlockRenderTypes.setRenderLayer(GrowthcraftCellarBlocks.WHITE_GRAPE_VINE.get(), RenderType.cutout()); + ItemBlockRenderTypes.setRenderLayer(GrowthcraftCellarBlocks.WHITE_GRAPE_VINE_FRUIT.get(), RenderType.cutout()); + ItemBlockRenderTypes.setRenderLayer(GrowthcraftCellarBlocks.WHITE_GRAPE_VINE_LEAVES.get(), RenderType.translucent()); + ItemBlockRenderTypes.setRenderLayer(GrowthcraftCellarBlocks.HOPS_VINE.get(), RenderType.cutout()); + ItemBlockRenderTypes.setRenderLayer(GrowthcraftCellarBlocks.RED_GRAPE_VINE.get(), RenderType.cutout()); + ItemBlockRenderTypes.setRenderLayer(GrowthcraftCellarBlocks.RED_GRAPE_VINE_FRUIT.get(), RenderType.cutout()); + ItemBlockRenderTypes.setRenderLayer(GrowthcraftCellarBlocks.RED_GRAPE_VINE_LEAVES.get(), RenderType.translucent()); + } + + private static void setFluidRenderLayers() { + ItemBlockRenderTypes.setRenderLayer(GrowthcraftCellarFluids.AMBER_ALE_FLUID.get().getSource(), RenderType.translucent()); + ItemBlockRenderTypes.setRenderLayer(GrowthcraftCellarFluids.AMBER_ALE_FLUID.get().getFlowing(), RenderType.translucent()); + ItemBlockRenderTypes.setRenderLayer(GrowthcraftCellarFluids.AMBER_LAGER_FLUID.get().getSource(), RenderType.translucent()); + ItemBlockRenderTypes.setRenderLayer(GrowthcraftCellarFluids.AMBER_LAGER_FLUID.get().getFlowing(), RenderType.translucent()); + ItemBlockRenderTypes.setRenderLayer(GrowthcraftCellarFluids.AMBER_WORT_FLUID.get().getSource(), RenderType.translucent()); + ItemBlockRenderTypes.setRenderLayer(GrowthcraftCellarFluids.AMBER_WORT_FLUID.get().getFlowing(), RenderType.translucent()); + ItemBlockRenderTypes.setRenderLayer(GrowthcraftCellarFluids.BROWN_ALE_FLUID.get().getSource(), RenderType.translucent()); + ItemBlockRenderTypes.setRenderLayer(GrowthcraftCellarFluids.BROWN_ALE_FLUID.get().getFlowing(), RenderType.translucent()); + ItemBlockRenderTypes.setRenderLayer(GrowthcraftCellarFluids.BROWN_LAGER_FLUID.get().getSource(), RenderType.translucent()); + ItemBlockRenderTypes.setRenderLayer(GrowthcraftCellarFluids.BROWN_LAGER_FLUID.get().getFlowing(), RenderType.translucent()); + ItemBlockRenderTypes.setRenderLayer(GrowthcraftCellarFluids.BROWN_WORT_FLUID.get().getSource(), RenderType.translucent()); + ItemBlockRenderTypes.setRenderLayer(GrowthcraftCellarFluids.BROWN_WORT_FLUID.get().getFlowing(), RenderType.translucent()); + ItemBlockRenderTypes.setRenderLayer(GrowthcraftCellarFluids.COPPER_ALE_FLUID.get().getSource(), RenderType.translucent()); + ItemBlockRenderTypes.setRenderLayer(GrowthcraftCellarFluids.COPPER_ALE_FLUID.get().getFlowing(), RenderType.translucent()); + ItemBlockRenderTypes.setRenderLayer(GrowthcraftCellarFluids.COPPER_LAGER_FLUID.get().getSource(), RenderType.translucent()); + ItemBlockRenderTypes.setRenderLayer(GrowthcraftCellarFluids.COPPER_LAGER_FLUID.get().getFlowing(), RenderType.translucent()); + ItemBlockRenderTypes.setRenderLayer(GrowthcraftCellarFluids.COPPER_WORT_FLUID.get().getSource(), RenderType.translucent()); + ItemBlockRenderTypes.setRenderLayer(GrowthcraftCellarFluids.COPPER_WORT_FLUID.get().getFlowing(), RenderType.translucent()); + ItemBlockRenderTypes.setRenderLayer(GrowthcraftCellarFluids.DARK_LAGER_FLUID.get().getSource(), RenderType.translucent()); + ItemBlockRenderTypes.setRenderLayer(GrowthcraftCellarFluids.DARK_LAGER_FLUID.get().getFlowing(), RenderType.translucent()); + ItemBlockRenderTypes.setRenderLayer(GrowthcraftCellarFluids.DARK_WORT_FLUID.get().getSource(), RenderType.translucent()); + ItemBlockRenderTypes.setRenderLayer(GrowthcraftCellarFluids.DARK_WORT_FLUID.get().getFlowing(), RenderType.translucent()); + ItemBlockRenderTypes.setRenderLayer(GrowthcraftCellarFluids.DEEP_AMBER_WORT_FLUID.get().getSource(), RenderType.translucent()); + ItemBlockRenderTypes.setRenderLayer(GrowthcraftCellarFluids.DEEP_AMBER_WORT_FLUID.get().getFlowing(), RenderType.translucent()); + ItemBlockRenderTypes.setRenderLayer(GrowthcraftCellarFluids.DEEP_COPPER_WORT_FLUID.get().getSource(), RenderType.translucent()); + ItemBlockRenderTypes.setRenderLayer(GrowthcraftCellarFluids.DEEP_COPPER_WORT_FLUID.get().getFlowing(), RenderType.translucent()); + ItemBlockRenderTypes.setRenderLayer(GrowthcraftCellarFluids.GOLDEN_WORT_FLUID.get().getSource(), RenderType.translucent()); + ItemBlockRenderTypes.setRenderLayer(GrowthcraftCellarFluids.GOLDEN_WORT_FLUID.get().getFlowing(), RenderType.translucent()); + ItemBlockRenderTypes.setRenderLayer(GrowthcraftCellarFluids.HOPPED_GOLDEN_WORT_FLUID.get().getSource(), RenderType.translucent()); + ItemBlockRenderTypes.setRenderLayer(GrowthcraftCellarFluids.HOPPED_GOLDEN_WORT_FLUID.get().getFlowing(), RenderType.translucent()); + ItemBlockRenderTypes.setRenderLayer(GrowthcraftCellarFluids.IPA_ALE_FLUID.get().getSource(), RenderType.translucent()); + ItemBlockRenderTypes.setRenderLayer(GrowthcraftCellarFluids.IPA_ALE_FLUID.get().getFlowing(), RenderType.translucent()); + ItemBlockRenderTypes.setRenderLayer(GrowthcraftCellarFluids.OLD_PORT_ALE_FLUID.get().getSource(), RenderType.translucent()); + ItemBlockRenderTypes.setRenderLayer(GrowthcraftCellarFluids.OLD_PORT_ALE_FLUID.get().getFlowing(), RenderType.translucent()); + ItemBlockRenderTypes.setRenderLayer(GrowthcraftCellarFluids.PALE_ALE_FLUID.get().getSource(), RenderType.translucent()); + ItemBlockRenderTypes.setRenderLayer(GrowthcraftCellarFluids.PALE_ALE_FLUID.get().getFlowing(), RenderType.translucent()); + ItemBlockRenderTypes.setRenderLayer(GrowthcraftCellarFluids.PALE_GOLDEN_WORT_FLUID.get().getSource(), RenderType.translucent()); + ItemBlockRenderTypes.setRenderLayer(GrowthcraftCellarFluids.PALE_GOLDEN_WORT_FLUID.get().getFlowing(), RenderType.translucent()); + ItemBlockRenderTypes.setRenderLayer(GrowthcraftCellarFluids.PALE_LAGER_FLUID.get().getSource(), RenderType.translucent()); + ItemBlockRenderTypes.setRenderLayer(GrowthcraftCellarFluids.PALE_LAGER_FLUID.get().getFlowing(), RenderType.translucent()); + ItemBlockRenderTypes.setRenderLayer(GrowthcraftCellarFluids.PILSNER_LAGER_FLUID.get().getSource(), RenderType.translucent()); + ItemBlockRenderTypes.setRenderLayer(GrowthcraftCellarFluids.PILSNER_LAGER_FLUID.get().getFlowing(), RenderType.translucent()); + ItemBlockRenderTypes.setRenderLayer(GrowthcraftCellarFluids.PURPLE_GRAPE_JUICE_FLUID.get().getSource(), RenderType.translucent()); + ItemBlockRenderTypes.setRenderLayer(GrowthcraftCellarFluids.PURPLE_GRAPE_JUICE_FLUID.get().getFlowing(), RenderType.translucent()); + ItemBlockRenderTypes.setRenderLayer(GrowthcraftCellarFluids.PURPLE_GRAPE_WINE_FLUID.get().getSource(), RenderType.translucent()); + ItemBlockRenderTypes.setRenderLayer(GrowthcraftCellarFluids.PURPLE_GRAPE_WINE_FLUID.get().getFlowing(), RenderType.translucent()); + ItemBlockRenderTypes.setRenderLayer(GrowthcraftCellarFluids.RED_GRAPE_JUICE_FLUID.get().getSource(), RenderType.translucent()); + ItemBlockRenderTypes.setRenderLayer(GrowthcraftCellarFluids.RED_GRAPE_JUICE_FLUID.get().getFlowing(), RenderType.translucent()); + ItemBlockRenderTypes.setRenderLayer(GrowthcraftCellarFluids.RED_GRAPE_WINE_FLUID.get().getSource(), RenderType.translucent()); + ItemBlockRenderTypes.setRenderLayer(GrowthcraftCellarFluids.RED_GRAPE_WINE_FLUID.get().getFlowing(), RenderType.translucent()); + ItemBlockRenderTypes.setRenderLayer(GrowthcraftCellarFluids.STOUT_ALE_FLUID.get().getSource(), RenderType.translucent()); + ItemBlockRenderTypes.setRenderLayer(GrowthcraftCellarFluids.STOUT_ALE_FLUID.get().getFlowing(), RenderType.translucent()); + ItemBlockRenderTypes.setRenderLayer(GrowthcraftCellarFluids.VIENNA_LAGER_FLUID.get().getSource(), RenderType.translucent()); + ItemBlockRenderTypes.setRenderLayer(GrowthcraftCellarFluids.VIENNA_LAGER_FLUID.get().getFlowing(), RenderType.translucent()); + ItemBlockRenderTypes.setRenderLayer(GrowthcraftCellarFluids.WHITE_GRAPE_JUICE_FLUID.get().getSource(), RenderType.translucent()); + ItemBlockRenderTypes.setRenderLayer(GrowthcraftCellarFluids.WHITE_GRAPE_JUICE_FLUID.get().getFlowing(), RenderType.translucent()); + ItemBlockRenderTypes.setRenderLayer(GrowthcraftCellarFluids.WHITE_GRAPE_WINE_FLUID.get().getSource(), RenderType.translucent()); + ItemBlockRenderTypes.setRenderLayer(GrowthcraftCellarFluids.WHITE_GRAPE_WINE_FLUID.get().getFlowing(), RenderType.translucent()); + ItemBlockRenderTypes.setRenderLayer(GrowthcraftCellarFluids.WORT_FLUID.get().getSource(), RenderType.translucent()); + ItemBlockRenderTypes.setRenderLayer(GrowthcraftCellarFluids.WORT_FLUID.get().getFlowing(), RenderType.translucent()); + } + + private GrowthcraftCellarBlockRenderers() { + /* Prevent default public constructor */ + } +} diff --git a/src/main/java/growthcraft/cellar/init/client/GrowthcraftCellarItemRenderers.java b/src/main/java/growthcraft/cellar/init/client/GrowthcraftCellarItemRenderers.java new file mode 100644 index 0000000..12e23db --- /dev/null +++ b/src/main/java/growthcraft/cellar/init/client/GrowthcraftCellarItemRenderers.java @@ -0,0 +1,66 @@ +package growthcraft.cellar.init.client; + +import growthcraft.cellar.init.GrowthcraftCellarFluids; +import growthcraft.cellar.init.GrowthcraftCellarItems; +import growthcraft.cellar.shared.Reference; +import growthcraft.lib.client.GrowthcraftItemColor; +import growthcraft.lib.client.ItemRendererUtils; +import net.minecraft.world.item.Item; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.client.event.ColorHandlerEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.registries.RegistryObject; + +@Mod.EventBusSubscriber(value = Dist.CLIENT, bus = Mod.EventBusSubscriber.Bus.MOD, modid = growthcraft.apiary.shared.Reference.MODID) +public class GrowthcraftCellarItemRenderers { + + @SubscribeEvent + public static void registerItemRenders(ColorHandlerEvent.Item event) { + GrowthcraftItemColor itemColor = new GrowthcraftItemColor(); + + for (RegistryObject grain : GrowthcraftCellarItems.GRAINS) { + event.getItemColors().register(itemColor, grain::get); + } + + for (RegistryObject potion : GrowthcraftCellarItems.POTIONS) { + event.getItemColors().register(itemColor, potion::get); + } + + ItemRendererUtils.registerItem(event, Reference.FluidColor.AMBER_ALE.toItemColor(), GrowthcraftCellarFluids.AMBER_ALE_FLUID.get().getBucket()); + ItemRendererUtils.registerItem(event, Reference.FluidColor.AMBER_LAGER.toItemColor(), GrowthcraftCellarFluids.AMBER_LAGER_FLUID.get().getBucket()); + ItemRendererUtils.registerItem(event, Reference.FluidColor.AMBER_WORT.toItemColor(), GrowthcraftCellarFluids.AMBER_WORT_FLUID.get().getBucket()); + ItemRendererUtils.registerItem(event, Reference.FluidColor.BROWN_ALE.toItemColor(), GrowthcraftCellarFluids.BROWN_ALE_FLUID.get().getBucket()); + ItemRendererUtils.registerItem(event, Reference.FluidColor.BROWN_LAGER.toItemColor(), GrowthcraftCellarFluids.BROWN_LAGER_FLUID.get().getBucket()); + ItemRendererUtils.registerItem(event, Reference.FluidColor.BROWN_WORT.toItemColor(), GrowthcraftCellarFluids.BROWN_WORT_FLUID.get().getBucket()); + ItemRendererUtils.registerItem(event, Reference.FluidColor.COPPER_ALE.toItemColor(), GrowthcraftCellarFluids.COPPER_ALE_FLUID.get().getBucket()); + ItemRendererUtils.registerItem(event, Reference.FluidColor.COPPER_LAGER.toItemColor(), GrowthcraftCellarFluids.COPPER_LAGER_FLUID.get().getBucket()); + ItemRendererUtils.registerItem(event, Reference.FluidColor.COPPER_WORT.toItemColor(), GrowthcraftCellarFluids.COPPER_WORT_FLUID.get().getBucket()); + ItemRendererUtils.registerItem(event, Reference.FluidColor.DARK_LAGER.toItemColor(), GrowthcraftCellarFluids.DARK_LAGER_FLUID.get().getBucket()); + ItemRendererUtils.registerItem(event, Reference.FluidColor.DARK_WORT.toItemColor(), GrowthcraftCellarFluids.DARK_WORT_FLUID.get().getBucket()); + ItemRendererUtils.registerItem(event, Reference.FluidColor.DEEP_AMBER_WORT.toItemColor(), GrowthcraftCellarFluids.DEEP_AMBER_WORT_FLUID.get().getBucket()); + ItemRendererUtils.registerItem(event, Reference.FluidColor.DEEP_COPPER_WORT.toItemColor(), GrowthcraftCellarFluids.DEEP_COPPER_WORT_FLUID.get().getBucket()); + ItemRendererUtils.registerItem(event, Reference.FluidColor.GOLDEN_WORT.toItemColor(), GrowthcraftCellarFluids.GOLDEN_WORT_FLUID.get().getBucket()); + ItemRendererUtils.registerItem(event, Reference.FluidColor.HOPPED_GOLDEN_WORT.toItemColor(), GrowthcraftCellarFluids.HOPPED_GOLDEN_WORT_FLUID.get().getBucket()); + ItemRendererUtils.registerItem(event, Reference.FluidColor.IPA_ALE.toItemColor(), GrowthcraftCellarFluids.IPA_ALE_FLUID.get().getBucket()); + ItemRendererUtils.registerItem(event, Reference.FluidColor.OLD_PORT_ALE.toItemColor(), GrowthcraftCellarFluids.OLD_PORT_ALE_FLUID.get().getBucket()); + ItemRendererUtils.registerItem(event, Reference.FluidColor.PALE_ALE.toItemColor(), GrowthcraftCellarFluids.PALE_ALE_FLUID.get().getBucket()); + ItemRendererUtils.registerItem(event, Reference.FluidColor.PALE_GOLDEN_WORT.toItemColor(), GrowthcraftCellarFluids.PALE_GOLDEN_WORT_FLUID.get().getBucket()); + ItemRendererUtils.registerItem(event, Reference.FluidColor.PALE_LAGER.toItemColor(), GrowthcraftCellarFluids.PALE_LAGER_FLUID.get().getBucket()); + ItemRendererUtils.registerItem(event, Reference.FluidColor.PILSNER_LAGER.toItemColor(), GrowthcraftCellarFluids.PILSNER_LAGER_FLUID.get().getBucket()); + ItemRendererUtils.registerItem(event, Reference.FluidColor.PURPLE_GRAPE_JUICE.toItemColor(), GrowthcraftCellarFluids.PURPLE_GRAPE_JUICE_FLUID.get().getBucket()); + ItemRendererUtils.registerItem(event, Reference.FluidColor.PURPLE_GRAPE_WINE.toItemColor(), GrowthcraftCellarFluids.PURPLE_GRAPE_WINE_FLUID.get().getBucket()); + ItemRendererUtils.registerItem(event, Reference.FluidColor.RED_GRAPE_JUICE.toItemColor(), GrowthcraftCellarFluids.RED_GRAPE_JUICE_FLUID.get().getBucket()); + ItemRendererUtils.registerItem(event, Reference.FluidColor.RED_GRAPE_WINE.toItemColor(), GrowthcraftCellarFluids.RED_GRAPE_WINE_FLUID.get().getBucket()); + ItemRendererUtils.registerItem(event, Reference.FluidColor.STOUT_ALE.toItemColor(), GrowthcraftCellarFluids.STOUT_ALE_FLUID.get().getBucket()); + ItemRendererUtils.registerItem(event, Reference.FluidColor.VIENNA_LAGER.toItemColor(), GrowthcraftCellarFluids.VIENNA_LAGER_FLUID.get().getBucket()); + ItemRendererUtils.registerItem(event, Reference.FluidColor.WHITE_GRAPE_JUICE.toItemColor(), GrowthcraftCellarFluids.WHITE_GRAPE_JUICE_FLUID.get().getBucket()); + ItemRendererUtils.registerItem(event, Reference.FluidColor.WHITE_GRAPE_WINE.toItemColor(), GrowthcraftCellarFluids.WHITE_GRAPE_WINE_FLUID.get().getBucket()); + ItemRendererUtils.registerItem(event, Reference.FluidColor.WORT.toItemColor(), GrowthcraftCellarFluids.WORT_FLUID.get().getBucket()); + } + + private GrowthcraftCellarItemRenderers() { + /* Prevent automatic public constructor */ + } + +} diff --git a/src/main/java/growthcraft/cellar/init/config/GrowthcraftCellarConfig.java b/src/main/java/growthcraft/cellar/init/config/GrowthcraftCellarConfig.java new file mode 100644 index 0000000..6cb3f69 --- /dev/null +++ b/src/main/java/growthcraft/cellar/init/config/GrowthcraftCellarConfig.java @@ -0,0 +1,102 @@ +package growthcraft.cellar.init.config; + +import com.electronwill.nightconfig.core.file.CommentedFileConfig; +import com.electronwill.nightconfig.core.io.WritingMode; +import net.minecraftforge.common.ForgeConfigSpec; +import net.minecraftforge.fml.loading.FMLPaths; + +import java.io.File; + +public class GrowthcraftCellarConfig { + + public static final ForgeConfigSpec.Builder SERVER_BUILDER = new ForgeConfigSpec.Builder(); + public static final ForgeConfigSpec SERVER; + public static final String SERVER_CONFIG = "growthcraft-cellar-server.toml"; + + private static final String CATEGORY_BREW_KETTLE = "brew_kettle"; + private static final String CATEGORY_GRAPE_VINES = "grape_vines"; + + private static ForgeConfigSpec.IntValue brew_kettle_lit_light_level; + private static ForgeConfigSpec.IntValue default_brewing_ticks; + + private static ForgeConfigSpec.IntValue grape_vine_min_fruit; + private static ForgeConfigSpec.IntValue grape_vine_max_fruit; + + private static ForgeConfigSpec.IntValue hops_min_fruit; + private static ForgeConfigSpec.IntValue hops_max_fruit; + + static { + initBrewKettleConfig(SERVER_BUILDER); + initGrapeVineConfig(SERVER_BUILDER); + initHopsCropConfig(SERVER_BUILDER); + + SERVER = SERVER_BUILDER.build(); + } + + private GrowthcraftCellarConfig() { + /* Disable default public constructor */ + } + + public static void loadConfig() { + loadConfig(SERVER, FMLPaths.CONFIGDIR.get().resolve(SERVER_CONFIG).toString()); + } + + public static void loadConfig(ForgeConfigSpec configSpec, String path) { + final CommentedFileConfig fileConfig = CommentedFileConfig.builder( + new File(path)).sync().autosave().writingMode(WritingMode.REPLACE).build(); + + fileConfig.load(); + configSpec.setConfig(fileConfig); + } + + public static void initBrewKettleConfig(ForgeConfigSpec.Builder server) { + brew_kettle_lit_light_level = server + .comment("Set the light level for the brew kettle when it is lit. Setting to 0 uses neighbor light level.") + .defineInRange("brewKettle.LitLightLevel", 15, 0, 15); + default_brewing_ticks = server + .comment("Set the Brew Kettle processing time in ticks.") + .defineInRange("brewKettle.DefaultProcessingTime", 600, 20, 24000); + } + + public static void initGrapeVineConfig(ForgeConfigSpec.Builder server) { + grape_vine_min_fruit = server + .comment("Set to the minimum amount of fruit dropped by grape vines.") + .defineInRange("grape_vine.min_fruit_yield", 1, 1, 100); + grape_vine_max_fruit = server + .comment("Set to the maximum amount of fruit dropped by grape vines.") + .defineInRange("grape_vine.max_fruit_yield", 4, 1, 100); + } + + public static void initHopsCropConfig(ForgeConfigSpec.Builder server) { + hops_min_fruit = server + .comment("Set to the minimum amount of hops dropped by Hope crops.") + .defineInRange("hops_crop.min_fruit_yield", 1, 1, 100); + hops_max_fruit = server + .comment("Set to the maximum amount of hops dropped by Hope crops.") + .defineInRange("hops_crop.max_fruit_yield", 3, 1, 100); + } + + public static int getBrewKettleLitLightLevel() { + return brew_kettle_lit_light_level.get(); + } + + public static int getDefaultProcessingTime() { + return default_brewing_ticks.get(); + } + + public static int getGrapeVineMinFruitYield() { + return grape_vine_min_fruit.get(); + } + + public static int getGrapeVineMaxFruitYield() { + return grape_vine_max_fruit.get(); + } + + public static int getHopsCropMinFruitYield() { + return hops_min_fruit.get(); + } + + public static int getHopsCropMaxFruitYield() { + return hops_max_fruit.get(); + } +} diff --git a/src/main/java/growthcraft/cellar/item/CellarPotionItem.java b/src/main/java/growthcraft/cellar/item/CellarPotionItem.java new file mode 100644 index 0000000..7da32fc --- /dev/null +++ b/src/main/java/growthcraft/cellar/item/CellarPotionItem.java @@ -0,0 +1,114 @@ +package growthcraft.cellar.item; + +import java.awt.Color; +import java.util.List; + +import javax.annotation.Nullable; + +import org.jetbrains.annotations.NotNull; + +import growthcraft.lib.item.GrowthcraftItem; +import net.minecraft.advancements.CriteriaTriggers; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.ListTag; +import net.minecraft.network.chat.Component; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.stats.Stats; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResultHolder; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.ItemUtils; +import net.minecraft.world.item.Items; +import net.minecraft.world.item.TooltipFlag; +import net.minecraft.world.item.UseAnim; +import net.minecraft.world.item.alchemy.PotionUtils; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.gameevent.GameEvent; + +public class CellarPotionItem extends GrowthcraftItem { + + private static final int DRINK_DURATION = 32; + + public CellarPotionItem() { + super(16); + } + + // TODO[8]: Review custom potions for 1.19 + @Override + public @NotNull ItemStack finishUsingItem(ItemStack stack, Level level, LivingEntity livingEntity) { + Player player = livingEntity instanceof Player ? (Player) livingEntity : null; + if(player instanceof ServerPlayer) { + CriteriaTriggers.CONSUME_ITEM.trigger((ServerPlayer) player, stack); + } + + if(!level.isClientSide) { + CompoundTag compoundTag = stack.getTag(); + if(compoundTag != null && compoundTag.contains("CustomPotionEffects", 9)) { + ListTag customPotionEffects = compoundTag.getList("CustomPotionEffects", 10); + + for(int i = 0; i < customPotionEffects.size(); i++) { + CompoundTag tag = customPotionEffects.getCompound(i); + MobEffectInstance effect = MobEffectInstance.load(tag); + player.addEffect(effect); + } + } + } + + if(player != null) { + player.awardStat(Stats.ITEM_USED.get(this)); + if(!player.getAbilities().instabuild) { + stack.shrink(1); + } + } + + if(player == null || !player.getAbilities().instabuild) { + if(stack.isEmpty()) { + return new ItemStack(Items.GLASS_BOTTLE); + } + if(player != null) { + player.getInventory().add(new ItemStack(Items.GLASS_BOTTLE)); + } + } + + livingEntity.gameEvent(GameEvent.DRINKING_FINISH); + return stack; + } + + @Override + public int getUseDuration(ItemStack stack) { + return 32; + } + + @Override + public UseAnim getUseAnimation(ItemStack stack) { + return UseAnim.DRINK; + } + + @Override + public InteractionResultHolder use(Level level, Player player, InteractionHand hand) { + return ItemUtils.startUsingInstantly(level, player, hand); + } + + @Override + public @NotNull String getDescriptionId(ItemStack stack) { + return PotionUtils.getPotion(stack).getName(this.getDescriptionId() + ".effect."); + } + + @Override + public void appendHoverText(ItemStack stack, @Nullable Level level, List tooltip, TooltipFlag tooltipFlag) { + PotionUtils.addPotionTooltip(stack, tooltip, 1.0F); + } + + @Override + public boolean isFoil(ItemStack stack) { + return super.isFoil(stack) || !PotionUtils.getMobEffects(stack).isEmpty(); + } + + @Override + public int getColor(int layer) { + return layer == 0 ? new Color(0xCFA26F).getRGB() : 0xFFFFFF; + } +} diff --git a/src/main/java/growthcraft/cellar/item/GrapeSeedsItem.java b/src/main/java/growthcraft/cellar/item/GrapeSeedsItem.java new file mode 100644 index 0000000..ce88591 --- /dev/null +++ b/src/main/java/growthcraft/cellar/item/GrapeSeedsItem.java @@ -0,0 +1,58 @@ +package growthcraft.cellar.item; + +import growthcraft.cellar.block.GrapeVineCropBlock; +import growthcraft.core.block.RopeBlock; +import growthcraft.lib.item.GrowthcraftItem; +import growthcraft.lib.utils.BlockStateUtils; +import net.minecraft.core.BlockPos; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.context.UseOnContext; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.FarmBlock; +import net.minecraft.world.level.block.state.BlockState; + +import static growthcraft.lib.block.GrowthcraftCropsRopeBlock.*; + +public class GrapeSeedsItem extends GrowthcraftItem { + + private GrapeVineCropBlock grapeVineCropBlock; + + public GrapeSeedsItem(Block grapeVineCropBlock, Block grapeVineLeavesCropBlock, Block grapeVineFruitBlock) { + super(); + this.grapeVineCropBlock = (GrapeVineCropBlock) grapeVineCropBlock; + } + + @Override + public InteractionResult onItemUseFirst(ItemStack stack, UseOnContext context) { + Level level = context.getLevel(); + BlockPos blockPos = context.getClickedPos(); + Block block = level.getBlockState(blockPos).getBlock(); + + if (block instanceof FarmBlock && level.getBlockState(blockPos.above(2)).getBlock() instanceof RopeBlock) { + BlockState newBlockState = this.grapeVineCropBlock.defaultBlockState(); + newBlockState.setValue(NORTH, BlockStateUtils.isRopeBlock(level.getBlockState(blockPos.north().above()))); + newBlockState.setValue(EAST, BlockStateUtils.isRopeBlock(level.getBlockState(blockPos.east().above()))); + newBlockState.setValue(SOUTH, BlockStateUtils.isRopeBlock(level.getBlockState(blockPos.south().above()))); + newBlockState.setValue(WEST, BlockStateUtils.isRopeBlock(level.getBlockState(blockPos.west().above()))); + newBlockState.setValue(UP, true); + newBlockState.setValue(DOWN, false); + + level.setBlock( + blockPos.above(), + newBlockState, + Block.UPDATE_ALL + ); + context.getItemInHand().shrink(1); + return InteractionResult.SUCCESS; + } + + return InteractionResult.PASS; + } + + public GrapeVineCropBlock getGrapeVineCropBlock() { + return this.grapeVineCropBlock; + } + +} diff --git a/src/main/java/growthcraft/cellar/item/HopsSeedsItem.java b/src/main/java/growthcraft/cellar/item/HopsSeedsItem.java new file mode 100644 index 0000000..ddabe4f --- /dev/null +++ b/src/main/java/growthcraft/cellar/item/HopsSeedsItem.java @@ -0,0 +1,32 @@ +package growthcraft.cellar.item; + +import growthcraft.cellar.init.GrowthcraftCellarBlocks; +import growthcraft.lib.item.GrowthcraftItem; +import net.minecraft.core.BlockPos; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.item.context.UseOnContext; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.FarmBlock; + +public class HopsSeedsItem extends GrowthcraftItem { + + public HopsSeedsItem() { + super(); + } + + @Override + public InteractionResult useOn(UseOnContext context) { + Level level = context.getLevel(); + BlockPos blockPos = context.getClickedPos(); + Block block = level.getBlockState(blockPos).getBlock(); + + if (block instanceof FarmBlock) { + level.setBlock(blockPos.above(), GrowthcraftCellarBlocks.HOPS_VINE.get().defaultBlockState(), Block.UPDATE_ALL); + context.getItemInHand().shrink(1); + return InteractionResult.SUCCESS; + } + + return InteractionResult.PASS; + } +} diff --git a/src/main/java/growthcraft/cellar/lib/networking/GrowthcraftCellarMessages.java b/src/main/java/growthcraft/cellar/lib/networking/GrowthcraftCellarMessages.java new file mode 100644 index 0000000..ed32e83 --- /dev/null +++ b/src/main/java/growthcraft/cellar/lib/networking/GrowthcraftCellarMessages.java @@ -0,0 +1,71 @@ +package growthcraft.cellar.lib.networking; + +import growthcraft.cellar.lib.networking.packet.BrewKettleFluidTankPacket; +import growthcraft.cellar.lib.networking.packet.CultureJarFluidSyncPacket; +import growthcraft.cellar.lib.networking.packet.FermentationBarrelFluidTankPacket; +import growthcraft.cellar.lib.networking.packet.FruitPressFluidTankPacket; +import growthcraft.cellar.shared.Reference; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.level.ServerPlayer; +import net.minecraftforge.network.NetworkDirection; +import net.minecraftforge.network.NetworkRegistry; +import net.minecraftforge.network.PacketDistributor; +import net.minecraftforge.network.simple.SimpleChannel; + +public class GrowthcraftCellarMessages { + private static SimpleChannel INSTANCE; + + private static int packetID = 0; + + private static int id() { + return packetID++; + } + + public static void register() { + SimpleChannel net = NetworkRegistry.ChannelBuilder + .named(new ResourceLocation(Reference.MODID, "messages")) + .networkProtocolVersion( () -> "1.0" ) + .clientAcceptedVersions( s -> true ) + .serverAcceptedVersions( s -> true ) + .simpleChannel(); + + INSTANCE = net; + + net.messageBuilder(BrewKettleFluidTankPacket.class, id(), NetworkDirection.PLAY_TO_CLIENT) + .decoder(BrewKettleFluidTankPacket::new) + .encoder(BrewKettleFluidTankPacket::toBytes) + .consumer(BrewKettleFluidTankPacket::handle) + .add(); + + net.messageBuilder(CultureJarFluidSyncPacket.class, id(), NetworkDirection.PLAY_TO_CLIENT) + .decoder(CultureJarFluidSyncPacket::new) + .encoder(CultureJarFluidSyncPacket::toBytes) + .consumer(CultureJarFluidSyncPacket::handle) + .add(); + + net.messageBuilder(FermentationBarrelFluidTankPacket.class, id(), NetworkDirection.PLAY_TO_CLIENT) + .decoder(FermentationBarrelFluidTankPacket::new) + .encoder(FermentationBarrelFluidTankPacket::toBytes) + .consumer(FermentationBarrelFluidTankPacket::handle) + .add(); + + net.messageBuilder(FruitPressFluidTankPacket.class, id(), NetworkDirection.PLAY_TO_CLIENT) + .decoder(FruitPressFluidTankPacket::new) + .encoder(FruitPressFluidTankPacket::toBytes) + .consumer(FruitPressFluidTankPacket::handle) + .add(); + + } + + public static void sendToClients(MSG message) { + INSTANCE.send(PacketDistributor.ALL.noArg(), message); + } + + public static void sendToServer(MSG message) { + INSTANCE.sendToServer(message); + } + + public static void sendToPlayer(MSG message, ServerPlayer player) { + INSTANCE.send(PacketDistributor.PLAYER.with( () -> player), message); + } +} diff --git a/src/main/java/growthcraft/cellar/lib/networking/packet/BrewKettleFluidTankPacket.java b/src/main/java/growthcraft/cellar/lib/networking/packet/BrewKettleFluidTankPacket.java new file mode 100644 index 0000000..d702950 --- /dev/null +++ b/src/main/java/growthcraft/cellar/lib/networking/packet/BrewKettleFluidTankPacket.java @@ -0,0 +1,55 @@ +package growthcraft.cellar.lib.networking.packet; + +import growthcraft.cellar.block.entity.BrewKettleBlockEntity; +import growthcraft.cellar.screen.container.BrewKettleMenu; +import net.minecraft.client.Minecraft; +import net.minecraft.client.player.LocalPlayer; +import net.minecraft.core.BlockPos; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.network.NetworkEvent; + +import java.util.function.Supplier; + +public class BrewKettleFluidTankPacket { + private FluidStack fluidStack; + private int tankID; + + private final BlockPos blockPos; + + public BrewKettleFluidTankPacket(int tankID, FluidStack fluidStack, BlockPos blockPos) { + this.fluidStack = fluidStack; + this.tankID = tankID; + this.blockPos = blockPos; + } + + public BrewKettleFluidTankPacket(FriendlyByteBuf byteBuf) { + this.fluidStack = byteBuf.readFluidStack(); + this.blockPos = byteBuf.readBlockPos(); + } + + public void toBytes(FriendlyByteBuf byteBuf) { + byteBuf.writeFluidStack(this.fluidStack); + byteBuf.writeBlockPos(this.blockPos); + } + + public boolean handle(Supplier supplier) { + NetworkEvent.Context context = supplier.get(); + context.enqueueWork( () -> { + if(Minecraft.getInstance().level.getBlockEntity(this.blockPos) instanceof BrewKettleBlockEntity blockEntity) { + blockEntity.setFluidStackInTank(this.tankID, this.fluidStack); + + LocalPlayer player = Minecraft.getInstance().player; + + if(player.containerMenu instanceof BrewKettleMenu) { + BrewKettleMenu menu = (BrewKettleMenu) player.containerMenu; + if(menu.getBlockEntity().getBlockPos().equals(this.blockPos)) { + menu.setFluid(this.tankID, this.fluidStack); + } + } + } + } + ); + return true; + } +} diff --git a/src/main/java/growthcraft/cellar/lib/networking/packet/CultureJarFluidSyncPacket.java b/src/main/java/growthcraft/cellar/lib/networking/packet/CultureJarFluidSyncPacket.java new file mode 100644 index 0000000..e61967c --- /dev/null +++ b/src/main/java/growthcraft/cellar/lib/networking/packet/CultureJarFluidSyncPacket.java @@ -0,0 +1,39 @@ +package growthcraft.cellar.lib.networking.packet; + +import growthcraft.cellar.block.entity.CultureJarBlockEntity; +import growthcraft.cellar.screen.container.CultureJarMenu; +import growthcraft.lib.networking.packet.FluidTankSyncPacket; +import net.minecraft.client.Minecraft; +import net.minecraft.core.BlockPos; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.network.NetworkEvent; + +import java.util.function.Supplier; + +public class CultureJarFluidSyncPacket extends FluidTankSyncPacket { + + public CultureJarFluidSyncPacket(int tankID, FluidStack fluidStack, BlockPos blockPos) { + super(tankID, fluidStack, blockPos); + } + + public CultureJarFluidSyncPacket(FriendlyByteBuf byteBuf) { + super(byteBuf); + } + + public boolean handle(Supplier supplier) { + NetworkEvent.Context context = supplier.get(); + context.enqueueWork( () -> { + if(Minecraft.getInstance().level.getBlockEntity(this.blockPos) instanceof CultureJarBlockEntity blockEntity) { + blockEntity.setFluidStackInTank(this.tankID, this.fluidStack); + + if(Minecraft.getInstance().player.containerMenu instanceof CultureJarMenu menu && + menu.getBlockEntity().getBlockPos().equals(this.blockPos)) { + menu.setFluid(this.tankID, this.fluidStack); + } + } + } + ); + return true; + } +} diff --git a/src/main/java/growthcraft/cellar/lib/networking/packet/FermentationBarrelFluidTankPacket.java b/src/main/java/growthcraft/cellar/lib/networking/packet/FermentationBarrelFluidTankPacket.java new file mode 100644 index 0000000..65117d1 --- /dev/null +++ b/src/main/java/growthcraft/cellar/lib/networking/packet/FermentationBarrelFluidTankPacket.java @@ -0,0 +1,39 @@ +package growthcraft.cellar.lib.networking.packet; + +import growthcraft.cellar.block.entity.FermentationBarrelBlockEntity; +import growthcraft.cellar.screen.container.FermentationBarrelMenu; +import growthcraft.lib.networking.packet.FluidTankSyncPacket; +import net.minecraft.client.Minecraft; +import net.minecraft.core.BlockPos; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.network.NetworkEvent; + +import java.util.function.Supplier; + +public class FermentationBarrelFluidTankPacket extends FluidTankSyncPacket { + + public FermentationBarrelFluidTankPacket(int tankID, FluidStack fluidStack, BlockPos blockPos) { + super(tankID, fluidStack, blockPos); + } + + public FermentationBarrelFluidTankPacket(FriendlyByteBuf byteBuf) { + super(byteBuf); + } + + public boolean handle(Supplier supplier) { + NetworkEvent.Context context = supplier.get(); + context.enqueueWork(() -> { + if (Minecraft.getInstance().level.getBlockEntity(this.blockPos) instanceof FermentationBarrelBlockEntity blockEntity) { + blockEntity.setFluidStackInTank(this.tankID, this.fluidStack); + + if (Minecraft.getInstance().player.containerMenu instanceof FermentationBarrelMenu menu && + menu.getBlockEntity().getBlockPos().equals(this.blockPos)) { + menu.setFluid(this.tankID, this.fluidStack); + } + } + } + ); + return true; + } +} diff --git a/src/main/java/growthcraft/cellar/lib/networking/packet/FruitPressFluidTankPacket.java b/src/main/java/growthcraft/cellar/lib/networking/packet/FruitPressFluidTankPacket.java new file mode 100644 index 0000000..3341315 --- /dev/null +++ b/src/main/java/growthcraft/cellar/lib/networking/packet/FruitPressFluidTankPacket.java @@ -0,0 +1,39 @@ +package growthcraft.cellar.lib.networking.packet; + +import growthcraft.cellar.block.entity.FruitPressBlockEntity; +import growthcraft.cellar.screen.container.FruitPressMenu; +import growthcraft.lib.networking.packet.FluidTankSyncPacket; +import net.minecraft.client.Minecraft; +import net.minecraft.core.BlockPos; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.network.NetworkEvent; + +import java.util.function.Supplier; + +public class FruitPressFluidTankPacket extends FluidTankSyncPacket { + + public FruitPressFluidTankPacket(int tankID, FluidStack fluidStack, BlockPos blockPos) { + super(tankID, fluidStack, blockPos); + } + + public FruitPressFluidTankPacket(FriendlyByteBuf byteBuf) { + super(byteBuf); + } + + public boolean handle(Supplier supplier) { + NetworkEvent.Context context = supplier.get(); + context.enqueueWork(() -> { + if (Minecraft.getInstance().level.getBlockEntity(this.blockPos) instanceof FruitPressBlockEntity blockEntity) { + blockEntity.setFluidStackInTank(this.tankID, this.fluidStack); + + if (Minecraft.getInstance().player.containerMenu instanceof FruitPressMenu menu && + menu.getBlockEntity().getBlockPos().equals(this.blockPos)) { + menu.setFluid(this.tankID, this.fluidStack); + } + } + } + ); + return true; + } +} diff --git a/src/main/java/growthcraft/cellar/recipe/BrewKettleRecipe.java b/src/main/java/growthcraft/cellar/recipe/BrewKettleRecipe.java new file mode 100644 index 0000000..b4f142a --- /dev/null +++ b/src/main/java/growthcraft/cellar/recipe/BrewKettleRecipe.java @@ -0,0 +1,221 @@ +package growthcraft.cellar.recipe; + +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import com.google.gson.JsonObject; + +import growthcraft.cellar.GrowthcraftCellar; +import growthcraft.cellar.shared.Reference; +import growthcraft.lib.utils.CraftingUtils; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.GsonHelper; +import net.minecraft.world.SimpleContainer; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.crafting.Recipe; +import net.minecraft.world.item.crafting.RecipeSerializer; +import net.minecraft.world.item.crafting.RecipeType; +import net.minecraft.world.level.Level; +import net.minecraftforge.common.crafting.CraftingHelper; +import net.minecraftforge.fluids.FluidStack; + +public class BrewKettleRecipe implements Recipe { + + private final ResourceLocation recipeId; + private final FluidStack inputFluidStack; + private final ItemStack inputItemStack; + private final FluidStack outputFluidStack; + private final ItemStack byProduct; + private final boolean requiresLid; + private final boolean requiresHeat; + private final int byProductChance; + private final int processingTime; + + + public BrewKettleRecipe(ResourceLocation recipeId, FluidStack inputFluidStack, ItemStack inputItem, FluidStack outputFluidStack, ItemStack byProduct, int byProductChance, int processingTime, boolean requiresHeat, boolean requiresLid) { + this.recipeId = recipeId; + this.inputFluidStack = inputFluidStack; + this.inputItemStack = inputItem; + this.outputFluidStack = outputFluidStack; + this.byProduct = byProduct; + this.processingTime = processingTime; + this.requiresLid = requiresLid; + this.requiresHeat = requiresHeat; + this.byProductChance = byProductChance; + } + + @Override + public boolean matches(SimpleContainer container, Level level) { + return false; + } + + public boolean matches(ItemStack itemStack, FluidStack fluidStack, boolean needsLid, boolean needsHeat) { + + boolean inputItemTypeMatches = this.inputItemStack.getItem() == itemStack.getItem(); + boolean inputItemCountLessThan = this.inputItemStack.getCount() <= itemStack.getCount(); + boolean inputFluidTypeMatches = this.inputFluidStack.getFluid() == fluidStack.getFluid(); + boolean inputFluidAmountLessThan = this.inputFluidStack.getAmount() <= fluidStack.getAmount(); + boolean hasRequiredLid = this.requiresLid == needsLid && this.requiresHeat == needsHeat; + + return inputItemTypeMatches + && inputItemCountLessThan + && inputFluidTypeMatches + && inputFluidAmountLessThan + && hasRequiredLid; + } + + @Override + public ItemStack assemble(SimpleContainer container) { + return this.outputFluidStack.getFluid().getBucket().getDefaultInstance(); + } + + @Override + public boolean canCraftInDimensions(int width, int height) { + return false; + } + + @Override + public ItemStack getResultItem() { + return this.outputFluidStack.getFluid().getBucket().getDefaultInstance(); + } + + @Override + public ResourceLocation getId() { + return this.recipeId; + } + + public FluidStack getInputFluidStack() { + return inputFluidStack; + } + + public FluidStack getOutputFluidStack() { + return outputFluidStack; + } + + public ItemStack getInputItemStack() { + return inputItemStack; + } + + public ItemStack getByProduct() { + return byProduct.copy(); + } + + public int getByProductChance() { + return byProductChance; + } + + public int getProcessingTime() { + return this.processingTime; + } + + public boolean isLidRequired() { + return requiresLid; + } + + public boolean isHeatRequired() { + return this.requiresHeat; + } + + @Override + public RecipeSerializer getSerializer() { + return Serializer.INSTANCE; + } + + @Override + public RecipeType getType() { + return Type.INSTANCE; + } + + public static class Type implements RecipeType { + private Type() { /* Prevent default constructor */ } + + public static final BrewKettleRecipe.Type INSTANCE = new BrewKettleRecipe.Type(); + public static final String ID = Reference.UnlocalizedName.BREW_KETTLE_RECIPE; + } + + + public static class Serializer implements RecipeSerializer { + + public static final BrewKettleRecipe.Serializer INSTANCE = new BrewKettleRecipe.Serializer(); + public static final ResourceLocation ID = new ResourceLocation( + Reference.MODID, + Reference.UnlocalizedName.BREW_KETTLE_RECIPE); + private ResourceLocation name; + + @Override + public @NotNull BrewKettleRecipe fromJson(ResourceLocation recipeId, JsonObject json) { + + ItemStack inputItemStack = CraftingHelper.getItemStack(GsonHelper.getAsJsonObject(json, "input_item"), false); + ItemStack byProductItemStack = CraftingHelper.getItemStack(GsonHelper.getAsJsonObject(json, "by_product"), false); + + FluidStack inputFluid = CraftingUtils.getFluidStack(GsonHelper.getAsJsonObject(json, "input_fluid")); + FluidStack outputFluid = CraftingUtils.getFluidStack(GsonHelper.getAsJsonObject(json, "output_fluid")); + + boolean requiresHeat = GsonHelper.getAsBoolean(json, "requires_heat"); + boolean requiresLid = GsonHelper.getAsBoolean(json, "requires_lid"); + + int processingTime = GsonHelper.getAsInt(json, "processing_time", 600); + int byProductChance = GsonHelper.getAsInt(json, "by_product_chance", 10); + + return new BrewKettleRecipe(recipeId, inputFluid, inputItemStack, + outputFluid, byProductItemStack, byProductChance, processingTime, + requiresHeat, requiresLid); + } + + @Override + public @Nullable BrewKettleRecipe fromNetwork(ResourceLocation recipeId, FriendlyByteBuf buffer) { + try { + ItemStack inputItemStack = buffer.readItem(); + ItemStack byProductItemStack = buffer.readItem(); + FluidStack inputFluidStack = buffer.readFluidStack(); + FluidStack outputFluidStack = buffer.readFluidStack(); + boolean requiresHeat = buffer.readBoolean(); + boolean requiresLid = buffer.readBoolean(); + int processingTime = buffer.readVarInt(); + int byProductChance = buffer.readVarInt(); + + return new BrewKettleRecipe(recipeId, inputFluidStack, inputItemStack, + outputFluidStack, byProductItemStack, byProductChance, processingTime, + requiresHeat, requiresLid); + } catch (Exception ex) { + String message = String.format("Unable to read recipe (%s) from network buffer.", recipeId); + GrowthcraftCellar.LOGGER.error(message); + throw ex; + } + } + + @Override + public void toNetwork(FriendlyByteBuf buffer, BrewKettleRecipe recipe) { + buffer.writeItemStack(recipe.getInputItemStack(), false); + buffer.writeItemStack(recipe.getByProduct(), false); + buffer.writeFluidStack(recipe.getInputFluidStack()); + buffer.writeFluidStack(recipe.getOutputFluidStack()); + buffer.writeBoolean(recipe.isHeatRequired()); + buffer.writeBoolean(recipe.isLidRequired()); + buffer.writeVarInt(recipe.getProcessingTime()); + buffer.writeVarInt(recipe.getByProductChance()); + } + + @Override + public RecipeSerializer setRegistryName(ResourceLocation name) { + this.name = name; + return this; + } + + @Override + public ResourceLocation getRegistryName() { + return name; + } + + @Override + public Class> getRegistryType() { + // TODO Auto-generated method stub + return Serializer.>castClass(RecipeSerializer.class); + } + + private static Class castClass(Class cls) { + return (Class) cls; + } + } +} diff --git a/src/main/java/growthcraft/cellar/recipe/CultureJarRecipe.java b/src/main/java/growthcraft/cellar/recipe/CultureJarRecipe.java new file mode 100644 index 0000000..425a47a --- /dev/null +++ b/src/main/java/growthcraft/cellar/recipe/CultureJarRecipe.java @@ -0,0 +1,168 @@ +package growthcraft.cellar.recipe; + +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import com.google.gson.JsonObject; + +import growthcraft.cellar.GrowthcraftCellar; +import growthcraft.cellar.shared.Reference; +import growthcraft.lib.utils.CraftingUtils; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.GsonHelper; +import net.minecraft.world.SimpleContainer; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.crafting.Recipe; +import net.minecraft.world.item.crafting.RecipeSerializer; +import net.minecraft.world.item.crafting.RecipeType; +import net.minecraft.world.level.Level; +import net.minecraftforge.common.crafting.CraftingHelper; +import net.minecraftforge.fluids.FluidStack; + +public class CultureJarRecipe implements Recipe { + + private final ResourceLocation recipeId; + private final FluidStack inputFluidStack; + private final ItemStack inputItem; + private final int processingTime; + private final boolean requiresHeatSource; + + public CultureJarRecipe(ResourceLocation recipeId, FluidStack inputFluidStack, ItemStack inputItem, int processingTime, boolean requiresHeatSource) { + this.recipeId = recipeId; + this.inputFluidStack = inputFluidStack; + this.inputItem = inputItem; + this.processingTime = processingTime; + this.requiresHeatSource = requiresHeatSource; + } + + @Override + public boolean matches(SimpleContainer simpleContainer, Level level) { + return false; + } + + public boolean matches(FluidStack fluidStack, ItemStack itemStack) { + return this.inputFluidStack.getFluid() == fluidStack.getFluid() + && this.inputItem.getItem() == itemStack.getItem(); + } + + @Override + public ItemStack assemble(SimpleContainer simpleContainer) { + return this.inputItem; + } + + @Override + public boolean canCraftInDimensions(int width, int height) { + return true; + } + + @Override + public ItemStack getResultItem() { + return this.inputItem; + } + + + @Override + public @NotNull ResourceLocation getId() { + return this.recipeId; + } + + public FluidStack getInputFluidStack() { + return this.inputFluidStack; + } + + public ItemStack getInputItemStack() { + return this.inputItem; + } + + public boolean isHeatSourceRequired() { + return this.requiresHeatSource; + } + + public int getRecipeProcessingTime() { + return this.processingTime; + } + + @Override + public @NotNull RecipeSerializer getSerializer() { + return Serializer.INSTANCE; + } + + public @NotNull RecipeType getType() { + return Type.INSTANCE; + } + + public static class Type implements RecipeType { + private Type() { /* Prevent default constructor */ } + + public static final CultureJarRecipe.Type INSTANCE = new CultureJarRecipe.Type(); + public static final String ID = Reference.UnlocalizedName.CULTURE_JAR_RECIPE; + } + + public static class Serializer implements RecipeSerializer { + + public static final CultureJarRecipe.Serializer INSTANCE = new CultureJarRecipe.Serializer(); + public static final ResourceLocation ID = new ResourceLocation( + Reference.MODID, + Reference.UnlocalizedName.CULTURE_JAR_RECIPE); + private ResourceLocation name; + + @Override + public @NotNull CultureJarRecipe fromJson(ResourceLocation recipeId, JsonObject json) { + FluidStack inputFluid = CraftingUtils.getFluidStack(GsonHelper.getAsJsonObject(json, "input_fluid")); + + ItemStack inputItemStack = CraftingHelper.getItemStack(GsonHelper.getAsJsonObject(json, "input_item"), false); + + int processingTime = GsonHelper.getAsInt(json, "processing_time", 1200); + boolean needsHeat = GsonHelper.getAsBoolean(json, "requires_heat_source"); + + return new CultureJarRecipe(recipeId, inputFluid, inputItemStack, processingTime, needsHeat); + } + + @Override + public @Nullable CultureJarRecipe fromNetwork(ResourceLocation recipeId, FriendlyByteBuf buffer) { + try { + ItemStack item = buffer.readItem(); + FluidStack fluid = buffer.readFluidStack(); + int processing = buffer.readVarInt(); + boolean heat = buffer.readBoolean(); + + return new CultureJarRecipe(recipeId, fluid, item, processing, heat); + } catch (Exception ex) { + String message = String.format("Unable to read recipe (%s) from network buffer.", recipeId); + GrowthcraftCellar.LOGGER.error(message); + throw ex; + } + } + + @Override + public void toNetwork(FriendlyByteBuf buffer, CultureJarRecipe recipe) { + buffer.writeItemStack(recipe.getInputItemStack(), false); + buffer.writeFluidStack(recipe.getInputFluidStack()); + buffer.writeVarInt(recipe.getRecipeProcessingTime()); + buffer.writeBoolean(recipe.isHeatSourceRequired()); + } + + @Override + public RecipeSerializer setRegistryName(ResourceLocation name) { + this.name = name; + return this; + } + + @Override + public ResourceLocation getRegistryName() { + return name; + } + + @Override + public Class> getRegistryType() { + // TODO Auto-generated method stub + return Serializer.>castClass(RecipeSerializer.class); + } + + private static Class castClass(Class cls) { + return (Class) cls; + } + + } +} diff --git a/src/main/java/growthcraft/cellar/recipe/CultureJarStarterRecipe.java b/src/main/java/growthcraft/cellar/recipe/CultureJarStarterRecipe.java new file mode 100644 index 0000000..fd0f09f --- /dev/null +++ b/src/main/java/growthcraft/cellar/recipe/CultureJarStarterRecipe.java @@ -0,0 +1,168 @@ +package growthcraft.cellar.recipe; + +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import com.google.gson.JsonObject; + +import growthcraft.cellar.GrowthcraftCellar; +import growthcraft.cellar.shared.Reference; +import growthcraft.lib.utils.CraftingUtils; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.GsonHelper; +import net.minecraft.world.SimpleContainer; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.crafting.Recipe; +import net.minecraft.world.item.crafting.RecipeSerializer; +import net.minecraft.world.item.crafting.RecipeType; +import net.minecraft.world.level.Level; +import net.minecraftforge.common.crafting.CraftingHelper; +import net.minecraftforge.fluids.FluidStack; + +public class CultureJarStarterRecipe implements Recipe { + + private final ResourceLocation recipeId; + private final FluidStack inputFluidStack; + private final ItemStack outputItem; + private final int processingTime; + private final boolean requiresHeatSource; + + public CultureJarStarterRecipe(ResourceLocation recipeId, FluidStack inputFluidStack, ItemStack outputItem, int processingTime, boolean requiresHeatSource) { + this.recipeId = recipeId; + this.inputFluidStack = inputFluidStack; + this.outputItem = outputItem; + this.processingTime = processingTime; + this.requiresHeatSource = requiresHeatSource; + } + + @Override + public boolean matches(SimpleContainer simpleContainer, Level level) { + return false; + } + + public boolean matches(FluidStack fluidStack, ItemStack itemStack) { + return this.inputFluidStack.getFluid() == fluidStack.getFluid() + && this.outputItem.getItem() == itemStack.getItem(); + } + + @Override + public ItemStack assemble(SimpleContainer simpleContainer) { + return this.outputItem; + } + + @Override + public boolean canCraftInDimensions(int width, int height) { + return true; + } + + @Override + public ItemStack getResultItem() { + return this.outputItem; + } + + + @Override + public @NotNull ResourceLocation getId() { + return this.recipeId; + } + + public FluidStack getInputFluidStack() { + return this.inputFluidStack; + } + + public ItemStack getInputItemStack() { + return this.outputItem; + } + + public boolean isHeatSourceRequired() { + return this.requiresHeatSource; + } + + public int getRecipeProcessingTime() { + return this.processingTime; + } + + @Override + public @NotNull RecipeSerializer getSerializer() { + return Serializer.INSTANCE; + } + + public @NotNull RecipeType getType() { + return Type.INSTANCE; + } + + public static class Type implements RecipeType { + private Type() { /* Prevent default constructor */ } + + public static final CultureJarStarterRecipe.Type INSTANCE = new CultureJarStarterRecipe.Type(); + public static final String ID = Reference.UnlocalizedName.CULTURE_JAR_STARTER_RECIPE; + } + + public static class Serializer implements RecipeSerializer { + + public static final CultureJarStarterRecipe.Serializer INSTANCE = new CultureJarStarterRecipe.Serializer(); + public static final ResourceLocation ID = new ResourceLocation( + Reference.MODID, + Reference.UnlocalizedName.CULTURE_JAR_STARTER_RECIPE); + private ResourceLocation name; + + @Override + public @NotNull CultureJarStarterRecipe fromJson(ResourceLocation recipeId, JsonObject json) { + FluidStack inputFluid = CraftingUtils.getFluidStack(GsonHelper.getAsJsonObject(json, "input_fluid")); + + ItemStack inputItemStack = CraftingHelper.getItemStack(GsonHelper.getAsJsonObject(json, "output_item"), false); + + int processingTime = GsonHelper.getAsInt(json, "processing_time", 1200); + boolean needsHeat = GsonHelper.getAsBoolean(json, "requires_heat_source"); + + return new CultureJarStarterRecipe(recipeId, inputFluid, inputItemStack, processingTime, needsHeat); + } + + @Override + public @Nullable CultureJarStarterRecipe fromNetwork(ResourceLocation recipeId, FriendlyByteBuf buffer) { + try { + ItemStack item = buffer.readItem(); + FluidStack fluid = buffer.readFluidStack(); + int processing = buffer.readVarInt(); + boolean heat = buffer.readBoolean(); + + return new CultureJarStarterRecipe(recipeId, fluid, item, processing, heat); + } catch (Exception ex) { + String message = String.format("Unable to read recipe (%s) from network buffer.", recipeId); + GrowthcraftCellar.LOGGER.error(message); + throw ex; + } + } + + @Override + public void toNetwork(FriendlyByteBuf buffer, CultureJarStarterRecipe recipe) { + buffer.writeItemStack(recipe.getInputItemStack(), false); + buffer.writeFluidStack(recipe.getInputFluidStack()); + buffer.writeVarInt(recipe.getRecipeProcessingTime()); + buffer.writeBoolean(recipe.isHeatSourceRequired()); + } + + @Override + public RecipeSerializer setRegistryName(ResourceLocation name) { + this.name = name; + return this; + } + + @Override + public ResourceLocation getRegistryName() { + return name; + } + + @Override + public Class> getRegistryType() { + // TODO Auto-generated method stub + return Serializer.>castClass(RecipeSerializer.class); + } + + private static Class castClass(Class cls) { + return (Class) cls; + } + + } +} diff --git a/src/main/java/growthcraft/cellar/recipe/FermentationBarrelRecipe.java b/src/main/java/growthcraft/cellar/recipe/FermentationBarrelRecipe.java new file mode 100644 index 0000000..e2d04c4 --- /dev/null +++ b/src/main/java/growthcraft/cellar/recipe/FermentationBarrelRecipe.java @@ -0,0 +1,277 @@ +package growthcraft.cellar.recipe; + +import java.awt.Color; + +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import com.google.gson.JsonArray; +import com.google.gson.JsonObject; + +import growthcraft.cellar.GrowthcraftCellar; +import growthcraft.cellar.shared.Reference; +import growthcraft.lib.utils.CraftingUtils; +import growthcraft.lib.utils.EffectUtils; +import net.minecraft.core.NonNullList; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.GsonHelper; +import net.minecraft.world.SimpleContainer; +import net.minecraft.world.effect.MobEffect; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.crafting.Ingredient; +import net.minecraft.world.item.crafting.Recipe; +import net.minecraft.world.item.crafting.RecipeSerializer; +import net.minecraft.world.item.crafting.RecipeType; +import net.minecraft.world.level.Level; +import net.minecraftforge.common.crafting.CraftingHelper; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.registries.ForgeRegistries; + +public class FermentationBarrelRecipe implements Recipe { + + private final ResourceLocation recipeId; + private final FluidStack inputFluidStack; + private final FluidStack outputFluidStack; + private final ItemStack inputItemStack; + private final int processingTime; + private final Color color; + private final ItemStack potionItemStack; + + public FermentationBarrelRecipe(ResourceLocation recipeId, FluidStack inputFluidStack, ItemStack inputItemStack, + FluidStack outputFluidStack, int processingTime, ItemStack bottle, Color color) { + this.recipeId = recipeId; + this.inputFluidStack = inputFluidStack; + this.outputFluidStack = outputFluidStack; + this.inputItemStack = inputItemStack; + this.processingTime = processingTime; + this.potionItemStack = bottle; + this.color = color; + + this.potionItemStack.setHoverName( + this.potionItemStack.getDisplayName().copy() + .append(" ") + .append(this.outputFluidStack.getTranslationKey()) + ); + + } + + @Override + public boolean matches(SimpleContainer simpleContainer, Level level) { + return false; + } + + /** + * Determine if an ItemStack and a FluidStack matches this recipe. Automatically checks if + * the ingredients are a multiplier of the matching ingredients. + * + * @param matchInputItemStack + * @param matchInputFluidStack + * @return + */ + public boolean matches(ItemStack matchInputItemStack, FluidStack matchInputFluidStack) { + + boolean inputFluidMatches = this.inputFluidStack.getFluid() == matchInputFluidStack.getFluid() + && this.inputFluidStack.getAmount() <= matchInputFluidStack.getAmount() + && this.getOutputMultiplier(matchInputFluidStack) > 0; + + boolean inputItemMatches = this.inputItemStack.getItem() == matchInputItemStack.getItem() + && this.inputItemStack.getCount() <= matchInputItemStack.getCount() * this.getOutputMultiplier(matchInputFluidStack); + + return inputItemMatches && inputFluidMatches; + } + + /** + * Determines the output multiplier based on the amount of fluid in the tank. + * + * @param fluidStackInTank + * @return + */ + public int getOutputMultiplier(FluidStack fluidStackInTank) { + return fluidStackInTank.getAmount() % this.inputFluidStack.getAmount() == 0 + ? fluidStackInTank.getAmount() / this.inputFluidStack.getAmount() + : 0; + } + + /** + * Determine if a FluidStack matches this recipe output. + * + * @param fluidStack + * @return + */ + public boolean matches(FluidStack fluidStack) { + return this.outputFluidStack.getFluid() == fluidStack.getFluid(); + } + + /** + * Determine id an ItemStack and two FluidStacks match this recipe. + * + * @deprecated Method not specific enough, use {@link #matches(ItemStack, FluidStack)} instead. + * + * @param inputItemStack + * @param inputFluidStack + * @param outputFluidStack + * @return + */ + @Deprecated(since = "8.1.0", forRemoval = true) + public boolean matches(ItemStack inputItemStack, FluidStack inputFluidStack, FluidStack outputFluidStack) { + boolean inputMatches = matches(inputItemStack, inputFluidStack); + boolean outputMatches = this.outputFluidStack.getFluid() == outputFluidStack.getFluid(); + return inputMatches && outputMatches; + } + + @Override + public ItemStack assemble(SimpleContainer simpleContainer) { + return this.inputItemStack; + } + + @Override + public boolean canCraftInDimensions(int width, int height) { + return true; + } + + @Override + public ItemStack getResultItem() { + return this.outputFluidStack.getFluid().getBucket().getDefaultInstance(); + } + + public FluidStack getIngredientFluidStack() { + return this.inputFluidStack; + } + + public ItemStack getIngredientItemStack() { + return this.inputItemStack; + } + + public FluidStack getResultingFluid() { + return this.outputFluidStack; + } + + public int getProcessingTime() { + return this.processingTime; + } + + public boolean hasEffects() { + return this.potionItemStack.getItem().isFoil(this.potionItemStack); + } + + public Color getColor() { + return this.color; + } + + @Override + public NonNullList getIngredients() { + return NonNullList.of(Ingredient.EMPTY, Ingredient.of(this.inputItemStack)); + } + + public ItemStack getBottleItemStack() { + return this.potionItemStack; + } + + @Override + public ResourceLocation getId() { + return this.recipeId; + } + + @Override + public RecipeSerializer getSerializer() { + return Serializer.INSTANCE; + } + + @Override + public RecipeType getType() { + return Type.INSTANCE; + } + + public static class Type implements RecipeType { + private Type() { /* Prevent default constructor */ } + + public static final FermentationBarrelRecipe.Type INSTANCE = new FermentationBarrelRecipe.Type(); + public static final String ID = Reference.UnlocalizedName.FERMENT_BARREL_RECIPE; + } + + public static class Serializer implements RecipeSerializer { + + public static final FermentationBarrelRecipe.Serializer INSTANCE = new FermentationBarrelRecipe.Serializer(); + public static final ResourceLocation ID = new ResourceLocation( + Reference.MODID, + Reference.UnlocalizedName.FERMENT_BARREL_RECIPE); + private ResourceLocation name; + + @Override + public @NotNull FermentationBarrelRecipe fromJson(ResourceLocation recipeId, JsonObject json) { + FluidStack inputFluid = CraftingUtils.getFluidStack(GsonHelper.getAsJsonObject(json, "ingredient_fluid")); + ItemStack inputItemStack = CraftingHelper.getItemStack(GsonHelper.getAsJsonObject(json, "ingredient_item"), false); + + FluidStack outputFluid = CraftingUtils.getFluidStack(GsonHelper.getAsJsonObject(json, "result")); + ItemStack bottleItemStack = CraftingHelper.getItemStack(GsonHelper.getAsJsonObject(json, "bottle"), false); + + int processingTime = GsonHelper.getAsInt(json, "processing_time", 1200); + + Color color = new Color(Integer.decode(GsonHelper.getAsString(json, "color"))); + + JsonArray recipeEffects = GsonHelper.getAsJsonArray(json, "effects"); + for (int i = 0; i < recipeEffects.size(); i++) { + String effectRegistryName = GsonHelper.getAsString(recipeEffects.get(i).getAsJsonObject(), "effect"); + int effectDuration = GsonHelper.getAsInt(recipeEffects.get(i).getAsJsonObject(), "duration", 200); + int effectAmplifier = GsonHelper.getAsInt(recipeEffects.get(i).getAsJsonObject(), "amplifier", 0); + + MobEffect effect = ForgeRegistries.MOB_EFFECTS.getValue(new ResourceLocation(effectRegistryName)); + + EffectUtils.addEffect(bottleItemStack, effect, effectDuration, effectAmplifier); + } + + return new FermentationBarrelRecipe(recipeId, inputFluid, inputItemStack, outputFluid, processingTime, bottleItemStack, color); + } + + @Override + public @Nullable FermentationBarrelRecipe fromNetwork(ResourceLocation recipeId, FriendlyByteBuf buffer) { + try { + ItemStack inputItemStack = buffer.readItem(); + FluidStack inputFluid = buffer.readFluidStack(); + FluidStack outputFluid = buffer.readFluidStack(); + ItemStack bottleItemStack = buffer.readItem(); + int processingTime = buffer.readVarInt(); + Color color = new Color(buffer.readVarInt()); + + return new FermentationBarrelRecipe(recipeId, inputFluid, inputItemStack, outputFluid, processingTime, bottleItemStack, color); + } catch (Exception ex) { + String message = String.format("Unable to read recipe (%s) from network buffer.", recipeId); + GrowthcraftCellar.LOGGER.error(message); + throw ex; + } + } + + @Override + public void toNetwork(FriendlyByteBuf buffer, FermentationBarrelRecipe recipe) { + buffer.writeItemStack(recipe.getIngredientItemStack(), false); + buffer.writeFluidStack(recipe.getIngredientFluidStack()); + buffer.writeFluidStack(recipe.getResultingFluid()); + buffer.writeItemStack(recipe.getBottleItemStack(), false); + buffer.writeVarInt(recipe.getProcessingTime()); + buffer.writeVarInt(recipe.getColor().hashCode()); + } + + @Override + public RecipeSerializer setRegistryName(ResourceLocation name) { + this.name = name; + return this; + } + + @Override + public ResourceLocation getRegistryName() { + return name; + } + + @Override + public Class> getRegistryType() { + // TODO Auto-generated method stub + return Serializer.>castClass(RecipeSerializer.class); + } + + private static Class castClass(Class cls) { + return (Class) cls; + } + + } +} diff --git a/src/main/java/growthcraft/cellar/recipe/FruitPressRecipe.java b/src/main/java/growthcraft/cellar/recipe/FruitPressRecipe.java new file mode 100644 index 0000000..3e66324 --- /dev/null +++ b/src/main/java/growthcraft/cellar/recipe/FruitPressRecipe.java @@ -0,0 +1,168 @@ +package growthcraft.cellar.recipe; + +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import com.google.gson.JsonObject; + +import growthcraft.cellar.GrowthcraftCellar; +import growthcraft.cellar.shared.Reference; +import growthcraft.lib.utils.CraftingUtils; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.GsonHelper; +import net.minecraft.world.SimpleContainer; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.crafting.Recipe; +import net.minecraft.world.item.crafting.RecipeSerializer; +import net.minecraft.world.item.crafting.RecipeType; +import net.minecraft.world.level.Level; +import net.minecraftforge.common.crafting.CraftingHelper; +import net.minecraftforge.fluids.FluidStack; + +public class FruitPressRecipe implements Recipe { + + private final ResourceLocation recipeId; + private final ItemStack inputItemStack; + private final FluidStack outputFluidStack; + private final int processingTime; + + public FruitPressRecipe(ResourceLocation recipeId, + ItemStack inputItemStack, FluidStack outputFluidStack, + int processingTime) { + this.recipeId = recipeId; + this.inputItemStack = inputItemStack; + this.outputFluidStack = outputFluidStack; + this.processingTime = processingTime; + } + + @Override + public boolean matches(SimpleContainer container, Level level) { + return false; + } + + public boolean matches(ItemStack itemStack) { + return this.inputItemStack.getItem() == itemStack.getItem(); + } + + public boolean matches(ItemStack itemStack, FluidStack fluidStack) { + return this.matches(itemStack) && + this.outputFluidStack.getFluid() == fluidStack.getFluid(); + } + + @Override + public ItemStack assemble(SimpleContainer container) { + return this.outputFluidStack.getFluid().getBucket().getDefaultInstance().copy(); + } + + @Override + public boolean canCraftInDimensions(int width, int height) { + return true; + } + + @Override + public ItemStack getResultItem() { + return this.outputFluidStack.getFluid().getBucket().getDefaultInstance().copy(); + } + + @Override + public ResourceLocation getId() { + return this.recipeId; + } + + @Override + public RecipeSerializer getSerializer() { + return Serializer.INSTANCE; + } + + @Override + public RecipeType getType() { + return Type.INSTANCE; + } + + public int getProcessingTime() { + return this.processingTime; + } + + public FluidStack getResultingFluid() { + return this.outputFluidStack; + } + + public ItemStack getIngredientItemStack() { + return this.inputItemStack; + } + + public static class Type implements RecipeType { + private Type() { /* Prevent default constructor */ } + + public static final FruitPressRecipe.Type INSTANCE = new FruitPressRecipe.Type(); + public static final String ID = Reference.UnlocalizedName.FRUIT_PRESS_RECIPE; + } + + + public static class Serializer implements RecipeSerializer { + + public static final FruitPressRecipe.Serializer INSTANCE = new FruitPressRecipe.Serializer(); + public static final ResourceLocation ID = new ResourceLocation( + Reference.MODID, + Reference.UnlocalizedName.FRUIT_PRESS_RECIPE); + private ResourceLocation name; + + @Override + public @NotNull FruitPressRecipe fromJson(ResourceLocation recipeId, JsonObject json) { + ItemStack inputItemStack = CraftingHelper.getItemStack(GsonHelper.getAsJsonObject(json, "input_item"), false); + + FluidStack outputFluid = CraftingUtils.getFluidStack(GsonHelper.getAsJsonObject(json, "output_fluid")); + + int processingTime = GsonHelper.getAsInt(json, "processing_time", 1200); + + return new FruitPressRecipe(recipeId, inputItemStack, outputFluid, processingTime); + } + + @Override + public @Nullable FruitPressRecipe fromNetwork(ResourceLocation recipeId, FriendlyByteBuf buffer) { + try { + ItemStack inputItemStack = buffer.readItem(); + FluidStack outputFluid = buffer.readFluidStack(); + int processingTime = buffer.readVarInt(); + + return new FruitPressRecipe(recipeId, inputItemStack, outputFluid, processingTime); + } catch (Exception ex) { + String message = String.format("Unable to read recipe (%s) from network buffer.", recipeId); + GrowthcraftCellar.LOGGER.error(message); + throw ex; + } + } + + @Override + public void toNetwork(FriendlyByteBuf buffer, FruitPressRecipe recipe) { + buffer.writeItemStack(recipe.getIngredientItemStack(), false); + buffer.writeFluidStack(recipe.getResultingFluid()); + buffer.writeVarInt(recipe.getProcessingTime()); + } + + @Override + public RecipeSerializer setRegistryName(ResourceLocation name) { + this.name = name; + return this; + } + + @Override + public ResourceLocation getRegistryName() { + return name; + } + + @Override + public Class> getRegistryType() { + // TODO Auto-generated method stub + return Serializer.>castClass(RecipeSerializer.class); + } + + private static Class castClass(Class cls) { + return (Class) cls; + } + + } + + +} diff --git a/src/main/java/growthcraft/cellar/recipe/RoasterRecipe.java b/src/main/java/growthcraft/cellar/recipe/RoasterRecipe.java new file mode 100644 index 0000000..2dce5bb --- /dev/null +++ b/src/main/java/growthcraft/cellar/recipe/RoasterRecipe.java @@ -0,0 +1,154 @@ +package growthcraft.cellar.recipe; + +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import com.google.gson.JsonObject; + +import growthcraft.cellar.GrowthcraftCellar; +import growthcraft.cellar.shared.Reference; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.GsonHelper; +import net.minecraft.world.SimpleContainer; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.crafting.Recipe; +import net.minecraft.world.item.crafting.RecipeSerializer; +import net.minecraft.world.item.crafting.RecipeType; +import net.minecraft.world.level.Level; +import net.minecraftforge.common.crafting.CraftingHelper; + +public class RoasterRecipe implements Recipe { + + private final ResourceLocation recipeId; + + private final ItemStack inputItem; + private final ItemStack resultItem; + private final int processingTime; + + public RoasterRecipe(ResourceLocation recipeId, ItemStack input, ItemStack result, int processingTime) { + this.recipeId = recipeId; + this.inputItem = input; + this.resultItem = result; + this.processingTime = processingTime; + } + + @Override + public boolean matches(SimpleContainer simpleContainer, Level level) { + return false; + } + + public boolean matches(ItemStack input, int timer) { + return this.inputItem.getItem() == input.getItem() + && this.inputItem.getCount() <= input.getCount() + && this.processingTime == timer; + } + + @Override + public ItemStack assemble(SimpleContainer simpleContainer) { + return this.inputItem; + } + + @Override + public boolean canCraftInDimensions(int width, int height) { + return true; + } + + public ItemStack getResultItem() { + return this.resultItem; + } + + @Override + public @NotNull ResourceLocation getId() { + return this.recipeId; + } + + public ItemStack getInputItemStack() { + return this.inputItem; + } + + public int getRecipeProcessingTime() { + return this.processingTime; + } + + @Override + public @NotNull RecipeSerializer getSerializer() { + return RoasterRecipe.Serializer.INSTANCE; + } + + public @NotNull RecipeType getType() { + return RoasterRecipe.Type.INSTANCE; + } + + public static class Type implements RecipeType { + private Type() { /* Prevent default constructor */ } + + public static final RoasterRecipe.Type INSTANCE = new RoasterRecipe.Type(); + public static final String ID = Reference.UnlocalizedName.ROASTER_RECIPE; + } + + public static class Serializer implements RecipeSerializer { + private Serializer() { /* Prevent default constructor */ } + + public static final RoasterRecipe.Serializer INSTANCE = new RoasterRecipe.Serializer(); + public static final ResourceLocation ID = new ResourceLocation( + Reference.MODID, + Reference.UnlocalizedName.ROASTER_RECIPE); + private ResourceLocation name; + + @Override + public @NotNull RoasterRecipe fromJson(ResourceLocation recipeId, JsonObject json) { + + ItemStack inputItemStack = CraftingHelper.getItemStack(GsonHelper.getAsJsonObject(json, "input_item"), false); + ItemStack resultItemStack = CraftingHelper.getItemStack(GsonHelper.getAsJsonObject(json, "result"), false); + + int processingTime = GsonHelper.getAsInt(json, "roasting_level", 1); + + return new RoasterRecipe(recipeId, inputItemStack, resultItemStack, processingTime); + } + + @Override + public @Nullable RoasterRecipe fromNetwork(ResourceLocation recipeId, FriendlyByteBuf buffer) { + try { + ItemStack input = buffer.readItem(); + ItemStack result = buffer.readItem(); + int processing = buffer.readVarInt(); + + return new RoasterRecipe(recipeId, input, result, processing); + } catch (Exception ex) { + String message = String.format("Unable to read recipe (%s) from network buffer.", recipeId); + GrowthcraftCellar.LOGGER.error(message); + throw ex; + } + } + + @Override + public void toNetwork(FriendlyByteBuf buffer, RoasterRecipe recipe) { + buffer.writeItemStack(recipe.getInputItemStack(), false); + buffer.writeItemStack(recipe.getResultItem(), false); + buffer.writeVarInt(recipe.getRecipeProcessingTime()); + } + + @Override + public RecipeSerializer setRegistryName(ResourceLocation name) { + this.name = name; + return this; + } + + @Override + public ResourceLocation getRegistryName() { + return name; + } + + @Override + public Class> getRegistryType() { + // TODO Auto-generated method stub + return Serializer.>castClass(RecipeSerializer.class); + } + + private static Class castClass(Class cls) { + return (Class) cls; + } + + } +} diff --git a/src/main/java/growthcraft/cellar/screen/BrewKettleScreen.java b/src/main/java/growthcraft/cellar/screen/BrewKettleScreen.java new file mode 100644 index 0000000..907f786 --- /dev/null +++ b/src/main/java/growthcraft/cellar/screen/BrewKettleScreen.java @@ -0,0 +1,129 @@ +package growthcraft.cellar.screen; + +import com.mojang.blaze3d.systems.RenderSystem; +import com.mojang.blaze3d.vertex.PoseStack; +import growthcraft.cellar.screen.container.BrewKettleMenu; +import growthcraft.cellar.shared.Reference; +import growthcraft.lib.kaupenjoe.screen.renderer.FluidTankRenderer; +import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; +import net.minecraft.client.renderer.GameRenderer; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.player.Inventory; +import net.minecraft.world.item.TooltipFlag; + +import java.util.Optional; + +public class BrewKettleScreen extends AbstractContainerScreen { + private static final ResourceLocation TEXTURE = new ResourceLocation( + Reference.MODID, "textures/gui/brew_kettle_screen.png" + ); + + private FluidTankRenderer fluidTankRenderer0; + private FluidTankRenderer fluidTankRenderer1; + + public BrewKettleScreen(BrewKettleMenu menu, Inventory inventory, Component component) { + super(menu, inventory, component); + } + + @Override + protected void init() { + super.init(); + assignFluidRender(); + } + + private void assignFluidRender() { + fluidTankRenderer0 = new FluidTankRenderer(4000, true, 16, 52); + fluidTankRenderer1 = new FluidTankRenderer(4000, true, 16, 52); + } + + @Override + protected void renderBg(PoseStack poseStack, float partialTick, int mouseX, int mouseY) { + RenderSystem.setShader(GameRenderer::getPositionTexShader); + RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); + RenderSystem.setShaderTexture(0, TEXTURE); + + int x = (width - imageWidth) / 2; + int y = (height - imageHeight) / 2; + + // Full background image + this.blit(poseStack, x, y, 0, 0, imageWidth, imageHeight); + + // Progress bar + this.blit(poseStack, + x + 98, y + 30, + 176, 0, + 9, menu.getProgressionScaled(28) + ); + + // Heat indicator + if(this.menu.isHeated()) { + this.blit(poseStack, + x + 68, y + 53, + 176, 28, + 13, 13 + ); + } + + fluidTankRenderer0.render(poseStack, + x + 46, y + 17, + menu.getFluidStack(0)); + + fluidTankRenderer1.render(poseStack, + x + 114, y + 17, + menu.getFluidStack(1)); + } + + @Override + public void render(PoseStack poseStack, int mouseX, int mouseY, float delta) { + renderBackground(poseStack); + super.render(poseStack, mouseX, mouseY, delta); + // Render any tooltips for this mouse over location. + renderTooltip(poseStack, mouseX, mouseY); + } + + @Override + protected void renderLabels(PoseStack poseStack, int mouseX, int mouseY) { + int x = (width - imageWidth) / 2; + int y = (height - imageHeight) / 2; + + // Screen Title + this.font.draw(poseStack, this.title, (float) this.titleLabelX, (float) this.titleLabelY, 4210752); + // Inventory Title + this.font.draw(poseStack, this.playerInventoryTitle, (float) this.inventoryLabelX, (float) this.inventoryLabelY, 4210752); + + // FluidTank Tooltips + renderFluidTankTooltips(poseStack, mouseX, mouseY, x, y); + } + + + private void renderFluidTankTooltips(PoseStack poseStack, int mouseX, int mouseY, int x, int y) { + if (isMouseAboveArea(mouseX, mouseY, x + 46, y + 17, 16, 52, fluidTankRenderer0.getWidth(), fluidTankRenderer0.getHeight())) { + renderTooltip( + poseStack, + fluidTankRenderer0.getTooltip(menu.getFluidStack(0), TooltipFlag.Default.NORMAL), + Optional.empty(), + mouseX - x, + mouseY - y + ); + } else if (isMouseAboveArea(mouseX, mouseY, x + 114, y + 17, 16, 52, fluidTankRenderer1.getWidth(), fluidTankRenderer1.getHeight())) { + renderTooltip( + poseStack, + fluidTankRenderer1.getTooltip(menu.getFluidStack(1), TooltipFlag.Default.NORMAL), + Optional.empty(), + mouseX - x, + mouseY - y + ); + } + } + + private boolean isMouseAboveArea(int mouseX, int mouseY, int baseX, int baseY, int offsetX, int offsetY, int width, int height) { + return (mouseX >= baseX && mouseX <= (baseX + offsetX)) && (mouseY >= baseY && mouseY <= (baseY + offsetY)); + } + + + + + + +} diff --git a/src/main/java/growthcraft/cellar/screen/CultureJarScreen.java b/src/main/java/growthcraft/cellar/screen/CultureJarScreen.java new file mode 100644 index 0000000..fdfa9a7 --- /dev/null +++ b/src/main/java/growthcraft/cellar/screen/CultureJarScreen.java @@ -0,0 +1,107 @@ +package growthcraft.cellar.screen; + +import com.mojang.blaze3d.systems.RenderSystem; +import com.mojang.blaze3d.vertex.PoseStack; +import growthcraft.cellar.screen.container.CultureJarMenu; +import growthcraft.cellar.shared.Reference; +import growthcraft.lib.kaupenjoe.screen.renderer.FluidTankRenderer; +import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; +import net.minecraft.client.renderer.GameRenderer; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.player.Inventory; +import net.minecraft.world.item.TooltipFlag; + +import java.util.Optional; + +public class CultureJarScreen extends AbstractContainerScreen { + + private static final ResourceLocation TEXTURE = new ResourceLocation( + Reference.MODID, "textures/gui/culture_jar_screen.png" + ); + + private FluidTankRenderer fluidTankRenderer0; + + public CultureJarScreen(CultureJarMenu menu, Inventory inventory, Component component) { + super(menu, inventory, component); + } + + @Override + protected void init() { + super.init(); + assignFluidRender(); + } + + private void assignFluidRender() { + fluidTankRenderer0 = new FluidTankRenderer(1000, true, 16, 52); + } + + @Override + protected void renderBg(PoseStack poseStack, float partialTick, int mouseX, int mouseY) { + RenderSystem.setShader(GameRenderer::getPositionTexShader); + RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); + RenderSystem.setShaderTexture(0, TEXTURE); + + int x = (width - imageWidth) / 2; + int y = (height - imageHeight) / 2; + + // Full background image + this.blit(poseStack, x, y, 0, 0, imageWidth, imageHeight); + + // Progress bar + this.blit(poseStack, + x + 82, y + 30, + 176, 0, 27, menu.getProgressionScaled(27) + ); + + // Heat indicator + if(this.menu.isHeated()) { + this.blit(poseStack, + x + 96, y + 57, + 176, 28, 13, 13 + ); + } + + fluidTankRenderer0.render(poseStack, x + 65, y + 18, menu.getFluidStack(0)); + + } + + @Override + public void render(PoseStack poseStack, int mouseX, int mouseY, float delta) { + renderBackground(poseStack); + super.render(poseStack, mouseX, mouseY, delta); + // Render any tooltips for this mouse over location. + renderTooltip(poseStack, mouseX, mouseY); + } + + @Override + protected void renderLabels(PoseStack poseStack, int mouseX, int mouseY) { + int x = (width - imageWidth) / 2; + int y = (height - imageHeight) / 2; + + // Screen Title + this.font.draw(poseStack, this.title, (float) this.titleLabelX, (float) this.titleLabelY, 4210752); + // Inventory Title + this.font.draw(poseStack, this.playerInventoryTitle, (float) this.inventoryLabelX, (float) this.inventoryLabelY, 4210752); + + // FluidTank Tooltips + renderFluidTankTooltips(poseStack, mouseX, mouseY, x, y); + } + + + private void renderFluidTankTooltips(PoseStack poseStack, int mouseX, int mouseY, int x, int y) { + if (isMouseAboveArea(mouseX, mouseY, x + 62, y + 18, 16, 52, fluidTankRenderer0.getWidth(), fluidTankRenderer0.getHeight())) { + renderTooltip( + poseStack, + fluidTankRenderer0.getTooltip(menu.getFluidStack(0), TooltipFlag.Default.NORMAL), + Optional.empty(), + mouseX - x, + mouseY - y + ); + } + } + + private boolean isMouseAboveArea(int mouseX, int mouseY, int baseX, int baseY, int offsetX, int offsetY, int width, int height) { + return (mouseX >= baseX && mouseX <= (baseX + offsetX)) && (mouseY >= baseY && mouseY <= (baseY + offsetY)); + } +} diff --git a/src/main/java/growthcraft/cellar/screen/FermentationBarrelScreen.java b/src/main/java/growthcraft/cellar/screen/FermentationBarrelScreen.java new file mode 100644 index 0000000..d687f96 --- /dev/null +++ b/src/main/java/growthcraft/cellar/screen/FermentationBarrelScreen.java @@ -0,0 +1,99 @@ +package growthcraft.cellar.screen; + +import com.mojang.blaze3d.systems.RenderSystem; +import com.mojang.blaze3d.vertex.PoseStack; +import growthcraft.cellar.screen.container.FermentationBarrelMenu; +import growthcraft.cellar.shared.Reference; +import growthcraft.lib.kaupenjoe.screen.renderer.FluidTankRenderer; +import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; +import net.minecraft.client.renderer.GameRenderer; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.player.Inventory; +import net.minecraft.world.item.TooltipFlag; +import org.jetbrains.annotations.NotNull; + +import java.util.Optional; + +public class FermentationBarrelScreen extends AbstractContainerScreen { + + private static final ResourceLocation TEXTURE = new ResourceLocation( + Reference.MODID, "textures/gui/fermentation_barrel_screen.png" + ); + + private FluidTankRenderer fluidTankRenderer0; + + public FermentationBarrelScreen(FermentationBarrelMenu menu, Inventory inventory, Component component) { + super(menu, inventory, component); + } + + @Override + protected void init() { + super.init(); + assignFluidRender(); + } + + private void assignFluidRender() { + fluidTankRenderer0 = new FluidTankRenderer(4000, true, 50, 52); + } + @Override + protected void renderBg(@NotNull PoseStack poseStack, float partialTick, int mouseX, int mouseY) { + RenderSystem.setShader(GameRenderer::getPositionTexShader); + RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); + RenderSystem.setShaderTexture(0, TEXTURE); + + int x = (width - imageWidth) / 2; + int y = (height - imageHeight) / 2; + + // Full background image + blit(poseStack, x, y, 0, 0, imageWidth, imageHeight); + + // Progress Bar + blit(poseStack, + x + 51, y + 48 - menu.getProgressionScaled(28), + 188, 28 - menu.getProgressionScaled(28), + 8, menu.getProgressionScaled(28) + ); + + fluidTankRenderer0.render(poseStack, x + 72, y + 17, menu.getFluidStack(0)); + } + + @Override + public void render(PoseStack poseStack, int mouseX, int mouseY, float delta) { + renderBackground(poseStack); + super.render(poseStack, mouseX, mouseY, delta); + // Render any tooltips for this mouse over location. + renderTooltip(poseStack, mouseX, mouseY); + } + + @Override + protected void renderLabels(PoseStack poseStack, int mouseX, int mouseY) { + int x = (width - imageWidth) / 2; + int y = (height - imageHeight) / 2; + + // Screen Title + this.font.draw(poseStack, this.title, (float) this.titleLabelX, (float) this.titleLabelY, 4210752); + // Inventory Title + this.font.draw(poseStack, this.playerInventoryTitle, (float) this.inventoryLabelX, (float) this.inventoryLabelY, 4210752); + + // FluidTank Tooltips + renderFluidTankTooltips(poseStack, mouseX, mouseY, x, y); + } + + + private void renderFluidTankTooltips(PoseStack poseStack, int mouseX, int mouseY, int x, int y) { + if (isMouseAboveArea(mouseX, mouseY, x + 72, y + 17, 50, 52, fluidTankRenderer0.getWidth(), fluidTankRenderer0.getHeight())) { + renderTooltip( + poseStack, + fluidTankRenderer0.getTooltip(menu.getFluidStack(0), TooltipFlag.Default.NORMAL), + Optional.empty(), + mouseX - x, + mouseY - y + ); + } + } + + private boolean isMouseAboveArea(int mouseX, int mouseY, int baseX, int baseY, int offsetX, int offsetY, int width, int height) { + return (mouseX >= baseX && mouseX <= (baseX + offsetX)) && (mouseY >= baseY && mouseY <= (baseY + offsetY)); + } +} diff --git a/src/main/java/growthcraft/cellar/screen/FruitPressScreen.java b/src/main/java/growthcraft/cellar/screen/FruitPressScreen.java new file mode 100644 index 0000000..6a73cf5 --- /dev/null +++ b/src/main/java/growthcraft/cellar/screen/FruitPressScreen.java @@ -0,0 +1,100 @@ +package growthcraft.cellar.screen; + +import com.mojang.blaze3d.systems.RenderSystem; +import com.mojang.blaze3d.vertex.PoseStack; +import growthcraft.cellar.screen.container.FruitPressMenu; +import growthcraft.cellar.shared.Reference; +import growthcraft.lib.kaupenjoe.screen.renderer.FluidTankRenderer; +import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; +import net.minecraft.client.renderer.GameRenderer; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.player.Inventory; +import net.minecraft.world.item.TooltipFlag; +import org.jetbrains.annotations.NotNull; + +import java.util.Optional; + +public class FruitPressScreen extends AbstractContainerScreen { + + private static final ResourceLocation TEXTURE = new ResourceLocation( + Reference.MODID, "textures/gui/fruit_press_screen.png" + ); + + private FluidTankRenderer fluidTankRenderer0; + + public FruitPressScreen(FruitPressMenu menu, Inventory inventory, Component component) { + super(menu, inventory, component); + } + + @Override + protected void init() { + super.init(); + assignFluidRender(); + } + + private void assignFluidRender() { + fluidTankRenderer0 = new FluidTankRenderer(4000, true, 50, 52); + } + + @Override + protected void renderBg(@NotNull PoseStack poseStack, float partialTick, int mouseX, int mouseY) { + RenderSystem.setShader(GameRenderer::getPositionTexShader); + RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); + RenderSystem.setShaderTexture(0, TEXTURE); + + int x = (width - imageWidth) / 2; + int y = (height - imageHeight) / 2; + + // Full background image + blit(poseStack, x, y, 0, 0, imageWidth, imageHeight); + + // Progress Bar + blit(poseStack, + x + 51, y + 48 - menu.getProgressionScaled(28), + 188, 28 - menu.getProgressionScaled(28), + 8, menu.getProgressionScaled(28) + ); + + fluidTankRenderer0.render(poseStack, x + 72, y + 17, menu.getFluidStack(0)); + } + + @Override + public void render(PoseStack poseStack, int mouseX, int mouseY, float delta) { + renderBackground(poseStack); + super.render(poseStack, mouseX, mouseY, delta); + // Render any tooltips for this mouse over location. + renderTooltip(poseStack, mouseX, mouseY); + } + + @Override + protected void renderLabels(PoseStack poseStack, int mouseX, int mouseY) { + int x = (width - imageWidth) / 2; + int y = (height - imageHeight) / 2; + + // Screen Title + this.font.draw(poseStack, this.title, (float) this.titleLabelX, (float) this.titleLabelY, 4210752); + // Inventory Title + this.font.draw(poseStack, this.playerInventoryTitle, (float) this.inventoryLabelX, (float) this.inventoryLabelY, 4210752); + + // FluidTank Tooltips + renderFluidTankTooltips(poseStack, mouseX, mouseY, x, y); + } + + + private void renderFluidTankTooltips(PoseStack poseStack, int mouseX, int mouseY, int x, int y) { + if (isMouseAboveArea(mouseX, mouseY, x + 72, y + 17, 50, 52, fluidTankRenderer0.getWidth(), fluidTankRenderer0.getHeight())) { + renderTooltip( + poseStack, + fluidTankRenderer0.getTooltip(menu.getFluidStack(0), TooltipFlag.Default.NORMAL), + Optional.empty(), + mouseX - x, + mouseY - y + ); + } + } + + private boolean isMouseAboveArea(int mouseX, int mouseY, int baseX, int baseY, int offsetX, int offsetY, int width, int height) { + return (mouseX >= baseX && mouseX <= (baseX + offsetX)) && (mouseY >= baseY && mouseY <= (baseY + offsetY)); + } +} diff --git a/src/main/java/growthcraft/cellar/screen/RoasterScreen.java b/src/main/java/growthcraft/cellar/screen/RoasterScreen.java new file mode 100644 index 0000000..4b2763b --- /dev/null +++ b/src/main/java/growthcraft/cellar/screen/RoasterScreen.java @@ -0,0 +1,98 @@ +package growthcraft.cellar.screen; + +import com.mojang.blaze3d.systems.RenderSystem; +import com.mojang.blaze3d.vertex.PoseStack; +import growthcraft.cellar.screen.container.RoasterMenu; +import growthcraft.cellar.shared.Reference; +import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; +import net.minecraft.client.renderer.GameRenderer; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.MutableComponent; +import net.minecraft.network.chat.TranslatableComponent; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.player.Inventory; +import org.jetbrains.annotations.NotNull; + +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; + +public class RoasterScreen extends AbstractContainerScreen { + + private static final ResourceLocation TEXTURE = new ResourceLocation( + Reference.MODID, "textures/gui/roaster_screen.png" + ); + + public RoasterScreen(RoasterMenu menu, Inventory inventory, Component component){ + super(menu, inventory, component); + } + + @Override + protected void renderBg(@NotNull PoseStack poseStack, float partialTick, int mouseX, int mouseY) { + RenderSystem.setShader(GameRenderer::getPositionTexShader); + RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); + RenderSystem.setShaderTexture(0, TEXTURE); + + int x = (width - imageWidth) / 2; + int y = (height - imageHeight) / 2; + + // Full background image + blit(poseStack, x, y, 0, 0, imageWidth, imageHeight); + + blit(poseStack, + x + 76, y + 48, + 76, 0, + menu.getProgressionScaled(28), 9 + ); + + // Heat indicator + if(this.menu.isHeated()) { + this.blit(poseStack, + x + 81, y + 57, + 176, 28, + 13, 13 + ); + } + } + + @Override + public void render(PoseStack poseStack, int mouseX, int mouseY, float delta) { + renderBackground(poseStack); + super.render(poseStack, mouseX, mouseY, delta); + // Render any tooltips for this mouse over location. + renderTooltip(poseStack, mouseX, mouseY); } + + @Override + protected void renderLabels(PoseStack poseStack, int mouseX, int mouseY) { + int x = (width - imageWidth) / 2; + int y = (height - imageHeight) / 2; + + // Screen Title + this.font.draw(poseStack, this.title, (float) this.titleLabelX, (float) this.titleLabelY, 4210752); + // Inventory Title + this.font.draw(poseStack, this.playerInventoryTitle, (float) this.inventoryLabelX, (float) this.inventoryLabelY, 4210752); + + renderProgressToolTip(poseStack, mouseX, mouseY, x, y); + } + + private void renderProgressToolTip(PoseStack poseStack, int mouseX, int mouseY, int x, int y) { + List tooltip = new ArrayList<>(); + + MutableComponent progressString = new TranslatableComponent(Reference.MODID.concat(".tooltip.roaster.progress"), menu.getRoastingLevel(), menu.getPercentProgress()); + tooltip.add(progressString); + if (isMouseAboveArea(mouseX, mouseY, x + 74, y + 45, 28, 9, 28, 9)) { + renderTooltip( + poseStack, + tooltip, + Optional.empty(), + mouseX - x, + mouseY - y + ); + } + } + + private boolean isMouseAboveArea(int mouseX, int mouseY, int baseX, int baseY, int offsetX, int offsetY, int width, int height) { + return (mouseX >= baseX && mouseX <= (baseX + offsetX)) && (mouseY >= baseY && mouseY <= (baseY + offsetY)); + } + +} diff --git a/src/main/java/growthcraft/cellar/screen/container/BrewKettleMenu.java b/src/main/java/growthcraft/cellar/screen/container/BrewKettleMenu.java new file mode 100644 index 0000000..2bfa4ab --- /dev/null +++ b/src/main/java/growthcraft/cellar/screen/container/BrewKettleMenu.java @@ -0,0 +1,157 @@ +package growthcraft.cellar.screen.container; + +import growthcraft.cellar.block.BrewKettleBlock; +import growthcraft.cellar.block.entity.BrewKettleBlockEntity; +import growthcraft.cellar.init.GrowthcraftCellarMenus; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.world.entity.player.Inventory; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.inventory.AbstractContainerMenu; +import net.minecraft.world.inventory.ContainerData; +import net.minecraft.world.inventory.ContainerLevelAccess; +import net.minecraft.world.inventory.SimpleContainerData; +import net.minecraft.world.inventory.Slot; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.items.CapabilityItemHandler; +import net.minecraftforge.items.SlotItemHandler; + +public class BrewKettleMenu extends AbstractContainerMenu { + private BrewKettleBlockEntity blockEntity; + private BrewKettleBlock block; + private final Level level; + private ContainerData data; + + public BrewKettleMenu(int containerId, Inventory inventory, FriendlyByteBuf extraData) { + this(containerId, inventory, inventory.player.level.getBlockEntity(extraData.readBlockPos()), new SimpleContainerData(2)); + } + + public BrewKettleMenu(int containerId, Inventory inventory, BlockEntity blockEntity, ContainerData data) { + super(GrowthcraftCellarMenus.BREW_KETTLE_MENU.get(), containerId); + + this.blockEntity = (BrewKettleBlockEntity) blockEntity; + this.block = (BrewKettleBlock) inventory.player.level.getBlockEntity(this.blockEntity.getBlockPos()).getBlockState().getBlock(); + this.level = inventory.player.level; + this.data = data; + + addPlayerInventory(inventory); + addPlayerHotbar(inventory); + + this.blockEntity.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY).ifPresent(handler -> { + // 0 Lid Slot + this.addSlot(new SlotItemHandler(handler, 0, 19, 17)); + // 1 Input Slot + this.addSlot(new SlotItemHandler(handler, 1, 80, 35)); + // 2 By Product Slot (output only) + this.addSlot(new SlotItemHandler(handler, 2, 141, 17)); + } + ); + + // Add our block fluid tanks. + addDataSlots(data); + } + + public BrewKettleBlockEntity getBlockEntity() { + return this.blockEntity; + } + + public void setFluid(int tankID, FluidStack fluidStack) throws NullPointerException { + this.blockEntity.setFluidStackInTank(tankID, fluidStack); + } + + public FluidStack getFluidStack(int tankID) { + return this.blockEntity.getFluidStackInTank(tankID); + } + + public boolean isHeated() { + return this.blockEntity.isHeated(); + } + + @OnlyIn(Dist.CLIENT) + public int getProgressionScaled(int size) { + return this.blockEntity.getTickClock("current") != 0 && this.blockEntity.getTickClock("max") != 0 + ? this.blockEntity.getTickClock("current") * size / this.blockEntity.getTickClock("max") + : 0; + } + + // CREDIT GOES TO: diesieben07 | https://github.com/diesieben07/SevenCommons + // must assign a slot number to each of the slots used by the GUI. + // For this container, we can see both the tile inventory's slots, the player inventory slots and the hotbar. + // Each time we add a Slot to the container, it automatically increases the slotIndex, which means + // 0 - 8 = hotbar slots (which will map to the InventoryPlayer slot numbers 0 - 8) + // 9 - 35 = player inventory slots (which map to the InventoryPlayer slot numbers 9 - 35) + // 36 - 44 = TileInventory slots, which map to our TileEntity slot numbers 0 - 8) + private static final int HOTBAR_SLOT_COUNT = 9; + private static final int PLAYER_INVENTORY_ROW_COUNT = 3; + private static final int PLAYER_INVENTORY_COLUMN_COUNT = 9; + private static final int PLAYER_INVENTORY_SLOT_COUNT = PLAYER_INVENTORY_COLUMN_COUNT * PLAYER_INVENTORY_ROW_COUNT; + private static final int VANILLA_SLOT_COUNT = HOTBAR_SLOT_COUNT + PLAYER_INVENTORY_SLOT_COUNT; + private static final int VANILLA_FIRST_SLOT_INDEX = 0; + private static final int TE_INVENTORY_FIRST_SLOT_INDEX = VANILLA_FIRST_SLOT_INDEX + VANILLA_SLOT_COUNT; + + private static final int TE_INVENTORY_SLOT_COUNT = 3; // must be the number of slots you have! + + @Override + public ItemStack quickMoveStack(Player playerIn, int index) { + Slot sourceSlot = slots.get(index); + if (sourceSlot == null || !sourceSlot.hasItem()) return ItemStack.EMPTY; //EMPTY_ITEM + ItemStack sourceStack = sourceSlot.getItem(); + ItemStack copyOfSourceStack = sourceStack.copy(); + + // Check if the slot clicked is one of the vanilla container slots + if (index < VANILLA_FIRST_SLOT_INDEX + VANILLA_SLOT_COUNT) { + // This is a vanilla container slot so merge the stack into the tile inventory + if (!moveItemStackTo(sourceStack, TE_INVENTORY_FIRST_SLOT_INDEX, TE_INVENTORY_FIRST_SLOT_INDEX + + TE_INVENTORY_SLOT_COUNT, false)) { + return ItemStack.EMPTY; // EMPTY_ITEM + } + } else if (index < TE_INVENTORY_FIRST_SLOT_INDEX + TE_INVENTORY_SLOT_COUNT) { + // This is a TE slot so merge the stack into the players inventory + if (!moveItemStackTo(sourceStack, VANILLA_FIRST_SLOT_INDEX, VANILLA_FIRST_SLOT_INDEX + VANILLA_SLOT_COUNT, false)) { + return ItemStack.EMPTY; + } + } else { + System.out.println("Invalid slotIndex:" + index); + return ItemStack.EMPTY; + } + // If stack size == 0 (the entire stack was moved) set slot contents to null + if (sourceStack.getCount() == 0) { + sourceSlot.set(ItemStack.EMPTY); + } else { + sourceSlot.setChanged(); + } + sourceSlot.onTake(playerIn, sourceStack); + return copyOfSourceStack; + } + + @Override + public boolean stillValid(Player player) { + return stillValid( + ContainerLevelAccess.create( + this.level, + this.blockEntity.getBlockPos() + ), + player, + this.block + ); + } + + private void addPlayerInventory(Inventory playerInventory) { + for (int i = 0; i < 3; ++i) { + for (int l = 0; l < 9; ++l) { + this.addSlot(new Slot(playerInventory, l + i * 9 + 9, 8 + l * 18, 84 + i * 18)); + } + } + } + + private void addPlayerHotbar(Inventory playerInventory) { + for (int i = 0; i < 9; ++i) { + this.addSlot(new Slot(playerInventory, i, 8 + i * 18, 142)); + } + } + +} diff --git a/src/main/java/growthcraft/cellar/screen/container/CultureJarMenu.java b/src/main/java/growthcraft/cellar/screen/container/CultureJarMenu.java new file mode 100644 index 0000000..cda6210 --- /dev/null +++ b/src/main/java/growthcraft/cellar/screen/container/CultureJarMenu.java @@ -0,0 +1,170 @@ +package growthcraft.cellar.screen.container; + +import growthcraft.cellar.block.CultureJarBlock; +import growthcraft.cellar.block.entity.CultureJarBlockEntity; +import growthcraft.cellar.init.GrowthcraftCellarMenus; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.world.entity.player.Inventory; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.inventory.AbstractContainerMenu; +import net.minecraft.world.inventory.ContainerData; +import net.minecraft.world.inventory.ContainerLevelAccess; +import net.minecraft.world.inventory.SimpleContainerData; +import net.minecraft.world.inventory.Slot; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.items.CapabilityItemHandler; +import net.minecraftforge.items.SlotItemHandler; + +public class CultureJarMenu extends AbstractContainerMenu { + + private final CultureJarBlockEntity blockEntity; + private final CultureJarBlock block; + private final Level level; + private final ContainerData data; + + private FluidStack fluidStack0; + + public CultureJarMenu(int containerId, Inventory inventory, FriendlyByteBuf extraData) { + this(containerId, inventory, inventory.player.level.getBlockEntity(extraData.readBlockPos()), new SimpleContainerData(2)); + } + + public CultureJarMenu(int containerId, Inventory inventory, BlockEntity blockEntity, ContainerData data) { + super(GrowthcraftCellarMenus.CULTURE_JAR_MENU.get(), containerId); + + this.blockEntity = (CultureJarBlockEntity) blockEntity; + this.block = (CultureJarBlock) inventory.player.level.getBlockEntity(this.blockEntity.getBlockPos()).getBlockState().getBlock(); + this.level = inventory.player.level; + this.data = data; + + this.fluidStack0 = this.blockEntity.getFluidStackInTank(0); + + addPlayerInventory(inventory); + addPlayerHotbar(inventory); + + // Add our block's inventory slots. + this.blockEntity.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY).ifPresent(handler -> { + // 1 Input Slot + this.addSlot(new SlotItemHandler(handler, 0, 94, 35)); + } + ); + + // Add our block fluid tanks. + addDataSlots(data); + + } + + + public CultureJarBlockEntity getBlockEntity() { + return this.blockEntity; + } + + public void setFluid(int tankID, FluidStack fluidStack) throws NullPointerException { + if (tankID == 0) { + this.fluidStack0 = fluidStack; + } else { + throw new NullPointerException(String.format("CultureJarMenu setFluidStack at <%s> does not have a fluid tank with the ID of %d!", blockEntity.getBlockPos(), tankID)); + } + } + + public FluidStack getFluidStack(int tankID) { + return switch (tankID) { + case 0 -> this.blockEntity.getFluidStackInTank(0); + default -> + throw new NullPointerException(String.format("CultureJarMenu getFluidStack at <%s> does not have a fluid tank with the ID of %d!", blockEntity.getBlockPos(), tankID)); + }; + } + + public boolean isHeated() { + return this.blockEntity.isHeated(); + } + + @OnlyIn(Dist.CLIENT) + public int getProgressionScaled(int size) { + return this.blockEntity.getTickClock("current") != 0 && this.blockEntity.getTickClock("max") != 0 + ? this.blockEntity.getTickClock("current") * size / this.blockEntity.getTickClock("max") + : 0; + } + + // CREDIT GOES TO: diesieben07 | https://github.com/diesieben07/SevenCommons + // must assign a slot number to each of the slots used by the GUI. + // For this container, we can see both the tile inventory's slots, the player inventory slots and the hotbar. + // Each time we add a Slot to the container, it automatically increases the slotIndex, which means + // 0 - 8 = hotbar slots (which will map to the InventoryPlayer slot numbers 0 - 8) + // 9 - 35 = player inventory slots (which map to the InventoryPlayer slot numbers 9 - 35) + // 36 - 44 = TileInventory slots, which map to our TileEntity slot numbers 0 - 8) + private static final int HOTBAR_SLOT_COUNT = 9; + private static final int PLAYER_INVENTORY_ROW_COUNT = 3; + private static final int PLAYER_INVENTORY_COLUMN_COUNT = 9; + private static final int PLAYER_INVENTORY_SLOT_COUNT = PLAYER_INVENTORY_COLUMN_COUNT * PLAYER_INVENTORY_ROW_COUNT; + private static final int VANILLA_SLOT_COUNT = HOTBAR_SLOT_COUNT + PLAYER_INVENTORY_SLOT_COUNT; + private static final int VANILLA_FIRST_SLOT_INDEX = 0; + private static final int TE_INVENTORY_FIRST_SLOT_INDEX = VANILLA_FIRST_SLOT_INDEX + VANILLA_SLOT_COUNT; + + private static final int TE_INVENTORY_SLOT_COUNT = 1; // must be the number of slots you have! + + @Override + public ItemStack quickMoveStack(Player playerIn, int index) { + Slot sourceSlot = slots.get(index); + if (sourceSlot == null || !sourceSlot.hasItem()) return ItemStack.EMPTY; //EMPTY_ITEM + ItemStack sourceStack = sourceSlot.getItem(); + ItemStack copyOfSourceStack = sourceStack.copy(); + + // Check if the slot clicked is one of the vanilla container slots + if (index < VANILLA_FIRST_SLOT_INDEX + VANILLA_SLOT_COUNT) { + // This is a vanilla container slot so merge the stack into the tile inventory + if (!moveItemStackTo(sourceStack, TE_INVENTORY_FIRST_SLOT_INDEX, TE_INVENTORY_FIRST_SLOT_INDEX + + TE_INVENTORY_SLOT_COUNT, false)) { + return ItemStack.EMPTY; // EMPTY_ITEM + } + } else if (index < TE_INVENTORY_FIRST_SLOT_INDEX + TE_INVENTORY_SLOT_COUNT) { + // This is a TE slot so merge the stack into the players inventory + if (!moveItemStackTo(sourceStack, VANILLA_FIRST_SLOT_INDEX, VANILLA_FIRST_SLOT_INDEX + VANILLA_SLOT_COUNT, false)) { + return ItemStack.EMPTY; + } + } else { + System.out.println("Invalid slotIndex:" + index); + return ItemStack.EMPTY; + } + // If stack size == 0 (the entire stack was moved) set slot contents to null + if (sourceStack.getCount() == 0) { + sourceSlot.set(ItemStack.EMPTY); + } else { + sourceSlot.setChanged(); + } + sourceSlot.onTake(playerIn, sourceStack); + return copyOfSourceStack; + } + + @Override + public boolean stillValid(Player player) { + return stillValid( + ContainerLevelAccess.create( + this.level, + this.blockEntity.getBlockPos() + ), + player, + this.block + ); + } + + private void addPlayerInventory(Inventory playerInventory) { + for (int i = 0; i < 3; ++i) { + for (int l = 0; l < 9; ++l) { + this.addSlot(new Slot(playerInventory, l + i * 9 + 9, 8 + l * 18, 84 + i * 18)); + } + } + } + + private void addPlayerHotbar(Inventory playerInventory) { + for (int i = 0; i < 9; ++i) { + this.addSlot(new Slot(playerInventory, i, 8 + i * 18, 142)); + } + } + + +} diff --git a/src/main/java/growthcraft/cellar/screen/container/FermentationBarrelMenu.java b/src/main/java/growthcraft/cellar/screen/container/FermentationBarrelMenu.java new file mode 100644 index 0000000..e1d4ccf --- /dev/null +++ b/src/main/java/growthcraft/cellar/screen/container/FermentationBarrelMenu.java @@ -0,0 +1,162 @@ +package growthcraft.cellar.screen.container; + +import growthcraft.cellar.block.FermentationBarrelBlock; +import growthcraft.cellar.block.entity.FermentationBarrelBlockEntity; +import growthcraft.cellar.init.GrowthcraftCellarMenus; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.world.entity.player.Inventory; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.inventory.AbstractContainerMenu; +import net.minecraft.world.inventory.ContainerData; +import net.minecraft.world.inventory.ContainerLevelAccess; +import net.minecraft.world.inventory.SimpleContainerData; +import net.minecraft.world.inventory.Slot; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.items.CapabilityItemHandler; +import net.minecraftforge.items.SlotItemHandler; + +public class FermentationBarrelMenu extends AbstractContainerMenu { + + private final FermentationBarrelBlockEntity blockEntity; + private final FermentationBarrelBlock block; + private final Level level; + private final ContainerData data; + + private FluidStack fluidStack0; + + public FermentationBarrelMenu(int containerId, Inventory inventory, FriendlyByteBuf extraData) { + this(containerId, inventory, inventory.player.level.getBlockEntity(extraData.readBlockPos()), new SimpleContainerData(2)); + } + + public FermentationBarrelMenu(int containerId, Inventory inventory, BlockEntity blockEntity, ContainerData data) { + super(GrowthcraftCellarMenus.FERMENTATION_BARREL_MENU.get(), containerId); + + this.blockEntity = (FermentationBarrelBlockEntity) blockEntity; + this.block = (FermentationBarrelBlock) inventory.player.level.getBlockEntity(this.blockEntity.getBlockPos()).getBlockState().getBlock(); + this.level = inventory.player.level; + this.data = data; + + this.fluidStack0 = this.blockEntity.getFluidStackInTank(0); + + addPlayerInventory(inventory); + addPlayerHotbar(inventory); + + this.blockEntity.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY).ifPresent(handler -> { + // 1 Input Slot + this.addSlot(new SlotItemHandler(handler, 0, 52, 53)); + } + ); + + // Add our block fluid tanks. + addDataSlots(data); + } + + public FermentationBarrelBlockEntity getBlockEntity() { + return this.blockEntity; + } + + public void setFluid(int tankID, FluidStack fluidStack) throws NullPointerException { + if (tankID == 0) { + this.fluidStack0 = fluidStack; + } else { + throw new NullPointerException(String.format("FermentationBarrelMenu setFluidStack at <%s> does not have a fluid tank with the ID of %d!", blockEntity.getBlockPos(), tankID)); + } + } + + public FluidStack getFluidStack(int tankID) { + return switch (tankID) { + case 0 -> this.blockEntity.getFluidStackInTank(0); + default -> + throw new NullPointerException(String.format("FermentationBarrelMenu getFluidStack at <%s> does not have a fluid tank with the ID of %d!", blockEntity.getBlockPos(), tankID)); + }; + } + + @OnlyIn(Dist.CLIENT) + public int getProgressionScaled(int size) { + return this.blockEntity.getTickClock("current") != 0 && this.blockEntity.getTickClock("max") != 0 + ? this.blockEntity.getTickClock("current") * size / this.blockEntity.getTickClock("max") + : 0; + } + + // CREDIT GOES TO: diesieben07 | https://github.com/diesieben07/SevenCommons + // must assign a slot number to each of the slots used by the GUI. + // For this container, we can see both the tile inventory's slots, the player inventory slots and the hotbar. + // Each time we add a Slot to the container, it automatically increases the slotIndex, which means + // 0 - 8 = hotbar slots (which will map to the InventoryPlayer slot numbers 0 - 8) + // 9 - 35 = player inventory slots (which map to the InventoryPlayer slot numbers 9 - 35) + // 36 - 44 = TileInventory slots, which map to our TileEntity slot numbers 0 - 8) + private static final int HOTBAR_SLOT_COUNT = 9; + private static final int PLAYER_INVENTORY_ROW_COUNT = 3; + private static final int PLAYER_INVENTORY_COLUMN_COUNT = 9; + private static final int PLAYER_INVENTORY_SLOT_COUNT = PLAYER_INVENTORY_COLUMN_COUNT * PLAYER_INVENTORY_ROW_COUNT; + private static final int VANILLA_SLOT_COUNT = HOTBAR_SLOT_COUNT + PLAYER_INVENTORY_SLOT_COUNT; + private static final int VANILLA_FIRST_SLOT_INDEX = 0; + private static final int TE_INVENTORY_FIRST_SLOT_INDEX = VANILLA_FIRST_SLOT_INDEX + VANILLA_SLOT_COUNT; + + private static final int TE_INVENTORY_SLOT_COUNT = 1; // must be the number of slots you have! + + @Override + public ItemStack quickMoveStack(Player playerIn, int index) { + Slot sourceSlot = slots.get(index); + if (sourceSlot == null || !sourceSlot.hasItem()) return ItemStack.EMPTY; //EMPTY_ITEM + ItemStack sourceStack = sourceSlot.getItem(); + ItemStack copyOfSourceStack = sourceStack.copy(); + + // Check if the slot clicked is one of the vanilla container slots + if (index < VANILLA_FIRST_SLOT_INDEX + VANILLA_SLOT_COUNT) { + // This is a vanilla container slot so merge the stack into the tile inventory + if (!moveItemStackTo(sourceStack, TE_INVENTORY_FIRST_SLOT_INDEX, TE_INVENTORY_FIRST_SLOT_INDEX + + TE_INVENTORY_SLOT_COUNT, false)) { + return ItemStack.EMPTY; // EMPTY_ITEM + } + } else if (index < TE_INVENTORY_FIRST_SLOT_INDEX + TE_INVENTORY_SLOT_COUNT) { + // This is a TE slot so merge the stack into the players inventory + if (!moveItemStackTo(sourceStack, VANILLA_FIRST_SLOT_INDEX, VANILLA_FIRST_SLOT_INDEX + VANILLA_SLOT_COUNT, false)) { + return ItemStack.EMPTY; + } + } else { + System.out.println("Invalid slotIndex:" + index); + return ItemStack.EMPTY; + } + // If stack size == 0 (the entire stack was moved) set slot contents to null + if (sourceStack.getCount() == 0) { + sourceSlot.set(ItemStack.EMPTY); + } else { + sourceSlot.setChanged(); + } + sourceSlot.onTake(playerIn, sourceStack); + return copyOfSourceStack; + } + + @Override + public boolean stillValid(Player player) { + return stillValid( + ContainerLevelAccess.create( + this.level, + this.blockEntity.getBlockPos() + ), + player, + this.block + ); + } + + private void addPlayerInventory(Inventory playerInventory) { + for (int i = 0; i < 3; ++i) { + for (int l = 0; l < 9; ++l) { + this.addSlot(new Slot(playerInventory, l + i * 9 + 9, 8 + l * 18, 84 + i * 18)); + } + } + } + + private void addPlayerHotbar(Inventory playerInventory) { + for (int i = 0; i < 9; ++i) { + this.addSlot(new Slot(playerInventory, i, 8 + i * 18, 142)); + } + } + +} diff --git a/src/main/java/growthcraft/cellar/screen/container/FruitPressMenu.java b/src/main/java/growthcraft/cellar/screen/container/FruitPressMenu.java new file mode 100644 index 0000000..6652468 --- /dev/null +++ b/src/main/java/growthcraft/cellar/screen/container/FruitPressMenu.java @@ -0,0 +1,161 @@ +package growthcraft.cellar.screen.container; + +import growthcraft.cellar.block.FruitPressBlock; +import growthcraft.cellar.block.entity.FruitPressBlockEntity; +import growthcraft.cellar.init.GrowthcraftCellarMenus; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.world.entity.player.Inventory; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.inventory.AbstractContainerMenu; +import net.minecraft.world.inventory.ContainerData; +import net.minecraft.world.inventory.ContainerLevelAccess; +import net.minecraft.world.inventory.SimpleContainerData; +import net.minecraft.world.inventory.Slot; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.items.CapabilityItemHandler; +import net.minecraftforge.items.SlotItemHandler; + +public class FruitPressMenu extends AbstractContainerMenu { + + private final FruitPressBlockEntity blockEntity; + private final FruitPressBlock block; + private final Level level; + private final ContainerData data; + + private FluidStack fluidStack0; + + public FruitPressMenu(int containerId, Inventory inventory, FriendlyByteBuf extraData) { + this(containerId, inventory, inventory.player.level.getBlockEntity(extraData.readBlockPos()), new SimpleContainerData(2)); + } + + public FruitPressMenu(int containerId, Inventory inventory, BlockEntity blockEntity, ContainerData data) { + super(GrowthcraftCellarMenus.FRUIT_PRESS_MENU.get(), containerId); + + this.blockEntity = (FruitPressBlockEntity) blockEntity; + this.block = (FruitPressBlock) inventory.player.level.getBlockEntity(this.blockEntity.getBlockPos()).getBlockState().getBlock(); + this.level = inventory.player.level; + this.data = data; + + this.fluidStack0 = this.blockEntity.getFluidStackInTank(0); + + addPlayerInventory(inventory); + addPlayerHotbar(inventory); + + this.blockEntity.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY).ifPresent(handler -> { + // 1 Input Slot + this.addSlot(new SlotItemHandler(handler, 0, 52, 53)); + } + ); + + // Add our block fluid tanks. + addDataSlots(data); + } + + public FruitPressBlockEntity getBlockEntity() { + return this.blockEntity; + } + + public void setFluid(int tankID, FluidStack fluidStack) throws NullPointerException { + if (tankID == 0) { + this.fluidStack0 = fluidStack; + } else { + throw new NullPointerException(String.format("FermentationBarrelMenu setFluidStack at <%s> does not have a fluid tank with the ID of %d!", blockEntity.getBlockPos(), tankID)); + } + } + + public FluidStack getFluidStack(int tankID) { + return switch (tankID) { + case 0 -> this.blockEntity.getFluidStackInTank(0); + default -> + throw new NullPointerException(String.format("FruitPressMenu getFluidStack at <%s> does not have a fluid tank with the ID of %d!", blockEntity.getBlockPos(), tankID)); + }; + } + + @OnlyIn(Dist.CLIENT) + public int getProgressionScaled(int size) { + return this.blockEntity.getTickClock("current") != 0 && this.blockEntity.getTickClock("max") != 0 + ? this.blockEntity.getTickClock("current") * size / this.blockEntity.getTickClock("max") + : 0; + } + + // CREDIT GOES TO: diesieben07 | https://github.com/diesieben07/SevenCommons + // must assign a slot number to each of the slots used by the GUI. + // For this container, we can see both the tile inventory's slots, the player inventory slots and the hotbar. + // Each time we add a Slot to the container, it automatically increases the slotIndex, which means + // 0 - 8 = hotbar slots (which will map to the InventoryPlayer slot numbers 0 - 8) + // 9 - 35 = player inventory slots (which map to the InventoryPlayer slot numbers 9 - 35) + // 36 - 44 = TileInventory slots, which map to our TileEntity slot numbers 0 - 8) + private static final int HOTBAR_SLOT_COUNT = 9; + private static final int PLAYER_INVENTORY_ROW_COUNT = 3; + private static final int PLAYER_INVENTORY_COLUMN_COUNT = 9; + private static final int PLAYER_INVENTORY_SLOT_COUNT = PLAYER_INVENTORY_COLUMN_COUNT * PLAYER_INVENTORY_ROW_COUNT; + private static final int VANILLA_SLOT_COUNT = HOTBAR_SLOT_COUNT + PLAYER_INVENTORY_SLOT_COUNT; + private static final int VANILLA_FIRST_SLOT_INDEX = 0; + private static final int TE_INVENTORY_FIRST_SLOT_INDEX = VANILLA_FIRST_SLOT_INDEX + VANILLA_SLOT_COUNT; + + private static final int TE_INVENTORY_SLOT_COUNT = 1; // must be the number of slots you have! + + @Override + public ItemStack quickMoveStack(Player playerIn, int index) { + Slot sourceSlot = slots.get(index); + if (sourceSlot == null || !sourceSlot.hasItem()) return ItemStack.EMPTY; //EMPTY_ITEM + ItemStack sourceStack = sourceSlot.getItem(); + ItemStack copyOfSourceStack = sourceStack.copy(); + + // Check if the slot clicked is one of the vanilla container slots + if (index < VANILLA_FIRST_SLOT_INDEX + VANILLA_SLOT_COUNT) { + // This is a vanilla container slot so merge the stack into the tile inventory + if (!moveItemStackTo(sourceStack, TE_INVENTORY_FIRST_SLOT_INDEX, TE_INVENTORY_FIRST_SLOT_INDEX + + TE_INVENTORY_SLOT_COUNT, false)) { + return ItemStack.EMPTY; // EMPTY_ITEM + } + } else if (index < TE_INVENTORY_FIRST_SLOT_INDEX + TE_INVENTORY_SLOT_COUNT) { + // This is a TE slot so merge the stack into the players inventory + if (!moveItemStackTo(sourceStack, VANILLA_FIRST_SLOT_INDEX, VANILLA_FIRST_SLOT_INDEX + VANILLA_SLOT_COUNT, false)) { + return ItemStack.EMPTY; + } + } else { + System.out.println("Invalid slotIndex:" + index); + return ItemStack.EMPTY; + } + // If stack size == 0 (the entire stack was moved) set slot contents to null + if (sourceStack.getCount() == 0) { + sourceSlot.set(ItemStack.EMPTY); + } else { + sourceSlot.setChanged(); + } + sourceSlot.onTake(playerIn, sourceStack); + return copyOfSourceStack; + } + + @Override + public boolean stillValid(Player player) { + return stillValid( + ContainerLevelAccess.create( + this.level, + this.blockEntity.getBlockPos() + ), + player, + this.block + ); + } + + private void addPlayerInventory(Inventory playerInventory) { + for (int i = 0; i < 3; ++i) { + for (int l = 0; l < 9; ++l) { + this.addSlot(new Slot(playerInventory, l + i * 9 + 9, 8 + l * 18, 84 + i * 18)); + } + } + } + + private void addPlayerHotbar(Inventory playerInventory) { + for (int i = 0; i < 9; ++i) { + this.addSlot(new Slot(playerInventory, i, 8 + i * 18, 142)); + } + } +} diff --git a/src/main/java/growthcraft/cellar/screen/container/RoasterMenu.java b/src/main/java/growthcraft/cellar/screen/container/RoasterMenu.java new file mode 100644 index 0000000..9196e4f --- /dev/null +++ b/src/main/java/growthcraft/cellar/screen/container/RoasterMenu.java @@ -0,0 +1,154 @@ +package growthcraft.cellar.screen.container; + +import org.jetbrains.annotations.NotNull; + +import growthcraft.cellar.block.RoasterBlock; +import growthcraft.cellar.block.entity.RoasterBlockEntity; +import growthcraft.cellar.init.GrowthcraftCellarMenus; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.world.entity.player.Inventory; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.inventory.AbstractContainerMenu; +import net.minecraft.world.inventory.ContainerData; +import net.minecraft.world.inventory.ContainerLevelAccess; +import net.minecraft.world.inventory.SimpleContainerData; +import net.minecraft.world.inventory.Slot; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.items.CapabilityItemHandler; +import net.minecraftforge.items.SlotItemHandler; + +public class RoasterMenu extends AbstractContainerMenu { + + private final RoasterBlockEntity blockEntity; + private final RoasterBlock block; + private final Level level; +// private final ContainerData data; + + public RoasterMenu(int containerId, Inventory inventory, FriendlyByteBuf extraData) { + this(containerId, inventory, inventory.player.level.getBlockEntity(extraData.readBlockPos()), new SimpleContainerData(2)); + } + + public RoasterMenu(int containerId, Inventory inventory, BlockEntity blockEntity, ContainerData data) { + super(GrowthcraftCellarMenus.ROASTER_MENU.get(), containerId); + + this.blockEntity = (RoasterBlockEntity) blockEntity; + this.block = (RoasterBlock) inventory.player.level.getBlockEntity(this.blockEntity.getBlockPos()).getBlockState().getBlock(); + this.level = inventory.player.level; +// this.data = data; + + addPlayerInventory(inventory); + addPlayerHotbar(inventory); + + this.blockEntity.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY).ifPresent(handler -> { + // 1 Input Slot + this.addSlot(new SlotItemHandler(handler, 0, 54, 42)); + this.addSlot(new SlotItemHandler(handler, 1, 106, 42)); + }); + + addDataSlots(data); + + } + + public RoasterBlockEntity getBlockEntity() { + return this.blockEntity; + } + + @OnlyIn(Dist.CLIENT) + public int getProgressionScaled(int size) { + return this.blockEntity.getTickClock("current") != 0 && this.blockEntity.getTickClock("max") != 0 + ? this.blockEntity.getTickClock("current") * size / this.blockEntity.getTickClock("max") + : 0; + } + + // CREDIT GOES TO: diesieben07 | https://github.com/diesieben07/SevenCommons + // must assign a slot number to each of the slots used by the GUI. + // For this container, we can see both the tile inventory's slots, the player inventory slots and the hotbar. + // Each time we add a Slot to the container, it automatically increases the slotIndex, which means + // 0 - 8 = hotbar slots (which will map to the InventoryPlayer slot numbers 0 - 8) + // 9 - 35 = player inventory slots (which map to the InventoryPlayer slot numbers 9 - 35) + // 36 - 44 = TileInventory slots, which map to our TileEntity slot numbers 0 - 8) + private static final int HOTBAR_SLOT_COUNT = 9; + private static final int PLAYER_INVENTORY_ROW_COUNT = 3; + private static final int PLAYER_INVENTORY_COLUMN_COUNT = 9; + private static final int PLAYER_INVENTORY_SLOT_COUNT = PLAYER_INVENTORY_COLUMN_COUNT * PLAYER_INVENTORY_ROW_COUNT; + private static final int VANILLA_SLOT_COUNT = HOTBAR_SLOT_COUNT + PLAYER_INVENTORY_SLOT_COUNT; + private static final int VANILLA_FIRST_SLOT_INDEX = 0; + private static final int TE_INVENTORY_FIRST_SLOT_INDEX = VANILLA_FIRST_SLOT_INDEX + VANILLA_SLOT_COUNT; + + private static final int TE_INVENTORY_SLOT_COUNT = 2; // must be the number of slots you have! + + @Override + public @NotNull ItemStack quickMoveStack(Player playerIn, int index) { + Slot sourceSlot = slots.get(index); + if (!sourceSlot.hasItem()) return ItemStack.EMPTY; //EMPTY_ITEM + ItemStack sourceStack = sourceSlot.getItem(); + ItemStack copyOfSourceStack = sourceStack.copy(); + + // Check if the slot clicked is one of the vanilla container slots + if (index < VANILLA_FIRST_SLOT_INDEX + VANILLA_SLOT_COUNT) { + // This is a vanilla container slot so merge the stack into the tile inventory + if (!moveItemStackTo(sourceStack, TE_INVENTORY_FIRST_SLOT_INDEX, TE_INVENTORY_FIRST_SLOT_INDEX + + TE_INVENTORY_SLOT_COUNT, false)) { + return ItemStack.EMPTY; // EMPTY_ITEM + } + } else if (index < TE_INVENTORY_FIRST_SLOT_INDEX + TE_INVENTORY_SLOT_COUNT) { + // This is a TE slot so merge the stack into the players inventory + if (!moveItemStackTo(sourceStack, VANILLA_FIRST_SLOT_INDEX, VANILLA_FIRST_SLOT_INDEX + VANILLA_SLOT_COUNT, false)) { + return ItemStack.EMPTY; + } + } else { + System.out.println("Invalid slotIndex:" + index); + return ItemStack.EMPTY; + } + // If stack size == 0 (the entire stack was moved) set slot contents to null + if (sourceStack.getCount() == 0) { + sourceSlot.set(ItemStack.EMPTY); + } else { + sourceSlot.setChanged(); + } + sourceSlot.onTake(playerIn, sourceStack); + return copyOfSourceStack; + } + + @Override + public boolean stillValid(@NotNull Player player) { + return stillValid( + ContainerLevelAccess.create( + this.level, + this.blockEntity.getBlockPos() + ), + player, + this.block + ); + } + + private void addPlayerInventory(Inventory playerInventory) { + for (int i = 0; i < 3; ++i) { + for (int l = 0; l < 9; ++l) { + this.addSlot(new Slot(playerInventory, l + i * 9 + 9, 8 + l * 18, 84 + i * 18)); + } + } + } + + private void addPlayerHotbar(Inventory playerInventory) { + for (int i = 0; i < 9; ++i) { + this.addSlot(new Slot(playerInventory, i, 8 + i * 18, 142)); + } + } + + public boolean isHeated() { + return this.blockEntity.isHeated(); + } + + public String getRoastingLevel() { + return String.valueOf(this.blockEntity.getCurrentRoastingLevel()); + } + + public int getPercentProgress() { + return this.blockEntity.getPercentProgress(); + } +} diff --git a/src/main/java/growthcraft/cellar/shared/Reference.java b/src/main/java/growthcraft/cellar/shared/Reference.java new file mode 100644 index 0000000..8163c5d --- /dev/null +++ b/src/main/java/growthcraft/cellar/shared/Reference.java @@ -0,0 +1,174 @@ +package growthcraft.cellar.shared; + +import growthcraft.lib.utils.ColorUtils; +import org.codehaus.plexus.util.StringUtils; + +public class Reference { + public static final String NAME_SHORT = "cellar"; + + public static final String MODID = growthcraft.core.shared.Reference.MODID + "_" + NAME_SHORT; + + public static final String NAME = String.format("%s %s", + growthcraft.core.shared.Reference.NAME, + StringUtils.capitalise(NAME_SHORT)); + + public static final String VERSION = growthcraft.core.shared.Reference.VERSION; + + public static class UnlocalizedName { + public static final String AMBER_ALE = "amber_ale"; + public static final String AMBER_LAGER = "amber_lager"; + public static final String AMBER_WORT = "amber_wort"; + public static final String BREW_KETTLE = "brew_kettle"; + public static final String BREW_KETTLE_LID = "brew_kettle_lid"; + public static final String BREW_KETTLE_RECIPE = "brew_kettle_recipe"; + public static final String BROWN_ALE = "brown_ale"; + public static final String BROWN_LAGER = "brown_lager"; + public static final String BROWN_WORT = "brown_wort"; + public static final String COPPER_ALE = "copper_ale"; + public static final String COPPER_LAGER = "copper_lager"; + public static final String COPPER_WORT = "copper_wort"; + public static final String CULTURE_JAR = "culture_jar"; + public static final String CULTURE_JAR_RECIPE = "culture_jar_recipe"; + public static final String CULTURE_JAR_STARTER_RECIPE = "culture_jar_starter_recipe"; + public static final String DARK_LAGER = "dark_lager"; + public static final String DARK_WORT = "dark_wort"; + public static final String DEEP_AMBER_WORT = "deep_amber_wort"; + public static final String DEEP_COPPER_WORT = "deep_copper_wort"; + public static final String FERMENT_BARREL = "fermentation_barrel"; + public static final String FERMENT_BARREL_ACACIA = "fermentation_barrel_acacia"; + public static final String FERMENT_BARREL_BIRCH = "fermentation_barrel_birch"; + public static final String FERMENT_BARREL_CRIMSON = "fermentation_barrel_crimson"; + public static final String FERMENT_BARREL_DARK_OAK = "fermentation_barrel_dark_oak"; + public static final String FERMENT_BARREL_JUNGLE = "fermentation_barrel_jungle"; + public static final String FERMENT_BARREL_OAK = "fermentation_barrel_oak"; + public static final String FERMENT_BARREL_RECIPE = "fermentation_barrel_recipe"; + public static final String FERMENT_BARREL_SPRUCE = "fermentation_barrel_spruce"; + public static final String FERMENT_BARREL_WARPED = "fermentation_barrel_WARPED"; + public static final String FRUIT_PRESS = "fruit_press"; + public static final String FRUIT_PRESS_PISTON = "fruit_press_piston"; + public static final String FRUIT_PRESS_RECIPE = "fruit_press_recipe"; + public static final String GOLDEN_WORT = "golden_wort"; + public static final String GRAIN = "grain"; + public static final String GRAIN_AMBER = "grain_amber"; + public static final String GRAIN_BROWN = "grain_brown"; + public static final String GRAIN_COPPER = "grain_copper"; + public static final String GRAIN_DARK = "grain_dark"; + public static final String GRAIN_DEEP_AMBER = "grain_deep_amber"; + public static final String GRAIN_DEEP_COPPER = "grain_deep_copper"; + public static final String GRAIN_GOLDEN = "grain_golden"; + public static final String GRAIN_PALE_GOLDEN = "grain_pale_golden"; + public static final String GRAPE_PURPLE = "grape_purple"; + public static final String GRAPE_RED = "grape_red"; + public static final String GRAPE_SEEDS_PURPLE = "grape_seeds_purple"; + public static final String GRAPE_SEEDS_RED = "grape_seeds_red"; + public static final String GRAPE_SEEDS_WHITE = "grape_seeds_white"; + public static final String GRAPE_VINE = "grape_vine"; + public static final String GRAPE_VINE_CROP = "grape_vine_crop"; + public static final String GRAPE_VINE_LEAVES = "grape_vine_leaves"; + public static final String GRAPE_WHITE = "grape_white"; + public static final String HOPPED_GOLDEN_WORT = "hopped_golden_wort"; + public static final String HOPS = "hops"; + public static final String HOPS_SEEDS = "hops_seeds"; + public static final String HOPS_VINE = "hops_vine"; + public static final String IPA_ALE = "ipa_ale"; + public static final String LOOT_SERIALIZER_BLOCK = "global_block_loot_modifier"; + public static final String OLD_PORT_ALE = "old_port_ale"; + public static final String PALE_ALE = "pale_ale"; + public static final String PALE_GOLDEN_WORT = "pale_golden_wort"; + public static final String PALE_LAGER = "pale_lager"; + public static final String PILSNER_LAGER = "pilsner_lager"; + public static final String POTION_ALE = "potion_ale"; + public static final String POTION_LAGER = "potion_lager"; + public static final String POTION_WINE = "potion_wine"; + public static final String PURPLE_GRAPE_JUICE = "purple_grape_juice"; + public static final String PURPLE_GRAPE_VINE = "purple_grape_vine"; + public static final String PURPLE_GRAPE_VINE_FRUIT = "purple_grape_vine_crop"; + public static final String PURPLE_GRAPE_VINE_LEAVES = "purple_grape_vine_leaves"; + public static final String PURPLE_GRAPE_WINE = "purple_grape_wine"; + public static final String RED_GRAPE_JUICE = "red_grape_juice"; + public static final String RED_GRAPE_VINE = "red_grape_vine"; + public static final String RED_GRAPE_VINE_FRUIT = "red_grape_vine_crop"; + public static final String RED_GRAPE_VINE_LEAVES = "red_grape_vine_leaves"; + public static final String RED_GRAPE_WINE = "red_grape_wine"; + public static final String ROASTER = "roaster"; + public static final String ROASTER_RECIPE = "roaster_recipe"; + public static final String STOUT_ALE = "stout_ale"; + public static final String VIENNA_LAGER = "vienna_lager"; + public static final String WHITE_GRAPE_JUICE = "white_grape_juice"; + public static final String WHITE_GRAPE_VINE = "white_grape_vine"; + public static final String WHITE_GRAPE_VINE_FRUIT = "white_grape_vine_crop"; + public static final String WHITE_GRAPE_VINE_LEAVES = "white_grape_vine_leaves"; + public static final String WHITE_GRAPE_WINE = "white_grape_wine"; + public static final String WORT = "wort"; + public static final String YEAST_BAYANUS = "yeast_bayanus"; + public static final String YEAST_BAYANUS_ETHEREAL = "yeast_bayanus_ethereal"; + public static final String YEAST_BREWERS = "yeast_brewers"; + public static final String YEAST_BREWERS_ETHEREAL = "yeast_brewers_ethereal"; + public static final String YEAST_ETHEREAL = "yeast_ethereal"; + public static final String YEAST_LAGER = "yeast_lager"; + public static final String YEAST_LAGER_ETHEREAL = "yeast_lager_ethereal"; + public static final String TAG_HEATSOURCES = "heat_sources"; + public static final String KINDLING = "kindling"; + + private UnlocalizedName() { + /* Disable Automatic Creation of Public Constructor */ + } + } + + public static class FluidColor { + public static final ColorUtils.GrowthcraftColor AMBER_ALE = new ColorUtils.GrowthcraftColor(0xFFBC6633); + public static final ColorUtils.GrowthcraftColor AMBER_LAGER = new ColorUtils.GrowthcraftColor(0xFFAB5E2F); + public static final ColorUtils.GrowthcraftColor AMBER_WORT = new ColorUtils.GrowthcraftColor(0xFFE5C7A2); + public static final ColorUtils.GrowthcraftColor BROWN_ALE = new ColorUtils.GrowthcraftColor(0xFF5C311A); + public static final ColorUtils.GrowthcraftColor BROWN_LAGER = new ColorUtils.GrowthcraftColor(0xFF401F1C); + public static final ColorUtils.GrowthcraftColor BROWN_WORT = new ColorUtils.GrowthcraftColor(0xFF594732); + public static final ColorUtils.GrowthcraftColor COPPER_ALE = new ColorUtils.GrowthcraftColor(0xFF8E4B31); + public static final ColorUtils.GrowthcraftColor COPPER_LAGER = new ColorUtils.GrowthcraftColor(0xFF6F3D1F); + public static final ColorUtils.GrowthcraftColor COPPER_WORT = new ColorUtils.GrowthcraftColor(0xFF936B53); + public static final ColorUtils.GrowthcraftColor DARK_LAGER = new ColorUtils.GrowthcraftColor(0xFF211515); + public static final ColorUtils.GrowthcraftColor DARK_WORT = new ColorUtils.GrowthcraftColor(0xFF452A19); + public static final ColorUtils.GrowthcraftColor DEEP_AMBER_WORT = new ColorUtils.GrowthcraftColor(0xFFCFA26F); + public static final ColorUtils.GrowthcraftColor DEEP_COPPER_WORT = new ColorUtils.GrowthcraftColor(0xFF805C2F); + public static final ColorUtils.GrowthcraftColor GOLDEN_WORT = new ColorUtils.GrowthcraftColor(0xFFF6D02E); + public static final ColorUtils.GrowthcraftColor HOPPED_GOLDEN_WORT = new ColorUtils.GrowthcraftColor(0xFFF6FE2E); + public static final ColorUtils.GrowthcraftColor IPA_ALE = new ColorUtils.GrowthcraftColor(0xFFD2BD2C); + public static final ColorUtils.GrowthcraftColor OLD_PORT_ALE = new ColorUtils.GrowthcraftColor(0xFF8E3616); + public static final ColorUtils.GrowthcraftColor PALE_ALE = new ColorUtils.GrowthcraftColor(0xFFFBF855); + public static final ColorUtils.GrowthcraftColor PALE_GOLDEN_WORT = new ColorUtils.GrowthcraftColor(0xFFFBF855); + public static final ColorUtils.GrowthcraftColor PALE_LAGER = new ColorUtils.GrowthcraftColor(0xFFF3F33F); + public static final ColorUtils.GrowthcraftColor PILSNER_LAGER = new ColorUtils.GrowthcraftColor(0xFFF6D02E); + public static final ColorUtils.GrowthcraftColor PURPLE_GRAPE_JUICE = new ColorUtils.GrowthcraftColor(0xFF682961); + public static final ColorUtils.GrowthcraftColor PURPLE_GRAPE_WINE = new ColorUtils.GrowthcraftColor(0xFF562251); + public static final ColorUtils.GrowthcraftColor RED_GRAPE_JUICE = new ColorUtils.GrowthcraftColor(0xFFA63F4A); + public static final ColorUtils.GrowthcraftColor RED_GRAPE_WINE = new ColorUtils.GrowthcraftColor(0xFF8A343D); + public static final ColorUtils.GrowthcraftColor STOUT_ALE = new ColorUtils.GrowthcraftColor(0xFF0E0A07); + public static final ColorUtils.GrowthcraftColor VIENNA_LAGER = new ColorUtils.GrowthcraftColor(0xFF904730); + public static final ColorUtils.GrowthcraftColor WHITE_GRAPE_JUICE = new ColorUtils.GrowthcraftColor(0xFFB4C91C); + public static final ColorUtils.GrowthcraftColor WHITE_GRAPE_WINE = new ColorUtils.GrowthcraftColor(0xFF96A817); + public static final ColorUtils.GrowthcraftColor WORT = new ColorUtils.GrowthcraftColor(0xFFD0AF4E); + + private FluidColor() { + /* Disable Automatic Creation of Public Constructor */ + } + } + + public static class GrainColor { + public static final ColorUtils.GrowthcraftColor GRAIN = new ColorUtils.GrowthcraftColor(0xFF595903); + public static final ColorUtils.GrowthcraftColor GRAIN_AMBER = new ColorUtils.GrowthcraftColor(0xFFBBA04E); + public static final ColorUtils.GrowthcraftColor GRAIN_BROWN = new ColorUtils.GrowthcraftColor(0xFF3F2F15); + public static final ColorUtils.GrowthcraftColor GRAIN_COPPER = new ColorUtils.GrowthcraftColor(0xFF7c6430); + public static final ColorUtils.GrowthcraftColor GRAIN_DARK = new ColorUtils.GrowthcraftColor(0xFF241802); + public static final ColorUtils.GrowthcraftColor GRAIN_DEEP_AMBER = new ColorUtils.GrowthcraftColor(0xFF9b813e); + public static final ColorUtils.GrowthcraftColor GRAIN_DEEP_COPPER = new ColorUtils.GrowthcraftColor(0xFF5d4922); + public static final ColorUtils.GrowthcraftColor GRAIN_GOLDEN = new ColorUtils.GrowthcraftColor(0xFFdbc05d); + public static final ColorUtils.GrowthcraftColor GRAIN_PALE_GOLDEN = new ColorUtils.GrowthcraftColor(0xFFfae16e); + + private GrainColor() { + /* Disable Automatic Creation of Public Constructor */ + } + } + + private Reference() { + /* Disable Automatic Creation of Public Constructor */ + } +} diff --git a/src/main/java/growthcraft/core/Growthcraft.java b/src/main/java/growthcraft/core/Growthcraft.java new file mode 100644 index 0000000..902423e --- /dev/null +++ b/src/main/java/growthcraft/core/Growthcraft.java @@ -0,0 +1,53 @@ +package growthcraft.core; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import growthcraft.core.init.GrowthcraftBlockEntities; +import growthcraft.core.init.GrowthcraftBlocks; +import growthcraft.core.init.GrowthcraftItems; +import growthcraft.core.init.GrowthcraftLootModifiers; +import growthcraft.core.init.config.GrowthcraftConfig; +import growthcraft.core.shared.Reference; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.event.server.ServerStartingEvent; +import net.minecraftforge.eventbus.api.IEventBus; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; +import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; +import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; + +@Mod(Reference.MODID) +@Mod.EventBusSubscriber(modid = Reference.MODID, bus = Mod.EventBusSubscriber.Bus.MOD) +public class Growthcraft { + public static final Logger LOGGER = LogManager.getLogger(Reference.MODID); + + public Growthcraft() { + IEventBus modEventBus = FMLJavaModLoadingContext.get().getModEventBus(); + modEventBus.addListener(this::setup); + modEventBus.addListener(this::clientSetupEvent); + + GrowthcraftConfig.loadConfig(); + + GrowthcraftBlocks.BLOCKS.register(modEventBus); + GrowthcraftItems.ITEMS.register(modEventBus); + GrowthcraftBlockEntities.BLOCK_ENTITIES.register(modEventBus); + GrowthcraftLootModifiers.register(modEventBus); + + MinecraftForge.EVENT_BUS.register(this); + } + + private void clientSetupEvent(final FMLClientSetupEvent event) { + // Do nothing for now ... + } + + private void setup(final FMLCommonSetupEvent event) { + // Do Nothing + } + + @SubscribeEvent + public void onServerStarting(ServerStartingEvent event) { + // Do nothing + } +} diff --git a/src/main/java/growthcraft/core/block/RopeBlock.java b/src/main/java/growthcraft/core/block/RopeBlock.java new file mode 100644 index 0000000..9715b0f --- /dev/null +++ b/src/main/java/growthcraft/core/block/RopeBlock.java @@ -0,0 +1,184 @@ +package growthcraft.core.block; + +import growthcraft.core.Growthcraft; +import growthcraft.core.block.entity.RopeBlockEntity; +import growthcraft.core.init.GrowthcraftBlockEntities; +import growthcraft.core.init.GrowthcraftTags; +import growthcraft.core.utils.BlockPropertiesUtils; +import growthcraft.lib.utils.BlockStateUtils; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.LevelAccessor; +import net.minecraft.world.level.block.*; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.StateDefinition; +import net.minecraft.world.level.block.state.properties.BlockStateProperties; +import net.minecraft.world.level.block.state.properties.BooleanProperty; +import net.minecraft.world.level.material.FluidState; +import net.minecraft.world.level.material.Fluids; +import net.minecraft.world.level.material.PushReaction; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.Shapes; +import net.minecraft.world.phys.shapes.VoxelShape; +import org.jetbrains.annotations.NotNull; + +import javax.annotation.Nullable; +import javax.annotation.ParametersAreNonnullByDefault; +import java.util.ArrayList; +import java.util.Map; + +public class RopeBlock extends BaseEntityBlock implements SimpleWaterloggedBlock { + + public static final BooleanProperty NORTH = BooleanProperty.create("north"); + public static final BooleanProperty EAST = BooleanProperty.create("east"); + public static final BooleanProperty SOUTH = BooleanProperty.create("south"); + public static final BooleanProperty WEST = BooleanProperty.create("west"); + public static final BooleanProperty UP = BooleanProperty.create("up"); + public static final BooleanProperty DOWN = BooleanProperty.create("down"); + public static final BooleanProperty KNOT = BooleanProperty.create("knot"); + + public static final BooleanProperty WATERLOGGED = BlockStateProperties.WATERLOGGED; + + public static final VoxelShape KNOT_BOUNDING_BOX = Block.box(7.0D, 7.0D, 7.0D, 9.0D, 9.0D, 9.0D); + public static final VoxelShape NORTH_BOUNDING_BOX = Block.box(7.0D, 7.0D, 0.0D, 9.0D, 9.0D, 7.0D); + public static final VoxelShape EAST_BOUNDING_BOX = Block.box(9.0D, 7.0D, 7.0D, 16.0D, 9.0D, 9.0D); + public static final VoxelShape SOUTH_BOUNDING_BOX = Block.box(7.0D, 7.0D, 9.0D, 9.0D, 9.0D, 16.0D); + public static final VoxelShape WEST_BOUNDING_BOX = Block.box(0.0D, 7.0D, 7.0D, 7.0D, 9.0D, 9.0D); + public static final VoxelShape UP_BOUNDING_BOX = Block.box(7.0D, 9.0D, 7.0D, 9.0D, 16.0D, 9.0D); + public static final VoxelShape DOWN_BOUNDING_BOX = Block.box(7.0D, 0.0D, 7.0D, 9.0D, 7.0D, 9.0D); + public static final VoxelShape KNOT_FENCE_BOUNDING_BOX = Block.box(5.0D, 6.0D, 5.0D, 11.0D, 14.0D, 11.0D); + public static final VoxelShape FENCE_POST_BOUNDING_BOX = Block.box(6.0D, 0.0D, 6.0D, 10.0D, 16.0D, 10.0D); + + public RopeBlock() { + this(BlockPropertiesUtils.getInitProperties("rope_block", Blocks.OAK_FENCE)); + this.registerDefaultState(this.stateDefinition.any() + .setValue(NORTH, false) + .setValue(EAST, false) + .setValue(SOUTH, false) + .setValue(WEST, false) + .setValue(UP, false) + .setValue(DOWN, false) + .setValue(KNOT, false) + .setValue(WATERLOGGED, false) + ); + } + + public RopeBlock(Properties properties) { + super(properties); + } + + @Override + public RenderShape getRenderShape(BlockState state) { + return RenderShape.MODEL; + } + + @Override + public BlockState getStateForPlacement(BlockPlaceContext context) { + return this.getActualBlockState(context.getLevel(), context.getClickedPos()); + } + + public BlockState getActualBlockState(Level level, BlockPos blockPos) { + Map surroundingStateMap = + BlockStateUtils.getSurroundingRopeConnections(level, blockPos); + + RopeBlockEntity entity = (RopeBlockEntity) level.getBlockEntity(blockPos); + + return this.defaultBlockState() + .setValue(NORTH, surroundingStateMap.get("north")) + .setValue(EAST, surroundingStateMap.get("east")) + .setValue(SOUTH, surroundingStateMap.get("south")) + .setValue(WEST, surroundingStateMap.get("west")) + .setValue(UP, surroundingStateMap.get("above")) + .setValue(DOWN, surroundingStateMap.get("below")) + .setValue(KNOT, entity != null && entity.hasFenceItemStack()); + } + + @Override + @ParametersAreNonnullByDefault + public @NotNull BlockState updateShape(BlockState blockState, Direction directionFromNeighbor, BlockState neighborBlockState, LevelAccessor levelAccessor, BlockPos blockPos, BlockPos neighborBlockPos) { + if (Boolean.TRUE.equals(blockState.getValue(WATERLOGGED))) { + levelAccessor.scheduleTick(blockPos, Fluids.WATER, Fluids.WATER.getTickDelay(levelAccessor)); + } + + Level level = (Level) levelAccessor; + BlockState actualBlockState = this.getActualBlockState(level, blockPos); + level.setBlock(blockPos, actualBlockState, Block.UPDATE_ALL); + + return this.getActualBlockState((Level) levelAccessor, blockPos); + } + + @Override + protected void createBlockStateDefinition(StateDefinition.Builder blockStateBuilder) { + blockStateBuilder.add(NORTH, EAST, SOUTH, WEST, UP, DOWN, KNOT, WATERLOGGED); + } + + @Override + public PushReaction getPistonPushReaction(BlockState blockState) { + return PushReaction.DESTROY; + } + + @Override + public FluidState getFluidState(BlockState blockState) { + return Boolean.TRUE.equals(blockState.getValue(WATERLOGGED)) + ? Fluids.WATER.getSource(false) + : super.getFluidState(blockState); + } + + @Nullable + @Override + public BlockEntity newBlockEntity(BlockPos blockPos, BlockState blockState) { + return GrowthcraftBlockEntities.ROPE_BLOCK_ENTITY.get().create(blockPos, blockState); + } + + @Override + public void onRemove(BlockState blockState, Level level, BlockPos blockPos, BlockState newBlockState, boolean isMoving) { + if (blockState.getBlock() != newBlockState.getBlock()) { + try { + RopeBlockEntity blockEntity = (RopeBlockEntity) level.getBlockEntity(blockPos); + blockEntity.dropItems(); + } catch (Exception ex) { + Growthcraft.LOGGER.error(String.format("Invalid blockEntity type at %s, expected RopeBlockEntity", blockPos)); + } + } + super.onRemove(blockState, level, blockPos, newBlockState, isMoving); + } + + @Override + public VoxelShape getShape(BlockState state, BlockGetter blockGetter, BlockPos pos, CollisionContext context) { + ArrayList voxelShapeArrayList = new ArrayList(); + + BlockPos northBlockPos = pos.north(); + BlockPos eastBlockPos = pos.east(); + BlockPos southBlockPos = pos.south(); + BlockPos westBlockPos = pos.west(); + BlockPos upBlockPos = pos.above(); + BlockPos downBlockPos = pos.below(); + + BlockState northBlockState = blockGetter.getBlockState(northBlockPos); + BlockState eastBlockState = blockGetter.getBlockState(eastBlockPos); + BlockState southBlockState = blockGetter.getBlockState(southBlockPos); + BlockState westBlockState = blockGetter.getBlockState(westBlockPos); + BlockState upBlockState = blockGetter.getBlockState(upBlockPos); + BlockState downBlockState = blockGetter.getBlockState(downBlockPos); + + if(northBlockState.is(GrowthcraftTags.Blocks.ROPE)) voxelShapeArrayList.add(NORTH_BOUNDING_BOX); + if(eastBlockState.is(GrowthcraftTags.Blocks.ROPE)) voxelShapeArrayList.add(EAST_BOUNDING_BOX); + if(southBlockState.is(GrowthcraftTags.Blocks.ROPE)) voxelShapeArrayList.add(SOUTH_BOUNDING_BOX); + if(westBlockState.is(GrowthcraftTags.Blocks.ROPE)) voxelShapeArrayList.add(WEST_BOUNDING_BOX); + if(upBlockState.is(GrowthcraftTags.Blocks.ROPE)) voxelShapeArrayList.add(UP_BOUNDING_BOX); + if(downBlockState.is(GrowthcraftTags.Blocks.ROPE)) voxelShapeArrayList.add(DOWN_BOUNDING_BOX); + if(state.getValue(KNOT).booleanValue()) { + voxelShapeArrayList.add(KNOT_FENCE_BOUNDING_BOX); + voxelShapeArrayList.add(FENCE_POST_BOUNDING_BOX); + } + + VoxelShape[] voxelShapes = new VoxelShape[voxelShapeArrayList.size()]; + voxelShapes = voxelShapeArrayList.toArray(voxelShapes); + + return Shapes.or(KNOT_BOUNDING_BOX, voxelShapes); + } +} diff --git a/src/main/java/growthcraft/core/block/entity/RopeBlockEntity.java b/src/main/java/growthcraft/core/block/entity/RopeBlockEntity.java new file mode 100644 index 0000000..82e2e1d --- /dev/null +++ b/src/main/java/growthcraft/core/block/entity/RopeBlockEntity.java @@ -0,0 +1,116 @@ +package growthcraft.core.block.entity; + +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import growthcraft.core.init.GrowthcraftBlockEntities; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.Connection; +import net.minecraft.network.protocol.Packet; +import net.minecraft.network.protocol.game.ClientGamePacketListener; +import net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket; +import net.minecraft.world.Containers; +import net.minecraft.world.SimpleContainer; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.common.util.LazyOptional; +import net.minecraftforge.items.CapabilityItemHandler; +import net.minecraftforge.items.IItemHandler; +import net.minecraftforge.items.ItemStackHandler; + +public class RopeBlockEntity extends BlockEntity { + + private final ItemStackHandler itemStackHandler = new ItemStackHandler(1) { + @Override + protected void onContentsChanged(int slot) { + setChanged(); + } + }; + + private LazyOptional itemHandlerLazyOptional = LazyOptional.empty(); + + public RopeBlockEntity(BlockPos blockPos, BlockState blockState) { + this(GrowthcraftBlockEntities.ROPE_BLOCK_ENTITY.get(), blockPos, blockState); + } + + public RopeBlockEntity(BlockEntityType blockEntityType, BlockPos blockPos, BlockState blockState) { + super(blockEntityType, blockPos, blockState); + } + + public void setFenceItemStack(ItemStack stack) { + this.itemStackHandler.insertItem(0, stack, false); + } + + public boolean hasFenceItemStack() { + return this.itemStackHandler.getStackInSlot(0).copy().getCount() > 0; + } + + @Nullable + @Override + public Packet getUpdatePacket() { + return ClientboundBlockEntityDataPacket.create(this); + } + + @Override + public CompoundTag getUpdateTag() { + return this.serializeNBT(); + } + + @Override + public void handleUpdateTag(CompoundTag tag) { + this.load(tag); + } + + @Override + public void load(CompoundTag nbt) { + super.load(nbt); + itemStackHandler.deserializeNBT(nbt.getCompound("inventory")); + } + + @Override + public void onDataPacket(Connection net, ClientboundBlockEntityDataPacket pkt) { + this.load(pkt.getTag()); + } + + @Override + public void onLoad() { + super.onLoad(); + itemHandlerLazyOptional = LazyOptional.of(() -> itemStackHandler); + } + + @Override + public void invalidateCaps() { + super.invalidateCaps(); + itemHandlerLazyOptional.invalidate(); + } + + @Override + protected void saveAdditional(CompoundTag nbt) { + nbt.put("inventory", itemStackHandler.serializeNBT()); + super.saveAdditional(nbt); + } + + @NotNull + @Override + public LazyOptional getCapability(@NotNull Capability cap, @Nullable Direction side) { + // TODO: Update with new item handler. + if (cap == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) { + return itemHandlerLazyOptional.cast(); + } + return super.getCapability(cap, side); + } + + public void dropItems() { + SimpleContainer inventory = new SimpleContainer(itemStackHandler.getSlots()); + for (int i = 0; i < itemStackHandler.getSlots(); i++) { + inventory.setItem(i, itemStackHandler.getStackInSlot(i)); + } + Containers.dropContents(this.getLevel(), this.worldPosition, inventory); + } + +} diff --git a/src/main/java/growthcraft/core/init/GrowthcraftBlockEntities.java b/src/main/java/growthcraft/core/init/GrowthcraftBlockEntities.java new file mode 100644 index 0000000..73cbafa --- /dev/null +++ b/src/main/java/growthcraft/core/init/GrowthcraftBlockEntities.java @@ -0,0 +1,34 @@ +package growthcraft.core.init; + +import growthcraft.core.block.entity.RopeBlockEntity; +import growthcraft.core.shared.Reference; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraftforge.registries.DeferredRegister; +import net.minecraftforge.registries.ForgeRegistries; +import net.minecraftforge.registries.RegistryObject; + +public class GrowthcraftBlockEntities { + public static final DeferredRegister> BLOCK_ENTITIES = DeferredRegister.create( + ForgeRegistries.BLOCK_ENTITIES, Reference.MODID + ); + + public static final RegistryObject> ROPE_BLOCK_ENTITY = BLOCK_ENTITIES.register( + Reference.UnlocalizedName.ROPE, + () -> BlockEntityType.Builder.of(RopeBlockEntity::new, + GrowthcraftBlocks.ROPE_LINEN.get(), + GrowthcraftBlocks.ROPE_LINEN_ACACIA_FENCE.get(), + GrowthcraftBlocks.ROPE_LINEN_BIRCH_FENCE.get(), + GrowthcraftBlocks.ROPE_LINEN_CRIMSON_FENCE.get(), + GrowthcraftBlocks.ROPE_LINEN_DARK_OAK_FENCE.get(), + GrowthcraftBlocks.ROPE_LINEN_JUNGLE_FENCE.get(), + GrowthcraftBlocks.ROPE_LINEN_NETHER_BRICK_FENCE.get(), + GrowthcraftBlocks.ROPE_LINEN_OAK_FENCE.get(), + GrowthcraftBlocks.ROPE_LINEN_SPRUCE_FENCE.get(), + GrowthcraftBlocks.ROPE_LINEN_WARPED_FENCE.get() + ).build(null) + ); + + private GrowthcraftBlockEntities() { + /* Disable automatic default public constructor */ + } +} diff --git a/src/main/java/growthcraft/core/init/GrowthcraftBlocks.java b/src/main/java/growthcraft/core/init/GrowthcraftBlocks.java new file mode 100644 index 0000000..d11a1c8 --- /dev/null +++ b/src/main/java/growthcraft/core/init/GrowthcraftBlocks.java @@ -0,0 +1,107 @@ +package growthcraft.core.init; + +import java.util.ArrayList; +import java.util.function.Supplier; + +import growthcraft.core.block.RopeBlock; +import growthcraft.core.shared.Reference; +import growthcraft.lib.block.GrowthcraftBlock; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.BlockItem; +import net.minecraft.world.item.Item; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.SoundType; +import net.minecraft.world.level.block.state.BlockBehaviour; +import net.minecraftforge.registries.DeferredRegister; +import net.minecraftforge.registries.ForgeRegistries; +import net.minecraftforge.registries.RegistryObject; + +public class GrowthcraftBlocks { + public static final DeferredRegister BLOCKS = DeferredRegister.create(ForgeRegistries.BLOCKS, Reference.MODID); + + public static final RegistryObject ROPE_LINEN = registerBlock( + Reference.UnlocalizedName.ROPE_LINEN, RopeBlock::new, true + ); + + public static final RegistryObject ROPE_LINEN_ACACIA_FENCE = registerBlock( + Reference.UnlocalizedName.ROPE_LINEN_ACACIA_FENCE, RopeBlock::new, true + ); + + public static final RegistryObject ROPE_LINEN_BIRCH_FENCE = registerBlock( + Reference.UnlocalizedName.ROPE_LINEN_BIRCH_FENCE, RopeBlock::new, true + ); + + public static final RegistryObject ROPE_LINEN_CRIMSON_FENCE = registerBlock( + Reference.UnlocalizedName.ROPE_LINEN_CRIMSON_FENCE, RopeBlock::new, true + ); + + public static final RegistryObject ROPE_LINEN_JUNGLE_FENCE = registerBlock( + Reference.UnlocalizedName.ROPE_LINEN_JUNGLE_FENCE, RopeBlock::new, true + ); + + public static final RegistryObject ROPE_LINEN_DARK_OAK_FENCE = registerBlock( + Reference.UnlocalizedName.ROPE_LINEN_DARK_OAK_FENCE, RopeBlock::new, true + ); + + public static final RegistryObject ROPE_LINEN_WARPED_FENCE = registerBlock( + Reference.UnlocalizedName.ROPE_LINEN_WARPED_FENCE, RopeBlock::new, true + ); + + public static final RegistryObject ROPE_LINEN_OAK_FENCE = registerBlock( + Reference.UnlocalizedName.ROPE_LINEN_OAK_FENCE, RopeBlock::new, true + ); + + public static final RegistryObject ROPE_LINEN_SPRUCE_FENCE = registerBlock( + Reference.UnlocalizedName.ROPE_LINEN_SPRUCE_FENCE, RopeBlock::new, true + ); + + public static final RegistryObject ROPE_LINEN_NETHER_BRICK_FENCE = registerBlock( + Reference.UnlocalizedName.ROPE_LINEN_NETHER_BRICK_FENCE, RopeBlock::new, true + ); + + public static final RegistryObject SALT_BLOCK = registerBlock( + Reference.UnlocalizedName.SALT_BLOCK, + () -> new GrowthcraftBlock(Blocks.GRAVEL, SoundType.GRAVEL) + ); + + public static final RegistryObject SALT_ORE = registerBlock( + Reference.UnlocalizedName.SALT_ORE, + () -> new GrowthcraftBlock(BlockBehaviour.Properties.copy(Blocks.IRON_ORE)) + ); + + private static RegistryObject registerBlock(String name, Supplier block) { + return registerBlock(name, block, false); + } + + private static RegistryObject registerBlock(String name, Supplier block, boolean excludeBlockItemRegistry) { + RegistryObject registryObject = BLOCKS.register(name, block); + if (!excludeBlockItemRegistry) { + registerBlockItem(name, registryObject); + } + return registryObject; + } + + private static void registerBlockItem(String name, RegistryObject blockRegistryObject) { + GrowthcraftItems.ITEMS.register( + name, + () -> new BlockItem(blockRegistryObject.get(), getDefaultItemProperties()) + ); + } + + private static Item.Properties getDefaultItemProperties() { + Item.Properties properties = new Item.Properties().tab(growthcraft.core.shared.Reference.ITEM_GROUP); + return properties; + } + + public static boolean excludeBlockItemRegistry(ResourceLocation registryName) { + ArrayList excludeBlocks = new ArrayList<>(); + //excludeBlocks.add(Reference.MODID + ":" + Reference.UnlocalizedName.APPLE_TREE_FRUIT); + return excludeBlocks.contains(registryName.toString()); + } + + private GrowthcraftBlocks() { + /* Disable automatic default public constructor */ + } + +} diff --git a/src/main/java/growthcraft/core/init/GrowthcraftCreativeModeTabs.java b/src/main/java/growthcraft/core/init/GrowthcraftCreativeModeTabs.java new file mode 100644 index 0000000..087365a --- /dev/null +++ b/src/main/java/growthcraft/core/init/GrowthcraftCreativeModeTabs.java @@ -0,0 +1,22 @@ +package growthcraft.core.init; + +import net.minecraft.world.item.CreativeModeTab; + +public class GrowthcraftCreativeModeTabs { + + public static CreativeModeTab GROWTHCRAFT_CREATIVE_TAB; + + private GrowthcraftCreativeModeTabs() { + /* Prevent generation of default public constructor. */ + } + +// public static void registerCreativeModeTab(CreativeModeTabEvent.Register event) { +// GROWTHCRAFT_CREATIVE_TAB = event.registerCreativeModeTab(new ResourceLocation(Reference.MODID, "tab"), +// builder -> { +// builder +// .icon(() -> new ItemStack(GrowthcraftItems.CROWBAR_ORANGE.get())) +// .title(Component.translatable("item_group." + Reference.MODID + ".tab")); +// } +// ); +// } +} diff --git a/src/main/java/growthcraft/core/init/GrowthcraftItems.java b/src/main/java/growthcraft/core/init/GrowthcraftItems.java new file mode 100644 index 0000000..84feb40 --- /dev/null +++ b/src/main/java/growthcraft/core/init/GrowthcraftItems.java @@ -0,0 +1,102 @@ +package growthcraft.core.init; + +import growthcraft.core.block.RopeBlock; +import growthcraft.core.item.CrowbarItem; +import growthcraft.core.item.RopeItem; +import growthcraft.core.item.WrenchItem; +import growthcraft.core.shared.Reference; +import growthcraft.lib.item.GrowthcraftItem; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.Item; +import net.minecraftforge.registries.DeferredRegister; +import net.minecraftforge.registries.ForgeRegistries; +import net.minecraftforge.registries.RegistryObject; + +import java.util.ArrayList; + +public class GrowthcraftItems { + public static final DeferredRegister ITEMS = DeferredRegister.create(ForgeRegistries.ITEMS, Reference.MODID); + + public static final RegistryObject CROWBAR_BLACK = ITEMS.register( + Reference.UnlocalizedName.CROWBAR_BLACK, CrowbarItem::new + ); + + public static final RegistryObject CROWBAR_BLUE = ITEMS.register( + Reference.UnlocalizedName.CROWBAR_BLUE, CrowbarItem::new + ); + + public static final RegistryObject CROWBAR_BROWN = ITEMS.register( + Reference.UnlocalizedName.CROWBAR_BROWN, CrowbarItem::new + ); + + public static final RegistryObject CROWBAR_CYAN = ITEMS.register( + Reference.UnlocalizedName.CROWBAR_CYAN, CrowbarItem::new + ); + + public static final RegistryObject CROWBAR_GRAY = ITEMS.register( + Reference.UnlocalizedName.CROWBAR_GRAY, CrowbarItem::new + ); + + public static final RegistryObject CROWBAR_GREEN = ITEMS.register( + Reference.UnlocalizedName.CROWBAR_GREEN, CrowbarItem::new + ); + + public static final RegistryObject CROWBAR_LIGHT_BLUE = ITEMS.register( + Reference.UnlocalizedName.CROWBAR_LIGHT_BLUE, CrowbarItem::new + ); + + public static final RegistryObject CROWBAR_LIGHT_GRAY = ITEMS.register( + Reference.UnlocalizedName.CROWBAR_LIGHT_GRAY, CrowbarItem::new + ); + + public static final RegistryObject CROWBAR_LIME = ITEMS.register( + Reference.UnlocalizedName.CROWBAR_LIME, CrowbarItem::new + ); + + public static final RegistryObject CROWBAR_MAGENTA = ITEMS.register( + Reference.UnlocalizedName.CROWBAR_MAGENTA, CrowbarItem::new + ); + + public static final RegistryObject CROWBAR_ORANGE = ITEMS.register( + Reference.UnlocalizedName.CROWBAR_ORANGE, CrowbarItem::new + ); + + public static final RegistryObject CROWBAR_PINK = ITEMS.register( + Reference.UnlocalizedName.CROWBAR_PINK, CrowbarItem::new + ); + + public static final RegistryObject CROWBAR_PURPLE = ITEMS.register( + Reference.UnlocalizedName.CROWBAR_PURPLE, CrowbarItem::new + ); + + public static final RegistryObject CROWBAR_RED = ITEMS.register( + Reference.UnlocalizedName.CROWBAR_RED, CrowbarItem::new + ); + + public static final RegistryObject CROWBAR_WHITE = ITEMS.register( + Reference.UnlocalizedName.CROWBAR_WHITE, CrowbarItem::new + ); + + public static final RegistryObject CROWBAR_YELLOW = ITEMS.register( + Reference.UnlocalizedName.CROWBAR_YELLOW, CrowbarItem::new + ); + + public static final RegistryObject ROPE_LINEN = ITEMS.register( + Reference.UnlocalizedName.ROPE_LINEN, () -> new RopeItem((RopeBlock) GrowthcraftBlocks.ROPE_LINEN.get()) + ); + + public static final RegistryObject SALT = ITEMS.register( + Reference.UnlocalizedName.SALT_ITEM, GrowthcraftItem::new + ); + + public static final RegistryObject WRENCH = ITEMS.register( + Reference.UnlocalizedName.WRENCH, WrenchItem::new + ); + + public static boolean excludeItemRegistry(ResourceLocation registryName) { + ArrayList excludeItems = new ArrayList<>(); + //excludeBlocks.add(Reference.MODID + ":" + Reference.UnlocalizedName.APPLE_TREE_FRUIT); + return excludeItems.contains(registryName.toString()); + } + +} diff --git a/src/main/java/growthcraft/core/init/GrowthcraftLootModifiers.java b/src/main/java/growthcraft/core/init/GrowthcraftLootModifiers.java new file mode 100644 index 0000000..10268e5 --- /dev/null +++ b/src/main/java/growthcraft/core/init/GrowthcraftLootModifiers.java @@ -0,0 +1,22 @@ +package growthcraft.core.init; + +import growthcraft.apiary.shared.Reference.UnlocalizedName; +import growthcraft.core.loot.GlobalLootModifier; +import growthcraft.core.shared.Reference; +import net.minecraftforge.common.loot.GlobalLootModifierSerializer; +import net.minecraftforge.eventbus.api.IEventBus; +import net.minecraftforge.registries.DeferredRegister; +import net.minecraftforge.registries.ForgeRegistries; +import net.minecraftforge.registries.RegistryObject; + +public class GrowthcraftLootModifiers { + public static final DeferredRegister> LOOT_MODIFIER_SERIALIZERS = + DeferredRegister.create(ForgeRegistries.Keys.LOOT_MODIFIER_SERIALIZERS, Reference.MODID); + + public static final RegistryObject> GLOBAL_BLOCK_LOOT_MODIFIER = + LOOT_MODIFIER_SERIALIZERS.register(UnlocalizedName.LOOT_SERIALIZER_BLOCK, GlobalLootModifier.Serializer::new); + + public static void register(IEventBus bus) { + LOOT_MODIFIER_SERIALIZERS.register(bus); + } +} diff --git a/src/main/java/growthcraft/core/init/GrowthcraftTags.java b/src/main/java/growthcraft/core/init/GrowthcraftTags.java new file mode 100644 index 0000000..c4b67e9 --- /dev/null +++ b/src/main/java/growthcraft/core/init/GrowthcraftTags.java @@ -0,0 +1,64 @@ +package growthcraft.core.init; + +import growthcraft.core.shared.Reference; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.tags.BlockTags; +import net.minecraft.tags.FluidTags; +import net.minecraft.tags.ItemTags; +import net.minecraft.tags.TagKey; +import net.minecraft.world.item.Item; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.material.Fluid; + +public class GrowthcraftTags { + public static void init() { + Blocks.init(); + Items.init(); + Fluids.init(); + } + + private GrowthcraftTags() { + /* Private constructor to hide the implicit public one. */ + } + + public static class Blocks { + + private static void init(){ + // Do nothing, simply instantiate static variables + } + + public static final TagKey HEATSOURCES = tag(Reference.UnlocalizedName.TAG_HEATSOURCES); + + public static final TagKey ROPE = tag(Reference.UnlocalizedName.TAG_ROPE); + public static final TagKey SALT = tag(Reference.UnlocalizedName.TAG_SALT); + + private static TagKey tag(String name) { + return BlockTags.create(new ResourceLocation(Reference.MODID, name)); + } + } + + public static class Items { + + private static void init(){ + // Do nothing, simply instantiate static variables + } + + public static final TagKey ROASTER_WRENCH = tag(Reference.UnlocalizedName.TAG_ROASTER_WRENCH); + + public static final TagKey SALT = tag(Reference.UnlocalizedName.TAG_SALT); + + private static TagKey tag(String name) { + return ItemTags.create(new ResourceLocation(Reference.MODID, name)); + } + } + + public static class Fluids { + private static void init() { + // Do nothing, simply instantiate static variables + } + + private static TagKey tag(String name) { + return FluidTags.create(new ResourceLocation(Reference.MODID, name)); + } + } +} diff --git a/src/main/java/growthcraft/core/init/config/GrowthcraftConfig.java b/src/main/java/growthcraft/core/init/config/GrowthcraftConfig.java new file mode 100644 index 0000000..236b9b9 --- /dev/null +++ b/src/main/java/growthcraft/core/init/config/GrowthcraftConfig.java @@ -0,0 +1,84 @@ +package growthcraft.core.init.config; + +import com.electronwill.nightconfig.core.file.CommentedFileConfig; +import com.electronwill.nightconfig.core.io.WritingMode; +import net.minecraftforge.common.ForgeConfigSpec; +import net.minecraftforge.fml.loading.FMLPaths; + +import java.io.File; + +public class GrowthcraftConfig { + public static final ForgeConfigSpec.Builder SERVER_BUILDER = new ForgeConfigSpec.Builder(); + public static final ForgeConfigSpec SERVER; + + public static final String SERVER_CONFIG = "growthcraft-server.toml"; + + private static final String CATEGORY_WORLDGEN = "worldgen"; + + private static ForgeConfigSpec.BooleanValue saltOreGenEnabled; + private static ForgeConfigSpec.IntValue saltOreGenVeinSize; + private static ForgeConfigSpec.IntValue saltOreGenHeightMin; + private static ForgeConfigSpec.IntValue saltOreGenHeightMax; + private static ForgeConfigSpec.IntValue saltOreGenSpreadAmount; + + static { + initServerConfig(SERVER_BUILDER); + SERVER = SERVER_BUILDER.build(); + } + + private GrowthcraftConfig() { + /* Prevent generation of publc constructor */ + } + + public static void loadConfig() { + loadConfig(SERVER, FMLPaths.CONFIGDIR.get().resolve(SERVER_CONFIG).toString()); + } + + public static void loadConfig(ForgeConfigSpec configSpec, String path) { + final CommentedFileConfig fileConfig = CommentedFileConfig.builder( + new File(path)).sync().autosave().writingMode(WritingMode.REPLACE).build(); + + fileConfig.load(); + configSpec.setConfig(fileConfig); + } + + public static void initServerConfig(ForgeConfigSpec.Builder specBuilder) { + // Init Server Side Configuration + saltOreGenEnabled = specBuilder + .comment("Set to false to disable Growthcraft Salt Ore Generation.") + .define(String.format("%s.%s", CATEGORY_WORLDGEN, "saltOreGenEnabled"), true); + saltOreGenVeinSize = specBuilder + .comment("Set to the max number of ores to generate in the vein.") + .defineInRange(String.format("%s.%s", CATEGORY_WORLDGEN, "saltOreGenVeinSize"), 5, 1, 10); + saltOreGenHeightMin = specBuilder + .comment("Set to the minimum Y value height to generate Salt ore.") + .defineInRange(String.format("%s.%s", CATEGORY_WORLDGEN, "saltOreGenHeightMin"), -32, -64, 255); + saltOreGenHeightMax = specBuilder + .comment("Set to the maximum Y value height to generate Salt ore. This value must be higher than saltOreGenHeightMin.") + .defineInRange(String.format("%s.%s", CATEGORY_WORLDGEN, "saltOreGenHeightMax"), 64, -64, 255); + saltOreGenSpreadAmount = specBuilder + .comment("Set to the satutration spread for salt ore generation within a chunk.") + .defineInRange(String.format("%s.%s", CATEGORY_WORLDGEN, "saltOreGenSpreadAmount"), 10, 1, 20); + } + + public static boolean isSaltOreGenEnabled() { + return saltOreGenEnabled.get(); + } + + public static int getSaltOreGenVeinSize() { + return saltOreGenVeinSize.get(); + } + + public static int getSaltOreGenHeightMin() { + return saltOreGenHeightMin.get(); + } + + public static int getSaltOreGenHeightMax() { + return saltOreGenHeightMax.get(); + } + + public static int getSaltOreGenSpreadAmount() { + return saltOreGenSpreadAmount.get(); + } + +} diff --git a/src/main/java/growthcraft/core/item/CrowbarItem.java b/src/main/java/growthcraft/core/item/CrowbarItem.java new file mode 100644 index 0000000..cde5bb9 --- /dev/null +++ b/src/main/java/growthcraft/core/item/CrowbarItem.java @@ -0,0 +1,37 @@ +package growthcraft.core.item; + +import growthcraft.lib.item.GrowthcraftItem; +import net.minecraft.core.BlockPos; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.InteractionResultHolder; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.world.item.context.UseOnContext; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Rotation; + +public class CrowbarItem extends GrowthcraftItem { + private static final int MAX_STACK_SIZE = 1; + + public CrowbarItem() { + super(MAX_STACK_SIZE); + } + + @Override + public InteractionResult useOn(UseOnContext useOnContext) { + Level level = useOnContext.getLevel(); + BlockPos useOnBlockPos = useOnContext.getClickedPos(); + Player player = useOnContext.getPlayer(); + + if(level.isClientSide) return super.useOn(useOnContext); + + if(player.isCrouching()) { + level.setBlock(useOnBlockPos, level.getBlockState(useOnBlockPos).getBlock().rotate(level.getBlockState(useOnBlockPos), level, useOnBlockPos, Rotation.CLOCKWISE_90), 11); + return InteractionResult.SUCCESS; + } + + return super.useOn(useOnContext); + } +} diff --git a/src/main/java/growthcraft/core/item/RopeItem.java b/src/main/java/growthcraft/core/item/RopeItem.java new file mode 100644 index 0000000..3bffc2b --- /dev/null +++ b/src/main/java/growthcraft/core/item/RopeItem.java @@ -0,0 +1,91 @@ +package growthcraft.core.item; + +import growthcraft.apples.init.GrowthcraftApplesBlocks; +import growthcraft.bamboo.init.GrowthcraftBambooBlocks; +import growthcraft.core.block.RopeBlock; +import growthcraft.core.block.entity.RopeBlockEntity; +import growthcraft.core.init.GrowthcraftBlocks; +import growthcraft.lib.item.GrowthcraftBlockItem; +import growthcraft.lib.utils.BlockStateUtils; +import net.minecraft.core.BlockPos; +import net.minecraft.tags.BlockTags; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.item.context.UseOnContext; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.state.BlockState; + +import java.util.Map; + +import static growthcraft.core.block.RopeBlock.*; + +public class RopeItem extends GrowthcraftBlockItem { + + public RopeItem(RopeBlock block) { + super(block); + } + + @Override + public InteractionResult useOn(UseOnContext useOnContext) { + Level level = useOnContext.getLevel(); + + BlockPos blockPos = useOnContext.getClickedPos(); + BlockState blockState = level.getBlockState(blockPos); + + // TODO: Make Rope Fence Posts more dynamic + if (blockState.is(BlockTags.FENCES)) { + BlockState state = GrowthcraftBlocks.ROPE_LINEN_OAK_FENCE.get().defaultBlockState(); + + if (blockState.getBlock() == Blocks.ACACIA_FENCE) { + state = GrowthcraftBlocks.ROPE_LINEN_ACACIA_FENCE.get().defaultBlockState(); + } else if(blockState.getBlock() == Blocks.BIRCH_FENCE) { + state = GrowthcraftBlocks.ROPE_LINEN_BIRCH_FENCE.get().defaultBlockState(); + } else if(blockState.getBlock() == Blocks.CRIMSON_FENCE) { + state = GrowthcraftBlocks.ROPE_LINEN_CRIMSON_FENCE.get().defaultBlockState(); + } else if(blockState.getBlock() == Blocks.DARK_OAK_FENCE) { + state = GrowthcraftBlocks.ROPE_LINEN_DARK_OAK_FENCE.get().defaultBlockState(); + } else if(blockState.getBlock() == Blocks.JUNGLE_FENCE) { + state = GrowthcraftBlocks.ROPE_LINEN_JUNGLE_FENCE.get().defaultBlockState(); + } else if (blockState.getBlock() == Blocks.NETHER_BRICK_FENCE) { + state = GrowthcraftBlocks.ROPE_LINEN_NETHER_BRICK_FENCE.get().defaultBlockState(); + } else if(blockState.getBlock() == Blocks.OAK_FENCE) { + state = GrowthcraftBlocks.ROPE_LINEN_OAK_FENCE.get().defaultBlockState(); + } else if(blockState.getBlock() == Blocks.SPRUCE_FENCE) { + state = GrowthcraftBlocks.ROPE_LINEN_SPRUCE_FENCE.get().defaultBlockState(); + } else if(blockState.getBlock() == Blocks.WARPED_FENCE) { + state = GrowthcraftBlocks.ROPE_LINEN_WARPED_FENCE.get().defaultBlockState(); + } else if (blockState.getBlock() == GrowthcraftApplesBlocks.APPLE_PLANK_FENCE.get()) { + state = GrowthcraftApplesBlocks.APPLE_PLANK_FENCE_ROPE_LINEN.get().defaultBlockState(); + } else if (blockState.getBlock() == GrowthcraftBambooBlocks.BAMBOO_PLANK_FENCE.get()) { + state = GrowthcraftBambooBlocks.BAMBOO_PLANK_FENCE_ROPE_LINEN.get().defaultBlockState(); + } + + Map surroundingStateMap = + BlockStateUtils.getSurroundingRopeConnections(level, blockPos); + + level.setBlock(blockPos, state.setValue(KNOT, true) + .setValue(NORTH, surroundingStateMap.get("north")) + .setValue(EAST, surroundingStateMap.get("east")) + .setValue(SOUTH, surroundingStateMap.get("south")) + .setValue(WEST, surroundingStateMap.get("west")) + .setValue(UP, surroundingStateMap.get("above")) + .setValue(DOWN, surroundingStateMap.get("below")), + Block.UPDATE_ALL); + + RopeBlockEntity ropeBlockEntity = (RopeBlockEntity) level.getBlockEntity(blockPos); + if (ropeBlockEntity != null) { + ropeBlockEntity.setFenceItemStack(new ItemStack(blockState.getBlock(), 1)); + useOnContext.getItemInHand().shrink(1); + return InteractionResult.SUCCESS; + } + + } else { + return this.place(new BlockPlaceContext(useOnContext)); + } + + return InteractionResult.PASS; + } +} diff --git a/src/main/java/growthcraft/core/item/WrenchItem.java b/src/main/java/growthcraft/core/item/WrenchItem.java new file mode 100644 index 0000000..5b661e7 --- /dev/null +++ b/src/main/java/growthcraft/core/item/WrenchItem.java @@ -0,0 +1,32 @@ +package growthcraft.core.item; + +import growthcraft.lib.item.GrowthcraftItem; +import growthcraft.milk.block.CheesePressBlock; +import net.minecraft.core.BlockPos; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.context.UseOnContext; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.state.BlockState; + +public class WrenchItem extends GrowthcraftItem { + private static final int MAX_STACK_SIZE = 1; + + public WrenchItem() { + super(MAX_STACK_SIZE); + } + + @Override + public InteractionResult useOn(UseOnContext context) { + Level level = context.getLevel(); + BlockPos blockpos = context.getClickedPos(); + Player player = context.getPlayer(); + BlockState blockstate = level.getBlockState(blockpos); + + if(blockstate.getBlock() instanceof CheesePressBlock) { + blockstate.getBlock().use(blockstate, level, blockpos, player, context.getHand(), null); + } + + return super.useOn(context); + } +} diff --git a/src/main/java/growthcraft/core/loot/GlobalLootModifier.java b/src/main/java/growthcraft/core/loot/GlobalLootModifier.java new file mode 100644 index 0000000..210b267 --- /dev/null +++ b/src/main/java/growthcraft/core/loot/GlobalLootModifier.java @@ -0,0 +1,49 @@ +package growthcraft.core.loot; + +import java.util.List; + +import javax.annotation.Nonnull; + +import com.google.gson.JsonObject; + +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.GsonHelper; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.storage.loot.LootContext; +import net.minecraft.world.level.storage.loot.predicates.LootItemCondition; +import net.minecraftforge.common.loot.GlobalLootModifierSerializer; +import net.minecraftforge.common.loot.LootModifier; +import net.minecraftforge.registries.ForgeRegistries; + +public class GlobalLootModifier extends LootModifier { + + private final Item item; + + protected GlobalLootModifier(LootItemCondition[] conditionsIn, Item item) { + super(conditionsIn); + this.item = item; + } + + @Nonnull + @Override + protected List doApply(List generatedLoot, LootContext context) { + generatedLoot.add(new ItemStack(item, 1)); + return generatedLoot; + } + + public static class Serializer extends GlobalLootModifierSerializer { + @Override + public GlobalLootModifier read(ResourceLocation location, JsonObject object, LootItemCondition[] lootConditions) { + Item item = ForgeRegistries.ITEMS.getValue(new ResourceLocation((GsonHelper.getAsString(object, "item")))); + return new GlobalLootModifier(lootConditions, item); + } + + @Override + public JsonObject write(GlobalLootModifier instance) { + JsonObject json = makeConditions(instance.conditions); + json.addProperty("item", ForgeRegistries.ITEMS.getKey(instance.item).toString()); + return json; + } + } +} diff --git a/src/main/java/growthcraft/core/shared/Reference.java b/src/main/java/growthcraft/core/shared/Reference.java new file mode 100644 index 0000000..328d634 --- /dev/null +++ b/src/main/java/growthcraft/core/shared/Reference.java @@ -0,0 +1,73 @@ +package growthcraft.core.shared; + +import growthcraft.cellar.init.GrowthcraftCellarBlocks; +import net.minecraft.world.item.CreativeModeTab; +import net.minecraft.world.item.ItemStack; + +public class Reference { + public static final String MODID = "growthcraft"; + public static final String NAME = "Growthcraft"; + public static final String NAME_SHORT = "core"; + public static final String VERSION = "7.1.0"; + public static String CREATIVE_TAB = "Growthcraft"; + + public static final CreativeModeTab ITEM_GROUP = new CreativeModeTab(CREATIVE_TAB) { + @Override + public ItemStack makeIcon() { + return new ItemStack(GrowthcraftCellarBlocks.FERMENTATION_BARREL_OAK.get()); + } + }; + + private Reference() { /* Prevent default public constructor */ } + + public static class UnlocalizedName { + public static final String CROWBAR_BLACK = "crowbar_black"; + public static final String CROWBAR_BLUE = "crowbar_blue"; + public static final String CROWBAR_BROWN = "crowbar_brown"; + public static final String CROWBAR_CYAN = "crowbar_cyan"; + public static final String CROWBAR_GRAY = "crowbar_gray"; + public static final String CROWBAR_GREEN = "crowbar_green"; + public static final String CROWBAR_LIGHT_BLUE = "crowbar_light_blue"; + public static final String CROWBAR_LIGHT_GRAY = "crowbar_light_gray"; + public static final String CROWBAR_LIME = "crowbar_lime"; + public static final String CROWBAR_MAGENTA = "crowbar_magenta"; + public static final String CROWBAR_ORANGE = "crowbar_orange"; + public static final String CROWBAR_PINK = "crowbar_pink"; + public static final String CROWBAR_PURPLE = "crowbar_purple"; + public static final String CROWBAR_RED = "crowbar_red"; + public static final String CROWBAR_WHITE = "crowbar_white"; + public static final String CROWBAR_YELLOW = "crowbar_yellow"; + + public static final String SALT_ORE = "salt_ore"; + public static final String SALT_ORE_PLACED = "salt_ore_placed"; + public static final String SALT_BLOCK = "salt_block"; + public static final String SALT_ITEM = "salt"; + + public static final String ROPE = "rope"; + public static final String ROPE_LINEN = "rope_linen"; + public static final String ROPE_LINEN_ACACIA_FENCE = "rope_linen_acacia_fence"; + public static final String ROPE_LINEN_BIRCH_FENCE = "rope_linen_birch_fence"; + public static final String ROPE_LINEN_CRIMSON_FENCE = "rope_linen_crimson_fence"; + public static final String ROPE_LINEN_JUNGLE_FENCE = "rope_linen_jungle_fence"; + public static final String ROPE_LINEN_DARK_OAK_FENCE = "rope_linen_dark_oak_fence"; + public static final String ROPE_LINEN_NETHER_BRICK_FENCE = "rope_linen_nether_brick_fence"; + + public static final String ROPE_LINEN_OAK_FENCE = "rope_linen_oak_fence"; + public static final String ROPE_LINEN_SPRUCE_FENCE = "rope_linen_spruce_fence"; + public static final String ROPE_LINEN_WARPED_FENCE = "rope_linen_warped_fence"; + + + public static final String TAG_SALT = "salt"; + public static final String TAG_ROASTER_WRENCH = "roaster_wrench"; + public static final String TAG_ROPE = "rope"; + public static final String TAG_ROPE_FENCE = "rope_fence"; + public static final String TAG_HEATSOURCES = "heatsources"; + public static final String WRENCH = "wrench"; + + private UnlocalizedName() { /* Disable default public constructor. */ } + + + + } + +} diff --git a/src/main/java/growthcraft/core/utils/BlockPropertiesUtils.java b/src/main/java/growthcraft/core/utils/BlockPropertiesUtils.java new file mode 100644 index 0000000..18020a3 --- /dev/null +++ b/src/main/java/growthcraft/core/utils/BlockPropertiesUtils.java @@ -0,0 +1,50 @@ +package growthcraft.core.utils; + +import net.minecraft.core.BlockPos; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.SoundType; +import net.minecraft.world.level.block.state.BlockBehaviour; +import net.minecraft.world.level.block.state.BlockState; + +public class BlockPropertiesUtils { + + public static BlockBehaviour.Properties getInitProperties(String blockType, Block block) { + BlockBehaviour.Properties properties = BlockBehaviour.Properties.copy(block); + + switch (blockType) { + case "rope_block" -> { + properties.sound(SoundType.WOOL); + properties.strength(0.3F, 0.3F); + properties.noOcclusion(); + properties.isValidSpawn(BlockPropertiesUtils::never); + properties.isRedstoneConductor(BlockPropertiesUtils::never); + properties.isSuffocating(BlockPropertiesUtils::never); + properties.isViewBlocking(BlockPropertiesUtils::never); + } + default -> { + // Do nothing. + } + } + + return properties; + + } + + public static Boolean never(BlockState state, BlockGetter world, BlockPos pos, EntityType entity) { + return BlockPropertiesUtils.never(state, world, pos); + } + + public static Boolean always(BlockState state, BlockGetter world, BlockPos pos, EntityType entity) { + return BlockPropertiesUtils.always(state, world, pos); + } + + public static boolean always(BlockState state, BlockGetter world, BlockPos pos) { + return true; + } + + public static boolean never(BlockState state, BlockGetter world, BlockPos pos) { + return false; + } +} diff --git a/src/main/java/growthcraft/core/world/GrowthcraftConfiguredFeatures.java b/src/main/java/growthcraft/core/world/GrowthcraftConfiguredFeatures.java new file mode 100644 index 0000000..db5cd85 --- /dev/null +++ b/src/main/java/growthcraft/core/world/GrowthcraftConfiguredFeatures.java @@ -0,0 +1,81 @@ +package growthcraft.core.world; + +import java.util.List; + +import growthcraft.core.init.GrowthcraftBlocks; +import growthcraft.core.init.config.GrowthcraftConfig; +import net.minecraft.core.Holder; +import net.minecraft.data.worldgen.features.FeatureUtils; +import net.minecraft.data.worldgen.features.OreFeatures; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.levelgen.feature.ConfiguredFeature; +import net.minecraft.world.level.levelgen.feature.Feature; +import net.minecraft.world.level.levelgen.feature.configurations.OreConfiguration; +import net.minecraft.world.level.levelgen.structure.templatesystem.BlockMatchTest; +import net.minecraft.world.level.levelgen.structure.templatesystem.RuleTest; + +public class GrowthcraftConfiguredFeatures { + private static final int SALT_ORE_GEN_VEIN_SIZE = GrowthcraftConfig.getSaltOreGenVeinSize(); // Iron is 9, Diamond is 0.7 + public static RuleTest endstoneReplaceable = new BlockMatchTest(Blocks.END_STONE); + + public static final List OVERWORLD_SALT_ORE_KEY = List.of( + OreConfiguration.target(OreFeatures.STONE_ORE_REPLACEABLES, GrowthcraftBlocks.SALT_ORE.get().defaultBlockState()), + OreConfiguration.target(OreFeatures.DEEPSLATE_ORE_REPLACEABLES, GrowthcraftBlocks.SALT_ORE.get().defaultBlockState())); + + public static final List NETHER_SALT_ORE_KEY = List.of( + OreConfiguration.target(OreFeatures.NETHER_ORE_REPLACEABLES, GrowthcraftBlocks.SALT_ORE.get().defaultBlockState())); + + public static final List END_SALT_ORE_KEY = List.of( + OreConfiguration.target(endstoneReplaceable, GrowthcraftBlocks.SALT_ORE.get().defaultBlockState())); + + public static final Holder> SALT_ORE = FeatureUtils.register("Reference.UnlocalizedName.SALT_ORE", + Feature.ORE, new OreConfiguration(OVERWORLD_SALT_ORE_KEY, SALT_ORE_GEN_VEIN_SIZE)); + + public static final Holder> NETHER_SALT_ORE = FeatureUtils.register("Reference.UnlocalizedName.SALT_ORE + _nether", + Feature.ORE, new OreConfiguration(NETHER_SALT_ORE_KEY, SALT_ORE_GEN_VEIN_SIZE)); + + public static final Holder> END_SALT_ORE = FeatureUtils.register("Reference.UnlocalizedName.SALT_ORE + _end", + Feature.ORE, new OreConfiguration(END_SALT_ORE_KEY, SALT_ORE_GEN_VEIN_SIZE)); + +// public static final ResourceKey> OVERWORLD_SALT_ORE_KEY = registerKey(Reference.UnlocalizedName.SALT_ORE); +// public static final ResourceKey> NETHER_SALT_ORE_KEY = registerKey(Reference.UnlocalizedName.SALT_ORE + "_nether"); +// public static final ResourceKey> END_SALT_ORE_KEY = registerKey(Reference.UnlocalizedName.SALT_ORE + "_end"); +// +// public static void bootstrap(BootstapContext> context) { +// RuleTest stoneReplaceable = new TagMatchTest(BlockTags.STONE_ORE_REPLACEABLES); +// RuleTest deepslateReplaceable = new TagMatchTest(BlockTags.DEEPSLATE_ORE_REPLACEABLES); +// RuleTest netherrackReplaceable = new BlockMatchTest(Blocks.NETHERRACK); +// RuleTest endstoneReplaceable = new BlockMatchTest(Blocks.END_STONE); +// +// List overworldSaltOres = List.of( +// OreConfiguration.target(stoneReplaceable, GrowthcraftBlocks.SALT_ORE.get().defaultBlockState()), +// // TODO: Create a deepslate version of SALT_ORE +// OreConfiguration.target(deepslateReplaceable, GrowthcraftBlocks.SALT_ORE.get().defaultBlockState()) +// ); +// +// register(context, OVERWORLD_SALT_ORE_KEY, Feature.ORE, new OreConfiguration( +// overworldSaltOres, SALT_ORE_GEN_VEIN_SIZE)); +// register(context, END_SALT_ORE_KEY, Feature.ORE, new OreConfiguration(endstoneReplaceable, +// GrowthcraftBlocks.SALT_ORE.get().defaultBlockState(), 9)); +// register(context, NETHER_SALT_ORE_KEY, Feature.ORE, new OreConfiguration(netherrackReplaceable, +// GrowthcraftBlocks.SALT_ORE.get().defaultBlockState(), 9)); +// } +// +// private static ResourceKey> registerKey(String name) { +// return ResourceKey.create(Registry.CONFIGURED_FEATURE_REGISTRY, new ResourceLocation(Reference.MODID, name)); +// } +// +// private static > void register( +// BootstapContext> context, +// ResourceKey> key, +// F feature, +// FC configuration +// ) { +// context.register(key, new ConfiguredFeature<>(feature, configuration)); +// } + + private GrowthcraftConfiguredFeatures() { + /* Prevent generation of default public constructor. */ + } + +} diff --git a/src/main/java/growthcraft/core/world/GrowthcraftOrePlacement.java b/src/main/java/growthcraft/core/world/GrowthcraftOrePlacement.java new file mode 100644 index 0000000..f72a34e --- /dev/null +++ b/src/main/java/growthcraft/core/world/GrowthcraftOrePlacement.java @@ -0,0 +1,23 @@ +package growthcraft.core.world; + +import net.minecraft.world.level.levelgen.placement.*; + +import java.util.List; + +public class GrowthcraftOrePlacement { + public static List orePlacement(PlacementModifier countModifier, PlacementModifier placementModifier) { + return List.of(countModifier, InSquarePlacement.spread(), placementModifier, BiomeFilter.biome()); + } + + public static List commonOrePlacement(int count, PlacementModifier placementModifier) { + return orePlacement(CountPlacement.of(count), placementModifier); + } + + public static List rareOrePlacement(int count, PlacementModifier placementModifier) { + return orePlacement(RarityFilter.onAverageOnceEvery(count), placementModifier); + } + + private GrowthcraftOrePlacement() { + /* Prevent generation of default public constructor. */ + } +} diff --git a/src/main/java/growthcraft/core/world/GrowthcraftPlacedFeatures.java b/src/main/java/growthcraft/core/world/GrowthcraftPlacedFeatures.java new file mode 100644 index 0000000..6707ec9 --- /dev/null +++ b/src/main/java/growthcraft/core/world/GrowthcraftPlacedFeatures.java @@ -0,0 +1,75 @@ +package growthcraft.core.world; + +import growthcraft.core.init.config.GrowthcraftConfig; +import growthcraft.core.shared.Reference; +import net.minecraft.core.Holder; +import net.minecraft.core.Registry; +import net.minecraft.world.level.levelgen.VerticalAnchor; +import net.minecraft.world.level.levelgen.feature.ConfiguredFeature; +import net.minecraft.world.level.levelgen.placement.HeightRangePlacement; +import net.minecraft.world.level.levelgen.placement.PlacedFeature; +import net.minecraftforge.registries.DeferredRegister; +import net.minecraftforge.registries.RegistryObject; + +public class GrowthcraftPlacedFeatures { + public static final DeferredRegister PLACED_FEATURES = DeferredRegister.create(Registry.PLACED_FEATURE_REGISTRY, Reference.MODID); + + + public static final RegistryObject SALT_ORE_PLACED = PLACED_FEATURES.register(Reference.UnlocalizedName.SALT_ORE_PLACED, + () -> new PlacedFeature((Holder>)(Holder>) + GrowthcraftConfiguredFeatures.SALT_ORE, GrowthcraftOrePlacement.commonOrePlacement( + GrowthcraftConfig.getSaltOreGenSpreadAmount(), // VeinsPerChunk + HeightRangePlacement.uniform(VerticalAnchor.absolute(GrowthcraftConfig.getSaltOreGenHeightMin()), VerticalAnchor.absolute(GrowthcraftConfig.getSaltOreGenHeightMax()))))); + + public static final RegistryObject NETHER_SALT_ORE_PLACED = PLACED_FEATURES.register(Reference.UnlocalizedName.SALT_ORE_PLACED + "_nether", + () -> new PlacedFeature((Holder>)(Holder>) + GrowthcraftConfiguredFeatures.NETHER_SALT_ORE, GrowthcraftOrePlacement.commonOrePlacement( + GrowthcraftConfig.getSaltOreGenSpreadAmount(), // VeinsPerChunk + HeightRangePlacement.uniform(VerticalAnchor.absolute(GrowthcraftConfig.getSaltOreGenHeightMin()), VerticalAnchor.absolute(GrowthcraftConfig.getSaltOreGenHeightMax()))))); + + public static final RegistryObject END_SALT_ORE_PLACED = PLACED_FEATURES.register(Reference.UnlocalizedName.SALT_ORE_PLACED + "_end", + () -> new PlacedFeature((Holder>)(Holder>) + GrowthcraftConfiguredFeatures.END_SALT_ORE, GrowthcraftOrePlacement.commonOrePlacement( + GrowthcraftConfig.getSaltOreGenSpreadAmount(), // VeinsPerChunk + HeightRangePlacement.uniform(VerticalAnchor.absolute(GrowthcraftConfig.getSaltOreGenHeightMin()), VerticalAnchor.absolute(GrowthcraftConfig.getSaltOreGenHeightMax()))))); +// public static final ResourceKey SALT_ORE_PLACED_KEY = createKey(Reference.UnlocalizedName.SALT_ORE_PLACED); + +// public static void bootstrap(BootstapContext context) { +// GrowcraftHolderGetter> configuredFeatures = context.lookup(Registry.PLACED_FEATURE_REGISTRY ); +// +// register(context, SALT_ORE_PLACED_KEY, configuredFeatures.getOrThrow(GrowthcraftConfiguredFeatures.OVERWORLD_SALT_ORE_KEY), +// GrowthcraftOrePlacement.commonOrePlacement( +// GrowthcraftConfig.getSaltOreGenSpreadAmount(), +// HeightRangePlacement.uniform( +// VerticalAnchor.absolute(GrowthcraftConfig.getSaltOreGenHeightMin()), +// VerticalAnchor.absolute(GrowthcraftConfig.getSaltOreGenHeightMax())) +// )); +// } +// +// private static ResourceKey createKey(String name) { +// return ResourceKey.create(Registry.PLACED_FEATURE_REGISTRY, new ResourceLocation(Reference.MODID, name)); +// } +// +// private static void register( +// BootstapContext context, +// ResourceKey key, +// Holder> configuration, +// List modifiers +// ) { +// context.register(key, new PlacedFeature(configuration, List.copyOf(modifiers))); +// } +// +// private static void register( +// BootstapContext context, +// ResourceKey key, +// Holder> configuration, +// PlacementModifier... modifiers +// ) { +// register(context, key, configuration, List.of(modifiers)); +// } + + private GrowthcraftPlacedFeatures() { + /* Prevent generation of default public constructor. */ + } + +} diff --git a/src/main/java/growthcraft/lib/block/GrowthcraftBlock.java b/src/main/java/growthcraft/lib/block/GrowthcraftBlock.java new file mode 100644 index 0000000..7540fe7 --- /dev/null +++ b/src/main/java/growthcraft/lib/block/GrowthcraftBlock.java @@ -0,0 +1,44 @@ +package growthcraft.lib.block; + +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.SoundType; +import net.minecraft.world.level.material.Material; + +public class GrowthcraftBlock extends Block { + + public GrowthcraftBlock() { + this(getInitProperties(Material.WOOD, SoundType.WOOD)); + } + + public GrowthcraftBlock(Material material) { + this(getInitProperties(material, SoundType.WOOD)); + } + + public GrowthcraftBlock(Block block) { + this(getInitProperties(block, SoundType.WOOD)); + } + + public GrowthcraftBlock(Material material, SoundType soundType) { + this(getInitProperties(material, soundType)); + } + + public GrowthcraftBlock(Block block, SoundType soundType) { + this(getInitProperties(block, soundType)); + } + + public GrowthcraftBlock(Properties properties) { + super(properties); + } + + private static Properties getInitProperties(Material material, SoundType soundType) { + Properties properties = Properties.of(material); + properties.sound(SoundType.WOOD); + return properties; + } + + private static Properties getInitProperties(Block block, SoundType soundType) { + Properties properties = Properties.copy(block); + properties.sound(SoundType.WOOD); + return properties; + } +} diff --git a/src/main/java/growthcraft/lib/block/GrowthcraftButtonBlock.java b/src/main/java/growthcraft/lib/block/GrowthcraftButtonBlock.java new file mode 100644 index 0000000..eeed75d --- /dev/null +++ b/src/main/java/growthcraft/lib/block/GrowthcraftButtonBlock.java @@ -0,0 +1,20 @@ +package growthcraft.lib.block; + +import net.minecraft.world.level.block.SoundType; +import net.minecraft.world.level.block.WoodButtonBlock; +import net.minecraft.world.level.material.Material; + +public class GrowthcraftButtonBlock extends WoodButtonBlock { + + public GrowthcraftButtonBlock() { + super(getInitProperties(Material.WOOD)); + } + + private static Properties getInitProperties(Material material) { + Properties properties = Properties.of(material); + properties.strength(0.5F); + properties.noCollission(); + properties.sound(SoundType.WOOD); + return properties; + } +} diff --git a/src/main/java/growthcraft/lib/block/GrowthcraftCropsRopeBlock.java b/src/main/java/growthcraft/lib/block/GrowthcraftCropsRopeBlock.java new file mode 100644 index 0000000..da0fafa --- /dev/null +++ b/src/main/java/growthcraft/lib/block/GrowthcraftCropsRopeBlock.java @@ -0,0 +1,315 @@ +package growthcraft.lib.block; + +import java.util.ArrayList; +import java.util.Random; + +import javax.annotation.ParametersAreNonnullByDefault; + +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import growthcraft.core.block.entity.RopeBlockEntity; +import growthcraft.core.init.GrowthcraftTags; +import growthcraft.lib.utils.BlockStateUtils; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.util.Mth; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.monster.Ravager; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.LevelAccessor; +import net.minecraft.world.level.LevelReader; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.BonemealableBlock; +import net.minecraft.world.level.block.BushBlock; +import net.minecraft.world.level.block.SoundType; +import net.minecraft.world.level.block.state.BlockBehaviour; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.StateDefinition; +import net.minecraft.world.level.block.state.properties.BlockStateProperties; +import net.minecraft.world.level.block.state.properties.BooleanProperty; +import net.minecraft.world.level.block.state.properties.IntegerProperty; +import net.minecraft.world.level.material.FluidState; +import net.minecraft.world.level.material.Material; +import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.Shapes; +import net.minecraft.world.phys.shapes.VoxelShape; + +public class GrowthcraftCropsRopeBlock extends BushBlock implements BonemealableBlock { + + public static IntegerProperty AGE = BlockStateProperties.AGE_7; + public static final BooleanProperty DOWN = BooleanProperty.create("down"); + public static final BooleanProperty EAST = BooleanProperty.create("east"); + public static final BooleanProperty NORTH = BooleanProperty.create("north"); + public static final BooleanProperty SOUTH = BooleanProperty.create("south"); + public static final BooleanProperty UP = BooleanProperty.create("up"); + public static final BooleanProperty WEST = BooleanProperty.create("west"); + + public static final VoxelShape KNOT_BOUNDING_BOX = Block.box(7.0D, 7.0D, 7.0D, 9.0D, 9.0D, 9.0D); + public static final VoxelShape NORTH_BOUNDING_BOX = Block.box(7.0D, 7.0D, 0.0D, 9.0D, 9.0D, 7.0D); + public static final VoxelShape EAST_BOUNDING_BOX = Block.box(9.0D, 7.0D, 7.0D, 16.0D, 9.0D, 9.0D); + public static final VoxelShape SOUTH_BOUNDING_BOX = Block.box(7.0D, 7.0D, 9.0D, 9.0D, 9.0D, 16.0D); + public static final VoxelShape WEST_BOUNDING_BOX = Block.box(0.0D, 7.0D, 7.0D, 7.0D, 9.0D, 9.0D); + public static final VoxelShape UP_BOUNDING_BOX = Block.box(7.0D, 9.0D, 7.0D, 9.0D, 16.0D, 9.0D); + public static final VoxelShape DOWN_BOUNDING_BOX = Block.box(7.0D, 0.0D, 7.0D, 9.0D, 7.0D, 9.0D); + + private Item seedsItem; + + public GrowthcraftCropsRopeBlock() { + this(getInitProperties()); + } + + public GrowthcraftCropsRopeBlock(Properties properties) { + super(properties); + this.registerDefaultState(this.stateDefinition.any() + .setValue(NORTH, false) + .setValue(EAST, false) + .setValue(SOUTH, false) + .setValue(WEST, false) + .setValue(UP, false) + .setValue(DOWN, true) + .setValue(AGE, 0) + ); + } + + public static Properties getInitProperties() { + BlockBehaviour.Properties properties = BlockBehaviour.Properties.of(Material.PLANT); + properties.noCollission(); + properties.randomTicks(); + properties.instabreak(); + properties.sound(SoundType.CROP); + return properties; + } + + public BlockState getStateForAge(Level level, BlockPos pos, int i) { + BlockState currentState = level.getBlockState(pos); + return getActualBlockStateWithAge(level, pos, Integer.valueOf(i)); + } + + @Override + protected void createBlockStateDefinition(StateDefinition.Builder blockStateBuilder) { + blockStateBuilder.add(NORTH, EAST, SOUTH, WEST, UP, DOWN, AGE); + } + + @Override + public boolean isRandomlyTicking(BlockState state) { + return !this.isMaxAge(state); + } + + @Override + public void randomTick(BlockState state, ServerLevel level, BlockPos pos, Random random) { + this.tryGrow(state, level, pos, random.nextInt(4)); + } + + public void tryGrow(BlockState state, ServerLevel level, BlockPos pos, int randomness) { + if (!level.isAreaLoaded(pos, 1)) return; + if (level.getRawBrightness(pos, 0) >= 9) { + int i = this.getAge(state); + if (i < this.getMaxAge()) { + if (net.minecraftforge.common.ForgeHooks.onCropsGrowPre(level, pos, state, randomness == 0)) { + level.setBlock(pos, this.getStateForAge(level, pos, i + 1), Block.UPDATE_ALL); + net.minecraftforge.common.ForgeHooks.onCropsGrowPost(level, pos, state); + } + } + } + } + + @Override + @ParametersAreNonnullByDefault + public @NotNull BlockState updateShape(BlockState state, Direction direction, BlockState blockState, LevelAccessor levelAccessor, BlockPos blockPos1, BlockPos blockPos2) { + return super.updateShape(getActualBlockState(levelAccessor, blockPos1), direction, blockState, levelAccessor, blockPos1, blockPos2); + } + + @Nullable + @Override + public BlockState getStateForPlacement(BlockPlaceContext context) { + return getActualBlockState(context.getLevel(), context.getClickedPos()); + } + + public BlockState getActualBlockState(BlockGetter level, BlockPos blockPos) { + //GrowthcraftCellar.LOGGER.warn(String.format("%s [CropsRopeBlock,getActualBlockState]", blockPos.toString())); + + return getActualBlockStateWithAge(level, blockPos, level.getBlockState(blockPos).getValue(this.getAgeProperty())); + } + + public BlockState getActualBlockStateWithAge(BlockGetter blockGetter, BlockPos pos, int age) { + BlockState blockState = this.defaultBlockState(); + FluidState fluidState = blockGetter.getFluidState(pos); + + BlockPos northBlockPos = pos.north(); + BlockPos eastBlockPos = pos.east(); + BlockPos southBlockPos = pos.south(); + BlockPos westBlockPos = pos.west(); + BlockPos upBlockPos = pos.above(); + BlockPos downBlockPos = pos.below(); + + BlockState northBlockState = blockGetter.getBlockState(northBlockPos); + BlockState eastBlockState = blockGetter.getBlockState(eastBlockPos); + BlockState southBlockState = blockGetter.getBlockState(southBlockPos); + BlockState westBlockState = blockGetter.getBlockState(westBlockPos); + BlockState upBlockState = blockGetter.getBlockState(upBlockPos); + BlockState downBlockState = blockGetter.getBlockState(downBlockPos); + + RopeBlockEntity entity = (RopeBlockEntity) blockGetter.getBlockEntity(pos); + + return blockState.setValue(AGE, age) + .setValue(NORTH, northBlockState.is(GrowthcraftTags.Blocks.ROPE)) + .setValue(EAST, eastBlockState.is(GrowthcraftTags.Blocks.ROPE)) + .setValue(SOUTH, southBlockState.is(GrowthcraftTags.Blocks.ROPE)) + .setValue(WEST, westBlockState.is(GrowthcraftTags.Blocks.ROPE)) + .setValue(UP, upBlockState.is(GrowthcraftTags.Blocks.ROPE)) + .setValue(DOWN, downBlockState.is(GrowthcraftTags.Blocks.ROPE)); + } + + @Override + public VoxelShape getShape(BlockState state, BlockGetter blockGetter, BlockPos pos, CollisionContext context) { + ArrayList voxelShapeArrayList = new ArrayList(); + + BlockPos northBlockPos = pos.north(); + BlockPos eastBlockPos = pos.east(); + BlockPos southBlockPos = pos.south(); + BlockPos westBlockPos = pos.west(); + BlockPos upBlockPos = pos.above(); + BlockPos downBlockPos = pos.below(); + + BlockState northBlockState = blockGetter.getBlockState(northBlockPos); + BlockState eastBlockState = blockGetter.getBlockState(eastBlockPos); + BlockState southBlockState = blockGetter.getBlockState(southBlockPos); + BlockState westBlockState = blockGetter.getBlockState(westBlockPos); + BlockState upBlockState = blockGetter.getBlockState(upBlockPos); + BlockState downBlockState = blockGetter.getBlockState(downBlockPos); + + if (northBlockState.is(GrowthcraftTags.Blocks.ROPE)) voxelShapeArrayList.add(NORTH_BOUNDING_BOX); + if (eastBlockState.is(GrowthcraftTags.Blocks.ROPE)) voxelShapeArrayList.add(EAST_BOUNDING_BOX); + if (southBlockState.is(GrowthcraftTags.Blocks.ROPE)) voxelShapeArrayList.add(SOUTH_BOUNDING_BOX); + if (westBlockState.is(GrowthcraftTags.Blocks.ROPE)) voxelShapeArrayList.add(WEST_BOUNDING_BOX); + if (upBlockState.is(GrowthcraftTags.Blocks.ROPE)) voxelShapeArrayList.add(UP_BOUNDING_BOX); + if (downBlockState.is(GrowthcraftTags.Blocks.ROPE)) voxelShapeArrayList.add(DOWN_BOUNDING_BOX); + + VoxelShape[] voxelShapes = new VoxelShape[voxelShapeArrayList.size()]; + voxelShapes = voxelShapeArrayList.toArray(voxelShapes); + + return Shapes.or(KNOT_BOUNDING_BOX, voxelShapes); + } + + public boolean isMaxAge(BlockState blockState) { + return blockState.getValue(this.getAgeProperty()) >= this.getMaxAge(); + } + + public IntegerProperty getAgeProperty() { + return AGE; + } + + public int getMaxAge() { + return 7; + } + + protected int getAge(BlockState blockState) { + return blockState.getValue(this.getAgeProperty()); + } + + protected int getBonemealAgeIncrease(Level level) { + return Mth.nextInt(level.random, 0, 1); + } + + public void growCrops(Level level, BlockPos blockPos, BlockState state) { + int i = this.getAge(state) + this.getBonemealAgeIncrease(level); + int j = this.getMaxAge(); + if (i > j) { + i = j; + } + + level.setBlock(blockPos, this.getStateForAge(level, blockPos, i), Block.UPDATE_ALL); + } + + @Override + public boolean isValidBonemealTarget(BlockGetter level, BlockPos blockPos, BlockState state, boolean isClientSide) { + return !this.isMaxAge(state); + } + + @Override + public boolean isBonemealSuccess(Level level, Random random, BlockPos pos, BlockState state) { + return true; + } + + @Override + public void performBonemeal(ServerLevel level, Random random, BlockPos pos, BlockState state) { + this.growCrops(level, pos, state); + } + + protected static float getGrowthSpeed(Block block, BlockGetter blockGetter, BlockPos pos) { + float f = 1.0F; + BlockPos blockpos = pos.below(); + + for(int i = -1; i <= 1; ++i) { + for(int j = -1; j <= 1; ++j) { + float f1 = 0.0F; + BlockState blockstate = blockGetter.getBlockState(blockpos.offset(i, 0, j)); + if (blockstate.canSustainPlant(blockGetter, blockpos.offset(i, 0, j), net.minecraft.core.Direction.UP, (net.minecraftforge.common.IPlantable) block)) { + f1 = 1.0F; + if (blockstate.isFertile(blockGetter, pos.offset(i, 0, j))) { + f1 = 3.0F; + } + } + + if (i != 0 || j != 0) { + f1 /= 4.0F; + } + + f += f1; + } + } + + BlockPos blockpos1 = pos.north(); + BlockPos blockpos2 = pos.south(); + BlockPos blockpos3 = pos.west(); + BlockPos blockpos4 = pos.east(); + boolean flag = blockGetter.getBlockState(blockpos3).is(block) || blockGetter.getBlockState(blockpos4).is(block); + boolean flag1 = blockGetter.getBlockState(blockpos1).is(block) || blockGetter.getBlockState(blockpos2).is(block); + if (flag && flag1) { + f /= 2.0F; + } else { + boolean flag2 = blockGetter.getBlockState(blockpos3.north()).is(block) || blockGetter.getBlockState(blockpos4.north()).is(block) || blockGetter.getBlockState(blockpos4.south()).is(block) || blockGetter.getBlockState(blockpos3.south()).is(block); + if (flag2) { + f /= 2.0F; + } + } + + return f * 2.0F; + } + + + @Override + public void entityInside(BlockState blockState, Level level, BlockPos pos, Entity entity) { + if (entity instanceof Ravager && net.minecraftforge.event.ForgeEventFactory.getMobGriefingEvent(level, entity)) { + level.destroyBlock(pos, true, entity); + } + + super.entityInside(blockState, level, pos, entity); + } + + @Override + public InteractionResult use(BlockState state, Level level, BlockPos pos, Player player, InteractionHand hand, BlockHitResult hitResult) { + return InteractionResult.PASS; + } + + @Override + public boolean canSurvive(@NotNull BlockState state, LevelReader level, BlockPos pos) { + return true; + } + + public boolean canBeConnectedTo(BlockState state, BlockGetter world, BlockPos pos, Direction facing) { + return BlockStateUtils.isRopeBlock(state); + } + + + +} diff --git a/src/main/java/growthcraft/lib/block/GrowthcraftDoorBlock.java b/src/main/java/growthcraft/lib/block/GrowthcraftDoorBlock.java new file mode 100644 index 0000000..3620d2c --- /dev/null +++ b/src/main/java/growthcraft/lib/block/GrowthcraftDoorBlock.java @@ -0,0 +1,28 @@ +package growthcraft.lib.block; + +import net.minecraft.world.level.block.DoorBlock; +import net.minecraft.world.level.block.SoundType; +import net.minecraft.world.level.material.Material; +import net.minecraft.world.level.material.MaterialColor; + +public class GrowthcraftDoorBlock extends DoorBlock { + public GrowthcraftDoorBlock() { + this(getInitProperties(Material.WOOD)); + } + + public GrowthcraftDoorBlock(Material material) { + this(getInitProperties(material)); + } + + public GrowthcraftDoorBlock(Properties properties) { + super(properties); + } + + private static Properties getInitProperties(Material material) { + Properties properties = Properties.of(material, MaterialColor.WOOD); + properties.sound(SoundType.WOOD); + properties.strength(3.0F); + properties.noOcclusion(); + return properties; + } +} diff --git a/src/main/java/growthcraft/lib/block/GrowthcraftFenceBlock.java b/src/main/java/growthcraft/lib/block/GrowthcraftFenceBlock.java new file mode 100644 index 0000000..bb1679e --- /dev/null +++ b/src/main/java/growthcraft/lib/block/GrowthcraftFenceBlock.java @@ -0,0 +1,27 @@ +package growthcraft.lib.block; + +import net.minecraft.world.level.block.FenceBlock; +import net.minecraft.world.level.block.SoundType; +import net.minecraft.world.level.material.Material; +import net.minecraft.world.level.material.MaterialColor; + +public class GrowthcraftFenceBlock extends FenceBlock { + public GrowthcraftFenceBlock() { + this(getInitProperties(Material.WOOD)); + } + + public GrowthcraftFenceBlock(Material material) { + this(getInitProperties(material)); + } + + public GrowthcraftFenceBlock(Properties properties) { + super(properties); + } + + private static Properties getInitProperties(Material material) { + Properties properties = Properties.of(material, MaterialColor.WOOD); + properties.sound(SoundType.WOOD); + properties.strength(2.0F, 3.0F); + return properties; + } +} diff --git a/src/main/java/growthcraft/lib/block/GrowthcraftFenceGateBlock.java b/src/main/java/growthcraft/lib/block/GrowthcraftFenceGateBlock.java new file mode 100644 index 0000000..97acea3 --- /dev/null +++ b/src/main/java/growthcraft/lib/block/GrowthcraftFenceGateBlock.java @@ -0,0 +1,27 @@ +package growthcraft.lib.block; + +import net.minecraft.world.level.block.FenceGateBlock; +import net.minecraft.world.level.block.SoundType; +import net.minecraft.world.level.material.Material; +import net.minecraft.world.level.material.MaterialColor; + +public class GrowthcraftFenceGateBlock extends FenceGateBlock { + public GrowthcraftFenceGateBlock() { + this(getInitProperties(Material.WOOD)); + } + + public GrowthcraftFenceGateBlock(Material material) { + this(getInitProperties(material)); + } + + public GrowthcraftFenceGateBlock(Properties properties) { + super(properties); + } + + private static Properties getInitProperties(Material material) { + Properties properties = Properties.of(material, MaterialColor.WOOD); + properties.sound(SoundType.WOOD); + properties.strength(2.0F, 3.0F); + return properties; + } +} diff --git a/src/main/java/growthcraft/lib/block/GrowthcraftLeavesBlock.java b/src/main/java/growthcraft/lib/block/GrowthcraftLeavesBlock.java new file mode 100644 index 0000000..320f9da --- /dev/null +++ b/src/main/java/growthcraft/lib/block/GrowthcraftLeavesBlock.java @@ -0,0 +1,24 @@ +package growthcraft.lib.block; + +import net.minecraft.world.level.block.LeavesBlock; +import net.minecraft.world.level.block.SoundType; +import net.minecraft.world.level.material.Material; + +public class GrowthcraftLeavesBlock extends LeavesBlock { + public GrowthcraftLeavesBlock() { + this(getInitProperties()); + } + + public GrowthcraftLeavesBlock(Properties properties) { + super(properties); + } + + private static Properties getInitProperties() { + Properties properties = Properties.of(Material.LEAVES); + properties.randomTicks(); + properties.strength(0.2F, 0.2F); + properties.sound(SoundType.CROP); + properties.noOcclusion(); + return properties; + } +} diff --git a/src/main/java/growthcraft/lib/block/GrowthcraftLogBlock.java b/src/main/java/growthcraft/lib/block/GrowthcraftLogBlock.java new file mode 100644 index 0000000..1f76f16 --- /dev/null +++ b/src/main/java/growthcraft/lib/block/GrowthcraftLogBlock.java @@ -0,0 +1,42 @@ +package growthcraft.lib.block; + +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.block.RotatedPillarBlock; +import net.minecraft.world.level.block.SoundType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.material.Material; + +public class GrowthcraftLogBlock extends RotatedPillarBlock { + public GrowthcraftLogBlock() { + this(getInitProperties(Material.WOOD)); + } + + public GrowthcraftLogBlock(Properties properties) { + super(properties); + } + + private static Properties getInitProperties(Material material) { + Properties properties = Properties.of(material); + properties.strength(2.0F); + properties.sound(SoundType.WOOD); + return properties; + } + + @Override + public boolean isFlammable(BlockState state, BlockGetter level, BlockPos pos, Direction direction) { + return true; + } + + @Override + public int getFlammability(BlockState state, BlockGetter level, BlockPos pos, Direction direction) { + return 5; + } + + @Override + public int getFireSpreadSpeed(BlockState state, BlockGetter level, BlockPos pos, Direction direction) { + return 5; + } + +} diff --git a/src/main/java/growthcraft/lib/block/GrowthcraftPlankBlock.java b/src/main/java/growthcraft/lib/block/GrowthcraftPlankBlock.java new file mode 100644 index 0000000..604c233 --- /dev/null +++ b/src/main/java/growthcraft/lib/block/GrowthcraftPlankBlock.java @@ -0,0 +1,26 @@ +package growthcraft.lib.block; + +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.SoundType; +import net.minecraft.world.level.material.Material; + +public class GrowthcraftPlankBlock extends Block { + public GrowthcraftPlankBlock() { + this(getInitProperties(Material.WOOD)); + } + + public GrowthcraftPlankBlock(Material material) { + this(getInitProperties(material)); + } + + public GrowthcraftPlankBlock(Properties properties) { + super(properties); + } + + private static Properties getInitProperties(Material material) { + Properties properties = Properties.of(material); + properties.strength(2.0F, 3.0F); + properties.sound(SoundType.WOOD); + return properties; + } +} diff --git a/src/main/java/growthcraft/lib/block/GrowthcraftPressurePlateBlock.java b/src/main/java/growthcraft/lib/block/GrowthcraftPressurePlateBlock.java new file mode 100644 index 0000000..fb3de10 --- /dev/null +++ b/src/main/java/growthcraft/lib/block/GrowthcraftPressurePlateBlock.java @@ -0,0 +1,26 @@ +package growthcraft.lib.block; + +import net.minecraft.world.level.block.PressurePlateBlock; +import net.minecraft.world.level.block.SoundType; +import net.minecraft.world.level.material.Material; + +public class GrowthcraftPressurePlateBlock extends PressurePlateBlock { + public GrowthcraftPressurePlateBlock() { + this(Sensitivity.EVERYTHING, getInitProperties(Material.WOOD)); + } + + public GrowthcraftPressurePlateBlock(Material material) { + this(Sensitivity.EVERYTHING, getInitProperties(material)); + } + + public GrowthcraftPressurePlateBlock(Sensitivity sensitivity, Properties properties) { + super(sensitivity, properties); + } + + private static Properties getInitProperties(Material material) { + Properties properties = Properties.of(material); + properties.strength(1.5F); + properties.sound(SoundType.WOOD); + return properties; + } +} diff --git a/src/main/java/growthcraft/lib/block/GrowthcraftSaplingBlock.java b/src/main/java/growthcraft/lib/block/GrowthcraftSaplingBlock.java new file mode 100644 index 0000000..e99e852 --- /dev/null +++ b/src/main/java/growthcraft/lib/block/GrowthcraftSaplingBlock.java @@ -0,0 +1,29 @@ +package growthcraft.lib.block; + +import net.minecraft.world.level.block.SaplingBlock; +import net.minecraft.world.level.block.SoundType; +import net.minecraft.world.level.block.grower.AbstractTreeGrower; +import net.minecraft.world.level.material.Material; + +public class GrowthcraftSaplingBlock extends SaplingBlock { + private final AbstractTreeGrower tree; + + public GrowthcraftSaplingBlock(AbstractTreeGrower tree) { + this(tree, getInitProperties()); + } + + public GrowthcraftSaplingBlock(AbstractTreeGrower tree, Properties properties) { + super(tree, properties); + this.tree = tree; + } + + private static Properties getInitProperties() { + Properties properties = Properties.of(Material.PLANT); + properties.noCollission(); + properties.randomTicks(); + properties.sound(SoundType.GRASS); + properties.noOcclusion(); + properties.instabreak(); + return properties; + } +} diff --git a/src/main/java/growthcraft/lib/block/GrowthcraftSlabBlock.java b/src/main/java/growthcraft/lib/block/GrowthcraftSlabBlock.java new file mode 100644 index 0000000..c439c96 --- /dev/null +++ b/src/main/java/growthcraft/lib/block/GrowthcraftSlabBlock.java @@ -0,0 +1,25 @@ +package growthcraft.lib.block; + +import net.minecraft.world.level.block.SlabBlock; +import net.minecraft.world.level.material.Material; + +public class GrowthcraftSlabBlock extends SlabBlock { + public GrowthcraftSlabBlock() { + this(getInitProperties(Material.WOOD)); + } + + public GrowthcraftSlabBlock(Material material) { + this(getInitProperties(material)); + } + + public GrowthcraftSlabBlock(Properties properties) { + super(properties); + } + + private static Properties getInitProperties(Material material) { + Properties properties = Properties.of(material); + properties.strength(2.0F, 3.0F); + properties.noOcclusion(); + return properties; + } +} diff --git a/src/main/java/growthcraft/lib/block/GrowthcraftStairsBlock.java b/src/main/java/growthcraft/lib/block/GrowthcraftStairsBlock.java new file mode 100644 index 0000000..9cf8b81 --- /dev/null +++ b/src/main/java/growthcraft/lib/block/GrowthcraftStairsBlock.java @@ -0,0 +1,35 @@ +package growthcraft.lib.block; + +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.SoundType; +import net.minecraft.world.level.block.StairBlock; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.material.Material; + +import java.util.function.Supplier; + +public class GrowthcraftStairsBlock extends StairBlock { + + public GrowthcraftStairsBlock() { + this( + Blocks.OAK_STAIRS.defaultBlockState(), + getInitProperties(Material.WOOD) + ); + } + + @SuppressWarnings("deprecation") + public GrowthcraftStairsBlock(BlockState state, Properties properties) { + super(state, properties); + } + + public GrowthcraftStairsBlock(Supplier state, Properties properties) { + super(state, properties); + } + + private static Properties getInitProperties(Material material) { + Properties properties = Properties.of(material); + properties.strength(1.0F); + properties.sound(SoundType.STONE); + return properties; + } +} diff --git a/src/main/java/growthcraft/lib/block/GrowthcraftTrapDoorBlock.java b/src/main/java/growthcraft/lib/block/GrowthcraftTrapDoorBlock.java new file mode 100644 index 0000000..784b345 --- /dev/null +++ b/src/main/java/growthcraft/lib/block/GrowthcraftTrapDoorBlock.java @@ -0,0 +1,27 @@ +package growthcraft.lib.block; + +import net.minecraft.world.level.block.SoundType; +import net.minecraft.world.level.block.TrapDoorBlock; +import net.minecraft.world.level.material.Material; + +public class GrowthcraftTrapDoorBlock extends TrapDoorBlock { + public GrowthcraftTrapDoorBlock() { + this(getInitProperties(Material.WOOD)); + } + + public GrowthcraftTrapDoorBlock(Material material) { + this(getInitProperties(material)); + } + + public GrowthcraftTrapDoorBlock(Properties properties) { + super(properties); + } + + private static Properties getInitProperties(Material material) { + Properties properties = Properties.of(material); + properties.strength(2.0F, 3.0F); + properties.sound(SoundType.WOOD); + properties.noOcclusion(); + return properties; + } +} diff --git a/src/main/java/growthcraft/lib/block/entity/GrowthcraftFluidTank.java b/src/main/java/growthcraft/lib/block/entity/GrowthcraftFluidTank.java new file mode 100644 index 0000000..b6874f3 --- /dev/null +++ b/src/main/java/growthcraft/lib/block/entity/GrowthcraftFluidTank.java @@ -0,0 +1,84 @@ +package growthcraft.lib.block.entity; + +import net.minecraft.world.level.material.Fluid; +import net.minecraft.world.level.material.Fluids; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.capability.templates.FluidTank; + +import java.util.Collections; +import java.util.List; + +public class GrowthcraftFluidTank extends FluidTank { + + private List fluidsList; + private boolean isOutputOnly = false; + private boolean allowAnyFluid = false; + + public GrowthcraftFluidTank(int capacity) { + this(capacity, Collections.singletonList(Fluids.EMPTY), false); + } + + public GrowthcraftFluidTank(int capacity, boolean isOutputOnly) { + this(capacity, Collections.singletonList(Fluids.EMPTY), isOutputOnly); + } + + public GrowthcraftFluidTank(int capacity, List validFluids, boolean isOutputOnly) { + super(capacity); + this.fluidsList = validFluids; + this.isOutputOnly = isOutputOnly; + } + + public void setFluidFilter(List validFluids) { + this.fluidsList = fluidsList; + } + + public void addFluidFilter(Fluid fluid) { + this.fluidsList.add(fluid); + } + + /** + * Setter for determining whether or not to all all fluids into the tank. Defaults to false. + * @param allowAnyFluid Boolean indicating whether or not to allow any fluid into the tank object. + */ + public void allowAnyFluid(boolean allowAnyFluid) { + this.allowAnyFluid = allowAnyFluid; + } + + @Override + public void onContentsChanged() { + super.onContentsChanged(); + } + + /** + * Determine if an input fluid ia valid for this fluid tank. + * @param stack Fluidstack holding the Fluid to be queried. + * @return Boolean indicating if the fluid is valid for this tank. + */ + @Override + public boolean isFluidValid(FluidStack stack) { + if(isOutputOnly) return false; + if(allowAnyFluid) return true; + return (fluidsList.get(0) == Fluids.EMPTY || fluidsList.contains(stack.getFluid())); + } + + public boolean canFluidStackFit(FluidStack fluidStack) { + // If the tank is empty and the fluid is valid, and there is capacity, then the + // FluidStack will fit. + if(this.isEmpty() && this.isFluidValid(fluidStack) + && this.capacity > fluidStack.getAmount()) { + return true; + } + + // If the fluid type matches and there is enough room in the tank, + // then the fluid stack can fit. + if(this.getFluid().getFluid() == fluidStack.getFluid() + && this.capacity - this.getFluidAmount() > fluidStack.getAmount() + ) { + return true; + } + + // Otherwise return false. + return false; + } + +} diff --git a/src/main/java/growthcraft/lib/client/BlockRendererUtils.java b/src/main/java/growthcraft/lib/client/BlockRendererUtils.java new file mode 100644 index 0000000..f4ad049 --- /dev/null +++ b/src/main/java/growthcraft/lib/client/BlockRendererUtils.java @@ -0,0 +1,25 @@ +package growthcraft.lib.client; + +import java.util.Collection; + +import growthcraft.lib.utils.ColorUtils; +import net.minecraft.client.color.block.BlockColor; +import net.minecraft.world.level.block.Block; +import net.minecraftforge.client.event.ColorHandlerEvent; +import net.minecraftforge.registries.RegistryObject; + +public class BlockRendererUtils { + + public static void registerBlocks(ColorHandlerEvent.Block handler, BlockColor blockColor, Collection> blocks) { + if (blocks.isEmpty()) return; + blocks.stream() + .filter(RegistryObject::isPresent) + .map(RegistryObject::get) + .forEach(block -> handler.getBlockColors().register(blockColor, block)); + } + + public static void registerBlock(ColorHandlerEvent.Block handler, ColorUtils.GrowthcraftColor color, Block block) { + handler.getBlockColors().register((blockstate, reader, pos, i) -> color.toIntValue(), block); + } + +} diff --git a/src/main/java/growthcraft/lib/client/GrowthcraftItemColor.java b/src/main/java/growthcraft/lib/client/GrowthcraftItemColor.java new file mode 100644 index 0000000..11876f1 --- /dev/null +++ b/src/main/java/growthcraft/lib/client/GrowthcraftItemColor.java @@ -0,0 +1,20 @@ +package growthcraft.lib.client; + +import growthcraft.cellar.item.CellarPotionItem; +import growthcraft.lib.item.GrowthcraftItem; +import net.minecraft.client.color.item.ItemColor; +import net.minecraft.world.item.ItemStack; + +public class GrowthcraftItemColor implements ItemColor { + + public int getColor(ItemStack itemStack, int layer) { + + if (itemStack.getItem() instanceof GrowthcraftItem growthcraftItem) { + return growthcraftItem.getColor(layer); + } + if (itemStack.getItem() instanceof CellarPotionItem cellarPotionItem) { + return cellarPotionItem.getColor(layer); + } + return 0; + } +} diff --git a/src/main/java/growthcraft/lib/client/ItemRendererUtils.java b/src/main/java/growthcraft/lib/client/ItemRendererUtils.java new file mode 100644 index 0000000..403871d --- /dev/null +++ b/src/main/java/growthcraft/lib/client/ItemRendererUtils.java @@ -0,0 +1,24 @@ +package growthcraft.lib.client; + +import java.util.Collection; + +import net.minecraft.client.color.item.ItemColor; +import net.minecraft.world.item.Item; +import net.minecraftforge.client.event.ColorHandlerEvent; +import net.minecraftforge.registries.RegistryObject; + +public class ItemRendererUtils { + + public static void registerItems(ColorHandlerEvent.Item handler, ItemColor itemColor, Collection> items) { + if (items.isEmpty()) return; + items.stream() + .filter(RegistryObject::isPresent) + .map(RegistryObject::get) + .forEach(item -> handler.getItemColors().register(itemColor, item)); + } + + public static void registerItem(ColorHandlerEvent.Item handler, ItemColor itemColor, Item item) { + handler.getItemColors().register(itemColor, item); + } + +} diff --git a/src/main/java/growthcraft/lib/item/GrowthcraftBlockItem.java b/src/main/java/growthcraft/lib/item/GrowthcraftBlockItem.java new file mode 100644 index 0000000..3c0becc --- /dev/null +++ b/src/main/java/growthcraft/lib/item/GrowthcraftBlockItem.java @@ -0,0 +1,27 @@ +package growthcraft.lib.item; + +import growthcraft.core.shared.Reference; +import net.minecraft.world.item.BlockItem; +import net.minecraft.world.level.block.Block; + +public class GrowthcraftBlockItem extends BlockItem { + + public GrowthcraftBlockItem(Block block) { + this(block, getInitProperties(64)); + } + + public GrowthcraftBlockItem(Block block, int stackSize) { + this(block, getInitProperties(stackSize)); + } + + public GrowthcraftBlockItem(Block block, Properties properties) { + super(block, properties); + } + + private static Properties getInitProperties(int maxStackSize) { + Properties properties = new Properties(); + properties.stacksTo(maxStackSize); + properties.tab(Reference.ITEM_GROUP); + return properties; + } +} diff --git a/src/main/java/growthcraft/lib/item/GrowthcraftBowlFoodItem.java b/src/main/java/growthcraft/lib/item/GrowthcraftBowlFoodItem.java new file mode 100644 index 0000000..bff90c9 --- /dev/null +++ b/src/main/java/growthcraft/lib/item/GrowthcraftBowlFoodItem.java @@ -0,0 +1,28 @@ +package growthcraft.lib.item; + +import growthcraft.core.shared.Reference; +import net.minecraft.world.food.FoodProperties; +import net.minecraft.world.item.BowlFoodItem; + +public class GrowthcraftBowlFoodItem extends BowlFoodItem { + + public GrowthcraftBowlFoodItem() { + this(1, 0.2F, 64); + } + + public GrowthcraftBowlFoodItem(int maxStackSize) { + this(1, 0.2F, maxStackSize); + } + + public GrowthcraftBowlFoodItem(int hunger, float saturation, int maxStackSize) { + super(getInitProperties(hunger, saturation, maxStackSize)); + } + + private static Properties getInitProperties(int hunger, float saturation, int maxStackSize) { + Properties properties = new Properties(); + properties.stacksTo(maxStackSize); + properties.food(new FoodProperties.Builder().nutrition(hunger).saturationMod(saturation).build()); + properties.tab(Reference.ITEM_GROUP); + return properties; + } +} diff --git a/src/main/java/growthcraft/lib/item/GrowthcraftBucketItem.java b/src/main/java/growthcraft/lib/item/GrowthcraftBucketItem.java new file mode 100644 index 0000000..949387b --- /dev/null +++ b/src/main/java/growthcraft/lib/item/GrowthcraftBucketItem.java @@ -0,0 +1,51 @@ +package growthcraft.lib.item; + +import java.awt.Color; +import java.util.function.Supplier; + +import javax.annotation.Nullable; + +import growthcraft.core.shared.Reference; +import net.minecraft.world.item.BucketItem; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.world.level.material.Fluid; + +public class GrowthcraftBucketItem extends BucketItem { + + private final int color; + + public GrowthcraftBucketItem(Supplier supplier, Color color) { + super(supplier, + new Item.Properties().stacksTo(1).tab(Reference.ITEM_GROUP)); + + this.color = color.getRGB(); + } + + @Override + public net.minecraftforge.common.capabilities.ICapabilityProvider initCapabilities(ItemStack stack, @Nullable net.minecraft.nbt.CompoundTag nbt) { + if (this instanceof BucketItem) + return new net.minecraftforge.fluids.capability.wrappers.FluidBucketWrapper(stack); + else + return super.initCapabilities(stack, nbt); + } + + public int getColor() { + return this.color; + } + + public int getColor(int i) { + return i == 0 ? this.color : 0xFFFFFF; + } + + @Override + public boolean hasContainerItem(ItemStack stack) { + return true; + } + + @Override + public ItemStack getContainerItem(ItemStack itemStack) { + return new ItemStack(Items.BUCKET); + } +} \ No newline at end of file diff --git a/src/main/java/growthcraft/lib/item/GrowthcraftFoodItem.java b/src/main/java/growthcraft/lib/item/GrowthcraftFoodItem.java new file mode 100644 index 0000000..4dbdbf9 --- /dev/null +++ b/src/main/java/growthcraft/lib/item/GrowthcraftFoodItem.java @@ -0,0 +1,32 @@ +package growthcraft.lib.item; + +import growthcraft.core.shared.Reference; +import net.minecraft.world.food.FoodProperties; +import net.minecraft.world.item.Item; + +public class GrowthcraftFoodItem extends Item { + + public GrowthcraftFoodItem() { + this(1, 0.2F, 64); + } + + public GrowthcraftFoodItem(int maxStackSize) { + this(1, 0.2F, maxStackSize); + } + + public GrowthcraftFoodItem(int hunger, float saturation, int maxStackSize) { + super(getInitProperties(hunger, saturation, maxStackSize)); + } + + private static Properties getInitProperties(int hunger, float saturation, int maxStackSize) { + Properties properties = new Properties(); + properties.stacksTo(maxStackSize); + properties.food(new FoodProperties.Builder().nutrition(hunger).saturationMod(saturation).build()); + properties.tab(Reference.ITEM_GROUP); + return properties; + } + + + + +} diff --git a/src/main/java/growthcraft/lib/item/GrowthcraftItem.java b/src/main/java/growthcraft/lib/item/GrowthcraftItem.java new file mode 100644 index 0000000..fa60311 --- /dev/null +++ b/src/main/java/growthcraft/lib/item/GrowthcraftItem.java @@ -0,0 +1,43 @@ +package growthcraft.lib.item; + +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; + +import java.awt.*; + +import growthcraft.core.shared.Reference; + +public class GrowthcraftItem extends Item { + + private int color; + + public GrowthcraftItem() { + this(64); + this.color = 0x0; + } + + public GrowthcraftItem(int maxStackSize) { + super(getInitProperties(maxStackSize)); + this.color = 0x0; + } + + public GrowthcraftItem(int maxStackSize, Color color) { + this(maxStackSize); + this.color = color.getRGB(); + } + + private static Properties getInitProperties(int maxStackSize) { + Properties properties = new Properties(); + properties.stacksTo(maxStackSize); + properties.tab(Reference.ITEM_GROUP); + return properties; + } + + public int getColor(ItemStack stack, int layer) { + return this.getColor(layer); + } + + public int getColor(int layer) { + return layer == 0 ? this.color : 0xFFFFFF; + } +} diff --git a/src/main/java/growthcraft/lib/kaupenjoe/screen/renderer/FluidTankRenderer.java b/src/main/java/growthcraft/lib/kaupenjoe/screen/renderer/FluidTankRenderer.java new file mode 100644 index 0000000..71ef835 --- /dev/null +++ b/src/main/java/growthcraft/lib/kaupenjoe/screen/renderer/FluidTankRenderer.java @@ -0,0 +1,233 @@ +package growthcraft.lib.kaupenjoe.screen.renderer; + +import java.text.NumberFormat; +import java.util.ArrayList; +import java.util.List; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import com.google.common.base.Preconditions; +import com.mojang.blaze3d.systems.RenderSystem; +import com.mojang.blaze3d.vertex.BufferBuilder; +import com.mojang.blaze3d.vertex.DefaultVertexFormat; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.Tesselator; +import com.mojang.blaze3d.vertex.VertexFormat; +import com.mojang.math.Matrix4f; + +import growthcraft.core.shared.Reference; +import net.minecraft.ChatFormatting; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.GameRenderer; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.MutableComponent; +import net.minecraft.network.chat.TranslatableComponent; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.inventory.InventoryMenu; +import net.minecraft.world.item.TooltipFlag; +import net.minecraft.world.level.material.Fluid; +import net.minecraft.world.level.material.Fluids; +import net.minecraftforge.fluids.FluidAttributes; +import net.minecraftforge.fluids.FluidStack; + +// CREDIT: https://github.com/mezz/JustEnoughItems by mezz +// Under MIT-License: https://github.com/mezz/JustEnoughItems/blob/1.19/LICENSE.txt +// Includes major rewrites and methods from: +// https://github.com/mezz/JustEnoughItems/blob/1.19/Forge/src/main/java/mezz/jei/forge/platform/FluidHelper.java +public class FluidTankRenderer { + private static final Logger LOGGER = LogManager.getLogger(); + + private static final NumberFormat nf = NumberFormat.getIntegerInstance(); + private static final int TEXTURE_SIZE = 16; + private static final int MIN_FLUID_HEIGHT = 1; // ensure tiny amounts of fluid are still visible + + private final long capacity; + private final TooltipMode tooltipMode; + private final int width; + private final int height; + + public FluidTankRenderer(long capacity, boolean showCapacity, int width, int height) { + this(capacity, showCapacity ? TooltipMode.SHOW_AMOUNT_AND_CAPACITY : TooltipMode.SHOW_AMOUNT, width, height); + } + + private FluidTankRenderer(long capacity, TooltipMode tooltipMode, int width, int height) { + Preconditions.checkArgument(capacity > 0, "capacity must be > 0"); + Preconditions.checkArgument(width > 0, "width must be > 0"); + Preconditions.checkArgument(height > 0, "height must be > 0"); + + this.capacity = capacity; + this.tooltipMode = tooltipMode; + this.width = width; + this.height = height; + } + + private static void drawTiledSprite(PoseStack poseStack, final int tiledWidth, final int tiledHeight, int color, long scaledAmount, TextureAtlasSprite sprite) { + RenderSystem.setShaderTexture(0, InventoryMenu.BLOCK_ATLAS); + Matrix4f matrix = poseStack.last().pose(); + setGLColorFromInt(color); + + final int xTileCount = tiledWidth / TEXTURE_SIZE; + final int xRemainder = tiledWidth - (xTileCount * TEXTURE_SIZE); + final long yTileCount = scaledAmount / TEXTURE_SIZE; + final long yRemainder = scaledAmount - (yTileCount * TEXTURE_SIZE); + + final int yStart = tiledHeight; + + for (int xTile = 0; xTile <= xTileCount; xTile++) { + for (int yTile = 0; yTile <= yTileCount; yTile++) { + int width = (xTile == xTileCount) ? xRemainder : TEXTURE_SIZE; + long height = (yTile == yTileCount) ? yRemainder : TEXTURE_SIZE; + int x = (xTile * TEXTURE_SIZE); + int y = yStart - ((yTile + 1) * TEXTURE_SIZE); + if (width > 0 && height > 0) { + long maskTop = TEXTURE_SIZE - height; + int maskRight = TEXTURE_SIZE - width; + + drawTextureWithMasking(matrix, x, y, sprite, maskTop, maskRight, 100); + } + } + } + } + + private 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.setShaderColor(red, green, blue, alpha); + } + + private static void drawTextureWithMasking(Matrix4f matrix, float xCoord, float yCoord, TextureAtlasSprite textureSprite, long maskTop, long maskRight, float zLevel) { + float uMin = textureSprite.getU0(); + float uMax = textureSprite.getU1(); + float vMin = textureSprite.getV0(); + float vMax = textureSprite.getV1(); + uMax = uMax - (maskRight / 16F * (uMax - uMin)); + vMax = vMax - (maskTop / 16F * (vMax - vMin)); + + RenderSystem.setShader(GameRenderer::getPositionTexShader); + + Tesselator tessellator = Tesselator.getInstance(); + BufferBuilder bufferBuilder = tessellator.getBuilder(); + bufferBuilder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_TEX); + bufferBuilder.vertex(matrix, xCoord, yCoord + 16, zLevel).uv(uMin, vMax).endVertex(); + bufferBuilder.vertex(matrix, xCoord + 16 - maskRight, yCoord + 16, zLevel).uv(uMax, vMax).endVertex(); + bufferBuilder.vertex(matrix, xCoord + 16 - maskRight, yCoord + maskTop, zLevel).uv(uMax, vMin).endVertex(); + bufferBuilder.vertex(matrix, xCoord, yCoord + maskTop, zLevel).uv(uMin, vMin).endVertex(); + tessellator.end(); + } + + public void render(PoseStack poseStack, int x, int y, FluidStack fluidStack) { + RenderSystem.enableBlend(); + poseStack.pushPose(); + { + poseStack.translate(x, y, 0); + drawFluid(poseStack, width, height, fluidStack); + } + poseStack.popPose(); + RenderSystem.setShaderColor(1, 1, 1, 1); + RenderSystem.disableBlend(); + } + + private void drawFluid(PoseStack poseStack, final int width, final int height, FluidStack fluidStack) { + Fluid fluid = fluidStack.getFluid(); + if (fluid.isSame(Fluids.EMPTY)) { + return; + } + + TextureAtlasSprite fluidStillSprite = getStillFluidSprite(fluidStack); + int fluidColor = getColorTint(fluidStack); + + long amount = fluidStack.getAmount(); + long scaledAmount = (amount * height) / capacity; + + if (amount > 0 && scaledAmount < MIN_FLUID_HEIGHT) { + scaledAmount = MIN_FLUID_HEIGHT; + } + if (scaledAmount > height) { + scaledAmount = height; + } + + drawTiledSprite(poseStack, width, height, fluidColor, scaledAmount, fluidStillSprite); + } + + private TextureAtlasSprite getStillFluidSprite(FluidStack fluidStack) { + Fluid fluid = fluidStack.getFluid(); + FluidAttributes fluidAttributes = fluid.getAttributes(); + //IClientFluidTypeExtensions renderProperties; + +// if(fluid.getFluidType().getRenderPropertiesInternal() instanceof IClientFluidTypeExtensions internalProperties) { +// renderProperties = internalProperties; +// } else { +// renderProperties = IClientFluidTypeExtensions.of(fluid); +// } + + ResourceLocation fluidStill = fluidAttributes.getStillTexture(fluidStack); + + Minecraft minecraft = Minecraft.getInstance(); + return minecraft.getTextureAtlas(InventoryMenu.BLOCK_ATLAS).apply(fluidStill); + } + + private int getColorTint(FluidStack fluidStack) { + Fluid fluid = fluidStack.getFluid(); + FluidAttributes fluidAttributes = fluid.getAttributes(); +// IClientFluidTypeExtensions renderProperties; + +// if(fluid.getFluidType().getRenderPropertiesInternal() instanceof IClientFluidTypeExtensions internalProperties) { +// renderProperties = internalProperties; +// } else { +// renderProperties = IClientFluidTypeExtensions.of(fluid); +// } + + return fluidAttributes.getColor(fluidStack); + } + + public List getTooltip(FluidStack fluidStack, TooltipFlag tooltipFlag) { + List tooltip = new ArrayList<>(); + + Fluid fluidType = fluidStack.getFluid(); + FluidAttributes fluidAttributes = fluidType.getAttributes(); + try { + if (fluidType.isSame(Fluids.EMPTY)) { + MutableComponent amountString = new TranslatableComponent(Reference.MODID.concat(".tooltip.liquid.empty")); + tooltip.add(amountString.withStyle(ChatFormatting.GRAY)); + return tooltip; + } + + Component displayName = fluidStack.getDisplayName(); + tooltip.add(displayName); + + long amount = fluidStack.getAmount(); + long milliBuckets = (amount * 1000) / fluidAttributes.BUCKET_VOLUME; + + if (tooltipMode == TooltipMode.SHOW_AMOUNT_AND_CAPACITY) { + MutableComponent amountString = new TranslatableComponent(Reference.MODID.concat(".tooltip.liquid.amount.with.capacity"), nf.format(milliBuckets), nf.format(capacity)); + tooltip.add(amountString.withStyle(ChatFormatting.GRAY)); + } else if (tooltipMode == TooltipMode.SHOW_AMOUNT) { + MutableComponent amountString = new TranslatableComponent(Reference.MODID.concat(".tooltip.liquid.amount"), nf.format(milliBuckets)); + tooltip.add(amountString.withStyle(ChatFormatting.GRAY)); + } + } catch (RuntimeException e) { + LOGGER.error(String.format("Failed to get tooltip for fluid: %s", e)); + } + + return tooltip; + } + + public int getWidth() { + return width; + } + + public int getHeight() { + return height; + } + + enum TooltipMode { + SHOW_AMOUNT, + SHOW_AMOUNT_AND_CAPACITY, + ITEM_LIST + } +} \ No newline at end of file diff --git a/src/main/java/growthcraft/lib/networking/packet/FluidTankSyncPacket.java b/src/main/java/growthcraft/lib/networking/packet/FluidTankSyncPacket.java new file mode 100644 index 0000000..4f310f1 --- /dev/null +++ b/src/main/java/growthcraft/lib/networking/packet/FluidTankSyncPacket.java @@ -0,0 +1,34 @@ +package growthcraft.lib.networking.packet; + +import net.minecraft.core.BlockPos; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.network.NetworkEvent; + +import java.util.function.Supplier; + +public abstract class FluidTankSyncPacket { + public FluidStack fluidStack; + public int tankID; + + public final BlockPos blockPos; + + public FluidTankSyncPacket(int tankID, FluidStack fluidStack, BlockPos blockPos) { + this.fluidStack = fluidStack; + this.tankID = tankID; + this.blockPos = blockPos; + } + + public FluidTankSyncPacket(FriendlyByteBuf byteBuf) { + this.fluidStack = byteBuf.readFluidStack(); + this.blockPos = byteBuf.readBlockPos(); + } + + public void toBytes(FriendlyByteBuf byteBuf) { + byteBuf.writeFluidStack(this.fluidStack); + byteBuf.writeBlockPos(this.blockPos); + } + + public abstract boolean handle(Supplier supplier); + +} diff --git a/src/main/java/growthcraft/lib/screen/container/handler/NonInteractiveSlotItemHandler.java b/src/main/java/growthcraft/lib/screen/container/handler/NonInteractiveSlotItemHandler.java new file mode 100644 index 0000000..40a450f --- /dev/null +++ b/src/main/java/growthcraft/lib/screen/container/handler/NonInteractiveSlotItemHandler.java @@ -0,0 +1,24 @@ +package growthcraft.lib.screen.container.handler; + +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraftforge.items.IItemHandler; +import net.minecraftforge.items.SlotItemHandler; +import org.jetbrains.annotations.NotNull; + +public class NonInteractiveSlotItemHandler extends SlotItemHandler { + public NonInteractiveSlotItemHandler(IItemHandler itemHandler, int index, int xPosition, int yPosition) { + super(itemHandler, index, xPosition, yPosition); + } + + @Override + public boolean mayPickup(Player playerIn) { + return false; + } + + @Override + public boolean mayPlace(@NotNull ItemStack stack) { + return false; + } + +} diff --git a/src/main/java/growthcraft/lib/screen/slot/ResultSlot.java b/src/main/java/growthcraft/lib/screen/slot/ResultSlot.java new file mode 100644 index 0000000..e0b53d9 --- /dev/null +++ b/src/main/java/growthcraft/lib/screen/slot/ResultSlot.java @@ -0,0 +1,18 @@ +package growthcraft.lib.screen.slot; + +import net.minecraft.world.item.ItemStack; +import net.minecraftforge.items.IItemHandler; +import net.minecraftforge.items.SlotItemHandler; +import org.jetbrains.annotations.NotNull; + +public class ResultSlot extends SlotItemHandler { + public ResultSlot(IItemHandler itemHandler, int index, int xPosition, int yPosition) { + super(itemHandler, index, xPosition, yPosition); + } + + @Override + public boolean mayPlace(@NotNull ItemStack stack) { + // Prevent player from being able to place and item into this slot. + return false; + } +} diff --git a/src/main/java/growthcraft/lib/utils/BlockStateUtils.java b/src/main/java/growthcraft/lib/utils/BlockStateUtils.java new file mode 100644 index 0000000..150cc03 --- /dev/null +++ b/src/main/java/growthcraft/lib/utils/BlockStateUtils.java @@ -0,0 +1,86 @@ +package growthcraft.lib.utils; + +import growthcraft.core.block.RopeBlock; +import growthcraft.core.init.GrowthcraftTags; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.state.BlockState; + +import java.util.HashMap; +import java.util.Map; + +public class BlockStateUtils { + + public static Map getSurroundingBlockState(BlockGetter blockGetter, BlockPos pos) { + Map blockStateMap = new HashMap<>(); + + blockStateMap.put("north", blockGetter.getBlockState(pos.north())); + blockStateMap.put("north-east", blockGetter.getBlockState(pos.north().east())); + blockStateMap.put("east", blockGetter.getBlockState(pos.east())); + blockStateMap.put("south-east", blockGetter.getBlockState(pos.south().east())); + blockStateMap.put("south", blockGetter.getBlockState(pos.south())); + blockStateMap.put("south-west", blockGetter.getBlockState(pos.south().west())); + blockStateMap.put("west", blockGetter.getBlockState(pos.west())); + blockStateMap.put("north-west", blockGetter.getBlockState(pos.north().west())); + blockStateMap.put("above", blockGetter.getBlockState(pos.above())); + blockStateMap.put("below", blockGetter.getBlockState(pos.below())); + + return blockStateMap; + } + + public static Map getSurroundingBlockState(Level level, BlockPos pos) { + Map blockStateMap = new HashMap<>(); + + blockStateMap.put("north", level.getBlockState(pos.north())); + blockStateMap.put("north-east", level.getBlockState(pos.north().east())); + blockStateMap.put("east", level.getBlockState(pos.east())); + blockStateMap.put("south-east", level.getBlockState(pos.south().east())); + blockStateMap.put("south", level.getBlockState(pos.south())); + blockStateMap.put("south-west", level.getBlockState(pos.south().west())); + blockStateMap.put("west", level.getBlockState(pos.west())); + blockStateMap.put("north-west", level.getBlockState(pos.north().west())); + blockStateMap.put("above", level.getBlockState(pos.above())); + blockStateMap.put("below", level.getBlockState(pos.below())); + + return blockStateMap; + } + + + public static boolean isRopeBlock(BlockState blockState) { + return blockState.getBlock() instanceof RopeBlock || blockState.is(GrowthcraftTags.Blocks.ROPE); + } + + public static boolean isRopeConnected(BlockGetter world, BlockPos pos) { + Map blockMap = BlockStateUtils.getSurroundingBlockState(world, pos); + + if (BlockStateUtils.isRopeBlock(blockMap.get("north"))) return true; + if (BlockStateUtils.isRopeBlock(blockMap.get("east"))) return true; + if (BlockStateUtils.isRopeBlock(blockMap.get("south"))) return true; + if (BlockStateUtils.isRopeBlock(blockMap.get("west"))) return true; + if (BlockStateUtils.isRopeBlock(blockMap.get("above"))) return true; + return BlockStateUtils.isRopeBlock(blockMap.get("below")); + } + + public static Map getSurroundingRopeConnections(BlockGetter blockGetter, BlockPos pos) { + Map blockStateMap = new HashMap<>(); + + blockStateMap.put("north", blockGetter.getBlockState(pos.north()).is(GrowthcraftTags.Blocks.ROPE)); + blockStateMap.put("north-east", blockGetter.getBlockState(pos.north().east()).is(GrowthcraftTags.Blocks.ROPE)); + blockStateMap.put("east", blockGetter.getBlockState(pos.east()).is(GrowthcraftTags.Blocks.ROPE)); + blockStateMap.put("south-east", blockGetter.getBlockState(pos.south().east()).is(GrowthcraftTags.Blocks.ROPE)); + blockStateMap.put("south", blockGetter.getBlockState(pos.south()).is(GrowthcraftTags.Blocks.ROPE)); + blockStateMap.put("south-west", blockGetter.getBlockState(pos.south().west()).is(GrowthcraftTags.Blocks.ROPE)); + blockStateMap.put("west", blockGetter.getBlockState(pos.west()).is(GrowthcraftTags.Blocks.ROPE)); + blockStateMap.put("north-west", blockGetter.getBlockState(pos.north().west()).is(GrowthcraftTags.Blocks.ROPE)); + blockStateMap.put("above", blockGetter.getBlockState(pos.above()).is(GrowthcraftTags.Blocks.ROPE)); + blockStateMap.put("below", blockGetter.getBlockState(pos.below()).is(GrowthcraftTags.Blocks.ROPE)); + + return blockStateMap; + } + + public static boolean isHeated(BlockGetter blockGetter, BlockPos blockPos) { + Map blockMap = BlockStateUtils.getSurroundingBlockState(blockGetter, blockPos); + return blockMap.get("below").is(GrowthcraftTags.Blocks.HEATSOURCES); + } +} diff --git a/src/main/java/growthcraft/lib/utils/CheeseUtils.java b/src/main/java/growthcraft/lib/utils/CheeseUtils.java new file mode 100644 index 0000000..39ce603 --- /dev/null +++ b/src/main/java/growthcraft/lib/utils/CheeseUtils.java @@ -0,0 +1,29 @@ +package growthcraft.lib.utils; + +import java.util.HashMap; +import java.util.Map; + +public class CheeseUtils { + public static final String AGED = "aged"; + public static final String WAXED = "waxed"; + public static final String CURDS = "curds"; + public static final String SLICE = "slice"; + public static final String CHEESE = "cheese"; + public static final String DRAINED = "drained"; + + private CheeseUtils() { + /* Prevent generation of public constructor */ + } + + public static Map getCheeseNames(String cheeseName) { + Map names = new HashMap<>(); + String baseName = String.format("%s_%s", cheeseName, CHEESE); + names.put(CHEESE, baseName); + names.put(AGED, baseName + "_" + AGED); + names.put(WAXED, baseName + "_" + WAXED); + names.put(CURDS, baseName + "_" + CURDS); + names.put(SLICE, baseName + "_" + SLICE); + names.put(DRAINED, baseName + "_" + CURDS + "_" + DRAINED); + return names; + } +} diff --git a/src/main/java/growthcraft/lib/utils/ColorUtils.java b/src/main/java/growthcraft/lib/utils/ColorUtils.java new file mode 100644 index 0000000..18facfc --- /dev/null +++ b/src/main/java/growthcraft/lib/utils/ColorUtils.java @@ -0,0 +1,48 @@ +package growthcraft.lib.utils; + +import net.minecraft.client.color.item.ItemColor; + +import java.awt.*; +import java.util.HashMap; +import java.util.Map; + +import com.mojang.math.Vector3f; + +public class ColorUtils { + public static class GrowthcraftColor { + + private final Color color; + private final int colorIntValue; + + public GrowthcraftColor(int colorIntValue) { + color = new Color(colorIntValue); + this.colorIntValue = colorIntValue; + } + + public int toIntValue() { + return colorIntValue; + } + + public Map toFloatValues() { + Map floatMap = new HashMap(); + floatMap.put("red", this.color.getRed() / 255.0F); + floatMap.put("green", this.color.getGreen() / 255.0F); + floatMap.put("blue", this.color.getBlue() / 255.0F); + floatMap.put("alpha", this.color.getAlpha() / 255.0F); + return floatMap; + } + + public Vector3f toVectorColor() { + return new Vector3f(color.getRed(), color.getGreen(), color.getBlue()); + } + + public Color getColor() { + return color; + } + + public ItemColor toItemColor() { + return (itemStack, layer) -> layer == 0 ? colorIntValue : 0xFFFFFFFF; + } + + } +} diff --git a/src/main/java/growthcraft/lib/utils/CraftingUtils.java b/src/main/java/growthcraft/lib/utils/CraftingUtils.java new file mode 100644 index 0000000..f0c5dd5 --- /dev/null +++ b/src/main/java/growthcraft/lib/utils/CraftingUtils.java @@ -0,0 +1,27 @@ +package growthcraft.lib.utils; + +import com.google.gson.JsonObject; +import com.google.gson.JsonSyntaxException; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.GsonHelper; +import net.minecraft.world.level.material.Fluid; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.registries.ForgeRegistries; + +public class CraftingUtils { + + public static FluidStack getFluidStack(JsonObject json) { + ResourceLocation fluidName = new ResourceLocation(GsonHelper.getAsString(json, "fluid")); + int fluidAmount = GsonHelper.getAsInt(json, "amount", 1000); + + Fluid fluid = ForgeRegistries.FLUIDS.getValue(fluidName); + + if(fluid == null) { + throw new JsonSyntaxException("Unknown fluid '" + fluidName + "' in Json."); + } + + return new FluidStack(fluid, fluidAmount); + } + + private CraftingUtils() { /* Prevent automatic public constructor */ } +} diff --git a/src/main/java/growthcraft/lib/utils/DirectionUtils.java b/src/main/java/growthcraft/lib/utils/DirectionUtils.java new file mode 100644 index 0000000..0d8f7e9 --- /dev/null +++ b/src/main/java/growthcraft/lib/utils/DirectionUtils.java @@ -0,0 +1,29 @@ +package growthcraft.lib.utils; + +import net.minecraft.core.Direction; + +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +public class DirectionUtils { + + public static List SIDES = Stream.of( + Direction.NORTH, + Direction.EAST, + Direction.WEST, + Direction.SOUTH + ).collect(Collectors.toList()); + + public static boolean isSide(Direction direction) { + return SIDES.contains(direction); + } + + public static boolean isTop(Direction direction) { + return direction == Direction.UP; + } + + public static boolean isBottom(Direction direction) { + return direction == Direction.DOWN; + } +} diff --git a/src/main/java/growthcraft/lib/utils/EffectUtils.java b/src/main/java/growthcraft/lib/utils/EffectUtils.java new file mode 100644 index 0000000..9a7ecb9 --- /dev/null +++ b/src/main/java/growthcraft/lib/utils/EffectUtils.java @@ -0,0 +1,46 @@ +package growthcraft.lib.utils; + +import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.ListTag; +import net.minecraft.world.effect.MobEffect; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.item.ItemStack; + +import java.util.ArrayList; +import java.util.List; + +public class EffectUtils { + + public static List getEffectsList(ItemStack stack) { + List effects = new ArrayList<>(); + ListTag customPotionEffects = getEffects(stack); + + for (int i = 0; i < customPotionEffects.size(); ++i) { + CompoundTag compoundPotionEffect = customPotionEffects.getCompound(i); + MobEffectInstance mobEffectInstance = MobEffectInstance.load(compoundPotionEffect); + effects.add(mobEffectInstance); + } + + return effects; + } + + public static ListTag getEffects(ItemStack stack) { + CompoundTag compound = stack.getTag(); + return compound.getList("CustomPotionEffects", 9); + } + + public static void addEffect(ItemStack stack, MobEffect effect, int duration, int level) { + boolean flag = true; + + CompoundTag compoundNBT = stack.getOrCreateTag(); + ListTag mobEffects = getEffects(stack); + + MobEffectInstance effectInstance = new MobEffectInstance( + effect, duration, level + ); + + mobEffects.add(effectInstance.save(new CompoundTag())); + compoundNBT.put("CustomPotionEffects", mobEffects); + + } +} diff --git a/src/main/java/growthcraft/lib/utils/FluidUtils.java b/src/main/java/growthcraft/lib/utils/FluidUtils.java new file mode 100644 index 0000000..a730e1d --- /dev/null +++ b/src/main/java/growthcraft/lib/utils/FluidUtils.java @@ -0,0 +1,32 @@ +package growthcraft.lib.utils; + +import net.minecraft.resources.ResourceLocation; + +import java.util.HashMap; +import java.util.Map; + +public class FluidUtils { + + public static final String STILL = "fluid"; + public static final String FLOWING = "flowing"; + public static final String BLOCK = "block"; + public static final String BUCKET = "bucket"; + + public static class FluidResource { + public static final ResourceLocation FLOWING = new ResourceLocation("block/water_flow"); + public static final ResourceLocation OVERLAY = new ResourceLocation("block/water_overlay"); + public static final ResourceLocation STILL = new ResourceLocation("block/water_still"); + + private FluidResource() { /* Prevent Public Constructor */ } + } + + public static Map getFluidNames(String baseName) { + Map names = new HashMap<>(); + names.put("block", baseName); + names.put("flowing", baseName + "_fluid_flowing"); + names.put("fluid", baseName + "_fluid"); + names.put("bucket", baseName + "_fluid_bucket"); + return names; + } + +} diff --git a/src/main/java/growthcraft/lib/utils/RandomGeneratorUtils.java b/src/main/java/growthcraft/lib/utils/RandomGeneratorUtils.java new file mode 100644 index 0000000..9876227 --- /dev/null +++ b/src/main/java/growthcraft/lib/utils/RandomGeneratorUtils.java @@ -0,0 +1,27 @@ +package growthcraft.lib.utils; + +import java.security.SecureRandom; + +public class RandomGeneratorUtils { + + public static int getRandomInt() { + return getRandomInt(100); + } + + public static int getRandomInt(int max) { + return getRandomIntRange(0, max); + } + + public static int getRandomIntRange(int min, int max) { + return new SecureRandom().nextInt(min, max); + } + + public static double getRandomDouble() { + return new SecureRandom().nextDouble(); + } + + public static double getRandomDouble(double minValue) { + return new SecureRandom().nextDouble() + minValue; + } + +} diff --git a/src/main/java/growthcraft/lib/utils/RecipeUtils.java b/src/main/java/growthcraft/lib/utils/RecipeUtils.java new file mode 100644 index 0000000..082da89 --- /dev/null +++ b/src/main/java/growthcraft/lib/utils/RecipeUtils.java @@ -0,0 +1,35 @@ +package growthcraft.lib.utils; + +public class RecipeUtils { + public static enum Category { + FLUID("fluid"), ITEM("item"), NULL("null"); + + private final String value; + + Category(final String value) { + this.value = value; + } + + @Override + public String toString() { + return value; + } + + public static Category with(String value) { + return switch (value) { + case "fluid" -> FLUID; + case "item" -> ITEM; + case "null" -> NULL; + default -> null; + }; + } + } + + public static boolean isNull(Category category) { + return category.equals(Category.NULL); + } + + public static boolean isNotNull(Category category) { + return !category.equals(Category.NULL); + } +} diff --git a/src/main/java/growthcraft/lib/utils/TextureHelper.java b/src/main/java/growthcraft/lib/utils/TextureHelper.java new file mode 100644 index 0000000..1ec2e1b --- /dev/null +++ b/src/main/java/growthcraft/lib/utils/TextureHelper.java @@ -0,0 +1,9 @@ +package growthcraft.lib.utils; + +import net.minecraft.resources.ResourceLocation; + +public class TextureHelper { + public static ResourceLocation getTextureGui(String modid, String name) { + return new ResourceLocation(modid, String.format("textures/gui/%s_screen.png", name)); + } +} diff --git a/src/main/java/growthcraft/lib/utils/TickUtils.java b/src/main/java/growthcraft/lib/utils/TickUtils.java new file mode 100644 index 0000000..34a805a --- /dev/null +++ b/src/main/java/growthcraft/lib/utils/TickUtils.java @@ -0,0 +1,71 @@ +package growthcraft.lib.utils; + +import java.security.SecureRandom; + +public class TickUtils { + + /** + * Convert an amount of time to ticks. + * + * @param duration Length of time. + * @param metric Type of time [ seconds, minutes, hours ]. + * @return Number of ticks from the amount of time and metric. + */ + public static int toTicks(int duration, String metric) { + switch (metric) { + case "minutes": + return fromMinutes(duration); + case "hours": + return fromHours(duration); + case "seconds": + default: + return fromSeconds(duration); + } + } + + /** + * Convert seconds into ticks. There are 20 ticks per second. + * + * @param seconds Number of seconds. + * @return Number of ticks per number of given seconds. + */ + public static int fromSeconds(int seconds) { + return seconds * 20; + } + + /** + * Convert minute into ticks. There are 20 ticks per seconds and 60 seconds per minute. + * + * @param minutes Number of minutes. + * @return Number of ticks per number of given minutes. + */ + public static int fromMinutes(int minutes) { + return minutes * 20 * 60; + } + + /** + * Convert hours into ticks. There are 20 ticks per second, 60 seconds per minute, and 60 minutes per hour. + * + * @param hours Number of hours. + * @return Number of ticks per number of given hours. + */ + public static int fromHours(int hours) { + return hours * 20 * 60 * 60; + } + + public static String toHoursMinutesSeconds(int ticks) { + // 20 ticks per second. + // 1200 ticks per minute. + // 72000 ticks per hour. + + int hours = Math.round(ticks / 72000); + int minutes = Math.round(ticks / 1200); + int seconds = Math.round(ticks / 20 - minutes * 60); + + return hours > 0 ? String.format("%02d:%02d:%02d", hours, minutes, seconds) : String.format("%02d:%02d", minutes, seconds); + } + + public static int getRandomTickCooldown(int min, int max) { + return new SecureRandom().nextInt(max - min) + min; + } +} diff --git a/src/main/java/growthcraft/milk/GrowthcraftMilk.java b/src/main/java/growthcraft/milk/GrowthcraftMilk.java new file mode 100644 index 0000000..1071638 --- /dev/null +++ b/src/main/java/growthcraft/milk/GrowthcraftMilk.java @@ -0,0 +1,79 @@ +package growthcraft.milk; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import growthcraft.milk.init.GrowthcraftMilkBlockEntities; +import growthcraft.milk.init.GrowthcraftMilkBlocks; +import growthcraft.milk.init.GrowthcraftMilkFluids; +import growthcraft.milk.init.GrowthcraftMilkItems; +import growthcraft.milk.init.GrowthcraftMilkMenus; +import growthcraft.milk.init.GrowthcraftMilkRecipes; +import growthcraft.milk.init.LivingDropLootModifier; +import growthcraft.milk.init.client.GrowthcraftMilkBlockEntityRenderers; +import growthcraft.milk.init.client.GrowthcraftMilkBlockRenderers; +import growthcraft.milk.init.config.GrowthcraftMilkConfig; +import growthcraft.milk.lib.networking.GrowthcraftMilkMessages; +import growthcraft.milk.screen.ChurnScreen; +import growthcraft.milk.screen.MixingVatScreen; +import growthcraft.milk.screen.PancheonScreen; +import growthcraft.milk.shared.Reference; +import net.minecraft.client.gui.screens.MenuScreens; +import net.minecraftforge.client.event.EntityRenderersEvent; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.event.server.ServerStartingEvent; +import net.minecraftforge.eventbus.api.IEventBus; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; +import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; +import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; + + +@Mod(Reference.MODID) +@Mod.EventBusSubscriber(modid = Reference.MODID, bus = Mod.EventBusSubscriber.Bus.MOD) +public class GrowthcraftMilk { + public static final Logger LOGGER = LogManager.getLogger(Reference.MODID); + + public GrowthcraftMilk() { + IEventBus modEventBus = FMLJavaModLoadingContext.get().getModEventBus(); + modEventBus.addListener(this::setup); + modEventBus.addListener(this::clientSetupEvent); + modEventBus.addListener(this::onRegisterRenderers); + + // Config + GrowthcraftMilkConfig.loadConfig(); + + // Blocks, Items, Fluids, Block Entities, Containers + GrowthcraftMilkBlocks.BLOCKS.register(modEventBus); + GrowthcraftMilkItems.ITEMS.register(modEventBus); + GrowthcraftMilkBlockEntities.BLOCK_ENTITIES.register(modEventBus); + GrowthcraftMilkFluids.FLUIDS.register(modEventBus); + GrowthcraftMilkMenus.MENUS.register(modEventBus); + + GrowthcraftMilkRecipes.register(modEventBus); + + MinecraftForge.EVENT_BUS.register(this); + } + + private void clientSetupEvent(final FMLClientSetupEvent event) { + GrowthcraftMilkBlockRenderers.setRenderLayers(); + MenuScreens.register(GrowthcraftMilkMenus.MIXING_VAT_MENU.get(), MixingVatScreen::new); + MenuScreens.register(GrowthcraftMilkMenus.PANCHEON_MENU.get(), PancheonScreen::new); + MenuScreens.register(GrowthcraftMilkMenus.CHURN_MENU.get(), ChurnScreen::new); + } + + private void setup(final FMLCommonSetupEvent event) { + MinecraftForge.EVENT_BUS.register(new LivingDropLootModifier()); + GrowthcraftMilkMessages.register(); + } + + @SubscribeEvent + public void onServerStarting(ServerStartingEvent event) { + LOGGER.info("Growthcraft Milk starting up ..."); + } + + public void onRegisterRenderers(EntityRenderersEvent.RegisterRenderers event) { + GrowthcraftMilkBlockEntityRenderers.register(event); + } +} \ No newline at end of file diff --git a/src/main/java/growthcraft/milk/block/CheeseCurdBlock.java b/src/main/java/growthcraft/milk/block/CheeseCurdBlock.java new file mode 100644 index 0000000..cfe0197 --- /dev/null +++ b/src/main/java/growthcraft/milk/block/CheeseCurdBlock.java @@ -0,0 +1,156 @@ +package growthcraft.milk.block; + +import java.awt.Color; +import java.util.Random; + +import growthcraft.core.utils.BlockPropertiesUtils; +import net.minecraft.core.BlockPos; +import net.minecraft.core.particles.ParticleTypes; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.item.ItemEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.LevelReader; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.RenderShape; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.StateDefinition; +import net.minecraft.world.level.block.state.properties.BlockStateProperties; +import net.minecraft.world.level.block.state.properties.IntegerProperty; +import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.VoxelShape; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.common.IForgeShearable; +import net.minecraftforge.common.Tags; + +public class CheeseCurdBlock extends Block implements IForgeShearable { + //TODO[11]: Implement CheeseCurdBlock + + public static final IntegerProperty AGE = BlockStateProperties.AGE_7; + private final int color; + + public static final VoxelShape VOXEL_SHAPE = Block.box( + 4.0D, 2.0D, 4.0D, + 12.0D, 8.0D, 12.0D + ); + + public CheeseCurdBlock(Color color) { + super(getInitProperties()); + this.color = color.getRGB(); + } + + private static Properties getInitProperties() { + Properties properties = Properties.copy(Blocks.WHITE_WOOL); + properties.noOcclusion(); + properties.randomTicks(); + properties.isValidSpawn(BlockPropertiesUtils::never); + properties.isRedstoneConductor(BlockPropertiesUtils::never); + properties.isViewBlocking(BlockPropertiesUtils::never); + return properties; + } + + @Override + public RenderShape getRenderShape(BlockState state) { + return RenderShape.MODEL; + } + + @Override + public VoxelShape getShape(BlockState p_60555_, BlockGetter p_60556_, BlockPos p_60557_, CollisionContext p_60558_) { + return VOXEL_SHAPE; + } + + @Override + protected void createBlockStateDefinition(StateDefinition.Builder stateBuilder) { + super.createBlockStateDefinition(stateBuilder.add(AGE)); + } + + public IntegerProperty getAgeProperty() { + return AGE; + } + + protected int getAge(BlockState state) { + return state.getValue(this.getAgeProperty()); + } + + public int getMaxAge() { + return 7; + } + + public boolean isMaxAge(BlockState state) { + return state.getValue(this.getAgeProperty()) >= this.getMaxAge(); + } + + public BlockState getStateForAge(int age) { + return this.defaultBlockState().setValue(this.getAgeProperty(), age); + } + + @Override + public boolean canSurvive(BlockState blockState, LevelReader levelReader, BlockPos blockPos) { + return !levelReader.getBlockState(blockPos.above()).isAir(); + } + + @Override + public boolean isRandomlyTicking(BlockState blockState) { + return !this.isMaxAge(blockState); + } + + @Override + public void randomTick(BlockState blockState, ServerLevel level, BlockPos blockPos, Random randomSource) { + super.randomTick(blockState, level, blockPos, randomSource); + + if (!level.isAreaLoaded(blockPos, 1)) { return; } + + int i = this.getAge(blockState); + level.setBlock(blockPos, this.getStateForAge(i + 1), Block.UPDATE_ALL_IMMEDIATE); + } + + @Override + public InteractionResult use(BlockState blockState, Level level, BlockPos blockPos, Player player, InteractionHand interactionHand, BlockHitResult blockHitResult) { + ItemStack heldItemStack = player.getItemInHand(interactionHand); + + if(level != null && !level.isClientSide && heldItemStack.is(Tags.Items.SHEARS)) { + if(blockState.getValue(AGE) != this.getMaxAge()) { + ItemStack itemStack = new ItemStack(blockState.getBlock(), 1); + ItemEntity itemEntity = new ItemEntity(level, blockPos.getX(), blockPos.getY(), blockPos.getZ(), itemStack); + level.addFreshEntity(itemEntity); + // Destory the current block. + level.destroyBlock(blockPos, true); + return InteractionResult.SUCCESS; + } else if (blockState.getValue(AGE) == 7) { + // Simply destroy the block and let the loot table figure out the drops. + level.destroyBlock(blockPos, true); + return InteractionResult.SUCCESS; + } + } + + return super.use(blockState, level, blockPos, player, interactionHand, blockHitResult); + } + + @Override + @OnlyIn(Dist.CLIENT) + public void animateTick(BlockState blockState, Level level, BlockPos blockPos, Random randomSource) { + if (blockState.getValue(AGE) < 7) { + if (randomSource.nextInt(16) <= 4) { + BlockPos blockPosBelow = blockPos.below(); + if (level.getBlockState(blockPosBelow).isAir()) { + + double d0 = (double) blockPos.getX() + randomSource.nextDouble() / 2.0D; + double d1 = (double) blockPos.getY() - 0.05D; + double d2 = (double) blockPos.getZ() + randomSource.nextDouble() / 2.0D; + + level.addParticle(ParticleTypes.FALLING_HONEY, + d0, d1, d2, + 0.0D, 0.0D, 0.0D + ); + } + } + } + } +} diff --git a/src/main/java/growthcraft/milk/block/CheesePressBlock.java b/src/main/java/growthcraft/milk/block/CheesePressBlock.java new file mode 100644 index 0000000..60c499f --- /dev/null +++ b/src/main/java/growthcraft/milk/block/CheesePressBlock.java @@ -0,0 +1,199 @@ +package growthcraft.milk.block; + +import java.util.Random; + +import org.jetbrains.annotations.Nullable; + +import growthcraft.core.init.GrowthcraftItems; +import growthcraft.milk.GrowthcraftMilk; +import growthcraft.milk.block.entity.CheesePressBlockEntity; +import growthcraft.milk.init.GrowthcraftMilkBlockEntities; +import net.minecraft.core.BlockPos; +import net.minecraft.core.particles.ParticleTypes; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.sounds.SoundSource; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.item.ItemEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.BaseEntityBlock; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.RenderShape; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityTicker; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.StateDefinition; +import net.minecraft.world.level.block.state.properties.IntegerProperty; +import net.minecraft.world.level.material.PushReaction; +import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.VoxelShape; + +public class CheesePressBlock extends BaseEntityBlock { + //TODO[63]: Implement CheesePressBlock + + public static final IntegerProperty ROTATION = IntegerProperty.create("rotation", 0, 7); + + public static final VoxelShape BOUNDING_BOX = Block.box( + 0.01F, 0.0F, 0.01F, + 15.98F, 15.98F, 15.98 + ); + + public CheesePressBlock() { + this(getInitProperties()); + } + + protected CheesePressBlock(Properties properties) { + super(properties); + } + + private static Properties getInitProperties() { + Properties properties = Properties.copy(Blocks.CHEST); + properties.noOcclusion(); + return properties; + } + + @Override + public RenderShape getRenderShape(BlockState p_49232_) { + return RenderShape.MODEL; + } + + @Override + public VoxelShape getShape(BlockState blockState, BlockGetter blockGetter, BlockPos blockPos, CollisionContext context) { + return BOUNDING_BOX; + } + + @Override + protected void createBlockStateDefinition(StateDefinition.Builder stateBuilder) { + super.createBlockStateDefinition(stateBuilder.add(ROTATION)); + } + + @Nullable + @Override + public BlockState getStateForPlacement(BlockPlaceContext context) { + return this.defaultBlockState().setValue(ROTATION, 0); + } + + @Override + public PushReaction getPistonPushReaction(BlockState p_60584_) { + return PushReaction.DESTROY; + } + + @Nullable + @Override + public BlockEntity newBlockEntity(BlockPos blockPos, BlockState blockState) { + return GrowthcraftMilkBlockEntities.CHEESE_PRESS_BLOCK_ENTITY.get().create(blockPos, blockState); + } + + @Nullable + @Override + public BlockEntityTicker getTicker(Level level, BlockState blockState, BlockEntityType entityType) { + if (level.isClientSide) { + return blockState.getValue(ROTATION) == 7 + ? createTickerHelper( + entityType, + GrowthcraftMilkBlockEntities.CHEESE_PRESS_BLOCK_ENTITY.get(), + CheesePressBlockEntity::particleTick) + : null; + } else { + return createTickerHelper( + entityType, + GrowthcraftMilkBlockEntities.CHEESE_PRESS_BLOCK_ENTITY.get(), + (worldLevel, pos, state, blockEntity) -> (blockEntity).tick() + ); + } + } + + @Override + public InteractionResult use(BlockState blockState, Level level, BlockPos blockPos, Player player, InteractionHand interactionHand, BlockHitResult blockHitResult) { + + if (level != null && !level.isClientSide) { + CheesePressBlockEntity blockEntity = (CheesePressBlockEntity) level.getBlockEntity(blockPos); + if (blockEntity == null) return InteractionResult.FAIL; + + if (player.getItemInHand(interactionHand).getItem() == GrowthcraftItems.WRENCH.get()) { + if (!player.isCrouching()) { + // Then tighten the cheese press. + level.playSound(null, blockPos, SoundEvents.CHAIN_PLACE, SoundSource.BLOCKS, 1.0F, 1.0F); + level.setBlock(blockPos, blockState.setValue(ROTATION, blockEntity.doRotation(true)), Block.UPDATE_ALL_IMMEDIATE); + } else { + // Then loosen the cheese press and extract the result item. + level.playSound(null, blockPos, SoundEvents.CHAIN_BREAK, SoundSource.BLOCKS, 1.0F, 1.0F); + level.setBlock(blockPos, blockState.setValue(ROTATION, blockEntity.doRotation(false)), Block.UPDATE_ALL_IMMEDIATE); + + // Retrieve the itemstack in the output slot. + ItemStack resultItemStack = blockEntity.getItemStackHandler().getStackInSlot(1).copy(); + if (!resultItemStack.isEmpty() && !player.getInventory().add(resultItemStack)) { + ItemEntity itemEntity = new ItemEntity(level, blockPos.getX(), blockPos.getY(), blockPos.getZ(), resultItemStack); + level.addFreshEntity(itemEntity); + } + + // Set the output slot to air. + blockEntity.getItemStackHandler().setStackInSlot(1, new ItemStack(Items.AIR)); + } + + return InteractionResult.SUCCESS; + } else if (!player.getItemInHand(interactionHand).isEmpty() && blockEntity.isOpen() && blockEntity.getItemStackHandler().getStackInSlot(0).isEmpty()) { + // Insert one count of the item being held. + ItemStack itemStackToInsert = player.getItemInHand(interactionHand).copy(); + itemStackToInsert.setCount(1); + blockEntity.getItemStackHandler().insertItem(0, itemStackToInsert, false); + + player.getItemInHand(interactionHand).shrink(1); + + return InteractionResult.SUCCESS; + } else if (player.isCrouching() && player.getItemInHand(interactionHand).isEmpty() && blockEntity.isOpen() && !blockEntity.getItemStackHandler().getStackInSlot(0).isEmpty()) { + // Insert one count of the item being held. + ItemStack resultItemStack = blockEntity.getItemStackHandler().getStackInSlot(0).copy(); + + if (!resultItemStack.isEmpty() && !player.getInventory().add(resultItemStack)) { + ItemEntity itemEntity = new ItemEntity(level, blockPos.getX(), blockPos.getY(), blockPos.getZ(), resultItemStack); + level.addFreshEntity(itemEntity); + } + + blockEntity.getItemStackHandler().setStackInSlot(0, ItemStack.EMPTY); + + return InteractionResult.SUCCESS; + } + + } + + return InteractionResult.PASS; + + } + + @Override + public void onRemove(BlockState blockState, Level level, BlockPos blockPos, BlockState newBlockState, boolean isMoving) { + if (blockState.getBlock() != newBlockState.getBlock()) { + try { + CheesePressBlockEntity blockEntity = (CheesePressBlockEntity) level.getBlockEntity(blockPos); + blockEntity.dropItems(); + } catch (Exception ex) { + GrowthcraftMilk.LOGGER.error(String.format("Invalid blockEntity type at %s, expected RoasterBlockEntity", blockPos)); + } + } + super.onRemove(blockState, level, blockPos, newBlockState, isMoving); + } + + public static void makeParticles(Level level, BlockPos blockPos, BlockState blockState) { + Random randomSource = level.getRandom(); + + CheesePressBlockEntity blockEntity = (CheesePressBlockEntity) level.getBlockEntity(blockPos); + + if (blockState.getValue(ROTATION) == 7 && blockEntity.getTickClock("current") > 0) { + double d0 = (double) blockPos.getX() + randomSource.nextDouble() / 1.0D; + double d1 = (double) blockPos.getY() - 0.05D; + double d2 = (double) blockPos.getZ() + randomSource.nextDouble() / 1.0D; + + level.addParticle(ParticleTypes.FALLING_HONEY, d0, d1, d2, 0.0D, 0.0D, 0.0D); + } + + } +} diff --git a/src/main/java/growthcraft/milk/block/CheeseWheelBlock.java b/src/main/java/growthcraft/milk/block/CheeseWheelBlock.java new file mode 100644 index 0000000..6dc91c0 --- /dev/null +++ b/src/main/java/growthcraft/milk/block/CheeseWheelBlock.java @@ -0,0 +1,154 @@ +package growthcraft.milk.block; + +import growthcraft.milk.block.entity.CheeseWheelBlockEntity; +import growthcraft.milk.init.GrowthcraftMilkBlockEntities; +import net.minecraft.core.BlockPos; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.*; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityTicker; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.StateDefinition; +import net.minecraft.world.level.block.state.properties.BlockStateProperties; +import net.minecraft.world.level.block.state.properties.BooleanProperty; +import net.minecraft.world.level.block.state.properties.DirectionProperty; +import net.minecraft.world.level.block.state.properties.IntegerProperty; +import net.minecraft.world.level.material.PushReaction; +import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.VoxelShape; +import org.jetbrains.annotations.Nullable; + +import java.awt.*; + +public class CheeseWheelBlock extends BaseEntityBlock { + public static final DirectionProperty FACING = BlockStateProperties.HORIZONTAL_FACING; + public static final BooleanProperty AGED = BooleanProperty.create("aged"); + public static final IntegerProperty SLICE_COUNT_TOP = IntegerProperty.create("slicestop", 0, 4); + public static final IntegerProperty SLICE_COUNT_BOTTOM = IntegerProperty.create("slicesbottom", 0, 4); + + public static final VoxelShape BOUNDING_BOX = Block.box( + 1.00F, 0.0F, 1.0F, + 15.0F, 16.0F, 15.0F + ); + + public static final VoxelShape BOUNDING_BOX_HALF = Block.box( + 1.00F, 0.0F, 1.0F, + 15.0F, 8.0F, 15.0F + ); + + private final int color; + + public CheeseWheelBlock(Color color) { + super(getInitProperties()); + this.color = color.getRGB(); + } + + public static Properties getInitProperties() { + Properties properties = Properties.copy(Blocks.CAKE); + properties.noOcclusion(); + return properties; + } + + @Nullable + @Override + public BlockEntity newBlockEntity(BlockPos blockPos, BlockState blockState) { + return GrowthcraftMilkBlockEntities.CHEESE_WHEEL_BLOCK_ENTITY.get().create(blockPos, blockState); + } + + @Nullable + @Override + public BlockEntityTicker getTicker(Level level, BlockState blockState, BlockEntityType blockEntityType) { + return createTickerHelper( + blockEntityType, + GrowthcraftMilkBlockEntities.CHEESE_WHEEL_BLOCK_ENTITY.get(), + (worldLevel, pos, state, blockEntity) -> (blockEntity).tick() + ); } + + @Override + public RenderShape getRenderShape(BlockState p_60550_) { + return RenderShape.MODEL; + } + + @Override + public VoxelShape getShape(BlockState blockState, BlockGetter blockGetter, BlockPos blockPos, CollisionContext context) { + return blockState.getValue(SLICE_COUNT_TOP) > 0 + ? BOUNDING_BOX + : BOUNDING_BOX_HALF; + } + + @Override + protected void createBlockStateDefinition(StateDefinition.Builder stateBuilder) { + super.createBlockStateDefinition(stateBuilder.add(FACING, AGED, SLICE_COUNT_BOTTOM, SLICE_COUNT_TOP)); + } + + @Nullable + @Override + public BlockState getStateForPlacement(BlockPlaceContext context) { + return this.defaultBlockState().setValue(FACING, context.getHorizontalDirection().getOpposite()).setValue(SLICE_COUNT_BOTTOM, 4).setValue(SLICE_COUNT_TOP, 0).setValue(AGED, false); + } + + @Override + public PushReaction getPistonPushReaction(BlockState p_60584_) { + return PushReaction.DESTROY; + } + + @Override + public BlockState rotate(BlockState state, Rotation rotation) { + return state.setValue(FACING, rotation.rotate(state.getValue(FACING))) + .setValue(SLICE_COUNT_BOTTOM, state.getValue(SLICE_COUNT_BOTTOM)) + .setValue(SLICE_COUNT_TOP, state.getValue(SLICE_COUNT_TOP)) + .setValue(AGED, state.getValue(AGED)); + } + + @Override + public BlockState mirror(BlockState state, Mirror mirror) { + return state.rotate(mirror.getRotation(state.getValue(FACING))) + .setValue(SLICE_COUNT_BOTTOM, state.getValue(SLICE_COUNT_BOTTOM)) + .setValue(SLICE_COUNT_TOP, state.getValue(SLICE_COUNT_TOP)) + .setValue(AGED, state.getValue(AGED)); + } + + @Override + public InteractionResult use(BlockState blockState, Level level, BlockPos blockPos, Player player, InteractionHand interactionHand, BlockHitResult blockHitResult) { + if(!level.isClientSide) { + CheeseWheelBlockEntity blockEntity = (CheeseWheelBlockEntity) level.getBlockEntity(blockPos); + + if(player.getItemInHand(interactionHand).getItem() == this.asItem()) { + blockEntity.addSlice(4); + player.getItemInHand(interactionHand).shrink(1); + } else if(!player.isCrouching() && player.getItemInHand(interactionHand).isEmpty()) { + if(blockEntity.canTakeSlice()) { + player.getInventory().add(blockEntity.takeSlice()); + } + } else if(player.isCrouching() && blockEntity.getSliceCount() >= 4) { + blockEntity.takeSlice(4); + player.getInventory().add(new ItemStack(this.asItem())); + } + + if(blockEntity.getSliceCount() == 0) level.destroyBlock(blockPos, false); + + return InteractionResult.SUCCESS; + } + + return InteractionResult.SUCCESS; + } + + @Deprecated + public int getColor() { + return this.color; + } + + @Deprecated + public int getColor(int i) { + return i == 0 ? this.color : 0xFFFFFF; + } + +} diff --git a/src/main/java/growthcraft/milk/block/ChurnBlock.java b/src/main/java/growthcraft/milk/block/ChurnBlock.java new file mode 100644 index 0000000..c6a3d0c --- /dev/null +++ b/src/main/java/growthcraft/milk/block/ChurnBlock.java @@ -0,0 +1,164 @@ +package growthcraft.milk.block; + +import java.util.ArrayList; + +import org.jetbrains.annotations.Nullable; + +import growthcraft.milk.GrowthcraftMilk; +import growthcraft.milk.block.entity.ChurnBlockEntity; +import growthcraft.milk.init.GrowthcraftMilkBlockEntities; +import growthcraft.milk.init.config.GrowthcraftMilkConfig; +import net.minecraft.core.BlockPos; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.sounds.SoundSource; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.BaseEntityBlock; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.RenderShape; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityTicker; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.StateDefinition; +import net.minecraft.world.level.block.state.properties.BooleanProperty; +import net.minecraft.world.level.material.PushReaction; +import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.Shapes; +import net.minecraft.world.phys.shapes.VoxelShape; +import net.minecraftforge.fluids.FluidUtil; +import net.minecraftforge.fluids.capability.CapabilityFluidHandler; +import net.minecraftforge.network.NetworkHooks; + +public class ChurnBlock extends BaseEntityBlock { + + public static final VoxelShape LAYER0_BOUNDING_BOX = Block.box(2.0D, 0.0D, 2.0D, 14.0D, 5.0D, 14.0D); + public static final VoxelShape LAYER1_BOUNDING_BOX = Block.box(3.0D, 5.0D, 3.0D, 13.0D, 10.0D, 13.0D); + public static final VoxelShape LAYER2_BOUNDING_BOX = Block.box(4.0D, 10.0D, 4.0D, 12.0D, 16.0D, 12.0D); + public static final VoxelShape PLUNGER_DOWN_BOUNDING_BOX = Block.box(7.0D, 4.0D, 7.0D, 9.0D, 20.0D, 9.0D); + public static final VoxelShape PLUNGER_UP_BOUNDING_BOX = Block.box(7.0D, 4.0D, 7.0D, 9.0D, 28.0D, 9.0D); + + public static final BooleanProperty PLUNGED = BooleanProperty.create("plunged"); + + public ChurnBlock() { + this(getInitProperties()); + } + + public ChurnBlock(Properties properties) { + super(properties); + this.registerDefaultState(this.stateDefinition.any().setValue(PLUNGED, false)); + } + + private static Properties getInitProperties() { + Properties properties = Properties.copy(Blocks.OAK_PLANKS); + properties.noOcclusion(); + return properties; + } + + @Nullable + @Override + public BlockEntity newBlockEntity(BlockPos blockPos, BlockState blockState) { + return GrowthcraftMilkBlockEntities.CHURN_BLOCK_ENTITY.get().create(blockPos, blockState); + } + + @Nullable + @Override + public BlockEntityTicker getTicker(Level level, BlockState blockState, BlockEntityType blockEntityType) { + return createTickerHelper( + blockEntityType, + GrowthcraftMilkBlockEntities.CHURN_BLOCK_ENTITY.get(), + (worldLevel, pos, state, blockEntity) -> (blockEntity).tick() + ); + } + + @Override + public VoxelShape getShape(BlockState state, BlockGetter level, BlockPos blockPos, CollisionContext context) { + ArrayList voxelShapeArrayList = new ArrayList<>(); + voxelShapeArrayList.add(LAYER0_BOUNDING_BOX); + voxelShapeArrayList.add(LAYER1_BOUNDING_BOX); + voxelShapeArrayList.add(LAYER2_BOUNDING_BOX); + + if (Boolean.TRUE.equals(state.getValue(PLUNGED))) { + voxelShapeArrayList.add(PLUNGER_DOWN_BOUNDING_BOX); + } else { + voxelShapeArrayList.add(PLUNGER_UP_BOUNDING_BOX); + } + + VoxelShape[] voxelShapes = new VoxelShape[voxelShapeArrayList.size()]; + voxelShapes = voxelShapeArrayList.toArray(voxelShapes); + + return Shapes.or(LAYER0_BOUNDING_BOX, voxelShapes); + } + + @Override + public RenderShape getRenderShape(BlockState blockState) { + return RenderShape.MODEL; + } + + @Override + protected void createBlockStateDefinition(StateDefinition.Builder blockStateBuilder) { + super.createBlockStateDefinition(blockStateBuilder.add(PLUNGED)); + } + + @Nullable + @Override + public BlockState getStateForPlacement(BlockPlaceContext context) { + return super.getStateForPlacement(context).setValue(PLUNGED, false); + } + + @Override + public InteractionResult use(BlockState blockState, Level level, BlockPos blockPos, Player player, InteractionHand interactionHand, BlockHitResult blockHitResult) { + if (!level.isClientSide && player.isCrouching() && GrowthcraftMilkConfig.isChurnGuiEnabled()) { + try { + // Play sound + level.playSound(player, blockPos, SoundEvents.BARREL_OPEN, SoundSource.BLOCKS, 1.0F, 1.0F); + ChurnBlockEntity blockEntity = (ChurnBlockEntity) level.getBlockEntity(blockPos); + NetworkHooks.openGui(((ServerPlayer) player), blockEntity, blockPos); + } catch (Exception ex) { + GrowthcraftMilk.LOGGER.error(String.format("%s unable to open ChurnBlockEntity GUI at %s.", player.getDisplayName().getString(), blockPos)); + GrowthcraftMilk.LOGGER.error(ex.getMessage()); + GrowthcraftMilk.LOGGER.error(ex.fillInStackTrace()); + } + return InteractionResult.SUCCESS; + } + + // TODO: Refactor the logic move getItemInHand to initial condition. + if (!level.isClientSide) { + if ( + FluidUtil.interactWithFluidHandler(player, interactionHand, level, blockPos, blockHitResult.getDirection()) + || player.getItemInHand(interactionHand).getCapability(CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY).isPresent() + ) { + return InteractionResult.SUCCESS; + } + } + if(!level.isClientSide) { + ChurnBlockEntity blockEntity = (ChurnBlockEntity) level.getBlockEntity(blockPos); + + if(blockEntity.hasByProductItem()) { + ItemStack itemStack = blockEntity.getInventoryHandler().getStackInSlot(0); + if(!player.getInventory().add(itemStack)) { + player.drop(itemStack, false); + } + } else { + blockEntity.togglePlungerState(); + } + + } + + + return InteractionResult.SUCCESS; + } + + @Override + public PushReaction getPistonPushReaction(BlockState blockState) { + return PushReaction.DESTROY; + } +} diff --git a/src/main/java/growthcraft/milk/block/MixingVatBlock.java b/src/main/java/growthcraft/milk/block/MixingVatBlock.java new file mode 100644 index 0000000..e73c2ec --- /dev/null +++ b/src/main/java/growthcraft/milk/block/MixingVatBlock.java @@ -0,0 +1,167 @@ +package growthcraft.milk.block; + +import org.jetbrains.annotations.Nullable; + +import growthcraft.core.utils.BlockPropertiesUtils; +import growthcraft.lib.utils.BlockStateUtils; +import growthcraft.milk.GrowthcraftMilk; +import growthcraft.milk.block.entity.MixingVatBlockEntity; +import growthcraft.milk.init.GrowthcraftMilkBlockEntities; +import growthcraft.milk.init.GrowthcraftMilkTags; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.Items; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.BaseEntityBlock; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.RenderShape; +import net.minecraft.world.level.block.SoundType; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityTicker; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.StateDefinition; +import net.minecraft.world.level.block.state.properties.BooleanProperty; +import net.minecraft.world.phys.BlockHitResult; +import net.minecraftforge.fluids.FluidUtil; +import net.minecraftforge.fluids.capability.CapabilityFluidHandler; +import net.minecraftforge.fluids.capability.templates.FluidTank; +import net.minecraftforge.network.NetworkHooks; + +public class MixingVatBlock extends BaseEntityBlock { + //TODO[5]: Implement MixingVatBlock + public static final BooleanProperty LIT = BooleanProperty.create("lit"); + + public MixingVatBlock() { + this(getInitProperties()); + } + + public MixingVatBlock(Properties properties) { + super(properties); + this.registerDefaultState(this.stateDefinition.any().setValue(LIT, false)); + + } + + private static Properties getInitProperties() { + Properties properties = Properties.copy(Blocks.STONE); + properties.noOcclusion(); + properties.sound(SoundType.METAL); + properties.isRedstoneConductor(BlockPropertiesUtils::never); + properties.isViewBlocking(BlockPropertiesUtils::never); + return properties; + } + + @Override + protected void createBlockStateDefinition(StateDefinition.Builder stateBuilder) { + super.createBlockStateDefinition(stateBuilder.add(LIT)); + } + + @Nullable + @Override + public BlockState getStateForPlacement(BlockPlaceContext context) { + return this.defaultBlockState() + .setValue(LIT, BlockStateUtils.isHeated(context.getLevel(), context.getClickedPos())); + } + + @Override + public RenderShape getRenderShape(BlockState blockState) { + return RenderShape.MODEL; + } + + @Nullable + @Override + public BlockEntity newBlockEntity(BlockPos blockPos, BlockState blockState) { + return GrowthcraftMilkBlockEntities.MIXING_VAT_BLOCK_ENTITY.get().create(blockPos, blockState); + } + + @Nullable + @Override + public BlockEntityTicker getTicker(Level level, BlockState state, BlockEntityType blockEntityType) { + if (!level.isClientSide) { + return createTickerHelper( + blockEntityType, + GrowthcraftMilkBlockEntities.MIXING_VAT_BLOCK_ENTITY.get(), + (worldLevel, pos, blockState, blockEntity) -> (blockEntity).tick() + ); + } + + return null; + } + + @Override + public InteractionResult use(BlockState blockState, Level level, BlockPos blockPos, Player player, InteractionHand interactionHand, BlockHitResult hitResult) { + if (level.isClientSide) { + return InteractionResult.SUCCESS; + } + + MixingVatBlockEntity blockEntity = (MixingVatBlockEntity) level.getBlockEntity(blockPos); + + assert blockEntity != null; + FluidTank inputFluidTank = blockEntity.getFluidTank("input"); + FluidTank reagentFluidTank = blockEntity.getFluidTank("reagent"); + + // Try to do fluid handling first. + if (player.getItemInHand(interactionHand) + .getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY) + .isPresent() + ) { + boolean fluidInteractionResult = false; + + if (player.getItemInHand(interactionHand).getItem() == Items.BUCKET) { + // Then we are trying to drain the tanks. + if (!reagentFluidTank.isEmpty()) { + fluidInteractionResult = FluidUtil.interactWithFluidHandler(player, interactionHand, level, blockPos, Direction.NORTH); + } else if (!inputFluidTank.isEmpty()) { + fluidInteractionResult = FluidUtil.interactWithFluidHandler(player, interactionHand, level, blockPos, Direction.UP); + } + } else { + // Try and fill the input tank first. + if (inputFluidTank.getFluidAmount() < inputFluidTank.getCapacity()) { + fluidInteractionResult = FluidUtil.interactWithFluidHandler(player, interactionHand, level, blockPos, Direction.UP); + } else if (reagentFluidTank.getFluidAmount() < reagentFluidTank.getCapacity()) { + fluidInteractionResult = FluidUtil.interactWithFluidHandler(player, interactionHand, level, blockPos, Direction.NORTH); + } + } + + return fluidInteractionResult ? InteractionResult.SUCCESS : InteractionResult.FAIL; + } else if (player.getItemInHand(interactionHand).is(GrowthcraftMilkTags.Items.TAG_MIXING_VAT_TOOLS)) { + // TODO Handle tool activation of MixingVat. + if(blockEntity.activateRecipe(player.getItemInHand(interactionHand))) { + player.getItemInHand(interactionHand).shrink(1); + return InteractionResult.SUCCESS; + } + + if(!blockEntity.getInventoryHandler().getStackInSlot(3).isEmpty() + && blockEntity.activateResult(player, player.getItemInHand(interactionHand))) { + player.getItemInHand(interactionHand).shrink(1); + return InteractionResult.SUCCESS; + } + + } else { + // Otherwise, try and interact with the GUI. + try { + // Play sound + blockEntity.playSound("open"); + // Open the GUI + NetworkHooks.openGui(((ServerPlayer) player), blockEntity, blockPos); + return InteractionResult.SUCCESS; + } catch (Exception ex) { + GrowthcraftMilk.LOGGER.error( + String.format("%s unable to open MixingVatBlockEntity GUI at %s.", + player.getDisplayName().getString(), + blockPos) + ); + GrowthcraftMilk.LOGGER.error(ex.getMessage()); + GrowthcraftMilk.LOGGER.error(ex.fillInStackTrace()); + return InteractionResult.FAIL; + } + } + return InteractionResult.SUCCESS; + } +} diff --git a/src/main/java/growthcraft/milk/block/PancheonBlock.java b/src/main/java/growthcraft/milk/block/PancheonBlock.java new file mode 100644 index 0000000..9114a1f --- /dev/null +++ b/src/main/java/growthcraft/milk/block/PancheonBlock.java @@ -0,0 +1,169 @@ +package growthcraft.milk.block; + +import org.jetbrains.annotations.Nullable; + +import growthcraft.milk.GrowthcraftMilk; +import growthcraft.milk.block.entity.PancheonBlockEntity; +import growthcraft.milk.init.GrowthcraftMilkBlockEntities; +import growthcraft.milk.init.GrowthcraftMilkFluids; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.sounds.SoundSource; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.LevelAccessor; +import net.minecraft.world.level.block.BaseEntityBlock; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.Mirror; +import net.minecraft.world.level.block.RenderShape; +import net.minecraft.world.level.block.Rotation; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityTicker; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.StateDefinition; +import net.minecraft.world.level.block.state.properties.BlockStateProperties; +import net.minecraft.world.level.block.state.properties.DirectionProperty; +import net.minecraft.world.level.material.PushReaction; +import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.Shapes; +import net.minecraft.world.phys.shapes.VoxelShape; +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.network.NetworkHooks; + +public class PancheonBlock extends BaseEntityBlock { + + public static final DirectionProperty FACING = BlockStateProperties.HORIZONTAL_FACING; + + public static final VoxelShape BASE_BOUNDING_BOX = Block.box( + 1.0D, 0.0D, 1.0D, + 15.0F, 1.0D, 15.0F + ); + public static final VoxelShape UPPER_BOUNDING_BOX = Block.box( + 0.0D, 1.0D, 0.0D, + 16.0, 5.0D, 16.0D + ); + + public PancheonBlock() { + super(getInitProperties()); + this.registerDefaultState(this.stateDefinition.any().setValue(FACING, Direction.NORTH)); + } + + private static Properties getInitProperties() { + Properties properties = Properties.copy(Blocks.STONE); + properties.strength(1.5F); + properties.noOcclusion(); + return properties; + } + + @Override + public RenderShape getRenderShape(BlockState blockState) { + return RenderShape.MODEL; + } + + @Override + public VoxelShape getShape(BlockState p_60555_, BlockGetter p_60556_, BlockPos p_60557_, CollisionContext p_60558_) { + return Shapes.or(BASE_BOUNDING_BOX, UPPER_BOUNDING_BOX); + } + + @Override + protected void createBlockStateDefinition(StateDefinition.Builder blockStateBuilder) { + blockStateBuilder.add(FACING); + } + + @Nullable + @Override + public BlockState getStateForPlacement(BlockPlaceContext context) { + return this.defaultBlockState().setValue(FACING, context.getHorizontalDirection().getOpposite()); + } + + @Override + public PushReaction getPistonPushReaction(BlockState p_60584_) { + return PushReaction.DESTROY; + } + + @Override + public BlockState rotate(BlockState state, LevelAccessor level, BlockPos pos, Rotation rotation) { + return state.setValue(FACING, rotation.rotate(state.getValue(FACING))); + } + + @Override + public BlockState mirror(BlockState state, Mirror mirror) { + return state.rotate(mirror.getRotation(state.getValue(FACING))); + } + + @Nullable + @Override + public BlockEntity newBlockEntity(BlockPos blockPos, BlockState state) { + return GrowthcraftMilkBlockEntities.PANCHEON_BLOCK_ENTITY.get().create(blockPos, state); + } + + @Nullable + @Override + public BlockEntityTicker getTicker(Level level, BlockState state, BlockEntityType blockEntityType) { + return createTickerHelper( + blockEntityType, + GrowthcraftMilkBlockEntities.PANCHEON_BLOCK_ENTITY.get(), + (worldLevel, pos, blockState, blockEntity) -> (blockEntity).tick() + ); + } + + @Override + public InteractionResult use(BlockState blockState, Level level, BlockPos blockPos, Player player, InteractionHand interactionHand, BlockHitResult blockHitResult) { + if (!level.isClientSide && player.isCrouching()) { + try { + // Play sound + level.playSound(player, blockPos, SoundEvents.BARREL_OPEN, SoundSource.BLOCKS, 1.0F, 1.0F); + // Open the GUI + PancheonBlockEntity blockEntity = (PancheonBlockEntity) level.getBlockEntity(blockPos); + NetworkHooks.openGui(((ServerPlayer) player), blockEntity, blockPos); + } catch (Exception ex) { + GrowthcraftMilk.LOGGER.error(String.format("%s unable to open PancheonBlockEntity GUI at %s.", player.getDisplayName().getString(), blockPos)); + GrowthcraftMilk.LOGGER.error(ex.getMessage()); + GrowthcraftMilk.LOGGER.error(ex.fillInStackTrace()); + } + return InteractionResult.SUCCESS; + } + + if (!level.isClientSide) { + if (player.getItemInHand(interactionHand).getItem() == Items.MILK_BUCKET) { + PancheonBlockEntity blockEntity = (PancheonBlockEntity) level.getBlockEntity(blockPos); + + int capacity = blockEntity.getFluidTank(0).getCapacity(); + int amount = blockEntity.getFluidTank(0).getFluidAmount(); + int remainingFill = capacity - amount; + + if(blockEntity.getFluidTank(0).isEmpty() + || (remainingFill >= 1000 + && blockEntity.getFluidStackInTank(0).getFluid() == GrowthcraftMilkFluids.MILK.get().getSource()) + ) { + FluidStack fluidStack = new FluidStack( GrowthcraftMilkFluids.MILK.get().getSource(), 1000); + blockEntity.getFluidTank(0).fill(fluidStack, IFluidHandler.FluidAction.EXECUTE); + player.setItemInHand(interactionHand, new ItemStack(Items.BUCKET)); + } + } else if ( + FluidUtil.interactWithFluidHandler(player, interactionHand, level, blockPos, blockHitResult.getDirection()) + || player.getItemInHand(interactionHand).getCapability(CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY).isPresent() + ) { + GrowthcraftMilk.LOGGER.error("Can interactWithFluidHandler or has FLUID_HANDLER_ITEM"); + return InteractionResult.SUCCESS; + } + } + + return InteractionResult.SUCCESS; + } + +} diff --git a/src/main/java/growthcraft/milk/block/ThistleCropBlock.java b/src/main/java/growthcraft/milk/block/ThistleCropBlock.java new file mode 100644 index 0000000..1b76d52 --- /dev/null +++ b/src/main/java/growthcraft/milk/block/ThistleCropBlock.java @@ -0,0 +1,86 @@ +package growthcraft.milk.block; + +import growthcraft.milk.init.GrowthcraftMilkItems; +import net.minecraft.core.BlockPos; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.Containers; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.ItemLike; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.CropBlock; +import net.minecraft.world.level.block.SoundType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.material.Material; +import net.minecraft.world.level.storage.loot.LootContext; +import net.minecraft.world.level.storage.loot.parameters.LootContextParams; +import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.world.phys.Vec3; +import net.minecraft.world.phys.shapes.VoxelShape; +import org.jetbrains.annotations.NotNull; + +import java.util.List; + +public class ThistleCropBlock extends CropBlock { + + private static final VoxelShape[] SHAPE_BY_AGE = new VoxelShape[]{ + Block.box(5.0F, 0.0F, 5.0F, 11.0F, 4.0F, 11.0F), + Block.box(5.0F, 0.0F, 5.0F, 11.0F, 9.0F, 11.0F), + Block.box(5.0F, 0.0F, 5.0F, 11.0F, 9.0F, 11.0F), + Block.box(5.0F, 0.0F, 5.0F, 11.0F, 9.0F, 11.0F), + Block.box(4.0F, 0.0F, 4.0F, 12.0F, 15.0F, 12.0F), + Block.box(4.0F, 0.0F, 4.0F, 12.0F, 15.0F, 12.0F), + Block.box(4.0F, 0.0F, 4.0F, 12.0F, 15.0F, 12.0F), + Block.box(2.0F, 0.0F, 2.0F, 14.0F, 16.0F, 14.0F) + }; + + public ThistleCropBlock() { + this(getInitProperties()); + } + + public ThistleCropBlock(Properties properties) { + super(properties); + } + + private static Properties getInitProperties() { + Properties properties = Properties.of(Material.PLANT); + properties.noOcclusion(); + properties.randomTicks(); + properties.instabreak(); + properties.sound(SoundType.CROP); + return properties; + } + + @Override + protected @NotNull ItemLike getBaseSeedId() { + return GrowthcraftMilkItems.THISTLE_SEED.get(); + } + + @Override + @SuppressWarnings("deprecation") + public InteractionResult use(BlockState blockState, Level level, BlockPos blockPos, Player player, InteractionHand hand, BlockHitResult hitResult) { + if(level.isClientSide) return super.use(blockState, level, blockPos, player, hand, hitResult); + + if(blockState.getValue(AGE) == this.getMaxAge()) { + LootContext.Builder context = new LootContext.Builder((ServerLevel) level) + .withParameter(LootContextParams.ORIGIN, new Vec3(blockPos.getX(), blockPos.getY(), blockPos.getZ())) + .withParameter(LootContextParams.BLOCK_STATE, blockState) + .withParameter(LootContextParams.THIS_ENTITY, player) + .withOptionalParameter(LootContextParams.TOOL, player.getItemInHand(hand)); + + List drops = blockState.getDrops(context); + + for (ItemStack stack : drops) { + Containers.dropItemStack(level, blockPos.getX(), blockPos.getY(), blockPos.getZ(), stack); + } + + level.setBlock(blockPos, this.getStateForAge(1), Block.UPDATE_ALL); + } + + return super.use(blockState, level, blockPos, player, hand, hitResult); + } + +} diff --git a/src/main/java/growthcraft/milk/block/entity/CheesePressBlockEntity.java b/src/main/java/growthcraft/milk/block/entity/CheesePressBlockEntity.java new file mode 100644 index 0000000..4e42a43 --- /dev/null +++ b/src/main/java/growthcraft/milk/block/entity/CheesePressBlockEntity.java @@ -0,0 +1,262 @@ +package growthcraft.milk.block.entity; + +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; +import java.util.Random; + +import javax.annotation.ParametersAreNonnullByDefault; + +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import growthcraft.milk.block.CheesePressBlock; +import growthcraft.milk.init.GrowthcraftMilkBlockEntities; +import growthcraft.milk.recipe.CheesePressRecipe; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.Connection; +import net.minecraft.network.chat.Component; +import net.minecraft.network.protocol.Packet; +import net.minecraft.network.protocol.game.ClientGamePacketListener; +import net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket; +import net.minecraft.world.Containers; +import net.minecraft.world.SimpleContainer; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityTicker; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.common.util.LazyOptional; +import net.minecraftforge.items.CapabilityItemHandler; +import net.minecraftforge.items.IItemHandler; +import net.minecraftforge.items.ItemStackHandler; + +public class CheesePressBlockEntity extends BlockEntity implements BlockEntityTicker { + + private int tickClock = 0; + private int tickMax = -1; + + private boolean open; + private int rotation; + + private Component customName; + + private final ItemStackHandler itemStackHandler = new ItemStackHandler(2) { + @Override + protected void onContentsChanged(int slot) { + setChanged(); + } + }; + + private LazyOptional itemHandlerLazyOptional = LazyOptional.empty(); + + public CheesePressBlockEntity(BlockPos blockPos, BlockState blockState) { + this(GrowthcraftMilkBlockEntities.CHEESE_PRESS_BLOCK_ENTITY.get(), + blockPos, blockState); + } + + public CheesePressBlockEntity(BlockEntityType entityType, BlockPos blockPos, BlockState blockState) { + super(entityType, blockPos, blockState); + this.open = true; + this.rotation = 0; + } + + public void tick() { + if (this.getLevel() != null) { + this.tick(this.getLevel(), this.getBlockPos(), this.getBlockState(), this); + } + } + + @Override + public void tick(Level level, BlockPos blockPos, BlockState blockState, CheesePressBlockEntity blockEntity) { + if(!level.isClientSide && !this.open && !this.getItemStackHandler().getStackInSlot(0).isEmpty()) { + try { + List recipes = this.getMatchingRecipes(); + CheesePressRecipe recipe = recipes.isEmpty() ? null : recipes.get(0); + + if(recipe != null) { + if(this.tickClock <= this.tickMax) { + this.tickClock++; + } else if (this.tickMax > 0) { + // Process the recipe results. + blockEntity.getItemStackHandler().setStackInSlot(0, ItemStack.EMPTY); + blockEntity.getItemStackHandler().setStackInSlot(1, recipe.getResultItemStack()); + + this.resetTickClock(); + } else if(this.tickMax == -1) { + this.tickMax = recipe.getProcessingTime(); + } else { + this.resetTickClock(); + } + + level.sendBlockUpdated(this.getBlockPos(), this.getBlockState(), this.getBlockState(), Block.UPDATE_ALL_IMMEDIATE); + } + } catch (Exception ex) { + // Do nothing, just ignore it. + } + } else { + this.resetTickClock(); + } + } + + public int getTickClock(String type) { + switch (type) { + case "current": + return this.tickClock; + case "max": + return this.tickMax; + default: + return 0; + } + } + + private void resetTickClock() { + this.tickClock = 0; + this.tickMax = -1; + } + + + public int doRotation(boolean increase) { + // Can't increase, already at max. + if (this.rotation == 7 && increase) return this.getRotation(); + // Can't decrease, already at min. + if (this.rotation == 0 && !increase) return this.getRotation(); + + if (increase) { + this.rotation++; + } else { + // Fast track to 0 + this.rotation = 0; + } + this.open = this.rotation == 0; + + return this.getRotation(); + } + + private List getMatchingRecipes() { + if(level == null) return null; + + List matchingRecipes = new ArrayList<>(); + + List recipes = level.getRecipeManager() + .getAllRecipesFor(CheesePressRecipe.Type.INSTANCE); + + for (CheesePressRecipe recipe : recipes) { + if (recipe.matches(this.itemStackHandler.getStackInSlot(0))) { + matchingRecipes.add(recipe); + } + } + + return matchingRecipes; + } + + + @Nullable + @Override + public Packet getUpdatePacket() { + return ClientboundBlockEntityDataPacket.create(this); + } + + @Override + public @NotNull CompoundTag getUpdateTag() { + return this.serializeNBT(); + } + + @Override + public void handleUpdateTag(CompoundTag tag) { + this.load(tag); + } + + @Override + public void load(@NotNull CompoundTag nbt) { + super.load(nbt); + this.itemStackHandler.deserializeNBT(nbt.getCompound("inventory")); + this.tickClock = nbt.getInt("CurrentProcessTicks"); + this.rotation = nbt.getInt("rotation"); + this.tickMax = nbt.getInt("MaxProcessTicks"); + + if (nbt.contains("CustomName", 8)) { + this.customName = Component.Serializer.fromJson(nbt.getString("CustomName")); + } + } + + @Override + @ParametersAreNonnullByDefault + protected void saveAdditional(CompoundTag nbt) { + super.saveAdditional(nbt); + nbt.put("inventory", this.itemStackHandler.serializeNBT()); + nbt.putInt("CurrentProcessTicks", this.tickClock); + nbt.putInt("rotation", this.rotation); + nbt.putInt("MaxProcessTicks", this.tickMax); + + if (this.customName != null) { + nbt.putString("CustomName", Component.Serializer.toJson(this.customName)); + } + } + + @Override + public void onDataPacket(Connection net, ClientboundBlockEntityDataPacket pkt) { + this.load(pkt.getTag()); + } + + @Override + public void onLoad() { + super.onLoad(); + itemHandlerLazyOptional = LazyOptional.of(() -> itemStackHandler); + } + + @Override + public void invalidateCaps() { + super.invalidateCaps(); + itemHandlerLazyOptional.invalidate(); + } + + @Override + public @NotNull LazyOptional getCapability(@NotNull Capability cap, @Nullable Direction side) { + if (cap == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) { + return itemHandlerLazyOptional.cast(); + } + return super.getCapability(cap, side); + } + + public void dropItems() { + SimpleContainer inventory = new SimpleContainer(itemStackHandler.getSlots()); + + for (int i = 0; i < itemStackHandler.getSlots(); i++) { + inventory.setItem(i, itemStackHandler.getStackInSlot(i)); + } + + Containers.dropContents( + Objects.requireNonNull(this.getLevel()), + this.worldPosition, + inventory + ); + } + + public ItemStackHandler getItemStackHandler() { + return itemStackHandler; + } + + public int getRotation() { + return this.rotation; + } + + public boolean isOpen() { + return this.open; + } + + public static void particleTick(Level level, BlockPos blockPos, BlockState blockState, CheesePressBlockEntity blockEntity) { + Random randomsource = level.random; + if (randomsource.nextFloat() < 0.11F) { + for (int i = 0; i < randomsource.nextInt(2) + 2; ++i) { + CheesePressBlock.makeParticles(level, blockPos, blockState); + } + } + } + +} diff --git a/src/main/java/growthcraft/milk/block/entity/CheeseWheelBlockEntity.java b/src/main/java/growthcraft/milk/block/entity/CheeseWheelBlockEntity.java new file mode 100644 index 0000000..dc65bd4 --- /dev/null +++ b/src/main/java/growthcraft/milk/block/entity/CheeseWheelBlockEntity.java @@ -0,0 +1,208 @@ +package growthcraft.milk.block.entity; + +import growthcraft.milk.block.CheeseWheelBlock; +import growthcraft.milk.init.GrowthcraftMilkBlockEntities; +import growthcraft.milk.recipe.CheesePressRecipe; +import net.minecraft.core.BlockPos; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.Connection; +import net.minecraft.network.chat.Component; +import net.minecraft.network.protocol.Packet; +import net.minecraft.network.protocol.game.ClientGamePacketListener; +import net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityTicker; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockState; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import javax.annotation.ParametersAreNonnullByDefault; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; + +public class CheeseWheelBlockEntity extends BlockEntity implements BlockEntityTicker { + private boolean aged; + private int sliceCountTop; + private int sliceCountBottom; + + private int tickClock = 0; + //TODO: Make max aging for CheeseWheel come from a config + private int tickMax = -1; + + private Component customName; + + public CheeseWheelBlockEntity (BlockPos blockPos, BlockState blockState) { + this(GrowthcraftMilkBlockEntities.CHEESE_WHEEL_BLOCK_ENTITY.get(), blockPos, blockState); + } + + public CheeseWheelBlockEntity(BlockEntityType blockEntityType, BlockPos blockPos, BlockState blockState) { + super(blockEntityType, blockPos, blockState); + this.tickClock = 0; + this.tickMax = 24000 * 3; + + // TODO: Implement aging process + this.aged = true; + this.sliceCountBottom = 4; + this.sliceCountTop = 0; + } + + public void tick() { + if (this.getLevel() != null) { + this.tick(this.getLevel(), this.getBlockPos(), this.getBlockState(), this); + } + } + + @Override + public void tick(Level level, BlockPos blockPos, BlockState blockState, CheeseWheelBlockEntity blockEntity) { + if (level != null && !level.isClientSide() && Boolean.FALSE.equals(level.getBlockState(blockPos).getValue(CheeseWheelBlock.AGED))) { + if (this.tickClock < tickMax) { + this.tickClock++; + } else if (tickMax != -1){ + BlockState state = this.level.getBlockState(blockPos); + this.level.setBlock(blockPos, state.setValue(CheeseWheelBlock.AGED, true), Block.UPDATE_ALL_IMMEDIATE); + this.tickClock = 0; + this.tickMax = -1; + } + } else { + // The cheese is aged, so there's nothing to do. + } + } + + private void setBlockState(int bottomSlices, int topSlices) { + this.level.setBlock( + this.getBlockPos(), + this.getBlockState() + .setValue(CheeseWheelBlock.SLICE_COUNT_TOP, topSlices) + .setValue(CheeseWheelBlock.SLICE_COUNT_BOTTOM, bottomSlices), + Block.UPDATE_ALL_IMMEDIATE + ); + } + + public boolean canTakeSlice() { + return this.aged && this.getSliceCount() > 0; + } + + public ItemStack takeSlice() { + List cheesePressRecipes = this.getMatchingRecipes( + new ItemStack(this.getBlockState().getBlock().asItem()) + ); + + CheesePressRecipe recipe = cheesePressRecipes.isEmpty() ? null : cheesePressRecipes.get(0); + + if (recipe != null) { + this.takeSlice(1); + return recipe.getSliceItemStack().copy(); + } + + return null; + } + + private List getMatchingRecipes(ItemStack itemStack) { + List matchingRecipes = new ArrayList<>(); + + List recipes = level.getRecipeManager().getAllRecipesFor( + CheesePressRecipe.Type.INSTANCE + ); + + for (CheesePressRecipe recipe : recipes) { + if (recipe.matchesOutput(itemStack)) { + matchingRecipes.add(recipe); + } + } + return matchingRecipes; + } + + public void takeSlice(int count) { + if (this.sliceCountTop > 0) { + this.sliceCountTop -= count; + } else if (this.sliceCountBottom > 0) { + this.sliceCountBottom -= count; + } + this.setBlockState(this.sliceCountBottom, this.sliceCountTop); + } + + public void addSlice(int count) { + int newTotal = this.sliceCountBottom + this.sliceCountTop + count; + + if (newTotal > 4) { + // Then we have enough room to add the slice to the stack. + this.sliceCountBottom = 4; + this.sliceCountTop = newTotal - this.sliceCountBottom; + } else { + this.sliceCountBottom = newTotal; + this.sliceCountTop = 0; + } + + this.setBlockState(this.sliceCountBottom, this.sliceCountTop); + } + + public int getSliceCount() { + return this.sliceCountTop + this.sliceCountBottom; + } + + @Nullable + @Override + public Packet getUpdatePacket() { + return ClientboundBlockEntityDataPacket.create(this); + } + + @Override + public @NotNull CompoundTag getUpdateTag() { + return this.serializeNBT(); + } + + @Override + public void handleUpdateTag(CompoundTag tag) { + this.load(tag); + } + + @Override + public void load(@NotNull CompoundTag nbt) { + super.load(nbt); + this.tickClock = nbt.getInt("CurrentProcessTicks"); + this.tickMax = nbt.getInt("MaxProcessTicks"); + this.sliceCountTop = nbt.getInt("SliceCountTop"); + this.sliceCountBottom = nbt.getInt("SliceCountBottom"); + this.aged = nbt.getBoolean("aged"); + + if (nbt.contains("CustomName", 8)) { + this.customName = Component.Serializer.fromJson(nbt.getString("CustomName")); + } + } + + @Override + @ParametersAreNonnullByDefault + protected void saveAdditional(CompoundTag nbt) { + nbt.putInt("CurrentProcessTicks", this.tickClock); + nbt.putInt("MaxProcessTicks", this.tickMax); + nbt.putInt("slicestop", this.sliceCountTop); + nbt.putInt("slicesbottom", this.sliceCountBottom); + nbt.putBoolean("aged", this.aged); + + if (this.customName != null) { + nbt.putString("CustomName", Component.Serializer.toJson(this.customName)); + } + + super.saveAdditional(nbt); + } + + @Override + public void onDataPacket(Connection net, ClientboundBlockEntityDataPacket pkt) { + this.load(Objects.requireNonNull(pkt.getTag())); + } + + @Override + public void onLoad() { + super.onLoad(); + } + + @Override + public void invalidateCaps() { + super.invalidateCaps(); + } +} diff --git a/src/main/java/growthcraft/milk/block/entity/ChurnBlockEntity.java b/src/main/java/growthcraft/milk/block/entity/ChurnBlockEntity.java new file mode 100644 index 0000000..312844f --- /dev/null +++ b/src/main/java/growthcraft/milk/block/entity/ChurnBlockEntity.java @@ -0,0 +1,324 @@ +package growthcraft.milk.block.entity; + +import static growthcraft.milk.block.ChurnBlock.PLUNGED; + +import java.security.SecureRandom; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; + +import javax.annotation.ParametersAreNonnullByDefault; + +import org.apache.commons.lang3.BooleanUtils; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import growthcraft.lib.block.entity.GrowthcraftFluidTank; +import growthcraft.milk.init.GrowthcraftMilkBlockEntities; +import growthcraft.milk.lib.networking.GrowthcraftMilkMessages; +import growthcraft.milk.lib.networking.packet.ChurnFluidTankSyncPacket; +import growthcraft.milk.recipe.ChurnRecipe; +import growthcraft.milk.screen.container.ChurnMenu; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.Connection; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.TranslatableComponent; +import net.minecraft.network.protocol.Packet; +import net.minecraft.network.protocol.game.ClientGamePacketListener; +import net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.sounds.SoundSource; +import net.minecraft.world.MenuProvider; +import net.minecraft.world.entity.player.Inventory; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.inventory.AbstractContainerMenu; +import net.minecraft.world.inventory.ContainerData; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityTicker; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.common.util.LazyOptional; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.capability.CapabilityFluidHandler; +import net.minecraftforge.fluids.capability.IFluidHandler; +import net.minecraftforge.items.CapabilityItemHandler; +import net.minecraftforge.items.IItemHandler; +import net.minecraftforge.items.ItemStackHandler; + +public class ChurnBlockEntity extends BlockEntity implements BlockEntityTicker, MenuProvider { + private int tickClock = 0; + private int tickMax = -1; + + protected final ContainerData data; + + private Component customName; + + private final ItemStackHandler itemStackHandler = new ItemStackHandler(1) { + @Override + protected void onContentsChanged(int slot) { + setChanged(); + } + }; + + private LazyOptional itemHandlerLazyOptional = LazyOptional.empty(); + + private final GrowthcraftFluidTank FLUID_TANK_INPUT_0 = new GrowthcraftFluidTank(1000) { + @Override + public void onContentsChanged() { + setChanged(); + if (!level.isClientSide) { + GrowthcraftMilkMessages.sendToClients(new ChurnFluidTankSyncPacket(0, this.fluid, worldPosition)); + } + } + }; + + private LazyOptional lazyInputFluidHandler0 = LazyOptional.empty(); + + public ChurnBlockEntity(BlockPos blockPos, BlockState blockState) { + this(GrowthcraftMilkBlockEntities.CHURN_BLOCK_ENTITY.get(), blockPos, blockState); + } + + public ChurnBlockEntity(BlockEntityType blockEntityType, BlockPos blockPos, BlockState blockState) { + super(blockEntityType, blockPos, blockState); + + this.FLUID_TANK_INPUT_0.allowAnyFluid(true); + + this.data = new ContainerData() { + @Override + public int get(int index) { + return switch (index) { + case 0 -> ChurnBlockEntity.this.tickClock; + case 1 -> ChurnBlockEntity.this.tickMax; + default -> 0; + }; + } + + @Override + public void set(int index, int value) { + switch (index) { + case 0 -> ChurnBlockEntity.this.tickClock = value; + case 1 -> ChurnBlockEntity.this.tickMax = value; + } + } + + @Override + public int getCount() { + return 2; + } + }; + } + + @Override + public Component getDisplayName() { + return this.customName != null + ? this.customName + : new TranslatableComponent("container.growthcraft_milk.churn"); + } + + @Nullable + @Override + public AbstractContainerMenu createMenu(int containerId, @NotNull Inventory inventory, @NotNull Player player) { + return new ChurnMenu(containerId, inventory, this, this.data); + } + + public void tick() { + if (this.getLevel() != null) { + this.tick(this.getLevel(), this.getBlockPos(), this.getBlockState(), this); + } + } + + @Override + public void tick(Level level, BlockPos blockPos, BlockState blockState, ChurnBlockEntity blockEntity) { + // Nothing really to do here. The churn is a manual block entity. + } + + public void togglePlungerState() { + if(this.level != null && !this.level.isClientSide) { + BlockState blockState = level.getBlockState(this.getBlockPos()); + boolean plungerState = blockState.getValue(PLUNGED); + + if(plungerState) { + level.playSound(null, this.getBlockPos(), SoundEvents.WOODEN_BUTTON_CLICK_OFF, SoundSource.BLOCKS, 1.0F, 1.0F); + } else { + level.playSound(null, this.getBlockPos(), SoundEvents.WOODEN_BUTTON_CLICK_ON, SoundSource.BLOCKS, 1.0F, 1.0F); + tryPlunger(); + } + + plungerState = BooleanUtils.negate(plungerState); + + level.setBlock(this.getBlockPos(), blockState.setValue(PLUNGED, plungerState), Block.UPDATE_ALL); + } + } + + public void tryPlunger() { + this.tryPlunger(1); + } + + public void tryPlunger(int i) { + + if(this.level != null && !this.level.isClientSide + && !this.getFluidTank(0).isEmpty() + && this.getInventoryHandler().getStackInSlot(0).isEmpty() + ) { + + List recipes = getMatchingRecipes(this.getFluidStackInTank(0)); + ChurnRecipe recipe = recipes.isEmpty() ? null : recipes.get(0); + + if(recipe != null) { + // Reminder, tick in this case is the number of plunges. + if(this.tickClock <= this.tickMax) { + this.tickClock++; + } else if (this.tickMax > 0 && this.tickClock > this.tickMax) { + this.setFluidStackInTank(0, recipe.getOutputFluidStack().copy()); + if(new SecureRandom().nextInt(100) <= recipe.getByProductChance()) { + this.getInventoryHandler().setStackInSlot(0, recipe.getResultItemStack()); + } + this.tickMax = -1; + this.tickClock = 0; + } else if (this.tickMax == -1) { + this.tickMax = recipe.getPlungesNeeded(); + } else { + this.tickMax = -1; + this.tickClock = 0; + } + + this.level.sendBlockUpdated(this.getBlockPos(), this.getBlockState(), this.getBlockState(), Block.UPDATE_ALL); + } + } + } + + private List getMatchingRecipes(FluidStack fluidStack) { + List matchingRecipes = new ArrayList<>(); + + List recipes = level.getRecipeManager().getAllRecipesFor( + ChurnRecipe.Type.INSTANCE + ); + + for (ChurnRecipe recipe : recipes) { + if (recipe.getInputFluidStack().getFluid() == fluidStack.getFluid()) { + matchingRecipes.add(recipe); + } + } + return matchingRecipes; + } + + public ItemStackHandler getInventoryHandler() { + return this.itemStackHandler; + } + + public boolean hasByProductItem() { + return !this.itemStackHandler.getStackInSlot(0).isEmpty(); + } + + public boolean isInputTankFull() { + return this.getFluidTank(0).getCapacity() == this.getFluidTank(0).getFluidAmount(); + } + + public void setFluidStackInTank(int tankID, FluidStack fluidStack) { + this.FLUID_TANK_INPUT_0.setFluid(fluidStack); + } + + public FluidStack getFluidStackInTank(int tankID) { + return this.FLUID_TANK_INPUT_0.getFluid(); + } + + public GrowthcraftFluidTank getFluidTank(int tankID) { + return this.FLUID_TANK_INPUT_0; + } + + public boolean isFluidEmpty() { + return getFluidStackInTank(0).isEmpty(); + } + + public int getTickClock(String type) { + switch (type) { + case "current": + return this.tickClock; + case "max": + return this.tickMax; + default: + return 0; + } + } + + @Nullable + @Override + public Packet getUpdatePacket() { + return ClientboundBlockEntityDataPacket.create(this); + } + + @Override + public @NotNull CompoundTag getUpdateTag() { + return this.serializeNBT(); + } + + @Override + public void handleUpdateTag(CompoundTag tag) { + this.load(tag); + } + + @Override + public void load(@NotNull CompoundTag nbt) { + super.load(nbt); + this.itemStackHandler.deserializeNBT(nbt.getCompound("inventory")); + this.FLUID_TANK_INPUT_0.readFromNBT(nbt.getCompound("fluid_tank_input_0")); + this.tickClock = nbt.getInt("CurrentProcessTicks"); + this.tickMax = nbt.getInt("MaxProcessTicks"); + + if (nbt.contains("CustomName", 8)) { + this.customName = Component.Serializer.fromJson(nbt.getString("CustomName")); + } + } + + @Override + @ParametersAreNonnullByDefault + protected void saveAdditional(CompoundTag nbt) { + nbt.put("inventory", itemStackHandler.serializeNBT()); + nbt.put("fluid_tank_input_0", FLUID_TANK_INPUT_0.writeToNBT(new CompoundTag())); + nbt.putInt("CurrentProcessTicks", this.tickClock); + nbt.putInt("MaxProcessTicks", this.tickMax); + + if (this.customName != null) { + nbt.putString("CustomName", Component.Serializer.toJson(this.customName)); + } + + super.saveAdditional(nbt); + } + + @Override + public void onDataPacket(Connection net, ClientboundBlockEntityDataPacket pkt) { + this.load(Objects.requireNonNull(pkt.getTag())); + } + + @Override + public void onLoad() { + super.onLoad(); + itemHandlerLazyOptional = LazyOptional.of(() -> itemStackHandler); + lazyInputFluidHandler0 = LazyOptional.of(() -> FLUID_TANK_INPUT_0); + } + + @Override + public void invalidateCaps() { + super.invalidateCaps(); + itemHandlerLazyOptional.invalidate(); + lazyInputFluidHandler0.invalidate(); + } + + @NotNull + @Override + public LazyOptional getCapability(@NotNull Capability cap, @Nullable Direction side) { + if (cap == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY) { + return this.lazyInputFluidHandler0.cast(); + } else if (cap == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) { + return itemHandlerLazyOptional.cast(); + } + return super.getCapability(cap, side); + } + + +} diff --git a/src/main/java/growthcraft/milk/block/entity/MixingVatBlockEntity.java b/src/main/java/growthcraft/milk/block/entity/MixingVatBlockEntity.java new file mode 100644 index 0000000..889f18f --- /dev/null +++ b/src/main/java/growthcraft/milk/block/entity/MixingVatBlockEntity.java @@ -0,0 +1,520 @@ +package growthcraft.milk.block.entity; + +import static growthcraft.cellar.block.CultureJarBlock.LIT; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Objects; + +import javax.annotation.ParametersAreNonnullByDefault; + +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import growthcraft.lib.block.entity.GrowthcraftFluidTank; +import growthcraft.lib.utils.BlockStateUtils; +import growthcraft.lib.utils.DirectionUtils; +import growthcraft.milk.init.GrowthcraftMilkBlockEntities; +import growthcraft.milk.lib.networking.GrowthcraftMilkMessages; +import growthcraft.milk.lib.networking.packet.MixingVatFluidSyncPacket; +import growthcraft.milk.recipe.MixingVatFluidRecipe; +import growthcraft.milk.recipe.MixingVatItemRecipe; +import growthcraft.milk.screen.container.MixingVatMenu; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.Connection; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.TranslatableComponent; +import net.minecraft.network.protocol.Packet; +import net.minecraft.network.protocol.game.ClientGamePacketListener; +import net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.sounds.SoundSource; +import net.minecraft.world.MenuProvider; +import net.minecraft.world.entity.player.Inventory; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.inventory.AbstractContainerMenu; +import net.minecraft.world.inventory.ContainerData; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityTicker; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.common.util.LazyOptional; +import net.minecraftforge.fluids.FluidStack; +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.ItemStackHandler; + +public class MixingVatBlockEntity extends BlockEntity implements BlockEntityTicker, MenuProvider { + private int tickClock = 0; + private int tickMax = -1; + private boolean activated = false; + private ItemStack activationTool = ItemStack.EMPTY; + private ItemStack resultActivationTool = ItemStack.EMPTY; + + protected final ContainerData data; + + private Component customName; + + private final ItemStackHandler itemStackHandler = new ItemStackHandler(4) { + @Override + protected void onContentsChanged(int slot) { + setChanged(); + } + }; + + private LazyOptional inventoryHandler = LazyOptional.empty(); + + private final GrowthcraftFluidTank FLUID_TANK_INPUT = new GrowthcraftFluidTank(4000) { + @Override + public void onContentsChanged() { + setChanged(); + if (level != null && !level.isClientSide) { + GrowthcraftMilkMessages.sendToClients(new MixingVatFluidSyncPacket(0, this.fluid, worldPosition)); + } + } + }; + + private final GrowthcraftFluidTank FLUID_TANK_OUTPUT = new GrowthcraftFluidTank(1000) { + @Override + public void onContentsChanged() { + setChanged(); + if (level != null && !level.isClientSide) { + GrowthcraftMilkMessages.sendToClients(new MixingVatFluidSyncPacket(1, this.fluid, worldPosition)); + } + } + }; + + private LazyOptional inputFluidHandler = LazyOptional.empty(); + private LazyOptional reagentFluidHandler = LazyOptional.empty(); + + public MixingVatBlockEntity(BlockPos blockPos, BlockState state) { + super(GrowthcraftMilkBlockEntities.MIXING_VAT_BLOCK_ENTITY.get(), blockPos, state); + + this.FLUID_TANK_INPUT.allowAnyFluid(true); + this.FLUID_TANK_OUTPUT.allowAnyFluid(true); + + this.data = new ContainerData() { + @Override + public int get(int index) { + return switch (index) { + case 0 -> MixingVatBlockEntity.this.tickClock; + case 1 -> MixingVatBlockEntity.this.tickMax; + default -> 0; + }; + } + + @Override + public void set(int index, int value) { + switch (index) { + case 0 -> MixingVatBlockEntity.this.tickClock = value; + case 1 -> MixingVatBlockEntity.this.tickMax = value; + default -> { + // Do Nothing + } + } + } + + @Override + public int getCount() { + return 2; + } + }; + } + + @Override + public @NotNull Component getDisplayName() { + return this.customName != null + ? this.customName + : new TranslatableComponent("container.growthcraft_milk.mixing_vat"); + } + + @Nullable + @Override + public AbstractContainerMenu createMenu(int containerId, @NotNull Inventory inventory, @NotNull Player player) { + return new MixingVatMenu(containerId, inventory, this, this.data); + } + + public boolean canActivateProcessing(ItemStack itemStack) { + List fluidRecipes = this.getMatchingFluidRecipes(); + MixingVatFluidRecipe fluidRecipe = fluidRecipes.isEmpty() ? null : fluidRecipes.get(0); + + if(fluidRecipe != null) { + return fluidRecipe.getActivationTool().is(itemStack.getItem()); + } + + List itemRecipes = this.getMatchingItemRecipes(); + MixingVatItemRecipe itemRecipe = itemRecipes.isEmpty() ? null : itemRecipes.get(0); + + if(itemRecipe != null) { + // Then we have an Item recipe. + return itemRecipe.getActivationTool().is(itemStack.getItem()); + } + + return false; + } + + public boolean canActivateResultItem(ItemStack itemStack) { + List itemRecipes = this.getMatchingItemRecipes(); + MixingVatItemRecipe itemRecipe = itemRecipes.isEmpty() ? null : itemRecipes.get(0); + + if(itemRecipe != null) { + // Then we have an Item recipe. + return itemRecipe.getResultActivationTool().is(itemStack.getItem()); + } + return false; + } + + public void tick() { + if (this.getLevel() != null) { + this.tick(this.getLevel(), this.getBlockPos(), this.getBlockState(), this); + } + } + + @Override + public void tick(Level level, BlockPos blockPos, BlockState blockState, MixingVatBlockEntity mixingVatBlockEntity) { + if (level.isClientSide) return; + + // First check for a MixingVatFluidRecipe + List fluidRecipes = this.getMatchingFluidRecipes(); + MixingVatFluidRecipe fluidRecipe = fluidRecipes.isEmpty() ? null : fluidRecipes.get(0); + + List itemRecipes = this.getMatchingItemRecipes(); + MixingVatItemRecipe itemRecipe = itemRecipes.isEmpty() ? null : itemRecipes.get(0); + + boolean validRecipe = (fluidRecipe != null || itemRecipe != null); + + if (validRecipe && this.tickClock <= this.tickMax && this.activated) { + this.tickClock++; + } else if (validRecipe && this.tickMax > 0 && this.activated) { + + // Consume all the inventory items. + this.itemStackHandler.setStackInSlot(0, ItemStack.EMPTY); + this.itemStackHandler.setStackInSlot(1, ItemStack.EMPTY); + this.itemStackHandler.setStackInSlot(2, ItemStack.EMPTY); + + if(fluidRecipe != null) { + // Set the output fluid and any reagent/waste fluid. + this.FLUID_TANK_INPUT.setFluid(fluidRecipe.getOutputFluidStack().copy()); + this.FLUID_TANK_OUTPUT.setFluid(fluidRecipe.getWasteFluidStack().copy()); + + } else { + // Consume all the inventory items and fluid. + this.itemStackHandler.setStackInSlot(3, itemRecipe.getResultItemStack().copy()); + this.FLUID_TANK_INPUT.setFluid(FluidStack.EMPTY); + this.FLUID_TANK_OUTPUT.setFluid(FluidStack.EMPTY); + } + + this.resetTickClock(); + } else if (validRecipe && this.tickMax == -1) { + if(fluidRecipe != null) { + this.tickMax = fluidRecipe.getProcessingTime(); + this.activationTool = fluidRecipe.getActivationTool(); + this.resultActivationTool = ItemStack.EMPTY; + } else { + this.tickMax = itemRecipe.getProcessingTime(); + this.activationTool = itemRecipe.getActivationTool(); + this.resultActivationTool = itemRecipe.getResultActivationTool(); + } + + level.sendBlockUpdated(this.getBlockPos(), this.getBlockState(), this.getBlockState(), Block.UPDATE_ALL); + } else if(validRecipe && this.tickMax > 0 && !this.activated) { + // Then do nothing, we are waiting activate the recipe. + } else { + this.resetTickClock(); + } + + level.sendBlockUpdated( + this.getBlockPos(), + this.getBlockState(), + this.getBlockState(), + Block.UPDATE_ALL + ); + } + + public int getTickClock(String type) { + return switch (type) { + case "current" -> this.tickClock; + case "max" -> this.tickMax; + default -> 0; + }; + } + + private void resetTickClock() { + this.tickClock = 0; + this.tickMax = -1; + this.activated = false; + } + + private List getMatchingFluidRecipes() { + if (level == null) return Collections.emptyList(); + + List matchingRecipes = new ArrayList<>(); + + // Place the input slots into a List. + List currentItems = new ArrayList<>(); + for (int i = 0; i < itemStackHandler.getSlots() - 1; i++) { + if (!itemStackHandler.getStackInSlot(i).isEmpty()) currentItems.add(itemStackHandler.getStackInSlot(i)); + } + + List recipes = this.level.getRecipeManager().getAllRecipesFor( + MixingVatFluidRecipe.Type.INSTANCE + ); + + for(MixingVatFluidRecipe recipe : recipes) { + if (recipe.matches( + this.FLUID_TANK_INPUT.getFluid().copy(), + this.FLUID_TANK_OUTPUT.getFluid().copy(), + currentItems) + ) { + matchingRecipes.add(recipe); + } + } + + return matchingRecipes; + } + + private List getMatchingItemRecipes() { + if (level == null) return Collections.emptyList(); + + List matchingRecipes = new ArrayList<>(); + + // Place the input slots into a List. + List currentItems = new ArrayList<>(); + for (int i = 0; i < itemStackHandler.getSlots() - 1; i++) { + if (!itemStackHandler.getStackInSlot(i).isEmpty()) currentItems.add(itemStackHandler.getStackInSlot(i)); + } + + if(!FLUID_TANK_INPUT.isEmpty() && !currentItems.isEmpty()) { + // Then we need to try and match a MixingVatItemRecipe. + List recipes = this.level.getRecipeManager().getAllRecipesFor( + MixingVatItemRecipe.Type.INSTANCE + ); + + for(MixingVatItemRecipe recipe : recipes) { + if (recipe.matches( + this.FLUID_TANK_INPUT.getFluid(), + currentItems) + ) { + matchingRecipes.add(recipe); + } + } + } + return matchingRecipes; + } + + @Nullable + @Override + public Packet getUpdatePacket() { + return ClientboundBlockEntityDataPacket.create(this); + } + + @Override + public @NotNull CompoundTag getUpdateTag() { + return this.serializeNBT(); + } + + @Override + public void handleUpdateTag(CompoundTag tag) { + this.load(tag); + } + + @Override + public void load(@NotNull CompoundTag nbt) { + super.load(nbt); + + this.tickClock = nbt.getInt("CurrentProcessTicks"); + this.tickMax = nbt.getInt("MaxProcessTicks"); + this.activated = nbt.getBoolean("IsActivated"); + + this.itemStackHandler.deserializeNBT(nbt.getCompound("inventory")); + this.FLUID_TANK_INPUT.readFromNBT(nbt.getCompound("InputFluidTank")); + this.FLUID_TANK_OUTPUT.readFromNBT(nbt.getCompound("ReagentFluidTank")); + + this.activationTool = ItemStack.of(nbt.getCompound("ActivationTool")); + this.resultActivationTool = ItemStack.of(nbt.getCompound("ResultActivationTool")); + + if (nbt.contains("CustomName", 8)) { + this.customName = Component.Serializer.fromJson(nbt.getString("CustomName")); + } + } + + @Override + @ParametersAreNonnullByDefault + protected void saveAdditional(CompoundTag nbt) { + + nbt.putInt("CurrentProcessTicks", this.tickClock); + nbt.putInt("MaxProcessTicks", this.tickMax); + nbt.putBoolean("IsActivated", this.activated); + + nbt.put("inventory", itemStackHandler.serializeNBT()); + nbt.put("InputFluidTank", FLUID_TANK_INPUT.writeToNBT(new CompoundTag())); + nbt.put("ReagentFluidTank", FLUID_TANK_OUTPUT.writeToNBT(new CompoundTag())); + + nbt.put("ActivationTool", this.activationTool.serializeNBT()); + nbt.put("ResultActivationTool", this.resultActivationTool.serializeNBT()); + + if (this.customName != null) { + nbt.putString("CustomName", Component.Serializer.toJson(this.customName)); + } + + super.saveAdditional(nbt); + } + + @Override + public void onDataPacket(Connection net, ClientboundBlockEntityDataPacket pkt) { + super.onDataPacket(net, pkt); + } + + @Override + public void onLoad() { + super.onLoad(); + inputFluidHandler = LazyOptional.of(() -> FLUID_TANK_INPUT); + reagentFluidHandler = LazyOptional.of(() -> FLUID_TANK_OUTPUT); + inventoryHandler = LazyOptional.of(() -> itemStackHandler); + } + + @Override + public void invalidateCaps() { + super.invalidateCaps(); + inputFluidHandler.invalidate(); + reagentFluidHandler.invalidate(); + inventoryHandler.invalidate(); + } + + @NotNull + @Override + public LazyOptional getCapability(@NotNull Capability cap, @Nullable Direction side) { + if (cap == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY) { + if (DirectionUtils.isSide(side)) { + return this.reagentFluidHandler.cast(); + } else if (DirectionUtils.isTop(side)) { + return this.inputFluidHandler.cast(); + } + } else if (cap == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) { + return this.inventoryHandler.cast(); + } + + return super.getCapability(cap, side); + } + + public ItemStackHandler getInventoryHandler() { + return itemStackHandler; + } + + public void setFluidStackInTank(int tankID, FluidStack fluidStack) { + switch (tankID) { + case 0 -> this.FLUID_TANK_INPUT.setFluid(fluidStack); + case 1 -> this.FLUID_TANK_OUTPUT.setFluid(fluidStack); + default -> { + throw new IndexOutOfBoundsException( + String.format("MixingVatBlockEntity at %s: setFluidStackInTank(int %d, FluidStack %s) is not a valid tank ID.", + this.getBlockPos(), tankID, fluidStack.getFluid().toString())); + } + } + } + + public FluidStack getFluidStackInTank(String tankName) { + return switch (tankName) { + case "input" -> this.getFluidStackInTank(0); + case "reagent" -> this.getFluidStackInTank(1); + default -> { + throw new IndexOutOfBoundsException( + String.format("MixingVatBlockEntity at %s: %s is not a valid tank name.", + this.getBlockPos(), tankName)); + } + }; + } + + public FluidStack getFluidStackInTank(int tankID) { + return tankID == 0 ? this.FLUID_TANK_INPUT.getFluid() : this.FLUID_TANK_OUTPUT.getFluid(); + } + + public FluidTank getFluidTank(String tankName) { + return switch (tankName) { + case "input" -> this.getFluidTank(0); + case "reagent" -> this.getFluidTank(1); + default -> { + throw new IndexOutOfBoundsException( + String.format("MixingVatBlockEntity at %s: %s is not a valid tank name.", + this.getBlockPos(), tankName)); + } + }; + } + + public FluidTank getFluidTank(int tankID) { + return tankID == 0 ? this.FLUID_TANK_INPUT : this.FLUID_TANK_OUTPUT; + } + + public boolean activateRecipe(ItemStack stack) { + if(this.activated) return false; + this.activated = this.getActivationTool() != null && this.getActivationTool().getItem() == stack.getItem(); + + // Reset the activation tool. + this.activationTool = ItemStack.EMPTY; + + return this.activated; + } + + private ItemStack getActivationTool() { + return this.activationTool; + } + + private ItemStack getResultActivationTool() { + return this.resultActivationTool; + } + + public boolean activateResult(Player player, ItemStack resultActivationTool) { + if (this.getResultActivationTool() != null + && this.getResultActivationTool().getItem() == resultActivationTool.getItem() + ) { + ItemStack itemStack = this.itemStackHandler.extractItem( + 3, + this.itemStackHandler.getStackInSlot(3).getCount(), + false); + + if (!player.getInventory().add(itemStack)) { + player.drop(itemStack, false); + } + + // Reset the resultActivationTool + this.resultActivationTool = ItemStack.EMPTY; + + return true; + } + return false; + } + + public boolean isProcessing() { + return this.tickClock > 0; + } + + public int getPercentProgress() { + float progress = (float) this.tickClock / this.tickMax; + float percentage = progress * 100; + return Math.round(percentage); + } + + public void playSound(String sound) { + if (Objects.equals(sound, "open") && this.level != null) { + this.level.playSound(null, this.getBlockPos(), SoundEvents.IRON_DOOR_OPEN, SoundSource.BLOCKS, 1.0F, 1.0F); + } + } + + public boolean isHeated() { + boolean heated = BlockStateUtils.isHeated(this.level, this.getBlockPos()); + // Only change the blockstate if it is different. + if(this.getBlockState().getValue(LIT).booleanValue() != heated) { + this.level.setBlock(this.getBlockPos(), this.getBlockState().setValue(LIT, heated), Block.UPDATE_ALL); + } + return heated; + } +} diff --git a/src/main/java/growthcraft/milk/block/entity/PancheonBlockEntity.java b/src/main/java/growthcraft/milk/block/entity/PancheonBlockEntity.java new file mode 100644 index 0000000..de87cfe --- /dev/null +++ b/src/main/java/growthcraft/milk/block/entity/PancheonBlockEntity.java @@ -0,0 +1,322 @@ +package growthcraft.milk.block.entity; + +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; + +import javax.annotation.ParametersAreNonnullByDefault; + +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import growthcraft.lib.block.entity.GrowthcraftFluidTank; +import growthcraft.milk.init.GrowthcraftMilkBlockEntities; +import growthcraft.milk.lib.networking.GrowthcraftMilkMessages; +import growthcraft.milk.lib.networking.packet.PancheonFluidSyncPacket; +import growthcraft.milk.recipe.PancheonRecipe; +import growthcraft.milk.screen.container.PancheonMenu; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.Connection; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.TranslatableComponent; +import net.minecraft.network.protocol.Packet; +import net.minecraft.network.protocol.game.ClientGamePacketListener; +import net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket; +import net.minecraft.world.MenuProvider; +import net.minecraft.world.entity.player.Inventory; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.inventory.AbstractContainerMenu; +import net.minecraft.world.inventory.ContainerData; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityTicker; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.common.util.LazyOptional; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.capability.CapabilityFluidHandler; +import net.minecraftforge.fluids.capability.IFluidHandler; + +public class PancheonBlockEntity extends BlockEntity implements BlockEntityTicker, MenuProvider { + + private int tickClock = 0; + private int tickMax = -1; + + protected final ContainerData data; + + private Component customName; + + private final GrowthcraftFluidTank FLUID_TANK_INPUT_0 = new GrowthcraftFluidTank(2000) { + @Override + public void onContentsChanged() { + setChanged(); + if(!level.isClientSide) { + GrowthcraftMilkMessages.sendToClients(new PancheonFluidSyncPacket(0, this.fluid, worldPosition)); + } + } + }; + + private final GrowthcraftFluidTank FLUID_TANK_OUTPUT_0 = new GrowthcraftFluidTank(1000, true) { + @Override + public void onContentsChanged() { + setChanged(); + if(!level.isClientSide) { + GrowthcraftMilkMessages.sendToClients(new PancheonFluidSyncPacket(1, this.fluid, worldPosition)); + } + } + }; + + private final GrowthcraftFluidTank FLUID_TANK_OUTPUT_1 = new GrowthcraftFluidTank(1000, true) { + @Override + public void onContentsChanged() { + setChanged(); + if(!level.isClientSide) { + GrowthcraftMilkMessages.sendToClients(new PancheonFluidSyncPacket(2, this.fluid, worldPosition)); + } + } + }; + + private LazyOptional lazyInputFluidHandler0 = LazyOptional.empty(); + private LazyOptional lazyOutputFluidHandler0 = LazyOptional.empty(); + private LazyOptional lazyOutputFluidHandler1 = LazyOptional.empty(); + + public PancheonBlockEntity(BlockPos blockPos, BlockState state) { + super(GrowthcraftMilkBlockEntities.PANCHEON_BLOCK_ENTITY.get(), blockPos, state); + + this.FLUID_TANK_INPUT_0.allowAnyFluid(true); + + this.data = new ContainerData() { + @Override + public int get(int index) { + return switch (index) { + case 0 -> PancheonBlockEntity.this.tickClock; + case 1 -> PancheonBlockEntity.this.tickMax; + default -> 0; + }; + } + + @Override + public void set(int index, int value) { + switch (index) { + case 0 -> PancheonBlockEntity.this.tickClock = value; + case 1 -> PancheonBlockEntity.this.tickMax = value; + } + } + + @Override + public int getCount() { + return 2; + } + }; + + } + + @Override + public Component getDisplayName() { + return new TranslatableComponent("container.growthcraft_milk.pancheon"); + } + + @Nullable + @Override + public AbstractContainerMenu createMenu(int containerId, @NotNull Inventory inventory, @NotNull Player player) { + return new PancheonMenu(containerId, inventory, this, this.data); + } + + public void tick() { + if (this.getLevel() != null) { + this.tick(this.getLevel(), this.getBlockPos(), this.getBlockState(), this); + } + } + + public boolean isInputTankFull() { + return this.getFluidStackInTank(0).getAmount() == 2000; + } + + private boolean isOutputTankFull() { + return (this.getFluidStackInTank(1).getAmount() == 1000 || this.getFluidStackInTank(2).getAmount() == 1000); + } + + @Override + public void tick(Level level, BlockPos blockPos, BlockState blockState, PancheonBlockEntity blockEntity) { + + if(!level.isClientSide && this.isInputTankFull()) { + List recipes = this.getMatchingRecipes(this.getFluidStackInTank(0)); + PancheonRecipe recipe = recipes.isEmpty() ? null : recipes.get(0); + + if (recipe != null && this.tickClock <= this.tickMax ) { + // Then increment the clock. + this.tickClock++; + } else if (recipe != null && this.tickMax > 0 && this.tickClock > this.tickMax) { + // Then process the recipe. + this.setFluidStackInTank(1, recipe.getFluidStack("output0").copy()); + this.setFluidStackInTank(2, recipe.getFluidStack("output1").copy()); + this.setFluidStackInTank(0, FluidStack.EMPTY); + + this.tickMax = -1; + this.tickClock = 0; + + } else if(recipe != null && this.tickMax == -1) { + // Then we have a new recipe that needs to start processing. + this.tickMax = recipe.getRecipeProcessingTime(); + } else { + // Else make sure the clock is zero. + this.tickMax = -1; + this.tickClock = 0; + } + + this.level.sendBlockUpdated(this.getBlockPos(), this.getBlockState(), this.getBlockState(), 3); + + } else if(!level.isClientSide && this.isOutputTankFull()) { + this.level.sendBlockUpdated(this.getBlockPos(), this.getBlockState(), this.getBlockState(), 3); + } + } + + private List getMatchingRecipes(FluidStack fluidStack) { + List matchingRecipes = new ArrayList<>(); + + List recipes = level.getRecipeManager() + .getAllRecipesFor(PancheonRecipe.Type.INSTANCE); + + for(PancheonRecipe recipe : recipes) { + if(recipe.getFluidStack("input0").getFluid() == fluidStack.getFluid()) { + matchingRecipes.add(recipe); + } + } + return matchingRecipes; + } + + @Nullable + @Override + public Packet getUpdatePacket() { + return ClientboundBlockEntityDataPacket.create(this); + } + + @Override + public @NotNull CompoundTag getUpdateTag() { + return this.serializeNBT(); + } + + @Override + public void handleUpdateTag(CompoundTag tag) { + this.load(tag); + } + + @Override + public void load(@NotNull CompoundTag nbt) { + super.load(nbt); + + this.FLUID_TANK_INPUT_0.readFromNBT(nbt.getCompound("fluid_tank_input_0")); + this.FLUID_TANK_OUTPUT_0.readFromNBT(nbt.getCompound("fluid_tank_output_0")); + this.FLUID_TANK_OUTPUT_1.readFromNBT(nbt.getCompound("fluid_tank_output_1")); + this.tickClock = nbt.getInt("CurrentProcessTicks"); + this.tickMax = nbt.getInt("MaxProcessTicks"); + + if (nbt.contains("CustomName", 8)) { + this.customName = Component.Serializer.fromJson(nbt.getString("CustomName")); + } + } + + @Override + @ParametersAreNonnullByDefault + protected void saveAdditional(CompoundTag nbt) { + + nbt.put("fluid_tank_input_0", FLUID_TANK_INPUT_0.writeToNBT(new CompoundTag())); + nbt.put("fluid_tank_output_0", FLUID_TANK_OUTPUT_0.writeToNBT(new CompoundTag())); + nbt.put("fluid_tank_output_1", FLUID_TANK_OUTPUT_1.writeToNBT(new CompoundTag())); + nbt.putInt("CurrentProcessTicks", this.tickClock); + nbt.putInt("MaxProcessTicks", this.tickMax); + + if (this.customName != null) { + nbt.putString("CustomName", Component.Serializer.toJson(this.customName)); + } + + super.saveAdditional(nbt); + } + + @Override + public void onDataPacket(Connection net, ClientboundBlockEntityDataPacket pkt) { + this.load(Objects.requireNonNull(pkt.getTag())); + } + + @Override + public void onLoad() { + super.onLoad(); + lazyInputFluidHandler0 = LazyOptional.of( () -> FLUID_TANK_INPUT_0); + lazyOutputFluidHandler0 = LazyOptional.of( () -> FLUID_TANK_OUTPUT_0); + lazyOutputFluidHandler1 = LazyOptional.of( () -> FLUID_TANK_OUTPUT_1); + } + + @Override + public void invalidateCaps() { + super.invalidateCaps(); + lazyInputFluidHandler0.invalidate(); + lazyOutputFluidHandler0.invalidate(); + lazyOutputFluidHandler1.invalidate(); + } + + @NotNull + @Override + public LazyOptional getCapability(@NotNull Capability cap, @Nullable Direction side) { + if (cap == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY) { + int inputFluidAmount0 = this.FLUID_TANK_INPUT_0.getFluidAmount(); + int outputFluidAmount0 = this.FLUID_TANK_OUTPUT_0.getFluidAmount(); + int outputFluidAmount1 = this.FLUID_TANK_OUTPUT_1.getFluidAmount(); + + // If input is empty and output0 is not empty, return output0 + if (inputFluidAmount0 == 0 && outputFluidAmount0 > 0) { + return lazyOutputFluidHandler0.cast(); + } + // If input and output0 are empty but output1 is not empty, return Output1 + if (inputFluidAmount0 == 0 && outputFluidAmount0 == 0 && outputFluidAmount1 > 0) { + return lazyOutputFluidHandler1.cast(); + } + // If inputTank has fluid or all tanks or empty, return the input tank. + if (inputFluidAmount0 > 0 || inputFluidAmount0 + outputFluidAmount0 + outputFluidAmount1 == 0) { + return this.lazyInputFluidHandler0.cast(); + } + } + + return super.getCapability(cap, side); + } + + public void setFluidStackInTank(int tankID, FluidStack fluidStack) { + switch (tankID) { + case 1 -> this.FLUID_TANK_OUTPUT_0.setFluid(fluidStack); + case 2 -> this.FLUID_TANK_OUTPUT_1.setFluid(fluidStack); + default -> this.FLUID_TANK_INPUT_0.setFluid(fluidStack); + } + } + + public FluidStack getFluidStackInTank(int tankID) { + return switch (tankID) { + case 1 -> this.FLUID_TANK_OUTPUT_0.getFluid(); + case 2 -> this.FLUID_TANK_OUTPUT_1.getFluid(); + default -> this.FLUID_TANK_INPUT_0.getFluid(); + }; + } + + public GrowthcraftFluidTank getFluidTank(int tankID) { + return switch (tankID) { + case 1 -> this.FLUID_TANK_OUTPUT_0; + case 2 -> this.FLUID_TANK_OUTPUT_1; + default -> this.FLUID_TANK_INPUT_0; + }; + } + + public boolean isFluidEmpty() { + return getFluidStackInTank(0).isEmpty() && getFluidStackInTank(1).isEmpty() && getFluidStackInTank(2).isEmpty(); + } + + public int getTickClock(String type) { + switch(type) { + case "current": + return this.tickClock; + case "max": + return this.tickMax; + default: + return 0; + } + } +} diff --git a/src/main/java/growthcraft/milk/block/entity/renderer/CheeseCurdBlockEntityRenderer.java b/src/main/java/growthcraft/milk/block/entity/renderer/CheeseCurdBlockEntityRenderer.java new file mode 100644 index 0000000..cce75eb --- /dev/null +++ b/src/main/java/growthcraft/milk/block/entity/renderer/CheeseCurdBlockEntityRenderer.java @@ -0,0 +1,5 @@ +package growthcraft.milk.block.entity.renderer; + +public class CheeseCurdBlockEntityRenderer { + //TODO[11]: Implement CheeseCurdBlockEntityRenderer +} diff --git a/src/main/java/growthcraft/milk/block/entity/renderer/MixingVatBlockEntityRenderer.java b/src/main/java/growthcraft/milk/block/entity/renderer/MixingVatBlockEntityRenderer.java new file mode 100644 index 0000000..fdc1b5d --- /dev/null +++ b/src/main/java/growthcraft/milk/block/entity/renderer/MixingVatBlockEntityRenderer.java @@ -0,0 +1,132 @@ +package growthcraft.milk.block.entity.renderer; + +import java.awt.Color; + +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.VertexConsumer; +import com.mojang.math.Matrix3f; +import com.mojang.math.Matrix4f; +import com.mojang.math.Quaternion; +import com.mojang.math.Vector3f; + +import growthcraft.milk.block.entity.MixingVatBlockEntity; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.blockentity.BlockEntityRenderer; +import net.minecraft.client.renderer.texture.TextureAtlas; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.world.level.material.Fluid; +import net.minecraft.world.phys.Vec3; +import net.minecraftforge.fluids.FluidAttributes; +import net.minecraftforge.fluids.FluidStack; + +public class MixingVatBlockEntityRenderer implements BlockEntityRenderer { + @Override + public boolean shouldRender(MixingVatBlockEntity blockEntity, Vec3 p_173569_) { + return true; + } + + @Override + public boolean shouldRenderOffScreen(MixingVatBlockEntity blockEntity) { + return true; + } + + @Override + public void render(MixingVatBlockEntity blockEntity, float partialTick, PoseStack poseStack, MultiBufferSource multiBufferSource, int light, int overlay) { + + float baseOffset = 4.0F / 16F; + float maxFluidHeight = 14.0F / 16F; + + if(!blockEntity.getFluidStackInTank(0).isEmpty()) { + + FluidStack inputFluidStack = blockEntity.getFluidStackInTank(0); + + float inputCapacity = blockEntity.getFluidTank(0).getCapacity(); + float inputAmount = inputFluidStack.getAmount(); + float inputFluidHeight = baseOffset + (maxFluidHeight - baseOffset) * inputAmount / inputCapacity; + + renderFluidSingle(poseStack, multiBufferSource, inputFluidStack, 0.0F, inputFluidHeight, 0.0F, Vector3f.XP.rotationDegrees(90.0F), light, overlay); + } + + if(!blockEntity.getFluidStackInTank(1).isEmpty()) { + FluidStack outputFluidStack = blockEntity.getFluidStackInTank(1); + + float outputCapacity = blockEntity.getFluidTank(1).getCapacity(); + float outputAmount = outputFluidStack.getAmount(); + float outputFluidHeight = baseOffset + (maxFluidHeight - baseOffset) * outputAmount / outputCapacity; + + renderFluidSingle(poseStack, multiBufferSource, outputFluidStack, 0.0F, outputFluidHeight, 0.0F, Vector3f.XP.rotationDegrees(90.0F), light, overlay); + } + } + + public void renderFluidSingle(PoseStack poseStack, MultiBufferSource buffer, FluidStack fluidStack, float xOffset, float height, float zOffset, Quaternion rotation, int lightLevel, int overlay) { + poseStack.pushPose(); + poseStack.translate(0.5F, height, 0.5F); + + float s = 15.0F / 256.0F; + float v = 1.55F / 8F; + float w = -(v) * 2.5F; + + int alpha = 2 * 255; + + poseStack.translate(w + xOffset, 0.0F, w + zOffset); + poseStack.mulPose(rotation); + + poseStack.scale(s, s, s); + + Fluid fluid = fluidStack.getFluid(); + FluidAttributes fluidAttributes = fluid.getAttributes(); + + //IClientFluidTypeExtensions fluidTypeExtensions = IClientFluidTypeExtensions.of(fluidStack.getFluid()); + Color color = new Color(fluidAttributes.getColor()); + + TextureAtlasSprite sprite = Minecraft.getInstance().getTextureAtlas(TextureAtlas.LOCATION_BLOCKS).apply(fluidAttributes.getStillTexture(fluidStack)); + + VertexConsumer vertexBuilder = buffer.getBuffer(RenderType.translucent()); + + renderIcon(poseStack, vertexBuilder, sprite, color, alpha, overlay, lightLevel); + + poseStack.popPose(); + } + + private static void renderIcon(PoseStack poseStack, VertexConsumer vertexBuilder, TextureAtlasSprite sprite, Color color, int alpha, int overlay, int light) { + + int red = color.getRed(); + int green = color.getGreen(); + int blue = color.getBlue(); + + Matrix3f matrix3f = poseStack.last().normal(); + Matrix4f matrix4f = poseStack.last().pose(); + + vertexBuilder.vertex(matrix4f, 1.0F, 15.0F, 0) + .color(red, green, blue, alpha) + .uv(sprite.getU0(), sprite.getV1()) + .overlayCoords(overlay) + .uv2(light) + .normal(matrix3f, 0, 0, 1) + .endVertex(); + vertexBuilder.vertex(matrix4f, 15.0F, 15.0F, 0) + .color(red, green, blue, alpha) + .uv(sprite.getU1(), sprite.getV1()) + .overlayCoords(overlay) + .uv2(light) + .normal(matrix3f, 0, 0, 1) + .endVertex(); + vertexBuilder.vertex(matrix4f, 15.0F, 1.0F, 0) + .color(red, green, blue, alpha) + .uv(sprite.getU1(), sprite.getV0()) + .overlayCoords(overlay) + .uv2(light) + .normal(matrix3f, 0, 0, 1) + .endVertex(); + vertexBuilder.vertex(matrix4f, 1.0F, 1.0F, 0) + .color(red, green, blue, alpha) + .uv(sprite.getU0(), sprite.getV0()) + .overlayCoords(overlay) + .uv2(light) + .normal(matrix3f, 0, 0, 1) + .endVertex(); + + } +} diff --git a/src/main/java/growthcraft/milk/block/entity/renderer/PancheonBlockEntityRenderer.java b/src/main/java/growthcraft/milk/block/entity/renderer/PancheonBlockEntityRenderer.java new file mode 100644 index 0000000..b69a885 --- /dev/null +++ b/src/main/java/growthcraft/milk/block/entity/renderer/PancheonBlockEntityRenderer.java @@ -0,0 +1,125 @@ +package growthcraft.milk.block.entity.renderer; + +import java.awt.Color; + +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.VertexConsumer; +import com.mojang.math.Matrix3f; +import com.mojang.math.Matrix4f; +import com.mojang.math.Vector3f; + +import growthcraft.milk.block.entity.PancheonBlockEntity; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.blockentity.BlockEntityRenderer; +import net.minecraft.client.renderer.texture.TextureAtlas; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.world.level.material.Fluid; +import net.minecraftforge.fluids.FluidAttributes; +import net.minecraftforge.fluids.FluidStack; + +public class PancheonBlockEntityRenderer implements BlockEntityRenderer { + + @Override + public void render(PancheonBlockEntity blockEntity, float partialTick, PoseStack poseStack, MultiBufferSource multiBufferSource, int light, int overlay) { + + if (blockEntity.isFluidEmpty()) { + return; + } + + float baseOffset = 1 / 16F; + float maxFluidHeight = 3.5F / 16F; + + FluidStack inputFluidStack = blockEntity.getFluidStackInTank(0); + FluidStack outputFluidStackPrimary = blockEntity.getFluidStackInTank(1); + FluidStack outputFluidStackSecondary = blockEntity.getFluidStackInTank(2); + + if (!inputFluidStack.isEmpty()) { + float inputFluidStackHeight = baseOffset + (maxFluidHeight - baseOffset) * inputFluidStack.getAmount() / (float) blockEntity.getFluidTank(0).getCapacity(); + + renderFluid(inputFluidStack, inputFluidStackHeight, multiBufferSource, poseStack, light, overlay); + } + + if (!outputFluidStackPrimary.isEmpty()) { + float outputFluidStackPrimaryHeight = (baseOffset * 3) + (maxFluidHeight - baseOffset) * outputFluidStackPrimary.getAmount() / (float) blockEntity.getFluidTank(1).getCapacity() - (maxFluidHeight / 2); + + renderFluid(outputFluidStackPrimary, outputFluidStackPrimaryHeight, multiBufferSource, poseStack, light, overlay); + } + + if (!outputFluidStackSecondary.isEmpty()) { + float outputFluidStackSecondaryHeight = baseOffset + (maxFluidHeight - baseOffset) * outputFluidStackSecondary.getAmount() / (float) blockEntity.getFluidTank(2).getCapacity() - (maxFluidHeight / 2); + + renderFluid(outputFluidStackSecondary, outputFluidStackSecondaryHeight, multiBufferSource, poseStack, light, overlay); + } + } + + public void renderFluid(FluidStack fluidStack, float height, MultiBufferSource buffer, PoseStack poseStack, int lightLevel, int overlay) { + poseStack.pushPose(); + poseStack.translate(0.5F, height, 0.5F); + + float s = 14 / 256F; + float v = 1.55F / 8F; + float w = -(v) * 2.5F; + + int alpha = 2 * 255; + + poseStack.translate(w, 0.0F, w); + poseStack.mulPose(Vector3f.XP.rotationDegrees(90.0F)); + poseStack.scale(s, s, s); + + Fluid fluid = fluidStack.getFluid(); + FluidAttributes fluidAttributes = fluid.getAttributes(); + + //IClientFluidTypeExtensions fluidTypeExtensions = IClientFluidTypeExtensions.of(fluidStack.getFluid()); + Color color = new Color(fluidAttributes.getColor()); + + TextureAtlasSprite sprite = Minecraft.getInstance().getTextureAtlas(TextureAtlas.LOCATION_BLOCKS).apply(fluidAttributes.getStillTexture(fluidStack)); + + VertexConsumer vertexBuilder = buffer.getBuffer(RenderType.translucent()); + + renderIcon(poseStack, vertexBuilder, sprite, color, alpha, overlay, lightLevel); + poseStack.popPose(); + } + + private static void renderIcon(PoseStack poseStack, VertexConsumer vertexBuilder, TextureAtlasSprite sprite, Color color, int alpha, int overlay, int light) { + + int red = color.getRed(); + int green = color.getGreen(); + int blue = color.getBlue(); + + Matrix3f matrix3f = poseStack.last().normal(); + Matrix4f matrix4f = poseStack.last().pose(); + + vertexBuilder.vertex(matrix4f, 0, 17, 0) + .color(red, green, blue, alpha) + .uv(sprite.getU0(), sprite.getV1()) + .overlayCoords(overlay) + .uv2(light) + .normal(matrix3f, 0, 0, 1) + .endVertex(); + vertexBuilder.vertex(matrix4f, 17, 17, 0) + .color(red, green, blue, alpha) + .uv(sprite.getU1(), sprite.getV1()) + .overlayCoords(overlay) + .uv2(light) + .normal(matrix3f, 0, 0, 1) + .endVertex(); + vertexBuilder.vertex(matrix4f, 17, 0, 0) + .color(red, green, blue, alpha) + .uv(sprite.getU1(), sprite.getV0()) + .overlayCoords(overlay) + .uv2(light) + .normal(matrix3f, 0, 0, 1) + .endVertex(); + vertexBuilder.vertex(matrix4f, 0, 0, 0) + .color(red, green, blue, alpha) + .uv(sprite.getU0(), sprite.getV0()) + .overlayCoords(overlay) + .uv2(light) + .normal(matrix3f, 0, 0, 1) + .endVertex(); + + } + +} diff --git a/src/main/java/growthcraft/milk/compat/jei/JEIGrowthcraftMilkModPlugin.java b/src/main/java/growthcraft/milk/compat/jei/JEIGrowthcraftMilkModPlugin.java new file mode 100644 index 0000000..1f977ea --- /dev/null +++ b/src/main/java/growthcraft/milk/compat/jei/JEIGrowthcraftMilkModPlugin.java @@ -0,0 +1,78 @@ +package growthcraft.milk.compat.jei; + +import growthcraft.milk.compat.jei.category.*; +import growthcraft.milk.recipe.*; +import growthcraft.milk.shared.Reference; +import mezz.jei.api.IModPlugin; +import mezz.jei.api.JeiPlugin; +import mezz.jei.api.recipe.RecipeType; +import mezz.jei.api.registration.IRecipeCategoryRegistration; +import mezz.jei.api.registration.IRecipeRegistration; +import net.minecraft.client.Minecraft; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.crafting.RecipeManager; +import org.jetbrains.annotations.NotNull; + +import java.util.List; +import java.util.Objects; + +@JeiPlugin +public class JEIGrowthcraftMilkModPlugin implements IModPlugin { + + public static RecipeType CHEESE_PRESS_RECIPE_TYPE = + new RecipeType<>(CheesePressRecipeCategory.UID, CheesePressRecipe.class); + + public static RecipeType CHURN_RECIPE_TYPE = + new RecipeType<>(ChurnRecipeCategory.UID, ChurnRecipe.class); + + public static RecipeType MIXING_VAT_FLUID_RECIPE_TYPE = + new RecipeType<>(MixingVatRecipeFluidCategory.UID, MixingVatFluidRecipe.class); + + public static RecipeType MIXING_VAT_ITEM_RECIPE_TYPE = + new RecipeType<>(MixingVatRecipeItemCategory.UID, MixingVatItemRecipe.class); + + public static RecipeType PANCHEON_RECIPE_TYPE = + new RecipeType<>(PancheonRecipeCategory.UID, PancheonRecipe.class); + + @Override + public @NotNull ResourceLocation getPluginUid() { + return new ResourceLocation(Reference.MODID, "jei"); + } + + @Override + public void registerCategories(@NotNull IRecipeCategoryRegistration registration) { + registration.addRecipeCategories( + new CheesePressRecipeCategory(registration.getJeiHelpers().getGuiHelper()), + new ChurnRecipeCategory(registration.getJeiHelpers().getGuiHelper()), + new MixingVatRecipeFluidCategory(registration.getJeiHelpers().getGuiHelper()), + new MixingVatRecipeItemCategory(registration.getJeiHelpers().getGuiHelper()), + new PancheonRecipeCategory(registration.getJeiHelpers().getGuiHelper()) + ); + } + + @Override + public void registerRecipes(@NotNull IRecipeRegistration registration) { + RecipeManager recipeManager = Objects.requireNonNull( + Minecraft.getInstance().level).getRecipeManager(); + + List cheesePressRecipes = + recipeManager.getAllRecipesFor(CheesePressRecipe.Type.INSTANCE); + registration.addRecipes(CHEESE_PRESS_RECIPE_TYPE, cheesePressRecipes); + + List churnRecipes = + recipeManager.getAllRecipesFor(ChurnRecipe.Type.INSTANCE); + registration.addRecipes(CHURN_RECIPE_TYPE, churnRecipes); + + List mixingVatFluidRecipes = + recipeManager.getAllRecipesFor(MixingVatFluidRecipe.Type.INSTANCE); + registration.addRecipes(MIXING_VAT_FLUID_RECIPE_TYPE, mixingVatFluidRecipes); + + List mixingVatItemRecipes = + recipeManager.getAllRecipesFor(MixingVatItemRecipe.Type.INSTANCE); + registration.addRecipes(MIXING_VAT_ITEM_RECIPE_TYPE, mixingVatItemRecipes); + + List pancheonRecipes = + recipeManager.getAllRecipesFor(PancheonRecipe.Type.INSTANCE); + registration.addRecipes(PANCHEON_RECIPE_TYPE, pancheonRecipes); + } +} diff --git a/src/main/java/growthcraft/milk/compat/jei/category/CheesePressRecipeCategory.java b/src/main/java/growthcraft/milk/compat/jei/category/CheesePressRecipeCategory.java new file mode 100644 index 0000000..2b21576 --- /dev/null +++ b/src/main/java/growthcraft/milk/compat/jei/category/CheesePressRecipeCategory.java @@ -0,0 +1,96 @@ +package growthcraft.milk.compat.jei.category; + +import com.mojang.blaze3d.vertex.PoseStack; + +import growthcraft.lib.utils.TextureHelper; +import growthcraft.lib.utils.TickUtils; +import growthcraft.milk.compat.jei.JEIGrowthcraftMilkModPlugin; +import growthcraft.milk.init.GrowthcraftMilkBlocks; +import growthcraft.milk.recipe.CheesePressRecipe; +import growthcraft.milk.shared.Reference; +import mezz.jei.api.constants.VanillaTypes; +import mezz.jei.api.gui.builder.IRecipeLayoutBuilder; +import mezz.jei.api.gui.drawable.IDrawable; +import mezz.jei.api.gui.ingredient.IRecipeSlotsView; +import mezz.jei.api.helpers.IGuiHelper; +import mezz.jei.api.recipe.IFocusGroup; +import mezz.jei.api.recipe.RecipeIngredientRole; +import mezz.jei.api.recipe.RecipeType; +import mezz.jei.api.recipe.category.IRecipeCategory; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.Font; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.FormattedText; +import net.minecraft.network.chat.TranslatableComponent; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.ItemStack; + +public class CheesePressRecipeCategory implements IRecipeCategory { + public static final ResourceLocation UID = new ResourceLocation(Reference.MODID, Reference.UnlocalizedName.CHEESE_PRESS); + + private static final ResourceLocation TEXTURE = TextureHelper.getTextureGui(Reference.MODID, Reference.UnlocalizedName.CHEESE_PRESS); + + private final IDrawable background; + private final IDrawable icon; + + public CheesePressRecipeCategory(IGuiHelper guiHelper) { + this.background = guiHelper.createDrawable( + TEXTURE, 10, 10, 160, 70 + ); + + this.icon = guiHelper.createDrawableIngredient( + VanillaTypes.ITEM_STACK, + new ItemStack(GrowthcraftMilkBlocks.CHEESE_PRESS.get()) + ); + } + + @Override + public RecipeType getRecipeType() { + return JEIGrowthcraftMilkModPlugin.CHEESE_PRESS_RECIPE_TYPE; + } + + @Override + public Component getTitle() { + return new TranslatableComponent("jei.growthcraft_milk.category.cheese_press"); + } + + @Override + public IDrawable getBackground() { + return this.background; + } + + @Override + public IDrawable getIcon() { + return this.icon; + } + + @Override + public void setRecipe(IRecipeLayoutBuilder builder, CheesePressRecipe recipe, IFocusGroup focuses) { + builder.addSlot(RecipeIngredientRole.INPUT, 43, 25) + .addItemStack(recipe.getInputItemStack()); + + builder.addSlot(RecipeIngredientRole.OUTPUT, 96, 25) + .addItemStack(recipe.getResultItemStack()); + } + + @Override + public void draw(CheesePressRecipe recipe, IRecipeSlotsView recipeSlotsView, PoseStack stack, double mouseX, double mouseY) { + IRecipeCategory.super.draw(recipe, recipeSlotsView, stack, mouseX, mouseY); + Font font = Minecraft.getInstance().font; + + font.drawWordWrap(FormattedText.of("Pressing Time " + TickUtils.toHoursMinutesSeconds(recipe.getProcessingTime())), 160, 181, 170, 0x404040); + + font.drawWordWrap(FormattedText.of("Use the wrench to open and close the press."), 160, 119, 150, 0x404040); + + } + + @Override + public Class getRecipeClass() { + return CheesePressRecipe.class; + } + + @Override + public ResourceLocation getUid() { + return UID; + } +} diff --git a/src/main/java/growthcraft/milk/compat/jei/category/ChurnRecipeCategory.java b/src/main/java/growthcraft/milk/compat/jei/category/ChurnRecipeCategory.java new file mode 100644 index 0000000..dde5d8a --- /dev/null +++ b/src/main/java/growthcraft/milk/compat/jei/category/ChurnRecipeCategory.java @@ -0,0 +1,101 @@ +package growthcraft.milk.compat.jei.category; + +import com.mojang.blaze3d.vertex.PoseStack; + +import growthcraft.lib.utils.TextureHelper; +import growthcraft.milk.compat.jei.JEIGrowthcraftMilkModPlugin; +import growthcraft.milk.init.GrowthcraftMilkBlocks; +import growthcraft.milk.recipe.ChurnRecipe; +import growthcraft.milk.shared.Reference; +import mezz.jei.api.constants.VanillaTypes; +import mezz.jei.api.gui.builder.IRecipeLayoutBuilder; +import mezz.jei.api.gui.drawable.IDrawable; +import mezz.jei.api.gui.ingredient.IRecipeSlotsView; +import mezz.jei.api.helpers.IGuiHelper; +import mezz.jei.api.recipe.IFocusGroup; +import mezz.jei.api.recipe.RecipeIngredientRole; +import mezz.jei.api.recipe.RecipeType; +import mezz.jei.api.recipe.category.IRecipeCategory; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.Font; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.FormattedText; +import net.minecraft.network.chat.TranslatableComponent; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.ItemStack; + +public class ChurnRecipeCategory implements IRecipeCategory { + + public static final ResourceLocation UID = new ResourceLocation(Reference.MODID, Reference.UnlocalizedName.CHURN); + + private static final ResourceLocation TEXTURE = TextureHelper.getTextureGui(Reference.MODID, Reference.UnlocalizedName.CHURN); + + private final IDrawable background; + private final IDrawable icon; + + public ChurnRecipeCategory(IGuiHelper guiHelper) { + this.background = guiHelper.createDrawable( + TEXTURE, 10, 10, 160, 70 + ); + + this.icon = guiHelper.createDrawableIngredient( + VanillaTypes.ITEM_STACK, + new ItemStack(GrowthcraftMilkBlocks.CHURN.get()) + ); + } + + @Override + public RecipeType getRecipeType() { + return JEIGrowthcraftMilkModPlugin.CHURN_RECIPE_TYPE; + } + + @Override + public Component getTitle() { + return new TranslatableComponent("jei.growthcraft_milk.category.churn"); + } + + @Override + public IDrawable getBackground() { + return this.background; + } + + @Override + public IDrawable getIcon() { + return this.icon; + } + + @Override + public void setRecipe(IRecipeLayoutBuilder builder, ChurnRecipe recipe, IFocusGroup focuses) { + builder.addSlot(RecipeIngredientRole.INPUT, 55, 8) + .setFluidRenderer(4000, true, 8, 52) + .addFluidStack(recipe.getInputFluidStack().getFluid(), recipe.getInputFluidStack().getAmount()); + + builder.addSlot(RecipeIngredientRole.OUTPUT, 84, 25) + .addItemStack(recipe.getResultItemStack()); + + builder.addSlot(RecipeIngredientRole.OUTPUT, 64, 8) + .setFluidRenderer(4000, true, 7, 52) + .addFluidStack(recipe.getOutputFluidStack().getFluid(), recipe.getOutputFluidStack().getAmount()); + } + + @Override + public void draw(ChurnRecipe recipe, IRecipeSlotsView recipeSlotsView, PoseStack stack, double mouseX, double mouseY) { + IRecipeCategory.super.draw(recipe, recipeSlotsView, stack, mouseX, mouseY); + Font font = Minecraft.getInstance().font; + + Float s = 0.9F; + stack.scale(s, s, s); + + font.draw(stack, FormattedText.of("Toggle plunge " + recipe.getPlungesNeeded()+ " times.").getString(), 0, 70, 0x404040); + } + + @Override + public Class getRecipeClass() { + return ChurnRecipe.class; + } + + @Override + public ResourceLocation getUid() { + return UID; + } +} diff --git a/src/main/java/growthcraft/milk/compat/jei/category/MixingVatRecipeFluidCategory.java b/src/main/java/growthcraft/milk/compat/jei/category/MixingVatRecipeFluidCategory.java new file mode 100644 index 0000000..83b9ab7 --- /dev/null +++ b/src/main/java/growthcraft/milk/compat/jei/category/MixingVatRecipeFluidCategory.java @@ -0,0 +1,134 @@ +package growthcraft.milk.compat.jei.category; + +import org.jetbrains.annotations.NotNull; + +import com.mojang.blaze3d.vertex.PoseStack; + +import growthcraft.lib.utils.TextureHelper; +import growthcraft.lib.utils.TickUtils; +import growthcraft.milk.compat.jei.JEIGrowthcraftMilkModPlugin; +import growthcraft.milk.init.GrowthcraftMilkBlocks; +import growthcraft.milk.recipe.MixingVatFluidRecipe; +import growthcraft.milk.shared.Reference; +import mezz.jei.api.constants.VanillaTypes; +import mezz.jei.api.gui.builder.IRecipeLayoutBuilder; +import mezz.jei.api.gui.drawable.IDrawable; +import mezz.jei.api.gui.drawable.IDrawableStatic; +import mezz.jei.api.gui.ingredient.IRecipeSlotsView; +import mezz.jei.api.helpers.IGuiHelper; +import mezz.jei.api.recipe.IFocusGroup; +import mezz.jei.api.recipe.RecipeIngredientRole; +import mezz.jei.api.recipe.RecipeType; +import mezz.jei.api.recipe.category.IRecipeCategory; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.Font; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.FormattedText; +import net.minecraft.network.chat.TranslatableComponent; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.ItemStack; + +public class MixingVatRecipeFluidCategory implements IRecipeCategory { + + public static final ResourceLocation UID = new ResourceLocation(Reference.MODID, Reference.UnlocalizedName.MIXING_VAT_FLUID_RECIPE); + + private static final ResourceLocation TEXTURE = TextureHelper.getTextureGui(Reference.MODID, Reference.UnlocalizedName.MIXING_VAT); + + private final IDrawable background; + private final IDrawable icon; + + private final IDrawableStatic overlayHeated; + + public MixingVatRecipeFluidCategory(IGuiHelper guiHelper) { + this.background = guiHelper.createDrawable( + TEXTURE, 10, 10, 160, 70 + ); + + this.icon = guiHelper.createDrawableIngredient( + VanillaTypes.ITEM_STACK, + new ItemStack(GrowthcraftMilkBlocks.MIXING_VAT.get()) + ); + + // Heated Overlay + overlayHeated = guiHelper.createDrawable( + TEXTURE, 176, 28, 12, 13 + ); + } + + @Override + public @NotNull RecipeType getRecipeType() { + return JEIGrowthcraftMilkModPlugin.MIXING_VAT_FLUID_RECIPE_TYPE; + } + + @Override + public @NotNull Component getTitle() { + return new TranslatableComponent("jei.growthcraft_milk.category.mixing_vat"); + } + + @Override + public @NotNull IDrawable getBackground() { + return this.background; + } + + @Override + public @NotNull IDrawable getIcon() { + return this.icon; + } + + @Override + public void setRecipe(@NotNull IRecipeLayoutBuilder builder, MixingVatFluidRecipe recipe, @NotNull IFocusGroup focuses) { + + int ingredientCount = recipe.getIngredientList().size(); + + // Input Inventory + for(int i = 0; i < ingredientCount; i++) { + builder.addSlot(RecipeIngredientRole.INPUT, 61, 8 + ( i * 16)) + .addItemStack(recipe.getIngredientList().get(i)); + } + + // Fluid Tank 0 + builder.addSlot(RecipeIngredientRole.INPUT, 39, 8) + .setFluidRenderer(1000, true, 8, 9) + .addFluidStack(recipe.getReagentFluidStack().getFluid(), recipe.getReagentFluidStack().getAmount()); + builder.addSlot(RecipeIngredientRole.OUTPUT, 48, 8) + .setFluidRenderer(1000, true, 7, 9) + .addFluidStack(recipe.getWasteFluidStack().getFluid(), recipe.getWasteFluidStack().getAmount()); + + // Fluid Tank 1 + builder.addSlot(RecipeIngredientRole.INPUT, 39, 22) + .setFluidRenderer(4000, true, 8, 38) + .addFluidStack(recipe.getInputFluidStack().getFluid(), recipe.getInputFluidStack().getAmount()); + + builder.addSlot(RecipeIngredientRole.OUTPUT, 48, 22) + .setFluidRenderer(4000, true, 7, 38) + .addFluidStack(recipe.getOutputFluidStack().getFluid(), recipe.getOutputFluidStack().getAmount()); + + // Output Inventory (Not needed for Fluid recipe. + + if(!recipe.getActivationTool().isEmpty()) { + builder.addSlot(RecipeIngredientRole.OUTPUT, 0, 0) + .addItemStack(recipe.getActivationTool()); + } + + } + + @Override + public void draw(@NotNull MixingVatFluidRecipe recipe, @NotNull IRecipeSlotsView recipeSlotsView, @NotNull PoseStack stack, double mouseX, double mouseY) { + IRecipeCategory.super.draw(recipe, recipeSlotsView, stack, mouseX, mouseY); + Font font = Minecraft.getInstance().font; + + overlayHeated.draw(stack, 89, 48); + + font.drawWordWrap(FormattedText.of("Mixing Time " + TickUtils.toHoursMinutesSeconds(recipe.getProcessingTime())), 160, 181, 170, 0x404040); + } + + @Override + public Class getRecipeClass() { + return MixingVatFluidRecipe.class; + } + + @Override + public ResourceLocation getUid() { + return UID; + } +} diff --git a/src/main/java/growthcraft/milk/compat/jei/category/MixingVatRecipeItemCategory.java b/src/main/java/growthcraft/milk/compat/jei/category/MixingVatRecipeItemCategory.java new file mode 100644 index 0000000..87e89fa --- /dev/null +++ b/src/main/java/growthcraft/milk/compat/jei/category/MixingVatRecipeItemCategory.java @@ -0,0 +1,124 @@ +package growthcraft.milk.compat.jei.category; + +import org.jetbrains.annotations.NotNull; + +import com.mojang.blaze3d.vertex.PoseStack; + +import growthcraft.lib.utils.TextureHelper; +import growthcraft.lib.utils.TickUtils; +import growthcraft.milk.compat.jei.JEIGrowthcraftMilkModPlugin; +import growthcraft.milk.init.GrowthcraftMilkBlocks; +import growthcraft.milk.recipe.MixingVatItemRecipe; +import growthcraft.milk.shared.Reference; +import mezz.jei.api.constants.VanillaTypes; +import mezz.jei.api.gui.builder.IRecipeLayoutBuilder; +import mezz.jei.api.gui.drawable.IDrawable; +import mezz.jei.api.gui.drawable.IDrawableStatic; +import mezz.jei.api.gui.ingredient.IRecipeSlotsView; +import mezz.jei.api.helpers.IGuiHelper; +import mezz.jei.api.recipe.IFocusGroup; +import mezz.jei.api.recipe.RecipeIngredientRole; +import mezz.jei.api.recipe.RecipeType; +import mezz.jei.api.recipe.category.IRecipeCategory; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.Font; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.FormattedText; +import net.minecraft.network.chat.TranslatableComponent; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.ItemStack; + +public class MixingVatRecipeItemCategory implements IRecipeCategory { + + public static final ResourceLocation UID = new ResourceLocation(Reference.MODID, Reference.UnlocalizedName.MIXING_VAT_ITEM_RECIPE); + + private static final ResourceLocation TEXTURE = TextureHelper.getTextureGui(Reference.MODID, Reference.UnlocalizedName.MIXING_VAT); + + private final IDrawable background; + private final IDrawable icon; + + private final IDrawableStatic overlayHeated; + + public MixingVatRecipeItemCategory(IGuiHelper guiHelper) { + this.background = guiHelper.createDrawable( + TEXTURE, 10, 10, 160, 70 + ); + + this.icon = guiHelper.createDrawableIngredient( + VanillaTypes.ITEM_STACK, + new ItemStack(GrowthcraftMilkBlocks.MIXING_VAT.get()) + ); + + // Heated Overlay + overlayHeated = guiHelper.createDrawable( + TEXTURE, 176, 28, 12, 13 + ); + } + + @Override + public @NotNull RecipeType getRecipeType() { + return JEIGrowthcraftMilkModPlugin.MIXING_VAT_ITEM_RECIPE_TYPE; + } + + @Override + public @NotNull Component getTitle() { + return new TranslatableComponent("jei.growthcraft_milk.category.mixing_vat"); + } + + @Override + public @NotNull IDrawable getBackground() { + return this.background; + } + + @Override + public @NotNull IDrawable getIcon() { + return this.icon; + } + + @Override + public void setRecipe(@NotNull IRecipeLayoutBuilder builder, MixingVatItemRecipe recipe, @NotNull IFocusGroup focuses) { + + int ingredientCount = recipe.getIngredientList().size(); + + // Input Inventory + for (int i = 0; i < ingredientCount; i++) { + builder.addSlot(RecipeIngredientRole.INPUT, 61, 8 + (i * 18)) + .addItemStack(recipe.getIngredientList().get(i)); + } + + // Fluid Tank 1 + builder.addSlot(RecipeIngredientRole.INPUT, 39, 22) + .setFluidRenderer(4000, true, 16, 38) + .addFluidStack(recipe.getInputFluidStack().getFluid(), recipe.getInputFluidStack().getAmount()); + + // Output Inventory (Not needed for Fluid recipe. + builder.addSlot(RecipeIngredientRole.OUTPUT, 114, 8) + .addItemStack(recipe.getResultItemStack()); + + if (!recipe.getActivationTool().isEmpty()) { + builder.addSlot(RecipeIngredientRole.OUTPUT, 0, 0) + .addItemStack(recipe.getActivationTool()); + } + + } + + @Override + public void draw(@NotNull MixingVatItemRecipe recipe, @NotNull IRecipeSlotsView recipeSlotsView, @NotNull PoseStack stack, double mouseX, double mouseY) { + IRecipeCategory.super.draw(recipe, recipeSlotsView, stack, mouseX, mouseY); + Font font = Minecraft.getInstance().font; + + overlayHeated.draw(stack, 89, 48); + + font.drawWordWrap(FormattedText.of("Mixing Time " + TickUtils.toHoursMinutesSeconds(recipe.getProcessingTime())), 160, 181, 170, 0x404040); + } + + @Override + public Class getRecipeClass() { + return MixingVatItemRecipe.class; + } + + @Override + public ResourceLocation getUid() { + return UID; + } +} diff --git a/src/main/java/growthcraft/milk/compat/jei/category/PancheonRecipeCategory.java b/src/main/java/growthcraft/milk/compat/jei/category/PancheonRecipeCategory.java new file mode 100644 index 0000000..54e78a2 --- /dev/null +++ b/src/main/java/growthcraft/milk/compat/jei/category/PancheonRecipeCategory.java @@ -0,0 +1,99 @@ +package growthcraft.milk.compat.jei.category; + +import com.mojang.blaze3d.vertex.PoseStack; + +import growthcraft.lib.utils.TextureHelper; +import growthcraft.lib.utils.TickUtils; +import growthcraft.milk.compat.jei.JEIGrowthcraftMilkModPlugin; +import growthcraft.milk.init.GrowthcraftMilkBlocks; +import growthcraft.milk.recipe.PancheonRecipe; +import growthcraft.milk.shared.Reference; +import mezz.jei.api.constants.VanillaTypes; +import mezz.jei.api.gui.builder.IRecipeLayoutBuilder; +import mezz.jei.api.gui.drawable.IDrawable; +import mezz.jei.api.gui.ingredient.IRecipeSlotsView; +import mezz.jei.api.helpers.IGuiHelper; +import mezz.jei.api.recipe.IFocusGroup; +import mezz.jei.api.recipe.RecipeIngredientRole; +import mezz.jei.api.recipe.RecipeType; +import mezz.jei.api.recipe.category.IRecipeCategory; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.Font; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.FormattedText; +import net.minecraft.network.chat.TranslatableComponent; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.ItemStack; + +public class PancheonRecipeCategory implements IRecipeCategory { + + public static final ResourceLocation UID = new ResourceLocation(Reference.MODID, Reference.UnlocalizedName.PANCHEON_RECIPE); + + private static final ResourceLocation TEXTURE = TextureHelper.getTextureGui(Reference.MODID, Reference.UnlocalizedName.PANCHEON); + + private final IDrawable background; + private final IDrawable icon; + + public PancheonRecipeCategory(IGuiHelper guiHelper) { + this.background = guiHelper.createDrawable( + TEXTURE, 10, 10, 160, 70 + ); + + this.icon = guiHelper.createDrawableIngredient( + VanillaTypes.ITEM_STACK, + new ItemStack(GrowthcraftMilkBlocks.PANCHEON.get()) + ); + } + + @Override + public RecipeType getRecipeType() { + return JEIGrowthcraftMilkModPlugin.PANCHEON_RECIPE_TYPE; + } + + @Override + public Component getTitle() { + return new TranslatableComponent("jei.growthcraft_milk.category.pancheon"); + } + + @Override + public IDrawable getBackground() { + return this.background; + } + + @Override + public IDrawable getIcon() { + return this.icon; + } + + @Override + public void setRecipe(IRecipeLayoutBuilder builder, PancheonRecipe recipe, IFocusGroup focuses) { + + builder.addSlot(RecipeIngredientRole.INPUT, 52, 8) + .setFluidRenderer(2000, true, 16, 52) + .addFluidStack(recipe.getFluidStack("input").getFluid(), recipe.getFluidStack("input").getAmount()); + builder.addSlot(RecipeIngredientRole.OUTPUT, 88, 8) + .setFluidRenderer(1000, true, 16, 23) + .addFluidStack(recipe.getFluidStack("output0").getFluid(), recipe.getFluidStack("output0").getAmount()); + builder.addSlot(RecipeIngredientRole.OUTPUT, 88, 37) + .setFluidRenderer(1000, true, 16, 23) + .addFluidStack(recipe.getFluidStack("output1").getFluid(), recipe.getFluidStack("output1").getAmount()); + } + + @Override + public void draw(PancheonRecipe recipe, IRecipeSlotsView recipeSlotsView, PoseStack stack, double mouseX, double mouseY) { + IRecipeCategory.super.draw(recipe, recipeSlotsView, stack, mouseX, mouseY); + Font font = Minecraft.getInstance().font; + + font.drawWordWrap(FormattedText.of("Processing Time " + TickUtils.toHoursMinutesSeconds(recipe.getRecipeProcessingTime())), 160, 181, 170, 0x404040); + } + + @Override + public Class getRecipeClass() { + return PancheonRecipe.class; + } + + @Override + public ResourceLocation getUid() { + return UID; + } +} diff --git a/src/main/java/growthcraft/milk/init/GrowthcraftMilkBlockEntities.java b/src/main/java/growthcraft/milk/init/GrowthcraftMilkBlockEntities.java new file mode 100644 index 0000000..c10e576 --- /dev/null +++ b/src/main/java/growthcraft/milk/init/GrowthcraftMilkBlockEntities.java @@ -0,0 +1,69 @@ +package growthcraft.milk.init; + +import growthcraft.milk.block.entity.*; +import growthcraft.milk.shared.Reference; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraftforge.registries.DeferredRegister; +import net.minecraftforge.registries.ForgeRegistries; +import net.minecraftforge.registries.RegistryObject; + +public class GrowthcraftMilkBlockEntities { + + public static final DeferredRegister> BLOCK_ENTITIES = DeferredRegister.create( + ForgeRegistries.BLOCK_ENTITIES, Reference.MODID + ); + + public static final RegistryObject> CHEESE_PRESS_BLOCK_ENTITY = BLOCK_ENTITIES.register( + Reference.UnlocalizedName.CHEESE_PRESS, + () -> BlockEntityType.Builder.of( + CheesePressBlockEntity::new, + GrowthcraftMilkBlocks.CHEESE_PRESS.get() + ).build(null) + ); + + public static final RegistryObject> CHEESE_WHEEL_BLOCK_ENTITY = BLOCK_ENTITIES.register( + Reference.UnlocalizedName.CHEESE_WHEEL_TILE_ENTITY, + () -> BlockEntityType.Builder.of( + CheeseWheelBlockEntity::new, + GrowthcraftMilkBlocks.APPENZELLER_CHEESE.get(), + GrowthcraftMilkBlocks.ASIAGO_CHEESE.get(), + GrowthcraftMilkBlocks.CASU_MARZU_CHEESE.get(), + GrowthcraftMilkBlocks.CHEDDAR_CHEESE.get(), + GrowthcraftMilkBlocks.EMMENTALER_CHEESE.get(), + GrowthcraftMilkBlocks.GORGONZOLA_CHEESE.get(), + GrowthcraftMilkBlocks.GOUDA_CHEESE.get(), + GrowthcraftMilkBlocks.MONTEREY_CHEESE.get(), + GrowthcraftMilkBlocks.PARMESAN_CHEESE.get(), + GrowthcraftMilkBlocks.PROVOLONE_CHEESE.get() + ).build(null) + ); + + public static final RegistryObject> CHURN_BLOCK_ENTITY = BLOCK_ENTITIES.register( + Reference.UnlocalizedName.CHURN, + () -> BlockEntityType.Builder.of( + ChurnBlockEntity::new, + GrowthcraftMilkBlocks.CHURN.get() + ).build(null) + ); + + public static final RegistryObject> MIXING_VAT_BLOCK_ENTITY = BLOCK_ENTITIES.register( + Reference.UnlocalizedName.MIXING_VAT, + () -> BlockEntityType.Builder.of( + MixingVatBlockEntity::new, + GrowthcraftMilkBlocks.MIXING_VAT.get() + ).build(null) + ); + + public static final RegistryObject> PANCHEON_BLOCK_ENTITY = BLOCK_ENTITIES.register( + Reference.UnlocalizedName.PANCHEON, + () -> BlockEntityType.Builder.of( + PancheonBlockEntity::new, + GrowthcraftMilkBlocks.PANCHEON.get() + ).build(null) + ); + + public GrowthcraftMilkBlockEntities() { + /* Disable automatic default public constructor */ + } + +} diff --git a/src/main/java/growthcraft/milk/init/GrowthcraftMilkBlocks.java b/src/main/java/growthcraft/milk/init/GrowthcraftMilkBlocks.java new file mode 100644 index 0000000..7fb49a6 --- /dev/null +++ b/src/main/java/growthcraft/milk/init/GrowthcraftMilkBlocks.java @@ -0,0 +1,182 @@ +package growthcraft.milk.init; + +import growthcraft.lib.utils.CheeseUtils; +import growthcraft.milk.block.*; +import growthcraft.milk.shared.Reference; +import net.minecraft.world.item.BlockItem; +import net.minecraft.world.item.Item; +import net.minecraft.world.level.block.Block; +import net.minecraftforge.registries.DeferredRegister; +import net.minecraftforge.registries.ForgeRegistries; +import net.minecraftforge.registries.RegistryObject; + +import java.util.function.Supplier; + +public class GrowthcraftMilkBlocks { + public static final DeferredRegister BLOCKS = DeferredRegister.create( + ForgeRegistries.BLOCKS, Reference.MODID + ); + + public static final RegistryObject CHEESE_PRESS = registerBlock( + Reference.UnlocalizedName.CHEESE_PRESS, + CheesePressBlock::new + ); + + public static final RegistryObject CHURN = registerBlock( + Reference.UnlocalizedName.CHURN, + ChurnBlock::new + ); + + public static final RegistryObject MIXING_VAT = registerBlock( + Reference.UnlocalizedName.MIXING_VAT, + MixingVatBlock::new + ); + + public static final RegistryObject PANCHEON = registerBlock( + Reference.UnlocalizedName.PANCHEON, + PancheonBlock::new + ); + + public static final RegistryObject THISTLE_CROP = registerBlock( + Reference.UnlocalizedName.THISTLE_CROP, + ThistleCropBlock::new, + true + ); + + public static final RegistryObject APPENZELLER_CHEESE = registerBlock( + CheeseUtils.getCheeseNames(Reference.UnlocalizedName.APPENZELLER).get(CheeseUtils.CHEESE), + () -> new CheeseWheelBlock(Reference.ItemColor.APPENZELLER_CHEESE.getColor()) + ); + + public static final RegistryObject ASIAGO_CHEESE = registerBlock( + CheeseUtils.getCheeseNames(Reference.UnlocalizedName.ASIAGO).get(CheeseUtils.CHEESE), + () -> new CheeseWheelBlock(Reference.ItemColor.ASIAGO_CHEESE.getColor()) + ); + + public static final RegistryObject CASU_MARZU_CHEESE = registerBlock( + CheeseUtils.getCheeseNames(Reference.UnlocalizedName.CASU_MARZU).get(CheeseUtils.CHEESE), + () -> new CheeseWheelBlock(Reference.ItemColor.CASU_MARZU_CHEESE.getColor()) + ); + + public static final RegistryObject CHEDDAR_CHEESE = registerBlock( + CheeseUtils.getCheeseNames(Reference.UnlocalizedName.CHEDDAR).get(CheeseUtils.CHEESE), + () -> new CheeseWheelBlock(Reference.ItemColor.CHEDDAR_CHEESE.getColor()) + ); + + public static final RegistryObject EMMENTALER_CHEESE = registerBlock( + CheeseUtils.getCheeseNames(Reference.UnlocalizedName.EMMENTALER).get(CheeseUtils.CHEESE), + () -> new CheeseWheelBlock(Reference.ItemColor.EMMENTALER_CHEESE.getColor()) + ); + + public static final RegistryObject GORGONZOLA_CHEESE = registerBlock( + CheeseUtils.getCheeseNames(Reference.UnlocalizedName.GORGONZOLA).get(CheeseUtils.CHEESE), + () -> new CheeseWheelBlock(Reference.ItemColor.GORGONZOLA_CHEESE.getColor()) + ); + + public static final RegistryObject GOUDA_CHEESE = registerBlock( + CheeseUtils.getCheeseNames(Reference.UnlocalizedName.GOUDA).get(CheeseUtils.CHEESE), + () -> new CheeseWheelBlock(Reference.ItemColor.GOUDA_CHEESE.getColor()) + ); + + public static final RegistryObject MONTEREY_CHEESE = registerBlock( + CheeseUtils.getCheeseNames(Reference.UnlocalizedName.MONTEREY).get(CheeseUtils.CHEESE), + () -> new CheeseWheelBlock(Reference.ItemColor.MONTEREY_CHEESE.getColor()) + ); + + public static final RegistryObject PARMESAN_CHEESE = registerBlock( + CheeseUtils.getCheeseNames(Reference.UnlocalizedName.PARMESAN).get(CheeseUtils.CHEESE), + () -> new CheeseWheelBlock(Reference.ItemColor.PARMESAN_CHEESE.getColor()) + ); + + public static final RegistryObject PROVOLONE_CHEESE = registerBlock( + CheeseUtils.getCheeseNames(Reference.UnlocalizedName.PROVOLONE).get(CheeseUtils.CHEESE), + () -> new CheeseWheelBlock(Reference.ItemColor.PROVOLONE_CHEESE.getColor()) + ); + + public static final RegistryObject APPENZELLER_CHEESE_CURDS = registerBlock( + CheeseUtils.getCheeseNames(Reference.UnlocalizedName.APPENZELLER).get(CheeseUtils.CURDS), + () -> new CheeseCurdBlock(Reference.ItemColor.APPENZELLER_CHEESE.getColor()) + ); + + public static final RegistryObject ASIAGO_CHEESE_CURDS = registerBlock( + CheeseUtils.getCheeseNames(Reference.UnlocalizedName.ASIAGO).get(CheeseUtils.CURDS), + () -> new CheeseCurdBlock(Reference.ItemColor.ASIAGO_CHEESE.getColor()) + ); + + public static final RegistryObject CASU_MARZU_CHEESE_CURDS = registerBlock( + CheeseUtils.getCheeseNames(Reference.UnlocalizedName.CASU_MARZU).get(CheeseUtils.CURDS), + () -> new CheeseCurdBlock(Reference.ItemColor.CASU_MARZU_CHEESE.getColor()) + ); + + public static final RegistryObject CHEDDAR_CHEESE_CURDS = registerBlock( + CheeseUtils.getCheeseNames(Reference.UnlocalizedName.CHEDDAR).get(CheeseUtils.CURDS), + () -> new CheeseCurdBlock(Reference.ItemColor.CHEDDAR_CHEESE.getColor()) + ); + + public static final RegistryObject EMMENTALER_CHEESE_CURDS = registerBlock( + CheeseUtils.getCheeseNames(Reference.UnlocalizedName.EMMENTALER).get(CheeseUtils.CURDS), + () -> new CheeseCurdBlock(Reference.ItemColor.EMMENTALER_CHEESE.getColor()) + ); + + public static final RegistryObject GORGONZOLA_CHEESE_CURDS = registerBlock( + CheeseUtils.getCheeseNames(Reference.UnlocalizedName.GORGONZOLA).get(CheeseUtils.CURDS), + () -> new CheeseCurdBlock(Reference.ItemColor.GORGONZOLA_CHEESE.getColor()) + ); + + public static final RegistryObject GOUDA_CHEESE_CURDS = registerBlock( + CheeseUtils.getCheeseNames(Reference.UnlocalizedName.GOUDA).get(CheeseUtils.CURDS), + () -> new CheeseCurdBlock(Reference.ItemColor.GOUDA_CHEESE.getColor()) + ); + + public static final RegistryObject MONTEREY_CHEESE_CURDS = registerBlock( + CheeseUtils.getCheeseNames(Reference.UnlocalizedName.MONTEREY).get(CheeseUtils.CURDS), + () -> new CheeseCurdBlock(Reference.ItemColor.MONTEREY_CHEESE.getColor()) + ); + + public static final RegistryObject PARMESAN_CHEESE_CURDS = registerBlock( + CheeseUtils.getCheeseNames(Reference.UnlocalizedName.PARMESAN).get(CheeseUtils.CURDS), + () -> new CheeseCurdBlock(Reference.ItemColor.PARMESAN_CHEESE.getColor()) + ); + + public static final RegistryObject RICOTTA_CHEESE_CURDS = registerBlock( + CheeseUtils.getCheeseNames(Reference.UnlocalizedName.RICOTTA).get(CheeseUtils.CURDS), + () -> new CheeseCurdBlock(Reference.ItemColor.RICOTTA_CHEESE.getColor()) + ); + + public static final RegistryObject PROVOLONE_CHEESE_CURDS = registerBlock( + CheeseUtils.getCheeseNames(Reference.UnlocalizedName.PROVOLONE).get(CheeseUtils.CURDS), + () -> new CheeseCurdBlock(Reference.ItemColor.PROVOLONE_CHEESE.getColor()) + ); + + // TODO: Cheese Wheels + + private static RegistryObject registerBlock(String name, Supplier block) { + return registerBlock(name, block, false); + } + + private static RegistryObject registerBlock(String name, Supplier block, boolean excludeBlockItemRegistry) { + RegistryObject registryObject = BLOCKS.register(name, block); + if (!excludeBlockItemRegistry) { + registerBlockItem(name, registryObject); + } + return registryObject; + } + + private static void registerBlockItem(String name, RegistryObject blockRegistryObject) { + GrowthcraftMilkItems.ITEMS.register( + name, + () -> new BlockItem(blockRegistryObject.get(), getDefaultItemProperties()) + ); + } + + private static Item.Properties getDefaultItemProperties() { + Item.Properties properties = new Item.Properties().tab(growthcraft.core.shared.Reference.ITEM_GROUP); + return properties; + } + + private GrowthcraftMilkBlocks() { + /* Disable default public constructor */ + } + + +} diff --git a/src/main/java/growthcraft/milk/init/GrowthcraftMilkFluids.java b/src/main/java/growthcraft/milk/init/GrowthcraftMilkFluids.java new file mode 100644 index 0000000..ce25e62 --- /dev/null +++ b/src/main/java/growthcraft/milk/init/GrowthcraftMilkFluids.java @@ -0,0 +1,383 @@ +package growthcraft.milk.init; + +import growthcraft.lib.utils.FluidUtils; +import growthcraft.milk.shared.Reference; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.world.level.block.LiquidBlock; +import net.minecraft.world.level.block.state.BlockBehaviour; +import net.minecraft.world.level.material.FlowingFluid; +import net.minecraft.world.level.material.Fluid; +import net.minecraft.world.level.material.Material; +import net.minecraftforge.fluids.FluidAttributes; +import net.minecraftforge.fluids.ForgeFlowingFluid; +import net.minecraftforge.registries.DeferredRegister; +import net.minecraftforge.registries.ForgeRegistries; +import net.minecraftforge.registries.RegistryObject; + +public class GrowthcraftMilkFluids { + public static final DeferredRegister FLUIDS = DeferredRegister.create( + ForgeRegistries.FLUIDS, Reference.MODID + ); + +// public static final DeferredRegister FLUID_TYPES = DeferredRegister.create( +// ForgeRegistries.Keys.FLUID_TYPES, Reference.MODID +// ); + + public static final RegistryObject BUTTER_MILK + = FLUIDS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.BUTTER_MILK).get(FluidUtils.STILL), () -> new ForgeFlowingFluid.Source(GrowthcraftMilkFluids.BUTTER_MILK_PROPERTIES)); + + public static final RegistryObject BUTTER_MILK_FLOWING + = FLUIDS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.BUTTER_MILK).get(FluidUtils.FLOWING), () -> new ForgeFlowingFluid.Flowing(GrowthcraftMilkFluids.BUTTER_MILK_PROPERTIES)); + + + public static final ForgeFlowingFluid.Properties BUTTER_MILK_PROPERTIES = new ForgeFlowingFluid.Properties( + () -> BUTTER_MILK.get(), () -> BUTTER_MILK_FLOWING.get(), FluidAttributes.builder(FluidUtils.FluidResource.STILL, FluidUtils.FluidResource.FLOWING) + .sound(SoundEvents.BUCKET_EMPTY).overlay(FluidUtils.FluidResource.OVERLAY) + .color(Reference.FluidColor.BUTTER_MILK.toIntValue())).slopeFindDistance(2).levelDecreasePerBlock(2) + .block(() -> GrowthcraftMilkFluids.BUTTER_MILK_FLUID_BLOCK.get()).bucket(() -> GrowthcraftMilkItems.BUTTER_MILK_BUCKET.get()); + + public static final RegistryObject BUTTER_MILK_FLUID_BLOCK = GrowthcraftMilkBlocks.BLOCKS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.BUTTER_MILK).get(FluidUtils.STILL), + () -> new LiquidBlock(() -> GrowthcraftMilkFluids.BUTTER_MILK.get(), BlockBehaviour.Properties.of(Material.WATER) + .noCollission().strength(100f).noDrops())); + + public static final RegistryObject CHEESE_BASE + = FLUIDS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.CHEESE_BASE).get(FluidUtils.STILL), () -> new ForgeFlowingFluid.Source(GrowthcraftMilkFluids.CHEESE_BASE_PROPERTIES)); + + public static final RegistryObject CHEESE_BASE_FLOWING + = FLUIDS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.CHEESE_BASE).get(FluidUtils.FLOWING), () -> new ForgeFlowingFluid.Flowing(GrowthcraftMilkFluids.CHEESE_BASE_PROPERTIES)); + + + public static final ForgeFlowingFluid.Properties CHEESE_BASE_PROPERTIES = new ForgeFlowingFluid.Properties( + () -> CHEESE_BASE.get(), () -> CHEESE_BASE_FLOWING.get(), FluidAttributes.builder(FluidUtils.FluidResource.STILL, FluidUtils.FluidResource.FLOWING) + .sound(SoundEvents.BUCKET_EMPTY).overlay(FluidUtils.FluidResource.OVERLAY) + .color(Reference.FluidColor.CHEESE_BASE.toIntValue())).slopeFindDistance(2).levelDecreasePerBlock(2) + .block(() -> GrowthcraftMilkFluids.CHEESE_BASE_FLUID_BLOCK.get()).bucket(() -> GrowthcraftMilkItems.CHEESE_BASE_BUCKET.get()); + + public static final RegistryObject CHEESE_BASE_FLUID_BLOCK = GrowthcraftMilkBlocks.BLOCKS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.CHEESE_BASE).get(FluidUtils.STILL), + () -> new LiquidBlock(() -> GrowthcraftMilkFluids.CHEESE_BASE.get(), BlockBehaviour.Properties.of(Material.WATER) + .noCollission().strength(100f).noDrops())); + + + public static final RegistryObject CONDENSED_MILK + = FLUIDS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.CONDENSED_MILK).get(FluidUtils.STILL), () -> new ForgeFlowingFluid.Source(GrowthcraftMilkFluids.CONDENSED_MILK_PROPERTIES)); + + public static final RegistryObject CONDENSED_MILK_FLOWING + = FLUIDS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.CONDENSED_MILK).get(FluidUtils.FLOWING), () -> new ForgeFlowingFluid.Flowing(GrowthcraftMilkFluids.CONDENSED_MILK_PROPERTIES)); + + + public static final ForgeFlowingFluid.Properties CONDENSED_MILK_PROPERTIES = new ForgeFlowingFluid.Properties( + () -> CONDENSED_MILK.get(), () -> CONDENSED_MILK_FLOWING.get(), FluidAttributes.builder(FluidUtils.FluidResource.STILL, FluidUtils.FluidResource.FLOWING) + .sound(SoundEvents.BUCKET_EMPTY).overlay(FluidUtils.FluidResource.OVERLAY) + .color(Reference.FluidColor.CONDENSED_MILK.toIntValue())).slopeFindDistance(2).levelDecreasePerBlock(2) + .block(() -> GrowthcraftMilkFluids.CONDENSED_MILK_FLUID_BLOCK.get()).bucket(() -> GrowthcraftMilkItems.CONDENSED_MILK_BUCKET.get()); + + public static final RegistryObject CONDENSED_MILK_FLUID_BLOCK = GrowthcraftMilkBlocks.BLOCKS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.CONDENSED_MILK).get(FluidUtils.STILL), + () -> new LiquidBlock(() -> GrowthcraftMilkFluids.CONDENSED_MILK.get(), BlockBehaviour.Properties.of(Material.WATER) + .noCollission().strength(100f).noDrops())); + + public static final RegistryObject CREAM + = FLUIDS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.CREAM).get(FluidUtils.STILL), () -> new ForgeFlowingFluid.Source(GrowthcraftMilkFluids.CREAM_PROPERTIES)); + + public static final RegistryObject CREAM_FLOWING + = FLUIDS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.CREAM).get(FluidUtils.FLOWING), () -> new ForgeFlowingFluid.Flowing(GrowthcraftMilkFluids.CREAM_PROPERTIES)); + + + public static final ForgeFlowingFluid.Properties CREAM_PROPERTIES = new ForgeFlowingFluid.Properties( + () -> CREAM.get(), () -> CREAM_FLOWING.get(), FluidAttributes.builder(FluidUtils.FluidResource.STILL, FluidUtils.FluidResource.FLOWING) + .sound(SoundEvents.BUCKET_EMPTY).overlay(FluidUtils.FluidResource.OVERLAY) + .color(Reference.FluidColor.CREAM.toIntValue())).slopeFindDistance(2).levelDecreasePerBlock(2) + .block(() -> GrowthcraftMilkFluids.CREAM_FLUID_BLOCK.get()).bucket(() -> GrowthcraftMilkItems.CREAM_BUCKET.get()); + + public static final RegistryObject CREAM_FLUID_BLOCK = GrowthcraftMilkBlocks.BLOCKS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.CREAM).get(FluidUtils.STILL), + () -> new LiquidBlock(() -> GrowthcraftMilkFluids.CREAM.get(), BlockBehaviour.Properties.of(Material.WATER) + .noCollission().strength(100f).noDrops())); + + public static final RegistryObject CULTURED_MILK + = FLUIDS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.CULTURED_MILK).get(FluidUtils.STILL), () -> new ForgeFlowingFluid.Source(GrowthcraftMilkFluids.CULTURED_MILK_PROPERTIES)); + + public static final RegistryObject CULTURED_MILK_FLOWING + = FLUIDS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.CULTURED_MILK).get(FluidUtils.FLOWING), () -> new ForgeFlowingFluid.Flowing(GrowthcraftMilkFluids.CULTURED_MILK_PROPERTIES)); + + + public static final ForgeFlowingFluid.Properties CULTURED_MILK_PROPERTIES = new ForgeFlowingFluid.Properties( + () -> CULTURED_MILK.get(), () -> CULTURED_MILK_FLOWING.get(), FluidAttributes.builder(FluidUtils.FluidResource.STILL, FluidUtils.FluidResource.FLOWING) + .sound(SoundEvents.BUCKET_EMPTY).overlay(FluidUtils.FluidResource.OVERLAY) + .color(Reference.FluidColor.CULTURED_MILK.toIntValue())).slopeFindDistance(2).levelDecreasePerBlock(2) + .block(() -> GrowthcraftMilkFluids.CULTURED_MILK_FLUID_BLOCK.get()).bucket(() -> GrowthcraftMilkItems.CULTURED_MILK_BUCKET.get()); + + public static final RegistryObject CULTURED_MILK_FLUID_BLOCK = GrowthcraftMilkBlocks.BLOCKS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.CULTURED_MILK).get(FluidUtils.STILL), + () -> new LiquidBlock(() -> GrowthcraftMilkFluids.CULTURED_MILK.get(), BlockBehaviour.Properties.of(Material.WATER) + .noCollission().strength(100f).noDrops())); + + public static final RegistryObject KUMIS + = FLUIDS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.KUMIS).get(FluidUtils.STILL), () -> new ForgeFlowingFluid.Source(GrowthcraftMilkFluids.KUMIS_PROPERTIES)); + + public static final RegistryObject KUMIS_FLOWING + = FLUIDS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.KUMIS).get(FluidUtils.FLOWING), () -> new ForgeFlowingFluid.Flowing(GrowthcraftMilkFluids.KUMIS_PROPERTIES)); + + + public static final ForgeFlowingFluid.Properties KUMIS_PROPERTIES = new ForgeFlowingFluid.Properties( + () -> KUMIS.get(), () -> KUMIS_FLOWING.get(), FluidAttributes.builder(FluidUtils.FluidResource.STILL, FluidUtils.FluidResource.FLOWING) + .sound(SoundEvents.BUCKET_EMPTY).overlay(FluidUtils.FluidResource.OVERLAY) + .color(Reference.FluidColor.KUMIS.toIntValue())).slopeFindDistance(2).levelDecreasePerBlock(2) + .block(() -> GrowthcraftMilkFluids.KUMIS_FLUID_BLOCK.get()).bucket(() -> GrowthcraftMilkItems.KUMIS_BUCKET.get()); + + public static final RegistryObject KUMIS_FLUID_BLOCK = GrowthcraftMilkBlocks.BLOCKS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.KUMIS).get(FluidUtils.STILL), + () -> new LiquidBlock(() -> GrowthcraftMilkFluids.KUMIS.get(), BlockBehaviour.Properties.of(Material.WATER) + .noCollission().strength(100f).noDrops())); + + public static final RegistryObject MILK + = FLUIDS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.MILK).get(FluidUtils.STILL), () -> new ForgeFlowingFluid.Source(GrowthcraftMilkFluids.MILK_PROPERTIES)); + + public static final RegistryObject MILK_FLOWING + = FLUIDS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.MILK).get(FluidUtils.FLOWING), () -> new ForgeFlowingFluid.Flowing(GrowthcraftMilkFluids.MILK_PROPERTIES)); + + + public static final ForgeFlowingFluid.Properties MILK_PROPERTIES = new ForgeFlowingFluid.Properties( + () -> MILK.get(), () -> MILK_FLOWING.get(), FluidAttributes.builder(FluidUtils.FluidResource.STILL, FluidUtils.FluidResource.FLOWING) + .sound(SoundEvents.BUCKET_EMPTY).overlay(FluidUtils.FluidResource.OVERLAY) + .color(Reference.FluidColor.MILK.toIntValue())).slopeFindDistance(2).levelDecreasePerBlock(2) + .block(() -> GrowthcraftMilkFluids.MILK_FLUID_BLOCK.get()).bucket(() -> GrowthcraftMilkItems.MILK_BUCKET.get()); + + public static final RegistryObject MILK_FLUID_BLOCK = GrowthcraftMilkBlocks.BLOCKS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.MILK).get(FluidUtils.STILL), + () -> new LiquidBlock(() -> GrowthcraftMilkFluids.MILK.get(), BlockBehaviour.Properties.of(Material.WATER) + .noCollission().strength(100f).noDrops())); + + public static final RegistryObject RENNET + = FLUIDS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.RENNET).get(FluidUtils.STILL), () -> new ForgeFlowingFluid.Source(GrowthcraftMilkFluids.RENNET_PROPERTIES)); + + public static final RegistryObject RENNET_FLOWING + = FLUIDS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.RENNET).get(FluidUtils.FLOWING), () -> new ForgeFlowingFluid.Flowing(GrowthcraftMilkFluids.RENNET_PROPERTIES)); + + + public static final ForgeFlowingFluid.Properties RENNET_PROPERTIES = new ForgeFlowingFluid.Properties( + () -> RENNET.get(), () -> RENNET_FLOWING.get(), FluidAttributes.builder(FluidUtils.FluidResource.STILL, FluidUtils.FluidResource.FLOWING) + .sound(SoundEvents.BUCKET_EMPTY).overlay(FluidUtils.FluidResource.OVERLAY) + .color(Reference.FluidColor.RENNET.toIntValue())).slopeFindDistance(2).levelDecreasePerBlock(2) + .block(() -> GrowthcraftMilkFluids.RENNET_FLUID_BLOCK.get()).bucket(() -> GrowthcraftMilkItems.RENNET_BUCKET.get()); + + public static final RegistryObject RENNET_FLUID_BLOCK = GrowthcraftMilkBlocks.BLOCKS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.RENNET).get(FluidUtils.STILL), + () -> new LiquidBlock(() -> GrowthcraftMilkFluids.RENNET.get(), BlockBehaviour.Properties.of(Material.WATER) + .noCollission().strength(100f).noDrops())); + + public static final RegistryObject SKIM_MILK + = FLUIDS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.SKIM_MILK).get(FluidUtils.STILL), () -> new ForgeFlowingFluid.Source(GrowthcraftMilkFluids.SKIM_MILK_PROPERTIES)); + + public static final RegistryObject SKIM_MILK_FLOWING + = FLUIDS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.SKIM_MILK).get(FluidUtils.FLOWING), () -> new ForgeFlowingFluid.Flowing(GrowthcraftMilkFluids.SKIM_MILK_PROPERTIES)); + + + public static final ForgeFlowingFluid.Properties SKIM_MILK_PROPERTIES = new ForgeFlowingFluid.Properties( + () -> SKIM_MILK.get(), () -> SKIM_MILK_FLOWING.get(), FluidAttributes.builder(FluidUtils.FluidResource.STILL, FluidUtils.FluidResource.FLOWING) + .sound(SoundEvents.BUCKET_EMPTY).overlay(FluidUtils.FluidResource.OVERLAY) + .color(Reference.FluidColor.SKIM_MILK.toIntValue())).slopeFindDistance(2).levelDecreasePerBlock(2) + .block(() -> GrowthcraftMilkFluids.SKIM_MILK_FLUID_BLOCK.get()).bucket(() -> GrowthcraftMilkItems.SKIM_MILK_BUCKET.get()); + + public static final RegistryObject SKIM_MILK_FLUID_BLOCK = GrowthcraftMilkBlocks.BLOCKS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.SKIM_MILK).get(FluidUtils.STILL), + () -> new LiquidBlock(() -> GrowthcraftMilkFluids.SKIM_MILK.get(), BlockBehaviour.Properties.of(Material.WATER) + .noCollission().strength(100f).noDrops())); + + public static final RegistryObject WHEY + = FLUIDS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.WHEY).get(FluidUtils.STILL), () -> new ForgeFlowingFluid.Source(GrowthcraftMilkFluids.WHEY_PROPERTIES)); + + public static final RegistryObject WHEY_FLOWING + = FLUIDS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.WHEY).get(FluidUtils.FLOWING), () -> new ForgeFlowingFluid.Flowing(GrowthcraftMilkFluids.WHEY_PROPERTIES)); + + + public static final ForgeFlowingFluid.Properties WHEY_PROPERTIES = new ForgeFlowingFluid.Properties( + () -> WHEY.get(), () -> WHEY_FLOWING.get(), FluidAttributes.builder(FluidUtils.FluidResource.STILL, FluidUtils.FluidResource.FLOWING) + .sound(SoundEvents.BUCKET_EMPTY).overlay(FluidUtils.FluidResource.OVERLAY) + .color(Reference.FluidColor.WHEY.toIntValue())).slopeFindDistance(2).levelDecreasePerBlock(2) + .block(() -> GrowthcraftMilkFluids.WHEY_FLUID_BLOCK.get()).bucket(() -> GrowthcraftMilkItems.WHEY_BUCKET.get()); + + public static final RegistryObject WHEY_FLUID_BLOCK = GrowthcraftMilkBlocks.BLOCKS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.WHEY).get(FluidUtils.STILL), + () -> new LiquidBlock(() -> GrowthcraftMilkFluids.WHEY.get(), BlockBehaviour.Properties.of(Material.WATER) + .noCollission().strength(100f).noDrops())); + +// public static final GrowthcraftMilkFluidRegistryContainer BUTTER_MILK = new GrowthcraftMilkFluidRegistryContainer( +// FluidUtils.getFluidNames(Reference.UnlocalizedName.BUTTER_MILK).get(FluidUtils.STILL), +// FluidType.Properties.create().canSwim(true).canDrown(true).canPushEntity(true).supportsBoating(true), +// () -> GrowthcraftMilkFluidRegistryContainer.createExtension( +// new ClientFluidTypeExtensions( +// Reference.MODID, +// FluidUtils.getFluidNames(Reference.UnlocalizedName.BUTTER_MILK).get(FluidUtils.STILL) +// ).tint( +// Reference.FluidColor.BUTTER_MILK.toIntValue() +// ) +// .fogColor( +// Reference.FluidColor.BUTTER_MILK.toFloatValues().get("red"), +// Reference.FluidColor.BUTTER_MILK.toFloatValues().get("green"), +// Reference.FluidColor.BUTTER_MILK.toFloatValues().get("blue") +// ) +// ), +// BlockBehaviour.Properties.copy(Blocks.WATER), +// new Item.Properties().stacksTo(1) +// ); +// +// public static final GrowthcraftMilkFluidRegistryContainer CHEESE_BASE = new GrowthcraftMilkFluidRegistryContainer( +// FluidUtils.getFluidNames(Reference.UnlocalizedName.CHEESE_BASE).get(FluidUtils.STILL), +// FluidType.Properties.create().canSwim(true).canDrown(true).canPushEntity(true).supportsBoating(true), +// () -> GrowthcraftMilkFluidRegistryContainer.createExtension( +// new ClientFluidTypeExtensions( +// Reference.MODID, +// FluidUtils.getFluidNames(Reference.UnlocalizedName.CHEESE_BASE).get(FluidUtils.STILL) +// ).tint(Reference.FluidColor.CHEESE_BASE.toIntValue()) +// .fogColor( +// Reference.FluidColor.CHEESE_BASE.toFloatValues().get("red"), +// Reference.FluidColor.CHEESE_BASE.toFloatValues().get("green"), +// Reference.FluidColor.CHEESE_BASE.toFloatValues().get("blue") +// ) +// ), +// BlockBehaviour.Properties.copy(Blocks.WATER), +// new Item.Properties().stacksTo(1) +// ); +// +// public static final GrowthcraftMilkFluidRegistryContainer CONDENSED_MILK = new GrowthcraftMilkFluidRegistryContainer( +// FluidUtils.getFluidNames(Reference.UnlocalizedName.CONDENSED_MILK).get(FluidUtils.STILL), +// FluidType.Properties.create().canSwim(true).canDrown(true).canPushEntity(true).supportsBoating(true), +// () -> GrowthcraftMilkFluidRegistryContainer.createExtension( +// new ClientFluidTypeExtensions( +// Reference.MODID, +// FluidUtils.getFluidNames(Reference.UnlocalizedName.CONDENSED_MILK).get(FluidUtils.STILL) +// ).tint(Reference.FluidColor.CONDENSED_MILK.toIntValue()) +// .fogColor( +// Reference.FluidColor.CONDENSED_MILK.toFloatValues().get("red"), +// Reference.FluidColor.CONDENSED_MILK.toFloatValues().get("green"), +// Reference.FluidColor.CONDENSED_MILK.toFloatValues().get("blue") +// ) +// ), +// BlockBehaviour.Properties.copy(Blocks.WATER), +// new Item.Properties().stacksTo(1) +// ); +// +// public static final GrowthcraftMilkFluidRegistryContainer CREAM = new GrowthcraftMilkFluidRegistryContainer( +// FluidUtils.getFluidNames(Reference.UnlocalizedName.CREAM).get(FluidUtils.STILL), +// FluidType.Properties.create().canSwim(true).canDrown(true).canPushEntity(true).supportsBoating(true), +// () -> GrowthcraftMilkFluidRegistryContainer.createExtension( +// new ClientFluidTypeExtensions( +// Reference.MODID, +// FluidUtils.getFluidNames(Reference.UnlocalizedName.CREAM).get(FluidUtils.STILL) +// ).tint(Reference.FluidColor.CREAM.toIntValue()) +// .fogColor( +// Reference.FluidColor.CREAM.toFloatValues().get("red"), +// Reference.FluidColor.CREAM.toFloatValues().get("green"), +// Reference.FluidColor.CREAM.toFloatValues().get("blue") +// ) +// ), +// BlockBehaviour.Properties.copy(Blocks.WATER), +// new Item.Properties().stacksTo(1) +// ); +// +// public static final GrowthcraftMilkFluidRegistryContainer CULTURED_MILK = new GrowthcraftMilkFluidRegistryContainer( +// FluidUtils.getFluidNames(Reference.UnlocalizedName.CULTURED_MILK).get(FluidUtils.STILL), +// FluidType.Properties.create().canSwim(true).canDrown(true).canPushEntity(true).supportsBoating(true), +// () -> GrowthcraftMilkFluidRegistryContainer.createExtension( +// new ClientFluidTypeExtensions( +// Reference.MODID, +// FluidUtils.getFluidNames(Reference.UnlocalizedName.CULTURED_MILK).get(FluidUtils.STILL) +// ).tint(Reference.FluidColor.CULTURED_MILK.toIntValue()) +// .fogColor( +// Reference.FluidColor.CULTURED_MILK.toFloatValues().get("red"), +// Reference.FluidColor.CULTURED_MILK.toFloatValues().get("green"), +// Reference.FluidColor.CULTURED_MILK.toFloatValues().get("blue") +// ) +// ), +// BlockBehaviour.Properties.copy(Blocks.WATER), +// new Item.Properties().stacksTo(1) +// ); +// +// public static final GrowthcraftMilkFluidRegistryContainer KUMIS = new GrowthcraftMilkFluidRegistryContainer( +// FluidUtils.getFluidNames(Reference.UnlocalizedName.KUMIS).get(FluidUtils.STILL), +// FluidType.Properties.create().canSwim(true).canDrown(true).canPushEntity(true).supportsBoating(true), +// () -> GrowthcraftMilkFluidRegistryContainer.createExtension( +// new ClientFluidTypeExtensions( +// Reference.MODID, +// FluidUtils.getFluidNames(Reference.UnlocalizedName.KUMIS).get(FluidUtils.STILL) +// ).tint(Reference.FluidColor.KUMIS.toIntValue()) +// .fogColor( +// Reference.FluidColor.KUMIS.toFloatValues().get("red"), +// Reference.FluidColor.KUMIS.toFloatValues().get("green"), +// Reference.FluidColor.KUMIS.toFloatValues().get("blue") +// ) +// ), +// BlockBehaviour.Properties.copy(Blocks.WATER), +// new Item.Properties().stacksTo(1) +// ); +// +// public static final GrowthcraftMilkFluidRegistryContainer MILK = new GrowthcraftMilkFluidRegistryContainer( +// FluidUtils.getFluidNames(Reference.UnlocalizedName.MILK).get(FluidUtils.STILL), +// FluidType.Properties.create().canSwim(true).canDrown(true).canPushEntity(true).supportsBoating(true), +// () -> GrowthcraftMilkFluidRegistryContainer.createExtension( +// new ClientFluidTypeExtensions( +// Reference.MODID, +// FluidUtils.getFluidNames(Reference.UnlocalizedName.MILK).get(FluidUtils.STILL) +// ).tint(Reference.FluidColor.MILK.toIntValue()) +// .fogColor( +// Reference.FluidColor.MILK.toFloatValues().get("red"), +// Reference.FluidColor.MILK.toFloatValues().get("green"), +// Reference.FluidColor.MILK.toFloatValues().get("blue") +// ) +// ), +// BlockBehaviour.Properties.copy(Blocks.WATER), +// new Item.Properties().stacksTo(1) +// ); +// +// public static final GrowthcraftMilkFluidRegistryContainer RENNET = new GrowthcraftMilkFluidRegistryContainer( +// FluidUtils.getFluidNames(Reference.UnlocalizedName.RENNET).get(FluidUtils.STILL), +// FluidType.Properties.create().canSwim(true).canDrown(true).canPushEntity(true).supportsBoating(true), +// () -> GrowthcraftMilkFluidRegistryContainer.createExtension( +// new ClientFluidTypeExtensions( +// Reference.MODID, +// FluidUtils.getFluidNames(Reference.UnlocalizedName.RENNET).get(FluidUtils.STILL) +// ).tint( +// Reference.FluidColor.RENNET.toIntValue() +// ).fogColor( +// Reference.FluidColor.RENNET.toFloatValues().get("red"), +// Reference.FluidColor.RENNET.toFloatValues().get("green"), +// Reference.FluidColor.RENNET.toFloatValues().get("blue") +// ) +// ), +// BlockBehaviour.Properties.copy(Blocks.WATER), +// new Item.Properties().stacksTo(1) +// ); +// +// public static final GrowthcraftMilkFluidRegistryContainer SKIM_MILK = new GrowthcraftMilkFluidRegistryContainer( +// FluidUtils.getFluidNames(Reference.UnlocalizedName.SKIM_MILK).get(FluidUtils.STILL), +// FluidType.Properties.create().canSwim(true).canDrown(true).canPushEntity(true).supportsBoating(true), +// () -> GrowthcraftMilkFluidRegistryContainer.createExtension( +// new ClientFluidTypeExtensions( +// Reference.MODID, +// FluidUtils.getFluidNames(Reference.UnlocalizedName.SKIM_MILK).get(FluidUtils.STILL) +// ).tint(Reference.FluidColor.SKIM_MILK.toIntValue()) +// .fogColor( +// Reference.FluidColor.SKIM_MILK.toFloatValues().get("red"), +// Reference.FluidColor.SKIM_MILK.toFloatValues().get("green"), +// Reference.FluidColor.SKIM_MILK.toFloatValues().get("blue") +// ) +// ), +// BlockBehaviour.Properties.copy(Blocks.WATER), +// new Item.Properties().stacksTo(1) +// ); +// +// public static final GrowthcraftMilkFluidRegistryContainer WHEY = new GrowthcraftMilkFluidRegistryContainer( +// FluidUtils.getFluidNames(Reference.UnlocalizedName.WHEY).get(FluidUtils.STILL), +// FluidType.Properties.create().canSwim(true).canDrown(true).canPushEntity(true).supportsBoating(true), +// () -> GrowthcraftMilkFluidRegistryContainer.createExtension( +// new ClientFluidTypeExtensions( +// Reference.MODID, +// FluidUtils.getFluidNames(Reference.UnlocalizedName.WHEY).get(FluidUtils.STILL) +// ).tint(Reference.FluidColor.WHEY.toIntValue()) +// .fogColor( +// Reference.FluidColor.WHEY.toFloatValues().get("red"), +// Reference.FluidColor.WHEY.toFloatValues().get("green"), +// Reference.FluidColor.WHEY.toFloatValues().get("blue") +// ) +// ), +// BlockBehaviour.Properties.copy(Blocks.WATER), +// new Item.Properties().stacksTo(1) +// ); + + private GrowthcraftMilkFluids() { + /* Prevent default public constructor */ + } +} diff --git a/src/main/java/growthcraft/milk/init/GrowthcraftMilkItems.java b/src/main/java/growthcraft/milk/init/GrowthcraftMilkItems.java new file mode 100644 index 0000000..a7b0ee5 --- /dev/null +++ b/src/main/java/growthcraft/milk/init/GrowthcraftMilkItems.java @@ -0,0 +1,301 @@ +package growthcraft.milk.init; + +import java.util.ArrayList; + +import growthcraft.lib.item.GrowthcraftBowlFoodItem; +import growthcraft.lib.item.GrowthcraftBucketItem; +import growthcraft.lib.item.GrowthcraftFoodItem; +import growthcraft.lib.item.GrowthcraftItem; +import growthcraft.lib.utils.CheeseUtils; +import growthcraft.lib.utils.FluidUtils; +import growthcraft.milk.item.CheeseCurdsDrainedItem; +import growthcraft.milk.item.MilkingBucketItem; +import growthcraft.milk.item.ThistleSeedItem; +import growthcraft.milk.shared.Reference; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.Item; +import net.minecraft.world.level.material.Fluids; +import net.minecraftforge.registries.DeferredRegister; +import net.minecraftforge.registries.ForgeRegistries; +import net.minecraftforge.registries.RegistryObject; + +public class GrowthcraftMilkItems { + + public static final DeferredRegister ITEMS = DeferredRegister.create( + ForgeRegistries.ITEMS, Reference.MODID + ); + + public static final RegistryObject BUTTER = ITEMS.register( + Reference.UnlocalizedName.BUTTER, GrowthcraftItem::new + ); + + public static final RegistryObject BUTTER_SALTED = ITEMS.register( + Reference.UnlocalizedName.BUTTER_SALTED, GrowthcraftItem::new + ); + + public static final RegistryObject CHEESE_APPENZELLER_SLICE = ITEMS.register( + CheeseUtils.getCheeseNames(Reference.UnlocalizedName.APPENZELLER).get(CheeseUtils.SLICE), + () -> new GrowthcraftFoodItem(2, 0.3F, 64) + ); + + public static final RegistryObject CHEESE_ASIAGO_SLICE = ITEMS.register( + CheeseUtils.getCheeseNames(Reference.UnlocalizedName.ASIAGO).get(CheeseUtils.SLICE), + () -> new GrowthcraftFoodItem(2, 0.3F, 64) + ); + + public static final RegistryObject CHEESE_CASU_MARZU_SLICE = ITEMS.register( + CheeseUtils.getCheeseNames(Reference.UnlocalizedName.CASU_MARZU).get(CheeseUtils.SLICE), + () -> new GrowthcraftFoodItem(2, 0.3F, 64) + ); + + public static final RegistryObject CHEESE_CHEDDAR_SLICE = ITEMS.register( + CheeseUtils.getCheeseNames(Reference.UnlocalizedName.CHEDDAR).get(CheeseUtils.SLICE), + () -> new GrowthcraftFoodItem(2, 0.3F, 64) + ); + + public static final RegistryObject CHEESE_CLOTH = ITEMS.register( + Reference.UnlocalizedName.CHEESE_CLOTH, GrowthcraftItem::new + ); + + public static final RegistryObject CHEESE_EMMENTALER_SLICE = ITEMS.register( + CheeseUtils.getCheeseNames(Reference.UnlocalizedName.EMMENTALER).get(CheeseUtils.SLICE), + () -> new GrowthcraftFoodItem(2, 0.3F, 64) + ); + + public static final RegistryObject CHEESE_GORGONZOLA_SLICE = ITEMS.register( + CheeseUtils.getCheeseNames(Reference.UnlocalizedName.GORGONZOLA).get(CheeseUtils.SLICE), + () -> new GrowthcraftFoodItem(2, 0.3F, 64) + ); + + public static final RegistryObject CHEESE_GOUDA_SLICE = ITEMS.register( + CheeseUtils.getCheeseNames(Reference.UnlocalizedName.GOUDA).get(CheeseUtils.SLICE), + () -> new GrowthcraftFoodItem(2, 0.3F, 64) + ); + + public static final RegistryObject CHEESE_MONTEREY_SLICE = ITEMS.register( + CheeseUtils.getCheeseNames(Reference.UnlocalizedName.MONTEREY).get(CheeseUtils.SLICE), + () -> new GrowthcraftFoodItem(2, 0.3F, 64) + ); + + public static final RegistryObject CHEESE_PARMESAN_SLICE = ITEMS.register( + CheeseUtils.getCheeseNames(Reference.UnlocalizedName.PARMESAN).get(CheeseUtils.SLICE), + () -> new GrowthcraftFoodItem(2, 0.3F, 64) + ); + + public static final RegistryObject CHEESE_PROVOLONE_SLICE = ITEMS.register( + CheeseUtils.getCheeseNames(Reference.UnlocalizedName.PROVOLONE).get(CheeseUtils.SLICE), + () -> new GrowthcraftFoodItem(2, 0.3F, 64) + ); + + public static final RegistryObject CHEESE_RICOTTA_SLICE = ITEMS.register( + CheeseUtils.getCheeseNames(Reference.UnlocalizedName.RICOTTA).get(CheeseUtils.SLICE), + () -> new GrowthcraftFoodItem(2, 0.4F, 16) + ); + + public static final RegistryObject ICE_CREAM_APPLE = ITEMS.register( + Reference.UnlocalizedName.ICE_CREAM_APPLE, () -> new GrowthcraftBowlFoodItem(2, 0.3F, 8) + ); + + public static final RegistryObject ICE_CREAM_CHOCOLATE = ITEMS.register( + Reference.UnlocalizedName.ICE_CREAM_CHOCOLATE , () -> new GrowthcraftBowlFoodItem(2, 0.3F, 8) + ); + + public static final RegistryObject ICE_CREAM_GRAPE_PURPLE = ITEMS.register( + Reference.UnlocalizedName.ICE_CREAM_GRAPE_PURPLE , () -> new GrowthcraftBowlFoodItem(2, 0.3F, 8) + ); + + public static final RegistryObject ICE_CREAM_GRAPE_RED = ITEMS.register( + Reference.UnlocalizedName.ICE_CREAM_GRAPE_RED , () -> new GrowthcraftBowlFoodItem(2, 0.3F, 8) + ); + + public static final RegistryObject ICE_CREAM_GRAPE_WHITE = ITEMS.register( + Reference.UnlocalizedName.ICE_CREAM_GRAPE_WHITE , () -> new GrowthcraftBowlFoodItem(2, 0.3F, 8) + ); + + public static final RegistryObject ICE_CREAM_PUMPKIN = ITEMS.register( + Reference.UnlocalizedName.ICE_CREAM_PUMPKIN , () -> new GrowthcraftBowlFoodItem(2, 0.3F, 8) + ); + + public static final RegistryObject ICE_CREAM_WATERMELON = ITEMS.register( + Reference.UnlocalizedName.ICE_CREAM_WATERMELON , () -> new GrowthcraftBowlFoodItem(2, 0.3F, 8) + ); + + public static final RegistryObject ICE_CREAM_HONEY = ITEMS.register( + Reference.UnlocalizedName.ICE_CREAM_HONEY , () -> new GrowthcraftBowlFoodItem(2, 0.3F, 8) + ); + + public static final RegistryObject MILKING_BUCKET_IRON = ITEMS.register( + Reference.UnlocalizedName.MILKING_BUCKET_IRON, + () -> new MilkingBucketItem(Fluids.EMPTY) + ); + + public static final RegistryObject STARTER_CULTURE = ITEMS.register( + Reference.UnlocalizedName.STARTER_CULTURE, GrowthcraftItem::new + ); + + public static final RegistryObject STOMACH = ITEMS.register( + Reference.UnlocalizedName.STOMACH, GrowthcraftItem::new + ); + + public static final RegistryObject THISTLE = ITEMS.register( + Reference.UnlocalizedName.THISTLE, GrowthcraftItem::new + ); + + public static final RegistryObject THISTLE_SEED = ITEMS.register( + Reference.UnlocalizedName.THISTLE_SEED, + ThistleSeedItem::new + ); + + public static final RegistryObject YOGURT_APPLE = ITEMS.register( + Reference.UnlocalizedName.YOGURT_APPLE, () -> new GrowthcraftBowlFoodItem(2, 0.3F, 8) + ); + + public static final RegistryObject YOGURT_CHOCOLATE = ITEMS.register( + Reference.UnlocalizedName.YOGURT_CHOCOLATE, () -> new GrowthcraftBowlFoodItem(2, 0.3F, 8) + ); + + public static final RegistryObject YOGURT_GRAPE_PURPLE = ITEMS.register( + Reference.UnlocalizedName.YOGURT_GRAPE_PURPLE, () -> new GrowthcraftBowlFoodItem(2, 0.3F, 8) + ); + + public static final RegistryObject YOGURT_GRAPE_RED = ITEMS.register( + Reference.UnlocalizedName.YOGURT_GRAPE_RED, () -> new GrowthcraftBowlFoodItem(2, 0.3F, 8) + ); + + public static final RegistryObject YOGURT_GRAPE_WHITE = ITEMS.register( + Reference.UnlocalizedName.YOGURT_GRAPE_WHITE, () -> new GrowthcraftBowlFoodItem(2, 0.3F, 8) + ); + + public static final RegistryObject YOGURT_HONEY = ITEMS.register( + Reference.UnlocalizedName.YOGURT_HONEY, () -> new GrowthcraftBowlFoodItem(2, 0.3F, 8) + ); + + public static final RegistryObject YOGURT_PLAIN = ITEMS.register( + Reference.UnlocalizedName.YOGURT_PLAIN, () -> new GrowthcraftBowlFoodItem(2, 0.3F, 8) + ); + + public static final RegistryObject YOGURT_PUMPKIN = ITEMS.register( + Reference.UnlocalizedName.YOGURT_PUMPKIN, () -> new GrowthcraftBowlFoodItem(2, 0.3F, 8) + ); + + public static final RegistryObject YOGURT_WATERMELON = ITEMS.register( + Reference.UnlocalizedName.YOGURT_WATERMELON, () -> new GrowthcraftBowlFoodItem(2, 0.3F, 8) + ); + + public static final RegistryObject APPENZELLER_CHEESE_CURDS_DRAINED = ITEMS.register( + CheeseUtils.getCheeseNames(Reference.UnlocalizedName.APPENZELLER).get(CheeseUtils.DRAINED), + () -> new CheeseCurdsDrainedItem(Reference.ItemColor.APPENZELLER_CHEESE.getColor()) + ); + + public static final RegistryObject ASIAGO_CHEESE_CURDS_DRAINED = ITEMS.register( + CheeseUtils.getCheeseNames(Reference.UnlocalizedName.ASIAGO).get(CheeseUtils.DRAINED), + () -> new CheeseCurdsDrainedItem(Reference.ItemColor.ASIAGO_CHEESE.getColor()) + ); + + public static final RegistryObject CASU_MARZU_CHEESE_CURDS_DRAINED = ITEMS.register( + CheeseUtils.getCheeseNames(Reference.UnlocalizedName.CASU_MARZU).get(CheeseUtils.DRAINED), + () -> new CheeseCurdsDrainedItem(Reference.ItemColor.CASU_MARZU_CHEESE.getColor()) + ); + + public static final RegistryObject CHEDDAR_CHEESE_CURDS_DRAINED = ITEMS.register( + CheeseUtils.getCheeseNames(Reference.UnlocalizedName.CHEDDAR).get(CheeseUtils.DRAINED), + () -> new CheeseCurdsDrainedItem(Reference.ItemColor.CHEDDAR_CHEESE.getColor()) + ); + + public static final RegistryObject EMMENTALER_CHEESE_CURDS_DRAINED = ITEMS.register( + CheeseUtils.getCheeseNames(Reference.UnlocalizedName.EMMENTALER).get(CheeseUtils.DRAINED), + () -> new CheeseCurdsDrainedItem(Reference.ItemColor.EMMENTALER_CHEESE.getColor()) + ); + + public static final RegistryObject GORGONZOLA_CHEESE_CURDS_DRAINED = ITEMS.register( + CheeseUtils.getCheeseNames(Reference.UnlocalizedName.GORGONZOLA).get(CheeseUtils.DRAINED), + () -> new CheeseCurdsDrainedItem(Reference.ItemColor.GORGONZOLA_CHEESE.getColor()) + ); + + public static final RegistryObject GOUDA_CHEESE_CURDS_DRAINED = ITEMS.register( + CheeseUtils.getCheeseNames(Reference.UnlocalizedName.GOUDA).get(CheeseUtils.DRAINED), + () -> new CheeseCurdsDrainedItem(Reference.ItemColor.GOUDA_CHEESE.getColor()) + ); + + public static final RegistryObject MONTEREY_CHEESE_CURDS_DRAINED = ITEMS.register( + CheeseUtils.getCheeseNames(Reference.UnlocalizedName.MONTEREY).get(CheeseUtils.DRAINED), + () -> new CheeseCurdsDrainedItem(Reference.ItemColor.MONTEREY_CHEESE.getColor()) + ); + + public static final RegistryObject PARMESAN_CHEESE_CURDS_DRAINED = ITEMS.register( + CheeseUtils.getCheeseNames(Reference.UnlocalizedName.PARMESAN).get(CheeseUtils.DRAINED), + () -> new CheeseCurdsDrainedItem(Reference.ItemColor.PARMESAN_CHEESE.getColor()) + ); + + public static final RegistryObject PROVOLONE_CHEESE_CURDS_DRAINED = ITEMS.register( + CheeseUtils.getCheeseNames(Reference.UnlocalizedName.PROVOLONE).get(CheeseUtils.DRAINED), + () -> new CheeseCurdsDrainedItem(Reference.ItemColor.PROVOLONE_CHEESE.getColor()) + ); + + public static final RegistryObject RICOTTA_CHEESE_CURDS_DRAINED = ITEMS.register( + CheeseUtils.getCheeseNames(Reference.UnlocalizedName.RICOTTA).get(CheeseUtils.DRAINED), + () -> new CheeseCurdsDrainedItem(Reference.ItemColor.RICOTTA_CHEESE.getColor()) + ); + + public static final RegistryObject BUTTER_MILK_BUCKET = ITEMS.register( + FluidUtils.getFluidNames(Reference.UnlocalizedName.BUTTER_MILK).get(FluidUtils.BUCKET), + () -> new GrowthcraftBucketItem(GrowthcraftMilkFluids.BUTTER_MILK, Reference.FluidColor.BUTTER_MILK.getColor())); + + public static final RegistryObject CHEESE_BASE_BUCKET = ITEMS.register( + FluidUtils.getFluidNames(Reference.UnlocalizedName.CHEESE_BASE).get(FluidUtils.BUCKET), + () -> new GrowthcraftBucketItem(GrowthcraftMilkFluids.CHEESE_BASE, Reference.FluidColor.CHEESE_BASE.getColor())); + + public static final RegistryObject CONDENSED_MILK_BUCKET = ITEMS.register( + FluidUtils.getFluidNames(Reference.UnlocalizedName.CONDENSED_MILK).get(FluidUtils.BUCKET), + () -> new GrowthcraftBucketItem(GrowthcraftMilkFluids.CONDENSED_MILK, Reference.FluidColor.CONDENSED_MILK.getColor())); + + public static final RegistryObject CREAM_BUCKET = ITEMS.register( + FluidUtils.getFluidNames(Reference.UnlocalizedName.CREAM).get(FluidUtils.BUCKET), + () -> new GrowthcraftBucketItem(GrowthcraftMilkFluids.CREAM, Reference.FluidColor.CREAM.getColor())); + + public static final RegistryObject CULTURED_MILK_BUCKET = ITEMS.register( + FluidUtils.getFluidNames(Reference.UnlocalizedName.CULTURED_MILK).get(FluidUtils.BUCKET), + () -> new GrowthcraftBucketItem(GrowthcraftMilkFluids.CULTURED_MILK, Reference.FluidColor.CULTURED_MILK.getColor())); + + public static final RegistryObject KUMIS_BUCKET = ITEMS.register( + FluidUtils.getFluidNames(Reference.UnlocalizedName.KUMIS).get(FluidUtils.BUCKET), + () -> new GrowthcraftBucketItem(GrowthcraftMilkFluids.KUMIS, Reference.FluidColor.KUMIS.getColor())); + + public static final RegistryObject MILK_BUCKET = ITEMS.register( + FluidUtils.getFluidNames(Reference.UnlocalizedName.MILK).get(FluidUtils.BUCKET), + () -> new GrowthcraftBucketItem(GrowthcraftMilkFluids.MILK, Reference.FluidColor.MILK.getColor())); + + public static final RegistryObject RENNET_BUCKET = ITEMS.register( + FluidUtils.getFluidNames(Reference.UnlocalizedName.RENNET).get(FluidUtils.BUCKET), + () -> new GrowthcraftBucketItem(GrowthcraftMilkFluids.RENNET, Reference.FluidColor.RENNET.getColor())); + + public static final RegistryObject SKIM_MILK_BUCKET = ITEMS.register( + FluidUtils.getFluidNames(Reference.UnlocalizedName.SKIM_MILK).get(FluidUtils.BUCKET), + () -> new GrowthcraftBucketItem(GrowthcraftMilkFluids.SKIM_MILK, Reference.FluidColor.SKIM_MILK.getColor())); + + public static final RegistryObject WHEY_BUCKET = ITEMS.register( + FluidUtils.getFluidNames(Reference.UnlocalizedName.WHEY).get(FluidUtils.BUCKET), + () -> new GrowthcraftBucketItem(GrowthcraftMilkFluids.WHEY, Reference.FluidColor.WHEY.getColor())); + + + public static void registerCompostables() { + float f = 0.3F; + float f1 = 0.5F; + float f2 = 0.65F; + float f3 = 0.85F; + float f4 = 1.0F; + + // ComposterBlock.COMPOSTABLES.put(GrowthcraftRiceItems.RICE.get(), f2); + + } + + public static boolean excludeItemRegistry(ResourceLocation registryName) { + ArrayList excludeItems = new ArrayList<>(); + //excludeItems.add(Reference.MODID + ":" + Reference.UnlocalizedName.APPLE_TREE_FRUIT); + return excludeItems.contains(registryName.toString()); + } + + private GrowthcraftMilkItems() { + /* Prevent default public constructor */ + } +} diff --git a/src/main/java/growthcraft/milk/init/GrowthcraftMilkMenus.java b/src/main/java/growthcraft/milk/init/GrowthcraftMilkMenus.java new file mode 100644 index 0000000..c3c272b --- /dev/null +++ b/src/main/java/growthcraft/milk/init/GrowthcraftMilkMenus.java @@ -0,0 +1,35 @@ +package growthcraft.milk.init; + +import growthcraft.milk.screen.container.ChurnMenu; +import growthcraft.milk.screen.container.MixingVatMenu; +import growthcraft.milk.screen.container.PancheonMenu; +import growthcraft.milk.shared.Reference; +import net.minecraft.world.inventory.AbstractContainerMenu; +import net.minecraft.world.inventory.MenuType; +import net.minecraftforge.common.extensions.IForgeMenuType; +import net.minecraftforge.network.IContainerFactory; +import net.minecraftforge.registries.DeferredRegister; +import net.minecraftforge.registries.ForgeRegistries; +import net.minecraftforge.registries.RegistryObject; + +public class GrowthcraftMilkMenus { + + public static final DeferredRegister> MENUS = DeferredRegister.create( + ForgeRegistries.CONTAINERS, Reference.MODID + ); + + public static final RegistryObject> CHURN_MENU = + registerMenuType(Reference.UnlocalizedName.CHURN, ChurnMenu::new); + + public static final RegistryObject> MIXING_VAT_MENU = + registerMenuType(Reference.UnlocalizedName.MIXING_VAT, MixingVatMenu::new); + + public static final RegistryObject> PANCHEON_MENU = + registerMenuType(Reference.UnlocalizedName.PANCHEON, PancheonMenu::new); + + private static RegistryObject> registerMenuType( + String name, IContainerFactory factory) { + return MENUS.register(name, () -> IForgeMenuType.create(factory)); + } + +} diff --git a/src/main/java/growthcraft/milk/init/GrowthcraftMilkRecipes.java b/src/main/java/growthcraft/milk/init/GrowthcraftMilkRecipes.java new file mode 100644 index 0000000..4dfd117 --- /dev/null +++ b/src/main/java/growthcraft/milk/init/GrowthcraftMilkRecipes.java @@ -0,0 +1,37 @@ +package growthcraft.milk.init; + +import growthcraft.milk.recipe.*; +import growthcraft.milk.shared.Reference; +import net.minecraft.world.item.crafting.RecipeSerializer; +import net.minecraftforge.eventbus.api.IEventBus; +import net.minecraftforge.registries.DeferredRegister; +import net.minecraftforge.registries.ForgeRegistries; +import net.minecraftforge.registries.RegistryObject; + +public class GrowthcraftMilkRecipes { + public static final DeferredRegister> SERIALIZERS = + DeferredRegister.create(ForgeRegistries.RECIPE_SERIALIZERS, Reference.MODID); + + private GrowthcraftMilkRecipes() { + /* Private constructor to hide the implicit public one. */ + } + + public static final RegistryObject> PANCHEON_RECIPE_SERIALIZER = + SERIALIZERS.register(Reference.UnlocalizedName.PANCHEON_RECIPE, () -> PancheonRecipe.Serializer.INSTANCE); + + public static final RegistryObject> CHURN_RECIPE_SERIALIZER = + SERIALIZERS.register(Reference.UnlocalizedName.CHURN_RECIPE, () -> ChurnRecipe.Serializer.INSTANCE); + + public static final RegistryObject> MIXING_VAT_FLUID_RECIPE_SERIALIZER = + SERIALIZERS.register(Reference.UnlocalizedName.MIXING_VAT_FLUID_RECIPE, () -> MixingVatFluidRecipe.Serializer.INSTANCE); + + public static final RegistryObject> MIXING_VAT_ITEM_RECIPE_SERIALIZER = + SERIALIZERS.register(Reference.UnlocalizedName.MIXING_VAT_ITEM_RECIPE, () -> MixingVatItemRecipe.Serializer.INSTANCE); + + public static final RegistryObject> CHEESE_PRESS_RECIPE_SERIALIZER = + SERIALIZERS.register(Reference.UnlocalizedName.CHEESE_PRESS_RECIPE, () -> CheesePressRecipe.Serializer.INSTANCE); + + public static void register(IEventBus eventBus) { + SERIALIZERS.register(eventBus); + } +} diff --git a/src/main/java/growthcraft/milk/init/GrowthcraftMilkTags.java b/src/main/java/growthcraft/milk/init/GrowthcraftMilkTags.java new file mode 100644 index 0000000..fd07fc1 --- /dev/null +++ b/src/main/java/growthcraft/milk/init/GrowthcraftMilkTags.java @@ -0,0 +1,73 @@ +package growthcraft.milk.init; + +import growthcraft.milk.shared.Reference; +import net.minecraft.core.Registry; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.tags.BlockTags; +import net.minecraft.tags.FluidTags; +import net.minecraft.tags.ItemTags; +import net.minecraft.tags.TagKey; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.item.Item; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.material.Fluid; + +public class GrowthcraftMilkTags { + + public static void init() { + Blocks.init(); + Items.init(); + Fluids.init(); + EntityTypes.init(); + } + + public static class Blocks { + + private static void init() { + // Do nothing, simply instantiate static variables + } + + //public static final TagKey HEATSOURCES = tag(Reference.UnlocalizedName.TAG_HEATSOURCES); + + private static TagKey tag(String name) { + return BlockTags.create(new ResourceLocation(Reference.MODID, name)); + } + } + + public static class Items { + + private static void init() { + // Do nothing, simply instantiate static variables + } + + public static final TagKey TAG_MIXING_VAT_TOOLS = tag(Reference.UnlocalizedName.TAG_MIXING_VAT_TOOLS); + + private static TagKey tag(String name) { + return ItemTags.create(new ResourceLocation(Reference.MODID, name)); + } + } + + public static class Fluids { + + private static void init() { + // Do nothing, simply instantiate static variables + } + + private static TagKey tag(String name) { + return FluidTags.create(new ResourceLocation(Reference.MODID, name)); + } + } + + public static class EntityTypes { + + private static void init() { + // Do nothing, simply instantiate static variables + } + + public static final TagKey> MILKABLE = tag("milkable"); + + private static TagKey> tag(String name) { + return TagKey.create(Registry.ENTITY_TYPE_REGISTRY, new ResourceLocation(Reference.MODID, name)); + } + } +} diff --git a/src/main/java/growthcraft/milk/init/LivingDropLootModifier.java b/src/main/java/growthcraft/milk/init/LivingDropLootModifier.java new file mode 100644 index 0000000..0f65cff --- /dev/null +++ b/src/main/java/growthcraft/milk/init/LivingDropLootModifier.java @@ -0,0 +1,46 @@ +package growthcraft.milk.init; + +import growthcraft.milk.init.config.GrowthcraftMilkConfig; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.animal.Cow; +import net.minecraft.world.entity.item.ItemEntity; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.GameRules; +import net.minecraft.world.level.Level; +import net.minecraftforge.event.entity.living.LivingDropsEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; + +import java.security.SecureRandom; +import java.util.Collection; + +public class LivingDropLootModifier { + @SubscribeEvent + public void onLivingDropsEvent(LivingDropsEvent event) { + LivingEntity entity = event.getEntityLiving(); + Level level = entity.getLevel(); + + if(!level.getGameRules().getBoolean(GameRules.RULE_DOMOBLOOT)) { + return; + } + + if(entity instanceof Cow) { + onCowLivingDrops(event, entity); + } + + } + + private void onCowLivingDrops(LivingDropsEvent event, LivingEntity cow) { + Collection drops = event.getDrops(); + int chance = GrowthcraftMilkConfig.getStomachLootChance(); + + if(GrowthcraftMilkConfig.isStomachLootingEnabled() && new SecureRandom().nextInt(100) <= chance) { + drops.add( + new ItemEntity( + event.getEntity().getLevel(), + cow.getX(), cow.getY(), cow.getZ(), + new ItemStack(GrowthcraftMilkItems.STOMACH.get()) + ) + ); + } + } +} diff --git a/src/main/java/growthcraft/milk/init/client/GrowthcraftMilkBlockEntityRenderers.java b/src/main/java/growthcraft/milk/init/client/GrowthcraftMilkBlockEntityRenderers.java new file mode 100644 index 0000000..5ab76a6 --- /dev/null +++ b/src/main/java/growthcraft/milk/init/client/GrowthcraftMilkBlockEntityRenderers.java @@ -0,0 +1,22 @@ +package growthcraft.milk.init.client; + +import growthcraft.milk.block.entity.renderer.MixingVatBlockEntityRenderer; +import growthcraft.milk.block.entity.renderer.PancheonBlockEntityRenderer; +import growthcraft.milk.init.GrowthcraftMilkBlockEntities; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.client.event.EntityRenderersEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; + +@Mod.EventBusSubscriber(value = Dist.CLIENT, bus = Mod.EventBusSubscriber.Bus.MOD) +public class GrowthcraftMilkBlockEntityRenderers { + @SubscribeEvent + public static void register(EntityRenderersEvent.RegisterRenderers event) { + event.registerBlockEntityRenderer(GrowthcraftMilkBlockEntities.PANCHEON_BLOCK_ENTITY.get(), context -> new PancheonBlockEntityRenderer()); + event.registerBlockEntityRenderer(GrowthcraftMilkBlockEntities.MIXING_VAT_BLOCK_ENTITY.get(), context -> new MixingVatBlockEntityRenderer()); + } + + private GrowthcraftMilkBlockEntityRenderers() { + /* Prevent default public constructor */ + } +} diff --git a/src/main/java/growthcraft/milk/init/client/GrowthcraftMilkBlockRenderers.java b/src/main/java/growthcraft/milk/init/client/GrowthcraftMilkBlockRenderers.java new file mode 100644 index 0000000..b56e971 --- /dev/null +++ b/src/main/java/growthcraft/milk/init/client/GrowthcraftMilkBlockRenderers.java @@ -0,0 +1,78 @@ +package growthcraft.milk.init.client; + +import growthcraft.lib.client.BlockRendererUtils; +import growthcraft.milk.init.GrowthcraftMilkBlocks; +import growthcraft.milk.init.GrowthcraftMilkFluids; +import growthcraft.milk.shared.Reference; +import net.minecraft.client.renderer.ItemBlockRenderTypes; +import net.minecraft.client.renderer.RenderType; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.client.event.ColorHandlerEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; + +@Mod.EventBusSubscriber(value = Dist.CLIENT, bus = Mod.EventBusSubscriber.Bus.MOD) +public class GrowthcraftMilkBlockRenderers { + + public static void setRenderLayers() { + setFluidRenderLayers(); + setBlockRenderLayers(); + } + + private static void setBlockRenderLayers() { + ItemBlockRenderTypes.setRenderLayer(GrowthcraftMilkBlocks.THISTLE_CROP.get(), RenderType.cutout()); + } + + private static void setFluidRenderLayers() { + ItemBlockRenderTypes.setRenderLayer(GrowthcraftMilkFluids.BUTTER_MILK.get().getSource(), RenderType.translucent()); + ItemBlockRenderTypes.setRenderLayer(GrowthcraftMilkFluids.BUTTER_MILK.get().getFlowing(), RenderType.translucent()); + ItemBlockRenderTypes.setRenderLayer(GrowthcraftMilkFluids.CHEESE_BASE.get().getSource(), RenderType.translucent()); + ItemBlockRenderTypes.setRenderLayer(GrowthcraftMilkFluids.CHEESE_BASE.get().getFlowing(), RenderType.translucent()); + ItemBlockRenderTypes.setRenderLayer(GrowthcraftMilkFluids.CONDENSED_MILK.get().getSource(), RenderType.translucent()); + ItemBlockRenderTypes.setRenderLayer(GrowthcraftMilkFluids.CONDENSED_MILK.get().getFlowing(), RenderType.translucent()); + ItemBlockRenderTypes.setRenderLayer(GrowthcraftMilkFluids.CREAM.get().getSource(), RenderType.translucent()); + ItemBlockRenderTypes.setRenderLayer(GrowthcraftMilkFluids.CREAM.get().getFlowing(), RenderType.translucent()); + ItemBlockRenderTypes.setRenderLayer(GrowthcraftMilkFluids.CULTURED_MILK.get().getSource(), RenderType.translucent()); + ItemBlockRenderTypes.setRenderLayer(GrowthcraftMilkFluids.CULTURED_MILK.get().getFlowing(), RenderType.translucent()); + ItemBlockRenderTypes.setRenderLayer(GrowthcraftMilkFluids.KUMIS.get().getSource(), RenderType.translucent()); + ItemBlockRenderTypes.setRenderLayer(GrowthcraftMilkFluids.KUMIS.get().getFlowing(), RenderType.translucent()); + ItemBlockRenderTypes.setRenderLayer(GrowthcraftMilkFluids.MILK.get().getSource(), RenderType.translucent()); + ItemBlockRenderTypes.setRenderLayer(GrowthcraftMilkFluids.MILK.get().getFlowing(), RenderType.translucent()); + ItemBlockRenderTypes.setRenderLayer(GrowthcraftMilkFluids.RENNET.get().getSource(), RenderType.translucent()); + ItemBlockRenderTypes.setRenderLayer(GrowthcraftMilkFluids.RENNET.get().getFlowing(), RenderType.translucent()); + ItemBlockRenderTypes.setRenderLayer(GrowthcraftMilkFluids.SKIM_MILK.get().getSource(), RenderType.translucent()); + ItemBlockRenderTypes.setRenderLayer(GrowthcraftMilkFluids.SKIM_MILK.get().getFlowing(), RenderType.translucent()); + ItemBlockRenderTypes.setRenderLayer(GrowthcraftMilkFluids.WHEY.get().getSource(), RenderType.translucent()); + ItemBlockRenderTypes.setRenderLayer(GrowthcraftMilkFluids.WHEY.get().getFlowing(), RenderType.translucent()); + } + + @SubscribeEvent + public static void registerBlockRenders(ColorHandlerEvent.Block event) { + BlockRendererUtils.registerBlock(event, Reference.ItemColor.APPENZELLER_CHEESE, GrowthcraftMilkBlocks.APPENZELLER_CHEESE.get() ); + BlockRendererUtils.registerBlock(event, Reference.ItemColor.APPENZELLER_CHEESE, GrowthcraftMilkBlocks.APPENZELLER_CHEESE_CURDS.get() ); + BlockRendererUtils.registerBlock(event, Reference.ItemColor.ASIAGO_CHEESE, GrowthcraftMilkBlocks.ASIAGO_CHEESE.get() ); + BlockRendererUtils.registerBlock(event, Reference.ItemColor.ASIAGO_CHEESE, GrowthcraftMilkBlocks.ASIAGO_CHEESE_CURDS.get() ); + BlockRendererUtils.registerBlock(event, Reference.ItemColor.CASU_MARZU_CHEESE, GrowthcraftMilkBlocks.CASU_MARZU_CHEESE.get() ); + BlockRendererUtils.registerBlock(event, Reference.ItemColor.CASU_MARZU_CHEESE, GrowthcraftMilkBlocks.CASU_MARZU_CHEESE_CURDS.get() ); + BlockRendererUtils.registerBlock(event, Reference.ItemColor.CHEDDAR_CHEESE, GrowthcraftMilkBlocks.CHEDDAR_CHEESE.get() ); + BlockRendererUtils.registerBlock(event, Reference.ItemColor.CHEDDAR_CHEESE, GrowthcraftMilkBlocks.CHEDDAR_CHEESE_CURDS.get() ); + BlockRendererUtils.registerBlock(event, Reference.ItemColor.EMMENTALER_CHEESE, GrowthcraftMilkBlocks.EMMENTALER_CHEESE.get() ); + BlockRendererUtils.registerBlock(event, Reference.ItemColor.EMMENTALER_CHEESE, GrowthcraftMilkBlocks.EMMENTALER_CHEESE_CURDS.get() ); + BlockRendererUtils.registerBlock(event, Reference.ItemColor.GORGONZOLA_CHEESE, GrowthcraftMilkBlocks.GORGONZOLA_CHEESE.get() ); + BlockRendererUtils.registerBlock(event, Reference.ItemColor.GORGONZOLA_CHEESE, GrowthcraftMilkBlocks.GORGONZOLA_CHEESE_CURDS.get() ); + BlockRendererUtils.registerBlock(event, Reference.ItemColor.GOUDA_CHEESE, GrowthcraftMilkBlocks.GOUDA_CHEESE.get() ); + BlockRendererUtils.registerBlock(event, Reference.ItemColor.GOUDA_CHEESE, GrowthcraftMilkBlocks.GOUDA_CHEESE_CURDS.get() ); + BlockRendererUtils.registerBlock(event, Reference.ItemColor.MONTEREY_CHEESE, GrowthcraftMilkBlocks.MONTEREY_CHEESE.get() ); + BlockRendererUtils.registerBlock(event, Reference.ItemColor.MONTEREY_CHEESE, GrowthcraftMilkBlocks.MONTEREY_CHEESE_CURDS.get() ); + BlockRendererUtils.registerBlock(event, Reference.ItemColor.PARMESAN_CHEESE, GrowthcraftMilkBlocks.PARMESAN_CHEESE.get() ); + BlockRendererUtils.registerBlock(event, Reference.ItemColor.PARMESAN_CHEESE, GrowthcraftMilkBlocks.PARMESAN_CHEESE_CURDS.get() ); + BlockRendererUtils.registerBlock(event, Reference.ItemColor.PROVOLONE_CHEESE, GrowthcraftMilkBlocks.PROVOLONE_CHEESE.get() ); + BlockRendererUtils.registerBlock(event, Reference.ItemColor.PROVOLONE_CHEESE, GrowthcraftMilkBlocks.PROVOLONE_CHEESE_CURDS.get() ); + BlockRendererUtils.registerBlock(event, Reference.ItemColor.RICOTTA_CHEESE, GrowthcraftMilkBlocks.RICOTTA_CHEESE_CURDS.get() ); + } + + + private GrowthcraftMilkBlockRenderers() { + /* Prevent default public constructor */ + } +} diff --git a/src/main/java/growthcraft/milk/init/client/GrowthcraftMilkItemRenderers.java b/src/main/java/growthcraft/milk/init/client/GrowthcraftMilkItemRenderers.java new file mode 100644 index 0000000..9a3c6e4 --- /dev/null +++ b/src/main/java/growthcraft/milk/init/client/GrowthcraftMilkItemRenderers.java @@ -0,0 +1,66 @@ +package growthcraft.milk.init.client; + +import growthcraft.lib.client.ItemRendererUtils; +import growthcraft.milk.init.GrowthcraftMilkBlocks; +import growthcraft.milk.init.GrowthcraftMilkFluids; +import growthcraft.milk.init.GrowthcraftMilkItems; +import growthcraft.milk.shared.Reference; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.client.event.ColorHandlerEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; + +@Mod.EventBusSubscriber(value = Dist.CLIENT, bus = Mod.EventBusSubscriber.Bus.MOD) +public class GrowthcraftMilkItemRenderers { + + @SubscribeEvent + public static void registerItemRenders(ColorHandlerEvent.Item event) { + ItemRendererUtils.registerItem(event, Reference.FluidColor.BUTTER_MILK.toItemColor(), GrowthcraftMilkFluids.BUTTER_MILK.get().getBucket()); + ItemRendererUtils.registerItem(event, Reference.FluidColor.CHEESE_BASE.toItemColor(), GrowthcraftMilkFluids.CHEESE_BASE.get().getBucket()); + ItemRendererUtils.registerItem(event, Reference.FluidColor.CONDENSED_MILK.toItemColor(), GrowthcraftMilkFluids.CONDENSED_MILK.get().getBucket()); + ItemRendererUtils.registerItem(event, Reference.FluidColor.CREAM.toItemColor(), GrowthcraftMilkFluids.CREAM.get().getBucket()); + ItemRendererUtils.registerItem(event, Reference.FluidColor.CULTURED_MILK.toItemColor(), GrowthcraftMilkFluids.CULTURED_MILK.get().getBucket()); + ItemRendererUtils.registerItem(event, Reference.FluidColor.KUMIS.toItemColor(), GrowthcraftMilkFluids.KUMIS.get().getBucket()); + ItemRendererUtils.registerItem(event, Reference.FluidColor.MILK.toItemColor(), GrowthcraftMilkFluids.MILK.get().getBucket()); + ItemRendererUtils.registerItem(event, Reference.FluidColor.RENNET.toItemColor(), GrowthcraftMilkFluids.RENNET.get().getBucket()); + ItemRendererUtils.registerItem(event, Reference.FluidColor.SKIM_MILK.toItemColor(), GrowthcraftMilkFluids.SKIM_MILK.get().getBucket()); + ItemRendererUtils.registerItem(event, Reference.FluidColor.WHEY.toItemColor(), GrowthcraftMilkFluids.WHEY.get().getBucket()); + + ItemRendererUtils.registerItem(event, Reference.ItemColor.APPENZELLER_CHEESE.toItemColor(), GrowthcraftMilkBlocks.APPENZELLER_CHEESE.get().asItem()); + ItemRendererUtils.registerItem(event, Reference.ItemColor.APPENZELLER_CHEESE.toItemColor(), GrowthcraftMilkBlocks.APPENZELLER_CHEESE_CURDS.get().asItem()); + ItemRendererUtils.registerItem(event, Reference.ItemColor.APPENZELLER_CHEESE.toItemColor(), GrowthcraftMilkItems.APPENZELLER_CHEESE_CURDS_DRAINED.get()); + ItemRendererUtils.registerItem(event, Reference.ItemColor.ASIAGO_CHEESE.toItemColor(), GrowthcraftMilkBlocks.ASIAGO_CHEESE.get().asItem()); + ItemRendererUtils.registerItem(event, Reference.ItemColor.ASIAGO_CHEESE.toItemColor(), GrowthcraftMilkBlocks.ASIAGO_CHEESE_CURDS.get().asItem()); + ItemRendererUtils.registerItem(event, Reference.ItemColor.ASIAGO_CHEESE.toItemColor(), GrowthcraftMilkItems.ASIAGO_CHEESE_CURDS_DRAINED.get()); + ItemRendererUtils.registerItem(event, Reference.ItemColor.CASU_MARZU_CHEESE.toItemColor(), GrowthcraftMilkBlocks.CASU_MARZU_CHEESE.get().asItem()); + ItemRendererUtils.registerItem(event, Reference.ItemColor.CASU_MARZU_CHEESE.toItemColor(), GrowthcraftMilkBlocks.CASU_MARZU_CHEESE_CURDS.get().asItem()); + ItemRendererUtils.registerItem(event, Reference.ItemColor.CASU_MARZU_CHEESE.toItemColor(), GrowthcraftMilkItems.CASU_MARZU_CHEESE_CURDS_DRAINED.get()); + ItemRendererUtils.registerItem(event, Reference.ItemColor.CHEDDAR_CHEESE.toItemColor(), GrowthcraftMilkBlocks.CHEDDAR_CHEESE.get().asItem()); + ItemRendererUtils.registerItem(event, Reference.ItemColor.CHEDDAR_CHEESE.toItemColor(), GrowthcraftMilkBlocks.CHEDDAR_CHEESE_CURDS.get().asItem()); + ItemRendererUtils.registerItem(event, Reference.ItemColor.CHEDDAR_CHEESE.toItemColor(), GrowthcraftMilkItems.CHEDDAR_CHEESE_CURDS_DRAINED.get()); + ItemRendererUtils.registerItem(event, Reference.ItemColor.EMMENTALER_CHEESE.toItemColor(), GrowthcraftMilkBlocks.EMMENTALER_CHEESE.get().asItem()); + ItemRendererUtils.registerItem(event, Reference.ItemColor.EMMENTALER_CHEESE.toItemColor(), GrowthcraftMilkBlocks.EMMENTALER_CHEESE_CURDS.get().asItem()); + ItemRendererUtils.registerItem(event, Reference.ItemColor.EMMENTALER_CHEESE.toItemColor(), GrowthcraftMilkItems.EMMENTALER_CHEESE_CURDS_DRAINED.get()); + ItemRendererUtils.registerItem(event, Reference.ItemColor.GORGONZOLA_CHEESE.toItemColor(), GrowthcraftMilkBlocks.GORGONZOLA_CHEESE.get().asItem()); + ItemRendererUtils.registerItem(event, Reference.ItemColor.GORGONZOLA_CHEESE.toItemColor(), GrowthcraftMilkBlocks.GORGONZOLA_CHEESE_CURDS.get().asItem()); + ItemRendererUtils.registerItem(event, Reference.ItemColor.GORGONZOLA_CHEESE.toItemColor(), GrowthcraftMilkItems.GORGONZOLA_CHEESE_CURDS_DRAINED.get()); + ItemRendererUtils.registerItem(event, Reference.ItemColor.GOUDA_CHEESE.toItemColor(), GrowthcraftMilkBlocks.GOUDA_CHEESE.get().asItem()); + ItemRendererUtils.registerItem(event, Reference.ItemColor.GOUDA_CHEESE.toItemColor(), GrowthcraftMilkBlocks.GOUDA_CHEESE_CURDS.get().asItem()); + ItemRendererUtils.registerItem(event, Reference.ItemColor.GOUDA_CHEESE.toItemColor(), GrowthcraftMilkItems.GOUDA_CHEESE_CURDS_DRAINED.get()); + ItemRendererUtils.registerItem(event, Reference.ItemColor.MONTEREY_CHEESE.toItemColor(), GrowthcraftMilkBlocks.MONTEREY_CHEESE.get().asItem()); + ItemRendererUtils.registerItem(event, Reference.ItemColor.MONTEREY_CHEESE.toItemColor(), GrowthcraftMilkBlocks.MONTEREY_CHEESE_CURDS.get().asItem()); + ItemRendererUtils.registerItem(event, Reference.ItemColor.MONTEREY_CHEESE.toItemColor(), GrowthcraftMilkItems.MONTEREY_CHEESE_CURDS_DRAINED.get()); + ItemRendererUtils.registerItem(event, Reference.ItemColor.PARMESAN_CHEESE.toItemColor(), GrowthcraftMilkBlocks.PARMESAN_CHEESE.get().asItem()); + ItemRendererUtils.registerItem(event, Reference.ItemColor.PARMESAN_CHEESE.toItemColor(), GrowthcraftMilkBlocks.PARMESAN_CHEESE_CURDS.get().asItem()); + ItemRendererUtils.registerItem(event, Reference.ItemColor.PARMESAN_CHEESE.toItemColor(), GrowthcraftMilkItems.PARMESAN_CHEESE_CURDS_DRAINED.get()); + ItemRendererUtils.registerItem(event, Reference.ItemColor.PROVOLONE_CHEESE.toItemColor(), GrowthcraftMilkBlocks.PROVOLONE_CHEESE.get().asItem()); + ItemRendererUtils.registerItem(event, Reference.ItemColor.PROVOLONE_CHEESE.toItemColor(), GrowthcraftMilkBlocks.PROVOLONE_CHEESE_CURDS.get().asItem()); + ItemRendererUtils.registerItem(event, Reference.ItemColor.PROVOLONE_CHEESE.toItemColor(), GrowthcraftMilkItems.PROVOLONE_CHEESE_CURDS_DRAINED.get()); + ItemRendererUtils.registerItem(event, Reference.ItemColor.RICOTTA_CHEESE.toItemColor(), GrowthcraftMilkBlocks.RICOTTA_CHEESE_CURDS.get().asItem()); + ItemRendererUtils.registerItem(event, Reference.ItemColor.RICOTTA_CHEESE.toItemColor(), GrowthcraftMilkItems.RICOTTA_CHEESE_CURDS_DRAINED.get()); + } + + private GrowthcraftMilkItemRenderers() { + /* Prevent automatic public constructor */ + } +} diff --git a/src/main/java/growthcraft/milk/init/config/GrowthcraftMilkConfig.java b/src/main/java/growthcraft/milk/init/config/GrowthcraftMilkConfig.java new file mode 100644 index 0000000..f26d061 --- /dev/null +++ b/src/main/java/growthcraft/milk/init/config/GrowthcraftMilkConfig.java @@ -0,0 +1,92 @@ +package growthcraft.milk.init.config; + +import com.electronwill.nightconfig.core.file.CommentedFileConfig; +import com.electronwill.nightconfig.core.io.WritingMode; +import net.minecraftforge.common.ForgeConfigSpec; +import net.minecraftforge.fml.loading.FMLPaths; + +import java.io.File; + +public class GrowthcraftMilkConfig { + + public static final ForgeConfigSpec.Builder SERVER_BUILDER = new ForgeConfigSpec.Builder(); + public static final ForgeConfigSpec SERVER; + + public static final String SERVER_CONFIG = "growthcraft-milk-server.toml"; + + private static final String CATEGORY_CHURN = "churn"; + private static final String CATEGORY_MIXING_VAT = "mixing_vat"; + private static final String CATEGORY_PANCHEON = "pancheon"; + private static final String CATEGORY_LOOT_CHANCES = "loot_modifiers"; + + private static ForgeConfigSpec.BooleanValue churnGuiEnabled; + private static ForgeConfigSpec.BooleanValue mixingVatGuiEnabled; + private static ForgeConfigSpec.BooleanValue mixingVatConsumeActivationItem; + private static ForgeConfigSpec.BooleanValue pancheonGuiEnabled; + private static ForgeConfigSpec.BooleanValue stomachLootEnabled; + private static ForgeConfigSpec.IntValue stomachLootChance; + + static { + initServerConfig(SERVER_BUILDER); + SERVER = SERVER_BUILDER.build(); + } + + private GrowthcraftMilkConfig() { + /* Prevent generation of public constructor */ + } + + public static void loadConfig() { + loadConfig(SERVER, FMLPaths.CONFIGDIR.get().resolve(SERVER_CONFIG).toString()); + } + + public static void loadConfig(ForgeConfigSpec configSpec, String path) { + final CommentedFileConfig fileConfig = CommentedFileConfig.builder( + new File(path)).sync().autosave().writingMode(WritingMode.REPLACE).build(); + + fileConfig.load(); + configSpec.setConfig(fileConfig); + } + + public static void initServerConfig(ForgeConfigSpec.Builder specBuilder) { + // Init Server Side Configuration + churnGuiEnabled = specBuilder + .comment("Set to true to allow users to access the Churn GUI.") + .define(String.format("%s.%s", CATEGORY_CHURN, "guiEnabled"), true); + mixingVatGuiEnabled = specBuilder + .comment("Set to true to allow users to access the Mixing Vat GUI.") + .define(String.format("%s.%s", CATEGORY_MIXING_VAT, "guiEnabled"), true); + mixingVatConsumeActivationItem = specBuilder + .comment("Set to true to allow users to access the Mixing Vat GUI.") + .define(String.format("%s.%s", CATEGORY_MIXING_VAT, "consumeMixingVatActivator"), false); + pancheonGuiEnabled = specBuilder + .comment("Set to true to allow users to access the Pancheon GUI.") + .define(String.format("%s.%s", CATEGORY_PANCHEON, "guiEnabled"), true); + stomachLootEnabled = specBuilder + .comment("Set to true to enable looting of stomach from cows.") + .define(String.format("%s.%s", CATEGORY_LOOT_CHANCES, "stomachLootEnabled"), true); + + stomachLootChance = specBuilder + .comment("Chance to loot a stomach from a cow. stomachLootEnabled must be set to true.") + .defineInRange(String.format("%s.%s", CATEGORY_LOOT_CHANCES, "stomachLootChance"), 5, 0, 100); + } + + public static boolean isChurnGuiEnabled() { + return churnGuiEnabled.get(); + } + + public static boolean isPancheonGuiEnabled() { + return pancheonGuiEnabled.get(); + } + + public static boolean isMixingVatGuiEnabled() { + return mixingVatGuiEnabled.get(); + } + + public static boolean isConsumeMixingVatActivator() { + return mixingVatConsumeActivationItem.get(); + } + + public static boolean isStomachLootingEnabled() { return stomachLootEnabled.get(); } + + public static int getStomachLootChance() { return stomachLootChance.get();} +} diff --git a/src/main/java/growthcraft/milk/item/CheeseCurdsDrainedItem.java b/src/main/java/growthcraft/milk/item/CheeseCurdsDrainedItem.java new file mode 100644 index 0000000..869e109 --- /dev/null +++ b/src/main/java/growthcraft/milk/item/CheeseCurdsDrainedItem.java @@ -0,0 +1,23 @@ +package growthcraft.milk.item; + +import growthcraft.lib.item.GrowthcraftItem; + +import java.awt.*; + +public class CheeseCurdsDrainedItem extends GrowthcraftItem { + + private final int color; + + public CheeseCurdsDrainedItem(Color color) { + super(); + this.color = color.getRGB(); + } + + public int getColor() { + return this.color; + } + + public int getColor(int i) { + return i == 0 ? this.color : 0xFFFFFF; + } +} diff --git a/src/main/java/growthcraft/milk/item/MilkingBucketItem.java b/src/main/java/growthcraft/milk/item/MilkingBucketItem.java new file mode 100644 index 0000000..89a7a84 --- /dev/null +++ b/src/main/java/growthcraft/milk/item/MilkingBucketItem.java @@ -0,0 +1,217 @@ +package growthcraft.milk.item; + +import growthcraft.core.shared.Reference; +import growthcraft.milk.init.GrowthcraftMilkFluids; +import growthcraft.milk.init.GrowthcraftMilkItems; +import growthcraft.milk.init.GrowthcraftMilkTags; +import net.minecraft.advancements.CriteriaTriggers; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.core.particles.ParticleTypes; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.sounds.SoundSource; +import net.minecraft.stats.Stats; +import net.minecraft.tags.FluidTags; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.InteractionResultHolder; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.DispensibleContainerItem; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.ItemUtils; +import net.minecraft.world.level.ClipContext; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.LevelAccessor; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.BucketPickup; +import net.minecraft.world.level.block.LiquidBlockContainer; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.gameevent.GameEvent; +import net.minecraft.world.level.material.FlowingFluid; +import net.minecraft.world.level.material.Fluid; +import net.minecraft.world.level.material.Fluids; +import net.minecraft.world.level.material.Material; +import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.world.phys.HitResult; + +import javax.annotation.Nullable; +import java.security.SecureRandom; +import java.util.function.Supplier; + +public class MilkingBucketItem extends Item implements DispensibleContainerItem { + + private final Fluid content; + private final Supplier fluidSupplier; + + public MilkingBucketItem(Fluid fluid) { + super(getInitProperties()); + this.content = fluid; + this.fluidSupplier = this.content.delegate; + } + + public MilkingBucketItem(Fluid fluid, Item.Properties properties) { + super(properties); + this.content = fluid; + this.fluidSupplier = this.content.delegate; + } + + public MilkingBucketItem(Supplier fluidSupplier, Properties properties) { + super(properties); + this.content = fluidSupplier.get(); + this.fluidSupplier = fluidSupplier; + } + + private static Properties getInitProperties() { + Properties properties = new Properties(); + properties.stacksTo(16); + properties.tab(Reference.ITEM_GROUP); + return properties; + } + + @Override + public InteractionResult interactLivingEntity(ItemStack itemStack, Player player, LivingEntity livingEntity, InteractionHand hand) { + if (livingEntity.level.isClientSide) return InteractionResult.PASS; + + if (livingEntity.getType().is(GrowthcraftMilkTags.EntityTypes.MILKABLE)) { + player.getInventory().add(new ItemStack(GrowthcraftMilkFluids.MILK.get().getBucket())); + player.getItemInHand(hand).shrink(1); + } + + return super.interactLivingEntity(itemStack, player, livingEntity, hand); + } + + + public InteractionResultHolder use(Level p_40703_, Player p_40704_, InteractionHand p_40705_) { + ItemStack itemstack = p_40704_.getItemInHand(p_40705_); + BlockHitResult blockhitresult = getPlayerPOVHitResult(p_40703_, p_40704_, this.content == Fluids.EMPTY ? ClipContext.Fluid.SOURCE_ONLY : ClipContext.Fluid.NONE); + InteractionResultHolder ret = net.minecraftforge.event.ForgeEventFactory.onBucketUse(p_40704_, p_40703_, itemstack, blockhitresult); + if (ret != null) return ret; + if (blockhitresult.getType() == HitResult.Type.MISS) { + return InteractionResultHolder.pass(itemstack); + } else if (blockhitresult.getType() != HitResult.Type.BLOCK) { + return InteractionResultHolder.pass(itemstack); + } else { + BlockPos blockpos = blockhitresult.getBlockPos(); + Direction direction = blockhitresult.getDirection(); + BlockPos blockpos1 = blockpos.relative(direction); + if (p_40703_.mayInteract(p_40704_, blockpos) && p_40704_.mayUseItemAt(blockpos1, direction, itemstack)) { + if (this.content == Fluids.EMPTY) { + BlockState blockstate1 = p_40703_.getBlockState(blockpos); + if (blockstate1.getBlock() instanceof BucketPickup) { + BucketPickup bucketpickup = (BucketPickup)blockstate1.getBlock(); + ItemStack itemstack1 = bucketpickup.pickupBlock(p_40703_, blockpos, blockstate1); + if (!itemstack1.isEmpty()) { + p_40704_.awardStat(Stats.ITEM_USED.get(this)); + bucketpickup.getPickupSound(blockstate1).ifPresent((p_150709_) -> { + p_40704_.playSound(p_150709_, 1.0F, 1.0F); + }); + p_40703_.gameEvent(p_40704_, GameEvent.FLUID_PICKUP, blockpos); + ItemStack itemstack2 = ItemUtils.createFilledResult(itemstack, p_40704_, itemstack1); + if (!p_40703_.isClientSide) { + CriteriaTriggers.FILLED_BUCKET.trigger((ServerPlayer)p_40704_, itemstack1); + } + + return InteractionResultHolder.sidedSuccess(itemstack2, p_40703_.isClientSide()); + } + } + + return InteractionResultHolder.fail(itemstack); + } else { + BlockState blockstate = p_40703_.getBlockState(blockpos); + BlockPos blockpos2 = canBlockContainFluid(p_40703_, blockpos, blockstate) ? blockpos : blockpos1; + if (this.emptyContents(p_40704_, p_40703_, blockpos2, blockhitresult)) { + this.checkExtraContent(p_40704_, p_40703_, itemstack, blockpos2); + if (p_40704_ instanceof ServerPlayer) { + CriteriaTriggers.PLACED_BLOCK.trigger((ServerPlayer)p_40704_, blockpos2, itemstack); + } + + p_40704_.awardStat(Stats.ITEM_USED.get(this)); + return InteractionResultHolder.sidedSuccess(getEmptySuccessItem(itemstack, p_40704_), p_40703_.isClientSide()); + } else { + return InteractionResultHolder.fail(itemstack); + } + } + } else { + return InteractionResultHolder.fail(itemstack); + } + } + } + + public static ItemStack getEmptySuccessItem(ItemStack p_40700_, Player p_40701_) { + return !p_40701_.getAbilities().instabuild ? new ItemStack(GrowthcraftMilkItems.MILKING_BUCKET_IRON.get()) : p_40700_; + } + + public void checkExtraContent(@javax.annotation.Nullable Player p_150711_, Level p_150712_, ItemStack p_150713_, BlockPos p_150714_) { + } + + public boolean emptyContents(@javax.annotation.Nullable Player p_150716_, Level p_150717_, BlockPos p_150718_, @javax.annotation.Nullable BlockHitResult p_150719_) { + if (!(this.content instanceof FlowingFluid)) { + return false; + } else { + SecureRandom random = new SecureRandom(); + + BlockState blockstate = p_150717_.getBlockState(p_150718_); + Block block = blockstate.getBlock(); + Material material = blockstate.getMaterial(); + boolean flag = blockstate.canBeReplaced(this.content); + boolean flag1 = blockstate.isAir() || flag || block instanceof LiquidBlockContainer && ((LiquidBlockContainer)block).canPlaceLiquid(p_150717_, p_150718_, blockstate, this.content); + if (!flag1) { + return p_150719_ != null && this.emptyContents(p_150716_, p_150717_, p_150719_.getBlockPos().relative(p_150719_.getDirection()), (BlockHitResult)null); + } else if (p_150717_.dimensionType().ultraWarm() && this.content.is(FluidTags.WATER)) { + int i = p_150718_.getX(); + int j = p_150718_.getY(); + int k = p_150718_.getZ(); + p_150717_.playSound(p_150716_, p_150718_, SoundEvents.FIRE_EXTINGUISH, SoundSource.BLOCKS, 0.5F, 2.6F + (p_150717_.random.nextFloat() - p_150717_.random.nextFloat()) * 0.8F); + + for(int l = 0; l < 8; ++l) { + p_150717_.addParticle(ParticleTypes.LARGE_SMOKE, i + random.nextDouble(), j + random.nextDouble(), k + random.nextDouble(), 0.0D, 0.0D, 0.0D); + } + + return true; + } else if (block instanceof LiquidBlockContainer && ((LiquidBlockContainer)block).canPlaceLiquid(p_150717_,p_150718_,blockstate,content)) { + ((LiquidBlockContainer)block).placeLiquid(p_150717_, p_150718_, blockstate, ((FlowingFluid)this.content).getSource(false)); + this.playEmptySound(p_150716_, p_150717_, p_150718_); + return true; + } else { + if (!p_150717_.isClientSide && flag && !material.isLiquid()) { + p_150717_.destroyBlock(p_150718_, true); + } + + if (!p_150717_.setBlock(p_150718_, this.content.defaultFluidState().createLegacyBlock(), 11) && !blockstate.getFluidState().isSource()) { + return false; + } else { + this.playEmptySound(p_150716_, p_150717_, p_150718_); + return true; + } + } + } + } + + protected void playEmptySound(@javax.annotation.Nullable Player p_40696_, LevelAccessor p_40697_, BlockPos p_40698_) { + SoundEvent soundevent = this.content.getAttributes().getEmptySound(p_40697_, p_40698_); + if(soundevent == null) soundevent = this.content.is(FluidTags.LAVA) ? SoundEvents.BUCKET_EMPTY_LAVA : SoundEvents.BUCKET_EMPTY; + p_40697_.playSound(p_40696_, p_40698_, soundevent, SoundSource.BLOCKS, 1.0F, 1.0F); + p_40697_.gameEvent(p_40696_, GameEvent.FLUID_PLACE, p_40698_); + } + + @Override + public net.minecraftforge.common.capabilities.ICapabilityProvider initCapabilities(ItemStack stack, @Nullable net.minecraft.nbt.CompoundTag nbt) { + if (this.getClass() == MilkingBucketItem.class) + return new net.minecraftforge.fluids.capability.wrappers.FluidBucketWrapper(stack); + else + return super.initCapabilities(stack, nbt); + } + + public Fluid getFluid() { return fluidSupplier.get(); } + + private boolean canBlockContainFluid(Level worldIn, BlockPos posIn, BlockState blockstate) + { + return blockstate.getBlock() instanceof LiquidBlockContainer && ((LiquidBlockContainer)blockstate.getBlock()).canPlaceLiquid(worldIn, posIn, blockstate, this.content); + } + + +} diff --git a/src/main/java/growthcraft/milk/item/ThistleSeedItem.java b/src/main/java/growthcraft/milk/item/ThistleSeedItem.java new file mode 100644 index 0000000..707e4b6 --- /dev/null +++ b/src/main/java/growthcraft/milk/item/ThistleSeedItem.java @@ -0,0 +1,53 @@ +package growthcraft.milk.item; + +import growthcraft.lib.item.GrowthcraftItem; +import growthcraft.milk.init.GrowthcraftMilkBlocks; +import net.minecraft.core.BlockPos; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.sounds.SoundSource; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.context.UseOnContext; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; + +public class ThistleSeedItem extends GrowthcraftItem { + + public ThistleSeedItem() { + super(); + } + + @Override + public InteractionResult useOn(UseOnContext context) { + Level level = context.getLevel(); + BlockPos blockPos = context.getClickedPos(); + Block tagetBlock = level.getBlockState(blockPos).getBlock(); + + if(tagetBlock == Blocks.FARMLAND) { + Player player = context.getPlayer(); + + // Trigger a sound event + level.playSound(player, blockPos, + SoundEvents.CROP_PLANTED, SoundSource.BLOCKS, + 1.0F, 1.0F + ); + + // Server-side only + if(!level.isClientSide) { + level.setBlock( + blockPos.above(), + GrowthcraftMilkBlocks.THISTLE_CROP.get().defaultBlockState(), + Block.UPDATE_ALL_IMMEDIATE + ); + if(player != null) { + context.getItemInHand().shrink(1); + } + } + + return InteractionResult.SUCCESS; + } else { + return super.useOn(context); + } + } +} diff --git a/src/main/java/growthcraft/milk/lib/networking/GrowthcraftMilkMessages.java b/src/main/java/growthcraft/milk/lib/networking/GrowthcraftMilkMessages.java new file mode 100644 index 0000000..9e14522 --- /dev/null +++ b/src/main/java/growthcraft/milk/lib/networking/GrowthcraftMilkMessages.java @@ -0,0 +1,64 @@ +package growthcraft.milk.lib.networking; + +import growthcraft.milk.lib.networking.packet.ChurnFluidTankSyncPacket; +import growthcraft.milk.lib.networking.packet.MixingVatFluidSyncPacket; +import growthcraft.milk.lib.networking.packet.PancheonFluidSyncPacket; +import growthcraft.milk.shared.Reference; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.level.ServerPlayer; +import net.minecraftforge.network.NetworkDirection; +import net.minecraftforge.network.NetworkRegistry; +import net.minecraftforge.network.PacketDistributor; +import net.minecraftforge.network.simple.SimpleChannel; + +public class GrowthcraftMilkMessages { + private static SimpleChannel INSTANCE; + + private static int packetID = 0; + + private static int id() { + return packetID++; + } + + public static void register() { + SimpleChannel net = NetworkRegistry.ChannelBuilder + .named(new ResourceLocation(Reference.MODID, "messages")) + .networkProtocolVersion( () -> "1.0" ) + .clientAcceptedVersions( s -> true ) + .serverAcceptedVersions( s -> true ) + .simpleChannel(); + + INSTANCE = net; + + net.messageBuilder(MixingVatFluidSyncPacket.class, id(), NetworkDirection.PLAY_TO_CLIENT) + .decoder(MixingVatFluidSyncPacket::new) + .encoder(MixingVatFluidSyncPacket::toBytes) + .consumer(MixingVatFluidSyncPacket::handle) + .add(); + + net.messageBuilder(PancheonFluidSyncPacket.class, id(), NetworkDirection.PLAY_TO_CLIENT) + .decoder(PancheonFluidSyncPacket::new) + .encoder(PancheonFluidSyncPacket::toBytes) + .consumer(PancheonFluidSyncPacket::handle) + .add(); + + net.messageBuilder(ChurnFluidTankSyncPacket.class, id(), NetworkDirection.PLAY_TO_CLIENT) + .decoder(ChurnFluidTankSyncPacket::new) + .encoder(ChurnFluidTankSyncPacket::toBytes) + .consumer(ChurnFluidTankSyncPacket::handle) + .add(); + } + + public static void sendToClients(MSG message) { + INSTANCE.send(PacketDistributor.ALL.noArg(), message); + } + + public static void sendToServer(MSG message) { + INSTANCE.sendToServer(message); + } + + public static void sendToPlayer(MSG message, ServerPlayer player) { + INSTANCE.send(PacketDistributor.PLAYER.with( () -> player), message); + } + +} diff --git a/src/main/java/growthcraft/milk/lib/networking/packet/ChurnFluidTankSyncPacket.java b/src/main/java/growthcraft/milk/lib/networking/packet/ChurnFluidTankSyncPacket.java new file mode 100644 index 0000000..186a2e6 --- /dev/null +++ b/src/main/java/growthcraft/milk/lib/networking/packet/ChurnFluidTankSyncPacket.java @@ -0,0 +1,40 @@ +package growthcraft.milk.lib.networking.packet; + +import growthcraft.lib.networking.packet.FluidTankSyncPacket; +import growthcraft.milk.block.entity.ChurnBlockEntity; +import growthcraft.milk.screen.container.ChurnMenu; +import net.minecraft.client.Minecraft; +import net.minecraft.core.BlockPos; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.network.NetworkEvent; + +import java.util.function.Supplier; + +public class ChurnFluidTankSyncPacket extends FluidTankSyncPacket { + + public ChurnFluidTankSyncPacket(int tankID, FluidStack fluidStack, BlockPos blockPos) { + super(tankID, fluidStack, blockPos); + } + + public ChurnFluidTankSyncPacket(FriendlyByteBuf byteBuf) { + super(byteBuf); + } + + public boolean handle(Supplier supplier) { + NetworkEvent.Context context = supplier.get(); + context.enqueueWork(() -> { + if (Minecraft.getInstance().level.getBlockEntity(this.blockPos) instanceof ChurnBlockEntity blockEntity) { + blockEntity.setFluidStackInTank(this.tankID, this.fluidStack); + + if (Minecraft.getInstance().player.containerMenu instanceof ChurnMenu menu && + menu.getBlockEntity().getBlockPos().equals(this.blockPos)) { + menu.setFluid(this.tankID, this.fluidStack); + } + } + + } + ); + return true; + } +} diff --git a/src/main/java/growthcraft/milk/lib/networking/packet/MixingVatFluidSyncPacket.java b/src/main/java/growthcraft/milk/lib/networking/packet/MixingVatFluidSyncPacket.java new file mode 100644 index 0000000..37ac416 --- /dev/null +++ b/src/main/java/growthcraft/milk/lib/networking/packet/MixingVatFluidSyncPacket.java @@ -0,0 +1,52 @@ +package growthcraft.milk.lib.networking.packet; + +import growthcraft.milk.block.entity.MixingVatBlockEntity; +import growthcraft.milk.screen.container.MixingVatMenu; +import net.minecraft.client.Minecraft; +import net.minecraft.client.player.LocalPlayer; +import net.minecraft.core.BlockPos; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.network.NetworkEvent; + +import java.util.function.Supplier; + +public class MixingVatFluidSyncPacket { + private FluidStack fluidStack; + private int tankID; + + private final BlockPos blockPos; + + public MixingVatFluidSyncPacket(int tankID, FluidStack fluidStack, BlockPos blockPos) { + this.fluidStack = fluidStack; + this.tankID = tankID; + this.blockPos = blockPos; + } + + public MixingVatFluidSyncPacket(FriendlyByteBuf byteBuf) { + this.fluidStack = byteBuf.readFluidStack(); + this.blockPos = byteBuf.readBlockPos(); + } + + public void toBytes(FriendlyByteBuf byteBuf) { + byteBuf.writeFluidStack(this.fluidStack); + byteBuf.writeBlockPos(this.blockPos); + } + + public boolean handle(Supplier supplier) { + NetworkEvent.Context context = supplier.get(); + context.enqueueWork( () -> { + if(Minecraft.getInstance().level.getBlockEntity(this.blockPos) instanceof MixingVatBlockEntity blockEntity) { + blockEntity.setFluidStackInTank(this.tankID, this.fluidStack.copy()); + LocalPlayer player = Minecraft.getInstance().player; + + if(player.containerMenu instanceof MixingVatMenu menu && + menu.getBlockEntity().getBlockPos().equals(this.blockPos)) { + menu.setFluid(this.tankID, this.fluidStack.copy()); + } + } + } + ); + return true; + } +} diff --git a/src/main/java/growthcraft/milk/lib/networking/packet/PancheonFluidSyncPacket.java b/src/main/java/growthcraft/milk/lib/networking/packet/PancheonFluidSyncPacket.java new file mode 100644 index 0000000..42c0524 --- /dev/null +++ b/src/main/java/growthcraft/milk/lib/networking/packet/PancheonFluidSyncPacket.java @@ -0,0 +1,52 @@ +package growthcraft.milk.lib.networking.packet; + +import growthcraft.milk.block.entity.PancheonBlockEntity; +import growthcraft.milk.screen.container.PancheonMenu; +import net.minecraft.client.Minecraft; +import net.minecraft.client.player.LocalPlayer; +import net.minecraft.core.BlockPos; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.network.NetworkEvent; + +import java.util.function.Supplier; + +public class PancheonFluidSyncPacket { + private FluidStack fluidStack; + private int tankID; + + private final BlockPos blockPos; + + public PancheonFluidSyncPacket(int tankID, FluidStack fluidStack, BlockPos blockPos) { + this.fluidStack = fluidStack; + this.tankID = tankID; + this.blockPos = blockPos; + } + + public PancheonFluidSyncPacket(FriendlyByteBuf byteBuf) { + this.fluidStack = byteBuf.readFluidStack(); + this.blockPos = byteBuf.readBlockPos(); + } + + public void toBytes(FriendlyByteBuf byteBuf) { + byteBuf.writeFluidStack(this.fluidStack); + byteBuf.writeBlockPos(this.blockPos); + } + + public boolean handle(Supplier supplier) { + NetworkEvent.Context context = supplier.get(); + context.enqueueWork( () -> { + if(Minecraft.getInstance().level.getBlockEntity(this.blockPos) instanceof PancheonBlockEntity blockEntity) { + blockEntity.setFluidStackInTank(this.tankID, this.fluidStack); + LocalPlayer player = Minecraft.getInstance().player; + + if(player.containerMenu instanceof PancheonMenu menu && + menu.getBlockEntity().getBlockPos().equals(this.blockPos)) { + menu.setFluid(this.tankID, this.fluidStack); + } + } + } + ); + return true; + } +} diff --git a/src/main/java/growthcraft/milk/recipe/CheesePressRecipe.java b/src/main/java/growthcraft/milk/recipe/CheesePressRecipe.java new file mode 100644 index 0000000..c3f0f45 --- /dev/null +++ b/src/main/java/growthcraft/milk/recipe/CheesePressRecipe.java @@ -0,0 +1,172 @@ +package growthcraft.milk.recipe; + +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import com.google.gson.JsonObject; + +import growthcraft.milk.GrowthcraftMilk; +import growthcraft.milk.shared.Reference; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.GsonHelper; +import net.minecraft.world.SimpleContainer; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.crafting.Recipe; +import net.minecraft.world.item.crafting.RecipeSerializer; +import net.minecraft.world.item.crafting.RecipeType; +import net.minecraft.world.level.Level; +import net.minecraftforge.common.crafting.CraftingHelper; + +public class CheesePressRecipe implements Recipe { + private final ItemStack inputItemStack; + private final ItemStack outputItemStack; + private final ItemStack sliceItemStack; + private final int processingTime; + private final ResourceLocation recipeId; + + public CheesePressRecipe(ResourceLocation recipeId, ItemStack input, ItemStack result, ItemStack slice, int ticks) { + this.recipeId = recipeId; + this.inputItemStack = input; + this.outputItemStack = result; + this.sliceItemStack = slice; + this.processingTime = ticks; + } + + @Override + public boolean matches(SimpleContainer container, Level level) { + return false; + } + + public boolean matches(ItemStack itemStack) { + return this.inputItemStack.getItem() == itemStack.getItem() + && this.inputItemStack.getCount() == itemStack.getCount(); + } + + public boolean matchesOutput(ItemStack itemStack) { + return this.outputItemStack.getItem() == itemStack.getItem() + && this.outputItemStack.getCount() == itemStack.getCount(); + } + + @Override + public ItemStack assemble(SimpleContainer container) { + return this.outputItemStack; + } + + @Override + public boolean canCraftInDimensions(int width, int height) { + return true; + } + + @Override + public ItemStack getResultItem() { + return this.getResultItemStack(); + } + + public ItemStack getResultItemStack() { + return this.outputItemStack; + } + + public ItemStack getInputItemStack() { + return inputItemStack; + } + + public ItemStack getSliceItemStack() { + return sliceItemStack; + } + + public int getProcessingTime() { + return processingTime; + } + + @Override + public ResourceLocation getId() { + return this.recipeId; + } + + @Override + public RecipeSerializer getSerializer() { + return Serializer.INSTANCE; + } + + @Override + public RecipeType getType() { + return Type.INSTANCE; + } + + public static class Type implements RecipeType { + private Type() { /* Prevent default constructor */ } + + public static final CheesePressRecipe.Type INSTANCE = new CheesePressRecipe.Type(); + public static final String ID = Reference.UnlocalizedName.CHEESE_PRESS_RECIPE; + } + + public static class Serializer implements RecipeSerializer { + + public static final CheesePressRecipe.Serializer INSTANCE = new CheesePressRecipe.Serializer(); + public static final ResourceLocation ID = new ResourceLocation( + Reference.MODID, + Reference.UnlocalizedName.CHEESE_PRESS_RECIPE); + private ResourceLocation name; + + @Override + public @NotNull CheesePressRecipe fromJson(ResourceLocation recipeId, JsonObject json) { + ItemStack ingredientItemStack = CraftingHelper.getItemStack(GsonHelper.getAsJsonObject(json, "ingredient"), false); + ItemStack resultItemStack = CraftingHelper.getItemStack(GsonHelper.getAsJsonObject(json, "result_item"), false); + ItemStack sliceItemStack = CraftingHelper.getItemStack(GsonHelper.getAsJsonObject(json, "slice"), false); + + int processingTime = GsonHelper.getAsInt(json, "processing_time", 1); + + return new CheesePressRecipe(recipeId, ingredientItemStack, resultItemStack, sliceItemStack, processingTime); + } + + @Override + public @Nullable CheesePressRecipe fromNetwork(ResourceLocation recipeId, FriendlyByteBuf buffer) { + try { + ItemStack ingredientItemStack = buffer.readItem(); + ItemStack resultItemStack = buffer.readItem(); + ItemStack sliceItemStack = buffer.readItem(); + int processingTime = buffer.readVarInt(); + + return new CheesePressRecipe(recipeId, ingredientItemStack, resultItemStack, sliceItemStack, processingTime); + } catch (Exception ex) { + String message = String.format("Unable to read recipe (%s) from network buffer.", recipeId); + GrowthcraftMilk.LOGGER.error(message); + throw ex; + } + } + + @Override + public void toNetwork(FriendlyByteBuf buffer, CheesePressRecipe recipe) { + buffer.writeItemStack(recipe.getInputItemStack(), false); + buffer.writeItemStack(recipe.getResultItemStack(), false); + buffer.writeItemStack(recipe.getSliceItemStack(), false); + buffer.writeVarInt(recipe.getProcessingTime()); + + } + + @Override + public RecipeSerializer setRegistryName(ResourceLocation name) { + this.name = name; + return this; + } + + @Override + public ResourceLocation getRegistryName() { + return name; + } + + @Override + public Class> getRegistryType() { + // TODO Auto-generated method stub + return Serializer.>castClass(RecipeSerializer.class); + } + + private static Class castClass(Class cls) { + return (Class) cls; + } + + } + + +} diff --git a/src/main/java/growthcraft/milk/recipe/ChurnRecipe.java b/src/main/java/growthcraft/milk/recipe/ChurnRecipe.java new file mode 100644 index 0000000..51508c2 --- /dev/null +++ b/src/main/java/growthcraft/milk/recipe/ChurnRecipe.java @@ -0,0 +1,179 @@ +package growthcraft.milk.recipe; + +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import com.google.gson.JsonObject; + +import growthcraft.lib.utils.CraftingUtils; +import growthcraft.milk.GrowthcraftMilk; +import growthcraft.milk.shared.Reference; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.GsonHelper; +import net.minecraft.world.SimpleContainer; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.crafting.Recipe; +import net.minecraft.world.item.crafting.RecipeSerializer; +import net.minecraft.world.item.crafting.RecipeType; +import net.minecraft.world.level.Level; +import net.minecraftforge.common.crafting.CraftingHelper; +import net.minecraftforge.fluids.FluidStack; + +public class ChurnRecipe implements Recipe { + + private final ResourceLocation recipeId; + private final FluidStack inputFluidStack; + private final FluidStack outputFluidStack; + private final ItemStack resultItemStack; + private final int byProductChance; + private final int plunges; + + public ChurnRecipe(ResourceLocation recipeId, FluidStack inputFluidStack, FluidStack outputFluidStack, ItemStack result, int byProductChance, int plunges) { + this.recipeId = recipeId; + this.inputFluidStack = inputFluidStack; + this.outputFluidStack = outputFluidStack; + this.resultItemStack = result; + this.plunges = plunges; + this.byProductChance = byProductChance; + } + + @Override + public ItemStack assemble(SimpleContainer simpleContainer) { + return this.resultItemStack; + } + + @Override + public boolean canCraftInDimensions(int width, int height) { + return true; + } + + @Override + public boolean matches(SimpleContainer simpleContainer, Level level) { + return false; + } + + public boolean matches(FluidStack fluidStack) { + return this.inputFluidStack.getFluid() == fluidStack.getFluid() + && this.inputFluidStack.getAmount() <= fluidStack.getAmount(); + } + + public FluidStack getInputFluidStack() { + return inputFluidStack; + } + + public FluidStack getOutputFluidStack() { + return this.outputFluidStack; + } + + public ItemStack getResultItemStack() { + return this.resultItemStack; + } + + public int getPlungesNeeded() { + return this.plunges; + } + + @Override + public ItemStack getResultItem() { + return this.resultItemStack; + } + + @Override + public ResourceLocation getId() { + return this.recipeId; + } + + @Override + public RecipeSerializer getSerializer() { + return Serializer.INSTANCE; + } + + @Override + public RecipeType getType() { + return Type.INSTANCE; + } + + public int getByProductChance() { + return this.byProductChance; + } + + public static class Type implements RecipeType { + private Type() { /* Prevent default constructor */ } + + public static final ChurnRecipe.Type INSTANCE = new ChurnRecipe.Type(); + public static final String ID = Reference.UnlocalizedName.CHURN_RECIPE; + } + + + public static class Serializer implements RecipeSerializer { + + public static final ChurnRecipe.Serializer INSTANCE = new ChurnRecipe.Serializer(); + public static final ResourceLocation ID = new ResourceLocation( + Reference.MODID, + Reference.UnlocalizedName.CHURN_RECIPE); + private ResourceLocation name; + + @Override + public @NotNull ChurnRecipe fromJson(ResourceLocation recipeId, JsonObject json) { + FluidStack inputFluid = CraftingUtils.getFluidStack(GsonHelper.getAsJsonObject(json, "input_fluid")); + FluidStack outputFluid = CraftingUtils.getFluidStack(GsonHelper.getAsJsonObject(json, "output_fluid")); + + ItemStack byProduct = CraftingHelper.getItemStack(GsonHelper.getAsJsonObject(json, "by_product"), false); + + int plunges = GsonHelper.getAsInt(json, "plunges", 7); + int byProductChance = GsonHelper.getAsInt(json, "by_product_chance", 100); + + return new ChurnRecipe(recipeId, inputFluid, outputFluid, byProduct, byProductChance, plunges); + } + + @Override + public @Nullable ChurnRecipe fromNetwork(ResourceLocation recipeId, FriendlyByteBuf buffer) { + try { + ItemStack byProduct = buffer.readItem(); + FluidStack inputFluid = buffer.readFluidStack(); + FluidStack outputFluid = buffer.readFluidStack(); + int plungesNeeded = buffer.readVarInt(); + int byProductChange = buffer.readVarInt(); + + return new ChurnRecipe(recipeId, inputFluid, outputFluid, byProduct, byProductChange, plungesNeeded); + } catch (Exception ex) { + String message = String.format("Unable to read recipe (%s) from network buffer.", recipeId); + GrowthcraftMilk.LOGGER.error(message); + throw ex; + } + } + + @Override + public void toNetwork(FriendlyByteBuf buffer, ChurnRecipe recipe) { + buffer.writeItemStack(recipe.getResultItemStack(), false); + buffer.writeFluidStack(recipe.getInputFluidStack()); + buffer.writeFluidStack(recipe.getOutputFluidStack()); + buffer.writeVarInt(recipe.getPlungesNeeded()); + buffer.writeVarInt(recipe.getByProductChance()); + + } + + @Override + public RecipeSerializer setRegistryName(ResourceLocation name) { + this.name = name; + return this; + } + + @Override + public ResourceLocation getRegistryName() { + return name; + } + + @Override + public Class> getRegistryType() { + // TODO Auto-generated method stub + return Serializer.>castClass(RecipeSerializer.class); + } + + private static Class castClass(Class cls) { + return (Class) cls; + } + + } +} diff --git a/src/main/java/growthcraft/milk/recipe/MixingVatFluidRecipe.java b/src/main/java/growthcraft/milk/recipe/MixingVatFluidRecipe.java new file mode 100644 index 0000000..d0305d5 --- /dev/null +++ b/src/main/java/growthcraft/milk/recipe/MixingVatFluidRecipe.java @@ -0,0 +1,288 @@ +package growthcraft.milk.recipe; + +import java.util.ArrayList; +import java.util.List; + +import org.jetbrains.annotations.Nullable; + +import com.google.gson.JsonArray; +import com.google.gson.JsonObject; + +import growthcraft.lib.utils.CraftingUtils; +import growthcraft.lib.utils.RecipeUtils; +import growthcraft.milk.GrowthcraftMilk; +import growthcraft.milk.shared.Reference; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.GsonHelper; +import net.minecraft.world.SimpleContainer; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.crafting.Recipe; +import net.minecraft.world.item.crafting.RecipeSerializer; +import net.minecraft.world.item.crafting.RecipeType; +import net.minecraft.world.level.Level; +import net.minecraftforge.common.crafting.CraftingHelper; +import net.minecraftforge.fluids.FluidStack; + +public class MixingVatFluidRecipe implements Recipe { + private final ResourceLocation recipeId; + private final RecipeUtils.Category category; + private final ItemStack activationTool; + private final List ingredients; + private final FluidStack inputFluidStack; + private final int processingTime; + + private final FluidStack reagentFluidStack; + private final FluidStack outputFluidStack; + private final FluidStack wasteFluidStack; + + public MixingVatFluidRecipe(ResourceLocation recipeId, RecipeUtils.Category category, + FluidStack inputFluidStack, FluidStack reagentFluidStack, + List ingredients, int processingTime, + FluidStack outputFluidStack, FluidStack wasteFluidStack, + ItemStack activationTool) { + this.recipeId = recipeId; + this.category = category; + this.inputFluidStack = inputFluidStack; + this.reagentFluidStack = reagentFluidStack; + this.ingredients = ingredients; + this.processingTime = processingTime; + this.outputFluidStack = outputFluidStack; + this.wasteFluidStack = wasteFluidStack; + this.activationTool = activationTool; + } + + @Override + public boolean matches(SimpleContainer container, Level level) { + return false; + } + + public boolean matches(FluidStack testBaseFluidStack, FluidStack testReagentFluidStack, + List testIngredients) { + + boolean inputFluidTypeMatches = testBaseFluidStack.getFluid() == this.getInputFluidStack().getFluid(); + boolean inputFluidAmountMatches = testBaseFluidStack.getAmount() == this.getInputFluidStack().getAmount(); + + boolean reagentFluidTypeMatches = testReagentFluidStack.getFluid() == this.getReagentFluidStack().getFluid(); + boolean reagentFluidAmountMatches = testReagentFluidStack.getAmount() == this.getReagentFluidStack().getAmount(); + + boolean fluidMatches = inputFluidTypeMatches && inputFluidAmountMatches + && reagentFluidTypeMatches && reagentFluidAmountMatches; + + boolean ingredientMatches = false; + + if (this.getIngredientList().size() == testIngredients.size()) { + int itemCount = this.getIngredientList().size(); + int matchCount = 0; + for (int i = 0; i < this.getIngredientList().size(); i++) { + if (this.getIngredientList().get(i).getItem() == testIngredients.get(i).getItem() && + this.getIngredientList().get(i).getCount() == testIngredients.get(i).getCount()) { + matchCount++; + } + } + ingredientMatches = itemCount == matchCount; + } + + return fluidMatches && ingredientMatches; + } + + public FluidStack getInputFluidStack() { + return this.inputFluidStack.copy(); + } + + public FluidStack getReagentFluidStack() { + return this.reagentFluidStack.copy(); + } + + public FluidStack getOutputFluidStack() { + return this.outputFluidStack.copy(); + } + + public FluidStack getWasteFluidStack() { + return this.wasteFluidStack.copy(); + } + + @Override + public ItemStack assemble(SimpleContainer container) { + return this.outputFluidStack.getFluid().getBucket().getDefaultInstance(); + } + + @Override + public ItemStack getResultItem() { + return this.outputFluidStack.getFluid().getBucket().getDefaultInstance(); + } + + @Override + public boolean canCraftInDimensions(int width, int height) { + return true; + } + + @Override + public ResourceLocation getId() { + return this.recipeId; + } + + public RecipeUtils.Category getCategory() { + return this.category; + } + + public ItemStack getActivationTool() { + return this.activationTool; + } + + public boolean activationToolValid(ItemStack tool) { + return this.activationTool.getItem() == tool.getItem(); + } + + public List getIngredientList() { + return ingredients; + } + + public List getIngredientItems() { + List ingredientItems = new ArrayList<>(); + this.getIngredientList().forEach( + itemStack -> ingredientItems.add(itemStack.getItem()) + ); + return ingredientItems; + } + + public int getProcessingTime() { + return processingTime; + } + + public boolean is(RecipeUtils.Category category) { + return this.category == category; + } + + @Override + public RecipeType getType() { + return Type.INSTANCE; + } + + @Override + public RecipeSerializer getSerializer() { + return Serializer.INSTANCE; + } + + public static class Type implements RecipeType { + private Type() { /* Prevent default constructor */ } + + public static final MixingVatFluidRecipe.Type INSTANCE = new MixingVatFluidRecipe.Type(); + public static final String ID = Reference.UnlocalizedName.MIXING_VAT_FLUID_RECIPE; + } + + public static class Serializer implements RecipeSerializer { + + public static final MixingVatFluidRecipe.Serializer INSTANCE = new MixingVatFluidRecipe.Serializer(); + public static final ResourceLocation ID = new ResourceLocation( + Reference.MODID, + Reference.UnlocalizedName.MIXING_VAT_FLUID_RECIPE); + private ResourceLocation name; + + private static final int maxIngredients = 3; + + @Override + public MixingVatFluidRecipe fromJson(ResourceLocation recipeId, JsonObject json) { + RecipeUtils.Category category + = RecipeUtils.Category.with(GsonHelper.getAsString(json, "result_type")); + + int processingTime = GsonHelper.getAsInt(json, "processing_time", 1200); + + FluidStack inputFluid = CraftingUtils.getFluidStack( + GsonHelper.getAsJsonObject(json, "input_fluid")); + + ItemStack activationTool = CraftingHelper.getItemStack( + GsonHelper.getAsJsonObject(json, "activation_tool"), false); + + List ingredients = new ArrayList<>(); + JsonArray jsonIngredients = GsonHelper.getAsJsonArray(json, "ingredients"); + + if (jsonIngredients.size() <= maxIngredients) { + for (int i = 0; i < jsonIngredients.size(); i++) { + ItemStack itemStack = CraftingHelper.getItemStack(jsonIngredients.get(i).getAsJsonObject(), false); + ingredients.add(itemStack); + } + } + + FluidStack reagentFluid = CraftingUtils.getFluidStack( + GsonHelper.getAsJsonObject(json, "reagent_fluid")); + FluidStack resultFluid = CraftingUtils.getFluidStack( + GsonHelper.getAsJsonObject(json, "result_fluid")); + FluidStack wasteFluid = CraftingUtils.getFluidStack( + GsonHelper.getAsJsonObject(json, "result_fluid_waste")); + + return new MixingVatFluidRecipe(recipeId, RecipeUtils.Category.FLUID, + inputFluid, reagentFluid, ingredients, processingTime, resultFluid, wasteFluid, activationTool); + + } + + @Override + public @Nullable MixingVatFluidRecipe fromNetwork(ResourceLocation recipeId, FriendlyByteBuf buffer) { + try { + RecipeUtils.Category category = RecipeUtils.Category.with(buffer.readUtf()); + + int processingTime = buffer.readVarInt(); + FluidStack inputFluidStack = buffer.readFluidStack(); + ItemStack activationTool = buffer.readItem(); + + int ingredientSize = buffer.readVarInt(); + + List ingredients = new ArrayList<>(); + for (int i = 0; i < ingredientSize; i++) { + ingredients.add(buffer.readItem()); + } + + FluidStack reagentFluidStack = buffer.readFluidStack(); + FluidStack outputFluidStack = buffer.readFluidStack(); + FluidStack wasteFluidStack = buffer.readFluidStack(); + + return new MixingVatFluidRecipe(recipeId, category, inputFluidStack, reagentFluidStack, + ingredients, processingTime, outputFluidStack, wasteFluidStack, activationTool); + + } catch (Exception ex) { + String message = String.format("Unable to read recipe (%s) from network buffer.", recipeId); + GrowthcraftMilk.LOGGER.error(message); + throw ex; + } + } + + public void toNetwork(FriendlyByteBuf buffer, MixingVatFluidRecipe recipe) { + buffer.writeUtf(recipe.getCategory().toString()); + buffer.writeVarInt(recipe.getProcessingTime()); + buffer.writeFluidStack(recipe.getInputFluidStack()); + buffer.writeItemStack(recipe.getActivationTool(), false); + buffer.writeVarInt(recipe.getIngredientList().size()); + + for (int i = 0; i < recipe.getIngredientList().size(); i++) { + buffer.writeItemStack(recipe.getIngredientList().get(i), false); + } + + buffer.writeFluidStack(recipe.getReagentFluidStack()); + buffer.writeFluidStack(recipe.getOutputFluidStack()); + buffer.writeFluidStack(recipe.getWasteFluidStack()); + + } + + @Override + public RecipeSerializer setRegistryName(ResourceLocation name) { + this.name = name; + return this; + } + + @Override + public ResourceLocation getRegistryName() { + return name; + } + + @Override + public Class> getRegistryType() { + // TODO Auto-generated method stub + return Serializer.>castClass(RecipeSerializer.class); + } + + private static Class castClass(Class cls) { + return (Class) cls; + } + } +} diff --git a/src/main/java/growthcraft/milk/recipe/MixingVatItemRecipe.java b/src/main/java/growthcraft/milk/recipe/MixingVatItemRecipe.java new file mode 100644 index 0000000..34ea271 --- /dev/null +++ b/src/main/java/growthcraft/milk/recipe/MixingVatItemRecipe.java @@ -0,0 +1,269 @@ +package growthcraft.milk.recipe; + +import java.util.ArrayList; +import java.util.List; + +import org.jetbrains.annotations.Nullable; + +import com.google.gson.JsonArray; +import com.google.gson.JsonObject; + +import growthcraft.lib.utils.CraftingUtils; +import growthcraft.lib.utils.RecipeUtils; +import growthcraft.milk.GrowthcraftMilk; +import growthcraft.milk.shared.Reference; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.GsonHelper; +import net.minecraft.world.SimpleContainer; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.crafting.Recipe; +import net.minecraft.world.item.crafting.RecipeSerializer; +import net.minecraft.world.item.crafting.RecipeType; +import net.minecraft.world.level.Level; +import net.minecraftforge.common.crafting.CraftingHelper; +import net.minecraftforge.fluids.FluidStack; + +public class MixingVatItemRecipe implements Recipe { + + private final ResourceLocation recipeId; + private final RecipeUtils.Category category; + private final ItemStack activationTool; + private final List ingredients; + private final FluidStack inputFluidStack; + private final int processingTime; + private final ItemStack resultItemStack; + private final ItemStack resultActivationTool; + + public MixingVatItemRecipe(ResourceLocation recipeId, RecipeUtils.Category category, + FluidStack inputFluidStack, List ingredients, int processingTime, + ItemStack resultItemStack, ItemStack activationTool, + ItemStack resultActivationTool) { + this.recipeId = recipeId; + this.category = category; + this.inputFluidStack = inputFluidStack; + this.ingredients = ingredients; + this.processingTime = processingTime; + this.resultItemStack = resultItemStack; + this.activationTool = activationTool; + this.resultActivationTool = resultActivationTool; + } + + + @Override + public boolean matches(SimpleContainer p_44002_, Level p_44003_) { + return false; + } + + public boolean matches(FluidStack testFluidStack, List testIngredients) { + boolean fluidMatches = false; + boolean itemMatches = false; + + if (testFluidStack.getFluid() == this.getInputFluidStack().getFluid() + && testFluidStack.getAmount() == this.getInputFluidStack().getAmount()) { + fluidMatches = true; + } + + if (this.getIngredientList().size() == testIngredients.size()) { + int itemCount = this.getIngredientList().size(); + int matchCount = 0; + for (int i = 0; i < this.getIngredientList().size(); i++) { + if (this.getIngredientList().get(i).getItem() == testIngredients.get(i).getItem() && + this.getIngredientList().get(i).getCount() == testIngredients.get(i).getCount()) { + matchCount++; + } + } + if (itemCount == matchCount) itemMatches = true; + } + + return fluidMatches && itemMatches; + } + + public boolean matchResult(ItemStack itemStack) { + return this.resultItemStack.getItem() == itemStack.getItem() && this.resultItemStack.getCount() == itemStack.getCount(); + } + + public FluidStack getInputFluidStack() { + return this.inputFluidStack; + } + + public ItemStack getActivationTool() { + return this.activationTool; + } + + public int getProcessingTime() { + return processingTime; + } + + public List getIngredientList() { + return ingredients; + } + + public ItemStack getResultItemStack() { + return this.resultItemStack.copy(); + } + + public ItemStack getResultActivationTool() { + return this.resultActivationTool; + } + + + public ItemStack assemble(SimpleContainer container) { + return resultItemStack; + } + + + public ItemStack getResultItem() { + return resultItemStack; + } + + @Override + public boolean canCraftInDimensions(int width, int height) { + return true; + } + + @Override + public ResourceLocation getId() { + return this.recipeId; + } + + public RecipeUtils.Category getCategory() { + return this.category; + } + + public boolean is(RecipeUtils.Category category) { + return this.category == category; + } + + public RecipeType getType() { + return Type.INSTANCE; + } + + @Override + public RecipeSerializer getSerializer() { + return Serializer.INSTANCE; + } + + public static class Type implements RecipeType { + private Type() { /* Prevent default constructor */ } + + public static final MixingVatItemRecipe.Type INSTANCE = new MixingVatItemRecipe.Type(); + public static final String ID = Reference.UnlocalizedName.MIXING_VAT_ITEM_RECIPE; + } + + + public static class Serializer implements RecipeSerializer { + + public static final MixingVatItemRecipe.Serializer INSTANCE = new MixingVatItemRecipe.Serializer(); + public static final ResourceLocation ID = new ResourceLocation( + Reference.MODID, + Reference.UnlocalizedName.MIXING_VAT_RECIPE); + private ResourceLocation name; + + private static final int maxIngredients = 3; + + @Override + public MixingVatItemRecipe fromJson(ResourceLocation recipeId, JsonObject json) { + RecipeUtils.Category category + = RecipeUtils.Category.with(GsonHelper.getAsString(json, "result_type")); + + int processingTime = GsonHelper.getAsInt(json, "processing_time", 1200); + + FluidStack inputFluid = CraftingUtils.getFluidStack( + GsonHelper.getAsJsonObject(json, "input_fluid")); + + ItemStack activationTool = CraftingHelper.getItemStack( + GsonHelper.getAsJsonObject(json, "activation_tool"), false); + + List ingredients = new ArrayList<>(); + JsonArray jsonIngredients = GsonHelper.getAsJsonArray(json, "ingredients"); + + if (jsonIngredients.size() <= maxIngredients) { + for (int i = 0; i < jsonIngredients.size(); i++) { + ItemStack itemStack = CraftingHelper.getItemStack(jsonIngredients.get(i).getAsJsonObject(), false); + ingredients.add(itemStack); + } + } + + if (category == RecipeUtils.Category.ITEM) { + ItemStack resultItemStack = CraftingHelper.getItemStack( + GsonHelper.getAsJsonObject(json, "result_item"), false); + ItemStack resultActivationTool = CraftingHelper.getItemStack( + GsonHelper.getAsJsonObject(json, "result_activation_tool"), false); + + return new MixingVatItemRecipe(recipeId, RecipeUtils.Category.ITEM, + inputFluid, ingredients, processingTime, resultItemStack, activationTool, resultActivationTool); + } + + + return null; + } + + @Override + public @Nullable MixingVatItemRecipe fromNetwork(ResourceLocation recipeId, FriendlyByteBuf buffer) { + try { + RecipeUtils.Category category = RecipeUtils.Category.with(buffer.readUtf()); + + int processingTime = buffer.readVarInt(); + FluidStack inputFluidStack = buffer.readFluidStack(); + ItemStack activationTool = buffer.readItem(); + + int ingredientSize = buffer.readVarInt(); + + List ingredients = new ArrayList<>(); + for (int i = 0; i < ingredientSize; i++) { + ingredients.add(buffer.readItem()); + } + + ItemStack resultingItemStack = buffer.readItem(); + ItemStack resultActivationTool = buffer.readItem(); + + return new MixingVatItemRecipe(recipeId, category, inputFluidStack, ingredients, + processingTime, resultingItemStack, activationTool, resultActivationTool); + } catch (Exception ex) { + String message = String.format("Unable to read recipe (%s) from network buffer.", recipeId); + GrowthcraftMilk.LOGGER.error(message); + throw ex; + } + } + + @Override + public void toNetwork(FriendlyByteBuf buffer, MixingVatItemRecipe recipe) { + buffer.writeUtf(recipe.getCategory().toString()); + buffer.writeVarInt(recipe.getProcessingTime()); + buffer.writeFluidStack(recipe.getInputFluidStack()); + buffer.writeItemStack(recipe.getActivationTool(), false); + buffer.writeVarInt(recipe.getIngredientList().size()); + + for (int i = 0; i < recipe.getIngredientList().size(); i++) { + buffer.writeItemStack(recipe.getIngredientList().get(i), false); + } + + buffer.writeItemStack(recipe.getResultItemStack(), false); + buffer.writeItemStack(recipe.getResultActivationTool(), false); + + } + + @Override + public RecipeSerializer setRegistryName(ResourceLocation name) { + this.name = name; + return this; + } + + @Override + public ResourceLocation getRegistryName() { + return name; + } + + @Override + public Class> getRegistryType() { + // TODO Auto-generated method stub + return Serializer.>castClass(RecipeSerializer.class); + } + + private static Class castClass(Class cls) { + return (Class) cls; + } + + } +} diff --git a/src/main/java/growthcraft/milk/recipe/PancheonRecipe.java b/src/main/java/growthcraft/milk/recipe/PancheonRecipe.java new file mode 100644 index 0000000..19e50e7 --- /dev/null +++ b/src/main/java/growthcraft/milk/recipe/PancheonRecipe.java @@ -0,0 +1,177 @@ +package growthcraft.milk.recipe; + +import java.util.Arrays; +import java.util.List; + +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import com.google.gson.JsonArray; +import com.google.gson.JsonObject; + +import growthcraft.lib.utils.CraftingUtils; +import growthcraft.milk.GrowthcraftMilk; +import growthcraft.milk.shared.Reference; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.GsonHelper; +import net.minecraft.world.SimpleContainer; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.crafting.Recipe; +import net.minecraft.world.item.crafting.RecipeSerializer; +import net.minecraft.world.item.crafting.RecipeType; +import net.minecraft.world.level.Level; +import net.minecraftforge.fluids.FluidStack; + +public class PancheonRecipe implements Recipe { + + private final ResourceLocation recipeId; + private final FluidStack inputFluidStack; + private final FluidStack outputFluidStack1; + private final FluidStack outputFluidStack2; + private final int processingTime; + + private static final String INPUT_0 = "input0"; + private static final String OUTPUT_0 = "output0"; + private static final String OUTPUT_1 = "output1"; + + + public PancheonRecipe(ResourceLocation recipeId, FluidStack inputFluidStack, FluidStack outputFluidStack1, FluidStack outputFluidStack2, int processingTime) { + this.recipeId = recipeId; + this.inputFluidStack = inputFluidStack; + this.outputFluidStack1 = outputFluidStack1; + this.outputFluidStack2 = outputFluidStack2; + this.processingTime = processingTime; + } + + @Override + public boolean matches(SimpleContainer simpleContainer, Level level) { + return false; + } + + public boolean matches(FluidStack fluidStack) { + return this.inputFluidStack.getFluid() == fluidStack.getFluid(); + } + + @Override + public ItemStack assemble(SimpleContainer simpleContainer) { + return this.outputFluidStack1.getFluid().getBucket().getDefaultInstance(); + } + + @Override + public boolean canCraftInDimensions(int width, int height) { + return true; + } + + @Override + public ItemStack getResultItem() { + return this.getFluidStack(OUTPUT_0).getFluid().getBucket().getDefaultInstance(); + } + + public List getResultFluidStacks() { + return Arrays.asList(this.getFluidStack(OUTPUT_0).copy(), this.getFluidStack(OUTPUT_1).copy()); + } + + @Override + public @NotNull ResourceLocation getId() { + return this.recipeId; + } + + public FluidStack getFluidStack(String tankId) { + return switch (tankId) { + case OUTPUT_0 -> this.outputFluidStack1; + case OUTPUT_1 -> this.outputFluidStack2; + default -> this.inputFluidStack.copy(); + }; + } + + public int getRecipeProcessingTime() { + return this.processingTime; + } + + @Override + public @NotNull RecipeSerializer getSerializer() { + return Serializer.INSTANCE; + } + + @Override + public @NotNull RecipeType getType() { + return Type.INSTANCE; + } + + public static class Type implements RecipeType { + private Type() { /* Prevent default constructor */ } + public static final Type INSTANCE = new Type(); + public static final String ID = Reference.UnlocalizedName.PANCHEON_RECIPE; + } + + public static class Serializer implements RecipeSerializer { + + public static final Serializer INSTANCE = new Serializer(); + public static final ResourceLocation ID = new ResourceLocation( + Reference.MODID, + Reference.UnlocalizedName.PANCHEON_RECIPE); + private ResourceLocation name; + + @Override + public @NotNull PancheonRecipe fromJson(ResourceLocation recipeId, JsonObject json) { + FluidStack inputFluid = CraftingUtils.getFluidStack(GsonHelper.getAsJsonObject(json, "input_fluid")); + FluidStack outputFluid1; + FluidStack outputFluid2; + + JsonArray outputFluids = GsonHelper.getAsJsonArray(json, "output_fluids"); + + outputFluid1 = CraftingUtils.getFluidStack(outputFluids.get(0).getAsJsonObject()); + outputFluid2 = CraftingUtils.getFluidStack(outputFluids.get(1).getAsJsonObject()); + + int processingTime = GsonHelper.getAsInt(json, "processing_time", 1200); + + return new PancheonRecipe(recipeId, inputFluid, outputFluid1, outputFluid2, processingTime); } + + @Override + public @Nullable PancheonRecipe fromNetwork(ResourceLocation recipeId, FriendlyByteBuf buffer) { + try { + FluidStack inputFluid = buffer.readFluidStack(); + FluidStack outputFluid1 = buffer.readFluidStack(); + FluidStack outputFluid2 = buffer.readFluidStack(); + int processingTime = buffer.readVarInt(); + return new PancheonRecipe(recipeId, inputFluid, outputFluid1, outputFluid2, processingTime); + } catch (Exception ex) { + String message = String.format("Unable to read recipe (%s) from network buffer.", recipeId); + GrowthcraftMilk.LOGGER.error(message); + throw ex; + } } + + @Override + public void toNetwork(FriendlyByteBuf buffer, PancheonRecipe recipe) { + buffer.writeFluidStack(recipe.getFluidStack(INPUT_0)); + buffer.writeFluidStack(recipe.getFluidStack(OUTPUT_0)); + buffer.writeFluidStack(recipe.getFluidStack(OUTPUT_1)); + buffer.writeVarInt(recipe.getRecipeProcessingTime()); + } + + @Override + public RecipeSerializer setRegistryName(ResourceLocation name) { + this.name = name; + return this; + } + + @Override + public ResourceLocation getRegistryName() { + return name; + } + + @Override + public Class> getRegistryType() { + // TODO Auto-generated method stub + return Serializer.>castClass(RecipeSerializer.class); + } + + private static Class castClass(Class cls) { + return (Class) cls; + } + + } + + +} diff --git a/src/main/java/growthcraft/milk/screen/CheesePressScreen.java b/src/main/java/growthcraft/milk/screen/CheesePressScreen.java new file mode 100644 index 0000000..03c86d3 --- /dev/null +++ b/src/main/java/growthcraft/milk/screen/CheesePressScreen.java @@ -0,0 +1,5 @@ +package growthcraft.milk.screen; + +public class CheesePressScreen { + //TODO[63]: Implement CheesePressScreen +} diff --git a/src/main/java/growthcraft/milk/screen/ChurnScreen.java b/src/main/java/growthcraft/milk/screen/ChurnScreen.java new file mode 100644 index 0000000..d94eea8 --- /dev/null +++ b/src/main/java/growthcraft/milk/screen/ChurnScreen.java @@ -0,0 +1,101 @@ +package growthcraft.milk.screen; + +import com.mojang.blaze3d.systems.RenderSystem; +import com.mojang.blaze3d.vertex.PoseStack; +import growthcraft.lib.kaupenjoe.screen.renderer.FluidTankRenderer; +import growthcraft.milk.screen.container.ChurnMenu; +import growthcraft.milk.shared.Reference; +import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; +import net.minecraft.client.renderer.GameRenderer; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.player.Inventory; +import net.minecraft.world.item.TooltipFlag; + +import java.util.Optional; + +public class ChurnScreen extends AbstractContainerScreen { + + + private static final ResourceLocation TEXTURE = new ResourceLocation( + Reference.MODID, "textures/gui/churn_screen.png" + ); + + private FluidTankRenderer fluidTankRenderer0; + + public ChurnScreen(ChurnMenu menu, Inventory inventory, Component component) { + super(menu, inventory, component); + } + + @Override + protected void init() { + super.init(); + assignFluidRender(); + } + + private void assignFluidRender() { + fluidTankRenderer0 = new FluidTankRenderer(1000, true, 16, 52); + } + + @Override + protected void renderBg(PoseStack poseStack, float partialTick, int mouseX, int mouseY) { + RenderSystem.setShader(GameRenderer::getPositionTexShader); + RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); + RenderSystem.setShaderTexture(0, TEXTURE); + + int x = (width - imageWidth) / 2; + int y = (height - imageHeight) / 2; + + // Full background image + blit(poseStack, x, y, 0, 0, imageWidth, imageHeight); + + // Progress bar + blit(poseStack, + x + 82, y + 30, + 176, 0, 25, menu.getProgressionScaled(25) + ); + + fluidTankRenderer0.render(poseStack, x + 65, y + 18, menu.getFluidStack(0)); + + } + + @Override + public void render(PoseStack poseStack, int mouseX, int mouseY, float delta) { + renderBackground(poseStack); + super.render(poseStack, mouseX, mouseY, delta); + // Render any tooltips for this mouse over location. + renderTooltip(poseStack, mouseX, mouseY); + } + + @Override + protected void renderLabels(PoseStack poseStack, int mouseX, int mouseY) { + int x = (width - imageWidth) / 2; + int y = (height - imageHeight) / 2; + + // Screen Title + this.font.draw(poseStack, this.title, (float) this.titleLabelX, (float) this.titleLabelY, 4210752); + // Inventory Title + this.font.draw(poseStack, this.playerInventoryTitle, (float) this.inventoryLabelX, (float) this.inventoryLabelY, 4210752); + + // FluidTank Tooltips + renderFluidTankTooltips(poseStack, mouseX, mouseY, x, y); + } + + + private void renderFluidTankTooltips(PoseStack poseStack, int mouseX, int mouseY, int x, int y) { + if (isMouseAboveArea(mouseX, mouseY, x + 62, y + 18, 16, 52, fluidTankRenderer0.getWidth(), fluidTankRenderer0.getHeight())) { + renderTooltip( + poseStack, + fluidTankRenderer0.getTooltip(menu.getFluidStack(0), TooltipFlag.Default.NORMAL), + Optional.empty(), + mouseX - x, + mouseY - y + ); + } + } + + private boolean isMouseAboveArea(int mouseX, int mouseY, int baseX, int baseY, int offsetX, int offsetY, int width, int height) { + return (mouseX >= baseX && mouseX <= (baseX + offsetX)) && (mouseY >= baseY && mouseY <= (baseY + offsetY)); + } + +} diff --git a/src/main/java/growthcraft/milk/screen/MixingVatScreen.java b/src/main/java/growthcraft/milk/screen/MixingVatScreen.java new file mode 100644 index 0000000..747eaf2 --- /dev/null +++ b/src/main/java/growthcraft/milk/screen/MixingVatScreen.java @@ -0,0 +1,121 @@ +package growthcraft.milk.screen; + +import com.mojang.blaze3d.systems.RenderSystem; +import com.mojang.blaze3d.vertex.PoseStack; +import growthcraft.lib.kaupenjoe.screen.renderer.FluidTankRenderer; +import growthcraft.milk.screen.container.MixingVatMenu; +import growthcraft.milk.shared.Reference; +import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; +import net.minecraft.client.renderer.GameRenderer; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.player.Inventory; +import net.minecraft.world.item.TooltipFlag; + +import java.util.Optional; + +public class MixingVatScreen extends AbstractContainerScreen { + //TODO[5]: Implement MixingVatScreen + // + private static final ResourceLocation TEXTURE = new ResourceLocation( + Reference.MODID, "textures/gui/mixing_vat_screen.png" + ); + + private FluidTankRenderer fluidTankRenderer0; + private FluidTankRenderer fluidTankRenderer1; + + public MixingVatScreen(MixingVatMenu menu, Inventory inventory, Component component) { + super(menu, inventory, component); + } + + @Override + protected void init() { + super.init(); + assignFluidRender(); + } + + private void assignFluidRender() { + fluidTankRenderer0 = new FluidTankRenderer(4000, true, 16, 38); + fluidTankRenderer1 = new FluidTankRenderer(1000, true, 16, 10); + } + + @Override + protected void renderBg(PoseStack poseStack, float partialTick, int mouseX, int mouseY) { + RenderSystem.setShader(GameRenderer::getPositionTexShader); + RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); + RenderSystem.setShaderTexture(0, TEXTURE); + + int x = (width - imageWidth) / 2; + int y = (height - imageHeight) / 2; + + this.blit(poseStack, x, y, 0, 0, imageWidth, imageHeight); + + this.blit(poseStack, + x + 99, y + 21, + 176, 43, + 13, menu.getProgressionScaled(29) + ); + + if(this.menu.isHeated()) { + this.blit(poseStack, + x + 98, y + 56, + 176, 28, + 13, 13 + ); + } + + fluidTankRenderer0.render(poseStack, x + 49, y + 32, menu.getFluidStack(0)); + fluidTankRenderer1.render(poseStack, x + 49, y + 18, menu.getFluidStack(1)); + } + + @Override + public void render(PoseStack poseStack, int mouseX, int mouseY, float delta) { + renderBackground(poseStack); + super.render(poseStack, mouseX, mouseY, delta); + // Render any tooltips for this mouse over location. + renderTooltip(poseStack, mouseX, mouseY); + } + + @Override + protected void renderLabels(PoseStack poseStack, int mouseX, int mouseY) { + int x = (width - imageWidth) / 2; + int y = (height - imageHeight) / 2; + + // Screen Title + this.font.draw(poseStack, this.title, (float) this.titleLabelX, (float) this.titleLabelY, 4210752); + // Inventory Title + this.font.draw(poseStack, this.playerInventoryTitle, (float) this.inventoryLabelX, (float) this.inventoryLabelY, 4210752); + + // FluidTank Tooltips + renderFluidTankTooltips(poseStack, mouseX, mouseY, x, y); + } + + private void renderFluidTankTooltips(PoseStack poseStack, int mouseX, int mouseY, int x, int y) { + + // FluidTank0 + if(isMouseAboveArea(mouseX, mouseY, x + 49, y + 32, 16, 38, fluidTankRenderer0.getWidth(), fluidTankRenderer0.getHeight())) { + renderTooltip( + poseStack, + fluidTankRenderer0.getTooltip(menu.getFluidStack(0), TooltipFlag.Default.NORMAL), + Optional.empty(), + mouseX - x, + mouseY - y + ); + } + + if(isMouseAboveArea(mouseX, mouseY, x + 49, y + 18, 16, 10, fluidTankRenderer1.getWidth(), fluidTankRenderer1.getHeight())) { + renderTooltip( + poseStack, + fluidTankRenderer1.getTooltip(menu.getFluidStack(1), TooltipFlag.Default.NORMAL), + Optional.empty(), + mouseX - x, + mouseY - y + ); + } + + } + + private boolean isMouseAboveArea(int mouseX, int mouseY, int baseX, int baseY, int offsetX, int offsetY, int width, int height) { + return (mouseX >= baseX && mouseX <= (baseX + offsetX)) && (mouseY >= baseY && mouseY <= (baseY + offsetY)); + } +} diff --git a/src/main/java/growthcraft/milk/screen/PancheonScreen.java b/src/main/java/growthcraft/milk/screen/PancheonScreen.java new file mode 100644 index 0000000..fc4052e --- /dev/null +++ b/src/main/java/growthcraft/milk/screen/PancheonScreen.java @@ -0,0 +1,123 @@ +package growthcraft.milk.screen; + +import com.mojang.blaze3d.systems.RenderSystem; +import com.mojang.blaze3d.vertex.PoseStack; +import growthcraft.lib.kaupenjoe.screen.renderer.FluidTankRenderer; +import growthcraft.milk.screen.container.PancheonMenu; +import growthcraft.milk.shared.Reference; +import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; +import net.minecraft.client.renderer.GameRenderer; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.player.Inventory; +import net.minecraft.world.item.TooltipFlag; + +import java.util.Optional; + +public class PancheonScreen extends AbstractContainerScreen { + + private static final ResourceLocation TEXTURE = new ResourceLocation( + Reference.MODID, "textures/gui/pancheon_screen.png" + ); + + private FluidTankRenderer fluidTankRenderer0; + private FluidTankRenderer fluidTankRenderer1; + private FluidTankRenderer fluidTankRenderer2; + + public PancheonScreen(PancheonMenu menu, Inventory inventory, Component component) { + super(menu, inventory, component); + } + + @Override + protected void init() { + super.init(); + assignFluidRender(); + } + + private void assignFluidRender() { + fluidTankRenderer0 = new FluidTankRenderer(2000, true, 16, 52); + fluidTankRenderer1 = new FluidTankRenderer(1000, true, 16, 23); + fluidTankRenderer2 = new FluidTankRenderer(1000, true, 16, 23); + } + + @Override + protected void renderBg(PoseStack poseStack, float partialTick, int mouseX, int mouseY) { + RenderSystem.setShader(GameRenderer::getPositionTexShader); + RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); + RenderSystem.setShaderTexture(0, TEXTURE); + + int x = (width - imageWidth) / 2; + int y = (height - imageHeight) / 2; + + this.blit(poseStack, x, y, 0, 0, imageWidth, imageHeight); + + // Progress bar + this.blit(poseStack, x + 82, y + 29, 176, 42, 13, menu.getProgressionScaled(29)); + + + fluidTankRenderer0.render(poseStack, x + 62, y + 18, menu.getFluidStack(0)); + fluidTankRenderer1.render(poseStack, x + 98, y + 18, menu.getFluidStack(1)); + fluidTankRenderer2.render(poseStack, x + 98, y + 47, menu.getFluidStack(2)); + } + + @Override + public void render(PoseStack poseStack, int mouseX, int mouseY, float delta) { + renderBackground(poseStack); + super.render(poseStack, mouseX, mouseY, delta); + // Render any tooltips for this mouse over location. + renderTooltip(poseStack, mouseX, mouseY); + } + + @Override + protected void renderLabels(PoseStack poseStack, int mouseX, int mouseY) { + int x = (width - imageWidth) / 2; + int y = (height - imageHeight) / 2; + + // Screen Title + this.font.draw(poseStack, this.title, (float) this.titleLabelX, (float) this.titleLabelY, 4210752); + // Inventory Title + this.font.draw(poseStack, this.playerInventoryTitle, (float) this.inventoryLabelX, (float) this.inventoryLabelY, 4210752); + + // FluidTank Tooltips + renderFluidTankTooltips(poseStack, mouseX, mouseY, x, y); + } + + private void renderFluidTankTooltips(PoseStack poseStack, int mouseX, int mouseY, int x, int y) { + + // FluidTank0 + if(isMouseAboveArea(mouseX, mouseY, x + 62, y + 18, 16, 52, fluidTankRenderer0.getWidth(), fluidTankRenderer0.getHeight())) { + renderTooltip( + poseStack, + fluidTankRenderer0.getTooltip(menu.getFluidStack(0), TooltipFlag.Default.NORMAL), + Optional.empty(), + mouseX - x, + mouseY - y + ); + } + + if(isMouseAboveArea(mouseX, mouseY, x + 98, y + 18, 16, 23, fluidTankRenderer1.getWidth(), fluidTankRenderer1.getHeight())) { + renderTooltip( + poseStack, + fluidTankRenderer1.getTooltip(menu.getFluidStack(1), TooltipFlag.Default.NORMAL), + Optional.empty(), + mouseX - x, + mouseY - y + ); + } + + if(isMouseAboveArea(mouseX, mouseY, x + 98, y + 47, 16, 23, fluidTankRenderer2.getWidth(), fluidTankRenderer2.getHeight())) { + renderTooltip( + poseStack, + fluidTankRenderer2.getTooltip(menu.getFluidStack(2), TooltipFlag.Default.NORMAL), + Optional.empty(), + mouseX - x, + mouseY - y + ); + } + + } + + private boolean isMouseAboveArea(int mouseX, int mouseY, int baseX, int baseY, int offsetX, int offsetY, int width, int height) { + return (mouseX >= baseX && mouseX <= (baseX + offsetX)) && (mouseY >= baseY && mouseY <= (baseY + offsetY)); + } +} diff --git a/src/main/java/growthcraft/milk/screen/container/CheesePressMenu.java b/src/main/java/growthcraft/milk/screen/container/CheesePressMenu.java new file mode 100644 index 0000000..5c64d26 --- /dev/null +++ b/src/main/java/growthcraft/milk/screen/container/CheesePressMenu.java @@ -0,0 +1,5 @@ +package growthcraft.milk.screen.container; + +public class CheesePressMenu { + //TODO[63]: Implement CheesePressMenu +} diff --git a/src/main/java/growthcraft/milk/screen/container/ChurnMenu.java b/src/main/java/growthcraft/milk/screen/container/ChurnMenu.java new file mode 100644 index 0000000..8abde41 --- /dev/null +++ b/src/main/java/growthcraft/milk/screen/container/ChurnMenu.java @@ -0,0 +1,164 @@ +package growthcraft.milk.screen.container; + +import growthcraft.milk.block.ChurnBlock; +import growthcraft.milk.block.entity.ChurnBlockEntity; +import growthcraft.milk.init.GrowthcraftMilkMenus; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.world.entity.player.Inventory; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.inventory.AbstractContainerMenu; +import net.minecraft.world.inventory.ContainerData; +import net.minecraft.world.inventory.ContainerLevelAccess; +import net.minecraft.world.inventory.SimpleContainerData; +import net.minecraft.world.inventory.Slot; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.items.CapabilityItemHandler; +import net.minecraftforge.items.SlotItemHandler; + +public class ChurnMenu extends AbstractContainerMenu { + + private final ChurnBlockEntity blockEntity; + private final ChurnBlock block; + private final Level level; + private final ContainerData data; + + private FluidStack fluidStack0; + + public ChurnMenu(int containerId, Inventory inventory, FriendlyByteBuf extraData) { + this(containerId, inventory, inventory.player.level.getBlockEntity(extraData.readBlockPos()), new SimpleContainerData(2)); + } + + public ChurnMenu(int containerId, Inventory inventory, BlockEntity blockEntity, ContainerData data) { + super(GrowthcraftMilkMenus.CHURN_MENU.get(), containerId); + + this.blockEntity = (ChurnBlockEntity) blockEntity; + this.block = (ChurnBlock) inventory.player.level.getBlockEntity(this.blockEntity.getBlockPos()).getBlockState().getBlock(); + this.level = inventory.player.level; + this.data = data; + + this.fluidStack0 = this.blockEntity.getFluidStackInTank(0); + + addPlayerInventory(inventory); + addPlayerHotbar(inventory); + + this.blockEntity.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY).ifPresent(handler -> { + // 1 Input Slot + this.addSlot(new SlotItemHandler(handler, 0, 94, 35)); + } + ); + + // Add our block fluid tanks. + addDataSlots(data); + + } + + + public ChurnBlockEntity getBlockEntity() { + return this.blockEntity; + } + + public void setFluid(int tankID, FluidStack fluidStack) throws NullPointerException { + if (tankID == 0) { + this.fluidStack0 = fluidStack; + } else { + throw new NullPointerException(String.format("ChurnMenu setFluidStack at <%s> does not have a fluid tank with the ID of %d!", blockEntity.getBlockPos(), tankID)); + } + } + + public FluidStack getFluidStack(int tankID) { + return switch (tankID) { + case 0 -> this.blockEntity.getFluidStackInTank(0); + default -> + throw new NullPointerException(String.format("ChurnMenu getFluidStack at <%s> does not have a fluid tank with the ID of %d!", blockEntity.getBlockPos(), tankID)); + }; + } + + @OnlyIn(Dist.CLIENT) + public int getProgressionScaled(int size) { + return this.blockEntity.getTickClock("current") != 0 && this.blockEntity.getTickClock("max") != 0 + ? this.blockEntity.getTickClock("current") * size / this.blockEntity.getTickClock("max") + : 0; + } + + // CREDIT GOES TO: diesieben07 | https://github.com/diesieben07/SevenCommons + // must assign a slot number to each of the slots used by the GUI. + // For this container, we can see both the tile inventory's slots, the player inventory slots and the hotbar. + // Each time we add a Slot to the container, it automatically increases the slotIndex, which means + // 0 - 8 = hotbar slots (which will map to the InventoryPlayer slot numbers 0 - 8) + // 9 - 35 = player inventory slots (which map to the InventoryPlayer slot numbers 9 - 35) + // 36 - 44 = TileInventory slots, which map to our TileEntity slot numbers 0 - 8) + private static final int HOTBAR_SLOT_COUNT = 9; + private static final int PLAYER_INVENTORY_ROW_COUNT = 3; + private static final int PLAYER_INVENTORY_COLUMN_COUNT = 9; + private static final int PLAYER_INVENTORY_SLOT_COUNT = PLAYER_INVENTORY_COLUMN_COUNT * PLAYER_INVENTORY_ROW_COUNT; + private static final int VANILLA_SLOT_COUNT = HOTBAR_SLOT_COUNT + PLAYER_INVENTORY_SLOT_COUNT; + private static final int VANILLA_FIRST_SLOT_INDEX = 0; + private static final int TE_INVENTORY_FIRST_SLOT_INDEX = VANILLA_FIRST_SLOT_INDEX + VANILLA_SLOT_COUNT; + + private static final int TE_INVENTORY_SLOT_COUNT = 1; // must be the number of slots you have! + + @Override + public ItemStack quickMoveStack(Player playerIn, int index) { + Slot sourceSlot = slots.get(index); + if (sourceSlot == null || !sourceSlot.hasItem()) return ItemStack.EMPTY; //EMPTY_ITEM + ItemStack sourceStack = sourceSlot.getItem(); + ItemStack copyOfSourceStack = sourceStack.copy(); + + // Check if the slot clicked is one of the vanilla container slots + if (index < VANILLA_FIRST_SLOT_INDEX + VANILLA_SLOT_COUNT) { + // This is a vanilla container slot so merge the stack into the tile inventory + if (!moveItemStackTo(sourceStack, TE_INVENTORY_FIRST_SLOT_INDEX, TE_INVENTORY_FIRST_SLOT_INDEX + + TE_INVENTORY_SLOT_COUNT, false)) { + return ItemStack.EMPTY; // EMPTY_ITEM + } + } else if (index < TE_INVENTORY_FIRST_SLOT_INDEX + TE_INVENTORY_SLOT_COUNT) { + // This is a TE slot so merge the stack into the players inventory + if (!moveItemStackTo(sourceStack, VANILLA_FIRST_SLOT_INDEX, VANILLA_FIRST_SLOT_INDEX + VANILLA_SLOT_COUNT, false)) { + return ItemStack.EMPTY; + } + } else { + System.out.println("Invalid slotIndex:" + index); + return ItemStack.EMPTY; + } + // If stack size == 0 (the entire stack was moved) set slot contents to null + if (sourceStack.getCount() == 0) { + sourceSlot.set(ItemStack.EMPTY); + } else { + sourceSlot.setChanged(); + } + sourceSlot.onTake(playerIn, sourceStack); + return copyOfSourceStack; + } + + @Override + public boolean stillValid(Player player) { + return stillValid( + ContainerLevelAccess.create( + this.level, + this.blockEntity.getBlockPos() + ), + player, + this.block + ); + } + + private void addPlayerInventory(Inventory playerInventory) { + for (int i = 0; i < 3; ++i) { + for (int l = 0; l < 9; ++l) { + this.addSlot(new Slot(playerInventory, l + i * 9 + 9, 8 + l * 18, 84 + i * 18)); + } + } + } + + private void addPlayerHotbar(Inventory playerInventory) { + for (int i = 0; i < 9; ++i) { + this.addSlot(new Slot(playerInventory, i, 8 + i * 18, 142)); + } + } + +} diff --git a/src/main/java/growthcraft/milk/screen/container/MixingVatMenu.java b/src/main/java/growthcraft/milk/screen/container/MixingVatMenu.java new file mode 100644 index 0000000..32907ae --- /dev/null +++ b/src/main/java/growthcraft/milk/screen/container/MixingVatMenu.java @@ -0,0 +1,171 @@ +package growthcraft.milk.screen.container; + +import java.util.Objects; + +import org.jetbrains.annotations.NotNull; + +import growthcraft.lib.screen.container.handler.NonInteractiveSlotItemHandler; +import growthcraft.milk.GrowthcraftMilk; +import growthcraft.milk.block.MixingVatBlock; +import growthcraft.milk.block.entity.MixingVatBlockEntity; +import growthcraft.milk.init.GrowthcraftMilkMenus; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.world.entity.player.Inventory; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.inventory.AbstractContainerMenu; +import net.minecraft.world.inventory.ContainerData; +import net.minecraft.world.inventory.ContainerLevelAccess; +import net.minecraft.world.inventory.SimpleContainerData; +import net.minecraft.world.inventory.Slot; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.items.CapabilityItemHandler; +import net.minecraftforge.items.SlotItemHandler; + +public class MixingVatMenu extends AbstractContainerMenu { + private final MixingVatBlockEntity blockEntity; + private final MixingVatBlock block; + private final Level level; + + private ContainerData data; + + public MixingVatMenu(int containerId, Inventory inventory, FriendlyByteBuf extraData) { + this(containerId, inventory, Objects.requireNonNull(inventory.player.level.getBlockEntity(extraData.readBlockPos())), new SimpleContainerData(2)); + } + + public MixingVatMenu(int containerId, Inventory inventory, BlockEntity blockEntity , ContainerData data) { + super(GrowthcraftMilkMenus.MIXING_VAT_MENU.get(), containerId); + + this.blockEntity = (MixingVatBlockEntity) blockEntity; + this.block = (MixingVatBlock) blockEntity.getBlockState().getBlock(); + this.level = inventory.player.level; + this.data = data; + + this.blockEntity.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY).ifPresent(handler -> { + // Input Slots + this.addSlot(new SlotItemHandler(handler, 0, 71, 18)); + this.addSlot(new SlotItemHandler(handler, 1, 71, 36)); + this.addSlot(new SlotItemHandler(handler, 2, 71, 54)); + // Output slot + this.addSlot(new NonInteractiveSlotItemHandler(handler, 3, 124, 18)); + } + ); + + addPlayerInventory(inventory); + addPlayerHotbar(inventory); + + addDataSlots(this.data); + } + + public BlockEntity getBlockEntity() { + return this.blockEntity; + } + + // CREDIT GOES TO: diesieben07 | https://github.com/diesieben07/SevenCommons + // must assign a slot number to each of the slots used by the GUI. + // For this container, we can see both the tile inventory's slots, the player inventory slots and the hotbar. + // Each time we add a Slot to the container, it automatically increases the slotIndex, which means + // 0 - 8 = hotbar slots (which will map to the InventoryPlayer slot numbers 0 - 8) + // 9 - 35 = player inventory slots (which map to the InventoryPlayer slot numbers 9 - 35) + // 36 - 44 = TileInventory slots, which map to our TileEntity slot numbers 0 - 8) + private static final int HOTBAR_SLOT_COUNT = 9; + private static final int PLAYER_INVENTORY_ROW_COUNT = 3; + private static final int PLAYER_INVENTORY_COLUMN_COUNT = 9; + private static final int PLAYER_INVENTORY_SLOT_COUNT = PLAYER_INVENTORY_COLUMN_COUNT * PLAYER_INVENTORY_ROW_COUNT; + private static final int VANILLA_SLOT_COUNT = HOTBAR_SLOT_COUNT + PLAYER_INVENTORY_SLOT_COUNT; + private static final int VANILLA_FIRST_SLOT_INDEX = 0; + private static final int TE_INVENTORY_FIRST_SLOT_INDEX = VANILLA_FIRST_SLOT_INDEX + VANILLA_SLOT_COUNT; + + private static final int TE_INVENTORY_SLOT_COUNT = 4; // must be the number of slots you have! + + @Override + public ItemStack quickMoveStack(Player playerIn, int index) { + Slot sourceSlot = slots.get(index); + if (sourceSlot == null || !sourceSlot.hasItem()) return ItemStack.EMPTY; //EMPTY_ITEM + ItemStack sourceStack = sourceSlot.getItem(); + ItemStack copyOfSourceStack = sourceStack.copy(); + + // Check if the slot clicked is one of the vanilla container slots + if (index < VANILLA_FIRST_SLOT_INDEX + VANILLA_SLOT_COUNT) { + // This is a vanilla container slot so merge the stack into the tile inventory + if (!moveItemStackTo(sourceStack, TE_INVENTORY_FIRST_SLOT_INDEX, TE_INVENTORY_FIRST_SLOT_INDEX + + TE_INVENTORY_SLOT_COUNT, false)) { + return ItemStack.EMPTY; // EMPTY_ITEM + } + } else if (index < TE_INVENTORY_FIRST_SLOT_INDEX + TE_INVENTORY_SLOT_COUNT) { + // This is a TE slot so merge the stack into the players inventory + if (!moveItemStackTo(sourceStack, VANILLA_FIRST_SLOT_INDEX, VANILLA_FIRST_SLOT_INDEX + VANILLA_SLOT_COUNT, false)) { + return ItemStack.EMPTY; + } + } else { + GrowthcraftMilk.LOGGER.error(String.format("Invalid slotIndex: %d", index)); + return ItemStack.EMPTY; + } + // If stack size == 0 (the entire stack was moved) set slot contents to null + if (sourceStack.getCount() == 0) { + sourceSlot.set(ItemStack.EMPTY); + } else { + sourceSlot.setChanged(); + } + sourceSlot.onTake(playerIn, sourceStack); + return copyOfSourceStack; + } + + @Override + public boolean stillValid(@NotNull Player player) { + return stillValid( + ContainerLevelAccess.create( + this.level, + this.blockEntity.getBlockPos() + ), + player, + this.block + ); + } + + private void addPlayerInventory(Inventory playerInventory) { + for (int i = 0; i < 3; ++i) { + for (int l = 0; l < 9; ++l) { + this.addSlot(new Slot(playerInventory, l + i * 9 + 9, 8 + l * 18, 84 + i * 18)); + } + } + } + + private void addPlayerHotbar(Inventory playerInventory) { + for (int i = 0; i < 9; ++i) { + this.addSlot(new Slot(playerInventory, i, 8 + i * 18, 142)); + } + } + + public void setFluid(int tankID, FluidStack fluidStack) throws NullPointerException { + this.blockEntity.setFluidStackInTank(tankID, fluidStack); + } + + public FluidStack getFluidStack(int tankID) { + return switch (tankID) { + case 0 -> this.blockEntity.getFluidStackInTank(0); + case 1 -> this.blockEntity.getFluidStackInTank(1); + default -> + throw new NullPointerException(String.format("MixingVatmenu getFluidStack at <%s> does not have a fluid tank with the ID of %d!", blockEntity.getBlockPos().toString(), tankID)); + }; + } + + public int getPercentProgress() { + return this.blockEntity.getPercentProgress(); + } + + @OnlyIn(Dist.CLIENT) + public int getProgressionScaled(int size) { + return this.data.get(0) != 0 && this.data.get(1) != 0 + ? this.data.get(0) * size / this.data.get(1) + : 0; + } + + public boolean isHeated() { + return this.blockEntity.isHeated(); + } +} diff --git a/src/main/java/growthcraft/milk/screen/container/PancheonMenu.java b/src/main/java/growthcraft/milk/screen/container/PancheonMenu.java new file mode 100644 index 0000000..9179bd1 --- /dev/null +++ b/src/main/java/growthcraft/milk/screen/container/PancheonMenu.java @@ -0,0 +1,157 @@ +package growthcraft.milk.screen.container; + +import growthcraft.milk.block.PancheonBlock; +import growthcraft.milk.block.entity.PancheonBlockEntity; +import growthcraft.milk.init.GrowthcraftMilkMenus; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.world.entity.player.Inventory; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.inventory.*; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.fluids.FluidStack; + +public class PancheonMenu extends AbstractContainerMenu { + private final PancheonBlockEntity blockEntity; + private final PancheonBlock block; + private final Level level; + private final ContainerData data; + + private FluidStack fluidStack0; + private FluidStack fluidStack1; + private FluidStack fluidStack2; + + public PancheonMenu(int containerId, Inventory inventory, FriendlyByteBuf extraData) { + this(containerId, inventory, inventory.player.level.getBlockEntity(extraData.readBlockPos()), new SimpleContainerData(2)); + } + + public PancheonMenu(int containerId, Inventory inventory, BlockEntity blockEntity , ContainerData data) { + super(GrowthcraftMilkMenus.PANCHEON_MENU.get(), containerId); + + this.blockEntity = (PancheonBlockEntity) blockEntity; + this.block = (PancheonBlock) inventory.player.level.getBlockEntity(this.blockEntity.getBlockPos()).getBlockState().getBlock(); + this.level = inventory.player.level; + this.data = data; + + this.fluidStack0 = this.blockEntity.getFluidStackInTank(0); + this.fluidStack1 = this.blockEntity.getFluidStackInTank(1); + this.fluidStack2 = this.blockEntity.getFluidStackInTank(2); + + addPlayerInventory(inventory); + addPlayerHotbar(inventory); + + addDataSlots(data); + } + + public PancheonBlockEntity getBlockEntity() { + return this.blockEntity; + } + + // CREDIT GOES TO: diesieben07 | https://github.com/diesieben07/SevenCommons + // must assign a slot number to each of the slots used by the GUI. + // For this container, we can see both the tile inventory's slots, the player inventory slots and the hotbar. + // Each time we add a Slot to the container, it automatically increases the slotIndex, which means + // 0 - 8 = hotbar slots (which will map to the InventoryPlayer slot numbers 0 - 8) + // 9 - 35 = player inventory slots (which map to the InventoryPlayer slot numbers 9 - 35) + // 36 - 44 = TileInventory slots, which map to our TileEntity slot numbers 0 - 8) + private static final int HOTBAR_SLOT_COUNT = 9; + private static final int PLAYER_INVENTORY_ROW_COUNT = 3; + private static final int PLAYER_INVENTORY_COLUMN_COUNT = 9; + private static final int PLAYER_INVENTORY_SLOT_COUNT = PLAYER_INVENTORY_COLUMN_COUNT * PLAYER_INVENTORY_ROW_COUNT; + private static final int VANILLA_SLOT_COUNT = HOTBAR_SLOT_COUNT + PLAYER_INVENTORY_SLOT_COUNT; + private static final int VANILLA_FIRST_SLOT_INDEX = 0; + private static final int TE_INVENTORY_FIRST_SLOT_INDEX = VANILLA_FIRST_SLOT_INDEX + VANILLA_SLOT_COUNT; + + private static final int TE_INVENTORY_SLOT_COUNT = 0; // must be the number of slots you have! + + @Override + public ItemStack quickMoveStack(Player playerIn, int index) { + Slot sourceSlot = slots.get(index); + if (sourceSlot == null || !sourceSlot.hasItem()) return ItemStack.EMPTY; //EMPTY_ITEM + ItemStack sourceStack = sourceSlot.getItem(); + ItemStack copyOfSourceStack = sourceStack.copy(); + + // Check if the slot clicked is one of the vanilla container slots + if (index < VANILLA_FIRST_SLOT_INDEX + VANILLA_SLOT_COUNT) { + // This is a vanilla container slot so merge the stack into the tile inventory + if (!moveItemStackTo(sourceStack, TE_INVENTORY_FIRST_SLOT_INDEX, TE_INVENTORY_FIRST_SLOT_INDEX + + TE_INVENTORY_SLOT_COUNT, false)) { + return ItemStack.EMPTY; // EMPTY_ITEM + } + } else if (index < TE_INVENTORY_FIRST_SLOT_INDEX + TE_INVENTORY_SLOT_COUNT) { + // This is a TE slot so merge the stack into the players inventory + if (!moveItemStackTo(sourceStack, VANILLA_FIRST_SLOT_INDEX, VANILLA_FIRST_SLOT_INDEX + VANILLA_SLOT_COUNT, false)) { + return ItemStack.EMPTY; + } + } else { + System.out.println("Invalid slotIndex:" + index); + return ItemStack.EMPTY; + } + // If stack size == 0 (the entire stack was moved) set slot contents to null + if (sourceStack.getCount() == 0) { + sourceSlot.set(ItemStack.EMPTY); + } else { + sourceSlot.setChanged(); + } + sourceSlot.onTake(playerIn, sourceStack); + return copyOfSourceStack; + } + + @Override + public boolean stillValid(Player player) { + return stillValid( + ContainerLevelAccess.create( + this.level, + this.blockEntity.getBlockPos() + ), + player, + this.block + ); + } + + private void addPlayerInventory(Inventory playerInventory) { + for (int i = 0; i < 3; ++i) { + for (int l = 0; l < 9; ++l) { + this.addSlot(new Slot(playerInventory, l + i * 9 + 9, 8 + l * 18, 84 + i * 18)); + } + } + } + + private void addPlayerHotbar(Inventory playerInventory) { + for (int i = 0; i < 9; ++i) { + this.addSlot(new Slot(playerInventory, i, 8 + i * 18, 142)); + } + } + + public void setFluid(int tankID, FluidStack fluidStack) throws NullPointerException { + switch (tankID) { + case 0 -> this.fluidStack0 = fluidStack; + case 1 -> this.fluidStack1 = fluidStack; + case 2 -> this.fluidStack2 = fluidStack; + default -> + throw new NullPointerException(String.format("PancheonMenu setFluidStack at <%s> does not have a fluid tank with the ID of %d!", blockEntity.getBlockPos().toString(), tankID)); + } + } + + public FluidStack getFluidStack(int tankID) { + return switch (tankID) { + case 0 -> this.blockEntity.getFluidStackInTank(0); + case 1 -> this.blockEntity.getFluidStackInTank(1); + case 2 -> this.blockEntity.getFluidStackInTank(2); + default -> + throw new NullPointerException(String.format("PancheonMenu getFluidStack at <%s> does not have a fluid tank with the ID of %d!", blockEntity.getBlockPos().toString(), tankID)); + }; + } + + @OnlyIn(Dist.CLIENT) + public int getProgressionScaled(int size) { + return this.blockEntity.getTickClock("current") != 0 && this.blockEntity.getTickClock("max") != 0 + ? this.blockEntity.getTickClock("current") * size / this.blockEntity.getTickClock("max") + : 0; + } + + +} diff --git a/src/main/java/growthcraft/milk/shared/Reference.java b/src/main/java/growthcraft/milk/shared/Reference.java new file mode 100644 index 0000000..aa5b5f3 --- /dev/null +++ b/src/main/java/growthcraft/milk/shared/Reference.java @@ -0,0 +1,136 @@ +package growthcraft.milk.shared; + +import growthcraft.lib.utils.ColorUtils; +import org.codehaus.plexus.util.StringUtils; + +public class Reference { + public static final String NAME_SHORT = "milk"; + + public static final String MODID = growthcraft.core.shared.Reference.MODID + "_" + NAME_SHORT; + + public static final String NAME = String.format("%s %s", + growthcraft.core.shared.Reference.NAME, + StringUtils.capitalise(NAME_SHORT)); + + public static final String VERSION = growthcraft.core.shared.Reference.VERSION; + + private Reference() { + /* Disable Automatic Creation of Public Constructor */ + } + + public static class UnlocalizedName { + + public static final String APPENZELLER = "appenzeller"; + public static final String ASIAGO = "asiago"; + public static final String BUTTER = "butter"; + public static final String BUTTER_MILK = "butter_milk"; + public static final String BUTTER_SALTED = "butter_salted"; + public static final String CASU_MARZU = "casu_marzu"; + public static final String CHEDDAR = "cheddar"; + public static final String CHEESE_BASE = "cheese_base"; + public static final String CHEESE_CLOTH = "cheese_cloth"; + public static final String CHEESE_PRESS = "cheese_press"; + public static final String CHEESE_PRESS_RECIPE = "cheese_press_recipe"; + public static final String CHEESE_WHEEL_TILE_ENTITY = "cheese_wheel_tile_entity"; + public static final String CHURN = "churn"; + public static final String CHURN_RECIPE = "churn_recipe"; + public static final String CONDENSED_MILK = "condensed_milk"; + public static final String CREAM = "cream"; + public static final String CULTURED_MILK = "cultured_milk"; + public static final String EMMENTALER = "emmentaler"; + public static final String GORGONZOLA = "gorgonzola"; + public static final String GOUDA = "gouda"; + public static final String ICE_CREAM_APPLE = "ice_cream_apple"; + public static final String ICE_CREAM_CHOCOLATE = "ice_cream_chocolate"; + public static final String ICE_CREAM_GRAPE_PURPLE = "ice_cream_grape_purple"; + public static final String ICE_CREAM_GRAPE_RED = "ice_cream_grape_red"; + public static final String ICE_CREAM_GRAPE_WHITE = "ice_cream_grape_white"; + public static final String ICE_CREAM_HONEY = "ice_cream_honey"; + public static final String ICE_CREAM_PUMPKIN = "ice_cream_pumpkin"; + public static final String ICE_CREAM_WATERMELON = "ice_cream_watermelon"; + public static final String KUMIS = "kumis"; + public static final String MILK = "milk"; + public static final String MILKING_BUCKET_COPPER = "milking_bucket_copper"; + public static final String MILKING_BUCKET_IRON = "milking_bucket_iron"; + public static final String MIXING_VAT = "mixing_vat"; + public static final String MIXING_VAT_FLUID_RECIPE = "mixing_vat_fluid_recipe"; + public static final String MIXING_VAT_ITEM_RECIPE = "mixing_vat_item_recipe"; + public static final String MIXING_VAT_RECIPE = "mixing_vat_recipe"; + public static final String MONTEREY = "monterey"; + public static final String PANCHEON = "pancheon"; + public static final String PANCHEON_RECIPE = "pancheon_recipe"; + public static final String PARMESAN = "parmesan"; + public static final String PRESS = "press"; + public static final String PROVOLONE = "provolone"; + public static final String RENNET = "rennet"; + public static final String RICOTTA = "ricotta"; + public static final String SKIM_MILK = "skim_milk"; + public static final String STARTER_CULTURE = "starter_culture"; + public static final String STOMACH = "stomach"; + public static final String THISTLE = "thistle"; + public static final String THISTLE_CROP = "thistle_crop"; + public static final String THISTLE_SEED = "thistle_seed"; + public static final String WHEY = "whey"; + public static final String YOGURT_APPLE = "yogurt_apple"; + public static final String YOGURT_CHOCOLATE = "yogurt_chocolate"; + public static final String YOGURT_GRAPE_PURPLE = "yogurt_grape_purple"; + public static final String YOGURT_GRAPE_RED = "yogurt_grape_red"; + public static final String YOGURT_GRAPE_WHITE = "yogurt_grape_white"; + public static final String YOGURT_HONEY = "yogurt_honey"; + public static final String YOGURT_PLAIN = "yogurt_plain"; + public static final String YOGURT_PUMPKIN = "yogurt_pumpkin"; + public static final String YOGURT_WATERMELON = "yogurt_watermelon"; + public static final String TAG_MIXING_VAT_TOOLS = "mixing_vat_tools"; + + private UnlocalizedName() { + /* Disable Automatic Creation of Public Constructor */ + } + } + + public static class ItemColor { + // Cheese Colors + public static final ColorUtils.GrowthcraftColor APPENZELLER_CHEESE = new ColorUtils.GrowthcraftColor(0xE9DA9A); + public static final ColorUtils.GrowthcraftColor ASIAGO_CHEESE = new ColorUtils.GrowthcraftColor(0xC1B9A0); + public static final ColorUtils.GrowthcraftColor CASU_MARZU_CHEESE = new ColorUtils.GrowthcraftColor(0x886C33); + public static final ColorUtils.GrowthcraftColor CHEDDAR_CHEESE = new ColorUtils.GrowthcraftColor(0xF2BE6F); + public static final ColorUtils.GrowthcraftColor EMMENTALER_CHEESE = new ColorUtils.GrowthcraftColor(0xF9F3CC); + public static final ColorUtils.GrowthcraftColor GORGONZOLA_CHEESE = new ColorUtils.GrowthcraftColor(0xD0C3B9); + public static final ColorUtils.GrowthcraftColor GOUDA_CHEESE = new ColorUtils.GrowthcraftColor(0xB99F3B); + public static final ColorUtils.GrowthcraftColor MONTEREY_CHEESE = new ColorUtils.GrowthcraftColor(0xF4F2DB); + public static final ColorUtils.GrowthcraftColor PARMESAN_CHEESE = new ColorUtils.GrowthcraftColor(0xE3D7B9); + public static final ColorUtils.GrowthcraftColor PROVOLONE_CHEESE = new ColorUtils.GrowthcraftColor(0xC3BCA3); + public static final ColorUtils.GrowthcraftColor RICOTTA_CHEESE = new ColorUtils.GrowthcraftColor(0xEEEDEC); + } + + public static class BlockColor { + // Cheese Colors + public static final ColorUtils.GrowthcraftColor APPENZELLER_CHEESE = new ColorUtils.GrowthcraftColor(0xE9DA9A); + public static final ColorUtils.GrowthcraftColor ASIAGO_CHEESE = new ColorUtils.GrowthcraftColor(0xC1B9A0); + public static final ColorUtils.GrowthcraftColor CASU_MARZU_CHEESE = new ColorUtils.GrowthcraftColor(0x886C33); + public static final ColorUtils.GrowthcraftColor CHEDDAR_CHEESE = new ColorUtils.GrowthcraftColor(0xF2BE6F); + public static final ColorUtils.GrowthcraftColor EMMENTALER_CHEESE = new ColorUtils.GrowthcraftColor(0xF9F3CC); + public static final ColorUtils.GrowthcraftColor GORGONZOLA_CHEESE = new ColorUtils.GrowthcraftColor(0xD0C3B9); + public static final ColorUtils.GrowthcraftColor GOUDA_CHEESE = new ColorUtils.GrowthcraftColor(0xB99F3B); + public static final ColorUtils.GrowthcraftColor MONTEREY_CHEESE = new ColorUtils.GrowthcraftColor(0xF4F2DB); + public static final ColorUtils.GrowthcraftColor PARMESAN_CHEESE = new ColorUtils.GrowthcraftColor(0xE3D7B9); + public static final ColorUtils.GrowthcraftColor PROVOLONE_CHEESE = new ColorUtils.GrowthcraftColor(0xC3BCA3); + public static final ColorUtils.GrowthcraftColor RICOTTA_CHEESE = new ColorUtils.GrowthcraftColor(0xEEEDEC); + } + + public static class FluidColor { + public static final ColorUtils.GrowthcraftColor BUTTER_MILK = new ColorUtils.GrowthcraftColor(0xFFFEF1B5); + public static final ColorUtils.GrowthcraftColor CHEESE_BASE = new ColorUtils.GrowthcraftColor(0xFFFDD0); + public static final ColorUtils.GrowthcraftColor CONDENSED_MILK = new ColorUtils.GrowthcraftColor(0xFFFFFFFA); + public static final ColorUtils.GrowthcraftColor CREAM = new ColorUtils.GrowthcraftColor(0xFFFFFDD0); + public static final ColorUtils.GrowthcraftColor CULTURED_MILK = new ColorUtils.GrowthcraftColor(0xFFF7D99E); + public static final ColorUtils.GrowthcraftColor KUMIS = new ColorUtils.GrowthcraftColor(0xFFF9F9F9); + public static final ColorUtils.GrowthcraftColor MILK = new ColorUtils.GrowthcraftColor(0xFFF6F8ED); + public static final ColorUtils.GrowthcraftColor RENNET = new ColorUtils.GrowthcraftColor(0xFF877243); + public static final ColorUtils.GrowthcraftColor SKIM_MILK = new ColorUtils.GrowthcraftColor(0xFFFFFFFA); + public static final ColorUtils.GrowthcraftColor WHEY = new ColorUtils.GrowthcraftColor(0xFF94a860); + + private FluidColor() { + /* Disable Automatic Creation of Public Constructor */ + } + } +} diff --git a/src/main/java/growthcraft/rice/GrowthcraftRice.java b/src/main/java/growthcraft/rice/GrowthcraftRice.java new file mode 100644 index 0000000..95797fb --- /dev/null +++ b/src/main/java/growthcraft/rice/GrowthcraftRice.java @@ -0,0 +1,55 @@ +package growthcraft.rice; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import growthcraft.rice.init.GrowthcraftRiceBlocks; +import growthcraft.rice.init.GrowthcraftRiceFluids; +import growthcraft.rice.init.GrowthcraftRiceItems; +import growthcraft.rice.init.client.GrowthcraftRiceBlockRenderers; +import growthcraft.rice.init.config.GrowthcraftRiceConfig; +import growthcraft.rice.shared.Reference; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.event.server.ServerStartingEvent; +import net.minecraftforge.eventbus.api.IEventBus; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; +import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; +import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; + +@Mod(Reference.MODID) +@Mod.EventBusSubscriber(modid = Reference.MODID, bus = Mod.EventBusSubscriber.Bus.MOD) +public class GrowthcraftRice { + public static final Logger LOGGER = LogManager.getLogger(Reference.MODID); + + public GrowthcraftRice() { + IEventBus modEventBus = FMLJavaModLoadingContext.get().getModEventBus(); + modEventBus.addListener(this::setup); + modEventBus.addListener(this::clientSetupEvent); + + // Config + GrowthcraftRiceConfig.loadConfig(); + + // Blocks, Items, Fluids, Block Entities, Containers + GrowthcraftRiceBlocks.BLOCKS.register(modEventBus); + GrowthcraftRiceItems.ITEMS.register(modEventBus); + GrowthcraftRiceFluids.FLUIDS.register(modEventBus); + + MinecraftForge.EVENT_BUS.register(this); + } + + private void clientSetupEvent(final FMLClientSetupEvent event) { + GrowthcraftRiceBlockRenderers.setRenderLayers(); + } + + private void setup(final FMLCommonSetupEvent event) { + // Do Nothing for now ... + } + + @SubscribeEvent + public void onServerStarting(ServerStartingEvent event) { + LOGGER.info("Growthcraft Rice starting up ..."); + } + +} diff --git a/src/main/java/growthcraft/rice/block/CultivatedFarmlandBlock.java b/src/main/java/growthcraft/rice/block/CultivatedFarmlandBlock.java new file mode 100644 index 0000000..1180c93 --- /dev/null +++ b/src/main/java/growthcraft/rice/block/CultivatedFarmlandBlock.java @@ -0,0 +1,163 @@ +package growthcraft.rice.block; + +import java.util.Random; + +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.tags.FluidTags; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.LevelAccessor; +import net.minecraft.world.level.LevelReader; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.SimpleWaterloggedBlock; +import net.minecraft.world.level.block.state.BlockBehaviour; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.StateDefinition; +import net.minecraft.world.level.block.state.properties.BlockStateProperties; +import net.minecraft.world.level.block.state.properties.BooleanProperty; +import net.minecraft.world.level.block.state.properties.IntegerProperty; +import net.minecraft.world.level.material.FluidState; +import net.minecraft.world.level.material.Fluids; +import net.minecraft.world.level.pathfinder.PathComputationType; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.VoxelShape; +import net.minecraftforge.fluids.FluidStack; + +public class CultivatedFarmlandBlock extends Block implements SimpleWaterloggedBlock { + public static final IntegerProperty MOISTURE = BlockStateProperties.MOISTURE; + public static final BooleanProperty WATERLOGGED = BlockStateProperties.WATERLOGGED; + + protected static final VoxelShape SHAPE = Block.box( + 0.0D, 0.0D, 0.0D, + 16.0D, 15.0D, 16.0D + ); + + public static final int MAX_MOISTURE = 7; + + public CultivatedFarmlandBlock() { + super(getInitProperties()); + this.registerDefaultState(this.stateDefinition.any().setValue(MOISTURE, Integer.valueOf(0)).setValue(WATERLOGGED, false)); + } + + private static Properties getInitProperties() { + Properties properties = BlockBehaviour.Properties.copy(Blocks.FARMLAND); + properties.noOcclusion(); + properties.randomTicks(); + return properties; + } + + @Override + public BlockState updateShape(BlockState p_53276_, Direction p_53277_, BlockState p_53278_, LevelAccessor p_53279_, BlockPos p_53280_, BlockPos p_53281_) { + if (p_53277_ == Direction.UP && !p_53276_.canSurvive(p_53279_, p_53280_)) { + p_53279_.scheduleTick(p_53280_, this, 1); + } + + return super.updateShape(p_53276_, p_53277_, p_53278_, p_53279_, p_53280_, p_53281_); + } + + @Override + public boolean canSurvive(BlockState blockState, LevelReader level, BlockPos blockPos) { + return true; + } + + @Override + public BlockState getStateForPlacement(BlockPlaceContext p_53249_) { + return !this.defaultBlockState().canSurvive(p_53249_.getLevel(), p_53249_.getClickedPos()) ? Blocks.DIRT.defaultBlockState() : super.getStateForPlacement(p_53249_); + } + + @Override + public boolean useShapeForLightOcclusion(BlockState p_53295_) { + return true; + } + + @Override + public VoxelShape getShape(BlockState p_53290_, BlockGetter p_53291_, BlockPos p_53292_, CollisionContext p_53293_) { + return SHAPE; + } + + @Override + public void tick(BlockState p_53262_, ServerLevel p_53263_, BlockPos p_53264_, Random p_53265_) { + if (!p_53262_.canSurvive(p_53263_, p_53264_)) { + turnToDirt(p_53262_, p_53263_, p_53264_); + } + } + + @Override + public void randomTick(BlockState blockState, ServerLevel level, BlockPos blockPos, Random random) { + int i = blockState.getValue(MOISTURE); + if (!isNearWater(level, blockPos) && !level.isRainingAt(blockPos.above())) { + if (i > 0) { + level.setBlock(blockPos, blockState.setValue(MOISTURE, Integer.valueOf(i - 1)), 2); + } else if (!isUnderCrops(level, blockPos)) { + turnToDirt(blockState, level, blockPos); + } + return; + } + + if (isNearWater(level, blockPos) && !blockState.getValue(WATERLOGGED)) { + this.placeLiquid(level, blockPos, blockState, new FluidStack(Fluids.WATER, 1000).getFluid().defaultFluidState()); + return; + } + + if(isNearWater(level, blockPos) && i < MAX_MOISTURE) { + level.setBlock( + blockPos, + blockState.setValue(MOISTURE, Integer.valueOf(i + 1)), 2 + ); + } + + } + + public boolean isWaterlogged(BlockState blockState, ServerLevel serverLevel, BlockPos blockPos) { + return serverLevel.getFluidState(blockPos).getType() == Fluids.WATER; + } + + @Override + public void fallOn(Level p_153227_, BlockState p_153228_, BlockPos p_153229_, Entity p_153230_, float p_153231_) { + if (!p_153227_.isClientSide && net.minecraftforge.common.ForgeHooks.onFarmlandTrample(p_153227_, p_153229_, Blocks.DIRT.defaultBlockState(), p_153231_, p_153230_)) { // Forge: Move logic to Entity#canTrample + turnToDirt(p_153228_, p_153227_, p_153229_); + } + + super.fallOn(p_153227_, p_153228_, p_153229_, p_153230_, p_153231_); + } + + public static void turnToDirt(BlockState p_53297_, Level p_53298_, BlockPos p_53299_) { + p_53298_.setBlockAndUpdate(p_53299_, pushEntitiesUp(p_53297_, Blocks.DIRT.defaultBlockState(), p_53298_, p_53299_)); + } + + private static boolean isUnderCrops(BlockGetter p_53251_, BlockPos p_53252_) { + BlockState plant = p_53251_.getBlockState(p_53252_.above()); + BlockState state = p_53251_.getBlockState(p_53252_); + return plant.getBlock() instanceof net.minecraftforge.common.IPlantable && state.canSustainPlant(p_53251_, p_53252_, Direction.UP, (net.minecraftforge.common.IPlantable)plant.getBlock()); + } + + private static boolean isNearWater(LevelReader levelReader, BlockPos blockPos) { + for(BlockPos blockpos : BlockPos.betweenClosed(blockPos.offset(-4, 0, -4), blockPos.offset(4, 1, 4))) { + if (levelReader.getFluidState(blockpos).is(FluidTags.WATER)) { + return true; + } + } + + return net.minecraftforge.common.FarmlandWaterManager.hasBlockWaterTicket(levelReader, blockPos); + } + + @Override + protected void createBlockStateDefinition(StateDefinition.Builder p_53283_) { + p_53283_.add(MOISTURE, WATERLOGGED); + } + + @Override + public FluidState getFluidState(BlockState state) { + return state.getValue(WATERLOGGED) ? Fluids.WATER.getSource(false) : super.getFluidState(state); + } + + @Override + public boolean isPathfindable(BlockState p_53267_, BlockGetter p_53268_, BlockPos p_53269_, PathComputationType p_53270_) { + return false; + } +} diff --git a/src/main/java/growthcraft/rice/block/RiceCropBlock.java b/src/main/java/growthcraft/rice/block/RiceCropBlock.java new file mode 100644 index 0000000..1cf5360 --- /dev/null +++ b/src/main/java/growthcraft/rice/block/RiceCropBlock.java @@ -0,0 +1,57 @@ +package growthcraft.rice.block; + +import growthcraft.rice.init.GrowthcraftRiceBlocks; +import growthcraft.rice.init.GrowthcraftRiceItems; +import net.minecraft.core.BlockPos; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.item.ItemEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.ItemLike; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.LevelReader; +import net.minecraft.world.level.block.CropBlock; +import net.minecraft.world.level.block.SoundType; +import net.minecraft.world.level.block.state.BlockBehaviour; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.material.Material; +import net.minecraft.world.phys.BlockHitResult; + +public class RiceCropBlock extends CropBlock { + + public RiceCropBlock() { + super(getInitProperties()); + } + + private static BlockBehaviour.Properties getInitProperties() { + Object AbstractBlock; + BlockBehaviour.Properties properties = BlockBehaviour.Properties.of(Material.PLANT); + properties.noCollission(); + properties.randomTicks(); + properties.instabreak(); + properties.sound(SoundType.CROP); + return properties; + } + + @Override + protected ItemLike getBaseSeedId() { + return GrowthcraftRiceItems.RICE.get(); + } + + @Override + public InteractionResult use(BlockState state, Level level, BlockPos pos, Player player, InteractionHand handIn, BlockHitResult hit) { + if(state.getValue(AGE) == this.getMaxAge()) { + ItemEntity itemEntity = new ItemEntity(level, pos.getX(), pos.getY(), pos.getZ(), new ItemStack(GrowthcraftRiceItems.RICE_STALK.get())); + level.addFreshEntity(itemEntity); + level.setBlock(pos, this.getStateForAge(0), 2); + } + return InteractionResult.PASS; + } + + @Override + public boolean canSurvive(BlockState state, LevelReader level, BlockPos pos) { + return level.getBlockState(pos.below()).is(GrowthcraftRiceBlocks.CULTIVATED_FARMLAND.get()); + } + +} diff --git a/src/main/java/growthcraft/rice/init/GrowthcraftRiceBlocks.java b/src/main/java/growthcraft/rice/init/GrowthcraftRiceBlocks.java new file mode 100644 index 0000000..b0a40b1 --- /dev/null +++ b/src/main/java/growthcraft/rice/init/GrowthcraftRiceBlocks.java @@ -0,0 +1,55 @@ +package growthcraft.rice.init; + +import growthcraft.rice.block.CultivatedFarmlandBlock; +import growthcraft.rice.block.RiceCropBlock; +import growthcraft.rice.shared.Reference; +import net.minecraft.world.item.BlockItem; +import net.minecraft.world.item.Item; +import net.minecraft.world.level.block.Block; +import net.minecraftforge.registries.DeferredRegister; +import net.minecraftforge.registries.ForgeRegistries; +import net.minecraftforge.registries.RegistryObject; + +import java.util.function.Supplier; + +public class GrowthcraftRiceBlocks { + public static final DeferredRegister BLOCKS = DeferredRegister.create( + ForgeRegistries.BLOCKS, Reference.MODID + ); + + public static final RegistryObject CULTIVATED_FARMLAND = registerBlock( + Reference.UnlocalizedName.CULTIVATED_FARMLAND, CultivatedFarmlandBlock::new + ); + + public static final RegistryObject RICE_CROP = registerBlock( + Reference.UnlocalizedName.RICE_CROP, RiceCropBlock::new + ); + + private static RegistryObject registerBlock(String name, Supplier block) { + return registerBlock(name, block, false); + } + + private static RegistryObject registerBlock(String name, Supplier block, boolean excludeBlockItemRegistry) { + RegistryObject registryObject = BLOCKS.register(name, block); + if (!excludeBlockItemRegistry) { + registerBlockItem(name, registryObject); + } + return registryObject; + } + + private static void registerBlockItem(String name, RegistryObject blockRegistryObject) { + GrowthcraftRiceItems.ITEMS.register( + name, + () -> new BlockItem(blockRegistryObject.get(), getDefaultItemProperties()) + ); + } + + private static Item.Properties getDefaultItemProperties() { + Item.Properties properties = new Item.Properties().tab(growthcraft.core.shared.Reference.ITEM_GROUP); + return properties; + } + + private GrowthcraftRiceBlocks() { + /* Disable default public constructor */ + } +} diff --git a/src/main/java/growthcraft/rice/init/GrowthcraftRiceFluids.java b/src/main/java/growthcraft/rice/init/GrowthcraftRiceFluids.java new file mode 100644 index 0000000..42d3986 --- /dev/null +++ b/src/main/java/growthcraft/rice/init/GrowthcraftRiceFluids.java @@ -0,0 +1,134 @@ +package growthcraft.rice.init; + +import growthcraft.lib.utils.FluidUtils; +import growthcraft.rice.shared.Reference; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.world.level.block.LiquidBlock; +import net.minecraft.world.level.block.state.BlockBehaviour; +import net.minecraft.world.level.material.FlowingFluid; +import net.minecraft.world.level.material.Fluid; +import net.minecraft.world.level.material.Material; +import net.minecraftforge.fluids.FluidAttributes; +import net.minecraftforge.fluids.ForgeFlowingFluid; +import net.minecraftforge.registries.DeferredRegister; +import net.minecraftforge.registries.ForgeRegistries; +import net.minecraftforge.registries.RegistryObject; + +public class GrowthcraftRiceFluids { + public static final DeferredRegister FLUIDS = DeferredRegister.create( + ForgeRegistries.FLUIDS, Reference.MODID + ); + +// public static final DeferredRegister FLUID_TYPES = DeferredRegister.create( +// ForgeRegistries.Keys.FLUID_TYPES, Reference.MODID +// ); + + public static final RegistryObject RICE_WATER + = FLUIDS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.RICE_WATER).get(FluidUtils.STILL), () -> new ForgeFlowingFluid.Source(GrowthcraftRiceFluids.RICE_WATER_PROPERTIES)); + + public static final RegistryObject RICE_WATER_FLOWING + = FLUIDS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.RICE_WATER).get(FluidUtils.FLOWING), () -> new ForgeFlowingFluid.Flowing(GrowthcraftRiceFluids.RICE_WATER_PROPERTIES)); + + + public static final ForgeFlowingFluid.Properties RICE_WATER_PROPERTIES = new ForgeFlowingFluid.Properties( + () -> RICE_WATER.get(), () -> RICE_WATER_FLOWING.get(), FluidAttributes.builder(FluidUtils.FluidResource.STILL, FluidUtils.FluidResource.FLOWING) + .sound(SoundEvents.BUCKET_EMPTY).overlay(FluidUtils.FluidResource.OVERLAY) + .color(Reference.FluidColor.RICE_WATER.toIntValue())).slopeFindDistance(2).levelDecreasePerBlock(2) + .block(() -> GrowthcraftRiceFluids.RICE_WATER_FLUID_BLOCK.get()).bucket(() -> GrowthcraftRiceItems.RICE_WATER_BUCKET.get()); + + public static final RegistryObject RICE_WATER_FLUID_BLOCK = GrowthcraftRiceBlocks.BLOCKS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.RICE_WATER).get(FluidUtils.STILL), + () -> new LiquidBlock(() -> GrowthcraftRiceFluids.RICE_WATER.get(), BlockBehaviour.Properties.of(Material.WATER) + .noCollission().strength(100f).noDrops())); + + public static final RegistryObject RICE_WINE + = FLUIDS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.RICE_WINE).get(FluidUtils.STILL), () -> new ForgeFlowingFluid.Source(GrowthcraftRiceFluids.RICE_WINE_PROPERTIES)); + + public static final RegistryObject RICE_WINE_FLOWING + = FLUIDS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.RICE_WINE).get(FluidUtils.FLOWING), () -> new ForgeFlowingFluid.Flowing(GrowthcraftRiceFluids.RICE_WINE_PROPERTIES)); + + + public static final ForgeFlowingFluid.Properties RICE_WINE_PROPERTIES = new ForgeFlowingFluid.Properties( + () -> RICE_WINE.get(), () -> RICE_WINE_FLOWING.get(), FluidAttributes.builder(FluidUtils.FluidResource.STILL, FluidUtils.FluidResource.FLOWING) + .sound(SoundEvents.BUCKET_EMPTY).overlay(FluidUtils.FluidResource.OVERLAY) + .color(Reference.FluidColor.RICE_WINE.toIntValue())).slopeFindDistance(2).levelDecreasePerBlock(2) + .block(() -> GrowthcraftRiceFluids.RICE_WINE_FLUID_BLOCK.get()).bucket(() -> GrowthcraftRiceItems.RICE_WINE_BUCKET.get()); + + public static final RegistryObject RICE_WINE_FLUID_BLOCK = GrowthcraftRiceBlocks.BLOCKS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.RICE_WINE).get(FluidUtils.STILL), + () -> new LiquidBlock(() -> GrowthcraftRiceFluids.RICE_WINE.get(), BlockBehaviour.Properties.of(Material.WATER) + .noCollission().strength(100f).noDrops())); + + public static final RegistryObject SAKE + = FLUIDS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.SAKE).get(FluidUtils.STILL), () -> new ForgeFlowingFluid.Source(GrowthcraftRiceFluids.SAKE_PROPERTIES)); + + public static final RegistryObject SAKE_FLOWING + = FLUIDS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.SAKE).get(FluidUtils.FLOWING), () -> new ForgeFlowingFluid.Flowing(GrowthcraftRiceFluids.SAKE_PROPERTIES)); + + + public static final ForgeFlowingFluid.Properties SAKE_PROPERTIES = new ForgeFlowingFluid.Properties( + () -> SAKE.get(), () -> SAKE_FLOWING.get(), FluidAttributes.builder(FluidUtils.FluidResource.STILL, FluidUtils.FluidResource.FLOWING) + .sound(SoundEvents.BUCKET_EMPTY).overlay(FluidUtils.FluidResource.OVERLAY) + .color(Reference.FluidColor.SAKE.toIntValue())).slopeFindDistance(2).levelDecreasePerBlock(2) + .block(() -> GrowthcraftRiceFluids.SAKE_FLUID_BLOCK.get()).bucket(() -> GrowthcraftRiceItems.SAKE_BUCKET.get()); + + public static final RegistryObject SAKE_FLUID_BLOCK = GrowthcraftRiceBlocks.BLOCKS.register(FluidUtils.getFluidNames(Reference.UnlocalizedName.SAKE).get(FluidUtils.STILL), + () -> new LiquidBlock(() -> GrowthcraftRiceFluids.SAKE.get(), BlockBehaviour.Properties.of(Material.WATER) + .noCollission().strength(100f).noDrops())); + +// public static final GrowthcraftRiceFluidRegistryContainer RICE_WATER = new GrowthcraftRiceFluidRegistryContainer( +// FluidUtils.getFluidNames(Reference.UnlocalizedName.RICE_WATER).get(FluidUtils.STILL), +// FluidType.Properties.create().canSwim(true).canDrown(true).canPushEntity(true).supportsBoating(true), +// () -> GrowthcraftRiceFluidRegistryContainer.createExtension( +// new ClientFluidTypeExtensions( +// Reference.MODID, +// FluidUtils.getFluidNames(Reference.UnlocalizedName.RICE_WATER).get(FluidUtils.STILL) +// ).tint(Reference.FluidColor.RICE_WATER.toIntValue()) +// .fogColor( +// Reference.FluidColor.RICE_WATER.toFloatValues().get("red"), +// Reference.FluidColor.RICE_WATER.toFloatValues().get("green"), +// Reference.FluidColor.RICE_WATER.toFloatValues().get("blue") +// ) +// ), +// BlockBehaviour.Properties.copy(Blocks.WATER), +// new Item.Properties().stacksTo(1) +// ); +// +// public static final GrowthcraftRiceFluidRegistryContainer RICE_WINE = new GrowthcraftRiceFluidRegistryContainer( +// FluidUtils.getFluidNames(Reference.UnlocalizedName.RICE_WINE).get(FluidUtils.STILL), +// FluidType.Properties.create().canSwim(true).canDrown(true).canPushEntity(true).supportsBoating(true), +// () -> GrowthcraftRiceFluidRegistryContainer.createExtension( +// new ClientFluidTypeExtensions( +// Reference.MODID, +// FluidUtils.getFluidNames(Reference.UnlocalizedName.RICE_WINE).get(FluidUtils.STILL) +// ).tint(Reference.FluidColor.RICE_WINE.toIntValue()) +// .fogColor( +// Reference.FluidColor.RICE_WINE.toFloatValues().get("red"), +// Reference.FluidColor.RICE_WINE.toFloatValues().get("green"), +// Reference.FluidColor.RICE_WINE.toFloatValues().get("blue") +// ) +// ), +// BlockBehaviour.Properties.copy(Blocks.WATER), +// new Item.Properties().stacksTo(1) +// ); +// +// public static final GrowthcraftRiceFluidRegistryContainer SAKE = new GrowthcraftRiceFluidRegistryContainer( +// FluidUtils.getFluidNames(Reference.UnlocalizedName.SAKE).get(FluidUtils.STILL), +// FluidType.Properties.create().canSwim(true).canDrown(true).canPushEntity(true).supportsBoating(true), +// () -> GrowthcraftRiceFluidRegistryContainer.createExtension( +// new ClientFluidTypeExtensions( +// Reference.MODID, +// FluidUtils.getFluidNames(Reference.UnlocalizedName.SAKE).get(FluidUtils.STILL) +// ).tint(Reference.FluidColor.SAKE.toIntValue()) +// .fogColor( +// Reference.FluidColor.SAKE.toFloatValues().get("red"), +// Reference.FluidColor.SAKE.toFloatValues().get("green"), +// Reference.FluidColor.SAKE.toFloatValues().get("blue") +// ) +// ), +// BlockBehaviour.Properties.copy(Blocks.WATER), +// new Item.Properties().stacksTo(1) +// ); + + private GrowthcraftRiceFluids() { + /* Prevent default public constructor */ + } +} diff --git a/src/main/java/growthcraft/rice/init/GrowthcraftRiceItems.java b/src/main/java/growthcraft/rice/init/GrowthcraftRiceItems.java new file mode 100644 index 0000000..26645d7 --- /dev/null +++ b/src/main/java/growthcraft/rice/init/GrowthcraftRiceItems.java @@ -0,0 +1,94 @@ +package growthcraft.rice.init; + +import java.util.ArrayList; + +import growthcraft.lib.item.GrowthcraftBucketItem; +import growthcraft.lib.item.GrowthcraftFoodItem; +import growthcraft.lib.item.GrowthcraftItem; +import growthcraft.lib.utils.FluidUtils; +import growthcraft.rice.item.CultivatorItem; +import growthcraft.rice.item.RiceSeedItem; +import growthcraft.rice.shared.Reference; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.Item; +import net.minecraft.world.level.block.ComposterBlock; +import net.minecraftforge.registries.DeferredRegister; +import net.minecraftforge.registries.ForgeRegistries; +import net.minecraftforge.registries.RegistryObject; + +public class GrowthcraftRiceItems { + public static final DeferredRegister ITEMS = DeferredRegister.create( + ForgeRegistries.ITEMS, Reference.MODID + ); + + public static final RegistryObject CULTIVATOR = ITEMS.register( + Reference.UnlocalizedName.CULTIVATOR, + CultivatorItem::new + ); + + public static final RegistryObject KNIFE = ITEMS.register( + Reference.UnlocalizedName.KNIFE, + GrowthcraftItem::new + ); + + public static final RegistryObject RICE = ITEMS.register( + Reference.UnlocalizedName.RICE, + RiceSeedItem::new + ); + + public static final RegistryObject RICE_COOKED = ITEMS.register( + Reference.UnlocalizedName.RICE_COOKED, + GrowthcraftFoodItem::new + ); + + public static final RegistryObject RICE_STALK = ITEMS.register( + Reference.UnlocalizedName.RICE_STALK, + GrowthcraftItem::new + ); + + public static final RegistryObject SUSHI_ROLL = ITEMS.register( + Reference.UnlocalizedName.SUSHI_ROLL, + GrowthcraftFoodItem::new + ); + + public static final RegistryObject YEAST_SEISHU = ITEMS.register( + Reference.UnlocalizedName.YEAST_SEISHU, GrowthcraftItem::new + ); + + public static final RegistryObject RICE_WATER_BUCKET = ITEMS.register( + FluidUtils.getFluidNames(Reference.UnlocalizedName.RICE_WATER).get(FluidUtils.BUCKET), + () -> new GrowthcraftBucketItem(GrowthcraftRiceFluids.RICE_WATER, Reference.FluidColor.RICE_WATER.getColor())); + + public static final RegistryObject RICE_WINE_BUCKET = ITEMS.register( + FluidUtils.getFluidNames(Reference.UnlocalizedName.RICE_WINE).get(FluidUtils.BUCKET), + () -> new GrowthcraftBucketItem(GrowthcraftRiceFluids.RICE_WINE, Reference.FluidColor.RICE_WINE.getColor())); + + public static final RegistryObject SAKE_BUCKET = ITEMS.register( + FluidUtils.getFluidNames(Reference.UnlocalizedName.SAKE).get(FluidUtils.BUCKET), + () -> new GrowthcraftBucketItem(GrowthcraftRiceFluids.SAKE, Reference.FluidColor.SAKE.getColor())); + + public static void registerCompostables() { + float f = 0.3F; + float f1 = 0.5F; + float f2 = 0.65F; + float f3 = 0.85F; + float f4 = 1.0F; + + // Add rice as a compostable + ComposterBlock.COMPOSTABLES.put(GrowthcraftRiceItems.RICE.get(), f2); + ComposterBlock.COMPOSTABLES.put(GrowthcraftRiceItems.RICE_COOKED.get(), f3); + ComposterBlock.COMPOSTABLES.put(GrowthcraftRiceItems.RICE_STALK.get(), f1); + ComposterBlock.COMPOSTABLES.put(GrowthcraftRiceItems.SUSHI_ROLL.get(), f4); + + } + + public static boolean excludeItemRegistry(ResourceLocation registryName) { + ArrayList excludeItems = new ArrayList<>(); + //excludeItems.add(Reference.MODID + ":" + Reference.UnlocalizedName.APPLE_TREE_FRUIT); + return excludeItems.contains(registryName.toString()); + } + + private GrowthcraftRiceItems() { + /* Prevent default public constructor */ + } +} diff --git a/src/main/java/growthcraft/rice/init/client/GrowthcraftRiceBlockRenderers.java b/src/main/java/growthcraft/rice/init/client/GrowthcraftRiceBlockRenderers.java new file mode 100644 index 0000000..fba0f46 --- /dev/null +++ b/src/main/java/growthcraft/rice/init/client/GrowthcraftRiceBlockRenderers.java @@ -0,0 +1,31 @@ +package growthcraft.rice.init.client; + +import growthcraft.rice.init.GrowthcraftRiceBlocks; +import growthcraft.rice.init.GrowthcraftRiceFluids; +import net.minecraft.client.renderer.ItemBlockRenderTypes; +import net.minecraft.client.renderer.RenderType; + +public class GrowthcraftRiceBlockRenderers { + + public static void setRenderLayers() { + setFluidRenderLayers(); + setBlockRenderLayers(); + } + + private static void setBlockRenderLayers() { + ItemBlockRenderTypes.setRenderLayer(GrowthcraftRiceBlocks.RICE_CROP.get(), RenderType.cutout()); + } + + private static void setFluidRenderLayers() { + ItemBlockRenderTypes.setRenderLayer(GrowthcraftRiceFluids.RICE_WATER.get().getSource(), RenderType.translucent()); + ItemBlockRenderTypes.setRenderLayer(GrowthcraftRiceFluids.RICE_WATER.get().getFlowing(), RenderType.translucent()); + ItemBlockRenderTypes.setRenderLayer(GrowthcraftRiceFluids.RICE_WINE.get().getSource(), RenderType.translucent()); + ItemBlockRenderTypes.setRenderLayer(GrowthcraftRiceFluids.RICE_WINE.get().getFlowing(), RenderType.translucent()); + ItemBlockRenderTypes.setRenderLayer(GrowthcraftRiceFluids.SAKE.get().getSource(), RenderType.translucent()); + ItemBlockRenderTypes.setRenderLayer(GrowthcraftRiceFluids.SAKE.get().getFlowing(), RenderType.translucent()); + } + + private GrowthcraftRiceBlockRenderers() { + /* Prevent default public constructor */ + } +} diff --git a/src/main/java/growthcraft/rice/init/client/GrowthcraftRiceItemRenderers.java b/src/main/java/growthcraft/rice/init/client/GrowthcraftRiceItemRenderers.java new file mode 100644 index 0000000..a1f93d0 --- /dev/null +++ b/src/main/java/growthcraft/rice/init/client/GrowthcraftRiceItemRenderers.java @@ -0,0 +1,25 @@ +package growthcraft.rice.init.client; + +import growthcraft.lib.client.ItemRendererUtils; +import growthcraft.rice.init.GrowthcraftRiceFluids; +import growthcraft.rice.shared.Reference; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.client.event.ColorHandlerEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; + +@Mod.EventBusSubscriber(value = Dist.CLIENT, bus = Mod.EventBusSubscriber.Bus.MOD) +public class GrowthcraftRiceItemRenderers { + + @SubscribeEvent + public static void registerItemRenders(ColorHandlerEvent.Item event) { + ItemRendererUtils.registerItem(event, Reference.FluidColor.RICE_WATER.toItemColor(), GrowthcraftRiceFluids.RICE_WATER.get().getBucket()); + ItemRendererUtils.registerItem(event, Reference.FluidColor.RICE_WINE.toItemColor(), GrowthcraftRiceFluids.RICE_WINE.get().getBucket()); + ItemRendererUtils.registerItem(event, Reference.FluidColor.SAKE.toItemColor(), GrowthcraftRiceFluids.SAKE.get().getBucket()); + } + + private GrowthcraftRiceItemRenderers() { + /* Prevent automatic public constructor */ + } + +} diff --git a/src/main/java/growthcraft/rice/init/config/GrowthcraftRiceConfig.java b/src/main/java/growthcraft/rice/init/config/GrowthcraftRiceConfig.java new file mode 100644 index 0000000..578d6ce --- /dev/null +++ b/src/main/java/growthcraft/rice/init/config/GrowthcraftRiceConfig.java @@ -0,0 +1,40 @@ +package growthcraft.rice.init.config; + +import com.electronwill.nightconfig.core.file.CommentedFileConfig; +import com.electronwill.nightconfig.core.io.WritingMode; +import net.minecraftforge.common.ForgeConfigSpec; +import net.minecraftforge.fml.loading.FMLPaths; + +import java.io.File; + +public class GrowthcraftRiceConfig { + + public static final ForgeConfigSpec.Builder SERVER_BUILDER = new ForgeConfigSpec.Builder(); + public static final ForgeConfigSpec SERVER; + public static final String SERVER_CONFIG = "growthcraft-rice-server.toml"; + + static { + initServerConfig(SERVER_BUILDER); + SERVER = SERVER_BUILDER.build(); + } + + private GrowthcraftRiceConfig() { + /* Prevent generation of public constructor */ + } + + public static void loadConfig() { + loadConfig(SERVER, FMLPaths.CONFIGDIR.get().resolve(SERVER_CONFIG).toString()); + } + + public static void loadConfig(ForgeConfigSpec configSpec, String path) { + final CommentedFileConfig fileConfig = CommentedFileConfig.builder( + new File(path)).sync().autosave().writingMode(WritingMode.REPLACE).build(); + + fileConfig.load(); + configSpec.setConfig(fileConfig); + } + + public static void initServerConfig(ForgeConfigSpec.Builder specBuilder) { + // Init Server Side Configuration + } +} diff --git a/src/main/java/growthcraft/rice/item/CultivatorItem.java b/src/main/java/growthcraft/rice/item/CultivatorItem.java new file mode 100644 index 0000000..be644b9 --- /dev/null +++ b/src/main/java/growthcraft/rice/item/CultivatorItem.java @@ -0,0 +1,63 @@ +package growthcraft.rice.item; + +import growthcraft.core.shared.Reference; +import growthcraft.rice.init.GrowthcraftRiceBlocks; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.sounds.SoundSource; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.HoeItem; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.Tiers; +import net.minecraft.world.item.context.UseOnContext; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraftforge.common.ToolActions; + +public class CultivatorItem extends HoeItem { + + public CultivatorItem() { + super(Tiers.IRON, 6, -1.0F, getInitProperties()); + } + + private static Item.Properties getInitProperties() { + Item.Properties properties = new Item.Properties(); + properties.stacksTo(1); + properties.tab(Reference.ITEM_GROUP); + return properties; + } + + @Override + public InteractionResult useOn(UseOnContext context) { + Level level = context.getLevel(); + BlockPos blockpos = context.getClickedPos(); + Player player = context.getPlayer(); + + if (context.getClickedFace() != Direction.DOWN && level.getBlockState(blockpos.above()).isAir()) { + BlockState toolModifiedState = level.getBlockState(blockpos).getToolModifiedState(context, ToolActions.HOE_TILL, false); + + if (toolModifiedState != null) { + if (toolModifiedState.getBlock() == Blocks.FARMLAND) { + level.playSound(player, blockpos, SoundEvents.HOE_TILL, SoundSource.BLOCKS, 1.0F, 1.0F); + level.setBlock(blockpos, toolModifiedState, Block.UPDATE_IMMEDIATE); + context.getItemInHand().hurtAndBreak(1, player, (onBroken) -> { + onBroken.broadcastBreakEvent(context.getHand()); + }); + } + return InteractionResult.sidedSuccess(level.isClientSide); + } else if (level.getBlockState(blockpos).getBlock() == Blocks.FARMLAND) { + level.playSound(player, blockpos, SoundEvents.HOE_TILL, SoundSource.BLOCKS, 1.0F, 1.0F); + level.setBlock(blockpos, GrowthcraftRiceBlocks.CULTIVATED_FARMLAND.get().defaultBlockState(), Block.UPDATE_IMMEDIATE); + context.getItemInHand().hurtAndBreak(1, player, (onBroken) -> { + onBroken.broadcastBreakEvent(context.getHand()); + }); + } + } + + return InteractionResult.PASS; + } +} diff --git a/src/main/java/growthcraft/rice/item/RiceSeedItem.java b/src/main/java/growthcraft/rice/item/RiceSeedItem.java new file mode 100644 index 0000000..8a9856d --- /dev/null +++ b/src/main/java/growthcraft/rice/item/RiceSeedItem.java @@ -0,0 +1,32 @@ +package growthcraft.rice.item; + +import growthcraft.lib.item.GrowthcraftItem; +import growthcraft.rice.block.CultivatedFarmlandBlock; +import growthcraft.rice.init.GrowthcraftRiceBlocks; +import net.minecraft.core.BlockPos; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.item.context.UseOnContext; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; + +public class RiceSeedItem extends GrowthcraftItem { + + public RiceSeedItem() { + super(); + } + + @Override + public InteractionResult useOn(UseOnContext context) { + Level world = context.getLevel(); + BlockPos blockpos = context.getClickedPos(); + Block block = world.getBlockState(blockpos).getBlock(); + + if (block instanceof CultivatedFarmlandBlock) { + world.setBlock(blockpos.above(), GrowthcraftRiceBlocks.RICE_CROP.get().defaultBlockState(), Block.UPDATE_ALL); + context.getItemInHand().shrink(1); + return InteractionResult.SUCCESS; + } + + return InteractionResult.PASS; + } +} diff --git a/src/main/java/growthcraft/rice/shared/Reference.java b/src/main/java/growthcraft/rice/shared/Reference.java new file mode 100644 index 0000000..95062db --- /dev/null +++ b/src/main/java/growthcraft/rice/shared/Reference.java @@ -0,0 +1,49 @@ +package growthcraft.rice.shared; + +import growthcraft.lib.utils.ColorUtils; +import org.codehaus.plexus.util.StringUtils; + +public class Reference { + public static final String NAME_SHORT = "rice"; + + public static final String MODID = growthcraft.core.shared.Reference.MODID + "_" + NAME_SHORT; + public static final String NAME = String.format("%s %s", + growthcraft.core.shared.Reference.NAME, + StringUtils.capitalise(NAME_SHORT)); + + public static final String VERSION = growthcraft.core.shared.Reference.VERSION; + + public static class UnlocalizedName { + public static final String CULTIVATED_FARMLAND = "cultivated_farmland"; + public static final String CULTIVATOR = "cultivator"; + public static final String KNIFE = "knife"; + public static final String RICE = "rice"; + public static final String RICE_COOKED = "rice_cooked"; + public static final String RICE_CROP = "rice_crop"; + public static final String RICE_STALK = "rice_stalk"; + public static final String SUSHI_ROLL = "sushi_roll"; + // Fluids + public static final String RICE_WATER = "rice_water"; + public static final String RICE_WINE = "rice_wine"; + public static final String SAKE = "sake"; + public static final String YEAST_SEISHU = "yeast_seishu"; + + private UnlocalizedName() { + /* Disable Automatic Creation of Public Constructor */ + } + } + + public static class FluidColor { + public static final ColorUtils.GrowthcraftColor RICE_WATER = new ColorUtils.GrowthcraftColor(0xFFF6F8ED); + public static final ColorUtils.GrowthcraftColor RICE_WINE = new ColorUtils.GrowthcraftColor(0xFFD9DADB); + public static final ColorUtils.GrowthcraftColor SAKE = new ColorUtils.GrowthcraftColor(0xFFEAECEC); + + private FluidColor() { + /* Disable Automatic Creation of Public Constructor */ + } + } + + private Reference() { + /* Disable Automatic Creation of Public Constructor */ + } +} diff --git a/src/main/resources/META-INF/accesstransformer.cfg b/src/main/resources/META-INF/accesstransformer.cfg new file mode 100644 index 0000000..e69de29 diff --git a/src/main/resources/META-INF/mods.toml b/src/main/resources/META-INF/mods.toml index 1356109..44f64c7 100644 --- a/src/main/resources/META-INF/mods.toml +++ b/src/main/resources/META-INF/mods.toml @@ -1,62 +1,128 @@ -# This is an example mods.toml file. It contains the data relating to the loading mods. -# There are several mandatory fields (#mandatory), and many more that are optional (#optional). -# The overall format is standard TOML format, v0.5.0. -# Note that there are a couple of TOML lists in this file. -# Find more information on toml format here: https://github.com/toml-lang/toml -# The name of the mod loader type to load - for regular FML @Mod mods it should be javafml modLoader="javafml" #mandatory -# A version range to match for said mod loader - for regular FML @Mod it will be the forge version -loaderVersion="[38,)" #mandatory This is typically bumped every Minecraft version by Forge. See our download page for lists of versions. -# The license for you mod. This is mandatory metadata and allows for easier comprehension of your redistributive properties. -# Review your options at https://choosealicense.com/. All rights reserved is the default copyright stance, and is thus the default here. -license="All rights reserved" -# A URL to refer people to when problems occur with this mod -#issueTrackerURL="https://change.me.to.your.issue.tracker.example.invalid/" #optional -# A list of mods - how many allowed here is determined by the individual mod loader -[[mods]] #mandatory -# The modid of the mod -modId="examplemod" #mandatory -# The version number of the mod - there's a few well known ${} variables useable here or just hardcode it -# ${file.jarVersion} will substitute the value of the Implementation-Version as read from the mod's JAR file metadata -# see the associated build.gradle script for how to populate this completely automatically during a build -version="${file.jarVersion}" #mandatory - # A display name for the mod -displayName="Example Mod" #mandatory -# A URL to query for updates for this mod. See the JSON update specification https://mcforge.readthedocs.io/en/latest/gettingstarted/autoupdate/ -#updateJSONURL="https://change.me.example.invalid/updates.json" #optional -# A URL for the "homepage" for this mod, displayed in the mod UI -#displayURL="https://change.me.to.your.mods.homepage.example.invalid/" #optional -# A file name (in the root of the mod JAR) containing a logo for display -logoFile="examplemod.png" #optional -# A text field displayed in the mod UI -credits="Thanks for this example mod goes to Java" #optional -# A text field displayed in the mod UI -authors="Love, Cheese and small house plants" #optional -# The description text for the mod (multi line!) (#mandatory) -description=''' -This is a long form description of the mod. You can write whatever you want here - -Have some lorem ipsum. - -Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed mollis lacinia magna. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed sagittis luctus odio eu tempus. Interdum et malesuada fames ac ante ipsum primis in faucibus. Pellentesque volutpat ligula eget lacus auctor sagittis. In hac habitasse platea dictumst. Nunc gravida elit vitae sem vehicula efficitur. Donec mattis ipsum et arcu lobortis, eleifend sagittis sem rutrum. Cras pharetra quam eget posuere fermentum. Sed id tincidunt justo. Lorem ipsum dolor sit amet, consectetur adipiscing elit. +loaderVersion="[40,)" +license = "GPL-3.0" +issueTrackerURL = "https://github.com/GrowthcraftCE/Growthcraft-1.18/issues" + +[[mods]] +modId = "growthcraft" +version = "7.1.0" +displayName = "Growthcraft" +updateJSONURL = "https://raw.githubusercontent.com/GrowthcraftCE/Growthcraft-Updates/master/growthcraft-versions.json" +displayURL = "https://github.com/GrowthcraftCE/Growthcraft-1.18/wiki" +logoFile = "growthcraft_core_logo.png" +credits = "Thanks to Gwafu for starting a great mod. And the Growthcraft CE Development for continuing the work." +authors = "Alatyami" +description = ''' +Growthcraft is a realistic and immersive Forge mod that adds various new elements to the game of Minecraft. +''' + +[[dependencies.growthcraft]] #optional +modId = "forge" +mandatory = true +versionRange = "[40,)" +ordering = "NONE" +side = "BOTH" + +[[dependencies.growthcraft]] +modId = "minecraft" +mandatory = true +versionRange = "[1.18.2,1.19)" +ordering = "NONE" +side = "BOTH" + +[[mods]] +modId = "growthcraft_apiary" +version = "7.1.0" +displayName = "Growthcraft Apiary" +logoFile = "growthcraft_bees_logo.png" +description = ''' + Growthcraft Apiary (Bees) adds honey generation and processing. +''' + +[[dependencies.growthcraft_apiary]] +modId = "growthcraft" +mandatory = true +versionRange = "[7,)" +ordering = "AFTER" +side = "BOTH" + +[[mods]] +modId = "growthcraft_apples" +version = "7.1.0" +displayName = "Growthcraft Apples" +logoFile = "growthcraft_apples_logo.png" +description = ''' + Growthcraft Apples adds more ways to grow apples and to process it into juice and fermented drinks. +''' + +[[dependencies.growthcraft_apples]] +modId = "growthcraft" +mandatory = true +versionRange = "[7,)" +ordering = "AFTER" +side = "BOTH" + +[[mods]] +modId = "growthcraft_bamboo" +version = "7.1.0" +displayName = "Growthcraft Bamboo" +logoFile = "growthcraft_bamboo_logo.png" +description = ''' + Growthcraft Bamboo adds more ways to grow bamboo and to craft with it. ''' -# A dependency - use the . to indicate dependency for a specific modid. Dependencies are optional. -[[dependencies.examplemod]] #optional - # the modid of the dependency - modId="forge" #mandatory - # Does this dependency have to exist - if not, ordering below must be specified - mandatory=true #mandatory - # The version range of the dependency - versionRange="[38,)" #mandatory - # An ordering relationship for the dependency - BEFORE or AFTER required if the relationship is not mandatory - ordering="NONE" - # Side this dependency is applied on - BOTH, CLIENT or SERVER - side="BOTH" -# Here's another dependency -[[dependencies.examplemod]] - modId="minecraft" - mandatory=true -# This version range declares a minimum of the current minecraft version up to but not including the next major version - versionRange="[1.18,1.19)" - ordering="NONE" - side="BOTH" + +[[dependencies.growthcraft_apples]] +modId = "growthcraft" +mandatory = true +versionRange = "[7,)" +ordering = "AFTER" +side = "BOTH" + +[[mods]] +modId = "growthcraft_cellar" +version = "7.1.0" +displayName = "Growthcraft Cellar" +logoFile = "growthcraft_cellar_logo.png" +description = ''' + Growthcraft Cellar adds processing and fermentation for various items and drinks. +''' + +[[dependencies.growthcraft_cellar]] +modId = "growthcraft" +mandatory = true +versionRange = "[7,)" +ordering = "AFTER" +side = "BOTH" + +[[mods]] +modId = "growthcraft_milk" +version = "7.1.0" +displayName = "Growthcraft Milk" +logoFile = "growthcraft_milk_logo.png" +description = ''' + Growthcraft Milk adds more functionality to Vanilla Milk and provides processing to make it into cheese, ice cream, and various foods and drinks. +''' + +[[dependencies.growthcraft_milk]] +modId = "growthcraft" +mandatory = true +versionRange = "[7,)" +ordering = "AFTER" +side = "BOTH" + +[[mods]] +modId = "growthcraft_rice" +version = "7.1.0" +displayName = "Growthcraft Rice" +logoFile = "growthcraft_rice_logo.png" +description = ''' + Growthcraft Rice adds the ability to grow rice and produce food and fermented drinks from it. +''' + +[[dependencies.growthcraft_rice]] +modId = "growthcraft" +mandatory = true +versionRange = "[7,)" +ordering = "AFTER" +side = "BOTH" + diff --git a/src/main/resources/assets/growthcraft/blockstates/rope_linen.json b/src/main/resources/assets/growthcraft/blockstates/rope_linen.json new file mode 100644 index 0000000..9412c2d --- /dev/null +++ b/src/main/resources/assets/growthcraft/blockstates/rope_linen.json @@ -0,0 +1,77 @@ +{ + "multipart": [ + { + "apply": { + "model": "growthcraft:block/rope_linen" + } + }, + { + "when": { + "knot": true + }, + "apply": { + "model": "growthcraft:block/rope_linen_knot", + "uvlock": false + } + }, + { + "when": { + "north": "true" + }, + "apply": { + "model": "growthcraft:block/rope_linen_side", + "uvlock": false + } + }, + { + "when": { + "east": "true" + }, + "apply": { + "model": "growthcraft:block/rope_linen_side", + "y": 90, + "uvlock": false + } + }, + { + "when": { + "south": "true" + }, + "apply": { + "model": "growthcraft:block/rope_linen_side", + "y": 180, + "uvlock": false + } + }, + { + "when": { + "west": "true" + }, + "apply": { + "model": "growthcraft:block/rope_linen_side", + "y": 270, + "uvlock": false + } + }, + { + "when": { + "up": "true" + }, + "apply": { + "model": "growthcraft:block/rope_linen_side", + "x": 270, + "uvlock": false + } + }, + { + "when": { + "down": "true" + }, + "apply": { + "model": "growthcraft:block/rope_linen_side", + "x": 90, + "uvlock": false + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft/blockstates/rope_linen_acacia_fence.json b/src/main/resources/assets/growthcraft/blockstates/rope_linen_acacia_fence.json new file mode 100644 index 0000000..e19d6dc --- /dev/null +++ b/src/main/resources/assets/growthcraft/blockstates/rope_linen_acacia_fence.json @@ -0,0 +1,77 @@ +{ + "multipart": [ + { + "apply": { + "model": "minecraft:block/acacia_fence_post" + } + }, + { + "when": { + "knot": true + }, + "apply": { + "model": "growthcraft:block/rope_linen_knot", + "uvlock": false + } + }, + { + "when": { + "north": "true" + }, + "apply": { + "model": "growthcraft:block/rope_linen_side", + "uvlock": false + } + }, + { + "when": { + "east": "true" + }, + "apply": { + "model": "growthcraft:block/rope_linen_side", + "y": 90, + "uvlock": false + } + }, + { + "when": { + "south": "true" + }, + "apply": { + "model": "growthcraft:block/rope_linen_side", + "y": 180, + "uvlock": false + } + }, + { + "when": { + "west": "true" + }, + "apply": { + "model": "growthcraft:block/rope_linen_side", + "y": 270, + "uvlock": false + } + }, + { + "when": { + "up": "true" + }, + "apply": { + "model": "growthcraft:block/rope_linen_side", + "x": 270, + "uvlock": false + } + }, + { + "when": { + "down": "true" + }, + "apply": { + "model": "growthcraft:block/rope_linen_side", + "x": 90, + "uvlock": false + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft/blockstates/rope_linen_birch_fence.json b/src/main/resources/assets/growthcraft/blockstates/rope_linen_birch_fence.json new file mode 100644 index 0000000..b38aeb6 --- /dev/null +++ b/src/main/resources/assets/growthcraft/blockstates/rope_linen_birch_fence.json @@ -0,0 +1,77 @@ +{ + "multipart": [ + { + "apply": { + "model": "minecraft:block/birch_fence_post" + } + }, + { + "when": { + "knot": true + }, + "apply": { + "model": "growthcraft:block/rope_linen_knot", + "uvlock": false + } + }, + { + "when": { + "north": "true" + }, + "apply": { + "model": "growthcraft:block/rope_linen_side", + "uvlock": false + } + }, + { + "when": { + "east": "true" + }, + "apply": { + "model": "growthcraft:block/rope_linen_side", + "y": 90, + "uvlock": false + } + }, + { + "when": { + "south": "true" + }, + "apply": { + "model": "growthcraft:block/rope_linen_side", + "y": 180, + "uvlock": false + } + }, + { + "when": { + "west": "true" + }, + "apply": { + "model": "growthcraft:block/rope_linen_side", + "y": 270, + "uvlock": false + } + }, + { + "when": { + "up": "true" + }, + "apply": { + "model": "growthcraft:block/rope_linen_side", + "x": 270, + "uvlock": false + } + }, + { + "when": { + "down": "true" + }, + "apply": { + "model": "growthcraft:block/rope_linen_side", + "x": 90, + "uvlock": false + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft/blockstates/rope_linen_crimson_fence.json b/src/main/resources/assets/growthcraft/blockstates/rope_linen_crimson_fence.json new file mode 100644 index 0000000..255649e --- /dev/null +++ b/src/main/resources/assets/growthcraft/blockstates/rope_linen_crimson_fence.json @@ -0,0 +1,77 @@ +{ + "multipart": [ + { + "apply": { + "model": "minecraft:block/crimson_fence_post" + } + }, + { + "when": { + "knot": true + }, + "apply": { + "model": "growthcraft:block/rope_linen_knot", + "uvlock": false + } + }, + { + "when": { + "north": "true" + }, + "apply": { + "model": "growthcraft:block/rope_linen_side", + "uvlock": false + } + }, + { + "when": { + "east": "true" + }, + "apply": { + "model": "growthcraft:block/rope_linen_side", + "y": 90, + "uvlock": false + } + }, + { + "when": { + "south": "true" + }, + "apply": { + "model": "growthcraft:block/rope_linen_side", + "y": 180, + "uvlock": false + } + }, + { + "when": { + "west": "true" + }, + "apply": { + "model": "growthcraft:block/rope_linen_side", + "y": 270, + "uvlock": false + } + }, + { + "when": { + "up": "true" + }, + "apply": { + "model": "growthcraft:block/rope_linen_side", + "x": 270, + "uvlock": false + } + }, + { + "when": { + "down": "true" + }, + "apply": { + "model": "growthcraft:block/rope_linen_side", + "x": 90, + "uvlock": false + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft/blockstates/rope_linen_dark_oak_fence.json b/src/main/resources/assets/growthcraft/blockstates/rope_linen_dark_oak_fence.json new file mode 100644 index 0000000..39ee92d --- /dev/null +++ b/src/main/resources/assets/growthcraft/blockstates/rope_linen_dark_oak_fence.json @@ -0,0 +1,77 @@ +{ + "multipart": [ + { + "apply": { + "model": "minecraft:block/dark_oak_fence_post" + } + }, + { + "when": { + "knot": true + }, + "apply": { + "model": "growthcraft:block/rope_linen_knot", + "uvlock": false + } + }, + { + "when": { + "north": "true" + }, + "apply": { + "model": "growthcraft:block/rope_linen_side", + "uvlock": false + } + }, + { + "when": { + "east": "true" + }, + "apply": { + "model": "growthcraft:block/rope_linen_side", + "y": 90, + "uvlock": false + } + }, + { + "when": { + "south": "true" + }, + "apply": { + "model": "growthcraft:block/rope_linen_side", + "y": 180, + "uvlock": false + } + }, + { + "when": { + "west": "true" + }, + "apply": { + "model": "growthcraft:block/rope_linen_side", + "y": 270, + "uvlock": false + } + }, + { + "when": { + "up": "true" + }, + "apply": { + "model": "growthcraft:block/rope_linen_side", + "x": 270, + "uvlock": false + } + }, + { + "when": { + "down": "true" + }, + "apply": { + "model": "growthcraft:block/rope_linen_side", + "x": 90, + "uvlock": false + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft/blockstates/rope_linen_jungle_fence.json b/src/main/resources/assets/growthcraft/blockstates/rope_linen_jungle_fence.json new file mode 100644 index 0000000..4c4200c --- /dev/null +++ b/src/main/resources/assets/growthcraft/blockstates/rope_linen_jungle_fence.json @@ -0,0 +1,77 @@ +{ + "multipart": [ + { + "apply": { + "model": "minecraft:block/jungle_fence_post" + } + }, + { + "when": { + "knot": true + }, + "apply": { + "model": "growthcraft:block/rope_linen_knot", + "uvlock": false + } + }, + { + "when": { + "north": "true" + }, + "apply": { + "model": "growthcraft:block/rope_linen_side", + "uvlock": false + } + }, + { + "when": { + "east": "true" + }, + "apply": { + "model": "growthcraft:block/rope_linen_side", + "y": 90, + "uvlock": false + } + }, + { + "when": { + "south": "true" + }, + "apply": { + "model": "growthcraft:block/rope_linen_side", + "y": 180, + "uvlock": false + } + }, + { + "when": { + "west": "true" + }, + "apply": { + "model": "growthcraft:block/rope_linen_side", + "y": 270, + "uvlock": false + } + }, + { + "when": { + "up": "true" + }, + "apply": { + "model": "growthcraft:block/rope_linen_side", + "x": 270, + "uvlock": false + } + }, + { + "when": { + "down": "true" + }, + "apply": { + "model": "growthcraft:block/rope_linen_side", + "x": 90, + "uvlock": false + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft/blockstates/rope_linen_nether_brick_fence.json b/src/main/resources/assets/growthcraft/blockstates/rope_linen_nether_brick_fence.json new file mode 100644 index 0000000..c3daf63 --- /dev/null +++ b/src/main/resources/assets/growthcraft/blockstates/rope_linen_nether_brick_fence.json @@ -0,0 +1,77 @@ +{ + "multipart": [ + { + "apply": { + "model": "minecraft:block/nether_brick_fence_post" + } + }, + { + "when": { + "knot": true + }, + "apply": { + "model": "growthcraft:block/rope_linen_knot", + "uvlock": false + } + }, + { + "when": { + "north": "true" + }, + "apply": { + "model": "growthcraft:block/rope_linen_side", + "uvlock": false + } + }, + { + "when": { + "east": "true" + }, + "apply": { + "model": "growthcraft:block/rope_linen_side", + "y": 90, + "uvlock": false + } + }, + { + "when": { + "south": "true" + }, + "apply": { + "model": "growthcraft:block/rope_linen_side", + "y": 180, + "uvlock": false + } + }, + { + "when": { + "west": "true" + }, + "apply": { + "model": "growthcraft:block/rope_linen_side", + "y": 270, + "uvlock": false + } + }, + { + "when": { + "up": "true" + }, + "apply": { + "model": "growthcraft:block/rope_linen_side", + "x": 270, + "uvlock": false + } + }, + { + "when": { + "down": "true" + }, + "apply": { + "model": "growthcraft:block/rope_linen_side", + "x": 90, + "uvlock": false + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft/blockstates/rope_linen_oak_fence.json b/src/main/resources/assets/growthcraft/blockstates/rope_linen_oak_fence.json new file mode 100644 index 0000000..1a8a39c --- /dev/null +++ b/src/main/resources/assets/growthcraft/blockstates/rope_linen_oak_fence.json @@ -0,0 +1,77 @@ +{ + "multipart": [ + { + "apply": { + "model": "minecraft:block/oak_fence_post" + } + }, + { + "when": { + "knot": true + }, + "apply": { + "model": "growthcraft:block/rope_linen_knot", + "uvlock": false + } + }, + { + "when": { + "north": "true" + }, + "apply": { + "model": "growthcraft:block/rope_linen_side", + "uvlock": false + } + }, + { + "when": { + "east": "true" + }, + "apply": { + "model": "growthcraft:block/rope_linen_side", + "y": 90, + "uvlock": false + } + }, + { + "when": { + "south": "true" + }, + "apply": { + "model": "growthcraft:block/rope_linen_side", + "y": 180, + "uvlock": false + } + }, + { + "when": { + "west": "true" + }, + "apply": { + "model": "growthcraft:block/rope_linen_side", + "y": 270, + "uvlock": false + } + }, + { + "when": { + "up": "true" + }, + "apply": { + "model": "growthcraft:block/rope_linen_side", + "x": 270, + "uvlock": false + } + }, + { + "when": { + "down": "true" + }, + "apply": { + "model": "growthcraft:block/rope_linen_side", + "x": 90, + "uvlock": false + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft/blockstates/rope_linen_spruce_fence.json b/src/main/resources/assets/growthcraft/blockstates/rope_linen_spruce_fence.json new file mode 100644 index 0000000..f2e4bea --- /dev/null +++ b/src/main/resources/assets/growthcraft/blockstates/rope_linen_spruce_fence.json @@ -0,0 +1,77 @@ +{ + "multipart": [ + { + "apply": { + "model": "minecraft:block/spruce_fence_post" + } + }, + { + "when": { + "knot": true + }, + "apply": { + "model": "growthcraft:block/rope_linen_knot", + "uvlock": false + } + }, + { + "when": { + "north": "true" + }, + "apply": { + "model": "growthcraft:block/rope_linen_side", + "uvlock": false + } + }, + { + "when": { + "east": "true" + }, + "apply": { + "model": "growthcraft:block/rope_linen_side", + "y": 90, + "uvlock": false + } + }, + { + "when": { + "south": "true" + }, + "apply": { + "model": "growthcraft:block/rope_linen_side", + "y": 180, + "uvlock": false + } + }, + { + "when": { + "west": "true" + }, + "apply": { + "model": "growthcraft:block/rope_linen_side", + "y": 270, + "uvlock": false + } + }, + { + "when": { + "up": "true" + }, + "apply": { + "model": "growthcraft:block/rope_linen_side", + "x": 270, + "uvlock": false + } + }, + { + "when": { + "down": "true" + }, + "apply": { + "model": "growthcraft:block/rope_linen_side", + "x": 90, + "uvlock": false + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft/blockstates/rope_linen_warped_fence.json b/src/main/resources/assets/growthcraft/blockstates/rope_linen_warped_fence.json new file mode 100644 index 0000000..719a681 --- /dev/null +++ b/src/main/resources/assets/growthcraft/blockstates/rope_linen_warped_fence.json @@ -0,0 +1,77 @@ +{ + "multipart": [ + { + "apply": { + "model": "minecraft:block/warped_fence_post" + } + }, + { + "when": { + "knot": true + }, + "apply": { + "model": "growthcraft:block/rope_linen_knot", + "uvlock": false + } + }, + { + "when": { + "north": "true" + }, + "apply": { + "model": "growthcraft:block/rope_linen_side", + "uvlock": false + } + }, + { + "when": { + "east": "true" + }, + "apply": { + "model": "growthcraft:block/rope_linen_side", + "y": 90, + "uvlock": false + } + }, + { + "when": { + "south": "true" + }, + "apply": { + "model": "growthcraft:block/rope_linen_side", + "y": 180, + "uvlock": false + } + }, + { + "when": { + "west": "true" + }, + "apply": { + "model": "growthcraft:block/rope_linen_side", + "y": 270, + "uvlock": false + } + }, + { + "when": { + "up": "true" + }, + "apply": { + "model": "growthcraft:block/rope_linen_side", + "x": 270, + "uvlock": false + } + }, + { + "when": { + "down": "true" + }, + "apply": { + "model": "growthcraft:block/rope_linen_side", + "x": 90, + "uvlock": false + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft/blockstates/salt_block.json b/src/main/resources/assets/growthcraft/blockstates/salt_block.json new file mode 100644 index 0000000..8afd7a6 --- /dev/null +++ b/src/main/resources/assets/growthcraft/blockstates/salt_block.json @@ -0,0 +1,5 @@ +{ + "variants": { + "": { "model": "growthcraft:block/salt_block" } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft/blockstates/salt_ore.json b/src/main/resources/assets/growthcraft/blockstates/salt_ore.json new file mode 100644 index 0000000..cb62587 --- /dev/null +++ b/src/main/resources/assets/growthcraft/blockstates/salt_ore.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "growthcraft:block/salt_ore" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft/lang/en_us.json b/src/main/resources/assets/growthcraft/lang/en_us.json new file mode 100644 index 0000000..4c821c3 --- /dev/null +++ b/src/main/resources/assets/growthcraft/lang/en_us.json @@ -0,0 +1,54 @@ +{ + "advancements.growthcraft.root.description": " ", + "advancements.growthcraft.root.title": "Growthcraft", + "block.growthcraft.rope_linen": "Rope", + "block.growthcraft.rope_linen_acacia_fence": "Rope Acacia Fence Post", + "block.growthcraft.rope_linen_birch_fence": "Rope Birch Fence Post", + "block.growthcraft.rope_linen_crimson_fence": "Rope Crimson Fence Post", + "block.growthcraft.rope_linen_dark_oak_fence": "Rope Dark Oak Fence Post", + "block.growthcraft.rope_linen_jungle_fence": "Rope Jungle Fence Post", + "block.growthcraft.rope_linen_nether_brick_fence": "Rope Nether Brick Fence Post", + "block.growthcraft.rope_linen_oak_fence": "Rope Oak Fence Post", + "block.growthcraft.rope_linen_spruce_fence": "Rope Spruce Fence Post", + "block.growthcraft.rope_linen_warped_fence": "Rope Warped Fence Post", + "block.growthcraft.salt_block": "Salt Block", + "block.growthcraft.salt_ore": "Rock Salt Ore", + "growthcraft.apples.entry.apples_growing": "Growing Apples", + "growthcraft.category.apples": "Growthcraft Apples", + "growthcraft.entry.apples_crafting": "Apple Wood Products", + "growthcraft.tagline.apples_crafting": "Carpentry with apple wood!", + "growthcraft.tooltip.liquid.amount": "%s mB", + "growthcraft.tooltip.liquid.amount.with.capacity": "%s / %s mB", + "growthcraft.tooltip.liquid.empty": "Empty", + "item.growthcraft.crowbar_black": "Crowbar (Black)", + "item.growthcraft.crowbar_blue": "Crowbar (Blue)", + "item.growthcraft.crowbar_brown": "Crowbar (Brown)", + "item.growthcraft.crowbar_cyan": "Crowbar (Cyan)", + "item.growthcraft.crowbar_gray": "Crowbar (Gray)", + "item.growthcraft.crowbar_green": "Crowbar (Green)", + "item.growthcraft.crowbar_light_blue": "Crowbar (Light Blue)", + "item.growthcraft.crowbar_light_gray": "Crowbar (Light Gray)", + "item.growthcraft.crowbar_lime": "Crowbar (Lime)", + "item.growthcraft.crowbar_magenta": "Crowbar (Magenta)", + "item.growthcraft.crowbar_orange": "Crowbar (Orange)", + "item.growthcraft.crowbar_pink": "Crowbar (Pink)", + "item.growthcraft.crowbar_purple": "Crowbar (Purple)", + "item.growthcraft.crowbar_red": "Crowbar (Red)", + "item.growthcraft.crowbar_white": "Crowbar (White)", + "item.growthcraft.crowbar_yellow": "Crowbar (Yellow)", + "item.growthcraft.manual_name": "Growthcraft", + "item.growthcraft.salt": "Salt", + "item_group.growthcraft.tab": "Growthcraft", + "manual.growthcraft.apiary.description": "Welcome to apiary ....", + "manual.growthcraft.apiary.name": "Growthcraft Apiary", + "manual.growthcraft.apples.description": "Apple trees produce an edible fruit called, an apple.$(br2)They are cultivated world wide. They have been grown for thousands of years.", + "manual.growthcraft.apples.name": "Growthcraft Apples", + "manual.growthcraft.bamboo.description": "Bamboo is one of the fastest growing plants in the world. Due to its unique rhizome dependant system.$(br2)Bamboo has a high strength-to-weight ratio similar to timber and it makes a good renewable building material.", + "manual.growthcraft.bamboo.name": "Growthcraft Bamboo", + "manual.growthcraft.cellar.description": "Welcome to the process of brewing and fermenting.", + "manual.growthcraft.cellar.name": "Growthcraft Cellar", + "manual.growthcraft.milk.description": "Welcome to milk ...", + "manual.growthcraft.milk.name": "Growthcraft Milk", + "manual.growthcraft.rice.description": "Welcome to rice...", + "manual.growthcraft.rice.name": "Growthcraft Rice" +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft/lang/ko_kr.json b/src/main/resources/assets/growthcraft/lang/ko_kr.json new file mode 100644 index 0000000..db6a43e --- /dev/null +++ b/src/main/resources/assets/growthcraft/lang/ko_kr.json @@ -0,0 +1,57 @@ +{ + "advancements.growthcraft.root.description": " ", + "advancements.growthcraft.root.title": "Growthcraft", + "block.growthcraft.rocksalt_ore": "Rock Salt Ore", + "block.growthcraft.rope_linen": "밧줄", + "block.growthcraft.rope_linen_acacia_fence": "Rope Acacia Fence Post", + "block.growthcraft.rope_linen_birch_fence": "Rope Birch Fence Post", + "block.growthcraft.rope_linen_crimson_fence": "Rope Crimson Fence Post", + "block.growthcraft.rope_linen_dark_oak_fence": "Rope Dark Oak Fence Post", + "block.growthcraft.rope_linen_jungle_fence": "Rope Jungle Fence Post", + "block.growthcraft.rope_linen_nether_brick_fence": "Rope Nether Brick Fence Post", + "block.growthcraft.rope_linen_oak_fence": "Rope Oak Fence Post", + "block.growthcraft.rope_linen_spruce_fence": "Rope Spruce Fence Post", + "block.growthcraft.rope_linen_warped_fence": "Rope Warped Fence Post", + "block.growthcraft.salt_block": "암염 블록", + "block.growthcraft.salt_ore": "암염 광석", + "growthcraft.apples.entry.apples_growing": "Growing Apples", + "growthcraft.category.apples": "Growthcraft Apples", + "growthcraft.entry.apples_crafting": "Apple Wood Products", + "growthcraft.tagline.apples_crafting": "Carpentry with apple wood!", + "growthcraft.tooltip.liquid.amount": "%s mB", + "growthcraft.tooltip.liquid.amount.with.capacity": "%s / %s mB", + "growthcraft.tooltip.liquid.empty": "Empty", + "item.growthcraft.crowbar_black": "검은색 크로우바", + "item.growthcraft.crowbar_blue": "파란색 크로우바", + "item.growthcraft.crowbar_brown": "갈색 크로우바", + "item.growthcraft.crowbar_cyan": "청록색 크로우바", + "item.growthcraft.crowbar_gray": "회색 크로우바", + "item.growthcraft.crowbar_green": "초록색 크로우바", + "item.growthcraft.crowbar_lightBlue": "하늘색 크로우바", + "item.growthcraft.crowbar_light_blue": "Crowbar (Light Blue)", + "item.growthcraft.crowbar_light_gray": "은색 크로우바", + "item.growthcraft.crowbar_lime": "연두색 크로우바", + "item.growthcraft.crowbar_magenta": "자홍색 크로우바", + "item.growthcraft.crowbar_orange": "주황색 크로우바", + "item.growthcraft.crowbar_pink": "분홍색 크로우바", + "item.growthcraft.crowbar_purple": "보라색 크로우바", + "item.growthcraft.crowbar_red": "빨간색 크로우바", + "item.growthcraft.crowbar_silver": "은색 크로우바", + "item.growthcraft.crowbar_white": "하얀색 크로우바", + "item.growthcraft.crowbar_yellow": "노란색 크로우바", + "item.growthcraft.manual_name": "Growthcraft", + "item.growthcraft.salt": "암염", + "item_group.growthcraft.tab": "그로우스크래프트", + "manual.growthcraft.apiary.description": "Welcome to apiary ....", + "manual.growthcraft.apiary.name": "Growthcraft Apiary", + "manual.growthcraft.apples.description": "Apple trees produce an edible fruit called, an apple.$(br2)They are cultivated world wide. They have been grown for thousands of years.", + "manual.growthcraft.apples.name": "Growthcraft Apples", + "manual.growthcraft.bamboo.description": "Bamboo is one of the fastest growing plants in the world. Due to its unique rhizome dependant system.$(br2)Bamboo has a high strength-to-weight ratio similar to timber and it makes a good renewable building material.", + "manual.growthcraft.bamboo.name": "Growthcraft Bamboo", + "manual.growthcraft.cellar.description": "Welcome to the process of brewing and fermenting.", + "manual.growthcraft.cellar.name": "Growthcraft Cellar", + "manual.growthcraft.milk.description": "Welcome to milk ...", + "manual.growthcraft.milk.name": "Growthcraft Milk", + "manual.growthcraft.rice.description": "Welcome to rice...", + "manual.growthcraft.rice.name": "Growthcraft Rice" +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft/lang/ru_ru.json b/src/main/resources/assets/growthcraft/lang/ru_ru.json new file mode 100644 index 0000000..ab5afa1 --- /dev/null +++ b/src/main/resources/assets/growthcraft/lang/ru_ru.json @@ -0,0 +1,54 @@ +{ + "advancements.growthcraft.root.description": " ", + "advancements.growthcraft.root.title": "Growthcraft", + "block.growthcraft.rope_linen": "Веревка", + "block.growthcraft.rope_linen_acacia_fence": "Веревка на акациевом заборе", + "block.growthcraft.rope_linen_birch_fence": "Веревка на березовом заборе", + "block.growthcraft.rope_linen_crimson_fence": "Веревка на багровом заборе", + "block.growthcraft.rope_linen_dark_oak_fence": "Веревка на заборе из темного дуба", + "block.growthcraft.rope_linen_jungle_fence": "Веревка на заборе из тропического дерева", + "block.growthcraft.rope_linen_nether_brick_fence": "Веревка на заборе из адского кирпича", + "block.growthcraft.rope_linen_oak_fence": "Веревка на дубовом заборе", + "block.growthcraft.rope_linen_spruce_fence": "Веревка на сосновом заборе", + "block.growthcraft.rope_linen_warped_fence": "Веревка на искаженном заборе", + "block.growthcraft.salt_block": "Блок соли", + "block.growthcraft.salt_ore": "Блок рудной соли", + "growthcraft.apples.entry.apples_growing": "Растущие яблоки", + "growthcraft.category.apples": "Growthcraft Apples", + "growthcraft.entry.apples_crafting": "Изделия из яблони", + "growthcraft.tagline.apples_crafting": "Работы по яблоне!", + "growthcraft.tooltip.liquid.amount": "%s mB", + "growthcraft.tooltip.liquid.amount.with.capacity": "%s / %s mB", + "growthcraft.tooltip.liquid.empty": "Пусто", + "item.growthcraft.crowbar_black": "Черный лом", + "item.growthcraft.crowbar_blue": "Синий лом", + "item.growthcraft.crowbar_brown": "Коричневый лом", + "item.growthcraft.crowbar_cyan": "Бирюзовый лом", + "item.growthcraft.crowbar_gray": "Серый лом", + "item.growthcraft.crowbar_green": "Зеленый лом", + "item.growthcraft.crowbar_light_blue": "Голубой лом", + "item.growthcraft.crowbar_light_gray": "Светло-серый лом", + "item.growthcraft.crowbar_lime": "Лаймовый лом", + "item.growthcraft.crowbar_magenta": "Сиреневый лом", + "item.growthcraft.crowbar_orange": "Оранжевый лом", + "item.growthcraft.crowbar_pink": "Розовый лом", + "item.growthcraft.crowbar_purple": "Фиолетовый лом", + "item.growthcraft.crowbar_red": "Красный лом", + "item.growthcraft.crowbar_white": "Белый лом", + "item.growthcraft.crowbar_yellow": "Желтый лом", + "item.growthcraft.manual_name": "Growthcraft", + "item.growthcraft.salt": "Соль", + "item_group.growthcraft.tab": "Growthcraft", + "manual.growthcraft.apiary.description": "Добро пожаловать в пчеловодство ....", + "manual.growthcraft.apiary.name": "Growthcraft Apiary", + "manual.growthcraft.apples.description": "На яблонях растет съедобный фрукт, который называется, яблоко.$(br2)Их выращивают во всем мире. Они растут уже тысячи лет", + "manual.growthcraft.apples.name": "Growthcraft Apples", + "manual.growthcraft.bamboo.description": "Бамбук одно из самых быстро произростающих растений в мире. Благодаря своей уникальной корневой системе.$(br2)Бамбук имеет высокое отношение прочности к весу, как у древесины, и является хорошим возобновляемым строительным материалом.", + "manual.growthcraft.bamboo.name": "Growthcraft Bamboo", + "manual.growthcraft.cellar.description": "Добро пожаловать в процесс пивоварения и брожения.", + "manual.growthcraft.cellar.name": "Growthcraft Cellar", + "manual.growthcraft.milk.description": "Добро пожаловать в мир молочных продуктов ...", + "manual.growthcraft.milk.name": "Growthcraft Milk", + "manual.growthcraft.rice.description": "Добро пожаловать в мир риса ...", + "manual.growthcraft.rice.name": "Growthcraft Rice" +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft/lang/tr_tr.lang b/src/main/resources/assets/growthcraft/lang/tr_tr.lang new file mode 100644 index 0000000..b65cce1 --- /dev/null +++ b/src/main/resources/assets/growthcraft/lang/tr_tr.lang @@ -0,0 +1,67 @@ +item.crowbar.white.name=Beyaz Levye +item.crowbar.orange.name=Turuncu Levye +item.crowbar.magenta.name=Eflatun Levye +item.crowbar.lightBlue.name=Açık Mavi Levye +item.crowbar.yellow.name=Sarı Levye +item.crowbar.lime.name=Kireç Yeşili Levye +item.crowbar.pink.name=Pembe Levye +item.crowbar.gray.name=Gri Levye +item.crowbar.silver.name=Gümüş Levye +item.crowbar.cyan.name=Camgöbeği Levye +item.crowbar.purple.name=Mor Levye +item.crowbar.blue.name=Mavi Levye +item.crowbar.brown.name=Kahverengi Levye +item.crowbar.green.name=Yeşil Levye +item.crowbar.red.name=Kırmızı Levye +item.crowbar.black.name=Siyah Levye +item.rope.name=Halat +item.salt.name=Kaya Tuzu + +itemGroup.Growthcraft=Growthcraft + +tile.rope_knot.name=Halat Düğümü +tile.rope_knot_oak.name=Oak Fence (Rope) +tile.rope_knot_dark_oak.name=Dark Oak Fence (Rope) +tile.rope_knot_acacia.name=Acacia Fence (Rope) +tile.rope_knot_spruce.name=Spruce Fence (Rope) +tile.rope_knot_birch.name=Birch Fence (Rope) +tile.rope_knot_jungle.name=Jungle Fence (Rope) +tile.rope_knot_nether_brick.name=Nether Brick Fence (Rope) +tile.rope_fence.name=Halat +tile.salt_block.name=Kaya Tuzu Blok +tile.salt_ore.name=Kaya Tuzu Cevheri + +# Effects +effect.chance.format=%%d% Şansla +effect.extinguish.desc=Yanmayı Söndürür +effect.ignite.desc=%d Saniyeliğine Yakar +effect.list.head=Aşağıdakileri Uygular: +effect.null.desc=Hiçbir Şey Yapmaz +effect.random_list.head=Aşağıdakilerden Birini Uygular: +effect.remove_potion_effect.format=%s'ı Kaldırır +effect.weighted_random_list.format=%%d% Şansla + +# Formats and Units +format.value.true=EVET +format.value.false=HAYIR +format.state.true=AÇIK +format.state.false=KAPALI +format.invalid_fluid= +# Displayed for items +format.itemslot.empty= +format.itemslot.invalid= + +# Modifier name +format.booze.name=%2$s %1$s + +# When a fluid is not a booze +format.fluid.name=%1$s + +# Name (stack_size) +format.itemslot.item=%s (x%d) +# Displayed for tile entities with multiple tanks, %d is the tank index + 1 +format.tank_id=Tank %d : +# When the tank is empty +format.tank.empty= +# %s is the fluid name +format.tank.content_suffix=mB %s diff --git a/src/main/resources/assets/growthcraft/lang/zh_cn.lang b/src/main/resources/assets/growthcraft/lang/zh_cn.lang new file mode 100644 index 0000000..a2d2a27 --- /dev/null +++ b/src/main/resources/assets/growthcraft/lang/zh_cn.lang @@ -0,0 +1,67 @@ +item.crowbar.white.name=白色撬棍 +item.crowbar.orange.name=橙色撬棍 +item.crowbar.magenta.name=品红色撬棍 +item.crowbar.lightBlue.name=淡蓝色撬棍 +item.crowbar.yellow.name=黄色撬棍 +item.crowbar.lime.name=黄绿色撬棍 +item.crowbar.pink.name=粉红色撬棍 +item.crowbar.gray.name=灰色撬棍 +item.crowbar.silver.name=淡灰色撬棍 +item.crowbar.cyan.name=青色撬棍 +item.crowbar.purple.name=紫色撬棍 +item.crowbar.blue.name=蓝色撬棍 +item.crowbar.brown.name=棕色撬棍 +item.crowbar.green.name=绿色撬棍 +item.crowbar.red.name=红色撬棍 +item.crowbar.black.name=黑色撬棍 +item.rope.name=绳 +item.salt.name=岩盐 + +itemGroup.Growthcraft=生长工艺 + +tile.rope_knot.name=绳结 +tile.rope_knot_oak.name=Oak Fence (Rope) +tile.rope_knot_dark_oak.name=Dark Oak Fence (Rope) +tile.rope_knot_acacia.name=Acacia Fence (Rope) +tile.rope_knot_spruce.name=Spruce Fence (Rope) +tile.rope_knot_birch.name=Birch Fence (Rope) +tile.rope_knot_jungle.name=Jungle Fence (Rope) +tile.rope_knot_nether_brick.name=Nether Brick Fence (Rope) +tile.rope_fence.name=绳 +tile.salt_block.name=岩盐块 +tile.salt_ore.name=岩盐矿石 + +# Effects +effect.chance.format=%d%%概率 +#effect.extinguish.desc=Extinguishes Burning +#effect.ignite.desc=Sets Fire for %ds +effect.list.head=适用于: +effect.null.desc=无其他作用 +effect.random_list.head=适用于: +effect.remove_potion_effect.format=移除%s效果 +effect.weighted_random_list.format=%d%%概率 + +# Formats and Units +format.value.true=YES +format.value.false=NO +format.state.true=ON +format.state.false=OFF +format.invalid_fluid=<无效流体> +# Displayed for items +format.itemslot.empty=<空> +format.itemslot.invalid=<无效物品> + +# Modifier name +format.booze.name=%2$s %1$s + +# When a fluid is not a booze +format.fluid.name=%1$s + +# Name (stack_size) +format.itemslot.item=%s(x%d) +# Displayed for tile entities with multiple tanks, %d is the tank index + 1 +#format.tank_id=Tank %d: +# When the tank is empty +format.tank.empty=<空> +# %s is the fluid name +format.tank.content_suffix=%s mB diff --git a/src/main/resources/assets/growthcraft/models/block/blank_model.json b/src/main/resources/assets/growthcraft/models/block/blank_model.json new file mode 100644 index 0000000..14ed585 --- /dev/null +++ b/src/main/resources/assets/growthcraft/models/block/blank_model.json @@ -0,0 +1,22 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "missing": "growthcraft:block/missing", + "particle": "minecraft:block/dirt" + }, + "elements": [ + { + "from": [7, 0, 7], + "to": [8, 1, 8], + "color": 3, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#missing"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#missing"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#missing"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#missing"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#missing"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#missing"} + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft/models/block/empty.json b/src/main/resources/assets/growthcraft/models/block/empty.json new file mode 100644 index 0000000..9f9d1c7 --- /dev/null +++ b/src/main/resources/assets/growthcraft/models/block/empty.json @@ -0,0 +1,24 @@ +{ + "credit": "Made with Blockbench", + "ambientocclusion": false, + "render_type": "cutout", + "textures": { + "missing": "growthcraft:block/missing", + "particle": "growthcraft_milk:block/cheese_base" + }, + "elements": [ + { + "name": "empty_center", + "from": [10.5, 3.5, 9.5], + "to": [10.5, 3.5, 9.5], + "faces": { + "north": {"uv": [0, 0, 6, 6], "texture": "#missing"}, + "east": {"uv": [0, 0, 6, 6], "texture": "#missing"}, + "south": {"uv": [0, 0, 6, 6], "texture": "#missing"}, + "west": {"uv": [0, 0, 6, 6], "texture": "#missing"}, + "up": {"uv": [0, 0, 6, 6], "texture": "#missing"}, + "down": {"uv": [0, 0, 6, 6], "texture": "#missing"} + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft/models/block/fluid.json b/src/main/resources/assets/growthcraft/models/block/fluid.json new file mode 100644 index 0000000..12de1bf --- /dev/null +++ b/src/main/resources/assets/growthcraft/models/block/fluid.json @@ -0,0 +1,7 @@ +{ + "parent": "block/cube_all", + "render_type": "translucent", + "textures": { + "all": "growthcraft:block/fluid/fluid_overlay" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft/models/block/rope_linen.json b/src/main/resources/assets/growthcraft/models/block/rope_linen.json new file mode 100644 index 0000000..0a4a5e4 --- /dev/null +++ b/src/main/resources/assets/growthcraft/models/block/rope_linen.json @@ -0,0 +1,77 @@ +{ + "textures": { + "0": "growthcraft:block/rope_linen_center", + "particle": "growthcraft:block/rope_linen_center" + }, + "elements": [ + { + "name": "rope_center", + "from": [ + 7.5, + 7.5, + 7.5 + ], + "to": [ + 8.5, + 8.5, + 8.5 + ], + "faces": { + "north": { + "texture": "#0", + "uv": [ + 0.0, + 0.0, + 6.0, + 6.0 + ] + }, + "east": { + "texture": "#0", + "uv": [ + 0.0, + 0.0, + 6.0, + 6.0 + ] + }, + "south": { + "texture": "#0", + "uv": [ + 0.0, + 0.0, + 6.0, + 6.0 + ] + }, + "west": { + "texture": "#0", + "uv": [ + 0.0, + 0.0, + 6.0, + 6.0 + ] + }, + "up": { + "texture": "#0", + "uv": [ + 0.0, + 0.0, + 6.0, + 6.0 + ] + }, + "down": { + "texture": "#0", + "uv": [ + 0.0, + 0.0, + 6.0, + 6.0 + ] + } + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft/models/block/rope_linen_knot.json b/src/main/resources/assets/growthcraft/models/block/rope_linen_knot.json new file mode 100644 index 0000000..e40f356 --- /dev/null +++ b/src/main/resources/assets/growthcraft/models/block/rope_linen_knot.json @@ -0,0 +1,60 @@ +{ + "textures": { + "0": "growthcraft:block/rope_linen_knot", + "particle": "growthcraft:block/rope_linen_knot" + }, + "elements": [ + { + "name": "South", + "from": [ 5.0, 6.0, 10.0 ], + "to": [ 11.0, 14.0, 11.0 ], + "faces": { + "north": { "texture": "#0", "uv": [ 0.0, 0.0, 6.0, 8.0 ] }, + "east": { "texture": "#0", "uv": [ 0.0, 0.0, 1.0, 8.0 ] }, + "south": { "texture": "#0", "uv": [ 0.0, 0.0, 6.0, 8.0 ] }, + "west": { "texture": "#0", "uv": [ 0.0, 0.0, 1.0, 8.0 ] }, + "up": { "texture": "#0", "uv": [ 0.0, 0.0, 6.0, 1.0 ] }, + "down": { "texture": "#0", "uv": [ 0.0, 0.0, 6.0, 1.0 ] } + } + }, + { + "name": "North", + "from": [ 5.0, 6.0, 5.0 ], + "to": [ 11.0, 14.0, 6.0 ], + "faces": { + "north": { "texture": "#0", "uv": [ 0.0, 0.0, 6.0, 8.0 ] }, + "east": { "texture": "#0", "uv": [ 0.0, 0.0, 1.0, 8.0 ] }, + "south": { "texture": "#0", "uv": [ 0.0, 0.0, 6.0, 8.0 ] }, + "west": { "texture": "#0", "uv": [ 0.0, 0.0, 1.0, 8.0 ] }, + "up": { "texture": "#0", "uv": [ 0.0, 0.0, 6.0, 1.0 ] }, + "down": { "texture": "#0", "uv": [ 0.0, 0.0, 6.0, 1.0 ] } + } + }, + { + "name": "West", + "from": [ 5.0, 6.0, 6.0 ], + "to": [ 6.0, 14.0, 10.0 ], + "faces": { + "north": { "texture": "#0", "uv": [ 0.0, 0.0, 1.0, 8.0 ] }, + "east": { "texture": "#0", "uv": [ 0.0, 0.0, 6.0, 8.0 ] }, + "south": { "texture": "#0", "uv": [ 0.0, 0.0, 1.0, 8.0 ] }, + "west": { "texture": "#0", "uv": [ 0.0, 0.0, 6.0, 8.0 ] }, + "up": { "texture": "#0", "uv": [ 0.0, 0.0, 1.0, 6.0 ] }, + "down": { "texture": "#0", "uv": [ 0.0, 0.0, 1.0, 6.0 ] } + } + }, + { + "name": "East", + "from": [ 10.0, 6.0, 6.0 ], + "to": [ 11.0, 14.0, 10.0 ], + "faces": { + "north": { "texture": "#0", "uv": [ 0.0, 0.0, 1.0, 8.0 ] }, + "east": { "texture": "#0", "uv": [ 0.0, 0.0, 6.0, 8.0 ] }, + "south": { "texture": "#0", "uv": [ 0.0, 0.0, 1.0, 8.0 ] }, + "west": { "texture": "#0", "uv": [ 0.0, 0.0, 6.0, 8.0 ] }, + "up": { "texture": "#0", "uv": [ 0.0, 0.0, 1.0, 6.0 ] }, + "down": { "texture": "#0", "uv": [ 0.0, 0.0, 1.0, 6.0 ] } + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft/models/block/rope_linen_side.json b/src/main/resources/assets/growthcraft/models/block/rope_linen_side.json new file mode 100644 index 0000000..d9a6da5 --- /dev/null +++ b/src/main/resources/assets/growthcraft/models/block/rope_linen_side.json @@ -0,0 +1,79 @@ +{ + "textures": { + "0": "growthcraft:block/rope_linen_center", + "1": "growthcraft:block/rope_linen_horizontal", + "2": "growthcraft:block/rope_linen_vertical", + "particle": "growthcraft:block/rope_linen_center" + }, + "elements": [ + { + "name": "rope_lenin_side", + "from": [ + 7.5, + 7.5, + 0.0 + ], + "to": [ + 8.5, + 8.5, + 7.5 + ], + "faces": { + "north": { + "texture": "#0", + "uv": [ + 0.0, + 0.0, + 2.0, + 2.0 + ] + }, + "east": { + "texture": "#1", + "uv": [ + 0.0, + 0.0, + 16.0, + 2.0 + ] + }, + "south": { + "texture": "#0", + "uv": [ + 0.0, + 0.0, + 2.0, + 2.0 + ] + }, + "west": { + "texture": "#1", + "uv": [ + 0.0, + 0.0, + 16.0, + 2.0 + ] + }, + "up": { + "texture": "#2", + "uv": [ + 0.0, + 0.0, + 2.0, + 16.0 + ] + }, + "down": { + "texture": "#2", + "uv": [ + 0.0, + 0.0, + 2.0, + 16.0 + ] + } + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft/models/block/salt_block.json b/src/main/resources/assets/growthcraft/models/block/salt_block.json new file mode 100644 index 0000000..5f3944a --- /dev/null +++ b/src/main/resources/assets/growthcraft/models/block/salt_block.json @@ -0,0 +1,24 @@ +{ + "parent": "block/cube", + "textures": { + "0": "growthcraft:block/rock_salt_block_normal", + "1": "growthcraft:block/rock_salt_block_bottom", + "2": "growthcraft:block/rock_salt_block_top", + "particle": "growthcraft:block/rock_salt_block_normal" + }, + "elements": [ + { + "name": "salt_block_cube", + "from": [ 0.0, 0.0, 0.0 ], + "to": [ 16.0, 16.0, 16.0 ], + "faces": { + "north": { "texture": "#0", "uv": [ 0.0, 0.0, 16.0, 16.0 ] }, + "east": { "texture": "#0", "uv": [ 0.0, 0.0, 16.0, 16.0 ] }, + "south": { "texture": "#0", "uv": [ 0.0, 0.0, 16.0, 16.0 ] }, + "west": { "texture": "#0", "uv": [ 0.0, 0.0, 16.0, 16.0 ] }, + "up": { "texture": "#2", "uv": [ 0.0, 0.0, 16.0, 16.0 ] }, + "down": { "texture": "#1", "uv": [ 0.0, 0.0, 16.0, 16.0 ] } + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft/models/block/salt_ore.json b/src/main/resources/assets/growthcraft/models/block/salt_ore.json new file mode 100644 index 0000000..b7cfbb4 --- /dev/null +++ b/src/main/resources/assets/growthcraft/models/block/salt_ore.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "growthcraft:block/salt_ore" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft/models/item/crowbar_black.json b/src/main/resources/assets/growthcraft/models/item/crowbar_black.json new file mode 100644 index 0000000..8abf7b2 --- /dev/null +++ b/src/main/resources/assets/growthcraft/models/item/crowbar_black.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "growthcraft:item/crowbar_black" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft/models/item/crowbar_blue.json b/src/main/resources/assets/growthcraft/models/item/crowbar_blue.json new file mode 100644 index 0000000..5ffc2b2 --- /dev/null +++ b/src/main/resources/assets/growthcraft/models/item/crowbar_blue.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "growthcraft:item/crowbar_blue" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft/models/item/crowbar_brown.json b/src/main/resources/assets/growthcraft/models/item/crowbar_brown.json new file mode 100644 index 0000000..695955d --- /dev/null +++ b/src/main/resources/assets/growthcraft/models/item/crowbar_brown.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "growthcraft:item/crowbar_brown" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft/models/item/crowbar_cyan.json b/src/main/resources/assets/growthcraft/models/item/crowbar_cyan.json new file mode 100644 index 0000000..1ebfdae --- /dev/null +++ b/src/main/resources/assets/growthcraft/models/item/crowbar_cyan.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "growthcraft:item/crowbar_cyan" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft/models/item/crowbar_gray.json b/src/main/resources/assets/growthcraft/models/item/crowbar_gray.json new file mode 100644 index 0000000..a7560fc --- /dev/null +++ b/src/main/resources/assets/growthcraft/models/item/crowbar_gray.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "growthcraft:item/crowbar_gray" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft/models/item/crowbar_green.json b/src/main/resources/assets/growthcraft/models/item/crowbar_green.json new file mode 100644 index 0000000..ec01917 --- /dev/null +++ b/src/main/resources/assets/growthcraft/models/item/crowbar_green.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "growthcraft:item/crowbar_green" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft/models/item/crowbar_light_blue.json b/src/main/resources/assets/growthcraft/models/item/crowbar_light_blue.json new file mode 100644 index 0000000..4f9f40b --- /dev/null +++ b/src/main/resources/assets/growthcraft/models/item/crowbar_light_blue.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "growthcraft:item/crowbar_light_blue" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft/models/item/crowbar_light_gray.json b/src/main/resources/assets/growthcraft/models/item/crowbar_light_gray.json new file mode 100644 index 0000000..d5b9655 --- /dev/null +++ b/src/main/resources/assets/growthcraft/models/item/crowbar_light_gray.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "growthcraft:item/crowbar_light_gray" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft/models/item/crowbar_lime.json b/src/main/resources/assets/growthcraft/models/item/crowbar_lime.json new file mode 100644 index 0000000..e35825f --- /dev/null +++ b/src/main/resources/assets/growthcraft/models/item/crowbar_lime.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "growthcraft:item/crowbar_lime" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft/models/item/crowbar_magenta.json b/src/main/resources/assets/growthcraft/models/item/crowbar_magenta.json new file mode 100644 index 0000000..5e690c5 --- /dev/null +++ b/src/main/resources/assets/growthcraft/models/item/crowbar_magenta.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "growthcraft:item/crowbar_magenta" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft/models/item/crowbar_orange.json b/src/main/resources/assets/growthcraft/models/item/crowbar_orange.json new file mode 100644 index 0000000..1de0e36 --- /dev/null +++ b/src/main/resources/assets/growthcraft/models/item/crowbar_orange.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "growthcraft:item/crowbar_orange" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft/models/item/crowbar_pink.json b/src/main/resources/assets/growthcraft/models/item/crowbar_pink.json new file mode 100644 index 0000000..a8ca2a5 --- /dev/null +++ b/src/main/resources/assets/growthcraft/models/item/crowbar_pink.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "growthcraft:item/crowbar_pink" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft/models/item/crowbar_purple.json b/src/main/resources/assets/growthcraft/models/item/crowbar_purple.json new file mode 100644 index 0000000..1375bc0 --- /dev/null +++ b/src/main/resources/assets/growthcraft/models/item/crowbar_purple.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "growthcraft:item/crowbar_purple" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft/models/item/crowbar_red.json b/src/main/resources/assets/growthcraft/models/item/crowbar_red.json new file mode 100644 index 0000000..ae04580 --- /dev/null +++ b/src/main/resources/assets/growthcraft/models/item/crowbar_red.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "growthcraft:item/crowbar_red" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft/models/item/crowbar_white.json b/src/main/resources/assets/growthcraft/models/item/crowbar_white.json new file mode 100644 index 0000000..9618760 --- /dev/null +++ b/src/main/resources/assets/growthcraft/models/item/crowbar_white.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "growthcraft:item/crowbar_white" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft/models/item/crowbar_yellow.json b/src/main/resources/assets/growthcraft/models/item/crowbar_yellow.json new file mode 100644 index 0000000..ea4d9a3 --- /dev/null +++ b/src/main/resources/assets/growthcraft/models/item/crowbar_yellow.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "growthcraft:item/crowbar_yellow" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft/models/item/filled_bottle.json b/src/main/resources/assets/growthcraft/models/item/filled_bottle.json new file mode 100644 index 0000000..8aa42f6 --- /dev/null +++ b/src/main/resources/assets/growthcraft/models/item/filled_bottle.json @@ -0,0 +1,7 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "minecraft:items/potion_overlay", + "layer1": "minecraft:items/potion_bottle_empty" + } +} diff --git a/src/main/resources/assets/growthcraft/models/item/place_holder_block.json b/src/main/resources/assets/growthcraft/models/item/place_holder_block.json new file mode 100644 index 0000000..aeda951 --- /dev/null +++ b/src/main/resources/assets/growthcraft/models/item/place_holder_block.json @@ -0,0 +1,3 @@ +{ + "parent": "growthcraft:block/place_holder_block" +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft/models/item/rope.json b/src/main/resources/assets/growthcraft/models/item/rope.json new file mode 100644 index 0000000..33a744f --- /dev/null +++ b/src/main/resources/assets/growthcraft/models/item/rope.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft:item/rope" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft/models/item/rope_fence_oak_linen.json b/src/main/resources/assets/growthcraft/models/item/rope_fence_oak_linen.json new file mode 100644 index 0000000..eae854b --- /dev/null +++ b/src/main/resources/assets/growthcraft/models/item/rope_fence_oak_linen.json @@ -0,0 +1,3 @@ +{ + "parent": "growthcraft:block/rope_fence_oak_linen" +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft/models/item/rope_knot_bamboo.json b/src/main/resources/assets/growthcraft/models/item/rope_knot_bamboo.json new file mode 100644 index 0000000..ba13995 --- /dev/null +++ b/src/main/resources/assets/growthcraft/models/item/rope_knot_bamboo.json @@ -0,0 +1,3 @@ +{ + "parent": "growthcraft:block/rope_knot_bamboo" +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft/models/item/rope_linen.json b/src/main/resources/assets/growthcraft/models/item/rope_linen.json new file mode 100644 index 0000000..2874afd --- /dev/null +++ b/src/main/resources/assets/growthcraft/models/item/rope_linen.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "growthcraft:item/rope_linen" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft/models/item/salt.json b/src/main/resources/assets/growthcraft/models/item/salt.json new file mode 100644 index 0000000..203b5fe --- /dev/null +++ b/src/main/resources/assets/growthcraft/models/item/salt.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "growthcraft:item/salt" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft/models/item/salt_block.json b/src/main/resources/assets/growthcraft/models/item/salt_block.json new file mode 100644 index 0000000..93cf26d --- /dev/null +++ b/src/main/resources/assets/growthcraft/models/item/salt_block.json @@ -0,0 +1,3 @@ +{ + "parent": "growthcraft:block/salt_block" +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft/models/item/salt_ore.json b/src/main/resources/assets/growthcraft/models/item/salt_ore.json new file mode 100644 index 0000000..904f622 --- /dev/null +++ b/src/main/resources/assets/growthcraft/models/item/salt_ore.json @@ -0,0 +1,3 @@ +{ + "parent": "growthcraft:block/salt_ore" +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft/models/item/wrench.json b/src/main/resources/assets/growthcraft/models/item/wrench.json new file mode 100644 index 0000000..9b5bf88 --- /dev/null +++ b/src/main/resources/assets/growthcraft/models/item/wrench.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "growthcraft:item/wrench" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft/patchouli_books/growthcraft/en_us/categories/apiary.json b/src/main/resources/assets/growthcraft/patchouli_books/growthcraft/en_us/categories/apiary.json new file mode 100644 index 0000000..a653422 --- /dev/null +++ b/src/main/resources/assets/growthcraft/patchouli_books/growthcraft/en_us/categories/apiary.json @@ -0,0 +1,6 @@ +{ + "name": "Growthcraft Apiary", + "description": "Welcome to Growthcraft Apiary.$(br2)The following pages contain information on how to make breed bees, pollinate flowers, produce wax and candles.$(br2)Hopefully you do not get stung in the process.", + "icon": "growthcraft_apiary:bee", + "sortnum": 1 +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft/patchouli_books/growthcraft/en_us/categories/apples.json b/src/main/resources/assets/growthcraft/patchouli_books/growthcraft/en_us/categories/apples.json new file mode 100644 index 0000000..292b837 --- /dev/null +++ b/src/main/resources/assets/growthcraft/patchouli_books/growthcraft/en_us/categories/apples.json @@ -0,0 +1,6 @@ +{ + "name": "Growthcraft Apples", + "description": "Growthcraft Apples focuses specifically on introducing apple-related content.$(br2)It adds apple trees, apple blocks, and various apple-based recipes, providing you with additional options for farming and crafting.", + "icon": "minecraft:apple", + "sortnum": 2 +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft/patchouli_books/growthcraft/en_us/categories/bamboo.json b/src/main/resources/assets/growthcraft/patchouli_books/growthcraft/en_us/categories/bamboo.json new file mode 100644 index 0000000..34497d2 --- /dev/null +++ b/src/main/resources/assets/growthcraft/patchouli_books/growthcraft/en_us/categories/bamboo.json @@ -0,0 +1,6 @@ +{ + "name": "Growthcraft Bamboo", + "description": "Bamboo is one of the fastest growing plants in the world. Due to its unique rhizome dependant system.$(br2)Bamboo has a high strength-to-weight ratio similar to timber and it makes a good renewable building material.", + "icon": "growthcraft_bamboo:textures/item/bamboo.png", + "sortnum": 3 +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft/patchouli_books/growthcraft/en_us/categories/cellar.json b/src/main/resources/assets/growthcraft/patchouli_books/growthcraft/en_us/categories/cellar.json new file mode 100644 index 0000000..aab5daf --- /dev/null +++ b/src/main/resources/assets/growthcraft/patchouli_books/growthcraft/en_us/categories/cellar.json @@ -0,0 +1,6 @@ +{ + "name": "Growthcraft Cellar", + "description": "Welcome to the process of brewing and fermenting.$(br2)With Growthcraft Cellar you can start making your own ales, wines, meads, and more. Each one having its own special effect.", + "icon": "growthcraft_cellar:textures/item/potion/pint_ale_icon.png", + "sortnum": 4 +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft/patchouli_books/growthcraft/en_us/categories/core.json b/src/main/resources/assets/growthcraft/patchouli_books/growthcraft/en_us/categories/core.json new file mode 100644 index 0000000..4246881 --- /dev/null +++ b/src/main/resources/assets/growthcraft/patchouli_books/growthcraft/en_us/categories/core.json @@ -0,0 +1,6 @@ +{ + "name": "Growthcraft", + "description": "At the core of the Growthcraft mods, you will find the need for certain items, like the crowbar, wrench, rope and salt.", + "icon": "growthcraft:wrench", + "sortnum": 0 +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft/patchouli_books/growthcraft/en_us/categories/milk.json b/src/main/resources/assets/growthcraft/patchouli_books/growthcraft/en_us/categories/milk.json new file mode 100644 index 0000000..0c8a03d --- /dev/null +++ b/src/main/resources/assets/growthcraft/patchouli_books/growthcraft/en_us/categories/milk.json @@ -0,0 +1,6 @@ +{ + "name": "Growthcraft Milk", + "description": "Welcome to dairy farming. As a dairy farmer, you will be able to craft items like cheese, butter, ice cream, and yogurt.$(br2)You will need to become familiar with the Mixing Vat, Pancheon, Cheese Press, and Churn to become an expert.", + "icon": "growthcraft_milk:textures/item/cheese/appenzeller_aged.png", + "sortnum": 5 +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft/patchouli_books/growthcraft/en_us/categories/mystical_agriculture.json b/src/main/resources/assets/growthcraft/patchouli_books/growthcraft/en_us/categories/mystical_agriculture.json new file mode 100644 index 0000000..d496878 --- /dev/null +++ b/src/main/resources/assets/growthcraft/patchouli_books/growthcraft/en_us/categories/mystical_agriculture.json @@ -0,0 +1,7 @@ +{ + "name": "Mystical Agriculture", + "flag": "mod:mysticalagriculture", + "description": "We see that you have Mystical Agriculture. As a result, you can grow your Growthcraft resources!", + "icon": "mysticalagriculture:textures/item/guide_book.png", + "sortnum": 8 +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft/patchouli_books/growthcraft/en_us/categories/rice.json b/src/main/resources/assets/growthcraft/patchouli_books/growthcraft/en_us/categories/rice.json new file mode 100644 index 0000000..c68ef5c --- /dev/null +++ b/src/main/resources/assets/growthcraft/patchouli_books/growthcraft/en_us/categories/rice.json @@ -0,0 +1,6 @@ +{ + "name": "Growthcraft Rice", + "description": "Rice is a widely consumed cereal grain, cultivated in diverse varieties globally. It serves as a dietary staple for many cultures, featuring in dishes like sushi, biryani, and risotto. This versatile grain's neutral taste and adaptability have made it a fundamental source of sustenance and culinary creativity.", + "icon": "growthcraft_rice:textures/item/rice_stalk.png", + "sortnum": 6 +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft/patchouli_books/growthcraft/en_us/entries/apiary/bee_keeping.json b/src/main/resources/assets/growthcraft/patchouli_books/growthcraft/en_us/entries/apiary/bee_keeping.json new file mode 100644 index 0000000..eef01e6 --- /dev/null +++ b/src/main/resources/assets/growthcraft/patchouli_books/growthcraft/en_us/entries/apiary/bee_keeping.json @@ -0,0 +1,29 @@ +{ + "name": "Bee Keeping", + "icon": "growthcraft_apiary:bee", + "category": "growthcraft:apiary", + "sortnum": 0, + "pages": [ + { + "type": "patchouli:text", + "text": "In order to catch a bee, you must break a Bee Hive, there is a one in four chance of a bee being dropped.$(br2)Once you have your first bee, you will need to craft a Bee Box." + }, + { + "type": "image", + "images": [ + "growthcraft:textures/patchouli/blocks/bee_box_flowers.png" + ], + "text": "Be sure to place flowers around your bee box." + }, + { + "type": "patchouli:spotlight", + "item": "growthcraft_apiary:bee_box_oak", + "text": "As your bees produce honey comb, they will need flowers near the bee box. They will also duplicate any flower that is within range." + }, + { + "type": "crafting", + "recipe": "growthcraft_apiary:bee_box_oak", + "recipe2": "growthcraft_apiary:bee_box_spruce" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft/patchouli_books/growthcraft/en_us/entries/apiary/honey_mead.json b/src/main/resources/assets/growthcraft/patchouli_books/growthcraft/en_us/entries/apiary/honey_mead.json new file mode 100644 index 0000000..e4a8dac --- /dev/null +++ b/src/main/resources/assets/growthcraft/patchouli_books/growthcraft/en_us/entries/apiary/honey_mead.json @@ -0,0 +1,22 @@ +{ + "name": "Guide to Mead", + "icon": "growthcraft_cellar:fermentation_barrel_oak", + "category": "growthcraft:apiary", + "sortnum": 1, + "pages": [ + { + "type": "text", + "text": "Honey can be used for a wide range of beneficial elixirs through out the world.$(br2)Our master brewsmiths have been hard at work and have perfected the recipe for mead are are willing to share it with you." + }, + { + "type": "text", + "text": "To get started you will need to place four filled honey comb and a bucket of water in the Brew Kettle to produce one bucket of Mead Must. The process doesn't take long to complete.$(br2)Next, take your bucket of Mead Must and four bayanus yeast and place them into a ferment barrel. After the yeast has fermented the Mead Must, use a glass bottle or a wine bottle to extract the fresh mead from the barrel." + }, + { + "type": "patchouli:spotlight", + "item": "growthcraft_cellar:potion_wine", + "title": "Mead", + "text": "$(bold)Honey Mead$()$(li)Bayanus Yeast$(li)Health Boost II (3:00)" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft/patchouli_books/growthcraft/en_us/entries/apples/apples_crafting.json b/src/main/resources/assets/growthcraft/patchouli_books/growthcraft/en_us/entries/apples/apples_crafting.json new file mode 100644 index 0000000..80dc162 --- /dev/null +++ b/src/main/resources/assets/growthcraft/patchouli_books/growthcraft/en_us/entries/apples/apples_crafting.json @@ -0,0 +1,42 @@ +{ + "name": "Apple Wood Carpentry", + "icon": "growthcraft_apples:apple_wood_log", + "category": "growthcraft:apples", + "sortnum": 1, + "pages": [ + { + "type": "text", + "text": "Using apple wood, you can craft all the standard vanilla wood based products." + }, + { + "type": "image", + "images": [ + "growthcraft_apples:textures/patchouli/screenshots/apple_blocks.png" + ] + }, + { + "type": "crafting", + "recipe": "growthcraft_apples:apple_plank", + "recipe2": "growthcraft_apples:apple_plank_button" + }, + { + "type": "crafting", + "recipe": "growthcraft_apples:apple_plank_slab", + "recipe2": "growthcraft_apples:apple_plank_stairs" + }, + { + "type": "crafting", + "recipe": "growthcraft_apples:apple_plank_fence", + "recipe2": "growthcraft_apples:apple_plank_fence_gate" + }, + { + "type": "crafting", + "recipe": "growthcraft_apples:apple_plank_door", + "recipe2": "growthcraft_apples:apple_plank_trapdoor" + }, + { + "type": "text", + "text": " " + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft/patchouli_books/growthcraft/en_us/entries/apples/apples_growing.json b/src/main/resources/assets/growthcraft/patchouli_books/growthcraft/en_us/entries/apples/apples_growing.json new file mode 100644 index 0000000..043b5eb --- /dev/null +++ b/src/main/resources/assets/growthcraft/patchouli_books/growthcraft/en_us/entries/apples/apples_growing.json @@ -0,0 +1,33 @@ +{ + "name": "Growing Apples", + "icon": "growthcraft_apples:apple_tree_sapling", + "category": "growthcraft:apples", + "pages": [ + { + "type": "text", + "title": "Growing Apples", + "text": "In order to get started with growing your own apples, you will need to save some seeds from an apple.$(br2)Plant your apple seeds on dirt and it will create an apple tree sapling.$(br2)With the right amount of light, your sapling will grow into a full tree and start producing apples." + }, + { + "type": "crafting", + "title": "Apple Seeds", + "recipe": "growthcraft_apples:apple_seeds" + }, + { + "type": "image", + "border": true, + "images": [ + "growthcraft_apples:textures/patchouli/screenshots/apple_tree_sapling.png" + ], + "text": "Apple trees grow just like any other tree." + }, + { + "type": "image", + "border": true, + "images": [ + "growthcraft_apples:textures/patchouli/screenshots/apple_tree_fullgrown.png" + ], + "text": "When the apple is red, you can harvest it." + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft/patchouli_books/growthcraft/en_us/entries/cellar/ales_and_lagers.json b/src/main/resources/assets/growthcraft/patchouli_books/growthcraft/en_us/entries/cellar/ales_and_lagers.json new file mode 100644 index 0000000..5cad9de --- /dev/null +++ b/src/main/resources/assets/growthcraft/patchouli_books/growthcraft/en_us/entries/cellar/ales_and_lagers.json @@ -0,0 +1,16 @@ +{ + "name": "Ales and Lagers", + "icon": "growthcraft_cellar:textures/item/potion/pint_ale_icon.png", + "category": "growthcraft:cellar", + "sortnum": 3, + "pages": [ + { + "type": "patchouli:text", + "text": "Ales and lagers are brewed with the same process. The difference is the type of yeast used during the fermentation process.$(br2)." + }, + { + "type": "patchouli:text", + "text": "1. Grow wheat.$(br)2. Place the wheat into the stonecutter to make grain. $(br)3. Roast the grain in the roaster. $(br)4. Place the roasted grain with water in the brew kettle. $(br)5. Place the resulting wort into a fermentation barrel with brewers or lager yeast. $(br)6. Use a glass bottle to draw out the fermented fluid. $(br)7. Enjoy the effects " + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft/patchouli_books/growthcraft/en_us/entries/cellar/brew_kettle.json b/src/main/resources/assets/growthcraft/patchouli_books/growthcraft/en_us/entries/cellar/brew_kettle.json new file mode 100644 index 0000000..3984d53 --- /dev/null +++ b/src/main/resources/assets/growthcraft/patchouli_books/growthcraft/en_us/entries/cellar/brew_kettle.json @@ -0,0 +1,17 @@ +{ + "name": "Brew Kettle", + "icon": "growthcraft_cellar:brew_kettle", + "category": "growthcraft:cellar", + "sortnum": 1, + "pages": [ + { + "type": "patchouli:spotlight", + "item": "growthcraft_cellar:brew_kettle", + "text": "The brew kettle has a wide range of usages. Primarily it is used to produce wort from water and grain that can then be used to make ales and lagers." + }, + { + "type": "patchouli:crafting", + "recipe": "growthcraft_cellar:brew_kettle" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft/patchouli_books/growthcraft/en_us/entries/cellar/cellar_intro.json b/src/main/resources/assets/growthcraft/patchouli_books/growthcraft/en_us/entries/cellar/cellar_intro.json new file mode 100644 index 0000000..0628efd --- /dev/null +++ b/src/main/resources/assets/growthcraft/patchouli_books/growthcraft/en_us/entries/cellar/cellar_intro.json @@ -0,0 +1,12 @@ +{ + "name": "Introduction to brewing", + "icon": "growthcraft_cellar:brew_kettle", + "category": "growthcraft:cellar", + "sortnum": 0, + "pages": [ + { + "type": "patchouli:text", + "text": "There are three categories of brewing, ales and lagers, wines, and meades. All three have a similar process.$(br2)Ales and Lagers - " + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft/patchouli_books/growthcraft/en_us/entries/cellar/ferment_barrel.json b/src/main/resources/assets/growthcraft/patchouli_books/growthcraft/en_us/entries/cellar/ferment_barrel.json new file mode 100644 index 0000000..4f00f76 --- /dev/null +++ b/src/main/resources/assets/growthcraft/patchouli_books/growthcraft/en_us/entries/cellar/ferment_barrel.json @@ -0,0 +1,58 @@ +{ + "name": "Fermentation Barrel", + "icon": "growthcraft_cellar:fermentation_barrel_oak", + "category": "growthcraft:cellar", + "sortnum": 2, + "pages": [ + { + "type": "patchouli:spotlight", + "item": "growthcraft_cellar:fermentation_barrel_oak", + "title": "Fermentation Barrel", + "text": "The ferment barrel can hold up to eight buckets of fluid. It can be used to ferment fluids or as a storage tank.$(br2)Place the non-fermented fluid into the barrel with the respective yeast to produce a fermented fluid with effects. Use a glass bottle to extract the drink." + }, + { + "type": "patchouli:text", + "text": "$(br2)If you happen to put to much yeast into the barrel, all of it will be consumed in the ferment process." + }, + { + "type": "patchouli:crafting", + "title": "Crafting", + "recipe": "growthcraft_cellar:fermentation_barrel_oak", + "text": "The ferment barrel is easily crafted using oak planks and iron.$(br2)Currently, there is only one type of ferment barrel." + }, + { + "type": "patchouli:spotlight", + "item": "growthcraft_cellar:potion_ale", + "title": "Ales", + "text": "$(bold)Amber Ale$()$(li)Brewer's Yeast$(li)Haste III (3:00)$(br2)$(bold)Brown Ale$()$(li)Brewer's Yeast$(li)Haste IV (7200)$(br2)$(bold)Copper Ale$()$(li)Brewer's Yeast$(li)Regeneration III (3:00)" + }, + { + "type": "patchouli:text", + "title": "Ales (cont.)", + "text": "$(bold)IPA$()$(li)Brewer's Yeast$(li)Regeneration II (3:00)$(br2)$(bold)Old Port Ale$()$(li)Brewer's Yeast$(li)Luck (5:00)$(br2)$(bold)Pale Ale$()$(li)Brewer's Yeast$(li)Haste II (0:30)$(bold)$(br2)Stout$()$(li)Brewer's Yeast$(li)Hero of the Village (10:00)" + }, + { + "type": "patchouli:spotlight", + "item": "growthcraft_cellar:potion_lager", + "title": "Lagers", + "text": "$(bold)Amber Lager$()$(li)Lager Yeast$(li)Speed III (3:00)$(br2)$(bold)Black Lager$()$(li)Lager Yeast$(li)Resistance II (5:00)$(br2)$(bold)Brown Lager$()$(li)Lager Yeast$(li)Speed IV (5:00)" + }, + { + "type": "patchouli:text", + "title": "Lagers (cont.)", + "text": "$(bold)Copper Lager$()$(li)Lager Yeast$(li)Resistance III (3:00)$(br2)$(bold)Pale Lager$()$(li)Lager Yeast$(li)Speed II (0:30)$(br2)$(bold)Pilsner Lager$()$(li)Lager Yeast$(li)Resistance II (0:30)$(br2)$(bold)Viena Lager$()$(li)Lager Yeast$(li)Luck II (1:00)" + }, + { + "type": "patchouli:spotlight", + "item": "growthcraft_cellar:potion_wine", + "title": "Wine", + "text": "$(bold)Port Wine$()$(li)Bayanus Yeast$(li)Absoption II (1:00)$(br2)$(bold)Red Wine$()$(li)Bayanus Yeast$(li)Health II (1:00)$(br2)$(bold)White Wine$()$(li)Bayanus Yeast$(li)Saturation II (1:00)" + }, + { + "type": "patchouli:spotlight", + "item": "growthcraft_cellar:potion_wine", + "title": "Mead", + "text": "$(bold)Honey Mead$()$(li)Bayanus Yeast$(li)Health Boost II (3:00)" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft/patchouli_books/growthcraft/en_us/entries/cellar/fruit_press.json b/src/main/resources/assets/growthcraft/patchouli_books/growthcraft/en_us/entries/cellar/fruit_press.json new file mode 100644 index 0000000..ec91283 --- /dev/null +++ b/src/main/resources/assets/growthcraft/patchouli_books/growthcraft/en_us/entries/cellar/fruit_press.json @@ -0,0 +1,13 @@ +{ + "name": "Fruit Press", + "icon": "growthcraft_cellar:fruit_press", + "category": "growthcraft:cellar", + "sortnum": 5, + "pages": [ + { + "type": "patchouli:spotlight", + "item": "growthcraft_cellar:fruit_press", + "text": "The fruit press ..." + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft/patchouli_books/growthcraft/en_us/entries/cellar/roaster.json b/src/main/resources/assets/growthcraft/patchouli_books/growthcraft/en_us/entries/cellar/roaster.json new file mode 100644 index 0000000..9ddf09b --- /dev/null +++ b/src/main/resources/assets/growthcraft/patchouli_books/growthcraft/en_us/entries/cellar/roaster.json @@ -0,0 +1,30 @@ +{ + "name": "Roaster", + "icon": "growthcraft_cellar:roaster", + "category": "growthcraft:cellar", + "sortnum": 6, + "pages": [ + { + "type": "spotlight", + "item": "growthcraft_cellar:roaster", + "text": "The roaster is used to roast grain and food items.$(br2)Use the wrench to adjust the roasting level and the roaster will roast and entire stack of items.$(br2)The roaster will also need a heat source under it." + }, + { + "type": "image", + "images": [ + "growthcraft:textures/patchouli/blocks/roaster_smoke.png" + ], + "text": "The roaster will start smoking when there is a valid item in it." + }, + { + "title": "Roasting Times", + "type": "text", + "text": "Roasting Level 1 (30 secs)$(li)Pale Golden Grain$(br2)Roasting Level 2 (60 secs)$(li)Golden Grain$(li)Chicken, Beef$(br2)Roasting Level 3 (1 1/2 min)$(li)Amber Grain$(br2)Roasting Level 4 (2 min)$(li)Deep Amber Grain" + }, + { + "title": "Roasting Times", + "type": "text", + "text": "Roasting Level 5 (2 1/2 min)$(li)Copper Grain$(br2)Roasting Level 6 (3 min)$(li)Deep Copper Grain$(br2)Roasting Level 7 (3 1/2 min)$(li)Brown Grain$(br2)Roasting Level 8 (4 min)$(li)Dark Grain" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft/patchouli_books/growthcraft/en_us/entries/cellar/yeast.json b/src/main/resources/assets/growthcraft/patchouli_books/growthcraft/en_us/entries/cellar/yeast.json new file mode 100644 index 0000000..9a5bc17 --- /dev/null +++ b/src/main/resources/assets/growthcraft/patchouli_books/growthcraft/en_us/entries/cellar/yeast.json @@ -0,0 +1,33 @@ +{ + "name": "Yeast and Cultures", + "icon": "growthcraft_cellar:textures/item/yeast_brewers.png", + "category": "growthcraft:cellar", + "sortnum": 4, + "pages": [ + { + "type": "patchouli:spotlight", + "item": "growthcraft_cellar:culture_jar", + "text": "The culture jar is used to grow more yeast. By placing the yeast with it's corresponding fluid, it will grow more. You must already have at least one yeast in order to culture it. Culturing yeast does not require any heat under the culture jar." + }, + { + "type": "patchouli:spotlight", + "item": "growthcraft_cellar:yeast_brewers", + "text": "$(bold)Brewer's Yeast$() - Brewer's yeast is used to ferment ales.$(br2)$(bold)Source$() - You can find Brewer's Yeast by harvesting grass.$(br2)$(bold)Culturing$() - Needs generic Wort from wheat." + }, + { + "type": "patchouli:spotlight", + "item": "growthcraft_cellar:yeast_bayanus", + "text": "$(bold)Bayanus Yeast$() - This yeast is used for fermenting wine.$(br2)$(bold)Source$() - You can find Bayanus Yeast by harvesting grass.$(br2)$(bold)Culturing$() - Needs either Red, Purple or White grape juice." + }, + { + "type": "patchouli:spotlight", + "item": "growthcraft_cellar:yeast_lager", + "text": "$(bold)Lager Yeast$() - Lager yeast is used to ferment lager types of ales.$(br2)$(bold)Source$() - You can find Lager Yeast by harvesting snow in snowy biomes.$(br2)$(bold)Culturing$() - Needs generic Wort from wheat." + }, + { + "type": "patchouli:spotlight", + "item": "growthcraft_cellar:yeast_ethereal", + "text": "$(bold)Ethereal Yeast$() - These are magical versions of yeast, which do not have a purpose yet.$(br2)$(bold)Source$() - Ethereal yeast is not currently lootable in the world.$(br2)$(bold)Culturing$() - Needs generic Wort from wheat." + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft/patchouli_books/growthcraft/en_us/entries/core/change_log.json b/src/main/resources/assets/growthcraft/patchouli_books/growthcraft/en_us/entries/core/change_log.json new file mode 100644 index 0000000..6fa1fec --- /dev/null +++ b/src/main/resources/assets/growthcraft/patchouli_books/growthcraft/en_us/entries/core/change_log.json @@ -0,0 +1,57 @@ +{ + "name": "Change Log", + "icon": "growthcraft:textures/patchouli/logos/github.png", + "category": "growthcraft:core", + "sortnum": 3, + "pages": [ + { + "type": "patchouli:text", + "text": "9.1.1 - Oct 22, 2023$(br)9.1.0 - Oct 9, 2023$(br)9.0.6 - Sep 10, 2023$(br)9.0.5 - Sep 3, 2023$(br)9.0.4 - Aug 21, 2023$(br)9.0.3 - Aug 11, 2023$(br)9.0.2 - Aug 6, 2023$(br)9.0.1 - Jul 29, 2023$(br)9.0.0 - Jul 26, 2023" + }, + { + "type": "patchouli:text", + "title": "9.1.1", + "text": "$(li)Fixed shift click inventory$(li)Fixed Honey Mead recipe$(li)Fixed Brew Kettle processing$(li)Update in-game entries$(li)Fixed Roaster sided inventory$(li)Fixed Bees Wax recipe$(br2)Updated the Brew Kettle and Roaster inventory open. Shift+Empty Hand is no longer needed." + }, + { + "type": "patchouli:text", + "title": "9.1.0", + "text": "$(li)Aged Cheese returns!$(li)Rebalanced Mystical Agriculture$(li)Fixed book if MA is missing" + }, + { + "type": "patchouli:text", + "title": "9.0.6", + "text": "$(li)Mystical Agriculture compat$(li)Added Seishu yeast for sake$(li)Fixed Wine/Sake recipes" + }, + { + "type": "patchouli:text", + "title": "9.0.5", + "text": "$(li)Added needs_heatsource to Vat recipes$(li)Adjusted Vat collision box$(li)Fixed Fermentation Barrel bottle issues$(li)Fixed cheese wheel stacking$(li)Fixed cheese wheel drops$(li)Fixed drained curds drops" + }, + { + "type": "patchouli:text", + "title": "9.0.4", + "text": "$(li)JEI Support!$(li)Fixed Apple Cider recipe$(li)Added Vanilla Milk bucket support" + }, + { + "type": "patchouli:text", + "title": "9.0.3", + "text": "$(li)More in-game documentation$(li)Rebalanced food items$(li)Changed effects for Stout and Old Port Ale" + }, + { + "type": "patchouli:text", + "title": "9.0.2", + "text": "$(li)Growthcraft In-Game Manual$(li)Fixed Mixing Vat activation$(li)Fixed Vat activation$(li)Fixed in-game manual's recipe)" + }, + { + "type": "patchouli:text", + "title": "9.0.1", + "text": "$(li)Added mangrove and cherry bee boxes$(li)Added forge tags for rice, grain, and grapes$(li)Added rabbit, mutton, salmon, cod, porkchop roasting recipes$(li)Fixed GUI title drop-shadows$(li)Fixed creative tab registration for Apiary blocks and items" + }, + { + "type": "patchouli:text", + "title": "9.0.0", + "text": "$(li)Initial stable release for Minecraft 1.20.1" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft/patchouli_books/growthcraft/en_us/entries/core/rope.json b/src/main/resources/assets/growthcraft/patchouli_books/growthcraft/en_us/entries/core/rope.json new file mode 100644 index 0000000..6b32870 --- /dev/null +++ b/src/main/resources/assets/growthcraft/patchouli_books/growthcraft/en_us/entries/core/rope.json @@ -0,0 +1,32 @@ +{ + "name": "Rope", + "icon": "growthcraft:rope_linen", + "category": "growthcraft:core", + "sortnum": 2, + "pages": [ + { + "type": "patchouli:spotlight", + "item": "growthcraft:rope_linen", + "text": "Rope is commonly used for growing grapes and hops.$(br2)Rope is initially crafted by combining a leash with string. Adding more string to an existing rope will extend it." + }, + { + "type": "crafting", + "recipe": "growthcraft:rope_linen_base", + "recipe2": "growthcraft:rope_linen_lengthen" + }, + { + "type": "image", + "images": [ + "growthcraft:textures/patchouli/blocks/rope_fence_connected.png" + ], + "text": "Rope can be placed on any vanilla fence." + }, + { + "type": "image", + "images": [ + "growthcraft:textures/patchouli/blocks/rope_connected.png" + ], + "text": "Rope can also be attached to itself. This will be needed for growing grapes and hops." + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft/patchouli_books/growthcraft/en_us/entries/core/tools.json b/src/main/resources/assets/growthcraft/patchouli_books/growthcraft/en_us/entries/core/tools.json new file mode 100644 index 0000000..5a8fe8d --- /dev/null +++ b/src/main/resources/assets/growthcraft/patchouli_books/growthcraft/en_us/entries/core/tools.json @@ -0,0 +1,22 @@ +{ + "name": "Tools", + "icon": "growthcraft:wrench", + "category": "growthcraft:core", + "sortnum": 0, + "pages": [ + { + "type": "patchouli:spotlight", + "item": "growthcraft:wrench", + "text": "The wrench can be used to adjust certain blocks within Growthcraft.$(br2)When used on the roaster, it will adjust the smoke stack in order to adjust how long the roaster will process." + }, + { + "type": "crafting", + "recipe": "growthcraft:wrench" + }, + { + "type": "patchouli:spotlight", + "item": "growthcraft:crowbar_green", + "text": "The crowbar can be crafted into 16 different colors. It used to be used to break blocks and retain their contents. Currently it is only cosmetic." + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft/patchouli_books/growthcraft/en_us/entries/core/world_gen.json b/src/main/resources/assets/growthcraft/patchouli_books/growthcraft/en_us/entries/core/world_gen.json new file mode 100644 index 0000000..9afe3bd --- /dev/null +++ b/src/main/resources/assets/growthcraft/patchouli_books/growthcraft/en_us/entries/core/world_gen.json @@ -0,0 +1,18 @@ +{ + "name": "World Generation", + "icon": "growthcraft:salt_ore", + "category": "growthcraft:core", + "sortnum": 1, + "pages": [ + { + "type": "patchouli:spotlight", + "item": "growthcraft:salt_ore", + "text": "Salt is primarily used during the cheese making process.$(br2)In order to get salt, you have to mine it between y level 0 and 64 in veins up to 9 blocks." + }, + { + "type": "crafting", + "recipe": "growthcraft:salt_block", + "recipe2": "growthcraft:salt" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft/patchouli_books/growthcraft/en_us/entries/milk/cheese_press.json b/src/main/resources/assets/growthcraft/patchouli_books/growthcraft/en_us/entries/milk/cheese_press.json new file mode 100644 index 0000000..d598731 --- /dev/null +++ b/src/main/resources/assets/growthcraft/patchouli_books/growthcraft/en_us/entries/milk/cheese_press.json @@ -0,0 +1,29 @@ +{ + "name": "Cheese Press", + "icon": "growthcraft_milk:cheese_press", + "category": "growthcraft:milk", + "sortnum": 1, + "pages": [ + { + "type": "patchouli:text", + "text": "The cheese press is used to press drained cheese curds into cheese wheels.$(br2)Drained cheese curds are added to the press by activating the press with the curds in your primary hand. Once the curds are placed in the press, use a wrench to tighten it. It will take a couple of turns to tighten it closed." + }, + { + "type": "patchouli:text", + "text": "As the press works you should see fluid particles draining out below it.$(br2)Once the particles stop draining, shift activate the press with the wrench to open it and retrieve the resulting cheese wheel." + }, + { + "type": "image", + "border": true, + "images": [ + "growthcraft:textures/patchouli/blocks/cheese_press_hanging_curds.png" + ], + "text": " " + }, + { + "type": "patchouli:crafting", + "recipe": "growthcraft_milk:cheese_press", + "recipe2": "growthcraft:wrench" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft/patchouli_books/growthcraft/en_us/entries/milk/churn.json b/src/main/resources/assets/growthcraft/patchouli_books/growthcraft/en_us/entries/milk/churn.json new file mode 100644 index 0000000..58fb15a --- /dev/null +++ b/src/main/resources/assets/growthcraft/patchouli_books/growthcraft/en_us/entries/milk/churn.json @@ -0,0 +1,18 @@ +{ + "name": "Churn", + "icon": "growthcraft_milk:churn", + "category": "growthcraft:milk", + "sortnum": 2, + "pages": [ + { + "type": "patchouli:text", + "text": "The churn is used to make butter and butter milk.$(br2)There currently isn't a use for either, but at least you can still make it." + }, + { + "type": "patchouli:crafting", + "recipe": "growthcraft_milk:churn", + "title": " ", + "text": "Add Milk to the churn and activate the pludger by right clicking on the churn. You will see the pludger go up and down. Once is is finished, you can get Butter Milk and Butter from the block." + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft/patchouli_books/growthcraft/en_us/entries/milk/making_cheese.json b/src/main/resources/assets/growthcraft/patchouli_books/growthcraft/en_us/entries/milk/making_cheese.json new file mode 100644 index 0000000..ffc7503 --- /dev/null +++ b/src/main/resources/assets/growthcraft/patchouli_books/growthcraft/en_us/entries/milk/making_cheese.json @@ -0,0 +1,79 @@ +{ + "name": "Making Cheese", + "icon": "growthcraft_milk:textures/item/cheese/appenzeller_aged.png", + "category": "growthcraft:milk", + "sortnum": 5, + "pages": [ + { + "type": "patchouli:text", + "text": "The art of making cheese dates back over 7,000 years ago. This process has remained relatively the same over the ages." + }, + { + "type": "patchouli:text", + "title": "Summary", + "text": "$(br)1. Make cultured milk in the mixing vat$(br2)2. Make cheese curds$(br2)3. Drain the cheese curds$(br2)4. Press the curds into a wheel$(br2)5. Age your cheese wheel" + }, + { + "type": "patchouli:text", + "title": "Cultured Milk", + "text": "In order to make cultured milk, your mixing vat must have a heat source underneath it. Once the mixing vat is heated, add 4 buckets of Milk, 1 bucket of Rennet and 1 starter culture. Then activate the vat with a wooden stick to start the process. Once the cultured milk is developed, remove the rennet with a bucket. This will leave 4 buckets of cultured milk in your mixing vat." + }, + { + "type": "image", + "title": "Cheese Curds", + "border": true, + "images": [ + "growthcraft:textures/patchouli/screenshots/cheese/cheddar_cheese_curds.png" + ], + "text": "Next, add ingredients to make cheese curds of your intended cheese." + }, + { + "type": "patchouli:crafting", + "recipe": "growthcraft_milk:mixing_vat" + }, + { + "title": "Ingredients", + "type": "text", + "text": "Cheddar Cheese$(li)1 Salt$(li)1 Orange Dye$(br2)Gorgonzola Cheese$(li)1 Salt$(li)1 Grape$(br2)Emmentaler Cheese$(li)1 Salt$(li)1 Wheat" + }, + { + "title": "Ingredients", + "type": "text", + "text": "Appenzeller Cheese$(li)1 Salt$(li)1 Grape$(li)1 Bayanus Yeast$(br2)Asiago Cheese$(li)1 Salt$(li)1 Salt$(li)1 Yellow Dye$(br2)Parmesan Cheese$(li)1 Salt$(li)1 White Dye" + }, + { + "title": "Ingredients", + "type": "text", + "text": "Monterey Cheese$(li)1 Salt$(li)1 Red Dye$(br2)Provolone Cheese$(li)1 Salt$(li)1 Yellow Dye$(br2)Gouda Cheese$(li)1 Salt$(li)1 Gray Dye" + }, + { + "type": "image", + "title": "Draining Curds", + "border": true, + "images": [ + "growthcraft:textures/patchouli/screenshots/cheese/hanging_cheese_curds.png" + ], + "text": "Now that you have cheese curds, attach them to the underside of a block to drain." + }, + { + "type": "image", + "title": "Cheese Press", + "border": true, + "images": [ + "growthcraft:textures/patchouli/blocks/cheese_press_hanging_curds.png" + ], + "text": "Finally, you will need to place the drained curds into a $(l:milk/mixing_vat)Cheese Press$(/l)." + }, + { + "title": "Ingredients", + "type": "text", + "text": "Casu Marzu Cheese$(li)1 Salt$(li)1 Rotten Flesh" + }, + { + "type": "patchouli:text", + "title": "Cheese Aging", + "text": "In order to make cheese editable, you will need to age your cheese. This is done by simply placing your cheese wheel down and waiting for it to age.$(br2)Once the cheese wheel has become aged, it will change colors." + } + ] +} + diff --git a/src/main/resources/assets/growthcraft/patchouli_books/growthcraft/en_us/entries/milk/making_ice_cream.json b/src/main/resources/assets/growthcraft/patchouli_books/growthcraft/en_us/entries/milk/making_ice_cream.json new file mode 100644 index 0000000..d635e59 --- /dev/null +++ b/src/main/resources/assets/growthcraft/patchouli_books/growthcraft/en_us/entries/milk/making_ice_cream.json @@ -0,0 +1,32 @@ +{ + "name": "Maiking Ice Cream", + "icon": "growthcraft_milk:ice_cream_apple", + "category": "growthcraft:milk", + "sortnum": 6, + "pages": [ + { + "type": "patchouli:text", + "text": "On those hot days, after working in the mine, digging out just one more block, you might find yourself needinga break. Why not enjoy some nice fresh ice cream." + }, + { + "type": "patchouli:crafting", + "recipe": "growthcraft_milk:ice_cream_apple", + "recipe2": "growthcraft_milk:ice_cream_chocolate" + }, + { + "type": "patchouli:crafting", + "recipe": "growthcraft_milk:ice_cream_grape_purple", + "recipe2": "growthcraft_milk:ice_cream_grape_red" + }, + { + "type": "patchouli:crafting", + "recipe": "growthcraft_milk:ice_cream_grape_white", + "recipe2": "growthcraft_milk:ice_cream_honey" + }, + { + "type": "patchouli:crafting", + "recipe": "growthcraft_milk:ice_cream_pumpkin", + "recipe2": "growthcraft_milk:ice_cream_watermelon" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft/patchouli_books/growthcraft/en_us/entries/milk/making_ice_yogurt.json b/src/main/resources/assets/growthcraft/patchouli_books/growthcraft/en_us/entries/milk/making_ice_yogurt.json new file mode 100644 index 0000000..9433873 --- /dev/null +++ b/src/main/resources/assets/growthcraft/patchouli_books/growthcraft/en_us/entries/milk/making_ice_yogurt.json @@ -0,0 +1,36 @@ +{ + "name": "Making Yogurt", + "icon": "growthcraft_milk:yogurt_apple", + "category": "growthcraft:milk", + "sortnum": 7, + "pages": [ + { + "type": "patchouli:text", + "text": "Interested in making a healthy snack? Make some yogurt." + }, + { + "type": "patchouli:crafting", + "recipe": "growthcraft_milk:yogurt_apple", + "recipe2": "growthcraft_milk:yogurt_chocolate" + }, + { + "type": "patchouli:crafting", + "recipe": "growthcraft_milk:yogurt_grape_purple", + "recipe2": "growthcraft_milk:yogurt_grape_red" + }, + { + "type": "patchouli:crafting", + "recipe": "growthcraft_milk:yogurt_grape_white", + "recipe2": "growthcraft_milk:yogurt_honey" + }, + { + "type": "patchouli:crafting", + "recipe": "growthcraft_milk:yogurt_pumpkin", + "recipe": "growthcraft_milk:yogurt_watermelon" + }, + { + "type": "patchouli:crafting", + "recipe": "growthcraft_milk:yogurt_plain" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft/patchouli_books/growthcraft/en_us/entries/milk/making_rennet.json b/src/main/resources/assets/growthcraft/patchouli_books/growthcraft/en_us/entries/milk/making_rennet.json new file mode 100644 index 0000000..630aa4e --- /dev/null +++ b/src/main/resources/assets/growthcraft/patchouli_books/growthcraft/en_us/entries/milk/making_rennet.json @@ -0,0 +1,16 @@ +{ + "name": "Making Rennet", + "icon": "growthcraft_milk:rennet_fluid_bucket", + "category": "growthcraft:milk", + "sortnum": 8, + "pages": [ + { + "type": "patchouli:text", + "text": "Rennet is the basis of making cheese. Rennet is made using the Brew Kettle by boiling either mushrooms, cow stomach, or thistle.$(br2)The amount of rennet produced depends on the ingredients." + }, + { + "type": "patchouli:text", + "text": "$(br2)Brown or Red Mushrooms$(li)125mb Rennet$(br2)Cow Stomach$(li)1000mb Rennet$(br2)Thistle$(li)125mb Rennet" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft/patchouli_books/growthcraft/en_us/entries/milk/mixing_vat.json b/src/main/resources/assets/growthcraft/patchouli_books/growthcraft/en_us/entries/milk/mixing_vat.json new file mode 100644 index 0000000..1fe9cb6 --- /dev/null +++ b/src/main/resources/assets/growthcraft/patchouli_books/growthcraft/en_us/entries/milk/mixing_vat.json @@ -0,0 +1,21 @@ +{ + "name": "Mixing Vat", + "icon": "growthcraft_milk:mixing_vat", + "category": "growthcraft:milk", + "sortnum": 3, + "pages": [ + { + "type": "patchouli:text", + "anchor": "mixing_vat", + "text": "The Growthcraft Milk Mixing Vat is used to mix fluids and items to process them into either fluid-based or item-based results such as cheese and cheese curds. Fluids are added to the mixing vat by right-clicking on the block with a filled bucket of fluid. There are two fluid handlers that are accessible by either the top face of the block or the sides." + }, + { + "type": "patchouli:text", + "text": "Items are added by activating the GUI for the block. In order for the mixing vat to start mixing the ingredients, it must be right-click activated by the activation tool listed in the recipe. This is generally a wooden sword or a stick. If the recipe results in an item, there will be a secondary activation tool that will be consumed upon drawing the item (cheese curds require a cheesecloth)." + }, + { + "type": "patchouli:crafting", + "recipe": "growthcraft_milk:mixing_vat" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft/patchouli_books/growthcraft/en_us/entries/milk/pancheon.json b/src/main/resources/assets/growthcraft/patchouli_books/growthcraft/en_us/entries/milk/pancheon.json new file mode 100644 index 0000000..dbaa7c4 --- /dev/null +++ b/src/main/resources/assets/growthcraft/patchouli_books/growthcraft/en_us/entries/milk/pancheon.json @@ -0,0 +1,22 @@ +{ + "name": "Pancheon", + "icon": "growthcraft_milk:pancheon", + "category": "growthcraft:milk", + "sortnum": 4, + "pages": [ + { + "type": "patchouli:text", + "text": "The Growthcraft Milk Mixing Vat is used to mix fluids and items to process them into either fluid-based or item-based results such as cheese and cheese curds. Fluids are added to the mixing vat by right-clicking on the block with a filled bucket of fluid. There are two fluid handlers that are accessible by either the top face of the block or the sides." + }, + { + "type": "patchouli:crafting", + "recipe": "growthcraft_milk:pancheon", + "title": " ", + "text": "Items are added by dropping them into the bucket area of the vat or if the GUI is enabled items can be placed manually. In order for the mixing vat to start mixing the ingredients," + }, + { + "type": "patchouli:text", + "text": "it must be right-click activated by the activation tool listed in the recipe. This is generally a wooden sword or a stick. If the recipe results in an item, there will be a secondary activation tool that will be consumed upon drawing the item (cheese curds require a cheesecloth)." + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft/patchouli_books/growthcraft/en_us/entries/mystical_agriculture/mystical_agriculture.json b/src/main/resources/assets/growthcraft/patchouli_books/growthcraft/en_us/entries/mystical_agriculture/mystical_agriculture.json new file mode 100644 index 0000000..500a05d --- /dev/null +++ b/src/main/resources/assets/growthcraft/patchouli_books/growthcraft/en_us/entries/mystical_agriculture/mystical_agriculture.json @@ -0,0 +1,95 @@ +{ + "name": "Mystical Agriculture", + "flag": "mod:mysticalagriculture", + "icon": "mysticalagriculture:textures/item/guide_book.png", + "category": "growthcraft:mystical_agriculture", + "sortnum": 1, + "pages": [ + { + "type": "patchouli:crafting", + "title": "Growthcraft", + "recipe": "growthcraft:mystical_agriculture/mystical_agriculture_rope_linen", + "recipe2": "growthcraft:mystical_agriculture/mystical_agriculture_salt" + }, + { + "type": "patchouli:crafting", + "title": "Growthcraft Apiary", + "recipe": "growthcraft_apiary:mystical_agriculture/mystical_agriculture_bee" + }, + { + "type": "patchouli:crafting", + "title": "Growthcraft Apples", + "recipe": "growthcraft_apples:mystical_agriculture/mystical_agriculture_apple_log" + }, + { + "type": "patchouli:crafting", + "title": "Growthcraft Cellar", + "recipe": "growthcraft_cellar:mystical_agriculture/mystical_agriculture_grain", + "recipe2": "growthcraft_cellar:mystical_agriculture/mystical_agriculture_grain_pale_golden" + }, + { + "type": "patchouli:crafting", + "title": "Growthcraft Cellar", + "recipe": "growthcraft_cellar:mystical_agriculture/mystical_agriculture_grain_golden", + "recipe2": "growthcraft_cellar:mystical_agriculture/mystical_agriculture_grain_amber" + }, + { + "type": "patchouli:crafting", + "title": "Growthcraft Cellar", + "recipe": "growthcraft_cellar:mystical_agriculture/mystical_agriculture_grain_deep_amber", + "recipe2": "growthcraft_cellar:mystical_agriculture/mystical_agriculture_grain_copper" + }, + { + "type": "patchouli:crafting", + "title": "Growthcraft Cellar", + "recipe": "growthcraft_cellar:mystical_agriculture/mystical_agriculture_grain_deep_copper", + "recipe2": "growthcraft_cellar:mystical_agriculture/mystical_agriculture_grain_brown" + }, + { + "type": "patchouli:crafting", + "title": "Growthcraft Cellar", + "recipe": "growthcraft_cellar:mystical_agriculture/mystical_agriculture_grain_dark", + "recipe2": "growthcraft_cellar:mystical_agriculture/mystical_agriculture_hops" + }, + { + "type": "patchouli:crafting", + "title": "Growthcraft Cellar", + "recipe": "growthcraft_cellar:mystical_agriculture/mystical_agriculture_purple_grapes", + "recipe2": "growthcraft_cellar:mystical_agriculture/mystical_agriculture_red_grapes" + }, + { + "type": "patchouli:crafting", + "title": "Growthcraft Cellar", + "recipe": "growthcraft_cellar:mystical_agriculture/mystical_agriculture_white_grapes", + "recipe2": "growthcraft_cellar:mystical_agriculture/mystical_agriculture_yeast_bayanus" + }, + { + "type": "patchouli:crafting", + "title": "Growthcraft Cellar", + "recipe": "growthcraft_cellar:mystical_agriculture/mystical_agriculture_yeast_brewers", + "recipe2": "growthcraft_cellar:mystical_agriculture/mystical_agriculture_yeast_lager" + }, + { + "type": "patchouli:crafting", + "title": "Growthcraft Cellar", + "recipe": "growthcraft_cellar:mystical_agriculture/mystical_agriculture_yeast_seishu", + "recipe2": "growthcraft_cellar:mystical_agriculture/mystical_agriculture_yeast_ethereal" + }, + { + "type": "patchouli:crafting", + "title": "Growthcraft Milk", + "recipe": "growthcraft_milk:mystical_agriculture/mystical_agriculture_bucket_of_milk", + "recipe2": "growthcraft_milk:mystical_agriculture/mystical_agriculture_starter_culture" + }, + { + "type": "patchouli:crafting", + "title": "Growthcraft Milk", + "recipe": "growthcraft_milk:mystical_agriculture/mystical_agriculture_stomach" + }, + { + "type": "patchouli:crafting", + "title": "Growthcraft Rice", + "recipe": "growthcraft_rice:mystical_agriculture/mystical_agriculture_rice" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft/patchouli_books/growthcraft/en_us/entries/rice/cultivated_farmland.json b/src/main/resources/assets/growthcraft/patchouli_books/growthcraft/en_us/entries/rice/cultivated_farmland.json new file mode 100644 index 0000000..cfef176 --- /dev/null +++ b/src/main/resources/assets/growthcraft/patchouli_books/growthcraft/en_us/entries/rice/cultivated_farmland.json @@ -0,0 +1,37 @@ +{ + "name": "Cultivated Farmland", + "icon": "growthcraft_rice:cultivated_farmland", + "category": "growthcraft:rice", + "sortnum": 1, + "pages": [ + { + "type": "patchouli:text", + "text": "The history of cultivating farmland is a testament to humanity's ingenuity and its ability to adapt and harness the Earth's resources for sustenance. Dating back over 10,000 years, the origins of agriculture can be traced to ancient civilizations such as the Sumerians, Egyptians, and Chinese, who first tamed and cultivated wild plants and grains." + }, + { + "type": "patchouli:text", + "title": " ", + "text": "$(br)The Neolithic Revolution marked a pivotal moment when humans transitioned from nomadic hunting and gathering to settled farming, leading to the development of permanent settlements and the growth of early civilizations. Over the millennia, farming practices evolved, with innovations like the plow and irrigation systems boosting agricultural" + }, + { + "type": "patchouli:text", + "title": " ", + "text": "productivity. The agricultural revolution fueled population growth, trade, and the emergence of complex societies, ultimately shaping the course of human history and laying the foundation for modern agriculture as we know it today." + }, + { + "type": "patchouli:crafting", + "recipe": "growthcraft_rice:cultivator", + "text": "To convert your farmland into Cultivated Farmland, you must first craft the cultivator." + }, + { + "type": "patchouli:spotlight", + "item": "growthcraft_rice:cultivated_farmland", + "text": "Now that you have a Cultivator, you can use it on farmland to convert it to cultivated farmland. The cultivated farmland must be near a water source so the it can naturally flood and be ready for you to plant rice on it. If you are impatient, you can use a water bucket bucket on it to instantly flood it." + }, + { + "type": "patchouli:spotlight", + "item": "growthcraft_rice:rice_stalk", + "text": "Once you see that there is a layer of water on top of the farmland, plant your crops that require cultivated farmland.$(br2)Rice grows at about the same rate as wheat." + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft/patchouli_books/growthcraft/en_us/entries/rice/fermenting_rice.json b/src/main/resources/assets/growthcraft/patchouli_books/growthcraft/en_us/entries/rice/fermenting_rice.json new file mode 100644 index 0000000..d2d4a7b --- /dev/null +++ b/src/main/resources/assets/growthcraft/patchouli_books/growthcraft/en_us/entries/rice/fermenting_rice.json @@ -0,0 +1,39 @@ +{ + "name": "Fermenting with Rice", + "icon": "growthcraft_rice:sake_fluid_bucket", + "category": "growthcraft:rice", + "sortnum": 3, + "pages": [ + { + "type": "patchouli:text", + "text": "The history of fermenting rice into drinks is a global narrative that transcends cultures and spans millennia. This practice likely began independently in various regions where rice was a staple crop, including Asia, Africa, and parts of the Americas. In Asia, rice-based alcoholic beverages like sake in Japan, makgeolli in Korea, " + }, + { + "type": "patchouli:text", + "title": " ", + "text": "and rice wine in China have ancient origins, tracing back thousands of years. These drinks served both culinary and ceremonial purposes. In Africa, millet and sorghum-based fermented beverages, often mixed with rice when available, have been brewed for centuries by different ethnic groups. Throughout history, rice fermentation methods have evolved" + }, + { + "type": "patchouli:text", + "title": " ", + "text": "alongside cultural traditions and technological advancements, giving rise to a diverse array of rice-based drinks enjoyed worldwide, each with its unique flavors, production techniques, and significance within its respective culture." + }, + { + "type": "patchouli:text", + "title": " ", + "text": "To get started with making fermented rice drinks, you will need to make Rice Water. This is the left over fluid from brewing rice and water in the Brew Kettle.$(br2)Depending on the yeast that you use in the fermentation barrel with the Rice Water will result in either Rice Wine or Sake." + }, + { + "type": "patchouli:spotlight", + "item": "growthcraft_rice:rice_wine_fluid_bucket", + "title": "Rice Wine", + "text": "$(bold)Ingredients$()$(li)Rice Water$(li)Bayanus Yeast$(br2)$(bold)Fermentation Time$()$(li)1000 mb$(li)30 secs$(br2)$(bold)Effects$()$(li)Strength I (01:00)" + }, + { + "type": "patchouli:spotlight", + "item": "growthcraft_rice:sake_fluid_bucket", + "title": "Sake", + "text": "$(bold)Ingredients$()$(li)Rice Water$(li)Seishu Yeast$(br2)$(bold)Fermentation Time$()$(li)1000 mb$(li)45 secs$(br2)$(bold)Effects$()$(li)Strength II (05:00)" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft/patchouli_books/growthcraft/en_us/entries/rice/rice.json b/src/main/resources/assets/growthcraft/patchouli_books/growthcraft/en_us/entries/rice/rice.json new file mode 100644 index 0000000..dab5534 --- /dev/null +++ b/src/main/resources/assets/growthcraft/patchouli_books/growthcraft/en_us/entries/rice/rice.json @@ -0,0 +1,17 @@ +{ + "name": "Cultivating Rice", + "icon": "growthcraft_rice:rice_stalk", + "category": "growthcraft:rice", + "sortnum": 2, + "pages": [ + { + "type": "patchouli:text", + "text": "The earliest evidence of rice cultivation dates back to 7000–5000 BCE in central and eastern China. The first recorded mention of rice comes from China in 2800 BC. The oldest archaeological evidence of rice use by humans has been found in the middle and lower Yangzi River Valley region of China. Phytoliths, silicon microfossils of plant cell structures," + }, + { + "type": "patchouli:text", + "title": " ", + "text": "$(br)from rice have been found at the Xianrendong and Diotonghuan sites and dated to 11,000–12,000 bc.$(br2)To start growing rice, you will need Cultivated Farmland. Planting rice onto the farmland will start the growing process. Rice grows in four stages and you can use bone meal to speed up the growth process." + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft/sounds.json b/src/main/resources/assets/growthcraft/sounds.json new file mode 100644 index 0000000..cd20ce5 --- /dev/null +++ b/src/main/resources/assets/growthcraft/sounds.json @@ -0,0 +1,9 @@ +{ + "fishtrap_open": { + "category": "block", + "subtitle": "growthcraft.subtitle.fishtrap_open", + "sounds": [ + "growthcraft:fishtrap_open" + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft/sounds/fishtrap_open.ogg b/src/main/resources/assets/growthcraft/sounds/fishtrap_open.ogg new file mode 100644 index 0000000..a602c15 Binary files /dev/null and b/src/main/resources/assets/growthcraft/sounds/fishtrap_open.ogg differ diff --git a/src/main/resources/assets/growthcraft/textures/block/apple_plank.png b/src/main/resources/assets/growthcraft/textures/block/apple_plank.png new file mode 100644 index 0000000..a1f8a44 Binary files /dev/null and b/src/main/resources/assets/growthcraft/textures/block/apple_plank.png differ diff --git a/src/main/resources/assets/growthcraft/textures/block/bamboo_door_lower.png b/src/main/resources/assets/growthcraft/textures/block/bamboo_door_lower.png new file mode 100644 index 0000000..d5d2137 Binary files /dev/null and b/src/main/resources/assets/growthcraft/textures/block/bamboo_door_lower.png differ diff --git a/src/main/resources/assets/growthcraft/textures/block/bamboo_door_upper.png b/src/main/resources/assets/growthcraft/textures/block/bamboo_door_upper.png new file mode 100644 index 0000000..dbec4d5 Binary files /dev/null and b/src/main/resources/assets/growthcraft/textures/block/bamboo_door_upper.png differ diff --git a/src/main/resources/assets/growthcraft/textures/block/bamboo_fence.png b/src/main/resources/assets/growthcraft/textures/block/bamboo_fence.png new file mode 100644 index 0000000..b8d3845 Binary files /dev/null and b/src/main/resources/assets/growthcraft/textures/block/bamboo_fence.png differ diff --git a/src/main/resources/assets/growthcraft/textures/block/bamboo_fence_top.png b/src/main/resources/assets/growthcraft/textures/block/bamboo_fence_top.png new file mode 100644 index 0000000..290afec Binary files /dev/null and b/src/main/resources/assets/growthcraft/textures/block/bamboo_fence_top.png differ diff --git a/src/main/resources/assets/growthcraft/textures/block/bamboo_leaves.png b/src/main/resources/assets/growthcraft/textures/block/bamboo_leaves.png new file mode 100644 index 0000000..0b65414 Binary files /dev/null and b/src/main/resources/assets/growthcraft/textures/block/bamboo_leaves.png differ diff --git a/src/main/resources/assets/growthcraft/textures/block/bamboo_leaves_opaque.png b/src/main/resources/assets/growthcraft/textures/block/bamboo_leaves_opaque.png new file mode 100644 index 0000000..a79208a Binary files /dev/null and b/src/main/resources/assets/growthcraft/textures/block/bamboo_leaves_opaque.png differ diff --git a/src/main/resources/assets/growthcraft/textures/block/bamboo_plank.png b/src/main/resources/assets/growthcraft/textures/block/bamboo_plank.png new file mode 100644 index 0000000..42a7a2c Binary files /dev/null and b/src/main/resources/assets/growthcraft/textures/block/bamboo_plank.png differ diff --git a/src/main/resources/assets/growthcraft/textures/block/bamboo_shoot.png b/src/main/resources/assets/growthcraft/textures/block/bamboo_shoot.png new file mode 100644 index 0000000..9dcb5a6 Binary files /dev/null and b/src/main/resources/assets/growthcraft/textures/block/bamboo_shoot.png differ diff --git a/src/main/resources/assets/growthcraft/textures/block/bamboo_stalk.png b/src/main/resources/assets/growthcraft/textures/block/bamboo_stalk.png new file mode 100644 index 0000000..e70834f Binary files /dev/null and b/src/main/resources/assets/growthcraft/textures/block/bamboo_stalk.png differ diff --git a/src/main/resources/assets/growthcraft/textures/block/bamboo_stalk_top.png b/src/main/resources/assets/growthcraft/textures/block/bamboo_stalk_top.png new file mode 100644 index 0000000..1df2761 Binary files /dev/null and b/src/main/resources/assets/growthcraft/textures/block/bamboo_stalk_top.png differ diff --git a/src/main/resources/assets/growthcraft/textures/block/fluid/fluid.png b/src/main/resources/assets/growthcraft/textures/block/fluid/fluid.png new file mode 100644 index 0000000..c6f2fa9 Binary files /dev/null and b/src/main/resources/assets/growthcraft/textures/block/fluid/fluid.png differ diff --git a/src/main/resources/assets/growthcraft/textures/block/fluid/fluid_flowing.png b/src/main/resources/assets/growthcraft/textures/block/fluid/fluid_flowing.png new file mode 100644 index 0000000..5a2d758 Binary files /dev/null and b/src/main/resources/assets/growthcraft/textures/block/fluid/fluid_flowing.png differ diff --git a/src/main/resources/assets/growthcraft/textures/block/fluid/fluid_flowing.png.mcmeta b/src/main/resources/assets/growthcraft/textures/block/fluid/fluid_flowing.png.mcmeta new file mode 100644 index 0000000..4f0718a --- /dev/null +++ b/src/main/resources/assets/growthcraft/textures/block/fluid/fluid_flowing.png.mcmeta @@ -0,0 +1,3 @@ +{ + "animation": {} +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft/textures/block/fluid/fluid_overlay.png b/src/main/resources/assets/growthcraft/textures/block/fluid/fluid_overlay.png new file mode 100644 index 0000000..d5d4b02 Binary files /dev/null and b/src/main/resources/assets/growthcraft/textures/block/fluid/fluid_overlay.png differ diff --git a/src/main/resources/assets/growthcraft/textures/block/fluid/fluid_still.png b/src/main/resources/assets/growthcraft/textures/block/fluid/fluid_still.png new file mode 100644 index 0000000..adf9f52 Binary files /dev/null and b/src/main/resources/assets/growthcraft/textures/block/fluid/fluid_still.png differ diff --git a/src/main/resources/assets/growthcraft/textures/block/fluid/fluid_still.png.mcmeta b/src/main/resources/assets/growthcraft/textures/block/fluid/fluid_still.png.mcmeta new file mode 100644 index 0000000..0645f48 --- /dev/null +++ b/src/main/resources/assets/growthcraft/textures/block/fluid/fluid_still.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 2 + } +} diff --git a/src/main/resources/assets/growthcraft/textures/block/missing.png b/src/main/resources/assets/growthcraft/textures/block/missing.png new file mode 100644 index 0000000..2b04224 Binary files /dev/null and b/src/main/resources/assets/growthcraft/textures/block/missing.png differ diff --git a/src/main/resources/assets/growthcraft/textures/block/place_holder_block.png b/src/main/resources/assets/growthcraft/textures/block/place_holder_block.png new file mode 100644 index 0000000..f73f405 Binary files /dev/null and b/src/main/resources/assets/growthcraft/textures/block/place_holder_block.png differ diff --git a/src/main/resources/assets/growthcraft/textures/block/plant_nocolor.png b/src/main/resources/assets/growthcraft/textures/block/plant_nocolor.png new file mode 100644 index 0000000..849d0b5 Binary files /dev/null and b/src/main/resources/assets/growthcraft/textures/block/plant_nocolor.png differ diff --git a/src/main/resources/assets/growthcraft/textures/block/rock_salt_block_bottom.png b/src/main/resources/assets/growthcraft/textures/block/rock_salt_block_bottom.png new file mode 100644 index 0000000..1bbd539 Binary files /dev/null and b/src/main/resources/assets/growthcraft/textures/block/rock_salt_block_bottom.png differ diff --git a/src/main/resources/assets/growthcraft/textures/block/rock_salt_block_normal.png b/src/main/resources/assets/growthcraft/textures/block/rock_salt_block_normal.png new file mode 100644 index 0000000..7b006d9 Binary files /dev/null and b/src/main/resources/assets/growthcraft/textures/block/rock_salt_block_normal.png differ diff --git a/src/main/resources/assets/growthcraft/textures/block/rock_salt_block_top.png b/src/main/resources/assets/growthcraft/textures/block/rock_salt_block_top.png new file mode 100644 index 0000000..6be6612 Binary files /dev/null and b/src/main/resources/assets/growthcraft/textures/block/rock_salt_block_top.png differ diff --git a/src/main/resources/assets/growthcraft/textures/block/rock_salt_ore_overlay.png b/src/main/resources/assets/growthcraft/textures/block/rock_salt_ore_overlay.png new file mode 100644 index 0000000..045b03e Binary files /dev/null and b/src/main/resources/assets/growthcraft/textures/block/rock_salt_ore_overlay.png differ diff --git a/src/main/resources/assets/growthcraft/textures/block/rocksalt_ore.png b/src/main/resources/assets/growthcraft/textures/block/rocksalt_ore.png new file mode 100644 index 0000000..30f1ce4 Binary files /dev/null and b/src/main/resources/assets/growthcraft/textures/block/rocksalt_ore.png differ diff --git a/src/main/resources/assets/growthcraft/textures/block/rope_linen_center.png b/src/main/resources/assets/growthcraft/textures/block/rope_linen_center.png new file mode 100644 index 0000000..662f5d6 Binary files /dev/null and b/src/main/resources/assets/growthcraft/textures/block/rope_linen_center.png differ diff --git a/src/main/resources/assets/growthcraft/textures/block/rope_linen_horizontal.png b/src/main/resources/assets/growthcraft/textures/block/rope_linen_horizontal.png new file mode 100644 index 0000000..551c25a Binary files /dev/null and b/src/main/resources/assets/growthcraft/textures/block/rope_linen_horizontal.png differ diff --git a/src/main/resources/assets/growthcraft/textures/block/rope_linen_knot.png b/src/main/resources/assets/growthcraft/textures/block/rope_linen_knot.png new file mode 100644 index 0000000..038499f Binary files /dev/null and b/src/main/resources/assets/growthcraft/textures/block/rope_linen_knot.png differ diff --git a/src/main/resources/assets/growthcraft/textures/block/rope_linen_vertical.png b/src/main/resources/assets/growthcraft/textures/block/rope_linen_vertical.png new file mode 100644 index 0000000..bcf0895 Binary files /dev/null and b/src/main/resources/assets/growthcraft/textures/block/rope_linen_vertical.png differ diff --git a/src/main/resources/assets/growthcraft/textures/block/salt_ore.png b/src/main/resources/assets/growthcraft/textures/block/salt_ore.png new file mode 100644 index 0000000..30f1ce4 Binary files /dev/null and b/src/main/resources/assets/growthcraft/textures/block/salt_ore.png differ diff --git a/src/main/resources/assets/growthcraft/textures/block/scaffold.png b/src/main/resources/assets/growthcraft/textures/block/scaffold.png new file mode 100644 index 0000000..ce732a9 Binary files /dev/null and b/src/main/resources/assets/growthcraft/textures/block/scaffold.png differ diff --git a/src/main/resources/assets/growthcraft/textures/item/bamboo.png b/src/main/resources/assets/growthcraft/textures/item/bamboo.png new file mode 100644 index 0000000..6e7cd0e Binary files /dev/null and b/src/main/resources/assets/growthcraft/textures/item/bamboo.png differ diff --git a/src/main/resources/assets/growthcraft/textures/item/bamboo_door.png b/src/main/resources/assets/growthcraft/textures/item/bamboo_door.png new file mode 100644 index 0000000..62a72e5 Binary files /dev/null and b/src/main/resources/assets/growthcraft/textures/item/bamboo_door.png differ diff --git a/src/main/resources/assets/growthcraft/textures/item/bucket/bucket_base.png b/src/main/resources/assets/growthcraft/textures/item/bucket/bucket_base.png new file mode 100644 index 0000000..86e6a34 Binary files /dev/null and b/src/main/resources/assets/growthcraft/textures/item/bucket/bucket_base.png differ diff --git a/src/main/resources/assets/growthcraft/textures/item/bucket/bucket_fluid.png b/src/main/resources/assets/growthcraft/textures/item/bucket/bucket_fluid.png new file mode 100644 index 0000000..3226aa5 Binary files /dev/null and b/src/main/resources/assets/growthcraft/textures/item/bucket/bucket_fluid.png differ diff --git a/src/main/resources/assets/growthcraft/textures/item/coal.png b/src/main/resources/assets/growthcraft/textures/item/coal.png new file mode 100644 index 0000000..8001446 Binary files /dev/null and b/src/main/resources/assets/growthcraft/textures/item/coal.png differ diff --git a/src/main/resources/assets/growthcraft/textures/item/crowbar.png b/src/main/resources/assets/growthcraft/textures/item/crowbar.png new file mode 100644 index 0000000..c9654e5 Binary files /dev/null and b/src/main/resources/assets/growthcraft/textures/item/crowbar.png differ diff --git a/src/main/resources/assets/growthcraft/textures/item/crowbar_black.png b/src/main/resources/assets/growthcraft/textures/item/crowbar_black.png new file mode 100644 index 0000000..27275aa Binary files /dev/null and b/src/main/resources/assets/growthcraft/textures/item/crowbar_black.png differ diff --git a/src/main/resources/assets/growthcraft/textures/item/crowbar_blue.png b/src/main/resources/assets/growthcraft/textures/item/crowbar_blue.png new file mode 100644 index 0000000..b2caede Binary files /dev/null and b/src/main/resources/assets/growthcraft/textures/item/crowbar_blue.png differ diff --git a/src/main/resources/assets/growthcraft/textures/item/crowbar_brown.png b/src/main/resources/assets/growthcraft/textures/item/crowbar_brown.png new file mode 100644 index 0000000..a513d9b Binary files /dev/null and b/src/main/resources/assets/growthcraft/textures/item/crowbar_brown.png differ diff --git a/src/main/resources/assets/growthcraft/textures/item/crowbar_cyan.png b/src/main/resources/assets/growthcraft/textures/item/crowbar_cyan.png new file mode 100644 index 0000000..16a2193 Binary files /dev/null and b/src/main/resources/assets/growthcraft/textures/item/crowbar_cyan.png differ diff --git a/src/main/resources/assets/growthcraft/textures/item/crowbar_gray.png b/src/main/resources/assets/growthcraft/textures/item/crowbar_gray.png new file mode 100644 index 0000000..9f5d0b7 Binary files /dev/null and b/src/main/resources/assets/growthcraft/textures/item/crowbar_gray.png differ diff --git a/src/main/resources/assets/growthcraft/textures/item/crowbar_green.png b/src/main/resources/assets/growthcraft/textures/item/crowbar_green.png new file mode 100644 index 0000000..ea66a5e Binary files /dev/null and b/src/main/resources/assets/growthcraft/textures/item/crowbar_green.png differ diff --git a/src/main/resources/assets/growthcraft/textures/item/crowbar_light_blue.png b/src/main/resources/assets/growthcraft/textures/item/crowbar_light_blue.png new file mode 100644 index 0000000..9655175 Binary files /dev/null and b/src/main/resources/assets/growthcraft/textures/item/crowbar_light_blue.png differ diff --git a/src/main/resources/assets/growthcraft/textures/item/crowbar_light_gray.png b/src/main/resources/assets/growthcraft/textures/item/crowbar_light_gray.png new file mode 100644 index 0000000..1349e72 Binary files /dev/null and b/src/main/resources/assets/growthcraft/textures/item/crowbar_light_gray.png differ diff --git a/src/main/resources/assets/growthcraft/textures/item/crowbar_lime.png b/src/main/resources/assets/growthcraft/textures/item/crowbar_lime.png new file mode 100644 index 0000000..215297b Binary files /dev/null and b/src/main/resources/assets/growthcraft/textures/item/crowbar_lime.png differ diff --git a/src/main/resources/assets/growthcraft/textures/item/crowbar_magenta.png b/src/main/resources/assets/growthcraft/textures/item/crowbar_magenta.png new file mode 100644 index 0000000..3a488ef Binary files /dev/null and b/src/main/resources/assets/growthcraft/textures/item/crowbar_magenta.png differ diff --git a/src/main/resources/assets/growthcraft/textures/item/crowbar_orange.png b/src/main/resources/assets/growthcraft/textures/item/crowbar_orange.png new file mode 100644 index 0000000..431baec Binary files /dev/null and b/src/main/resources/assets/growthcraft/textures/item/crowbar_orange.png differ diff --git a/src/main/resources/assets/growthcraft/textures/item/crowbar_pink.png b/src/main/resources/assets/growthcraft/textures/item/crowbar_pink.png new file mode 100644 index 0000000..0fd6219 Binary files /dev/null and b/src/main/resources/assets/growthcraft/textures/item/crowbar_pink.png differ diff --git a/src/main/resources/assets/growthcraft/textures/item/crowbar_purple.png b/src/main/resources/assets/growthcraft/textures/item/crowbar_purple.png new file mode 100644 index 0000000..1052138 Binary files /dev/null and b/src/main/resources/assets/growthcraft/textures/item/crowbar_purple.png differ diff --git a/src/main/resources/assets/growthcraft/textures/item/crowbar_red.png b/src/main/resources/assets/growthcraft/textures/item/crowbar_red.png new file mode 100644 index 0000000..cc0c835 Binary files /dev/null and b/src/main/resources/assets/growthcraft/textures/item/crowbar_red.png differ diff --git a/src/main/resources/assets/growthcraft/textures/item/crowbar_white.png b/src/main/resources/assets/growthcraft/textures/item/crowbar_white.png new file mode 100644 index 0000000..09f09ec Binary files /dev/null and b/src/main/resources/assets/growthcraft/textures/item/crowbar_white.png differ diff --git a/src/main/resources/assets/growthcraft/textures/item/crowbar_yellow.png b/src/main/resources/assets/growthcraft/textures/item/crowbar_yellow.png new file mode 100644 index 0000000..20e553f Binary files /dev/null and b/src/main/resources/assets/growthcraft/textures/item/crowbar_yellow.png differ diff --git a/src/main/resources/assets/growthcraft/textures/item/growthcraft_book.png b/src/main/resources/assets/growthcraft/textures/item/growthcraft_book.png new file mode 100644 index 0000000..0049d83 Binary files /dev/null and b/src/main/resources/assets/growthcraft/textures/item/growthcraft_book.png differ diff --git a/src/main/resources/assets/growthcraft/textures/item/raft.png b/src/main/resources/assets/growthcraft/textures/item/raft.png new file mode 100644 index 0000000..39783f5 Binary files /dev/null and b/src/main/resources/assets/growthcraft/textures/item/raft.png differ diff --git a/src/main/resources/assets/growthcraft/textures/item/rock_salt.png b/src/main/resources/assets/growthcraft/textures/item/rock_salt.png new file mode 100644 index 0000000..a2cf9a1 Binary files /dev/null and b/src/main/resources/assets/growthcraft/textures/item/rock_salt.png differ diff --git a/src/main/resources/assets/growthcraft/textures/item/rope.png b/src/main/resources/assets/growthcraft/textures/item/rope.png new file mode 100644 index 0000000..44b0499 Binary files /dev/null and b/src/main/resources/assets/growthcraft/textures/item/rope.png differ diff --git a/src/main/resources/assets/growthcraft/textures/item/rope_linen.png b/src/main/resources/assets/growthcraft/textures/item/rope_linen.png new file mode 100644 index 0000000..44b0499 Binary files /dev/null and b/src/main/resources/assets/growthcraft/textures/item/rope_linen.png differ diff --git a/src/main/resources/assets/growthcraft/textures/item/rope_twine.png b/src/main/resources/assets/growthcraft/textures/item/rope_twine.png new file mode 100644 index 0000000..b1fab55 Binary files /dev/null and b/src/main/resources/assets/growthcraft/textures/item/rope_twine.png differ diff --git a/src/main/resources/assets/growthcraft/textures/item/salt.png b/src/main/resources/assets/growthcraft/textures/item/salt.png new file mode 100644 index 0000000..a2cf9a1 Binary files /dev/null and b/src/main/resources/assets/growthcraft/textures/item/salt.png differ diff --git a/src/main/resources/assets/growthcraft/textures/item/sea_salt.png b/src/main/resources/assets/growthcraft/textures/item/sea_salt.png new file mode 100644 index 0000000..3d1484f Binary files /dev/null and b/src/main/resources/assets/growthcraft/textures/item/sea_salt.png differ diff --git a/src/main/resources/assets/growthcraft/textures/item/sea_salt_bottle.png b/src/main/resources/assets/growthcraft/textures/item/sea_salt_bottle.png new file mode 100644 index 0000000..a2cce66 Binary files /dev/null and b/src/main/resources/assets/growthcraft/textures/item/sea_salt_bottle.png differ diff --git a/src/main/resources/assets/growthcraft/textures/item/sea_salt_bucket.png b/src/main/resources/assets/growthcraft/textures/item/sea_salt_bucket.png new file mode 100644 index 0000000..bc6b492 Binary files /dev/null and b/src/main/resources/assets/growthcraft/textures/item/sea_salt_bucket.png differ diff --git a/src/main/resources/assets/growthcraft/textures/item/sea_salt_bucket_alternative.png b/src/main/resources/assets/growthcraft/textures/item/sea_salt_bucket_alternative.png new file mode 100644 index 0000000..99be6d3 Binary files /dev/null and b/src/main/resources/assets/growthcraft/textures/item/sea_salt_bucket_alternative.png differ diff --git a/src/main/resources/assets/growthcraft/textures/item/shoot.png b/src/main/resources/assets/growthcraft/textures/item/shoot.png new file mode 100644 index 0000000..9dcb5a6 Binary files /dev/null and b/src/main/resources/assets/growthcraft/textures/item/shoot.png differ diff --git a/src/main/resources/assets/growthcraft/textures/item/wrench.png b/src/main/resources/assets/growthcraft/textures/item/wrench.png new file mode 100644 index 0000000..cc3f728 Binary files /dev/null and b/src/main/resources/assets/growthcraft/textures/item/wrench.png differ diff --git a/src/main/resources/assets/growthcraft/textures/patchouli/blocks/bee_box_flowers.png b/src/main/resources/assets/growthcraft/textures/patchouli/blocks/bee_box_flowers.png new file mode 100644 index 0000000..7388c92 Binary files /dev/null and b/src/main/resources/assets/growthcraft/textures/patchouli/blocks/bee_box_flowers.png differ diff --git a/src/main/resources/assets/growthcraft/textures/patchouli/blocks/cheese_press_hanging_curds.png b/src/main/resources/assets/growthcraft/textures/patchouli/blocks/cheese_press_hanging_curds.png new file mode 100644 index 0000000..e13452d Binary files /dev/null and b/src/main/resources/assets/growthcraft/textures/patchouli/blocks/cheese_press_hanging_curds.png differ diff --git a/src/main/resources/assets/growthcraft/textures/patchouli/blocks/roaster_smoke.png b/src/main/resources/assets/growthcraft/textures/patchouli/blocks/roaster_smoke.png new file mode 100644 index 0000000..b341a8b Binary files /dev/null and b/src/main/resources/assets/growthcraft/textures/patchouli/blocks/roaster_smoke.png differ diff --git a/src/main/resources/assets/growthcraft/textures/patchouli/blocks/rope_connected.png b/src/main/resources/assets/growthcraft/textures/patchouli/blocks/rope_connected.png new file mode 100644 index 0000000..562fcee Binary files /dev/null and b/src/main/resources/assets/growthcraft/textures/patchouli/blocks/rope_connected.png differ diff --git a/src/main/resources/assets/growthcraft/textures/patchouli/blocks/rope_fence_connected.png b/src/main/resources/assets/growthcraft/textures/patchouli/blocks/rope_fence_connected.png new file mode 100644 index 0000000..222fbdb Binary files /dev/null and b/src/main/resources/assets/growthcraft/textures/patchouli/blocks/rope_fence_connected.png differ diff --git a/src/main/resources/assets/growthcraft/textures/patchouli/logos/github.png b/src/main/resources/assets/growthcraft/textures/patchouli/logos/github.png new file mode 100644 index 0000000..b0fc966 Binary files /dev/null and b/src/main/resources/assets/growthcraft/textures/patchouli/logos/github.png differ diff --git a/src/main/resources/assets/growthcraft/textures/patchouli/screenshots/cheese/cheddar_cheese_curds.png b/src/main/resources/assets/growthcraft/textures/patchouli/screenshots/cheese/cheddar_cheese_curds.png new file mode 100644 index 0000000..4692c6c Binary files /dev/null and b/src/main/resources/assets/growthcraft/textures/patchouli/screenshots/cheese/cheddar_cheese_curds.png differ diff --git a/src/main/resources/assets/growthcraft/textures/patchouli/screenshots/cheese/hanging_cheese_curds.png b/src/main/resources/assets/growthcraft/textures/patchouli/screenshots/cheese/hanging_cheese_curds.png new file mode 100644 index 0000000..98c4c8b Binary files /dev/null and b/src/main/resources/assets/growthcraft/textures/patchouli/screenshots/cheese/hanging_cheese_curds.png differ diff --git a/src/main/resources/assets/growthcraft_apiary/blockstates/bee_box_acacia.json b/src/main/resources/assets/growthcraft_apiary/blockstates/bee_box_acacia.json new file mode 100644 index 0000000..5f51bee --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/blockstates/bee_box_acacia.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=north": { + "model": "growthcraft_apiary:block/bee_box_acacia" + }, + "facing=south": { + "model": "growthcraft_apiary:block/bee_box_acacia", + "y": 180 + }, + "facing=east": { + "model": "growthcraft_apiary:block/bee_box_acacia", + "y": 90 + }, + "facing=west": { + "model": "growthcraft_apiary:block/bee_box_acacia", + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/blockstates/bee_box_birch.json b/src/main/resources/assets/growthcraft_apiary/blockstates/bee_box_birch.json new file mode 100644 index 0000000..2538196 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/blockstates/bee_box_birch.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=north": { + "model": "growthcraft_apiary:block/bee_box_birch" + }, + "facing=south": { + "model": "growthcraft_apiary:block/bee_box_birch", + "y": 180 + }, + "facing=east": { + "model": "growthcraft_apiary:block/bee_box_birch", + "y": 90 + }, + "facing=west": { + "model": "growthcraft_apiary:block/bee_box_birch", + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/blockstates/bee_box_crimson.json b/src/main/resources/assets/growthcraft_apiary/blockstates/bee_box_crimson.json new file mode 100644 index 0000000..7fa7986 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/blockstates/bee_box_crimson.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=north": { + "model": "growthcraft_apiary:block/bee_box_crimson" + }, + "facing=south": { + "model": "growthcraft_apiary:block/bee_box_crimson", + "y": 180 + }, + "facing=east": { + "model": "growthcraft_apiary:block/bee_box_crimson", + "y": 90 + }, + "facing=west": { + "model": "growthcraft_apiary:block/bee_box_crimson", + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/blockstates/bee_box_dark_oak.json b/src/main/resources/assets/growthcraft_apiary/blockstates/bee_box_dark_oak.json new file mode 100644 index 0000000..24fed0c --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/blockstates/bee_box_dark_oak.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=north": { + "model": "growthcraft_apiary:block/bee_box_dark_oak" + }, + "facing=south": { + "model": "growthcraft_apiary:block/bee_box_dark_oak", + "y": 180 + }, + "facing=east": { + "model": "growthcraft_apiary:block/bee_box_dark_oak", + "y": 90 + }, + "facing=west": { + "model": "growthcraft_apiary:block/bee_box_dark_oak", + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/blockstates/bee_box_jungle.json b/src/main/resources/assets/growthcraft_apiary/blockstates/bee_box_jungle.json new file mode 100644 index 0000000..4c42a4a --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/blockstates/bee_box_jungle.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=north": { + "model": "growthcraft_apiary:block/bee_box_jungle" + }, + "facing=south": { + "model": "growthcraft_apiary:block/bee_box_jungle", + "y": 180 + }, + "facing=east": { + "model": "growthcraft_apiary:block/bee_box_jungle", + "y": 90 + }, + "facing=west": { + "model": "growthcraft_apiary:block/bee_box_jungle", + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/blockstates/bee_box_oak.json b/src/main/resources/assets/growthcraft_apiary/blockstates/bee_box_oak.json new file mode 100644 index 0000000..ec1fdab --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/blockstates/bee_box_oak.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=north": { + "model": "growthcraft_apiary:block/bee_box_oak" + }, + "facing=south": { + "model": "growthcraft_apiary:block/bee_box_oak", + "y": 180 + }, + "facing=east": { + "model": "growthcraft_apiary:block/bee_box_oak", + "y": 90 + }, + "facing=west": { + "model": "growthcraft_apiary:block/bee_box_oak", + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/blockstates/bee_box_spruce.json b/src/main/resources/assets/growthcraft_apiary/blockstates/bee_box_spruce.json new file mode 100644 index 0000000..57a1d82 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/blockstates/bee_box_spruce.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=north": { + "model": "growthcraft_apiary:block/bee_box_spruce" + }, + "facing=south": { + "model": "growthcraft_apiary:block/bee_box_spruce", + "y": 180 + }, + "facing=east": { + "model": "growthcraft_apiary:block/bee_box_spruce", + "y": 90 + }, + "facing=west": { + "model": "growthcraft_apiary:block/bee_box_spruce", + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/blockstates/bee_box_warped.json b/src/main/resources/assets/growthcraft_apiary/blockstates/bee_box_warped.json new file mode 100644 index 0000000..b5ac65f --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/blockstates/bee_box_warped.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=north": { + "model": "growthcraft_apiary:block/bee_box_warped" + }, + "facing=south": { + "model": "growthcraft_apiary:block/bee_box_warped", + "y": 180 + }, + "facing=east": { + "model": "growthcraft_apiary:block/bee_box_warped", + "y": 90 + }, + "facing=west": { + "model": "growthcraft_apiary:block/bee_box_warped", + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/blockstates/candle_black.json b/src/main/resources/assets/growthcraft_apiary/blockstates/candle_black.json new file mode 100644 index 0000000..1acec6c --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/blockstates/candle_black.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "growthcraft_apiary:block/candle" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/blockstates/candle_black_wall.json b/src/main/resources/assets/growthcraft_apiary/blockstates/candle_black_wall.json new file mode 100644 index 0000000..25be453 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/blockstates/candle_black_wall.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=east": { + "model": "growthcraft_apiary:block/candle_wall" + }, + "facing=north": { + "model": "growthcraft_apiary:block/candle_wall", + "y": 270 + }, + "facing=south": { + "model": "growthcraft_apiary:block/candle_wall", + "y": 90 + }, + "facing=west": { + "model": "growthcraft_apiary:block/candle_wall", + "y": 180 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/blockstates/candle_blue.json b/src/main/resources/assets/growthcraft_apiary/blockstates/candle_blue.json new file mode 100644 index 0000000..678f5dd --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/blockstates/candle_blue.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "growthcraft_apiary:block/candle_blue" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/blockstates/candle_blue_wall.json b/src/main/resources/assets/growthcraft_apiary/blockstates/candle_blue_wall.json new file mode 100644 index 0000000..1f2eb58 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/blockstates/candle_blue_wall.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=east": { + "model": "growthcraft_apiary:block/candle_blue_wall" + }, + "facing=north": { + "model": "growthcraft_apiary:block/candle_blue_wall", + "y": 270 + }, + "facing=south": { + "model": "growthcraft_apiary:block/candle_blue_wall", + "y": 90 + }, + "facing=west": { + "model": "growthcraft_apiary:block/candle_blue_wall", + "y": 180 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/blockstates/candle_brown.json b/src/main/resources/assets/growthcraft_apiary/blockstates/candle_brown.json new file mode 100644 index 0000000..1acec6c --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/blockstates/candle_brown.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "growthcraft_apiary:block/candle" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/blockstates/candle_brown_wall.json b/src/main/resources/assets/growthcraft_apiary/blockstates/candle_brown_wall.json new file mode 100644 index 0000000..25be453 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/blockstates/candle_brown_wall.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=east": { + "model": "growthcraft_apiary:block/candle_wall" + }, + "facing=north": { + "model": "growthcraft_apiary:block/candle_wall", + "y": 270 + }, + "facing=south": { + "model": "growthcraft_apiary:block/candle_wall", + "y": 90 + }, + "facing=west": { + "model": "growthcraft_apiary:block/candle_wall", + "y": 180 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/blockstates/candle_cyan.json b/src/main/resources/assets/growthcraft_apiary/blockstates/candle_cyan.json new file mode 100644 index 0000000..1acec6c --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/blockstates/candle_cyan.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "growthcraft_apiary:block/candle" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/blockstates/candle_cyan_wall.json b/src/main/resources/assets/growthcraft_apiary/blockstates/candle_cyan_wall.json new file mode 100644 index 0000000..25be453 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/blockstates/candle_cyan_wall.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=east": { + "model": "growthcraft_apiary:block/candle_wall" + }, + "facing=north": { + "model": "growthcraft_apiary:block/candle_wall", + "y": 270 + }, + "facing=south": { + "model": "growthcraft_apiary:block/candle_wall", + "y": 90 + }, + "facing=west": { + "model": "growthcraft_apiary:block/candle_wall", + "y": 180 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/blockstates/candle_gray.json b/src/main/resources/assets/growthcraft_apiary/blockstates/candle_gray.json new file mode 100644 index 0000000..1acec6c --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/blockstates/candle_gray.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "growthcraft_apiary:block/candle" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/blockstates/candle_gray_wall.json b/src/main/resources/assets/growthcraft_apiary/blockstates/candle_gray_wall.json new file mode 100644 index 0000000..25be453 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/blockstates/candle_gray_wall.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=east": { + "model": "growthcraft_apiary:block/candle_wall" + }, + "facing=north": { + "model": "growthcraft_apiary:block/candle_wall", + "y": 270 + }, + "facing=south": { + "model": "growthcraft_apiary:block/candle_wall", + "y": 90 + }, + "facing=west": { + "model": "growthcraft_apiary:block/candle_wall", + "y": 180 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/blockstates/candle_green.json b/src/main/resources/assets/growthcraft_apiary/blockstates/candle_green.json new file mode 100644 index 0000000..1acec6c --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/blockstates/candle_green.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "growthcraft_apiary:block/candle" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/blockstates/candle_green_wall.json b/src/main/resources/assets/growthcraft_apiary/blockstates/candle_green_wall.json new file mode 100644 index 0000000..25be453 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/blockstates/candle_green_wall.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=east": { + "model": "growthcraft_apiary:block/candle_wall" + }, + "facing=north": { + "model": "growthcraft_apiary:block/candle_wall", + "y": 270 + }, + "facing=south": { + "model": "growthcraft_apiary:block/candle_wall", + "y": 90 + }, + "facing=west": { + "model": "growthcraft_apiary:block/candle_wall", + "y": 180 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/blockstates/candle_light_blue.json b/src/main/resources/assets/growthcraft_apiary/blockstates/candle_light_blue.json new file mode 100644 index 0000000..1acec6c --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/blockstates/candle_light_blue.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "growthcraft_apiary:block/candle" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/blockstates/candle_light_blue_wall.json b/src/main/resources/assets/growthcraft_apiary/blockstates/candle_light_blue_wall.json new file mode 100644 index 0000000..25be453 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/blockstates/candle_light_blue_wall.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=east": { + "model": "growthcraft_apiary:block/candle_wall" + }, + "facing=north": { + "model": "growthcraft_apiary:block/candle_wall", + "y": 270 + }, + "facing=south": { + "model": "growthcraft_apiary:block/candle_wall", + "y": 90 + }, + "facing=west": { + "model": "growthcraft_apiary:block/candle_wall", + "y": 180 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/blockstates/candle_light_gray.json b/src/main/resources/assets/growthcraft_apiary/blockstates/candle_light_gray.json new file mode 100644 index 0000000..1acec6c --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/blockstates/candle_light_gray.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "growthcraft_apiary:block/candle" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/blockstates/candle_light_gray_wall.json b/src/main/resources/assets/growthcraft_apiary/blockstates/candle_light_gray_wall.json new file mode 100644 index 0000000..25be453 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/blockstates/candle_light_gray_wall.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=east": { + "model": "growthcraft_apiary:block/candle_wall" + }, + "facing=north": { + "model": "growthcraft_apiary:block/candle_wall", + "y": 270 + }, + "facing=south": { + "model": "growthcraft_apiary:block/candle_wall", + "y": 90 + }, + "facing=west": { + "model": "growthcraft_apiary:block/candle_wall", + "y": 180 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/blockstates/candle_lime.json b/src/main/resources/assets/growthcraft_apiary/blockstates/candle_lime.json new file mode 100644 index 0000000..1acec6c --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/blockstates/candle_lime.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "growthcraft_apiary:block/candle" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/blockstates/candle_lime_wall.json b/src/main/resources/assets/growthcraft_apiary/blockstates/candle_lime_wall.json new file mode 100644 index 0000000..25be453 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/blockstates/candle_lime_wall.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=east": { + "model": "growthcraft_apiary:block/candle_wall" + }, + "facing=north": { + "model": "growthcraft_apiary:block/candle_wall", + "y": 270 + }, + "facing=south": { + "model": "growthcraft_apiary:block/candle_wall", + "y": 90 + }, + "facing=west": { + "model": "growthcraft_apiary:block/candle_wall", + "y": 180 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/blockstates/candle_magenta.json b/src/main/resources/assets/growthcraft_apiary/blockstates/candle_magenta.json new file mode 100644 index 0000000..1acec6c --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/blockstates/candle_magenta.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "growthcraft_apiary:block/candle" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/blockstates/candle_magenta_wall.json b/src/main/resources/assets/growthcraft_apiary/blockstates/candle_magenta_wall.json new file mode 100644 index 0000000..25be453 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/blockstates/candle_magenta_wall.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=east": { + "model": "growthcraft_apiary:block/candle_wall" + }, + "facing=north": { + "model": "growthcraft_apiary:block/candle_wall", + "y": 270 + }, + "facing=south": { + "model": "growthcraft_apiary:block/candle_wall", + "y": 90 + }, + "facing=west": { + "model": "growthcraft_apiary:block/candle_wall", + "y": 180 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/blockstates/candle_orange.json b/src/main/resources/assets/growthcraft_apiary/blockstates/candle_orange.json new file mode 100644 index 0000000..1acec6c --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/blockstates/candle_orange.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "growthcraft_apiary:block/candle" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/blockstates/candle_orange_wall.json b/src/main/resources/assets/growthcraft_apiary/blockstates/candle_orange_wall.json new file mode 100644 index 0000000..25be453 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/blockstates/candle_orange_wall.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=east": { + "model": "growthcraft_apiary:block/candle_wall" + }, + "facing=north": { + "model": "growthcraft_apiary:block/candle_wall", + "y": 270 + }, + "facing=south": { + "model": "growthcraft_apiary:block/candle_wall", + "y": 90 + }, + "facing=west": { + "model": "growthcraft_apiary:block/candle_wall", + "y": 180 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/blockstates/candle_pink.json b/src/main/resources/assets/growthcraft_apiary/blockstates/candle_pink.json new file mode 100644 index 0000000..1acec6c --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/blockstates/candle_pink.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "growthcraft_apiary:block/candle" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/blockstates/candle_pink_wall.json b/src/main/resources/assets/growthcraft_apiary/blockstates/candle_pink_wall.json new file mode 100644 index 0000000..25be453 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/blockstates/candle_pink_wall.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=east": { + "model": "growthcraft_apiary:block/candle_wall" + }, + "facing=north": { + "model": "growthcraft_apiary:block/candle_wall", + "y": 270 + }, + "facing=south": { + "model": "growthcraft_apiary:block/candle_wall", + "y": 90 + }, + "facing=west": { + "model": "growthcraft_apiary:block/candle_wall", + "y": 180 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/blockstates/candle_purple.json b/src/main/resources/assets/growthcraft_apiary/blockstates/candle_purple.json new file mode 100644 index 0000000..1acec6c --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/blockstates/candle_purple.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "growthcraft_apiary:block/candle" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/blockstates/candle_purple_wall.json b/src/main/resources/assets/growthcraft_apiary/blockstates/candle_purple_wall.json new file mode 100644 index 0000000..25be453 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/blockstates/candle_purple_wall.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=east": { + "model": "growthcraft_apiary:block/candle_wall" + }, + "facing=north": { + "model": "growthcraft_apiary:block/candle_wall", + "y": 270 + }, + "facing=south": { + "model": "growthcraft_apiary:block/candle_wall", + "y": 90 + }, + "facing=west": { + "model": "growthcraft_apiary:block/candle_wall", + "y": 180 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/blockstates/candle_red.json b/src/main/resources/assets/growthcraft_apiary/blockstates/candle_red.json new file mode 100644 index 0000000..1acec6c --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/blockstates/candle_red.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "growthcraft_apiary:block/candle" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/blockstates/candle_red_wall.json b/src/main/resources/assets/growthcraft_apiary/blockstates/candle_red_wall.json new file mode 100644 index 0000000..25be453 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/blockstates/candle_red_wall.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=east": { + "model": "growthcraft_apiary:block/candle_wall" + }, + "facing=north": { + "model": "growthcraft_apiary:block/candle_wall", + "y": 270 + }, + "facing=south": { + "model": "growthcraft_apiary:block/candle_wall", + "y": 90 + }, + "facing=west": { + "model": "growthcraft_apiary:block/candle_wall", + "y": 180 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/blockstates/candle_white.json b/src/main/resources/assets/growthcraft_apiary/blockstates/candle_white.json new file mode 100644 index 0000000..1acec6c --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/blockstates/candle_white.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "growthcraft_apiary:block/candle" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/blockstates/candle_white_wall.json b/src/main/resources/assets/growthcraft_apiary/blockstates/candle_white_wall.json new file mode 100644 index 0000000..25be453 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/blockstates/candle_white_wall.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=east": { + "model": "growthcraft_apiary:block/candle_wall" + }, + "facing=north": { + "model": "growthcraft_apiary:block/candle_wall", + "y": 270 + }, + "facing=south": { + "model": "growthcraft_apiary:block/candle_wall", + "y": 90 + }, + "facing=west": { + "model": "growthcraft_apiary:block/candle_wall", + "y": 180 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/blockstates/candle_yellow.json b/src/main/resources/assets/growthcraft_apiary/blockstates/candle_yellow.json new file mode 100644 index 0000000..1acec6c --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/blockstates/candle_yellow.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "growthcraft_apiary:block/candle" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/blockstates/candle_yellow_wall.json b/src/main/resources/assets/growthcraft_apiary/blockstates/candle_yellow_wall.json new file mode 100644 index 0000000..25be453 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/blockstates/candle_yellow_wall.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=east": { + "model": "growthcraft_apiary:block/candle_wall" + }, + "facing=north": { + "model": "growthcraft_apiary:block/candle_wall", + "y": 270 + }, + "facing=south": { + "model": "growthcraft_apiary:block/candle_wall", + "y": 90 + }, + "facing=west": { + "model": "growthcraft_apiary:block/candle_wall", + "y": 180 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/blockstates/honey_fluid.json b/src/main/resources/assets/growthcraft_apiary/blockstates/honey_fluid.json new file mode 100644 index 0000000..31dc5fa --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/blockstates/honey_fluid.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "growthcraft:block/fluid" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/blockstates/honey_mead_fluid.json b/src/main/resources/assets/growthcraft_apiary/blockstates/honey_mead_fluid.json new file mode 100644 index 0000000..31dc5fa --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/blockstates/honey_mead_fluid.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "growthcraft:block/fluid" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/blockstates/honey_mead_must_fluid.json b/src/main/resources/assets/growthcraft_apiary/blockstates/honey_mead_must_fluid.json new file mode 100644 index 0000000..31dc5fa --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/blockstates/honey_mead_must_fluid.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "growthcraft:block/fluid" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/blockstates/wax_black.json b/src/main/resources/assets/growthcraft_apiary/blockstates/wax_black.json new file mode 100644 index 0000000..d221504 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/blockstates/wax_black.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "growthcraft_apiary:block/wax_black" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/blockstates/wax_blue.json b/src/main/resources/assets/growthcraft_apiary/blockstates/wax_blue.json new file mode 100644 index 0000000..f045765 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/blockstates/wax_blue.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "growthcraft_apiary:block/wax_default" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/blockstates/wax_brown.json b/src/main/resources/assets/growthcraft_apiary/blockstates/wax_brown.json new file mode 100644 index 0000000..f045765 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/blockstates/wax_brown.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "growthcraft_apiary:block/wax_default" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/blockstates/wax_cyan.json b/src/main/resources/assets/growthcraft_apiary/blockstates/wax_cyan.json new file mode 100644 index 0000000..f045765 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/blockstates/wax_cyan.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "growthcraft_apiary:block/wax_default" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/blockstates/wax_gray.json b/src/main/resources/assets/growthcraft_apiary/blockstates/wax_gray.json new file mode 100644 index 0000000..f045765 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/blockstates/wax_gray.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "growthcraft_apiary:block/wax_default" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/blockstates/wax_green.json b/src/main/resources/assets/growthcraft_apiary/blockstates/wax_green.json new file mode 100644 index 0000000..f045765 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/blockstates/wax_green.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "growthcraft_apiary:block/wax_default" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/blockstates/wax_light_blue.json b/src/main/resources/assets/growthcraft_apiary/blockstates/wax_light_blue.json new file mode 100644 index 0000000..f045765 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/blockstates/wax_light_blue.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "growthcraft_apiary:block/wax_default" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/blockstates/wax_light_gray.json b/src/main/resources/assets/growthcraft_apiary/blockstates/wax_light_gray.json new file mode 100644 index 0000000..f045765 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/blockstates/wax_light_gray.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "growthcraft_apiary:block/wax_default" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/blockstates/wax_lime.json b/src/main/resources/assets/growthcraft_apiary/blockstates/wax_lime.json new file mode 100644 index 0000000..f045765 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/blockstates/wax_lime.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "growthcraft_apiary:block/wax_default" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/blockstates/wax_magenta.json b/src/main/resources/assets/growthcraft_apiary/blockstates/wax_magenta.json new file mode 100644 index 0000000..f045765 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/blockstates/wax_magenta.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "growthcraft_apiary:block/wax_default" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/blockstates/wax_orange.json b/src/main/resources/assets/growthcraft_apiary/blockstates/wax_orange.json new file mode 100644 index 0000000..f045765 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/blockstates/wax_orange.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "growthcraft_apiary:block/wax_default" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/blockstates/wax_pink.json b/src/main/resources/assets/growthcraft_apiary/blockstates/wax_pink.json new file mode 100644 index 0000000..f045765 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/blockstates/wax_pink.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "growthcraft_apiary:block/wax_default" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/blockstates/wax_purple.json b/src/main/resources/assets/growthcraft_apiary/blockstates/wax_purple.json new file mode 100644 index 0000000..f045765 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/blockstates/wax_purple.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "growthcraft_apiary:block/wax_default" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/blockstates/wax_red.json b/src/main/resources/assets/growthcraft_apiary/blockstates/wax_red.json new file mode 100644 index 0000000..f045765 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/blockstates/wax_red.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "growthcraft_apiary:block/wax_default" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/blockstates/wax_white.json b/src/main/resources/assets/growthcraft_apiary/blockstates/wax_white.json new file mode 100644 index 0000000..f045765 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/blockstates/wax_white.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "growthcraft_apiary:block/wax_default" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/blockstates/wax_yellow.json b/src/main/resources/assets/growthcraft_apiary/blockstates/wax_yellow.json new file mode 100644 index 0000000..f045765 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/blockstates/wax_yellow.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "growthcraft_apiary:block/wax_default" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/lang/en_us.json b/src/main/resources/assets/growthcraft_apiary/lang/en_us.json new file mode 100644 index 0000000..eca9d03 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/lang/en_us.json @@ -0,0 +1,85 @@ +{ + "block.growthcraft_apiary.bee_box_acacia": "Bee Box (Acacia)", + "block.growthcraft_apiary.bee_box_birch": "Bee Box (Birch)", + "block.growthcraft_apiary.bee_box_crimson": "Bee Box (Crimson)", + "block.growthcraft_apiary.bee_box_dark_oak": "Bee Box (Dark Oak)", + "block.growthcraft_apiary.bee_box_jungle": "Bee Box (Jungle)", + "block.growthcraft_apiary.bee_box_oak": "Bee Box (Oak)", + "block.growthcraft_apiary.bee_box_spruce": "Bee Box (Spruce)", + "block.growthcraft_apiary.bee_box_warped": "Bee Box (Warped)", + "block.growthcraft_apiary.candle_black": "Candle (Black)", + "block.growthcraft_apiary.candle_blue": "Candle (Blue)", + "block.growthcraft_apiary.candle_brown": "Candle (Brown)", + "block.growthcraft_apiary.candle_cyan": "Candle (Cyan)", + "block.growthcraft_apiary.candle_gray": "Candle (Gray)", + "block.growthcraft_apiary.candle_green": "Candle (Green)", + "block.growthcraft_apiary.candle_light_blue": "Candle (Light Blue)", + "block.growthcraft_apiary.candle_light_gray": "Candle (Light Gray)", + "block.growthcraft_apiary.candle_lime": "Candle (Lime)", + "block.growthcraft_apiary.candle_magenta": "Candle (Magenta)", + "block.growthcraft_apiary.candle_orange": "Candle (Orange)", + "block.growthcraft_apiary.candle_pink": "Candle (Pink)", + "block.growthcraft_apiary.candle_purple": "Candle (Purple)", + "block.growthcraft_apiary.candle_red": "Candle (Red)", + "block.growthcraft_apiary.candle_white": "Candle (White)", + "block.growthcraft_apiary.candle_yellow": "Candle (Yellow)", + "container.growthcraft_apiary.bee_box": "Bee Box", + "fluid.growthcraft_apiary.honey_fluid": "Honey", + "fluid.growthcraft_apiary.honey_mead_fluid": "Honey Mead", + "fluid.growthcraft_apiary.honey_mead_must_fluid": "Honey Mead Must", + "fluid.growthcraft_apiary.wax_black_fluid": "Melted Wax (Black)", + "fluid.growthcraft_apiary.wax_blue_fluid": "Melted Wax (Blue)", + "fluid.growthcraft_apiary.wax_brown_fluid": "Melted Wax (Brown)", + "fluid.growthcraft_apiary.wax_cyan_fluid": "Melted Wax (Cyan)", + "fluid.growthcraft_apiary.wax_gray_fluid": "Melted Wax (Gray)", + "fluid.growthcraft_apiary.wax_green_fluid": "Melted Wax (Green)", + "fluid.growthcraft_apiary.wax_light_blue_fluid": "Melted Wax (Light Blue)", + "fluid.growthcraft_apiary.wax_light_gray_fluid": "Melted Wax (Light Gray)", + "fluid.growthcraft_apiary.wax_lime_fluid": "Melted Wax (Lime)", + "fluid.growthcraft_apiary.wax_magenta_fluid": "Melted Wax (Magenta)", + "fluid.growthcraft_apiary.wax_orange_fluid": "Melted Wax (Orange)", + "fluid.growthcraft_apiary.wax_pink_fluid": "Melted Wax (Pink)", + "fluid.growthcraft_apiary.wax_purple_fluid": "Melted Wax (Purple)", + "fluid.growthcraft_apiary.wax_red_fluid": "Melted Wax (Red)", + "fluid.growthcraft_apiary.wax_white_fluid": "Melted Wax (White)", + "fluid.growthcraft_apiary.wax_yellow_fluid": "Melted Wax (Yellow)", + "item.growthcraft_apiary.bee": "Bee", + "item.growthcraft_apiary.bees_wax": "Beeswax", + "item.growthcraft_apiary.bees_wax_black": "Beeswax (Black)", + "item.growthcraft_apiary.bees_wax_blue": "Beeswax (Blue)", + "item.growthcraft_apiary.bees_wax_brown": "Beeswax (Brown)", + "item.growthcraft_apiary.bees_wax_cyan": "Beeswax (Cyan)", + "item.growthcraft_apiary.bees_wax_gray": "Beeswax (Gray)", + "item.growthcraft_apiary.bees_wax_green": "Beeswax (Green)", + "item.growthcraft_apiary.bees_wax_light_blue": "Beeswax (Light Blue)", + "item.growthcraft_apiary.bees_wax_light_gray": "Beeswax (Light Gray)", + "item.growthcraft_apiary.bees_wax_lime": "Beeswax (Lime)", + "item.growthcraft_apiary.bees_wax_magenta": "Beeswax (Magenta)", + "item.growthcraft_apiary.bees_wax_orange": "Beeswax (Orange)", + "item.growthcraft_apiary.bees_wax_pink": "Beeswax (Pink)", + "item.growthcraft_apiary.bees_wax_purple": "Beeswax (Purple)", + "item.growthcraft_apiary.bees_wax_red": "Beeswax (Red)", + "item.growthcraft_apiary.bees_wax_white": "Beeswax (White)", + "item.growthcraft_apiary.bees_wax_yellow": "Beeswax (Yellow)", + "item.growthcraft_apiary.honey_comb_empty": "Empty Honey Comb", + "item.growthcraft_apiary.honey_comb_full": "Full Honey Comb", + "item.growthcraft_apiary.honey_fluid_bucket": "Honey Bucket", + "item.growthcraft_apiary.honey_mead_fluid_bucket": "Honey Mead Bucket", + "item.growthcraft_apiary.honey_mead_must_fluid_bucket": "Honey Mead Must Bucket", + "item.growthcraft_apiary.wax_black_fluid_bucket": "Melted Wax (Black) Bucket", + "item.growthcraft_apiary.wax_blue_fluid_bucket": "Melted Wax (Blue) Bucket", + "item.growthcraft_apiary.wax_brown_fluid_bucket": "Melted Wax (Brown) Bucket", + "item.growthcraft_apiary.wax_cyan_fluid_bucket": "Melted Wax (Cyan) Bucket", + "item.growthcraft_apiary.wax_gray_fluid_bucket": "Melted Wax (Gray) Bucket", + "item.growthcraft_apiary.wax_green_fluid_bucket": "Melted Wax (Green) Bucket", + "item.growthcraft_apiary.wax_light_blue_fluid_bucket": "Melted Wax (Light Blue) Bucket", + "item.growthcraft_apiary.wax_light_gray_fluid_bucket": "Melted Wax (Light Gray) Bucket", + "item.growthcraft_apiary.wax_lime_fluid_bucket": "Melted Wax (Lime) Bucket", + "item.growthcraft_apiary.wax_magenta_fluid_bucket": "Melted Wax (Magenta) Bucket", + "item.growthcraft_apiary.wax_orange_fluid_bucket": "Melted Wax (Orange) Bucket", + "item.growthcraft_apiary.wax_pink_fluid_bucket": "Melted Wax (Pink) Bucket", + "item.growthcraft_apiary.wax_purple_fluid_bucket": "Melted Wax (Purple) Bucket", + "item.growthcraft_apiary.wax_red_fluid_bucket": "Melted Wax (Red) Bucket", + "item.growthcraft_apiary.wax_white_fluid_bucket": "Melted Wax (White) Bucket", + "item.growthcraft_apiary.wax_yellow_fluid_bucket": "Melted Wax (Yellow) Bucket" +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/lang/ko_kr.lang b/src/main/resources/assets/growthcraft_apiary/lang/ko_kr.lang new file mode 100644 index 0000000..ebcea8b --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/lang/ko_kr.lang @@ -0,0 +1,31 @@ +fluid.fluid_honey=벌꿀 + +item.bee.name=꿀벌 + +item.bees_wax.normal.name=밀랍 +item.bees_wax.red.name=빨간색 밀랍 +item.bees_wax.black.name=검은색 밀랍 + +item.bottlefluid_honey.name=벌꿀 병 + +item.honey_comb_empty.name=빈 벌집 +item.honey_comb_filled.name=가득 찬 벌집 + +item.honey_jar.name=꿀단지 + +container.growthcraft_bees.beeBox=양봉 상자 + +tile.beebox.name=양봉 상자 + +# Fluid Tags +fluids.tag.mead=벌꿀주 +fluids.tag.honey=벌꿀 + +# Fluids +fluid.fluid_booze_mead_young=숙성되지 않은 벌꿀주 +fluid.fluid_booze_mead_fermented=벌꿀주 +fluid.fluid_booze_mead_potent=강한 벌꿀주 +fluid.fluid_booze_mead_extended=대형 벌꿀주 +fluid.fluid_booze_mead_ethereal=마법 벌꿀주 +fluid.fluid_booze_mead_intoxicated=도수 높은 벌꿀주 +fluid.fluid_booze_mead_poisoned=벌꿀주 diff --git a/src/main/resources/assets/growthcraft_apiary/lang/ru_ru.json b/src/main/resources/assets/growthcraft_apiary/lang/ru_ru.json new file mode 100644 index 0000000..5d09532 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/lang/ru_ru.json @@ -0,0 +1,82 @@ +{ + "block.growthcraft_apiary.bee_box_acacia": "Акациевый пчелиный улей", + "block.growthcraft_apiary.bee_box_birch": "Березовый пчелиный улей", + "block.growthcraft_apiary.bee_box_crimson": "Багровый пчелиный улей", + "block.growthcraft_apiary.bee_box_dark_oak": "Пчелиный улей из темного дуба", + "block.growthcraft_apiary.bee_box_jungle": "Пчелиный улей из тропического дерева", + "block.growthcraft_apiary.bee_box_oak": "Дубовый пчелиный улей", + "block.growthcraft_apiary.bee_box_warped": "Искаженный пчелиный улей", + "block.growthcraft_apiary.candle_black": "Черная свеча", + "block.growthcraft_apiary.candle_blue": "Синяя свеча", + "block.growthcraft_apiary.candle_brown": "Коричневая свеча", + "block.growthcraft_apiary.candle_cyan": "Бирюзовая свеча", + "block.growthcraft_apiary.candle_gray": "Серая свеча", + "block.growthcraft_apiary.candle_green": "Зеленая свеча", + "block.growthcraft_apiary.candle_light_blue": "Голубая свеча", + "block.growthcraft_apiary.candle_light_gray": "Светло-серая свеча", + "block.growthcraft_apiary.candle_lime": "Лаймовая свеча", + "block.growthcraft_apiary.candle_magenta": "Сиреневая свеча", + "block.growthcraft_apiary.candle_orange": "Оранжевая свеча", + "block.growthcraft_apiary.candle_pink": "Розовая свеча", + "block.growthcraft_apiary.candle_purple": "Фиолетовая свеча", + "block.growthcraft_apiary.candle_red": "Красная свеча", + "block.growthcraft_apiary.candle_white": "Белая свеча", + "block.growthcraft_apiary.candle_yellow": "Желтая свеча", + "container.growthcraft_apiary.bee_box": "Пчелиный улей", + "fluid_type.growthcraft_apiary.honey_fluid": "Мёд", + "fluid_type.growthcraft_apiary.honey_mead_fluid": "Медовуха", + "fluid_type.growthcraft_apiary.wax_black_fluid": "Черный расплавленный воск", + "fluid_type.growthcraft_apiary.wax_blue_fluid": "Синий расплавленный воск", + "fluid_type.growthcraft_apiary.wax_brown_fluid": "Коричневый расплавленный воск", + "fluid_type.growthcraft_apiary.wax_cyan_fluid": "Бирюзовый расплавленный воск", + "fluid_type.growthcraft_apiary.wax_gray_fluid": "Серый расплавленный воск", + "fluid_type.growthcraft_apiary.wax_green_fluid": "Зеленый расплавленный воск", + "fluid_type.growthcraft_apiary.wax_light_blue_fluid": "Голубой расплавленный воск", + "fluid_type.growthcraft_apiary.wax_light_gray_fluid": "Светло-серый расплавленный воск", + "fluid_type.growthcraft_apiary.wax_lime_fluid": "Лаймовый расплавленный воск", + "fluid_type.growthcraft_apiary.wax_magenta_fluid": "Сиреневый расплавленный воск", + "fluid_type.growthcraft_apiary.wax_orange_fluid": "Оранжевый расплавленный воск", + "fluid_type.growthcraft_apiary.wax_pink_fluid": "Розовый расплавленный воск", + "fluid_type.growthcraft_apiary.wax_purple_fluid": "Фиолетовый расплавленный воск", + "fluid_type.growthcraft_apiary.wax_red_fluid": "Красный расплавленный воск", + "fluid_type.growthcraft_apiary.wax_white_fluid": "Белый расплавленный воск", + "fluid_type.growthcraft_apiary.wax_yellow_fluid": "Желтый расплавленный воск", + "item.growthcraft_apiary.bee": "Пчела", + "item.growthcraft_apiary.bees_wax": "Пчелиный воск", + "item.growthcraft_apiary.bees_wax_black": "Черный пчелиный воск", + "item.growthcraft_apiary.bees_wax_blue": "Голубой пчелиный воск", + "item.growthcraft_apiary.bees_wax_brown": "Коричневый пчелиный воск", + "item.growthcraft_apiary.bees_wax_cyan": "Бирюзовый пчелиный воск", + "item.growthcraft_apiary.bees_wax_gray": "Серый пчелиный воск", + "item.growthcraft_apiary.bees_wax_green": "Зеленый пчелиный воск", + "item.growthcraft_apiary.bees_wax_light_blue": "Голубой пчелиный воск", + "item.growthcraft_apiary.bees_wax_light_gray": "Светло-серый пчелиный воск", + "item.growthcraft_apiary.bees_wax_lime": "Лаймовый пчелиный воск", + "item.growthcraft_apiary.bees_wax_magenta": "Сиреневый пчелиный воск", + "item.growthcraft_apiary.bees_wax_orange": "Оранжевый пчелиный воск", + "item.growthcraft_apiary.bees_wax_pink": "Розовый пчелиный воск", + "item.growthcraft_apiary.bees_wax_purple": "Фиолетовый пчелиный воск", + "item.growthcraft_apiary.bees_wax_red": "Красный пчелиный воск", + "item.growthcraft_apiary.bees_wax_white": "Белый пчелиный воск", + "item.growthcraft_apiary.bees_wax_yellow": "Желтый пчелиный воск", + "item.growthcraft_apiary.honey_comb_empty": "Пустые пчелиные соты", + "item.growthcraft_apiary.honey_comb_full": "Полные пчелиные соты", + "item.growthcraft_apiary.honey_fluid_bucket": "Ведро мёда", + "item.growthcraft_apiary.honey_mead_fluid_bucket": "Ведро медовухи", + "item.growthcraft_apiary.wax_black_fluid_bucket": "Ведро черного расплавленного воска", + "item.growthcraft_apiary.wax_blue_fluid_bucket": "Ведро синего расплавленного воска", + "item.growthcraft_apiary.wax_brown_fluid_bucket": "Ведро коричневого расплавленного воска", + "item.growthcraft_apiary.wax_cyan_fluid_bucket": "Ведро бирюзового расплавленного воска", + "item.growthcraft_apiary.wax_gray_fluid_bucket": "Ведро серого расплавленного воска", + "item.growthcraft_apiary.wax_green_fluid_bucket": "Ведро зеленого расплавленного воска", + "item.growthcraft_apiary.wax_light_blue_fluid_bucket": "Ведро голубого расплавленного воска", + "item.growthcraft_apiary.wax_light_gray_fluid_bucket": "Ведро светло-серого расплавленного воска", + "item.growthcraft_apiary.wax_lime_fluid_bucket": "Ведро лаймового расплавленного воска", + "item.growthcraft_apiary.wax_magenta_fluid_bucket": "Ведро сиреневого расплавленного воска", + "item.growthcraft_apiary.wax_orange_fluid_bucket": "Ведро оранжевого расплавленного воска", + "item.growthcraft_apiary.wax_pink_fluid_bucket": "Ведро розового расплавленного воска", + "item.growthcraft_apiary.wax_purple_fluid_bucket": "Ведро фиолетового расплавленного воска", + "item.growthcraft_apiary.wax_red_fluid_bucket": "Ведро красного расплавленного воска", + "item.growthcraft_apiary.wax_white_fluid_bucket": "Ведро белого расплавленного воска", + "item.growthcraft_apiary.wax_yellow_fluid_bucket": "Ведро желтого расплавленного воска" +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/lang/tr_tr.lang b/src/main/resources/assets/growthcraft_apiary/lang/tr_tr.lang new file mode 100644 index 0000000..f22102d --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/lang/tr_tr.lang @@ -0,0 +1,46 @@ +fluid.fluid_honey=Bal + +item.bee.name=Arı + +item.bees_wax.white.name=Beyaz Balmumu +item.bees_wax.orange.name=Turuncu Balmumu +item.bees_wax.magenta.name=Eflatun Balmumu +item.bees_wax.light_blue.name=Açık Mavi Balmumu +item.bees_wax.normal.name=Sarı Balmumu +item.bees_wax.lime.name=Kireç Yeşili Balmumu +item.bees_wax.pink.name=Pembe Balmumu +item.bees_wax.gray.name=Gri Balmumu +item.bees_wax.silver.name=Açık Gri Balmumu +item.bees_wax.cyan.name=Camgöbeği Balmumu +item.bees_wax.purple.name=Mor Balmumu +item.bees_wax.blue.name=Mavi Balmumu +item.bees_wax.brown.name=Kahverengi Balmumu +item.bees_wax.green.name=Yeşil Balmumu +item.bees_wax.red.name=Kırmızı Balmumu +item.bees_wax.black.name=Siyah Balmumu + +item.bottlefluid_honey.name=Bal Şişesi + +item.honey_comb_empty.name=Boş Bal Peteği +item.honey_comb_filled.name=Dolu Bal Peteği + +item.honey_jar.name=Bal Kavanozu + +container.growthcraft_bees.beeBox=Arı Kutusu + +tile.beebox.name=Arı Kutusu +tile.beehive.name=Arı Kovanı + +# Fluid Tags +fluids.tag.mead=Bal Likörü +fluids.tag.honey=Bal + +# Fluids +fluid.fluid_booze_mead_young=Bal Likör Şırası +fluid.fluid_booze_mead_fermented=Bal Likörü +fluid.fluid_booze_mead_potent=Güçlü Bal Likörü +fluid.fluid_booze_mead_extended=Uzun Bal Likörü +fluid.fluid_booze_mead_ethereal=Sihirli Bal Likörü +fluid.fluid_booze_mead_intoxicated=Alkollü Bal Likörü +fluid.fluid_booze_mead_poisoned=Bal Likörü +fluid.fluid_booze_mead_hyperextended=Hiper-Uzun Bal Likörü diff --git a/src/main/resources/assets/growthcraft_apiary/lang/zh_cn.lang b/src/main/resources/assets/growthcraft_apiary/lang/zh_cn.lang new file mode 100644 index 0000000..c24d86b --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/lang/zh_cn.lang @@ -0,0 +1,18 @@ +fluid.fluid_honey=蜂蜜 + +item.bee.name=蜜蜂 + +item.bees_wax.normal.name=蜂蜡 +item.bees_wax.red.name=红色蜂蜡 +item.bees_wax.black.name=黑色蜂蜡 + +item.bottlefluid_honey.name=蜜罐 + +item.honey_comb_empty.name=蜂窝 +item.honey_comb_filled.name=蜂窝 + +item.honey_jar.name=蜂蜜 + +container.growthcraft_bees.beeBox=蜂箱 + +tile.beebox.name=蜂箱 diff --git a/src/main/resources/assets/growthcraft_apiary/models/block/bee_box_acacia.json b/src/main/resources/assets/growthcraft_apiary/models/block/bee_box_acacia.json new file mode 100644 index 0000000..708421f --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/models/block/bee_box_acacia.json @@ -0,0 +1,289 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "0": "block/acacia_log", + "1": "block/acacia_log_top", + "2": "block/acacia_planks", + "3": "block/acacia_trapdoor", + "missing": "growthcraft:block/missing", + "particle": "block/acacia_log" + }, + "elements": [ + { + "name": "foot_NE", + "from": [12, 0, 2], + "to": [14, 3, 4], + "faces": { + "north": {"uv": [0, 7, 7, 16], "texture": "#0"}, + "east": {"uv": [9, 7, 16, 16], "texture": "#0"}, + "south": {"uv": [0, 7, 7, 16], "texture": "#0"}, + "west": {"uv": [9, 7, 16, 16], "texture": "#0"}, + "up": {"uv": [0, 0, 7, 7], "texture": "#0"}, + "down": {"uv": [9, 0, 16, 7], "texture": "#0"} + } + }, + { + "name": "foot_NW", + "from": [2, 0, 2], + "to": [4, 3, 4], + "faces": { + "north": {"uv": [0, 7, 7, 16], "texture": "#0"}, + "east": {"uv": [9, 7, 16, 16], "texture": "#0"}, + "south": {"uv": [0, 7, 7, 16], "texture": "#0"}, + "west": {"uv": [9, 7, 16, 16], "texture": "#0"}, + "up": {"uv": [0, 0, 7, 7], "texture": "#0"}, + "down": {"uv": [9, 0, 16, 7], "texture": "#0"} + } + }, + { + "name": "foot_SE", + "from": [12, 0, 12], + "to": [14, 3, 14], + "faces": { + "north": {"uv": [0, 7, 7, 16], "texture": "#0"}, + "east": {"uv": [9, 7, 16, 16], "texture": "#0"}, + "south": {"uv": [0, 7, 7, 16], "texture": "#0"}, + "west": {"uv": [9, 7, 16, 16], "texture": "#0"}, + "up": {"uv": [0, 0, 7, 7], "texture": "#0"}, + "down": {"uv": [9, 0, 16, 7], "texture": "#0"} + } + }, + { + "name": "foot_SW", + "from": [2, 0, 12], + "to": [4, 3, 14], + "faces": { + "north": {"uv": [0, 7, 7, 16], "texture": "#0"}, + "east": {"uv": [9, 7, 16, 16], "texture": "#0"}, + "south": {"uv": [0, 7, 7, 16], "texture": "#0"}, + "west": {"uv": [9, 7, 16, 16], "texture": "#0"}, + "up": {"uv": [0, 0, 7, 7], "texture": "#0"}, + "down": {"uv": [9, 0, 16, 7], "texture": "#0"} + } + }, + { + "name": "bottom", + "from": [1, 3, 1], + "to": [15, 4, 15], + "faces": { + "north": {"uv": [1, 0, 15, 1], "texture": "#1"}, + "east": {"uv": [1, 15, 15, 16], "texture": "#1"}, + "south": {"uv": [1, 15, 15, 16], "texture": "#1"}, + "west": {"uv": [1, 0, 15, 1], "texture": "#1"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#1"}, + "down": {"uv": [0, 0, 16, 16], "texture": "#1"} + } + }, + { + "name": "bottom", + "from": [0, 11, 0], + "to": [16, 12, 16], + "faces": { + "north": {"uv": [0, 0, 16, 1], "texture": "#1"}, + "east": {"uv": [0, 15, 16, 16], "texture": "#1"}, + "south": {"uv": [0, 15, 16, 16], "texture": "#1"}, + "west": {"uv": [0, 15, 16, 16], "texture": "#1"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#1"}, + "down": {"uv": [0, 0, 16, 16], "texture": "#1"} + } + }, + { + "name": "bottom", + "from": [0, 12, 0], + "to": [16, 13, 16], + "faces": { + "north": {"uv": [0, 14, 16, 15], "texture": "#1"}, + "east": {"uv": [0, 1, 16, 2], "texture": "#1"}, + "south": {"uv": [0, 14, 16, 15], "texture": "#1"}, + "west": {"uv": [0, 1, 16, 2], "texture": "#1"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#1"}, + "down": {"uv": [0, 0, 16, 16], "texture": "#1"} + } + }, + { + "name": "bottom", + "from": [0, 13, 0], + "to": [16, 14, 16], + "faces": { + "north": {"uv": [0, 15, 16, 16], "texture": "#1"}, + "east": {"uv": [0, 0, 16, 1], "texture": "#1"}, + "south": {"uv": [0, 0, 16, 1], "texture": "#1"}, + "west": {"uv": [0, 0, 16, 1], "texture": "#1"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#1"}, + "down": {"uv": [0, 0, 16, 16], "texture": "#1"} + } + }, + { + "name": "post_NW", + "from": [1, 4, 1], + "to": [2, 12, 2], + "faces": { + "north": {"uv": [0, 4, 1, 12], "texture": "#1"}, + "east": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "south": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "west": {"uv": [15, 4, 16, 12], "texture": "#1"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#missing"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#missing"} + } + }, + { + "name": "post_NE", + "from": [14, 4, 1], + "to": [15, 12, 2], + "faces": { + "north": {"uv": [0, 0, 1, 8], "texture": "#1"}, + "east": {"uv": [15, 0, 16, 8], "texture": "#1"}, + "south": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "west": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#missing"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#missing"} + } + }, + { + "name": "post_SE", + "from": [14, 4, 14], + "to": [15, 12, 15], + "faces": { + "north": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "east": {"uv": [0, 4, 1, 12], "texture": "#1"}, + "south": {"uv": [15, 7, 16, 15], "texture": "#1"}, + "west": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#missing"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#missing"} + } + }, + { + "name": "post_SW", + "from": [1, 4, 14], + "to": [2, 12, 15], + "faces": { + "north": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "east": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "south": {"uv": [15, 0, 16, 8], "texture": "#1"}, + "west": {"uv": [0, 7, 1, 15], "texture": "#1"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#missing"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#missing"} + } + }, + { + "from": [2, 4, 1], + "to": [14, 12, 2], + "faces": { + "north": {"uv": [2, 0, 14, 8], "texture": "#2"}, + "east": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "south": {"uv": [0, 0, 12, 8], "texture": "#missing"}, + "west": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "up": {"uv": [0, 0, 12, 1], "texture": "#missing"}, + "down": {"uv": [0, 0, 12, 1], "texture": "#missing"} + } + }, + { + "from": [2, 4, 14], + "to": [14, 12, 15], + "faces": { + "north": {"uv": [0, 0, 12, 8], "texture": "#missing"}, + "east": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "south": {"uv": [2, 0, 14, 8], "texture": "#2"}, + "west": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "up": {"uv": [0, 0, 12, 1], "texture": "#missing"}, + "down": {"uv": [0, 0, 12, 1], "texture": "#missing"} + } + }, + { + "from": [1, 4, 2], + "to": [2, 12, 14], + "faces": { + "north": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "east": {"uv": [0, 0, 12, 8], "texture": "#missing"}, + "south": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "west": {"uv": [2, 0, 14, 8], "texture": "#2"}, + "up": {"uv": [0, 0, 1, 12], "texture": "#missing"}, + "down": {"uv": [0, 0, 1, 12], "texture": "#missing"} + } + }, + { + "from": [14, 4, 2], + "to": [15, 12, 14], + "faces": { + "north": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "east": {"uv": [2, 0, 14, 8], "texture": "#2"}, + "south": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "west": {"uv": [0, 0, 12, 8], "texture": "#missing"}, + "up": {"uv": [0, 0, 1, 12], "texture": "#missing"}, + "down": {"uv": [0, 0, 1, 12], "texture": "#missing"} + } + }, + { + "name": "beebox_top", + "from": [2, 14, 2], + "to": [14, 16, 14], + "faces": { + "north": {"uv": [0, 0, 16, 2], "texture": "#1"}, + "east": {"uv": [0, 0, 16, 2], "texture": "#1"}, + "south": {"uv": [0, 0, 16, 2], "texture": "#1"}, + "west": {"uv": [0, 0, 16, 2], "texture": "#1"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#1"} + } + }, + { + "from": [5, 4, 0.5], + "to": [11, 6, 1.5], + "faces": { + "north": {"uv": [5, 14, 11, 16], "texture": "#3"}, + "east": {"uv": [5, 14, 6, 16], "texture": "#3"}, + "south": {"uv": [0, 0, 6, 2], "texture": "#missing"}, + "west": {"uv": [5, 14, 6, 16], "texture": "#3"}, + "up": {"uv": [5, 15, 11, 16], "texture": "#3"}, + "down": {"uv": [5, 14, 11, 15], "texture": "#3"} + } + }, + { + "from": [6, 6, 0.5], + "to": [10, 7, 1.5], + "faces": { + "north": {"uv": [5, 0, 9, 1], "texture": "#1"}, + "east": {"uv": [0, 4, 1, 5], "texture": "#1"}, + "south": {"uv": [0, 0, 4, 1], "texture": "#missing"}, + "west": {"uv": [15, 10, 16, 11], "texture": "#1"}, + "up": {"uv": [2, 15, 6, 16], "texture": "#1"}, + "down": {"uv": [0, 0, 4, 1], "texture": "#missing"} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [75, -135, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "thirdperson_lefthand": { + "rotation": [75, -135, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson_righthand": { + "rotation": [0, -135, 0], + "scale": [0.4, 0.4, 0.4] + }, + "firstperson_lefthand": { + "rotation": [0, -135, 0], + "scale": [0.4, 0.4, 0.4] + }, + "ground": { + "rotation": [0, 180, 0], + "translation": [0, 3, 0], + "scale": [0.25, 0.25, 0.25] + }, + "gui": { + "rotation": [30, -45, 0], + "scale": [0.625, 0.625, 0.625] + }, + "head": { + "rotation": [0, 180, 0] + }, + "fixed": { + "rotation": [0, 180, 0], + "scale": [0.5, 0.5, 0.5] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/models/block/bee_box_birch.json b/src/main/resources/assets/growthcraft_apiary/models/block/bee_box_birch.json new file mode 100644 index 0000000..fcb1b48 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/models/block/bee_box_birch.json @@ -0,0 +1,289 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "0": "block/birch_log", + "1": "block/birch_log_top", + "2": "block/birch_planks", + "3": "block/birch_trapdoor", + "missing": "growthcraft:block/missing", + "particle": "block/birch_log" + }, + "elements": [ + { + "name": "foot_NE", + "from": [12, 0, 2], + "to": [14, 3, 4], + "faces": { + "north": {"uv": [0, 7, 7, 16], "texture": "#0"}, + "east": {"uv": [9, 7, 16, 16], "texture": "#0"}, + "south": {"uv": [0, 7, 7, 16], "texture": "#0"}, + "west": {"uv": [9, 7, 16, 16], "texture": "#0"}, + "up": {"uv": [0, 0, 7, 7], "texture": "#0"}, + "down": {"uv": [9, 0, 16, 7], "texture": "#0"} + } + }, + { + "name": "foot_NW", + "from": [2, 0, 2], + "to": [4, 3, 4], + "faces": { + "north": {"uv": [0, 7, 7, 16], "texture": "#0"}, + "east": {"uv": [9, 7, 16, 16], "texture": "#0"}, + "south": {"uv": [0, 7, 7, 16], "texture": "#0"}, + "west": {"uv": [9, 7, 16, 16], "texture": "#0"}, + "up": {"uv": [0, 0, 7, 7], "texture": "#0"}, + "down": {"uv": [9, 0, 16, 7], "texture": "#0"} + } + }, + { + "name": "foot_SE", + "from": [12, 0, 12], + "to": [14, 3, 14], + "faces": { + "north": {"uv": [0, 7, 7, 16], "texture": "#0"}, + "east": {"uv": [9, 7, 16, 16], "texture": "#0"}, + "south": {"uv": [0, 7, 7, 16], "texture": "#0"}, + "west": {"uv": [9, 7, 16, 16], "texture": "#0"}, + "up": {"uv": [0, 0, 7, 7], "texture": "#0"}, + "down": {"uv": [9, 0, 16, 7], "texture": "#0"} + } + }, + { + "name": "foot_SW", + "from": [2, 0, 12], + "to": [4, 3, 14], + "faces": { + "north": {"uv": [0, 7, 7, 16], "texture": "#0"}, + "east": {"uv": [9, 7, 16, 16], "texture": "#0"}, + "south": {"uv": [0, 7, 7, 16], "texture": "#0"}, + "west": {"uv": [9, 7, 16, 16], "texture": "#0"}, + "up": {"uv": [0, 0, 7, 7], "texture": "#0"}, + "down": {"uv": [9, 0, 16, 7], "texture": "#0"} + } + }, + { + "name": "bottom", + "from": [1, 3, 1], + "to": [15, 4, 15], + "faces": { + "north": {"uv": [1, 0, 15, 1], "texture": "#1"}, + "east": {"uv": [1, 15, 15, 16], "texture": "#1"}, + "south": {"uv": [1, 15, 15, 16], "texture": "#1"}, + "west": {"uv": [1, 0, 15, 1], "texture": "#1"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#1"}, + "down": {"uv": [0, 0, 16, 16], "texture": "#1"} + } + }, + { + "name": "bottom", + "from": [0, 11, 0], + "to": [16, 12, 16], + "faces": { + "north": {"uv": [0, 0, 16, 1], "texture": "#1"}, + "east": {"uv": [0, 15, 16, 16], "texture": "#1"}, + "south": {"uv": [0, 15, 16, 16], "texture": "#1"}, + "west": {"uv": [0, 15, 16, 16], "texture": "#1"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#1"}, + "down": {"uv": [0, 0, 16, 16], "texture": "#1"} + } + }, + { + "name": "bottom", + "from": [0, 12, 0], + "to": [16, 13, 16], + "faces": { + "north": {"uv": [0, 14, 16, 15], "texture": "#1"}, + "east": {"uv": [0, 1, 16, 2], "texture": "#1"}, + "south": {"uv": [0, 14, 16, 15], "texture": "#1"}, + "west": {"uv": [0, 1, 16, 2], "texture": "#1"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#1"}, + "down": {"uv": [0, 0, 16, 16], "texture": "#1"} + } + }, + { + "name": "bottom", + "from": [0, 13, 0], + "to": [16, 14, 16], + "faces": { + "north": {"uv": [0, 15, 16, 16], "texture": "#1"}, + "east": {"uv": [0, 0, 16, 1], "texture": "#1"}, + "south": {"uv": [0, 0, 16, 1], "texture": "#1"}, + "west": {"uv": [0, 0, 16, 1], "texture": "#1"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#1"}, + "down": {"uv": [0, 0, 16, 16], "texture": "#1"} + } + }, + { + "name": "post_NW", + "from": [1, 4, 1], + "to": [2, 12, 2], + "faces": { + "north": {"uv": [0, 4, 1, 12], "texture": "#1"}, + "east": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "south": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "west": {"uv": [15, 4, 16, 12], "texture": "#1"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#missing"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#missing"} + } + }, + { + "name": "post_NE", + "from": [14, 4, 1], + "to": [15, 12, 2], + "faces": { + "north": {"uv": [0, 0, 1, 8], "texture": "#1"}, + "east": {"uv": [15, 0, 16, 8], "texture": "#1"}, + "south": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "west": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#missing"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#missing"} + } + }, + { + "name": "post_SE", + "from": [14, 4, 14], + "to": [15, 12, 15], + "faces": { + "north": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "east": {"uv": [0, 4, 1, 12], "texture": "#1"}, + "south": {"uv": [15, 7, 16, 15], "texture": "#1"}, + "west": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#missing"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#missing"} + } + }, + { + "name": "post_SW", + "from": [1, 4, 14], + "to": [2, 12, 15], + "faces": { + "north": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "east": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "south": {"uv": [15, 0, 16, 8], "texture": "#1"}, + "west": {"uv": [0, 7, 1, 15], "texture": "#1"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#missing"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#missing"} + } + }, + { + "from": [2, 4, 1], + "to": [14, 12, 2], + "faces": { + "north": {"uv": [2, 0, 14, 8], "texture": "#2"}, + "east": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "south": {"uv": [0, 0, 12, 8], "texture": "#missing"}, + "west": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "up": {"uv": [0, 0, 12, 1], "texture": "#missing"}, + "down": {"uv": [0, 0, 12, 1], "texture": "#missing"} + } + }, + { + "from": [2, 4, 14], + "to": [14, 12, 15], + "faces": { + "north": {"uv": [0, 0, 12, 8], "texture": "#missing"}, + "east": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "south": {"uv": [2, 0, 14, 8], "texture": "#2"}, + "west": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "up": {"uv": [0, 0, 12, 1], "texture": "#missing"}, + "down": {"uv": [0, 0, 12, 1], "texture": "#missing"} + } + }, + { + "from": [1, 4, 2], + "to": [2, 12, 14], + "faces": { + "north": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "east": {"uv": [0, 0, 12, 8], "texture": "#missing"}, + "south": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "west": {"uv": [2, 0, 14, 8], "texture": "#2"}, + "up": {"uv": [0, 0, 1, 12], "texture": "#missing"}, + "down": {"uv": [0, 0, 1, 12], "texture": "#missing"} + } + }, + { + "from": [14, 4, 2], + "to": [15, 12, 14], + "faces": { + "north": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "east": {"uv": [2, 0, 14, 8], "texture": "#2"}, + "south": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "west": {"uv": [0, 0, 12, 8], "texture": "#missing"}, + "up": {"uv": [0, 0, 1, 12], "texture": "#missing"}, + "down": {"uv": [0, 0, 1, 12], "texture": "#missing"} + } + }, + { + "name": "beebox_top", + "from": [2, 14, 2], + "to": [14, 16, 14], + "faces": { + "north": {"uv": [0, 0, 16, 2], "texture": "#1"}, + "east": {"uv": [0, 0, 16, 2], "texture": "#1"}, + "south": {"uv": [0, 0, 16, 2], "texture": "#1"}, + "west": {"uv": [0, 0, 16, 2], "texture": "#1"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#1"} + } + }, + { + "from": [5, 4, 0.5], + "to": [11, 6, 1.5], + "faces": { + "north": {"uv": [5, 14, 11, 16], "texture": "#3"}, + "east": {"uv": [5, 14, 6, 16], "texture": "#3"}, + "south": {"uv": [0, 0, 6, 2], "texture": "#missing"}, + "west": {"uv": [5, 14, 6, 16], "texture": "#3"}, + "up": {"uv": [5, 15, 11, 16], "texture": "#3"}, + "down": {"uv": [5, 14, 11, 15], "texture": "#3"} + } + }, + { + "from": [6, 6, 0.5], + "to": [10, 7, 1.5], + "faces": { + "north": {"uv": [5, 0, 9, 1], "texture": "#1"}, + "east": {"uv": [0, 4, 1, 5], "texture": "#1"}, + "south": {"uv": [0, 0, 4, 1], "texture": "#missing"}, + "west": {"uv": [15, 10, 16, 11], "texture": "#1"}, + "up": {"uv": [2, 15, 6, 16], "texture": "#1"}, + "down": {"uv": [0, 0, 4, 1], "texture": "#missing"} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [75, -135, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "thirdperson_lefthand": { + "rotation": [75, -135, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson_righthand": { + "rotation": [0, -135, 0], + "scale": [0.4, 0.4, 0.4] + }, + "firstperson_lefthand": { + "rotation": [0, -135, 0], + "scale": [0.4, 0.4, 0.4] + }, + "ground": { + "rotation": [0, 180, 0], + "translation": [0, 3, 0], + "scale": [0.25, 0.25, 0.25] + }, + "gui": { + "rotation": [30, -45, 0], + "scale": [0.625, 0.625, 0.625] + }, + "head": { + "rotation": [0, 180, 0] + }, + "fixed": { + "rotation": [0, 180, 0], + "scale": [0.5, 0.5, 0.5] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/models/block/bee_box_crimson.json b/src/main/resources/assets/growthcraft_apiary/models/block/bee_box_crimson.json new file mode 100644 index 0000000..52682d4 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/models/block/bee_box_crimson.json @@ -0,0 +1,289 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "0": "block/crimson_stem", + "1": "block/crimson_stem_top", + "2": "block/crimson_planks", + "3": "block/crimson_trapdoor", + "missing": "growthcraft:block/missing", + "particle": "block/crimson_stem" + }, + "elements": [ + { + "name": "foot_NE", + "from": [12, 0, 2], + "to": [14, 3, 4], + "faces": { + "north": {"uv": [0, 7, 7, 16], "texture": "#0"}, + "east": {"uv": [9, 7, 16, 16], "texture": "#0"}, + "south": {"uv": [0, 7, 7, 16], "texture": "#0"}, + "west": {"uv": [9, 7, 16, 16], "texture": "#0"}, + "up": {"uv": [0, 0, 7, 7], "texture": "#0"}, + "down": {"uv": [9, 0, 16, 7], "texture": "#0"} + } + }, + { + "name": "foot_NW", + "from": [2, 0, 2], + "to": [4, 3, 4], + "faces": { + "north": {"uv": [0, 7, 7, 16], "texture": "#0"}, + "east": {"uv": [9, 7, 16, 16], "texture": "#0"}, + "south": {"uv": [0, 7, 7, 16], "texture": "#0"}, + "west": {"uv": [9, 7, 16, 16], "texture": "#0"}, + "up": {"uv": [0, 0, 7, 7], "texture": "#0"}, + "down": {"uv": [9, 0, 16, 7], "texture": "#0"} + } + }, + { + "name": "foot_SE", + "from": [12, 0, 12], + "to": [14, 3, 14], + "faces": { + "north": {"uv": [0, 7, 7, 16], "texture": "#0"}, + "east": {"uv": [9, 7, 16, 16], "texture": "#0"}, + "south": {"uv": [0, 7, 7, 16], "texture": "#0"}, + "west": {"uv": [9, 7, 16, 16], "texture": "#0"}, + "up": {"uv": [0, 0, 7, 7], "texture": "#0"}, + "down": {"uv": [9, 0, 16, 7], "texture": "#0"} + } + }, + { + "name": "foot_SW", + "from": [2, 0, 12], + "to": [4, 3, 14], + "faces": { + "north": {"uv": [0, 7, 7, 16], "texture": "#0"}, + "east": {"uv": [9, 7, 16, 16], "texture": "#0"}, + "south": {"uv": [0, 7, 7, 16], "texture": "#0"}, + "west": {"uv": [9, 7, 16, 16], "texture": "#0"}, + "up": {"uv": [0, 0, 7, 7], "texture": "#0"}, + "down": {"uv": [9, 0, 16, 7], "texture": "#0"} + } + }, + { + "name": "bottom", + "from": [1, 3, 1], + "to": [15, 4, 15], + "faces": { + "north": {"uv": [1, 0, 15, 1], "texture": "#1"}, + "east": {"uv": [1, 15, 15, 16], "texture": "#1"}, + "south": {"uv": [1, 15, 15, 16], "texture": "#1"}, + "west": {"uv": [1, 0, 15, 1], "texture": "#1"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#1"}, + "down": {"uv": [0, 0, 16, 16], "texture": "#1"} + } + }, + { + "name": "bottom", + "from": [0, 11, 0], + "to": [16, 12, 16], + "faces": { + "north": {"uv": [0, 0, 16, 1], "texture": "#1"}, + "east": {"uv": [0, 15, 16, 16], "texture": "#1"}, + "south": {"uv": [0, 15, 16, 16], "texture": "#1"}, + "west": {"uv": [0, 15, 16, 16], "texture": "#1"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#1"}, + "down": {"uv": [0, 0, 16, 16], "texture": "#1"} + } + }, + { + "name": "bottom", + "from": [0, 12, 0], + "to": [16, 13, 16], + "faces": { + "north": {"uv": [0, 14, 16, 15], "texture": "#1"}, + "east": {"uv": [0, 1, 16, 2], "texture": "#1"}, + "south": {"uv": [0, 14, 16, 15], "texture": "#1"}, + "west": {"uv": [0, 1, 16, 2], "texture": "#1"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#1"}, + "down": {"uv": [0, 0, 16, 16], "texture": "#1"} + } + }, + { + "name": "bottom", + "from": [0, 13, 0], + "to": [16, 14, 16], + "faces": { + "north": {"uv": [0, 15, 16, 16], "texture": "#1"}, + "east": {"uv": [0, 0, 16, 1], "texture": "#1"}, + "south": {"uv": [0, 0, 16, 1], "texture": "#1"}, + "west": {"uv": [0, 0, 16, 1], "texture": "#1"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#1"}, + "down": {"uv": [0, 0, 16, 16], "texture": "#1"} + } + }, + { + "name": "post_NW", + "from": [1, 4, 1], + "to": [2, 12, 2], + "faces": { + "north": {"uv": [0, 4, 1, 12], "texture": "#1"}, + "east": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "south": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "west": {"uv": [15, 4, 16, 12], "texture": "#1"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#missing"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#missing"} + } + }, + { + "name": "post_NE", + "from": [14, 4, 1], + "to": [15, 12, 2], + "faces": { + "north": {"uv": [0, 0, 1, 8], "texture": "#1"}, + "east": {"uv": [15, 0, 16, 8], "texture": "#1"}, + "south": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "west": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#missing"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#missing"} + } + }, + { + "name": "post_SE", + "from": [14, 4, 14], + "to": [15, 12, 15], + "faces": { + "north": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "east": {"uv": [0, 4, 1, 12], "texture": "#1"}, + "south": {"uv": [15, 7, 16, 15], "texture": "#1"}, + "west": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#missing"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#missing"} + } + }, + { + "name": "post_SW", + "from": [1, 4, 14], + "to": [2, 12, 15], + "faces": { + "north": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "east": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "south": {"uv": [15, 0, 16, 8], "texture": "#1"}, + "west": {"uv": [0, 7, 1, 15], "texture": "#1"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#missing"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#missing"} + } + }, + { + "from": [2, 4, 1], + "to": [14, 12, 2], + "faces": { + "north": {"uv": [2, 0, 14, 8], "texture": "#2"}, + "east": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "south": {"uv": [0, 0, 12, 8], "texture": "#missing"}, + "west": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "up": {"uv": [0, 0, 12, 1], "texture": "#missing"}, + "down": {"uv": [0, 0, 12, 1], "texture": "#missing"} + } + }, + { + "from": [2, 4, 14], + "to": [14, 12, 15], + "faces": { + "north": {"uv": [0, 0, 12, 8], "texture": "#missing"}, + "east": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "south": {"uv": [2, 0, 14, 8], "texture": "#2"}, + "west": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "up": {"uv": [0, 0, 12, 1], "texture": "#missing"}, + "down": {"uv": [0, 0, 12, 1], "texture": "#missing"} + } + }, + { + "from": [1, 4, 2], + "to": [2, 12, 14], + "faces": { + "north": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "east": {"uv": [0, 0, 12, 8], "texture": "#missing"}, + "south": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "west": {"uv": [2, 0, 14, 8], "texture": "#2"}, + "up": {"uv": [0, 0, 1, 12], "texture": "#missing"}, + "down": {"uv": [0, 0, 1, 12], "texture": "#missing"} + } + }, + { + "from": [14, 4, 2], + "to": [15, 12, 14], + "faces": { + "north": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "east": {"uv": [2, 0, 14, 8], "texture": "#2"}, + "south": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "west": {"uv": [0, 0, 12, 8], "texture": "#missing"}, + "up": {"uv": [0, 0, 1, 12], "texture": "#missing"}, + "down": {"uv": [0, 0, 1, 12], "texture": "#missing"} + } + }, + { + "name": "beebox_top", + "from": [2, 14, 2], + "to": [14, 16, 14], + "faces": { + "north": {"uv": [0, 0, 16, 2], "texture": "#1"}, + "east": {"uv": [0, 0, 16, 2], "texture": "#1"}, + "south": {"uv": [0, 0, 16, 2], "texture": "#1"}, + "west": {"uv": [0, 0, 16, 2], "texture": "#1"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#1"} + } + }, + { + "from": [5, 4, 0.5], + "to": [11, 6, 1.5], + "faces": { + "north": {"uv": [5, 14, 11, 16], "texture": "#3"}, + "east": {"uv": [5, 14, 6, 16], "texture": "#3"}, + "south": {"uv": [0, 0, 6, 2], "texture": "#missing"}, + "west": {"uv": [5, 14, 6, 16], "texture": "#3"}, + "up": {"uv": [5, 15, 11, 16], "texture": "#3"}, + "down": {"uv": [5, 14, 11, 15], "texture": "#3"} + } + }, + { + "from": [6, 6, 0.5], + "to": [10, 7, 1.5], + "faces": { + "north": {"uv": [5, 0, 9, 1], "texture": "#1"}, + "east": {"uv": [0, 4, 1, 5], "texture": "#1"}, + "south": {"uv": [0, 0, 4, 1], "texture": "#missing"}, + "west": {"uv": [15, 10, 16, 11], "texture": "#1"}, + "up": {"uv": [2, 15, 6, 16], "texture": "#1"}, + "down": {"uv": [0, 0, 4, 1], "texture": "#missing"} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [75, -135, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "thirdperson_lefthand": { + "rotation": [75, -135, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson_righthand": { + "rotation": [0, -135, 0], + "scale": [0.4, 0.4, 0.4] + }, + "firstperson_lefthand": { + "rotation": [0, -135, 0], + "scale": [0.4, 0.4, 0.4] + }, + "ground": { + "rotation": [0, 180, 0], + "translation": [0, 3, 0], + "scale": [0.25, 0.25, 0.25] + }, + "gui": { + "rotation": [30, -45, 0], + "scale": [0.625, 0.625, 0.625] + }, + "head": { + "rotation": [0, 180, 0] + }, + "fixed": { + "rotation": [0, 180, 0], + "scale": [0.5, 0.5, 0.5] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/models/block/bee_box_dark_oak.json b/src/main/resources/assets/growthcraft_apiary/models/block/bee_box_dark_oak.json new file mode 100644 index 0000000..7762cb2 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/models/block/bee_box_dark_oak.json @@ -0,0 +1,289 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "0": "block/dark_oak_log", + "1": "block/dark_oak_log_top", + "2": "block/dark_oak_planks", + "3": "block/dark_oak_trapdoor", + "missing": "growthcraft:block/missing", + "particle": "block/dark_oak_log" + }, + "elements": [ + { + "name": "foot_NE", + "from": [12, 0, 2], + "to": [14, 3, 4], + "faces": { + "north": {"uv": [0, 7, 7, 16], "texture": "#0"}, + "east": {"uv": [9, 7, 16, 16], "texture": "#0"}, + "south": {"uv": [0, 7, 7, 16], "texture": "#0"}, + "west": {"uv": [9, 7, 16, 16], "texture": "#0"}, + "up": {"uv": [0, 0, 7, 7], "texture": "#0"}, + "down": {"uv": [9, 0, 16, 7], "texture": "#0"} + } + }, + { + "name": "foot_NW", + "from": [2, 0, 2], + "to": [4, 3, 4], + "faces": { + "north": {"uv": [0, 7, 7, 16], "texture": "#0"}, + "east": {"uv": [9, 7, 16, 16], "texture": "#0"}, + "south": {"uv": [0, 7, 7, 16], "texture": "#0"}, + "west": {"uv": [9, 7, 16, 16], "texture": "#0"}, + "up": {"uv": [0, 0, 7, 7], "texture": "#0"}, + "down": {"uv": [9, 0, 16, 7], "texture": "#0"} + } + }, + { + "name": "foot_SE", + "from": [12, 0, 12], + "to": [14, 3, 14], + "faces": { + "north": {"uv": [0, 7, 7, 16], "texture": "#0"}, + "east": {"uv": [9, 7, 16, 16], "texture": "#0"}, + "south": {"uv": [0, 7, 7, 16], "texture": "#0"}, + "west": {"uv": [9, 7, 16, 16], "texture": "#0"}, + "up": {"uv": [0, 0, 7, 7], "texture": "#0"}, + "down": {"uv": [9, 0, 16, 7], "texture": "#0"} + } + }, + { + "name": "foot_SW", + "from": [2, 0, 12], + "to": [4, 3, 14], + "faces": { + "north": {"uv": [0, 7, 7, 16], "texture": "#0"}, + "east": {"uv": [9, 7, 16, 16], "texture": "#0"}, + "south": {"uv": [0, 7, 7, 16], "texture": "#0"}, + "west": {"uv": [9, 7, 16, 16], "texture": "#0"}, + "up": {"uv": [0, 0, 7, 7], "texture": "#0"}, + "down": {"uv": [9, 0, 16, 7], "texture": "#0"} + } + }, + { + "name": "bottom", + "from": [1, 3, 1], + "to": [15, 4, 15], + "faces": { + "north": {"uv": [1, 0, 15, 1], "texture": "#1"}, + "east": {"uv": [1, 15, 15, 16], "texture": "#1"}, + "south": {"uv": [1, 15, 15, 16], "texture": "#1"}, + "west": {"uv": [1, 0, 15, 1], "texture": "#1"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#1"}, + "down": {"uv": [0, 0, 16, 16], "texture": "#1"} + } + }, + { + "name": "bottom", + "from": [0, 11, 0], + "to": [16, 12, 16], + "faces": { + "north": {"uv": [0, 0, 16, 1], "texture": "#1"}, + "east": {"uv": [0, 15, 16, 16], "texture": "#1"}, + "south": {"uv": [0, 15, 16, 16], "texture": "#1"}, + "west": {"uv": [0, 15, 16, 16], "texture": "#1"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#1"}, + "down": {"uv": [0, 0, 16, 16], "texture": "#1"} + } + }, + { + "name": "bottom", + "from": [0, 12, 0], + "to": [16, 13, 16], + "faces": { + "north": {"uv": [0, 14, 16, 15], "texture": "#1"}, + "east": {"uv": [0, 1, 16, 2], "texture": "#1"}, + "south": {"uv": [0, 14, 16, 15], "texture": "#1"}, + "west": {"uv": [0, 1, 16, 2], "texture": "#1"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#1"}, + "down": {"uv": [0, 0, 16, 16], "texture": "#1"} + } + }, + { + "name": "bottom", + "from": [0, 13, 0], + "to": [16, 14, 16], + "faces": { + "north": {"uv": [0, 15, 16, 16], "texture": "#1"}, + "east": {"uv": [0, 0, 16, 1], "texture": "#1"}, + "south": {"uv": [0, 0, 16, 1], "texture": "#1"}, + "west": {"uv": [0, 0, 16, 1], "texture": "#1"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#1"}, + "down": {"uv": [0, 0, 16, 16], "texture": "#1"} + } + }, + { + "name": "post_NW", + "from": [1, 4, 1], + "to": [2, 12, 2], + "faces": { + "north": {"uv": [0, 4, 1, 12], "texture": "#1"}, + "east": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "south": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "west": {"uv": [15, 4, 16, 12], "texture": "#1"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#missing"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#missing"} + } + }, + { + "name": "post_NE", + "from": [14, 4, 1], + "to": [15, 12, 2], + "faces": { + "north": {"uv": [0, 0, 1, 8], "texture": "#1"}, + "east": {"uv": [15, 0, 16, 8], "texture": "#1"}, + "south": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "west": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#missing"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#missing"} + } + }, + { + "name": "post_SE", + "from": [14, 4, 14], + "to": [15, 12, 15], + "faces": { + "north": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "east": {"uv": [0, 4, 1, 12], "texture": "#1"}, + "south": {"uv": [15, 7, 16, 15], "texture": "#1"}, + "west": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#missing"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#missing"} + } + }, + { + "name": "post_SW", + "from": [1, 4, 14], + "to": [2, 12, 15], + "faces": { + "north": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "east": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "south": {"uv": [15, 0, 16, 8], "texture": "#1"}, + "west": {"uv": [0, 7, 1, 15], "texture": "#1"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#missing"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#missing"} + } + }, + { + "from": [2, 4, 1], + "to": [14, 12, 2], + "faces": { + "north": {"uv": [2, 0, 14, 8], "texture": "#2"}, + "east": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "south": {"uv": [0, 0, 12, 8], "texture": "#missing"}, + "west": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "up": {"uv": [0, 0, 12, 1], "texture": "#missing"}, + "down": {"uv": [0, 0, 12, 1], "texture": "#missing"} + } + }, + { + "from": [2, 4, 14], + "to": [14, 12, 15], + "faces": { + "north": {"uv": [0, 0, 12, 8], "texture": "#missing"}, + "east": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "south": {"uv": [2, 0, 14, 8], "texture": "#2"}, + "west": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "up": {"uv": [0, 0, 12, 1], "texture": "#missing"}, + "down": {"uv": [0, 0, 12, 1], "texture": "#missing"} + } + }, + { + "from": [1, 4, 2], + "to": [2, 12, 14], + "faces": { + "north": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "east": {"uv": [0, 0, 12, 8], "texture": "#missing"}, + "south": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "west": {"uv": [2, 0, 14, 8], "texture": "#2"}, + "up": {"uv": [0, 0, 1, 12], "texture": "#missing"}, + "down": {"uv": [0, 0, 1, 12], "texture": "#missing"} + } + }, + { + "from": [14, 4, 2], + "to": [15, 12, 14], + "faces": { + "north": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "east": {"uv": [2, 0, 14, 8], "texture": "#2"}, + "south": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "west": {"uv": [0, 0, 12, 8], "texture": "#missing"}, + "up": {"uv": [0, 0, 1, 12], "texture": "#missing"}, + "down": {"uv": [0, 0, 1, 12], "texture": "#missing"} + } + }, + { + "name": "beebox_top", + "from": [2, 14, 2], + "to": [14, 16, 14], + "faces": { + "north": {"uv": [0, 0, 16, 2], "texture": "#1"}, + "east": {"uv": [0, 0, 16, 2], "texture": "#1"}, + "south": {"uv": [0, 0, 16, 2], "texture": "#1"}, + "west": {"uv": [0, 0, 16, 2], "texture": "#1"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#1"} + } + }, + { + "from": [5, 4, 0.5], + "to": [11, 6, 1.5], + "faces": { + "north": {"uv": [5, 14, 11, 16], "texture": "#3"}, + "east": {"uv": [5, 14, 6, 16], "texture": "#3"}, + "south": {"uv": [0, 0, 6, 2], "texture": "#missing"}, + "west": {"uv": [5, 14, 6, 16], "texture": "#3"}, + "up": {"uv": [5, 15, 11, 16], "texture": "#3"}, + "down": {"uv": [5, 14, 11, 15], "texture": "#3"} + } + }, + { + "from": [6, 6, 0.5], + "to": [10, 7, 1.5], + "faces": { + "north": {"uv": [5, 0, 9, 1], "texture": "#1"}, + "east": {"uv": [0, 4, 1, 5], "texture": "#1"}, + "south": {"uv": [0, 0, 4, 1], "texture": "#missing"}, + "west": {"uv": [15, 10, 16, 11], "texture": "#1"}, + "up": {"uv": [2, 15, 6, 16], "texture": "#1"}, + "down": {"uv": [0, 0, 4, 1], "texture": "#missing"} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [75, -135, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "thirdperson_lefthand": { + "rotation": [75, -135, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson_righthand": { + "rotation": [0, -135, 0], + "scale": [0.4, 0.4, 0.4] + }, + "firstperson_lefthand": { + "rotation": [0, -135, 0], + "scale": [0.4, 0.4, 0.4] + }, + "ground": { + "rotation": [0, 180, 0], + "translation": [0, 3, 0], + "scale": [0.25, 0.25, 0.25] + }, + "gui": { + "rotation": [30, -45, 0], + "scale": [0.625, 0.625, 0.625] + }, + "head": { + "rotation": [0, 180, 0] + }, + "fixed": { + "rotation": [0, 180, 0], + "scale": [0.5, 0.5, 0.5] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/models/block/bee_box_jungle.json b/src/main/resources/assets/growthcraft_apiary/models/block/bee_box_jungle.json new file mode 100644 index 0000000..5abc364 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/models/block/bee_box_jungle.json @@ -0,0 +1,289 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "0": "block/jungle_log", + "1": "block/jungle_log_top", + "2": "block/jungle_planks", + "3": "block/jungle_trapdoor", + "missing": "growthcraft:block/missing", + "particle": "block/jungle_log" + }, + "elements": [ + { + "name": "foot_NE", + "from": [12, 0, 2], + "to": [14, 3, 4], + "faces": { + "north": {"uv": [0, 7, 7, 16], "texture": "#0"}, + "east": {"uv": [9, 7, 16, 16], "texture": "#0"}, + "south": {"uv": [0, 7, 7, 16], "texture": "#0"}, + "west": {"uv": [9, 7, 16, 16], "texture": "#0"}, + "up": {"uv": [0, 0, 7, 7], "texture": "#0"}, + "down": {"uv": [9, 0, 16, 7], "texture": "#0"} + } + }, + { + "name": "foot_NW", + "from": [2, 0, 2], + "to": [4, 3, 4], + "faces": { + "north": {"uv": [0, 7, 7, 16], "texture": "#0"}, + "east": {"uv": [9, 7, 16, 16], "texture": "#0"}, + "south": {"uv": [0, 7, 7, 16], "texture": "#0"}, + "west": {"uv": [9, 7, 16, 16], "texture": "#0"}, + "up": {"uv": [0, 0, 7, 7], "texture": "#0"}, + "down": {"uv": [9, 0, 16, 7], "texture": "#0"} + } + }, + { + "name": "foot_SE", + "from": [12, 0, 12], + "to": [14, 3, 14], + "faces": { + "north": {"uv": [0, 7, 7, 16], "texture": "#0"}, + "east": {"uv": [9, 7, 16, 16], "texture": "#0"}, + "south": {"uv": [0, 7, 7, 16], "texture": "#0"}, + "west": {"uv": [9, 7, 16, 16], "texture": "#0"}, + "up": {"uv": [0, 0, 7, 7], "texture": "#0"}, + "down": {"uv": [9, 0, 16, 7], "texture": "#0"} + } + }, + { + "name": "foot_SW", + "from": [2, 0, 12], + "to": [4, 3, 14], + "faces": { + "north": {"uv": [0, 7, 7, 16], "texture": "#0"}, + "east": {"uv": [9, 7, 16, 16], "texture": "#0"}, + "south": {"uv": [0, 7, 7, 16], "texture": "#0"}, + "west": {"uv": [9, 7, 16, 16], "texture": "#0"}, + "up": {"uv": [0, 0, 7, 7], "texture": "#0"}, + "down": {"uv": [9, 0, 16, 7], "texture": "#0"} + } + }, + { + "name": "bottom", + "from": [1, 3, 1], + "to": [15, 4, 15], + "faces": { + "north": {"uv": [1, 0, 15, 1], "texture": "#1"}, + "east": {"uv": [1, 15, 15, 16], "texture": "#1"}, + "south": {"uv": [1, 15, 15, 16], "texture": "#1"}, + "west": {"uv": [1, 0, 15, 1], "texture": "#1"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#1"}, + "down": {"uv": [0, 0, 16, 16], "texture": "#1"} + } + }, + { + "name": "bottom", + "from": [0, 11, 0], + "to": [16, 12, 16], + "faces": { + "north": {"uv": [0, 0, 16, 1], "texture": "#1"}, + "east": {"uv": [0, 15, 16, 16], "texture": "#1"}, + "south": {"uv": [0, 15, 16, 16], "texture": "#1"}, + "west": {"uv": [0, 15, 16, 16], "texture": "#1"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#1"}, + "down": {"uv": [0, 0, 16, 16], "texture": "#1"} + } + }, + { + "name": "bottom", + "from": [0, 12, 0], + "to": [16, 13, 16], + "faces": { + "north": {"uv": [0, 14, 16, 15], "texture": "#1"}, + "east": {"uv": [0, 1, 16, 2], "texture": "#1"}, + "south": {"uv": [0, 14, 16, 15], "texture": "#1"}, + "west": {"uv": [0, 1, 16, 2], "texture": "#1"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#1"}, + "down": {"uv": [0, 0, 16, 16], "texture": "#1"} + } + }, + { + "name": "bottom", + "from": [0, 13, 0], + "to": [16, 14, 16], + "faces": { + "north": {"uv": [0, 15, 16, 16], "texture": "#1"}, + "east": {"uv": [0, 0, 16, 1], "texture": "#1"}, + "south": {"uv": [0, 0, 16, 1], "texture": "#1"}, + "west": {"uv": [0, 0, 16, 1], "texture": "#1"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#1"}, + "down": {"uv": [0, 0, 16, 16], "texture": "#1"} + } + }, + { + "name": "post_NW", + "from": [1, 4, 1], + "to": [2, 12, 2], + "faces": { + "north": {"uv": [0, 4, 1, 12], "texture": "#1"}, + "east": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "south": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "west": {"uv": [15, 4, 16, 12], "texture": "#1"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#missing"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#missing"} + } + }, + { + "name": "post_NE", + "from": [14, 4, 1], + "to": [15, 12, 2], + "faces": { + "north": {"uv": [0, 0, 1, 8], "texture": "#1"}, + "east": {"uv": [15, 0, 16, 8], "texture": "#1"}, + "south": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "west": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#missing"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#missing"} + } + }, + { + "name": "post_SE", + "from": [14, 4, 14], + "to": [15, 12, 15], + "faces": { + "north": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "east": {"uv": [0, 4, 1, 12], "texture": "#1"}, + "south": {"uv": [15, 7, 16, 15], "texture": "#1"}, + "west": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#missing"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#missing"} + } + }, + { + "name": "post_SW", + "from": [1, 4, 14], + "to": [2, 12, 15], + "faces": { + "north": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "east": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "south": {"uv": [15, 0, 16, 8], "texture": "#1"}, + "west": {"uv": [0, 7, 1, 15], "texture": "#1"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#missing"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#missing"} + } + }, + { + "from": [2, 4, 1], + "to": [14, 12, 2], + "faces": { + "north": {"uv": [2, 0, 14, 8], "texture": "#2"}, + "east": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "south": {"uv": [0, 0, 12, 8], "texture": "#missing"}, + "west": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "up": {"uv": [0, 0, 12, 1], "texture": "#missing"}, + "down": {"uv": [0, 0, 12, 1], "texture": "#missing"} + } + }, + { + "from": [2, 4, 14], + "to": [14, 12, 15], + "faces": { + "north": {"uv": [0, 0, 12, 8], "texture": "#missing"}, + "east": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "south": {"uv": [2, 0, 14, 8], "texture": "#2"}, + "west": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "up": {"uv": [0, 0, 12, 1], "texture": "#missing"}, + "down": {"uv": [0, 0, 12, 1], "texture": "#missing"} + } + }, + { + "from": [1, 4, 2], + "to": [2, 12, 14], + "faces": { + "north": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "east": {"uv": [0, 0, 12, 8], "texture": "#missing"}, + "south": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "west": {"uv": [2, 0, 14, 8], "texture": "#2"}, + "up": {"uv": [0, 0, 1, 12], "texture": "#missing"}, + "down": {"uv": [0, 0, 1, 12], "texture": "#missing"} + } + }, + { + "from": [14, 4, 2], + "to": [15, 12, 14], + "faces": { + "north": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "east": {"uv": [2, 0, 14, 8], "texture": "#2"}, + "south": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "west": {"uv": [0, 0, 12, 8], "texture": "#missing"}, + "up": {"uv": [0, 0, 1, 12], "texture": "#missing"}, + "down": {"uv": [0, 0, 1, 12], "texture": "#missing"} + } + }, + { + "name": "beebox_top", + "from": [2, 14, 2], + "to": [14, 16, 14], + "faces": { + "north": {"uv": [0, 0, 16, 2], "texture": "#1"}, + "east": {"uv": [0, 0, 16, 2], "texture": "#1"}, + "south": {"uv": [0, 0, 16, 2], "texture": "#1"}, + "west": {"uv": [0, 0, 16, 2], "texture": "#1"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#1"} + } + }, + { + "from": [5, 4, 0.5], + "to": [11, 6, 1.5], + "faces": { + "north": {"uv": [5, 14, 11, 16], "texture": "#3"}, + "east": {"uv": [5, 14, 6, 16], "texture": "#3"}, + "south": {"uv": [0, 0, 6, 2], "texture": "#missing"}, + "west": {"uv": [5, 14, 6, 16], "texture": "#3"}, + "up": {"uv": [5, 15, 11, 16], "texture": "#3"}, + "down": {"uv": [5, 14, 11, 15], "texture": "#3"} + } + }, + { + "from": [6, 6, 0.5], + "to": [10, 7, 1.5], + "faces": { + "north": {"uv": [5, 0, 9, 1], "texture": "#1"}, + "east": {"uv": [0, 4, 1, 5], "texture": "#1"}, + "south": {"uv": [0, 0, 4, 1], "texture": "#missing"}, + "west": {"uv": [15, 10, 16, 11], "texture": "#1"}, + "up": {"uv": [2, 15, 6, 16], "texture": "#1"}, + "down": {"uv": [0, 0, 4, 1], "texture": "#missing"} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [75, -135, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "thirdperson_lefthand": { + "rotation": [75, -135, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson_righthand": { + "rotation": [0, -135, 0], + "scale": [0.4, 0.4, 0.4] + }, + "firstperson_lefthand": { + "rotation": [0, -135, 0], + "scale": [0.4, 0.4, 0.4] + }, + "ground": { + "rotation": [0, 180, 0], + "translation": [0, 3, 0], + "scale": [0.25, 0.25, 0.25] + }, + "gui": { + "rotation": [30, -45, 0], + "scale": [0.625, 0.625, 0.625] + }, + "head": { + "rotation": [0, 180, 0] + }, + "fixed": { + "rotation": [0, 180, 0], + "scale": [0.5, 0.5, 0.5] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/models/block/bee_box_oak.json b/src/main/resources/assets/growthcraft_apiary/models/block/bee_box_oak.json new file mode 100644 index 0000000..e18fe26 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/models/block/bee_box_oak.json @@ -0,0 +1,289 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "0": "block/oak_log", + "1": "block/oak_log_top", + "2": "block/oak_planks", + "3": "block/oak_trapdoor", + "missing": "growthcraft:block/missing", + "particle": "block/oak_log" + }, + "elements": [ + { + "name": "foot_NE", + "from": [12, 0, 2], + "to": [14, 3, 4], + "faces": { + "north": {"uv": [0, 7, 7, 16], "texture": "#0"}, + "east": {"uv": [9, 7, 16, 16], "texture": "#0"}, + "south": {"uv": [0, 7, 7, 16], "texture": "#0"}, + "west": {"uv": [9, 7, 16, 16], "texture": "#0"}, + "up": {"uv": [0, 0, 7, 7], "texture": "#0"}, + "down": {"uv": [9, 0, 16, 7], "texture": "#0"} + } + }, + { + "name": "foot_NW", + "from": [2, 0, 2], + "to": [4, 3, 4], + "faces": { + "north": {"uv": [0, 7, 7, 16], "texture": "#0"}, + "east": {"uv": [9, 7, 16, 16], "texture": "#0"}, + "south": {"uv": [0, 7, 7, 16], "texture": "#0"}, + "west": {"uv": [9, 7, 16, 16], "texture": "#0"}, + "up": {"uv": [0, 0, 7, 7], "texture": "#0"}, + "down": {"uv": [9, 0, 16, 7], "texture": "#0"} + } + }, + { + "name": "foot_SE", + "from": [12, 0, 12], + "to": [14, 3, 14], + "faces": { + "north": {"uv": [0, 7, 7, 16], "texture": "#0"}, + "east": {"uv": [9, 7, 16, 16], "texture": "#0"}, + "south": {"uv": [0, 7, 7, 16], "texture": "#0"}, + "west": {"uv": [9, 7, 16, 16], "texture": "#0"}, + "up": {"uv": [0, 0, 7, 7], "texture": "#0"}, + "down": {"uv": [9, 0, 16, 7], "texture": "#0"} + } + }, + { + "name": "foot_SW", + "from": [2, 0, 12], + "to": [4, 3, 14], + "faces": { + "north": {"uv": [0, 7, 7, 16], "texture": "#0"}, + "east": {"uv": [9, 7, 16, 16], "texture": "#0"}, + "south": {"uv": [0, 7, 7, 16], "texture": "#0"}, + "west": {"uv": [9, 7, 16, 16], "texture": "#0"}, + "up": {"uv": [0, 0, 7, 7], "texture": "#0"}, + "down": {"uv": [9, 0, 16, 7], "texture": "#0"} + } + }, + { + "name": "bottom", + "from": [1, 3, 1], + "to": [15, 4, 15], + "faces": { + "north": {"uv": [1, 0, 15, 1], "texture": "#1"}, + "east": {"uv": [1, 15, 15, 16], "texture": "#1"}, + "south": {"uv": [1, 15, 15, 16], "texture": "#1"}, + "west": {"uv": [1, 0, 15, 1], "texture": "#1"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#1"}, + "down": {"uv": [0, 0, 16, 16], "texture": "#1"} + } + }, + { + "name": "bottom", + "from": [0, 11, 0], + "to": [16, 12, 16], + "faces": { + "north": {"uv": [0, 0, 16, 1], "texture": "#1"}, + "east": {"uv": [0, 15, 16, 16], "texture": "#1"}, + "south": {"uv": [0, 15, 16, 16], "texture": "#1"}, + "west": {"uv": [0, 15, 16, 16], "texture": "#1"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#1"}, + "down": {"uv": [0, 0, 16, 16], "texture": "#1"} + } + }, + { + "name": "bottom", + "from": [0, 12, 0], + "to": [16, 13, 16], + "faces": { + "north": {"uv": [0, 14, 16, 15], "texture": "#1"}, + "east": {"uv": [0, 1, 16, 2], "texture": "#1"}, + "south": {"uv": [0, 14, 16, 15], "texture": "#1"}, + "west": {"uv": [0, 1, 16, 2], "texture": "#1"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#1"}, + "down": {"uv": [0, 0, 16, 16], "texture": "#1"} + } + }, + { + "name": "bottom", + "from": [0, 13, 0], + "to": [16, 14, 16], + "faces": { + "north": {"uv": [0, 15, 16, 16], "texture": "#1"}, + "east": {"uv": [0, 0, 16, 1], "texture": "#1"}, + "south": {"uv": [0, 0, 16, 1], "texture": "#1"}, + "west": {"uv": [0, 0, 16, 1], "texture": "#1"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#1"}, + "down": {"uv": [0, 0, 16, 16], "texture": "#1"} + } + }, + { + "name": "post_NW", + "from": [1, 4, 1], + "to": [2, 12, 2], + "faces": { + "north": {"uv": [0, 4, 1, 12], "texture": "#1"}, + "east": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "south": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "west": {"uv": [15, 4, 16, 12], "texture": "#1"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#missing"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#missing"} + } + }, + { + "name": "post_NE", + "from": [14, 4, 1], + "to": [15, 12, 2], + "faces": { + "north": {"uv": [0, 0, 1, 8], "texture": "#1"}, + "east": {"uv": [15, 0, 16, 8], "texture": "#1"}, + "south": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "west": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#missing"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#missing"} + } + }, + { + "name": "post_SE", + "from": [14, 4, 14], + "to": [15, 12, 15], + "faces": { + "north": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "east": {"uv": [0, 4, 1, 12], "texture": "#1"}, + "south": {"uv": [15, 7, 16, 15], "texture": "#1"}, + "west": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#missing"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#missing"} + } + }, + { + "name": "post_SW", + "from": [1, 4, 14], + "to": [2, 12, 15], + "faces": { + "north": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "east": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "south": {"uv": [15, 0, 16, 8], "texture": "#1"}, + "west": {"uv": [0, 7, 1, 15], "texture": "#1"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#missing"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#missing"} + } + }, + { + "from": [2, 4, 1], + "to": [14, 12, 2], + "faces": { + "north": {"uv": [2, 0, 14, 8], "texture": "#2"}, + "east": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "south": {"uv": [0, 0, 12, 8], "texture": "#missing"}, + "west": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "up": {"uv": [0, 0, 12, 1], "texture": "#missing"}, + "down": {"uv": [0, 0, 12, 1], "texture": "#missing"} + } + }, + { + "from": [2, 4, 14], + "to": [14, 12, 15], + "faces": { + "north": {"uv": [0, 0, 12, 8], "texture": "#missing"}, + "east": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "south": {"uv": [2, 0, 14, 8], "texture": "#2"}, + "west": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "up": {"uv": [0, 0, 12, 1], "texture": "#missing"}, + "down": {"uv": [0, 0, 12, 1], "texture": "#missing"} + } + }, + { + "from": [1, 4, 2], + "to": [2, 12, 14], + "faces": { + "north": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "east": {"uv": [0, 0, 12, 8], "texture": "#missing"}, + "south": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "west": {"uv": [2, 0, 14, 8], "texture": "#2"}, + "up": {"uv": [0, 0, 1, 12], "texture": "#missing"}, + "down": {"uv": [0, 0, 1, 12], "texture": "#missing"} + } + }, + { + "from": [14, 4, 2], + "to": [15, 12, 14], + "faces": { + "north": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "east": {"uv": [2, 0, 14, 8], "texture": "#2"}, + "south": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "west": {"uv": [0, 0, 12, 8], "texture": "#missing"}, + "up": {"uv": [0, 0, 1, 12], "texture": "#missing"}, + "down": {"uv": [0, 0, 1, 12], "texture": "#missing"} + } + }, + { + "name": "beebox_top", + "from": [2, 14, 2], + "to": [14, 16, 14], + "faces": { + "north": {"uv": [0, 0, 16, 2], "texture": "#1"}, + "east": {"uv": [0, 0, 16, 2], "texture": "#1"}, + "south": {"uv": [0, 0, 16, 2], "texture": "#1"}, + "west": {"uv": [0, 0, 16, 2], "texture": "#1"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#1"} + } + }, + { + "from": [5, 4, 0.5], + "to": [11, 6, 1.5], + "faces": { + "north": {"uv": [5, 14, 11, 16], "texture": "#3"}, + "east": {"uv": [5, 14, 6, 16], "texture": "#3"}, + "south": {"uv": [0, 0, 6, 2], "texture": "#missing"}, + "west": {"uv": [5, 14, 6, 16], "texture": "#3"}, + "up": {"uv": [5, 15, 11, 16], "texture": "#3"}, + "down": {"uv": [5, 14, 11, 15], "texture": "#3"} + } + }, + { + "from": [6, 6, 0.5], + "to": [10, 7, 1.5], + "faces": { + "north": {"uv": [5, 0, 9, 1], "texture": "#1"}, + "east": {"uv": [0, 4, 1, 5], "texture": "#1"}, + "south": {"uv": [0, 0, 4, 1], "texture": "#missing"}, + "west": {"uv": [15, 10, 16, 11], "texture": "#1"}, + "up": {"uv": [2, 15, 6, 16], "texture": "#1"}, + "down": {"uv": [0, 0, 4, 1], "texture": "#missing"} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [75, -135, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "thirdperson_lefthand": { + "rotation": [75, -135, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson_righthand": { + "rotation": [0, -135, 0], + "scale": [0.4, 0.4, 0.4] + }, + "firstperson_lefthand": { + "rotation": [0, -135, 0], + "scale": [0.4, 0.4, 0.4] + }, + "ground": { + "rotation": [0, 180, 0], + "translation": [0, 3, 0], + "scale": [0.25, 0.25, 0.25] + }, + "gui": { + "rotation": [30, -45, 0], + "scale": [0.625, 0.625, 0.625] + }, + "head": { + "rotation": [0, 180, 0] + }, + "fixed": { + "rotation": [0, 180, 0], + "scale": [0.5, 0.5, 0.5] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/models/block/bee_box_oak_old.json b/src/main/resources/assets/growthcraft_apiary/models/block/bee_box_oak_old.json new file mode 100644 index 0000000..86922c2 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/models/block/bee_box_oak_old.json @@ -0,0 +1,157 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "0": "growthcraft_apiary:block/bee_box/bee_box_front", + "1": "growthcraft_apiary:block/bee_box/bee_box_side", + "2": "growthcraft_apiary:block/bee_box/bee_box_top", + "3": "growthcraft_apiary:block/bee_box/bee_box_bottom", + "particle": "growthcraft_apiary:block/bee_box/bee_box_top" + }, + "elements": [ + { + "name": "beebox_top", + "from": [2, 14, 2], + "to": [14, 16, 14], + "faces": { + "north": {"uv": [2, 0, 14, 2], "texture": "#0"}, + "east": {"uv": [2, 0, 14, 2], "texture": "#1"}, + "south": {"uv": [2, 0, 14, 2], "texture": "#1"}, + "west": {"uv": [2, 0, 14, 2], "texture": "#1"}, + "up": {"uv": [2, 2, 14, 14], "texture": "#2"} + } + }, + { + "name": "beebox_middle", + "from": [0, 11, 0], + "to": [16, 14, 16], + "faces": { + "north": {"uv": [0, 2, 16, 5], "texture": "#0"}, + "east": {"uv": [0, 2, 16, 5], "texture": "#1"}, + "south": {"uv": [0, 2, 16, 5], "texture": "#1"}, + "west": {"uv": [0, 2, 16, 5], "texture": "#1"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#2"}, + "down": {"uv": [0, 0, 16, 16], "texture": "#3"} + } + }, + { + "name": "beebox_bottom", + "from": [1, 3, 1], + "to": [15, 11, 15], + "faces": { + "north": {"uv": [1, 5, 15, 13], "texture": "#0"}, + "east": {"uv": [1, 5, 15, 13], "texture": "#1"}, + "south": {"uv": [1, 5, 15, 13], "texture": "#1"}, + "west": {"uv": [1, 5, 15, 13], "texture": "#1"}, + "down": {"uv": [1, 1, 15, 15], "texture": "#3"} + } + }, + { + "name": "foot_NE", + "from": [12, 0, 2], + "to": [14, 3, 4], + "faces": { + "north": {"uv": [2, 13, 4, 16], "texture": "#1"}, + "east": {"uv": [12, 13, 14, 16], "texture": "#1"}, + "south": {"uv": [2, 13, 4, 16], "texture": "#1"}, + "west": {"uv": [12, 13, 14, 16], "texture": "#1"}, + "down": {"uv": [12, 12, 14, 14], "texture": "#3"} + } + }, + { + "name": "foot_SE", + "from": [12, 0, 12], + "to": [14, 3, 14], + "faces": { + "north": {"uv": [12, 13, 14, 16], "texture": "#1"}, + "east": {"uv": [2, 13, 4, 16], "texture": "#1"}, + "south": {"uv": [12, 13, 14, 16], "texture": "#0"}, + "west": {"uv": [2, 13, 4, 16], "texture": "#0"}, + "down": {"uv": [12, 2, 14, 4], "texture": "#3"} + } + }, + { + "name": "foot_SW", + "from": [2, 0, 12], + "to": [4, 3, 14], + "faces": { + "north": {"uv": [2, 13, 4, 16], "texture": "#1"}, + "east": {"uv": [12, 13, 14, 16], "texture": "#0"}, + "south": {"uv": [2, 13, 4, 16], "texture": "#0"}, + "west": {"uv": [12, 13, 14, 16], "texture": "#1"}, + "down": {"uv": [2, 2, 4, 4], "texture": "#3"} + } + }, + { + "name": "foot_NW", + "from": [2, 0, 2], + "to": [4, 3, 4], + "faces": { + "north": {"uv": [12, 13, 14, 16], "texture": "#1"}, + "east": {"uv": [2, 13, 4, 16], "texture": "#1"}, + "south": {"uv": [12, 13, 14, 16], "texture": "#1"}, + "west": {"uv": [2, 13, 4, 16], "texture": "#1"}, + "down": {"uv": [2, 12, 4, 14], "texture": "#3"} + } + }, + { + "from": [5, 4, 0.5], + "to": [11, 6, 1.5], + "faces": { + "north": {"uv": [5, 10, 11, 12], "texture": "#0"}, + "east": {"uv": [10, 10, 11, 12], "texture": "#0"}, + "south": {"uv": [5, 10, 11, 12], "texture": "#0"}, + "west": {"uv": [5, 10, 6, 12], "texture": "#0"}, + "up": {"uv": [5, 10, 11, 11], "texture": "#0"}, + "down": {"uv": [5, 11, 11, 12], "texture": "#0"} + } + }, + { + "from": [6, 6, 0.5], + "to": [10, 7, 1.5], + "faces": { + "north": {"uv": [6, 9, 10, 10], "texture": "#0"}, + "east": {"uv": [9, 9, 10, 10], "texture": "#0"}, + "south": {"uv": [6, 9, 10, 10], "texture": "#0"}, + "west": {"uv": [6, 9, 7, 10], "texture": "#0"}, + "up": {"uv": [6, 9, 10, 10], "texture": "#0"}, + "down": {"uv": [6, 9, 10, 10], "texture": "#0"} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [75, -135, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "thirdperson_lefthand": { + "rotation": [75, -135, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson_righthand": { + "rotation": [0, -135, 0], + "scale": [0.4, 0.4, 0.4] + }, + "firstperson_lefthand": { + "rotation": [0, -135, 0], + "scale": [0.4, 0.4, 0.4] + }, + "ground": { + "rotation": [0, 180, 0], + "translation": [0, 3, 0], + "scale": [0.25, 0.25, 0.25] + }, + "gui": { + "rotation": [30, -45, 0], + "scale": [0.625, 0.625, 0.625] + }, + "head": { + "rotation": [0, 180, 0] + }, + "fixed": { + "rotation": [0, 180, 0], + "scale": [0.5, 0.5, 0.5] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/models/block/bee_box_spruce.json b/src/main/resources/assets/growthcraft_apiary/models/block/bee_box_spruce.json new file mode 100644 index 0000000..a1eb78d --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/models/block/bee_box_spruce.json @@ -0,0 +1,289 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "0": "block/spruce_log", + "1": "block/spruce_log_top", + "2": "block/spruce_planks", + "3": "block/spruce_trapdoor", + "missing": "growthcraft:block/missing", + "particle": "block/spruce_log" + }, + "elements": [ + { + "name": "foot_NE", + "from": [12, 0, 2], + "to": [14, 3, 4], + "faces": { + "north": {"uv": [0, 7, 7, 16], "texture": "#0"}, + "east": {"uv": [9, 7, 16, 16], "texture": "#0"}, + "south": {"uv": [0, 7, 7, 16], "texture": "#0"}, + "west": {"uv": [9, 7, 16, 16], "texture": "#0"}, + "up": {"uv": [0, 0, 7, 7], "texture": "#0"}, + "down": {"uv": [9, 0, 16, 7], "texture": "#0"} + } + }, + { + "name": "foot_NW", + "from": [2, 0, 2], + "to": [4, 3, 4], + "faces": { + "north": {"uv": [0, 7, 7, 16], "texture": "#0"}, + "east": {"uv": [9, 7, 16, 16], "texture": "#0"}, + "south": {"uv": [0, 7, 7, 16], "texture": "#0"}, + "west": {"uv": [9, 7, 16, 16], "texture": "#0"}, + "up": {"uv": [0, 0, 7, 7], "texture": "#0"}, + "down": {"uv": [9, 0, 16, 7], "texture": "#0"} + } + }, + { + "name": "foot_SE", + "from": [12, 0, 12], + "to": [14, 3, 14], + "faces": { + "north": {"uv": [0, 7, 7, 16], "texture": "#0"}, + "east": {"uv": [9, 7, 16, 16], "texture": "#0"}, + "south": {"uv": [0, 7, 7, 16], "texture": "#0"}, + "west": {"uv": [9, 7, 16, 16], "texture": "#0"}, + "up": {"uv": [0, 0, 7, 7], "texture": "#0"}, + "down": {"uv": [9, 0, 16, 7], "texture": "#0"} + } + }, + { + "name": "foot_SW", + "from": [2, 0, 12], + "to": [4, 3, 14], + "faces": { + "north": {"uv": [0, 7, 7, 16], "texture": "#0"}, + "east": {"uv": [9, 7, 16, 16], "texture": "#0"}, + "south": {"uv": [0, 7, 7, 16], "texture": "#0"}, + "west": {"uv": [9, 7, 16, 16], "texture": "#0"}, + "up": {"uv": [0, 0, 7, 7], "texture": "#0"}, + "down": {"uv": [9, 0, 16, 7], "texture": "#0"} + } + }, + { + "name": "bottom", + "from": [1, 3, 1], + "to": [15, 4, 15], + "faces": { + "north": {"uv": [1, 0, 15, 1], "texture": "#1"}, + "east": {"uv": [1, 15, 15, 16], "texture": "#1"}, + "south": {"uv": [1, 15, 15, 16], "texture": "#1"}, + "west": {"uv": [1, 0, 15, 1], "texture": "#1"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#1"}, + "down": {"uv": [0, 0, 16, 16], "texture": "#1"} + } + }, + { + "name": "bottom", + "from": [0, 11, 0], + "to": [16, 12, 16], + "faces": { + "north": {"uv": [0, 0, 16, 1], "texture": "#1"}, + "east": {"uv": [0, 15, 16, 16], "texture": "#1"}, + "south": {"uv": [0, 15, 16, 16], "texture": "#1"}, + "west": {"uv": [0, 15, 16, 16], "texture": "#1"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#1"}, + "down": {"uv": [0, 0, 16, 16], "texture": "#1"} + } + }, + { + "name": "bottom", + "from": [0, 12, 0], + "to": [16, 13, 16], + "faces": { + "north": {"uv": [0, 14, 16, 15], "texture": "#1"}, + "east": {"uv": [0, 1, 16, 2], "texture": "#1"}, + "south": {"uv": [0, 14, 16, 15], "texture": "#1"}, + "west": {"uv": [0, 1, 16, 2], "texture": "#1"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#1"}, + "down": {"uv": [0, 0, 16, 16], "texture": "#1"} + } + }, + { + "name": "bottom", + "from": [0, 13, 0], + "to": [16, 14, 16], + "faces": { + "north": {"uv": [0, 15, 16, 16], "texture": "#1"}, + "east": {"uv": [0, 0, 16, 1], "texture": "#1"}, + "south": {"uv": [0, 0, 16, 1], "texture": "#1"}, + "west": {"uv": [0, 0, 16, 1], "texture": "#1"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#1"}, + "down": {"uv": [0, 0, 16, 16], "texture": "#1"} + } + }, + { + "name": "post_NW", + "from": [1, 4, 1], + "to": [2, 12, 2], + "faces": { + "north": {"uv": [0, 4, 1, 12], "texture": "#1"}, + "east": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "south": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "west": {"uv": [15, 4, 16, 12], "texture": "#1"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#missing"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#missing"} + } + }, + { + "name": "post_NE", + "from": [14, 4, 1], + "to": [15, 12, 2], + "faces": { + "north": {"uv": [0, 0, 1, 8], "texture": "#1"}, + "east": {"uv": [15, 0, 16, 8], "texture": "#1"}, + "south": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "west": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#missing"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#missing"} + } + }, + { + "name": "post_SE", + "from": [14, 4, 14], + "to": [15, 12, 15], + "faces": { + "north": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "east": {"uv": [0, 4, 1, 12], "texture": "#1"}, + "south": {"uv": [15, 7, 16, 15], "texture": "#1"}, + "west": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#missing"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#missing"} + } + }, + { + "name": "post_SW", + "from": [1, 4, 14], + "to": [2, 12, 15], + "faces": { + "north": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "east": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "south": {"uv": [15, 0, 16, 8], "texture": "#1"}, + "west": {"uv": [0, 7, 1, 15], "texture": "#1"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#missing"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#missing"} + } + }, + { + "from": [2, 4, 1], + "to": [14, 12, 2], + "faces": { + "north": {"uv": [2, 0, 14, 8], "texture": "#2"}, + "east": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "south": {"uv": [0, 0, 12, 8], "texture": "#missing"}, + "west": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "up": {"uv": [0, 0, 12, 1], "texture": "#missing"}, + "down": {"uv": [0, 0, 12, 1], "texture": "#missing"} + } + }, + { + "from": [2, 4, 14], + "to": [14, 12, 15], + "faces": { + "north": {"uv": [0, 0, 12, 8], "texture": "#missing"}, + "east": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "south": {"uv": [2, 0, 14, 8], "texture": "#2"}, + "west": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "up": {"uv": [0, 0, 12, 1], "texture": "#missing"}, + "down": {"uv": [0, 0, 12, 1], "texture": "#missing"} + } + }, + { + "from": [1, 4, 2], + "to": [2, 12, 14], + "faces": { + "north": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "east": {"uv": [0, 0, 12, 8], "texture": "#missing"}, + "south": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "west": {"uv": [2, 0, 14, 8], "texture": "#2"}, + "up": {"uv": [0, 0, 1, 12], "texture": "#missing"}, + "down": {"uv": [0, 0, 1, 12], "texture": "#missing"} + } + }, + { + "from": [14, 4, 2], + "to": [15, 12, 14], + "faces": { + "north": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "east": {"uv": [2, 0, 14, 8], "texture": "#2"}, + "south": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "west": {"uv": [0, 0, 12, 8], "texture": "#missing"}, + "up": {"uv": [0, 0, 1, 12], "texture": "#missing"}, + "down": {"uv": [0, 0, 1, 12], "texture": "#missing"} + } + }, + { + "name": "beebox_top", + "from": [2, 14, 2], + "to": [14, 16, 14], + "faces": { + "north": {"uv": [0, 0, 16, 2], "texture": "#1"}, + "east": {"uv": [0, 0, 16, 2], "texture": "#1"}, + "south": {"uv": [0, 0, 16, 2], "texture": "#1"}, + "west": {"uv": [0, 0, 16, 2], "texture": "#1"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#1"} + } + }, + { + "from": [5, 4, 0.5], + "to": [11, 6, 1.5], + "faces": { + "north": {"uv": [5, 14, 11, 16], "texture": "#3"}, + "east": {"uv": [5, 14, 6, 16], "texture": "#3"}, + "south": {"uv": [0, 0, 6, 2], "texture": "#missing"}, + "west": {"uv": [5, 14, 6, 16], "texture": "#3"}, + "up": {"uv": [5, 15, 11, 16], "texture": "#3"}, + "down": {"uv": [5, 14, 11, 15], "texture": "#3"} + } + }, + { + "from": [6, 6, 0.5], + "to": [10, 7, 1.5], + "faces": { + "north": {"uv": [5, 0, 9, 1], "texture": "#1"}, + "east": {"uv": [0, 4, 1, 5], "texture": "#1"}, + "south": {"uv": [0, 0, 4, 1], "texture": "#missing"}, + "west": {"uv": [15, 10, 16, 11], "texture": "#1"}, + "up": {"uv": [2, 15, 6, 16], "texture": "#1"}, + "down": {"uv": [0, 0, 4, 1], "texture": "#missing"} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [75, -135, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "thirdperson_lefthand": { + "rotation": [75, -135, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson_righthand": { + "rotation": [0, -135, 0], + "scale": [0.4, 0.4, 0.4] + }, + "firstperson_lefthand": { + "rotation": [0, -135, 0], + "scale": [0.4, 0.4, 0.4] + }, + "ground": { + "rotation": [0, 180, 0], + "translation": [0, 3, 0], + "scale": [0.25, 0.25, 0.25] + }, + "gui": { + "rotation": [30, -45, 0], + "scale": [0.625, 0.625, 0.625] + }, + "head": { + "rotation": [0, 180, 0] + }, + "fixed": { + "rotation": [0, 180, 0], + "scale": [0.5, 0.5, 0.5] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/models/block/bee_box_warped.json b/src/main/resources/assets/growthcraft_apiary/models/block/bee_box_warped.json new file mode 100644 index 0000000..5396b28 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/models/block/bee_box_warped.json @@ -0,0 +1,289 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "0": "block/warped_stem", + "1": "block/warped_stem_top", + "2": "block/warped_planks", + "3": "block/warped_trapdoor", + "missing": "growthcraft:block/missing", + "particle": "block/warped_stem" + }, + "elements": [ + { + "name": "foot_NE", + "from": [12, 0, 2], + "to": [14, 3, 4], + "faces": { + "north": {"uv": [0, 7, 7, 16], "texture": "#0"}, + "east": {"uv": [9, 7, 16, 16], "texture": "#0"}, + "south": {"uv": [0, 7, 7, 16], "texture": "#0"}, + "west": {"uv": [9, 7, 16, 16], "texture": "#0"}, + "up": {"uv": [0, 0, 7, 7], "texture": "#0"}, + "down": {"uv": [9, 0, 16, 7], "texture": "#0"} + } + }, + { + "name": "foot_NW", + "from": [2, 0, 2], + "to": [4, 3, 4], + "faces": { + "north": {"uv": [0, 7, 7, 16], "texture": "#0"}, + "east": {"uv": [9, 7, 16, 16], "texture": "#0"}, + "south": {"uv": [0, 7, 7, 16], "texture": "#0"}, + "west": {"uv": [9, 7, 16, 16], "texture": "#0"}, + "up": {"uv": [0, 0, 7, 7], "texture": "#0"}, + "down": {"uv": [9, 0, 16, 7], "texture": "#0"} + } + }, + { + "name": "foot_SE", + "from": [12, 0, 12], + "to": [14, 3, 14], + "faces": { + "north": {"uv": [0, 7, 7, 16], "texture": "#0"}, + "east": {"uv": [9, 7, 16, 16], "texture": "#0"}, + "south": {"uv": [0, 7, 7, 16], "texture": "#0"}, + "west": {"uv": [9, 7, 16, 16], "texture": "#0"}, + "up": {"uv": [0, 0, 7, 7], "texture": "#0"}, + "down": {"uv": [9, 0, 16, 7], "texture": "#0"} + } + }, + { + "name": "foot_SW", + "from": [2, 0, 12], + "to": [4, 3, 14], + "faces": { + "north": {"uv": [0, 7, 7, 16], "texture": "#0"}, + "east": {"uv": [9, 7, 16, 16], "texture": "#0"}, + "south": {"uv": [0, 7, 7, 16], "texture": "#0"}, + "west": {"uv": [9, 7, 16, 16], "texture": "#0"}, + "up": {"uv": [0, 0, 7, 7], "texture": "#0"}, + "down": {"uv": [9, 0, 16, 7], "texture": "#0"} + } + }, + { + "name": "bottom", + "from": [1, 3, 1], + "to": [15, 4, 15], + "faces": { + "north": {"uv": [1, 0, 15, 1], "texture": "#1"}, + "east": {"uv": [1, 15, 15, 16], "texture": "#1"}, + "south": {"uv": [1, 15, 15, 16], "texture": "#1"}, + "west": {"uv": [1, 0, 15, 1], "texture": "#1"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#1"}, + "down": {"uv": [0, 0, 16, 16], "texture": "#1"} + } + }, + { + "name": "bottom", + "from": [0, 11, 0], + "to": [16, 12, 16], + "faces": { + "north": {"uv": [0, 0, 16, 1], "texture": "#1"}, + "east": {"uv": [0, 15, 16, 16], "texture": "#1"}, + "south": {"uv": [0, 15, 16, 16], "texture": "#1"}, + "west": {"uv": [0, 15, 16, 16], "texture": "#1"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#1"}, + "down": {"uv": [0, 0, 16, 16], "texture": "#1"} + } + }, + { + "name": "bottom", + "from": [0, 12, 0], + "to": [16, 13, 16], + "faces": { + "north": {"uv": [0, 14, 16, 15], "texture": "#1"}, + "east": {"uv": [0, 1, 16, 2], "texture": "#1"}, + "south": {"uv": [0, 14, 16, 15], "texture": "#1"}, + "west": {"uv": [0, 1, 16, 2], "texture": "#1"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#1"}, + "down": {"uv": [0, 0, 16, 16], "texture": "#1"} + } + }, + { + "name": "bottom", + "from": [0, 13, 0], + "to": [16, 14, 16], + "faces": { + "north": {"uv": [0, 15, 16, 16], "texture": "#1"}, + "east": {"uv": [0, 0, 16, 1], "texture": "#1"}, + "south": {"uv": [0, 0, 16, 1], "texture": "#1"}, + "west": {"uv": [0, 0, 16, 1], "texture": "#1"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#1"}, + "down": {"uv": [0, 0, 16, 16], "texture": "#1"} + } + }, + { + "name": "post_NW", + "from": [1, 4, 1], + "to": [2, 12, 2], + "faces": { + "north": {"uv": [0, 4, 1, 12], "texture": "#1"}, + "east": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "south": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "west": {"uv": [15, 4, 16, 12], "texture": "#1"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#missing"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#missing"} + } + }, + { + "name": "post_NE", + "from": [14, 4, 1], + "to": [15, 12, 2], + "faces": { + "north": {"uv": [0, 0, 1, 8], "texture": "#1"}, + "east": {"uv": [15, 0, 16, 8], "texture": "#1"}, + "south": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "west": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#missing"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#missing"} + } + }, + { + "name": "post_SE", + "from": [14, 4, 14], + "to": [15, 12, 15], + "faces": { + "north": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "east": {"uv": [0, 4, 1, 12], "texture": "#1"}, + "south": {"uv": [15, 7, 16, 15], "texture": "#1"}, + "west": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#missing"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#missing"} + } + }, + { + "name": "post_SW", + "from": [1, 4, 14], + "to": [2, 12, 15], + "faces": { + "north": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "east": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "south": {"uv": [15, 0, 16, 8], "texture": "#1"}, + "west": {"uv": [0, 7, 1, 15], "texture": "#1"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#missing"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#missing"} + } + }, + { + "from": [2, 4, 1], + "to": [14, 12, 2], + "faces": { + "north": {"uv": [2, 0, 14, 8], "texture": "#2"}, + "east": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "south": {"uv": [0, 0, 12, 8], "texture": "#missing"}, + "west": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "up": {"uv": [0, 0, 12, 1], "texture": "#missing"}, + "down": {"uv": [0, 0, 12, 1], "texture": "#missing"} + } + }, + { + "from": [2, 4, 14], + "to": [14, 12, 15], + "faces": { + "north": {"uv": [0, 0, 12, 8], "texture": "#missing"}, + "east": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "south": {"uv": [2, 0, 14, 8], "texture": "#2"}, + "west": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "up": {"uv": [0, 0, 12, 1], "texture": "#missing"}, + "down": {"uv": [0, 0, 12, 1], "texture": "#missing"} + } + }, + { + "from": [1, 4, 2], + "to": [2, 12, 14], + "faces": { + "north": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "east": {"uv": [0, 0, 12, 8], "texture": "#missing"}, + "south": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "west": {"uv": [2, 0, 14, 8], "texture": "#2"}, + "up": {"uv": [0, 0, 1, 12], "texture": "#missing"}, + "down": {"uv": [0, 0, 1, 12], "texture": "#missing"} + } + }, + { + "from": [14, 4, 2], + "to": [15, 12, 14], + "faces": { + "north": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "east": {"uv": [2, 0, 14, 8], "texture": "#2"}, + "south": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "west": {"uv": [0, 0, 12, 8], "texture": "#missing"}, + "up": {"uv": [0, 0, 1, 12], "texture": "#missing"}, + "down": {"uv": [0, 0, 1, 12], "texture": "#missing"} + } + }, + { + "name": "beebox_top", + "from": [2, 14, 2], + "to": [14, 16, 14], + "faces": { + "north": {"uv": [0, 0, 16, 2], "texture": "#1"}, + "east": {"uv": [0, 0, 16, 2], "texture": "#1"}, + "south": {"uv": [0, 0, 16, 2], "texture": "#1"}, + "west": {"uv": [0, 0, 16, 2], "texture": "#1"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#1"} + } + }, + { + "from": [5, 4, 0.5], + "to": [11, 6, 1.5], + "faces": { + "north": {"uv": [5, 14, 11, 16], "texture": "#3"}, + "east": {"uv": [5, 14, 6, 16], "texture": "#3"}, + "south": {"uv": [0, 0, 6, 2], "texture": "#missing"}, + "west": {"uv": [5, 14, 6, 16], "texture": "#3"}, + "up": {"uv": [5, 15, 11, 16], "texture": "#3"}, + "down": {"uv": [5, 14, 11, 15], "texture": "#3"} + } + }, + { + "from": [6, 6, 0.5], + "to": [10, 7, 1.5], + "faces": { + "north": {"uv": [5, 0, 9, 1], "texture": "#1"}, + "east": {"uv": [0, 4, 1, 5], "texture": "#1"}, + "south": {"uv": [0, 0, 4, 1], "texture": "#missing"}, + "west": {"uv": [15, 10, 16, 11], "texture": "#1"}, + "up": {"uv": [2, 15, 6, 16], "texture": "#1"}, + "down": {"uv": [0, 0, 4, 1], "texture": "#missing"} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [75, -135, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "thirdperson_lefthand": { + "rotation": [75, -135, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson_righthand": { + "rotation": [0, -135, 0], + "scale": [0.4, 0.4, 0.4] + }, + "firstperson_lefthand": { + "rotation": [0, -135, 0], + "scale": [0.4, 0.4, 0.4] + }, + "ground": { + "rotation": [0, 180, 0], + "translation": [0, 3, 0], + "scale": [0.25, 0.25, 0.25] + }, + "gui": { + "rotation": [30, -45, 0], + "scale": [0.625, 0.625, 0.625] + }, + "head": { + "rotation": [0, 180, 0] + }, + "fixed": { + "rotation": [0, 180, 0], + "scale": [0.5, 0.5, 0.5] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/models/block/candle.json b/src/main/resources/assets/growthcraft_apiary/models/block/candle.json new file mode 100644 index 0000000..b75452e --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/models/block/candle.json @@ -0,0 +1,114 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "#torch", + "torch": "growthcraft_apiary:block/candle_simple" + }, + "elements": [ + { + "from": [ + 7, + 0, + 7 + ], + "to": [ + 9, + 10, + 9 + ], + "shade": false, + "faces": { + "down": { + "uv": [ + 7, + 13, + 9, + 15 + ], + "texture": "#torch", + "tintindex": 0 + }, + "up": { + "uv": [ + 7, + 6, + 9, + 8 + ], + "texture": "#torch", + "tintindex": 0 + } + } + }, + { + "from": [ + 7, + 0, + 0 + ], + "to": [ + 9, + 16, + 16 + ], + "shade": false, + "faces": { + "west": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#torch", + "tintindex": 0 + }, + "east": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#torch", + "tintindex": 0 + } + } + }, + { + "from": [ + 0, + 0, + 7 + ], + "to": [ + 16, + 16, + 9 + ], + "shade": false, + "faces": { + "north": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#torch", + "tintindex": 0 + }, + "south": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#torch", + "tintindex": 0 + } + } + } + ] +} diff --git a/src/main/resources/assets/growthcraft_apiary/models/block/candle_black.json b/src/main/resources/assets/growthcraft_apiary/models/block/candle_black.json new file mode 100644 index 0000000..7c6241d --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/models/block/candle_black.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_torch", + "textures": { + "torch": "minecraft:block/torch" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/models/block/candle_black_wall.json b/src/main/resources/assets/growthcraft_apiary/models/block/candle_black_wall.json new file mode 100644 index 0000000..e30eec7 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/models/block/candle_black_wall.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_torch_wall", + "textures": { + "torch": "minecraft:block/torch" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/models/block/candle_blue.json b/src/main/resources/assets/growthcraft_apiary/models/block/candle_blue.json new file mode 100644 index 0000000..7cca66f --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/models/block/candle_blue.json @@ -0,0 +1,114 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "#torch", + "torch": "minecraft:block/torch" + }, + "elements": [ + { + "from": [ + 7, + 0, + 7 + ], + "to": [ + 9, + 10, + 9 + ], + "shade": false, + "faces": { + "down": { + "uv": [ + 7, + 13, + 9, + 15 + ], + "texture": "#torch", + "tintindex": 0 + }, + "up": { + "uv": [ + 7, + 6, + 9, + 8 + ], + "texture": "#torch", + "tintindex": 0 + } + } + }, + { + "from": [ + 7, + 0, + 0 + ], + "to": [ + 9, + 16, + 16 + ], + "shade": false, + "faces": { + "west": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#torch", + "tintindex": 0 + }, + "east": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#torch", + "tintindex": 0 + } + } + }, + { + "from": [ + 0, + 0, + 7 + ], + "to": [ + 16, + 16, + 9 + ], + "shade": false, + "faces": { + "north": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#torch", + "tintindex": 0 + }, + "south": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#torch", + "tintindex": 0 + } + } + } + ] +} diff --git a/src/main/resources/assets/growthcraft_apiary/models/block/candle_blue_wall.json b/src/main/resources/assets/growthcraft_apiary/models/block/candle_blue_wall.json new file mode 100644 index 0000000..fa1ecc5 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/models/block/candle_blue_wall.json @@ -0,0 +1,141 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "#torch", + "torch": "minecraft:block/torch" + }, + "elements": [ + { + "from": [ + -1, + 3.5, + 7 + ], + "to": [ + 1, + 13.5, + 9 + ], + "rotation": { + "origin": [ + 0, + 3.5, + 8 + ], + "axis": "z", + "angle": -22.5 + }, + "shade": false, + "faces": { + "down": { + "uv": [ + 7, + 13, + 9, + 15 + ], + "texture": "#torch", + "tintindex": 0 + }, + "up": { + "uv": [ + 7, + 6, + 9, + 8 + ], + "texture": "#torch", + "tintindex": 0 + } + } + }, + { + "from": [ + -1, + 3.5, + 0 + ], + "to": [ + 1, + 19.5, + 16 + ], + "rotation": { + "origin": [ + 0, + 3.5, + 8 + ], + "axis": "z", + "angle": -22.5 + }, + "shade": false, + "faces": { + "west": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#torch", + "tintindex": 0 + }, + "east": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#torch", + "tintindex": 0 + } + } + }, + { + "from": [ + -8, + 3.5, + 7 + ], + "to": [ + 8, + 19.5, + 9 + ], + "rotation": { + "origin": [ + 0, + 3.5, + 8 + ], + "axis": "z", + "angle": -22.5 + }, + "shade": false, + "faces": { + "north": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#torch", + "tintindex": 0 + }, + "south": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#torch", + "tintindex": 0 + } + } + } + ] +} diff --git a/src/main/resources/assets/growthcraft_apiary/models/block/candle_wall.json b/src/main/resources/assets/growthcraft_apiary/models/block/candle_wall.json new file mode 100644 index 0000000..90993eb --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/models/block/candle_wall.json @@ -0,0 +1,141 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "#torch", + "torch": "growthcraft_apiary:block/candle_simple" + }, + "elements": [ + { + "from": [ + -1, + 3.5, + 7 + ], + "to": [ + 1, + 13.5, + 9 + ], + "rotation": { + "origin": [ + 0, + 3.5, + 8 + ], + "axis": "z", + "angle": -22.5 + }, + "shade": false, + "faces": { + "down": { + "uv": [ + 7, + 13, + 9, + 15 + ], + "texture": "#torch", + "tintindex": 0 + }, + "up": { + "uv": [ + 7, + 6, + 9, + 8 + ], + "texture": "#torch", + "tintindex": 0 + } + } + }, + { + "from": [ + -1, + 3.5, + 0 + ], + "to": [ + 1, + 19.5, + 16 + ], + "rotation": { + "origin": [ + 0, + 3.5, + 8 + ], + "axis": "z", + "angle": -22.5 + }, + "shade": false, + "faces": { + "west": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#torch", + "tintindex": 0 + }, + "east": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#torch", + "tintindex": 0 + } + } + }, + { + "from": [ + -8, + 3.5, + 7 + ], + "to": [ + 8, + 19.5, + 9 + ], + "rotation": { + "origin": [ + 0, + 3.5, + 8 + ], + "axis": "z", + "angle": -22.5 + }, + "shade": false, + "faces": { + "north": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#torch", + "tintindex": 0 + }, + "south": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#torch", + "tintindex": 0 + } + } + } + ] +} diff --git a/src/main/resources/assets/growthcraft_apiary/models/block/wax_black.json b/src/main/resources/assets/growthcraft_apiary/models/block/wax_black.json new file mode 100644 index 0000000..10a6702 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/models/block/wax_black.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "minecraft:block/water_overlay" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/models/block/wax_default.json b/src/main/resources/assets/growthcraft_apiary/models/block/wax_default.json new file mode 100644 index 0000000..10a6702 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/models/block/wax_default.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "minecraft:block/water_overlay" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/models/item/bee.json b/src/main/resources/assets/growthcraft_apiary/models/item/bee.json new file mode 100644 index 0000000..0a5bc1c --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/models/item/bee.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_apiary:item/bee" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/models/item/bee_box_acacia.json b/src/main/resources/assets/growthcraft_apiary/models/item/bee_box_acacia.json new file mode 100644 index 0000000..e9d03d4 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/models/item/bee_box_acacia.json @@ -0,0 +1,3 @@ +{ + "parent": "growthcraft_apiary:block/bee_box_acacia" +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/models/item/bee_box_birch.json b/src/main/resources/assets/growthcraft_apiary/models/item/bee_box_birch.json new file mode 100644 index 0000000..fc7e18a --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/models/item/bee_box_birch.json @@ -0,0 +1,3 @@ +{ + "parent": "growthcraft_apiary:block/bee_box_birch" +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/models/item/bee_box_crimson.json b/src/main/resources/assets/growthcraft_apiary/models/item/bee_box_crimson.json new file mode 100644 index 0000000..76df9fa --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/models/item/bee_box_crimson.json @@ -0,0 +1,3 @@ +{ + "parent": "growthcraft_apiary:block/bee_box_crimson" +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/models/item/bee_box_dark_oak.json b/src/main/resources/assets/growthcraft_apiary/models/item/bee_box_dark_oak.json new file mode 100644 index 0000000..db93add --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/models/item/bee_box_dark_oak.json @@ -0,0 +1,3 @@ +{ + "parent": "growthcraft_apiary:block/bee_box_dark_oak" +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/models/item/bee_box_jungle.json b/src/main/resources/assets/growthcraft_apiary/models/item/bee_box_jungle.json new file mode 100644 index 0000000..700aae7 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/models/item/bee_box_jungle.json @@ -0,0 +1,3 @@ +{ + "parent": "growthcraft_apiary:block/bee_box_jungle" +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/models/item/bee_box_oak.json b/src/main/resources/assets/growthcraft_apiary/models/item/bee_box_oak.json new file mode 100644 index 0000000..886a848 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/models/item/bee_box_oak.json @@ -0,0 +1,3 @@ +{ + "parent": "growthcraft_apiary:block/bee_box_oak" +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/models/item/bee_box_spruce.json b/src/main/resources/assets/growthcraft_apiary/models/item/bee_box_spruce.json new file mode 100644 index 0000000..ee95089 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/models/item/bee_box_spruce.json @@ -0,0 +1,3 @@ +{ + "parent": "growthcraft_apiary:block/bee_box_spruce" +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/models/item/bee_box_warped.json b/src/main/resources/assets/growthcraft_apiary/models/item/bee_box_warped.json new file mode 100644 index 0000000..5673d32 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/models/item/bee_box_warped.json @@ -0,0 +1,3 @@ +{ + "parent": "growthcraft_apiary:block/bee_box_warped" +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/models/item/bees_wax.json b/src/main/resources/assets/growthcraft_apiary/models/item/bees_wax.json new file mode 100644 index 0000000..618ab12 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/models/item/bees_wax.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_apiary:item/bees_wax/base" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/models/item/bees_wax_black.json b/src/main/resources/assets/growthcraft_apiary/models/item/bees_wax_black.json new file mode 100644 index 0000000..d05bd40 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/models/item/bees_wax_black.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_apiary:item/bees_wax/black" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/models/item/bees_wax_blue.json b/src/main/resources/assets/growthcraft_apiary/models/item/bees_wax_blue.json new file mode 100644 index 0000000..f950334 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/models/item/bees_wax_blue.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_apiary:item/bees_wax/blue" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/models/item/bees_wax_brown.json b/src/main/resources/assets/growthcraft_apiary/models/item/bees_wax_brown.json new file mode 100644 index 0000000..3e345cc --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/models/item/bees_wax_brown.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_apiary:item/bees_wax/brown" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/models/item/bees_wax_cyan.json b/src/main/resources/assets/growthcraft_apiary/models/item/bees_wax_cyan.json new file mode 100644 index 0000000..9d33380 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/models/item/bees_wax_cyan.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_apiary:item/bees_wax/cyan" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/models/item/bees_wax_gray.json b/src/main/resources/assets/growthcraft_apiary/models/item/bees_wax_gray.json new file mode 100644 index 0000000..e2fbc3e --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/models/item/bees_wax_gray.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_apiary:item/bees_wax/gray" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/models/item/bees_wax_green.json b/src/main/resources/assets/growthcraft_apiary/models/item/bees_wax_green.json new file mode 100644 index 0000000..2a059ae --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/models/item/bees_wax_green.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_apiary:item/bees_wax/green" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/models/item/bees_wax_light_blue.json b/src/main/resources/assets/growthcraft_apiary/models/item/bees_wax_light_blue.json new file mode 100644 index 0000000..1ec1f36 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/models/item/bees_wax_light_blue.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_apiary:item/bees_wax/light_blue" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/models/item/bees_wax_light_gray.json b/src/main/resources/assets/growthcraft_apiary/models/item/bees_wax_light_gray.json new file mode 100644 index 0000000..8aff83d --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/models/item/bees_wax_light_gray.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_apiary:item/bees_wax/silver" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/models/item/bees_wax_lime.json b/src/main/resources/assets/growthcraft_apiary/models/item/bees_wax_lime.json new file mode 100644 index 0000000..61d016e --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/models/item/bees_wax_lime.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_apiary:item/bees_wax/lime" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/models/item/bees_wax_magenta.json b/src/main/resources/assets/growthcraft_apiary/models/item/bees_wax_magenta.json new file mode 100644 index 0000000..67c5f56 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/models/item/bees_wax_magenta.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_apiary:item/bees_wax/magenta" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/models/item/bees_wax_orange.json b/src/main/resources/assets/growthcraft_apiary/models/item/bees_wax_orange.json new file mode 100644 index 0000000..a9d3508 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/models/item/bees_wax_orange.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_apiary:item/bees_wax/orange" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/models/item/bees_wax_pink.json b/src/main/resources/assets/growthcraft_apiary/models/item/bees_wax_pink.json new file mode 100644 index 0000000..8a43a9a --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/models/item/bees_wax_pink.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_apiary:item/bees_wax/pink" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/models/item/bees_wax_purple.json b/src/main/resources/assets/growthcraft_apiary/models/item/bees_wax_purple.json new file mode 100644 index 0000000..a723331 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/models/item/bees_wax_purple.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_apiary:item/bees_wax/purple" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/models/item/bees_wax_red.json b/src/main/resources/assets/growthcraft_apiary/models/item/bees_wax_red.json new file mode 100644 index 0000000..0c3482f --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/models/item/bees_wax_red.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_apiary:item/bees_wax/red" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/models/item/bees_wax_white.json b/src/main/resources/assets/growthcraft_apiary/models/item/bees_wax_white.json new file mode 100644 index 0000000..3e1956c --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/models/item/bees_wax_white.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_apiary:item/bees_wax/white" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/models/item/bees_wax_yellow.json b/src/main/resources/assets/growthcraft_apiary/models/item/bees_wax_yellow.json new file mode 100644 index 0000000..ad4766f --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/models/item/bees_wax_yellow.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_apiary:item/bees_wax/yellow" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/models/item/candle_black.json b/src/main/resources/assets/growthcraft_apiary/models/item/candle_black.json new file mode 100644 index 0000000..d795627 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/models/item/candle_black.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "growthcraft_apiary:block/candle_simple" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/models/item/candle_blue.json b/src/main/resources/assets/growthcraft_apiary/models/item/candle_blue.json new file mode 100644 index 0000000..d795627 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/models/item/candle_blue.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "growthcraft_apiary:block/candle_simple" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/models/item/candle_brown.json b/src/main/resources/assets/growthcraft_apiary/models/item/candle_brown.json new file mode 100644 index 0000000..142ff24 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/models/item/candle_brown.json @@ -0,0 +1,3 @@ +{ + "parent": "growthcraft_apiary:block/candle" +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/models/item/candle_cyan.json b/src/main/resources/assets/growthcraft_apiary/models/item/candle_cyan.json new file mode 100644 index 0000000..142ff24 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/models/item/candle_cyan.json @@ -0,0 +1,3 @@ +{ + "parent": "growthcraft_apiary:block/candle" +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/models/item/candle_gray.json b/src/main/resources/assets/growthcraft_apiary/models/item/candle_gray.json new file mode 100644 index 0000000..142ff24 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/models/item/candle_gray.json @@ -0,0 +1,3 @@ +{ + "parent": "growthcraft_apiary:block/candle" +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/models/item/candle_green.json b/src/main/resources/assets/growthcraft_apiary/models/item/candle_green.json new file mode 100644 index 0000000..142ff24 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/models/item/candle_green.json @@ -0,0 +1,3 @@ +{ + "parent": "growthcraft_apiary:block/candle" +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/models/item/candle_light_blue.json b/src/main/resources/assets/growthcraft_apiary/models/item/candle_light_blue.json new file mode 100644 index 0000000..142ff24 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/models/item/candle_light_blue.json @@ -0,0 +1,3 @@ +{ + "parent": "growthcraft_apiary:block/candle" +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/models/item/candle_light_gray.json b/src/main/resources/assets/growthcraft_apiary/models/item/candle_light_gray.json new file mode 100644 index 0000000..142ff24 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/models/item/candle_light_gray.json @@ -0,0 +1,3 @@ +{ + "parent": "growthcraft_apiary:block/candle" +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/models/item/candle_lime.json b/src/main/resources/assets/growthcraft_apiary/models/item/candle_lime.json new file mode 100644 index 0000000..142ff24 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/models/item/candle_lime.json @@ -0,0 +1,3 @@ +{ + "parent": "growthcraft_apiary:block/candle" +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/models/item/candle_magenta.json b/src/main/resources/assets/growthcraft_apiary/models/item/candle_magenta.json new file mode 100644 index 0000000..142ff24 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/models/item/candle_magenta.json @@ -0,0 +1,3 @@ +{ + "parent": "growthcraft_apiary:block/candle" +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/models/item/candle_orange.json b/src/main/resources/assets/growthcraft_apiary/models/item/candle_orange.json new file mode 100644 index 0000000..142ff24 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/models/item/candle_orange.json @@ -0,0 +1,3 @@ +{ + "parent": "growthcraft_apiary:block/candle" +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/models/item/candle_pink.json b/src/main/resources/assets/growthcraft_apiary/models/item/candle_pink.json new file mode 100644 index 0000000..142ff24 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/models/item/candle_pink.json @@ -0,0 +1,3 @@ +{ + "parent": "growthcraft_apiary:block/candle" +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/models/item/candle_purple.json b/src/main/resources/assets/growthcraft_apiary/models/item/candle_purple.json new file mode 100644 index 0000000..142ff24 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/models/item/candle_purple.json @@ -0,0 +1,3 @@ +{ + "parent": "growthcraft_apiary:block/candle" +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/models/item/candle_red.json b/src/main/resources/assets/growthcraft_apiary/models/item/candle_red.json new file mode 100644 index 0000000..142ff24 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/models/item/candle_red.json @@ -0,0 +1,3 @@ +{ + "parent": "growthcraft_apiary:block/candle" +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/models/item/candle_white.json b/src/main/resources/assets/growthcraft_apiary/models/item/candle_white.json new file mode 100644 index 0000000..142ff24 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/models/item/candle_white.json @@ -0,0 +1,3 @@ +{ + "parent": "growthcraft_apiary:block/candle" +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/models/item/candle_yellow.json b/src/main/resources/assets/growthcraft_apiary/models/item/candle_yellow.json new file mode 100644 index 0000000..142ff24 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/models/item/candle_yellow.json @@ -0,0 +1,3 @@ +{ + "parent": "growthcraft_apiary:block/candle" +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/models/item/honey_comb_empty.json b/src/main/resources/assets/growthcraft_apiary/models/item/honey_comb_empty.json new file mode 100644 index 0000000..6d553a0 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/models/item/honey_comb_empty.json @@ -0,0 +1,6 @@ +{ + "parent": "item/handheld", + "textures": { + "layer0": "growthcraft_apiary:item/honey_comb_empty" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/models/item/honey_comb_full.json b/src/main/resources/assets/growthcraft_apiary/models/item/honey_comb_full.json new file mode 100644 index 0000000..9c71c49 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/models/item/honey_comb_full.json @@ -0,0 +1,6 @@ +{ + "parent": "item/handheld", + "textures": { + "layer0": "growthcraft_apiary:item/honey_comb_full" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/models/item/honey_fluid_bucket.json b/src/main/resources/assets/growthcraft_apiary/models/item/honey_fluid_bucket.json new file mode 100644 index 0000000..7001616 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/models/item/honey_fluid_bucket.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "growthcraft_apiary:item/bucket/bucket_fluid", + "layer1": "growthcraft_apiary:item/bucket/bucket_base" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/models/item/honey_mead_fluid_bucket.json b/src/main/resources/assets/growthcraft_apiary/models/item/honey_mead_fluid_bucket.json new file mode 100644 index 0000000..7001616 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/models/item/honey_mead_fluid_bucket.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "growthcraft_apiary:item/bucket/bucket_fluid", + "layer1": "growthcraft_apiary:item/bucket/bucket_base" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/models/item/honey_mead_must_fluid_bucket.json b/src/main/resources/assets/growthcraft_apiary/models/item/honey_mead_must_fluid_bucket.json new file mode 100644 index 0000000..7001616 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/models/item/honey_mead_must_fluid_bucket.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "growthcraft_apiary:item/bucket/bucket_fluid", + "layer1": "growthcraft_apiary:item/bucket/bucket_base" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/models/item/wax_black_bucket.json b/src/main/resources/assets/growthcraft_apiary/models/item/wax_black_bucket.json new file mode 100644 index 0000000..a89366b --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/models/item/wax_black_bucket.json @@ -0,0 +1,7 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_apiary:item/bucket/bucket_fluid", + "layer1": "growthcraft_apiary:item/bucket/bucket_base" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/models/item/wax_blue_bucket.json b/src/main/resources/assets/growthcraft_apiary/models/item/wax_blue_bucket.json new file mode 100644 index 0000000..a89366b --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/models/item/wax_blue_bucket.json @@ -0,0 +1,7 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_apiary:item/bucket/bucket_fluid", + "layer1": "growthcraft_apiary:item/bucket/bucket_base" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/models/item/wax_brown_bucket.json b/src/main/resources/assets/growthcraft_apiary/models/item/wax_brown_bucket.json new file mode 100644 index 0000000..a89366b --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/models/item/wax_brown_bucket.json @@ -0,0 +1,7 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_apiary:item/bucket/bucket_fluid", + "layer1": "growthcraft_apiary:item/bucket/bucket_base" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/models/item/wax_cyan_bucket.json b/src/main/resources/assets/growthcraft_apiary/models/item/wax_cyan_bucket.json new file mode 100644 index 0000000..a89366b --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/models/item/wax_cyan_bucket.json @@ -0,0 +1,7 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_apiary:item/bucket/bucket_fluid", + "layer1": "growthcraft_apiary:item/bucket/bucket_base" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/models/item/wax_gray_bucket.json b/src/main/resources/assets/growthcraft_apiary/models/item/wax_gray_bucket.json new file mode 100644 index 0000000..a89366b --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/models/item/wax_gray_bucket.json @@ -0,0 +1,7 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_apiary:item/bucket/bucket_fluid", + "layer1": "growthcraft_apiary:item/bucket/bucket_base" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/models/item/wax_green_bucket.json b/src/main/resources/assets/growthcraft_apiary/models/item/wax_green_bucket.json new file mode 100644 index 0000000..a89366b --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/models/item/wax_green_bucket.json @@ -0,0 +1,7 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_apiary:item/bucket/bucket_fluid", + "layer1": "growthcraft_apiary:item/bucket/bucket_base" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/models/item/wax_light_blue_bucket.json b/src/main/resources/assets/growthcraft_apiary/models/item/wax_light_blue_bucket.json new file mode 100644 index 0000000..a89366b --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/models/item/wax_light_blue_bucket.json @@ -0,0 +1,7 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_apiary:item/bucket/bucket_fluid", + "layer1": "growthcraft_apiary:item/bucket/bucket_base" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/models/item/wax_light_gray_bucket.json b/src/main/resources/assets/growthcraft_apiary/models/item/wax_light_gray_bucket.json new file mode 100644 index 0000000..a89366b --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/models/item/wax_light_gray_bucket.json @@ -0,0 +1,7 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_apiary:item/bucket/bucket_fluid", + "layer1": "growthcraft_apiary:item/bucket/bucket_base" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/models/item/wax_lime_bucket.json b/src/main/resources/assets/growthcraft_apiary/models/item/wax_lime_bucket.json new file mode 100644 index 0000000..a89366b --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/models/item/wax_lime_bucket.json @@ -0,0 +1,7 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_apiary:item/bucket/bucket_fluid", + "layer1": "growthcraft_apiary:item/bucket/bucket_base" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/models/item/wax_magenta_bucket.json b/src/main/resources/assets/growthcraft_apiary/models/item/wax_magenta_bucket.json new file mode 100644 index 0000000..a89366b --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/models/item/wax_magenta_bucket.json @@ -0,0 +1,7 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_apiary:item/bucket/bucket_fluid", + "layer1": "growthcraft_apiary:item/bucket/bucket_base" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/models/item/wax_orange_bucket.json b/src/main/resources/assets/growthcraft_apiary/models/item/wax_orange_bucket.json new file mode 100644 index 0000000..a89366b --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/models/item/wax_orange_bucket.json @@ -0,0 +1,7 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_apiary:item/bucket/bucket_fluid", + "layer1": "growthcraft_apiary:item/bucket/bucket_base" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/models/item/wax_pink_bucket.json b/src/main/resources/assets/growthcraft_apiary/models/item/wax_pink_bucket.json new file mode 100644 index 0000000..a89366b --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/models/item/wax_pink_bucket.json @@ -0,0 +1,7 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_apiary:item/bucket/bucket_fluid", + "layer1": "growthcraft_apiary:item/bucket/bucket_base" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/models/item/wax_purple_bucket.json b/src/main/resources/assets/growthcraft_apiary/models/item/wax_purple_bucket.json new file mode 100644 index 0000000..a89366b --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/models/item/wax_purple_bucket.json @@ -0,0 +1,7 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_apiary:item/bucket/bucket_fluid", + "layer1": "growthcraft_apiary:item/bucket/bucket_base" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/models/item/wax_red_bucket.json b/src/main/resources/assets/growthcraft_apiary/models/item/wax_red_bucket.json new file mode 100644 index 0000000..a89366b --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/models/item/wax_red_bucket.json @@ -0,0 +1,7 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_apiary:item/bucket/bucket_fluid", + "layer1": "growthcraft_apiary:item/bucket/bucket_base" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/models/item/wax_white_bucket.json b/src/main/resources/assets/growthcraft_apiary/models/item/wax_white_bucket.json new file mode 100644 index 0000000..a89366b --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/models/item/wax_white_bucket.json @@ -0,0 +1,7 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_apiary:item/bucket/bucket_fluid", + "layer1": "growthcraft_apiary:item/bucket/bucket_base" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/models/item/wax_yellow_bucket.json b/src/main/resources/assets/growthcraft_apiary/models/item/wax_yellow_bucket.json new file mode 100644 index 0000000..a89366b --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/models/item/wax_yellow_bucket.json @@ -0,0 +1,7 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_apiary:item/bucket/bucket_fluid", + "layer1": "growthcraft_apiary:item/bucket/bucket_base" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/textures/block/bee_box/bee_box.png b/src/main/resources/assets/growthcraft_apiary/textures/block/bee_box/bee_box.png new file mode 100644 index 0000000..6ef20ed Binary files /dev/null and b/src/main/resources/assets/growthcraft_apiary/textures/block/bee_box/bee_box.png differ diff --git a/src/main/resources/assets/growthcraft_apiary/textures/block/bee_box/bee_box.psd b/src/main/resources/assets/growthcraft_apiary/textures/block/bee_box/bee_box.psd new file mode 100644 index 0000000..d0b3c2b Binary files /dev/null and b/src/main/resources/assets/growthcraft_apiary/textures/block/bee_box/bee_box.psd differ diff --git a/src/main/resources/assets/growthcraft_apiary/textures/block/bee_box/bee_box_bottom.png b/src/main/resources/assets/growthcraft_apiary/textures/block/bee_box/bee_box_bottom.png new file mode 100644 index 0000000..92c14db Binary files /dev/null and b/src/main/resources/assets/growthcraft_apiary/textures/block/bee_box/bee_box_bottom.png differ diff --git a/src/main/resources/assets/growthcraft_apiary/textures/block/bee_box/bee_box_front.png b/src/main/resources/assets/growthcraft_apiary/textures/block/bee_box/bee_box_front.png new file mode 100644 index 0000000..535443a Binary files /dev/null and b/src/main/resources/assets/growthcraft_apiary/textures/block/bee_box/bee_box_front.png differ diff --git a/src/main/resources/assets/growthcraft_apiary/textures/block/bee_box/bee_box_side.png b/src/main/resources/assets/growthcraft_apiary/textures/block/bee_box/bee_box_side.png new file mode 100644 index 0000000..acf3cb5 Binary files /dev/null and b/src/main/resources/assets/growthcraft_apiary/textures/block/bee_box/bee_box_side.png differ diff --git a/src/main/resources/assets/growthcraft_apiary/textures/block/bee_box/bee_box_top.png b/src/main/resources/assets/growthcraft_apiary/textures/block/bee_box/bee_box_top.png new file mode 100644 index 0000000..c443fc5 Binary files /dev/null and b/src/main/resources/assets/growthcraft_apiary/textures/block/bee_box/bee_box_top.png differ diff --git a/src/main/resources/assets/growthcraft_apiary/textures/block/beehive_front.png b/src/main/resources/assets/growthcraft_apiary/textures/block/beehive_front.png new file mode 100644 index 0000000..71f405b Binary files /dev/null and b/src/main/resources/assets/growthcraft_apiary/textures/block/beehive_front.png differ diff --git a/src/main/resources/assets/growthcraft_apiary/textures/block/beehive_sides.png b/src/main/resources/assets/growthcraft_apiary/textures/block/beehive_sides.png new file mode 100644 index 0000000..0e6fea7 Binary files /dev/null and b/src/main/resources/assets/growthcraft_apiary/textures/block/beehive_sides.png differ diff --git a/src/main/resources/assets/growthcraft_apiary/textures/block/candle_simple.png b/src/main/resources/assets/growthcraft_apiary/textures/block/candle_simple.png new file mode 100644 index 0000000..a3f9f6b Binary files /dev/null and b/src/main/resources/assets/growthcraft_apiary/textures/block/candle_simple.png differ diff --git a/src/main/resources/assets/growthcraft_apiary/textures/block/candles/candle_base.png b/src/main/resources/assets/growthcraft_apiary/textures/block/candles/candle_base.png new file mode 100644 index 0000000..b1a6d3c Binary files /dev/null and b/src/main/resources/assets/growthcraft_apiary/textures/block/candles/candle_base.png differ diff --git a/src/main/resources/assets/growthcraft_apiary/textures/block/candles/candle_top.png b/src/main/resources/assets/growthcraft_apiary/textures/block/candles/candle_top.png new file mode 100644 index 0000000..14bd2d7 Binary files /dev/null and b/src/main/resources/assets/growthcraft_apiary/textures/block/candles/candle_top.png differ diff --git a/src/main/resources/assets/growthcraft_apiary/textures/block/fluid/honey_fluid.png b/src/main/resources/assets/growthcraft_apiary/textures/block/fluid/honey_fluid.png new file mode 100644 index 0000000..c6f2fa9 Binary files /dev/null and b/src/main/resources/assets/growthcraft_apiary/textures/block/fluid/honey_fluid.png differ diff --git a/src/main/resources/assets/growthcraft_apiary/textures/block/fluid/honey_fluid_flowing.png b/src/main/resources/assets/growthcraft_apiary/textures/block/fluid/honey_fluid_flowing.png new file mode 100644 index 0000000..5b12070 Binary files /dev/null and b/src/main/resources/assets/growthcraft_apiary/textures/block/fluid/honey_fluid_flowing.png differ diff --git a/src/main/resources/assets/growthcraft_apiary/textures/block/fluid/honey_fluid_flowing.png.mcmeta b/src/main/resources/assets/growthcraft_apiary/textures/block/fluid/honey_fluid_flowing.png.mcmeta new file mode 100644 index 0000000..4f0718a --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/textures/block/fluid/honey_fluid_flowing.png.mcmeta @@ -0,0 +1,3 @@ +{ + "animation": {} +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/textures/block/fluid/honey_fluid_overlay.png b/src/main/resources/assets/growthcraft_apiary/textures/block/fluid/honey_fluid_overlay.png new file mode 100644 index 0000000..d5d4b02 Binary files /dev/null and b/src/main/resources/assets/growthcraft_apiary/textures/block/fluid/honey_fluid_overlay.png differ diff --git a/src/main/resources/assets/growthcraft_apiary/textures/block/fluid/honey_fluid_still.png b/src/main/resources/assets/growthcraft_apiary/textures/block/fluid/honey_fluid_still.png new file mode 100644 index 0000000..fe5c394 Binary files /dev/null and b/src/main/resources/assets/growthcraft_apiary/textures/block/fluid/honey_fluid_still.png differ diff --git a/src/main/resources/assets/growthcraft_apiary/textures/block/fluid/honey_fluid_still.png.mcmeta b/src/main/resources/assets/growthcraft_apiary/textures/block/fluid/honey_fluid_still.png.mcmeta new file mode 100644 index 0000000..0645f48 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/textures/block/fluid/honey_fluid_still.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 2 + } +} diff --git a/src/main/resources/assets/growthcraft_apiary/textures/block/fluid/honey_mead_fluid.png b/src/main/resources/assets/growthcraft_apiary/textures/block/fluid/honey_mead_fluid.png new file mode 100644 index 0000000..c6f2fa9 Binary files /dev/null and b/src/main/resources/assets/growthcraft_apiary/textures/block/fluid/honey_mead_fluid.png differ diff --git a/src/main/resources/assets/growthcraft_apiary/textures/block/fluid/honey_mead_fluid_flowing.png b/src/main/resources/assets/growthcraft_apiary/textures/block/fluid/honey_mead_fluid_flowing.png new file mode 100644 index 0000000..5b12070 Binary files /dev/null and b/src/main/resources/assets/growthcraft_apiary/textures/block/fluid/honey_mead_fluid_flowing.png differ diff --git a/src/main/resources/assets/growthcraft_apiary/textures/block/fluid/honey_mead_fluid_flowing.png.mcmeta b/src/main/resources/assets/growthcraft_apiary/textures/block/fluid/honey_mead_fluid_flowing.png.mcmeta new file mode 100644 index 0000000..4f0718a --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/textures/block/fluid/honey_mead_fluid_flowing.png.mcmeta @@ -0,0 +1,3 @@ +{ + "animation": {} +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apiary/textures/block/fluid/honey_mead_fluid_overlay.png b/src/main/resources/assets/growthcraft_apiary/textures/block/fluid/honey_mead_fluid_overlay.png new file mode 100644 index 0000000..d5d4b02 Binary files /dev/null and b/src/main/resources/assets/growthcraft_apiary/textures/block/fluid/honey_mead_fluid_overlay.png differ diff --git a/src/main/resources/assets/growthcraft_apiary/textures/block/fluid/honey_mead_fluid_still.png b/src/main/resources/assets/growthcraft_apiary/textures/block/fluid/honey_mead_fluid_still.png new file mode 100644 index 0000000..fe5c394 Binary files /dev/null and b/src/main/resources/assets/growthcraft_apiary/textures/block/fluid/honey_mead_fluid_still.png differ diff --git a/src/main/resources/assets/growthcraft_apiary/textures/block/fluid/honey_mead_fluid_still.png.mcmeta b/src/main/resources/assets/growthcraft_apiary/textures/block/fluid/honey_mead_fluid_still.png.mcmeta new file mode 100644 index 0000000..0645f48 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apiary/textures/block/fluid/honey_mead_fluid_still.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 2 + } +} diff --git a/src/main/resources/assets/growthcraft_apiary/textures/gui/bee_box.png b/src/main/resources/assets/growthcraft_apiary/textures/gui/bee_box.png new file mode 100644 index 0000000..42aa645 Binary files /dev/null and b/src/main/resources/assets/growthcraft_apiary/textures/gui/bee_box.png differ diff --git a/src/main/resources/assets/growthcraft_apiary/textures/item/bee.png b/src/main/resources/assets/growthcraft_apiary/textures/item/bee.png new file mode 100644 index 0000000..40e8026 Binary files /dev/null and b/src/main/resources/assets/growthcraft_apiary/textures/item/bee.png differ diff --git a/src/main/resources/assets/growthcraft_apiary/textures/item/bees_wax/base.png b/src/main/resources/assets/growthcraft_apiary/textures/item/bees_wax/base.png new file mode 100644 index 0000000..f2204dd Binary files /dev/null and b/src/main/resources/assets/growthcraft_apiary/textures/item/bees_wax/base.png differ diff --git a/src/main/resources/assets/growthcraft_apiary/textures/item/bees_wax/black.png b/src/main/resources/assets/growthcraft_apiary/textures/item/bees_wax/black.png new file mode 100644 index 0000000..f4b1293 Binary files /dev/null and b/src/main/resources/assets/growthcraft_apiary/textures/item/bees_wax/black.png differ diff --git a/src/main/resources/assets/growthcraft_apiary/textures/item/bees_wax/blue.png b/src/main/resources/assets/growthcraft_apiary/textures/item/bees_wax/blue.png new file mode 100644 index 0000000..335eb04 Binary files /dev/null and b/src/main/resources/assets/growthcraft_apiary/textures/item/bees_wax/blue.png differ diff --git a/src/main/resources/assets/growthcraft_apiary/textures/item/bees_wax/brown.png b/src/main/resources/assets/growthcraft_apiary/textures/item/bees_wax/brown.png new file mode 100644 index 0000000..f3accaf Binary files /dev/null and b/src/main/resources/assets/growthcraft_apiary/textures/item/bees_wax/brown.png differ diff --git a/src/main/resources/assets/growthcraft_apiary/textures/item/bees_wax/cyan.png b/src/main/resources/assets/growthcraft_apiary/textures/item/bees_wax/cyan.png new file mode 100644 index 0000000..73d5666 Binary files /dev/null and b/src/main/resources/assets/growthcraft_apiary/textures/item/bees_wax/cyan.png differ diff --git a/src/main/resources/assets/growthcraft_apiary/textures/item/bees_wax/gray.png b/src/main/resources/assets/growthcraft_apiary/textures/item/bees_wax/gray.png new file mode 100644 index 0000000..38faf79 Binary files /dev/null and b/src/main/resources/assets/growthcraft_apiary/textures/item/bees_wax/gray.png differ diff --git a/src/main/resources/assets/growthcraft_apiary/textures/item/bees_wax/green.png b/src/main/resources/assets/growthcraft_apiary/textures/item/bees_wax/green.png new file mode 100644 index 0000000..0985866 Binary files /dev/null and b/src/main/resources/assets/growthcraft_apiary/textures/item/bees_wax/green.png differ diff --git a/src/main/resources/assets/growthcraft_apiary/textures/item/bees_wax/light_blue.png b/src/main/resources/assets/growthcraft_apiary/textures/item/bees_wax/light_blue.png new file mode 100644 index 0000000..0c14518 Binary files /dev/null and b/src/main/resources/assets/growthcraft_apiary/textures/item/bees_wax/light_blue.png differ diff --git a/src/main/resources/assets/growthcraft_apiary/textures/item/bees_wax/lime.png b/src/main/resources/assets/growthcraft_apiary/textures/item/bees_wax/lime.png new file mode 100644 index 0000000..276c388 Binary files /dev/null and b/src/main/resources/assets/growthcraft_apiary/textures/item/bees_wax/lime.png differ diff --git a/src/main/resources/assets/growthcraft_apiary/textures/item/bees_wax/magenta.png b/src/main/resources/assets/growthcraft_apiary/textures/item/bees_wax/magenta.png new file mode 100644 index 0000000..5ba748d Binary files /dev/null and b/src/main/resources/assets/growthcraft_apiary/textures/item/bees_wax/magenta.png differ diff --git a/src/main/resources/assets/growthcraft_apiary/textures/item/bees_wax/orange.png b/src/main/resources/assets/growthcraft_apiary/textures/item/bees_wax/orange.png new file mode 100644 index 0000000..518528e Binary files /dev/null and b/src/main/resources/assets/growthcraft_apiary/textures/item/bees_wax/orange.png differ diff --git a/src/main/resources/assets/growthcraft_apiary/textures/item/bees_wax/pink.png b/src/main/resources/assets/growthcraft_apiary/textures/item/bees_wax/pink.png new file mode 100644 index 0000000..5e227b5 Binary files /dev/null and b/src/main/resources/assets/growthcraft_apiary/textures/item/bees_wax/pink.png differ diff --git a/src/main/resources/assets/growthcraft_apiary/textures/item/bees_wax/purple.png b/src/main/resources/assets/growthcraft_apiary/textures/item/bees_wax/purple.png new file mode 100644 index 0000000..6fc3992 Binary files /dev/null and b/src/main/resources/assets/growthcraft_apiary/textures/item/bees_wax/purple.png differ diff --git a/src/main/resources/assets/growthcraft_apiary/textures/item/bees_wax/red.png b/src/main/resources/assets/growthcraft_apiary/textures/item/bees_wax/red.png new file mode 100644 index 0000000..d5e5b3a Binary files /dev/null and b/src/main/resources/assets/growthcraft_apiary/textures/item/bees_wax/red.png differ diff --git a/src/main/resources/assets/growthcraft_apiary/textures/item/bees_wax/silver.png b/src/main/resources/assets/growthcraft_apiary/textures/item/bees_wax/silver.png new file mode 100644 index 0000000..ecc6678 Binary files /dev/null and b/src/main/resources/assets/growthcraft_apiary/textures/item/bees_wax/silver.png differ diff --git a/src/main/resources/assets/growthcraft_apiary/textures/item/bees_wax/white.png b/src/main/resources/assets/growthcraft_apiary/textures/item/bees_wax/white.png new file mode 100644 index 0000000..69bf723 Binary files /dev/null and b/src/main/resources/assets/growthcraft_apiary/textures/item/bees_wax/white.png differ diff --git a/src/main/resources/assets/growthcraft_apiary/textures/item/bees_wax/yellow.png b/src/main/resources/assets/growthcraft_apiary/textures/item/bees_wax/yellow.png new file mode 100644 index 0000000..f2204dd Binary files /dev/null and b/src/main/resources/assets/growthcraft_apiary/textures/item/bees_wax/yellow.png differ diff --git a/src/main/resources/assets/growthcraft_apiary/textures/item/bucket/bucket_base.png b/src/main/resources/assets/growthcraft_apiary/textures/item/bucket/bucket_base.png new file mode 100644 index 0000000..86e6a34 Binary files /dev/null and b/src/main/resources/assets/growthcraft_apiary/textures/item/bucket/bucket_base.png differ diff --git a/src/main/resources/assets/growthcraft_apiary/textures/item/bucket/bucket_fluid.png b/src/main/resources/assets/growthcraft_apiary/textures/item/bucket/bucket_fluid.png new file mode 100644 index 0000000..46b2121 Binary files /dev/null and b/src/main/resources/assets/growthcraft_apiary/textures/item/bucket/bucket_fluid.png differ diff --git a/src/main/resources/assets/growthcraft_apiary/textures/item/honey_comb_empty.png b/src/main/resources/assets/growthcraft_apiary/textures/item/honey_comb_empty.png new file mode 100644 index 0000000..14dcc43 Binary files /dev/null and b/src/main/resources/assets/growthcraft_apiary/textures/item/honey_comb_empty.png differ diff --git a/src/main/resources/assets/growthcraft_apiary/textures/item/honey_comb_full.png b/src/main/resources/assets/growthcraft_apiary/textures/item/honey_comb_full.png new file mode 100644 index 0000000..78bfc4e Binary files /dev/null and b/src/main/resources/assets/growthcraft_apiary/textures/item/honey_comb_full.png differ diff --git a/src/main/resources/assets/growthcraft_apiary/textures/item/honey_jar.png b/src/main/resources/assets/growthcraft_apiary/textures/item/honey_jar.png new file mode 100644 index 0000000..db3404b Binary files /dev/null and b/src/main/resources/assets/growthcraft_apiary/textures/item/honey_jar.png differ diff --git a/src/main/resources/assets/growthcraft_apiary/textures/patchouli/screenshots/recipe_candle.png b/src/main/resources/assets/growthcraft_apiary/textures/patchouli/screenshots/recipe_candle.png new file mode 100644 index 0000000..b24dce7 Binary files /dev/null and b/src/main/resources/assets/growthcraft_apiary/textures/patchouli/screenshots/recipe_candle.png differ diff --git a/src/main/resources/assets/growthcraft_apiary/textures/patchouli/screenshots/recipe_melted_wax.png b/src/main/resources/assets/growthcraft_apiary/textures/patchouli/screenshots/recipe_melted_wax.png new file mode 100644 index 0000000..4451864 Binary files /dev/null and b/src/main/resources/assets/growthcraft_apiary/textures/patchouli/screenshots/recipe_melted_wax.png differ diff --git a/src/main/resources/assets/growthcraft_apples/blockstates/apple_cider_fluid.json b/src/main/resources/assets/growthcraft_apples/blockstates/apple_cider_fluid.json new file mode 100644 index 0000000..31dc5fa --- /dev/null +++ b/src/main/resources/assets/growthcraft_apples/blockstates/apple_cider_fluid.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "growthcraft:block/fluid" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apples/blockstates/apple_juice_fluid.json b/src/main/resources/assets/growthcraft_apples/blockstates/apple_juice_fluid.json new file mode 100644 index 0000000..31dc5fa --- /dev/null +++ b/src/main/resources/assets/growthcraft_apples/blockstates/apple_juice_fluid.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "growthcraft:block/fluid" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apples/blockstates/apple_plank.json b/src/main/resources/assets/growthcraft_apples/blockstates/apple_plank.json new file mode 100644 index 0000000..e853d2a --- /dev/null +++ b/src/main/resources/assets/growthcraft_apples/blockstates/apple_plank.json @@ -0,0 +1,5 @@ +{ + "variants": { + "": { "model": "growthcraft_apples:block/apple_plank" } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apples/blockstates/apple_plank_button.json b/src/main/resources/assets/growthcraft_apples/blockstates/apple_plank_button.json new file mode 100644 index 0000000..4727e71 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apples/blockstates/apple_plank_button.json @@ -0,0 +1,28 @@ +{ + "variants": { + "face=floor,facing=east,powered=false": { "model": "growthcraft_apples:block/apple_plank_button", "y": 90 }, + "face=floor,facing=west,powered=false": { "model": "growthcraft_apples:block/apple_plank_button", "y": 270 }, + "face=floor,facing=south,powered=false": { "model": "growthcraft_apples:block/apple_plank_button", "y": 180 }, + "face=floor,facing=north,powered=false": { "model": "growthcraft_apples:block/apple_plank_button" }, + "face=wall,facing=east,powered=false": { "model": "growthcraft_apples:block/apple_plank_button", "uvlock": true, "x": 90, "y": 90 }, + "face=wall,facing=west,powered=false": { "model": "growthcraft_apples:block/apple_plank_button", "uvlock": true, "x": 90, "y": 270 }, + "face=wall,facing=south,powered=false": { "model": "growthcraft_apples:block/apple_plank_button", "uvlock": true, "x": 90, "y": 180 }, + "face=wall,facing=north,powered=false": { "model": "growthcraft_apples:block/apple_plank_button", "uvlock": true, "x": 90 }, + "face=ceiling,facing=east,powered=false": { "model": "growthcraft_apples:block/apple_plank_button", "x": 180, "y": 270 }, + "face=ceiling,facing=west,powered=false": { "model": "growthcraft_apples:block/apple_plank_button", "x": 180, "y": 90 }, + "face=ceiling,facing=south,powered=false": { "model": "growthcraft_apples:block/apple_plank_button", "x": 180 }, + "face=ceiling,facing=north,powered=false": { "model": "growthcraft_apples:block/apple_plank_button", "x": 180, "y": 180 }, + "face=floor,facing=east,powered=true": { "model": "growthcraft_apples:block/apple_plank_button_pressed", "y": 90 }, + "face=floor,facing=west,powered=true": { "model": "growthcraft_apples:block/apple_plank_button_pressed", "y": 270 }, + "face=floor,facing=south,powered=true": { "model": "growthcraft_apples:block/apple_plank_button_pressed", "y": 180 }, + "face=floor,facing=north,powered=true": { "model": "growthcraft_apples:block/apple_plank_button_pressed" }, + "face=wall,facing=east,powered=true": { "model": "growthcraft_apples:block/apple_plank_button_pressed", "uvlock": true, "x": 90, "y": 90 }, + "face=wall,facing=west,powered=true": { "model": "growthcraft_apples:block/apple_plank_button_pressed", "uvlock": true, "x": 90, "y": 270 }, + "face=wall,facing=south,powered=true": { "model": "growthcraft_apples:block/apple_plank_button_pressed", "uvlock": true, "x": 90, "y": 180 }, + "face=wall,facing=north,powered=true": { "model": "growthcraft_apples:block/apple_plank_button_pressed", "uvlock": true, "x": 90 }, + "face=ceiling,facing=east,powered=true": { "model": "growthcraft_apples:block/apple_plank_button_pressed", "x": 180, "y": 270 }, + "face=ceiling,facing=west,powered=true": { "model": "growthcraft_apples:block/apple_plank_button_pressed", "x": 180, "y": 90 }, + "face=ceiling,facing=south,powered=true": { "model": "growthcraft_apples:block/apple_plank_button_pressed", "x": 180 }, + "face=ceiling,facing=north,powered=true": { "model": "growthcraft_apples:block/apple_plank_button_pressed", "x": 180, "y": 180 } + } +} diff --git a/src/main/resources/assets/growthcraft_apples/blockstates/apple_plank_door.json b/src/main/resources/assets/growthcraft_apples/blockstates/apple_plank_door.json new file mode 100644 index 0000000..531dba0 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apples/blockstates/apple_plank_door.json @@ -0,0 +1,124 @@ +{ + "variants": { + "facing=east,half=lower,hinge=left,open=false": { + "model": "growthcraft_apples:block/apple_plank_door_bottom" + }, + "facing=south,half=lower,hinge=left,open=false": { + "model": "growthcraft_apples:block/apple_plank_door_bottom", + "y": 90 + }, + "facing=west,half=lower,hinge=left,open=false": { + "model": "growthcraft_apples:block/apple_plank_door_bottom", + "y": 180 + }, + "facing=north,half=lower,hinge=left,open=false": { + "model": "growthcraft_apples:block/apple_plank_door_bottom", + "y": 270 + }, + "facing=east,half=lower,hinge=right,open=false": { + "model": "growthcraft_apples:block/apple_plank_door_bottom_hinge" + }, + "facing=south,half=lower,hinge=right,open=false": { + "model": "growthcraft_apples:block/apple_plank_door_bottom_hinge", + "y": 90 + }, + "facing=west,half=lower,hinge=right,open=false": { + "model": "growthcraft_apples:block/apple_plank_door_bottom_hinge", + "y": 180 + }, + "facing=north,half=lower,hinge=right,open=false": { + "model": "growthcraft_apples:block/apple_plank_door_bottom_hinge", + "y": 270 + }, + "facing=east,half=lower,hinge=left,open=true": { + "model": "growthcraft_apples:block/apple_plank_door_bottom_hinge", + "y": 90 + }, + "facing=south,half=lower,hinge=left,open=true": { + "model": "growthcraft_apples:block/apple_plank_door_bottom_hinge", + "y": 180 + }, + "facing=west,half=lower,hinge=left,open=true": { + "model": "growthcraft_apples:block/apple_plank_door_bottom_hinge", + "y": 270 + }, + "facing=north,half=lower,hinge=left,open=true": { + "model": "growthcraft_apples:block/apple_plank_door_bottom_hinge" + }, + "facing=east,half=lower,hinge=right,open=true": { + "model": "growthcraft_apples:block/apple_plank_door_bottom", + "y": 270 + }, + "facing=south,half=lower,hinge=right,open=true": { + "model": "growthcraft_apples:block/apple_plank_door_bottom" + }, + "facing=west,half=lower,hinge=right,open=true": { + "model": "growthcraft_apples:block/apple_plank_door_bottom", + "y": 90 + }, + "facing=north,half=lower,hinge=right,open=true": { + "model": "growthcraft_apples:block/apple_plank_door_bottom", + "y": 180 + }, + "facing=east,half=upper,hinge=left,open=false": { + "model": "growthcraft_apples:block/apple_plank_door_top" + }, + "facing=south,half=upper,hinge=left,open=false": { + "model": "growthcraft_apples:block/apple_plank_door_top", + "y": 90 + }, + "facing=west,half=upper,hinge=left,open=false": { + "model": "growthcraft_apples:block/apple_plank_door_top", + "y": 180 + }, + "facing=north,half=upper,hinge=left,open=false": { + "model": "growthcraft_apples:block/apple_plank_door_top", + "y": 270 + }, + "facing=east,half=upper,hinge=right,open=false": { + "model": "growthcraft_apples:block/apple_plank_door_top_hinge" + }, + "facing=south,half=upper,hinge=right,open=false": { + "model": "growthcraft_apples:block/apple_plank_door_top_hinge", + "y": 90 + }, + "facing=west,half=upper,hinge=right,open=false": { + "model": "growthcraft_apples:block/apple_plank_door_top_hinge", + "y": 180 + }, + "facing=north,half=upper,hinge=right,open=false": { + "model": "growthcraft_apples:block/apple_plank_door_top_hinge", + "y": 270 + }, + "facing=east,half=upper,hinge=left,open=true": { + "model": "growthcraft_apples:block/apple_plank_door_top_hinge", + "y": 90 + }, + "facing=south,half=upper,hinge=left,open=true": { + "model": "growthcraft_apples:block/apple_plank_door_top_hinge", + "y": 180 + }, + "facing=west,half=upper,hinge=left,open=true": { + "model": "growthcraft_apples:block/apple_plank_door_top_hinge", + "y": 270 + }, + "facing=north,half=upper,hinge=left,open=true": { + "model": "growthcraft_apples:block/apple_plank_door_top_hinge" + }, + "facing=east,half=upper,hinge=right,open=true": { + "model": "growthcraft_apples:block/apple_plank_door_top", + "y": 270 + }, + "facing=south,half=upper,hinge=right,open=true": { + "model": "growthcraft_apples:block/apple_plank_door_top" + }, + "facing=west,half=upper,hinge=right,open=true": { + "model": "growthcraft_apples:block/apple_plank_door_top", + "y": 90 + }, + "facing=north,half=upper,hinge=right,open=true": { + "model": "growthcraft_apples:block/apple_plank_door_top", + "y": 180 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apples/blockstates/apple_plank_fence.json b/src/main/resources/assets/growthcraft_apples/blockstates/apple_plank_fence.json new file mode 100644 index 0000000..4414926 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apples/blockstates/apple_plank_fence.json @@ -0,0 +1,25 @@ +{ + "multipart": [ + { + "apply": { + "model": "growthcraft_apples:block/apple_plank_fence_post" + } + }, + { + "when": { "north": "true" }, + "apply": { "model": "growthcraft_apples:block/apple_plank_fence_side", "y": 0, "uvlock": true } + }, + { + "when": { "east": "true" }, + "apply": { "model": "growthcraft_apples:block/apple_plank_fence_side", "y": 90, "uvlock": true } + }, + { + "when": { "south": "true" }, + "apply": { "model": "growthcraft_apples:block/apple_plank_fence_side", "y": 180, "uvlock": true } + }, + { + "when": { "west": "true" }, + "apply": { "model": "growthcraft_apples:block/apple_plank_fence_side", "y": 270, "uvlock": true } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apples/blockstates/apple_plank_fence_gate.json b/src/main/resources/assets/growthcraft_apples/blockstates/apple_plank_fence_gate.json new file mode 100644 index 0000000..8379f2f --- /dev/null +++ b/src/main/resources/assets/growthcraft_apples/blockstates/apple_plank_fence_gate.json @@ -0,0 +1,20 @@ +{ + "variants": { + "facing=south,in_wall=false,open=false": { "model": "growthcraft_apples:block/apple_plank_fence_gate", "uvlock": true }, + "facing=west,in_wall=false,open=false": { "model": "growthcraft_apples:block/apple_plank_fence_gate", "uvlock": true, "y": 90 }, + "facing=north,in_wall=false,open=false": { "model": "growthcraft_apples:block/apple_plank_fence_gate", "uvlock": true, "y": 180 }, + "facing=east,in_wall=false,open=false": { "model": "growthcraft_apples:block/apple_plank_fence_gate", "uvlock": true, "y": 270 }, + "facing=south,in_wall=false,open=true": { "model": "growthcraft_apples:block/apple_plank_fence_gate_open", "uvlock": true }, + "facing=west,in_wall=false,open=true": { "model": "growthcraft_apples:block/apple_plank_fence_gate_open", "uvlock": true, "y": 90 }, + "facing=north,in_wall=false,open=true": { "model": "growthcraft_apples:block/apple_plank_fence_gate_open", "uvlock": true, "y": 180 }, + "facing=east,in_wall=false,open=true": { "model": "growthcraft_apples:block/apple_plank_fence_gate_open", "uvlock": true, "y": 270 }, + "facing=south,in_wall=true,open=false": { "model": "growthcraft_apples:block/apple_plank_fence_gate_wall", "uvlock": true }, + "facing=west,in_wall=true,open=false": { "model": "growthcraft_apples:block/apple_plank_fence_gate_wall", "uvlock": true, "y": 90 }, + "facing=north,in_wall=true,open=false": { "model": "growthcraft_apples:block/apple_plank_fence_gate_wall", "uvlock": true, "y": 180 }, + "facing=east,in_wall=true,open=false": { "model": "growthcraft_apples:block/apple_plank_fence_gate_wall", "uvlock": true, "y": 270 }, + "facing=south,in_wall=true,open=true": { "model": "growthcraft_apples:block/apple_plank_fence_gate_wall_open", "uvlock": true }, + "facing=west,in_wall=true,open=true": { "model": "growthcraft_apples:block/apple_plank_fence_gate_wall_open", "uvlock": true, "y": 90 }, + "facing=north,in_wall=true,open=true": { "model": "growthcraft_apples:block/apple_plank_fence_gate_wall_open", "uvlock": true, "y": 180 }, + "facing=east,in_wall=true,open=true": { "model": "growthcraft_apples:block/apple_plank_fence_gate_wall_open", "uvlock": true, "y": 270 } + } +} diff --git a/src/main/resources/assets/growthcraft_apples/blockstates/apple_plank_fence_rope_linen.json b/src/main/resources/assets/growthcraft_apples/blockstates/apple_plank_fence_rope_linen.json new file mode 100644 index 0000000..0753bb3 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apples/blockstates/apple_plank_fence_rope_linen.json @@ -0,0 +1,77 @@ +{ + "multipart": [ + { + "apply": { + "model": "growthcraft_apples:block/apple_plank_fence_post" + } + }, + { + "when": { + "knot": true + }, + "apply": { + "model": "growthcraft:block/rope_linen_knot", + "uvlock": false + } + }, + { + "when": { + "north": "true" + }, + "apply": { + "model": "growthcraft:block/rope_linen_side", + "uvlock": false + } + }, + { + "when": { + "east": "true" + }, + "apply": { + "model": "growthcraft:block/rope_linen_side", + "y": 90, + "uvlock": false + } + }, + { + "when": { + "south": "true" + }, + "apply": { + "model": "growthcraft:block/rope_linen_side", + "y": 180, + "uvlock": false + } + }, + { + "when": { + "west": "true" + }, + "apply": { + "model": "growthcraft:block/rope_linen_side", + "y": 270, + "uvlock": false + } + }, + { + "when": { + "up": "true" + }, + "apply": { + "model": "growthcraft:block/rope_linen_side", + "x": 270, + "uvlock": false + } + }, + { + "when": { + "down": "true" + }, + "apply": { + "model": "growthcraft:block/rope_linen_side", + "x": 90, + "uvlock": false + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apples/blockstates/apple_plank_pressure_plate.json b/src/main/resources/assets/growthcraft_apples/blockstates/apple_plank_pressure_plate.json new file mode 100644 index 0000000..c306af5 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apples/blockstates/apple_plank_pressure_plate.json @@ -0,0 +1,6 @@ +{ + "variants": { + "powered=false": { "model": "growthcraft_apples:block/apple_plank_pressure_plate" }, + "powered=true": { "model": "growthcraft_apples:block/apple_plank_pressure_plate_down" } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apples/blockstates/apple_plank_slab.json b/src/main/resources/assets/growthcraft_apples/blockstates/apple_plank_slab.json new file mode 100644 index 0000000..e37a2b8 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apples/blockstates/apple_plank_slab.json @@ -0,0 +1,7 @@ +{ + "variants": { + "type=bottom": { "model": "growthcraft_apples:block/apple_plank_slab" }, + "type=top": { "model": "growthcraft_apples:block/apple_plank_slab_top" }, + "type=double": { "model": "growthcraft_apples:block/apple_plank" } + } +} diff --git a/src/main/resources/assets/growthcraft_apples/blockstates/apple_plank_stairs.json b/src/main/resources/assets/growthcraft_apples/blockstates/apple_plank_stairs.json new file mode 100644 index 0000000..18ed397 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apples/blockstates/apple_plank_stairs.json @@ -0,0 +1,209 @@ +{ + "variants": { + "facing=east,half=bottom,shape=straight": { + "model": "growthcraft_apples:block/apple_plank_stairs" + }, + "facing=west,half=bottom,shape=straight": { + "model": "growthcraft_apples:block/apple_plank_stairs", + "y": 180, + "uvlock": true + }, + "facing=south,half=bottom,shape=straight": { + "model": "growthcraft_apples:block/apple_plank_stairs", + "y": 90, + "uvlock": true + }, + "facing=north,half=bottom,shape=straight": { + "model": "growthcraft_apples:block/apple_plank_stairs", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=outer_right": { + "model": "growthcraft_apples:block/apple_plank_stairs_outer" + }, + "facing=west,half=bottom,shape=outer_right": { + "model": "growthcraft_apples:block/apple_plank_stairs_outer", + "y": 180, + "uvlock": true + }, + "facing=south,half=bottom,shape=outer_right": { + "model": "growthcraft_apples:block/apple_plank_stairs_outer", + "y": 90, + "uvlock": true + }, + "facing=north,half=bottom,shape=outer_right": { + "model": "growthcraft_apples:block/apple_plank_stairs_outer", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=outer_left": { + "model": "growthcraft_apples:block/apple_plank_stairs_outer", + "y": 270, + "uvlock": true + }, + "facing=west,half=bottom,shape=outer_left": { + "model": "growthcraft_apples:block/apple_plank_stairs_outer", + "y": 90, + "uvlock": true + }, + "facing=south,half=bottom,shape=outer_left": { + "model": "growthcraft_apples:block/apple_plank_stairs_outer" + }, + "facing=north,half=bottom,shape=outer_left": { + "model": "growthcraft_apples:block/apple_plank_stairs_outer", + "y": 180, + "uvlock": true + }, + "facing=east,half=bottom,shape=inner_right": { + "model": "growthcraft_apples:block/apple_plank_stairs_inner" + }, + "facing=west,half=bottom,shape=inner_right": { + "model": "growthcraft_apples:block/apple_plank_stairs_inner", + "y": 180, + "uvlock": true + }, + "facing=south,half=bottom,shape=inner_right": { + "model": "growthcraft_apples:block/apple_plank_stairs_inner", + "y": 90, + "uvlock": true + }, + "facing=north,half=bottom,shape=inner_right": { + "model": "growthcraft_apples:block/apple_plank_stairs_inner", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=inner_left": { + "model": "growthcraft_apples:block/apple_plank_stairs_inner", + "y": 270, + "uvlock": true + }, + "facing=west,half=bottom,shape=inner_left": { + "model": "growthcraft_apples:block/apple_plank_stairs_inner", + "y": 90, + "uvlock": true + }, + "facing=south,half=bottom,shape=inner_left": { + "model": "growthcraft_apples:block/apple_plank_stairs_inner" + }, + "facing=north,half=bottom,shape=inner_left": { + "model": "growthcraft_apples:block/apple_plank_stairs_inner", + "y": 180, + "uvlock": true + }, + "facing=east,half=top,shape=straight": { + "model": "growthcraft_apples:block/apple_plank_stairs", + "x": 180, + "uvlock": true + }, + "facing=west,half=top,shape=straight": { + "model": "growthcraft_apples:block/apple_plank_stairs", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=straight": { + "model": "growthcraft_apples:block/apple_plank_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=north,half=top,shape=straight": { + "model": "growthcraft_apples:block/apple_plank_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=east,half=top,shape=outer_right": { + "model": "growthcraft_apples:block/apple_plank_stairs_outer", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=west,half=top,shape=outer_right": { + "model": "growthcraft_apples:block/apple_plank_stairs_outer", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=south,half=top,shape=outer_right": { + "model": "growthcraft_apples:block/apple_plank_stairs_outer", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=north,half=top,shape=outer_right": { + "model": "growthcraft_apples:block/apple_plank_stairs_outer", + "x": 180, + "uvlock": true + }, + "facing=east,half=top,shape=outer_left": { + "model": "growthcraft_apples:block/apple_plank_stairs_outer", + "x": 180, + "uvlock": true + }, + "facing=west,half=top,shape=outer_left": { + "model": "growthcraft_apples:block/apple_plank_stairs_outer", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=outer_left": { + "model": "growthcraft_apples:block/apple_plank_stairs_outer", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=north,half=top,shape=outer_left": { + "model": "growthcraft_apples:block/apple_plank_stairs_outer", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=east,half=top,shape=inner_right": { + "model": "growthcraft_apples:block/apple_plank_stairs_inner", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=west,half=top,shape=inner_right": { + "model": "growthcraft_apples:block/apple_plank_stairs_inner", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=south,half=top,shape=inner_right": { + "model": "growthcraft_apples:block/apple_plank_stairs_inner", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=north,half=top,shape=inner_right": { + "model": "growthcraft_apples:block/apple_plank_stairs_inner", + "x": 180, + "uvlock": true + }, + "facing=east,half=top,shape=inner_left": { + "model": "growthcraft_apples:block/apple_plank_stairs_inner", + "x": 180, + "uvlock": true + }, + "facing=west,half=top,shape=inner_left": { + "model": "growthcraft_apples:block/apple_plank_stairs_inner", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=inner_left": { + "model": "growthcraft_apples:block/apple_plank_stairs_inner", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=north,half=top,shape=inner_left": { + "model": "growthcraft_apples:block/apple_plank_stairs_inner", + "x": 180, + "y": 270, + "uvlock": true + } + } +} diff --git a/src/main/resources/assets/growthcraft_apples/blockstates/apple_plank_trapdoor.json b/src/main/resources/assets/growthcraft_apples/blockstates/apple_plank_trapdoor.json new file mode 100644 index 0000000..083ce0f --- /dev/null +++ b/src/main/resources/assets/growthcraft_apples/blockstates/apple_plank_trapdoor.json @@ -0,0 +1,20 @@ +{ + "variants": { + "facing=north,half=bottom,open=false": { "model": "growthcraft_apples:block/apple_plank_trapdoor_bottom" }, + "facing=south,half=bottom,open=false": { "model": "growthcraft_apples:block/apple_plank_trapdoor_bottom", "y": 180 }, + "facing=east,half=bottom,open=false": { "model": "growthcraft_apples:block/apple_plank_trapdoor_bottom", "y": 90 }, + "facing=west,half=bottom,open=false": { "model": "growthcraft_apples:block/apple_plank_trapdoor_bottom", "y": 270 }, + "facing=north,half=top,open=false": { "model": "growthcraft_apples:block/apple_plank_trapdoor_top" }, + "facing=south,half=top,open=false": { "model": "growthcraft_apples:block/apple_plank_trapdoor_top", "y": 180 }, + "facing=east,half=top,open=false": { "model": "growthcraft_apples:block/apple_plank_trapdoor_top", "y": 90 }, + "facing=west,half=top,open=false": { "model": "growthcraft_apples:block/apple_plank_trapdoor_top", "y": 270 }, + "facing=north,half=bottom,open=true": { "model": "growthcraft_apples:block/apple_plank_trapdoor_open" }, + "facing=south,half=bottom,open=true": { "model": "growthcraft_apples:block/apple_plank_trapdoor_open", "y": 180 }, + "facing=east,half=bottom,open=true": { "model": "growthcraft_apples:block/apple_plank_trapdoor_open", "y": 90 }, + "facing=west,half=bottom,open=true": { "model": "growthcraft_apples:block/apple_plank_trapdoor_open", "y": 270 }, + "facing=north,half=top,open=true": { "model": "growthcraft_apples:block/apple_plank_trapdoor_open", "x": 180, "y": 180 }, + "facing=south,half=top,open=true": { "model": "growthcraft_apples:block/apple_plank_trapdoor_open", "x": 180, "y": 0 }, + "facing=east,half=top,open=true": { "model": "growthcraft_apples:block/apple_plank_trapdoor_open", "x": 180, "y": 270 }, + "facing=west,half=top,open=true": { "model": "growthcraft_apples:block/apple_plank_trapdoor_open", "x": 180, "y": 90 } + } +} diff --git a/src/main/resources/assets/growthcraft_apples/blockstates/apple_tree_fruit.json b/src/main/resources/assets/growthcraft_apples/blockstates/apple_tree_fruit.json new file mode 100644 index 0000000..3e182ec --- /dev/null +++ b/src/main/resources/assets/growthcraft_apples/blockstates/apple_tree_fruit.json @@ -0,0 +1,28 @@ +{ + "variants": { + "age=0": { + "model": "growthcraft_apples:block/apple_tree_fruit_stage0" + }, + "age=1": { + "model": "growthcraft_apples:block/apple_tree_fruit_stage0" + }, + "age=2": { + "model": "growthcraft_apples:block/apple_tree_fruit_stage0" + }, + "age=3": { + "model": "growthcraft_apples:block/apple_tree_fruit_stage0" + }, + "age=4": { + "model": "growthcraft_apples:block/apple_tree_fruit_stage4" + }, + "age=5": { + "model": "growthcraft_apples:block/apple_tree_fruit_stage4" + }, + "age=6": { + "model": "growthcraft_apples:block/apple_tree_fruit_stage4" + }, + "age=7": { + "model": "growthcraft_apples:block/apple_tree_fruit_stage7" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apples/blockstates/apple_tree_leaves.json b/src/main/resources/assets/growthcraft_apples/blockstates/apple_tree_leaves.json new file mode 100644 index 0000000..8feebce --- /dev/null +++ b/src/main/resources/assets/growthcraft_apples/blockstates/apple_tree_leaves.json @@ -0,0 +1,5 @@ +{ + "variants": { + "": { "model": "growthcraft_apples:block/apple_tree_leaves" } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apples/blockstates/apple_tree_sapling.json b/src/main/resources/assets/growthcraft_apples/blockstates/apple_tree_sapling.json new file mode 100644 index 0000000..916c1f7 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apples/blockstates/apple_tree_sapling.json @@ -0,0 +1,5 @@ +{ + "variants": { + "": { "model": "growthcraft_apples:block/apple_tree_sapling" } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apples/blockstates/apple_wood.json b/src/main/resources/assets/growthcraft_apples/blockstates/apple_wood.json new file mode 100644 index 0000000..5e7588d --- /dev/null +++ b/src/main/resources/assets/growthcraft_apples/blockstates/apple_wood.json @@ -0,0 +1,7 @@ +{ + "variants": { + "axis=y": { "model": "growthcraft_apples:block/apple_wood" }, + "axis=z": { "model": "growthcraft_apples:block/apple_wood", "x": 90 }, + "axis=x": { "model": "growthcraft_apples:block/apple_wood", "x": 90, "y": 90 } + } +} diff --git a/src/main/resources/assets/growthcraft_apples/blockstates/apple_wood_log.json b/src/main/resources/assets/growthcraft_apples/blockstates/apple_wood_log.json new file mode 100644 index 0000000..2d47b2e --- /dev/null +++ b/src/main/resources/assets/growthcraft_apples/blockstates/apple_wood_log.json @@ -0,0 +1,7 @@ +{ + "variants": { + "axis=y": { "model": "growthcraft_apples:block/apple_wood_log" }, + "axis=z": { "model": "growthcraft_apples:block/apple_wood_log", "x": 90 }, + "axis=x": { "model": "growthcraft_apples:block/apple_wood_log", "x": 90, "y": 90 } + } +} diff --git a/src/main/resources/assets/growthcraft_apples/blockstates/apple_wood_log_stripped.json b/src/main/resources/assets/growthcraft_apples/blockstates/apple_wood_log_stripped.json new file mode 100644 index 0000000..a7cd915 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apples/blockstates/apple_wood_log_stripped.json @@ -0,0 +1,7 @@ +{ + "variants": { + "axis=y": { "model": "growthcraft_apples:block/apple_wood_log_stripped" }, + "axis=z": { "model": "growthcraft_apples:block/apple_wood_log_stripped", "x": 90 }, + "axis=x": { "model": "growthcraft_apples:block/apple_wood_log_stripped", "x": 90, "y": 90 } + } +} diff --git a/src/main/resources/assets/growthcraft_apples/blockstates/apple_wood_stripped.json b/src/main/resources/assets/growthcraft_apples/blockstates/apple_wood_stripped.json new file mode 100644 index 0000000..2295caf --- /dev/null +++ b/src/main/resources/assets/growthcraft_apples/blockstates/apple_wood_stripped.json @@ -0,0 +1,7 @@ +{ + "variants": { + "axis=y": { "model": "growthcraft_apples:block/apple_wood_stripped" }, + "axis=z": { "model": "growthcraft_apples:block/apple_wood_stripped", "x": 90 }, + "axis=x": { "model": "growthcraft_apples:block/apple_wood_stripped", "x": 90, "y": 90 } + } +} diff --git a/src/main/resources/assets/growthcraft_apples/blockstates/bee_box_apple.json b/src/main/resources/assets/growthcraft_apples/blockstates/bee_box_apple.json new file mode 100644 index 0000000..a635bca --- /dev/null +++ b/src/main/resources/assets/growthcraft_apples/blockstates/bee_box_apple.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=north": { + "model": "growthcraft_apples:block/bee_box_apple" + }, + "facing=south": { + "model": "growthcraft_apples:block/bee_box_apple", + "y": 180 + }, + "facing=east": { + "model": "growthcraft_apples:block/bee_box_apple", + "y": 90 + }, + "facing=west": { + "model": "growthcraft_apples:block/bee_box_apple", + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apples/lang/en_us.json b/src/main/resources/assets/growthcraft_apples/lang/en_us.json new file mode 100644 index 0000000..b0e6487 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apples/lang/en_us.json @@ -0,0 +1,27 @@ +{ + "advancements.growthcraft_apples.has_apple_seeds.description": "That tasted good.", + "advancements.growthcraft_apples.has_apple_seeds.title": "Apple Core", + "block.growthcraft_apples.apple_plank": "Apple Wood Planks", + "block.growthcraft_apples.apple_plank_button": "Apple Wood Button", + "block.growthcraft_apples.apple_plank_door": "Apple Wood Door", + "block.growthcraft_apples.apple_plank_fence": "Apple Wood Fence", + "block.growthcraft_apples.apple_plank_fence_gate": "Apple Wood Fence Gate", + "block.growthcraft_apples.apple_plank_fence_rope_linen": "Rope Apple Wood Fence Post", + "block.growthcraft_apples.apple_plank_pressure_plate": "Apple Wood Pressure Plate", + "block.growthcraft_apples.apple_plank_slab": "Apple Wood Slab", + "block.growthcraft_apples.apple_plank_stairs": "Apple Wood Stairs", + "block.growthcraft_apples.apple_plank_trapdoor": "Apple Wood Trapdoor", + "block.growthcraft_apples.apple_tree_fruit": "Apple Tree Fruit", + "block.growthcraft_apples.apple_tree_leaves": "Apple Tree Leaves", + "block.growthcraft_apples.apple_tree_sapling": "Apple Tree Sapling", + "block.growthcraft_apples.apple_wood": "Apple Wood", + "block.growthcraft_apples.apple_wood_log": "Apple Log", + "block.growthcraft_apples.apple_wood_log_stripped": "Stripped Apple Log", + "block.growthcraft_apples.apple_wood_stripped": "Stripped Apple Wood", + "block.growthcraft_apples.bee_box_apple": "Bee Box (Apple)", + "fluid.growthcraft_apples.apple_cider_fluid": "Apple Cider", + "fluid.growthcraft_apples.apple_juice_fluid": "Apple Juice", + "item.growthcraft_apples.apple_cider_fluid_bucket": "Apple Cider Bucket", + "item.growthcraft_apples.apple_juice_fluid_bucket": "Apple Juice Bucket", + "item.growthcraft_apples.apple_seeds": "Apple Seeds" +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apples/lang/ko_kr.lang b/src/main/resources/assets/growthcraft_apples/lang/ko_kr.lang new file mode 100644 index 0000000..a2f25f0 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apples/lang/ko_kr.lang @@ -0,0 +1,21 @@ +item.apple_door_item.name=사과나무 문 + +tile.apple_crop.name=사과 +tile.apple_fence.name=사과나무 울타리 +tile.apple_fence_gate.name=사과나무 울타리 문 +tile.apple_leaves.name=사과나무 잎 +tile.apple_log.name=사과나무 +tile.apple_planks.name=사과나무 판자 +tile.apple_sapling.name=사과나무 묘목 +tile.apple_slab_half.name=사과나무 반 블록 +tile.apple_stairs.name=사과나무 계단 +tile.rope_knot_apple.name=Apple Fence (Rope) + +# Fluids +fluid.fluid_booze_apple_juice=사과 주스 +fluid.fluid_booze_apple_cider_fermented=사과 사이다 +fluid.fluid_booze_apple_cider_potent=사과 사이다 +fluid.fluid_booze_apple_cider_extended=사과 사이다 +fluid.fluid_booze_apple_cider_ethereal=부드러운 사과 과일즙 +fluid.fluid_booze_apple_cider_intoxicated=사과 사이다 +fluid.fluid_booze_apple_cider_poisoned=사과 사이다 diff --git a/src/main/resources/assets/growthcraft_apples/lang/ru_ru.json b/src/main/resources/assets/growthcraft_apples/lang/ru_ru.json new file mode 100644 index 0000000..d153a45 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apples/lang/ru_ru.json @@ -0,0 +1,27 @@ +{ + "advancements.growthcraft_apples.has_apple_seeds.description": "Было вкусно.", + "advancements.growthcraft_apples.has_apple_seeds.title": "В сердце яблока", + "block.growthcraft_apples.apple_plank": "Доски из яблони", + "block.growthcraft_apples.apple_plank_button": "Кнопка из яблони", + "block.growthcraft_apples.apple_plank_door": "Дверь из яблони", + "block.growthcraft_apples.apple_plank_fence": "Забор из яблони", + "block.growthcraft_apples.apple_plank_fence_gate": "Ворота из яблони", + "block.growthcraft_apples.apple_plank_fence_rope_linen": "Веревка на заборе из яблони", + "block.growthcraft_apples.apple_plank_pressure_plate": "Нажимная пластина из яблони", + "block.growthcraft_apples.apple_plank_slab": "Плита из яблони", + "block.growthcraft_apples.apple_plank_stairs": "Ступеньки из яблони", + "block.growthcraft_apples.apple_plank_trapdoor": "Люк из яблони", + "block.growthcraft_apples.apple_tree_fruit": "Плод яблони", + "block.growthcraft_apples.apple_tree_leaves": "Листва яблони", + "block.growthcraft_apples.apple_tree_sapling": "Саженец яблони", + "block.growthcraft_apples.apple_wood": "Яблоня", + "block.growthcraft_apples.apple_wood_log": "Бревно яблони", + "block.growthcraft_apples.apple_wood_log_stripped": "Обтесанное бревно яблони", + "block.growthcraft_apples.apple_wood_stripped": "Обтесанная древесина яблони", + "block.growthcraft_apples.bee_box_apple": "Пчелиный улей из яблони", + "fluid_type.growthcraft_apples:apple_cider_fluid": "Яблочный сидр", + "fluid_type.growthcraft_apples:apple_juice_fluid": "Яблочный сок", + "item.growthcraft_apples.apple_cider_fluid_bucket": "Ведро яблочного сидра", + "item.growthcraft_apples.apple_juice_fluid_bucket": "Ведро яблочного сока", + "item.growthcraft_apples.apple_seeds": "Семена яблока" +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apples/lang/tr_tr.lang b/src/main/resources/assets/growthcraft_apples/lang/tr_tr.lang new file mode 100644 index 0000000..5d9722e --- /dev/null +++ b/src/main/resources/assets/growthcraft_apples/lang/tr_tr.lang @@ -0,0 +1,21 @@ +item.apple_door_item.name=Elma Kapısı + +tile.apple_crop.name=Elma +tile.apple_fence.name=Elma Çiti +tile.apple_fence_gate.name=Elma Çit Kapısı +tile.apple_leaves.name=Elma Yaprakları +tile.apple_log.name=Elma Odunu +tile.apple_planks.name=Elma Tahtası +tile.apple_sapling.name=Elma Fidanı +tile.apple_slab_half.name=Elma Ağacı Basamağı +tile.apple_stairs.name=Elma Ağacı Merdiven +tile.rope_knot_apple.name=Apple Fence (Rope) + +# Fluids +fluid.fluid_booze_apple_juice=Elma Suyu +fluid.fluid_booze_apple_cider_fermented=Elma Şarabı +fluid.fluid_booze_apple_cider_potent=Elma Şarabı +fluid.fluid_booze_apple_cider_extended=Elma Şarabı +fluid.fluid_booze_apple_cider_ethereal=İpeksi Nektar +fluid.fluid_booze_apple_cider_intoxicated=Elma Şarabı +fluid.fluid_booze_apple_cider_poisoned=Elma Şarabı \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apples/lang/zh_cn.lang b/src/main/resources/assets/growthcraft_apples/lang/zh_cn.lang new file mode 100644 index 0000000..bf14a79 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apples/lang/zh_cn.lang @@ -0,0 +1,20 @@ +item.apple_door_item.name=苹果木门 + +tile.apple_crop.name=苹果 +tile.apple_fence.name=苹果木栅栏 +tile.apple_fence_gate.name=苹果木栅栏门 +tile.apple_leaves.name=苹果树叶 +tile.apple_log.name=苹果木原木 +tile.apple_planks.name=苹果木板 +tile.apple_sapling.name=苹果树苗 +tile.apple_slab_half.name=苹果木台阶 +tile.apple_stairs.name=苹果木楼梯 +tile.rope_knot_apple.name=Apple Fence (Rope) +# Fluids +fluid.fluid_booze_apple_juice=Apple Juice +fluid.fluid_booze_apple_cider_fermented=Apple Cider +fluid.fluid_booze_apple_cider_potent=Apple Cider +fluid.fluid_booze_apple_cider_extended=Apple Cider +fluid.fluid_booze_apple_cider_ethereal=Silken Nectar +fluid.fluid_booze_apple_cider_intoxicated=Apple Cider +fluid.fluid_booze_apple_cider_poisoned=Apple Cider \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apples/models/block/apple_plank.json b/src/main/resources/assets/growthcraft_apples/models/block/apple_plank.json new file mode 100644 index 0000000..114b39e --- /dev/null +++ b/src/main/resources/assets/growthcraft_apples/models/block/apple_plank.json @@ -0,0 +1,7 @@ +{ + "parent": "block/cube_all", + "textures": { + "particle": "growthcraft_apples:block/apple_plank", + "all": "growthcraft_apples:block/apple_plank" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apples/models/block/apple_plank_button.json b/src/main/resources/assets/growthcraft_apples/models/block/apple_plank_button.json new file mode 100644 index 0000000..b3ee0d3 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apples/models/block/apple_plank_button.json @@ -0,0 +1,7 @@ + +{ + "parent": "block/button", + "textures": { + "texture": "growthcraft_apples:block/apple_plank" + } +} diff --git a/src/main/resources/assets/growthcraft_apples/models/block/apple_plank_button_inventory.json b/src/main/resources/assets/growthcraft_apples/models/block/apple_plank_button_inventory.json new file mode 100644 index 0000000..c800cec --- /dev/null +++ b/src/main/resources/assets/growthcraft_apples/models/block/apple_plank_button_inventory.json @@ -0,0 +1,6 @@ +{ + "parent": "block/button_inventory", + "textures": { + "texture": "growthcraft_apples:block/apple_plank" + } +} diff --git a/src/main/resources/assets/growthcraft_apples/models/block/apple_plank_button_pressed.json b/src/main/resources/assets/growthcraft_apples/models/block/apple_plank_button_pressed.json new file mode 100644 index 0000000..aa3e927 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apples/models/block/apple_plank_button_pressed.json @@ -0,0 +1,6 @@ +{ + "parent": "block/button_pressed", + "textures": { + "texture": "growthcraft_apples:block/apple_plank" + } +} diff --git a/src/main/resources/assets/growthcraft_apples/models/block/apple_plank_door_bottom.json b/src/main/resources/assets/growthcraft_apples/models/block/apple_plank_door_bottom.json new file mode 100644 index 0000000..93bbe1e --- /dev/null +++ b/src/main/resources/assets/growthcraft_apples/models/block/apple_plank_door_bottom.json @@ -0,0 +1,7 @@ +{ + "parent": "block/door_bottom", + "textures": { + "bottom": "growthcraft_apples:block/apple_plank_door_bottom", + "top": "growthcraft_apples:block/apple_plank_door_top" + } +} diff --git a/src/main/resources/assets/growthcraft_apples/models/block/apple_plank_door_bottom_hinge.json b/src/main/resources/assets/growthcraft_apples/models/block/apple_plank_door_bottom_hinge.json new file mode 100644 index 0000000..d7cfbbf --- /dev/null +++ b/src/main/resources/assets/growthcraft_apples/models/block/apple_plank_door_bottom_hinge.json @@ -0,0 +1,7 @@ +{ + "parent": "block/door_bottom_rh", + "textures": { + "bottom": "growthcraft_apples:block/apple_plank_door_bottom", + "top": "growthcraft_apples:block/apple_plank_door_top" + } +} diff --git a/src/main/resources/assets/growthcraft_apples/models/block/apple_plank_door_top.json b/src/main/resources/assets/growthcraft_apples/models/block/apple_plank_door_top.json new file mode 100644 index 0000000..a8b0939 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apples/models/block/apple_plank_door_top.json @@ -0,0 +1,7 @@ +{ + "parent": "block/door_top", + "textures": { + "bottom": "growthcraft_apples:block/apple_plank_door_bottom", + "top": "growthcraft_apples:block/apple_plank_door_top" + } +} diff --git a/src/main/resources/assets/growthcraft_apples/models/block/apple_plank_door_top_hinge.json b/src/main/resources/assets/growthcraft_apples/models/block/apple_plank_door_top_hinge.json new file mode 100644 index 0000000..6a943a0 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apples/models/block/apple_plank_door_top_hinge.json @@ -0,0 +1,7 @@ +{ + "parent": "block/door_top_rh", + "textures": { + "bottom": "growthcraft_apples:block/apple_plank_door_bottom", + "top": "growthcraft_apples:block/apple_plank_door_top" + } +} diff --git a/src/main/resources/assets/growthcraft_apples/models/block/apple_plank_door_top_left.json b/src/main/resources/assets/growthcraft_apples/models/block/apple_plank_door_top_left.json new file mode 100644 index 0000000..36369b3 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apples/models/block/apple_plank_door_top_left.json @@ -0,0 +1,7 @@ +{ + "parent": "block/door_top_left", + "textures": { + "bottom": "growthcraft_apples:block/apple_plank_door_bottom", + "top": "growthcraft_apples:block/apple_plank_door_top" + } +} diff --git a/src/main/resources/assets/growthcraft_apples/models/block/apple_plank_door_top_left_open.json b/src/main/resources/assets/growthcraft_apples/models/block/apple_plank_door_top_left_open.json new file mode 100644 index 0000000..82a0fa2 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apples/models/block/apple_plank_door_top_left_open.json @@ -0,0 +1,7 @@ +{ + "parent": "block/door_top_left_open", + "textures": { + "bottom": "growthcraft_apples:block/apple_plank_door_bottom", + "top": "growthcraft_apples:block/apple_plank_door_top" + } +} diff --git a/src/main/resources/assets/growthcraft_apples/models/block/apple_plank_door_top_right.json b/src/main/resources/assets/growthcraft_apples/models/block/apple_plank_door_top_right.json new file mode 100644 index 0000000..c9651d8 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apples/models/block/apple_plank_door_top_right.json @@ -0,0 +1,7 @@ +{ + "parent": "block/door_top_right", + "textures": { + "bottom": "growthcraft_apples:block/apple_plank_door_bottom", + "top": "growthcraft_apples:block/apple_plank_door_top" + } +} diff --git a/src/main/resources/assets/growthcraft_apples/models/block/apple_plank_door_top_right_open.json b/src/main/resources/assets/growthcraft_apples/models/block/apple_plank_door_top_right_open.json new file mode 100644 index 0000000..508c01f --- /dev/null +++ b/src/main/resources/assets/growthcraft_apples/models/block/apple_plank_door_top_right_open.json @@ -0,0 +1,7 @@ +{ + "parent": "block/door_top_right_open", + "textures": { + "bottom": "growthcraft_apples:block/apple_plank_door_bottom", + "top": "growthcraft_apples:block/apple_plank_door_top" + } +} diff --git a/src/main/resources/assets/growthcraft_apples/models/block/apple_plank_fence_gate.json b/src/main/resources/assets/growthcraft_apples/models/block/apple_plank_fence_gate.json new file mode 100644 index 0000000..d485186 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apples/models/block/apple_plank_fence_gate.json @@ -0,0 +1,6 @@ +{ + "parent": "block/template_fence_gate", + "textures": { + "texture": "growthcraft_apples:block/apple_plank" + } +} diff --git a/src/main/resources/assets/growthcraft_apples/models/block/apple_plank_fence_gate_open.json b/src/main/resources/assets/growthcraft_apples/models/block/apple_plank_fence_gate_open.json new file mode 100644 index 0000000..ae608b9 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apples/models/block/apple_plank_fence_gate_open.json @@ -0,0 +1,6 @@ +{ + "parent": "block/template_fence_gate_open", + "textures": { + "texture": "growthcraft_apples:block/apple_plank" + } +} diff --git a/src/main/resources/assets/growthcraft_apples/models/block/apple_plank_fence_gate_wall.json b/src/main/resources/assets/growthcraft_apples/models/block/apple_plank_fence_gate_wall.json new file mode 100644 index 0000000..20c0a62 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apples/models/block/apple_plank_fence_gate_wall.json @@ -0,0 +1,6 @@ +{ + "parent": "block/template_fence_gate_wall", + "textures": { + "texture": "growthcraft_apples:block/apple_plank" + } +} diff --git a/src/main/resources/assets/growthcraft_apples/models/block/apple_plank_fence_gate_wall_open.json b/src/main/resources/assets/growthcraft_apples/models/block/apple_plank_fence_gate_wall_open.json new file mode 100644 index 0000000..1159cc5 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apples/models/block/apple_plank_fence_gate_wall_open.json @@ -0,0 +1,6 @@ +{ + "parent": "block/template_fence_gate_wall_open", + "textures": { + "texture": "growthcraft_apples:block/apple_plank" + } +} diff --git a/src/main/resources/assets/growthcraft_apples/models/block/apple_plank_fence_post.json b/src/main/resources/assets/growthcraft_apples/models/block/apple_plank_fence_post.json new file mode 100644 index 0000000..ec9e06f --- /dev/null +++ b/src/main/resources/assets/growthcraft_apples/models/block/apple_plank_fence_post.json @@ -0,0 +1,6 @@ +{ + "parent": "block/fence_post", + "textures": { + "texture": "growthcraft_apples:block/apple_plank" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apples/models/block/apple_plank_fence_rope_linen.json b/src/main/resources/assets/growthcraft_apples/models/block/apple_plank_fence_rope_linen.json new file mode 100644 index 0000000..5d8f11a --- /dev/null +++ b/src/main/resources/assets/growthcraft_apples/models/block/apple_plank_fence_rope_linen.json @@ -0,0 +1,354 @@ +{ + "textures": { + "0": "growthcraft:block/rope_linen_knot", + "1": "growthcraft_apples:block/apple_plank", + "particle": "growthcraft_apples:block/apple_plank" + }, + "elements": [ + { + "name": "fence_post", + "from": [ + 6.0, + 0.0, + 6.0 + ], + "to": [ + 10.0, + 16.0, + 10.0 + ], + "faces": { + "north": { + "texture": "#1", + "uv": [ + 0.0, + 0.0, + 4.0, + 16.0 + ] + }, + "east": { + "texture": "#1", + "uv": [ + 0.0, + 0.0, + 4.0, + 16.0 + ] + }, + "south": { + "texture": "#1", + "uv": [ + 0.0, + 0.0, + 4.0, + 16.0 + ] + }, + "west": { + "texture": "#1", + "uv": [ + 0.0, + 0.0, + 4.0, + 16.0 + ] + }, + "up": { + "texture": "#1", + "uv": [ + 0.0, + 0.0, + 4.0, + 4.0 + ] + }, + "down": { + "texture": "#1", + "uv": [ + 0.0, + 0.0, + 4.0, + 4.0 + ] + } + } + }, + { + "name": "South", + "from": [ + 5.0, + 6.0, + 10.0 + ], + "to": [ + 11.0, + 14.0, + 11.0 + ], + "faces": { + "north": { + "texture": "#0", + "uv": [ + 0.0, + 0.0, + 6.0, + 8.0 + ] + }, + "east": { + "texture": "#0", + "uv": [ + 0.0, + 0.0, + 1.0, + 8.0 + ] + }, + "south": { + "texture": "#0", + "uv": [ + 0.0, + 0.0, + 6.0, + 8.0 + ] + }, + "west": { + "texture": "#0", + "uv": [ + 0.0, + 0.0, + 1.0, + 8.0 + ] + }, + "up": { + "texture": "#0", + "uv": [ + 0.0, + 0.0, + 6.0, + 1.0 + ] + }, + "down": { + "texture": "#0", + "uv": [ + 0.0, + 0.0, + 6.0, + 1.0 + ] + } + } + }, + { + "name": "North", + "from": [ + 5.0, + 6.0, + 5.0 + ], + "to": [ + 11.0, + 14.0, + 6.0 + ], + "faces": { + "north": { + "texture": "#0", + "uv": [ + 0.0, + 0.0, + 6.0, + 8.0 + ] + }, + "east": { + "texture": "#0", + "uv": [ + 0.0, + 0.0, + 1.0, + 8.0 + ] + }, + "south": { + "texture": "#0", + "uv": [ + 0.0, + 0.0, + 6.0, + 8.0 + ] + }, + "west": { + "texture": "#0", + "uv": [ + 0.0, + 0.0, + 1.0, + 8.0 + ] + }, + "up": { + "texture": "#0", + "uv": [ + 0.0, + 0.0, + 6.0, + 1.0 + ] + }, + "down": { + "texture": "#0", + "uv": [ + 0.0, + 0.0, + 6.0, + 1.0 + ] + } + } + }, + { + "name": "West", + "from": [ + 5.0, + 6.0, + 6.0 + ], + "to": [ + 6.0, + 14.0, + 10.0 + ], + "faces": { + "north": { + "texture": "#0", + "uv": [ + 0.0, + 0.0, + 1.0, + 8.0 + ] + }, + "east": { + "texture": "#0", + "uv": [ + 0.0, + 0.0, + 6.0, + 8.0 + ] + }, + "south": { + "texture": "#0", + "uv": [ + 0.0, + 0.0, + 1.0, + 8.0 + ] + }, + "west": { + "texture": "#0", + "uv": [ + 0.0, + 0.0, + 6.0, + 8.0 + ] + }, + "up": { + "texture": "#0", + "uv": [ + 0.0, + 0.0, + 1.0, + 6.0 + ] + }, + "down": { + "texture": "#0", + "uv": [ + 0.0, + 0.0, + 1.0, + 6.0 + ] + } + } + }, + { + "name": "East", + "from": [ + 10.0, + 6.0, + 6.0 + ], + "to": [ + 11.0, + 14.0, + 10.0 + ], + "faces": { + "north": { + "texture": "#0", + "uv": [ + 0.0, + 0.0, + 1.0, + 8.0 + ] + }, + "east": { + "texture": "#0", + "uv": [ + 0.0, + 0.0, + 6.0, + 8.0 + ] + }, + "south": { + "texture": "#0", + "uv": [ + 0.0, + 0.0, + 1.0, + 8.0 + ] + }, + "west": { + "texture": "#0", + "uv": [ + 0.0, + 0.0, + 6.0, + 8.0 + ] + }, + "up": { + "texture": "#0", + "uv": [ + 0.0, + 0.0, + 1.0, + 6.0 + ] + }, + "down": { + "texture": "#0", + "uv": [ + 0.0, + 0.0, + 1.0, + 6.0 + ] + } + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apples/models/block/apple_plank_fence_side.json b/src/main/resources/assets/growthcraft_apples/models/block/apple_plank_fence_side.json new file mode 100644 index 0000000..7d31eb7 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apples/models/block/apple_plank_fence_side.json @@ -0,0 +1,6 @@ +{ + "parent": "block/fence_side", + "textures": { + "texture": "growthcraft_apples:block/apple_plank" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apples/models/block/apple_plank_pressure_plate.json b/src/main/resources/assets/growthcraft_apples/models/block/apple_plank_pressure_plate.json new file mode 100644 index 0000000..37b59e8 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apples/models/block/apple_plank_pressure_plate.json @@ -0,0 +1,6 @@ +{ + "parent": "block/pressure_plate_up", + "textures": { + "texture": "growthcraft_apples:block/apple_plank" + } +} diff --git a/src/main/resources/assets/growthcraft_apples/models/block/apple_plank_pressure_plate_down.json b/src/main/resources/assets/growthcraft_apples/models/block/apple_plank_pressure_plate_down.json new file mode 100644 index 0000000..6f39604 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apples/models/block/apple_plank_pressure_plate_down.json @@ -0,0 +1,6 @@ +{ + "parent": "block/pressure_plate_down", + "textures": { + "texture": "growthcraft_apples:block/apple_plank" + } +} diff --git a/src/main/resources/assets/growthcraft_apples/models/block/apple_plank_slab.json b/src/main/resources/assets/growthcraft_apples/models/block/apple_plank_slab.json new file mode 100644 index 0000000..b205fd3 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apples/models/block/apple_plank_slab.json @@ -0,0 +1,8 @@ +{ + "parent": "block/slab", + "textures": { + "bottom": "growthcraft_apples:block/apple_plank", + "top": "growthcraft_apples:block/apple_plank", + "side": "growthcraft_apples:block/apple_plank" + } +} diff --git a/src/main/resources/assets/growthcraft_apples/models/block/apple_plank_slab_top.json b/src/main/resources/assets/growthcraft_apples/models/block/apple_plank_slab_top.json new file mode 100644 index 0000000..5c7097c --- /dev/null +++ b/src/main/resources/assets/growthcraft_apples/models/block/apple_plank_slab_top.json @@ -0,0 +1,8 @@ +{ + "parent": "block/slab_top", + "textures": { + "bottom": "growthcraft_apples:block/apple_plank", + "top": "growthcraft_apples:block/apple_plank", + "side": "growthcraft_apples:block/apple_plank" + } +} diff --git a/src/main/resources/assets/growthcraft_apples/models/block/apple_plank_stairs.json b/src/main/resources/assets/growthcraft_apples/models/block/apple_plank_stairs.json new file mode 100644 index 0000000..b945814 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apples/models/block/apple_plank_stairs.json @@ -0,0 +1,8 @@ +{ + "parent": "block/stairs", + "textures": { + "bottom": "growthcraft_apples:block/apple_plank", + "top": "growthcraft_apples:block/apple_plank", + "side": "growthcraft_apples:block/apple_plank" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apples/models/block/apple_plank_stairs_inner.json b/src/main/resources/assets/growthcraft_apples/models/block/apple_plank_stairs_inner.json new file mode 100644 index 0000000..f8ab5a7 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apples/models/block/apple_plank_stairs_inner.json @@ -0,0 +1,8 @@ +{ + "parent": "block/inner_stairs", + "textures": { + "bottom": "growthcraft_apples:block/apple_plank", + "top": "growthcraft_apples:block/apple_plank", + "side": "growthcraft_apples:block/apple_plank" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apples/models/block/apple_plank_stairs_outer.json b/src/main/resources/assets/growthcraft_apples/models/block/apple_plank_stairs_outer.json new file mode 100644 index 0000000..0be71f6 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apples/models/block/apple_plank_stairs_outer.json @@ -0,0 +1,8 @@ +{ + "parent": "block/outer_stairs", + "textures": { + "bottom": "growthcraft_apples:block/apple_plank", + "top": "growthcraft_apples:block/apple_plank", + "side": "growthcraft_apples:block/apple_plank" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apples/models/block/apple_plank_trapdoor_bottom.json b/src/main/resources/assets/growthcraft_apples/models/block/apple_plank_trapdoor_bottom.json new file mode 100644 index 0000000..d638a83 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apples/models/block/apple_plank_trapdoor_bottom.json @@ -0,0 +1,6 @@ +{ + "parent": "block/template_orientable_trapdoor_bottom", + "textures": { + "texture": "growthcraft_apples:block/apple_plank_trapdoor" + } +} diff --git a/src/main/resources/assets/growthcraft_apples/models/block/apple_plank_trapdoor_open.json b/src/main/resources/assets/growthcraft_apples/models/block/apple_plank_trapdoor_open.json new file mode 100644 index 0000000..2389ae5 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apples/models/block/apple_plank_trapdoor_open.json @@ -0,0 +1,6 @@ +{ + "parent": "block/template_orientable_trapdoor_open", + "textures": { + "texture": "growthcraft_apples:block/apple_plank_trapdoor" + } +} diff --git a/src/main/resources/assets/growthcraft_apples/models/block/apple_plank_trapdoor_top.json b/src/main/resources/assets/growthcraft_apples/models/block/apple_plank_trapdoor_top.json new file mode 100644 index 0000000..ae774f3 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apples/models/block/apple_plank_trapdoor_top.json @@ -0,0 +1,6 @@ +{ + "parent": "block/template_orientable_trapdoor_top", + "textures": { + "texture": "growthcraft_apples:block/apple_plank_trapdoor" + } +} diff --git a/src/main/resources/assets/growthcraft_apples/models/block/apple_tree_fruit_stage0.json b/src/main/resources/assets/growthcraft_apples/models/block/apple_tree_fruit_stage0.json new file mode 100644 index 0000000..47dd192 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apples/models/block/apple_tree_fruit_stage0.json @@ -0,0 +1,34 @@ +{ + "textures": { + "0": "growthcraft_apples:block/apple_tree_fruit_stage0", + "particle": "item/apple" + }, + "elements": [ + { + "name": "apple_stem", + "from": [ 7.0, 13.0, 7.0 ], + "to": [ 9.0, 16.0, 9.0 ], + "faces": { + "north": { "texture": "#0", "uv": [ 13.0, 0.0, 15.0, 3.0 ] }, + "east": { "texture": "#0", "uv": [ 13.0, 0.0, 15.0, 3.00 ] }, + "south": { "texture": "#0", "uv": [ 13.0, 0.0, 15.0, 3.0 ] }, + "west": { "texture": "#0", "uv": [ 13.0, 0.0, 15.0, 3.0 ] }, + "up": { "texture": "#0", "uv": [ 14.0, 0.0, 15.0, 2.0 ] }, + "down": { "texture": "#0", "uv": [ 14.0, 0.0, 15.0, 2.0 ]} + } + }, + { + "name": "apple_fruit", + "from": [ 6.0, 10.0, 6.0 ], + "to": [ 10.0, 14.0, 10.0 ], + "faces": { + "north": { "texture": "#0", "uv": [ 0.0, 0.0, 4.0, 4.0 ] }, + "east": { "texture": "#0", "uv": [ 0.0, 0.0, 4.0, 4.0 ] }, + "south": { "texture": "#0", "uv": [ 0.0, 0.0, 4.0, 4.0 ] }, + "west": { "texture": "#0", "uv": [ 0.0, 0.0, 4.0, 4.0 ] }, + "up": { "texture": "#0", "uv": [ 6.0, 0.0, 9.0, 4.0 ] }, + "down": { "texture": "#0", "uv": [ 0.0, 6.0, 4.0, 9.0 ] } + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apples/models/block/apple_tree_fruit_stage4.json b/src/main/resources/assets/growthcraft_apples/models/block/apple_tree_fruit_stage4.json new file mode 100644 index 0000000..21bfd07 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apples/models/block/apple_tree_fruit_stage4.json @@ -0,0 +1,34 @@ +{ + "textures": { + "0": "growthcraft_apples:block/apple_tree_fruit_stage4", + "particle": "item/apple" + }, + "elements": [ + { + "name": "apple_stem", + "from": [ 7.0, 13.0, 7.0 ], + "to": [ 9.0, 16.0, 9.0 ], + "faces": { + "north": { "texture": "#0", "uv": [ 13.0, 0.0, 15.0, 3.0 ] }, + "east": { "texture": "#0", "uv": [ 13.0, 0.0, 15.0, 3.00 ] }, + "south": { "texture": "#0", "uv": [ 13.0, 0.0, 15.0, 3.0 ] }, + "west": { "texture": "#0", "uv": [ 13.0, 0.0, 15.0, 3.0 ] }, + "up": { "texture": "#0", "uv": [ 14.0, 0.0, 15.0, 2.0 ] }, + "down": { "texture": "#0", "uv": [ 14.0, 0.0, 15.0, 2.0 ]} + } + }, + { + "name": "apple_fruit", + "from": [ 5.0, 9.0, 5.0 ], + "to": [ 11.0, 14.0, 11.0 ], + "faces": { + "north": { "texture": "#0", "uv": [ 0.0, 0.0, 5.0, 5.0 ] }, + "east": { "texture": "#0", "uv": [ 0.0, 0.0, 5.0, 5.0 ] }, + "south": { "texture": "#0", "uv": [ 0.0, 0.0, 5.0, 5.0 ] }, + "west": { "texture": "#0", "uv": [ 0.0, 0.0, 5.0, 5.0 ] }, + "up": { "texture": "#0", "uv": [ 6.0, 0.0, 9.0, 4.0 ] }, + "down": { "texture": "#0", "uv": [ 0.0, 6.0, 5.0, 10.0 ] } + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apples/models/block/apple_tree_fruit_stage7.json b/src/main/resources/assets/growthcraft_apples/models/block/apple_tree_fruit_stage7.json new file mode 100644 index 0000000..38ac0b1 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apples/models/block/apple_tree_fruit_stage7.json @@ -0,0 +1,34 @@ +{ + "textures": { + "0": "growthcraft_apples:block/apple_tree_fruit_stage7", + "particle": "item/apple" + }, + "elements": [ + { + "name": "apple_stem", + "from": [ 7.0, 13.0, 7.0 ], + "to": [ 9.0, 16.0, 9.0 ], + "faces": { + "north": { "texture": "#0", "uv": [ 13.0, 0.0, 15.0, 3.0 ] }, + "east": { "texture": "#0", "uv": [ 13.0, 0.0, 15.0, 3.00 ] }, + "south": { "texture": "#0", "uv": [ 13.0, 0.0, 15.0, 3.0 ] }, + "west": { "texture": "#0", "uv": [ 13.0, 0.0, 15.0, 3.0 ] }, + "up": { "texture": "#0", "uv": [ 14.0, 0.0, 15.0, 2.0 ] }, + "down": { "texture": "#0", "uv": [ 14.0, 0.0, 15.0, 2.0 ]} + } + }, + { + "name": "apple_fruit", + "from": [ 4.0, 7.0, 4.0 ], + "to": [ 12.0, 14.0, 12.0 ], + "faces": { + "north": { "texture": "#0", "uv": [ 0.0, 0.0, 6.0, 6.0 ] }, + "east": { "texture": "#0", "uv": [ 0.0, 0.0, 6.0, 6.0 ] }, + "south": { "texture": "#0", "uv": [ 0.0, 0.0, 6.0, 6.0 ] }, + "west": { "texture": "#0", "uv": [ 0.0, 0.0, 6.0, 6.0 ] }, + "up": { "texture": "#0", "uv": [ 6.0, 0.0, 10.0, 5.0 ] }, + "down": { "texture": "#0", "uv": [ 0.0, 6.0, 6.0, 11.0 ] } + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apples/models/block/apple_tree_leaves.json b/src/main/resources/assets/growthcraft_apples/models/block/apple_tree_leaves.json new file mode 100644 index 0000000..b93e561 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apples/models/block/apple_tree_leaves.json @@ -0,0 +1,7 @@ +{ + "parent": "block/leaves", + "render_type": "cutout", + "textures": { + "all": "growthcraft_apples:block/apple_tree_leaves" + } +} diff --git a/src/main/resources/assets/growthcraft_apples/models/block/apple_tree_sapling.json b/src/main/resources/assets/growthcraft_apples/models/block/apple_tree_sapling.json new file mode 100644 index 0000000..4b3c1c5 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apples/models/block/apple_tree_sapling.json @@ -0,0 +1,7 @@ +{ + "parent": "block/cross", + "render_type": "cutout", + "textures": { + "cross": "growthcraft_apples:block/apple_tree_sapling" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apples/models/block/apple_wood.json b/src/main/resources/assets/growthcraft_apples/models/block/apple_wood.json new file mode 100644 index 0000000..76ca3c0 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apples/models/block/apple_wood.json @@ -0,0 +1,7 @@ +{ + "parent": "block/cube_column", + "textures": { + "end": "growthcraft_apples:block/apple_wood_log", + "side": "growthcraft_apples:block/apple_wood_log" + } +} diff --git a/src/main/resources/assets/growthcraft_apples/models/block/apple_wood_log.json b/src/main/resources/assets/growthcraft_apples/models/block/apple_wood_log.json new file mode 100644 index 0000000..00e4fb0 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apples/models/block/apple_wood_log.json @@ -0,0 +1,7 @@ +{ + "parent": "block/cube_column", + "textures": { + "end": "growthcraft_apples:block/apple_wood_log_top", + "side": "growthcraft_apples:block/apple_wood_log" + } +} diff --git a/src/main/resources/assets/growthcraft_apples/models/block/apple_wood_log_stripped.json b/src/main/resources/assets/growthcraft_apples/models/block/apple_wood_log_stripped.json new file mode 100644 index 0000000..affbc9c --- /dev/null +++ b/src/main/resources/assets/growthcraft_apples/models/block/apple_wood_log_stripped.json @@ -0,0 +1,7 @@ +{ + "parent": "block/cube_column", + "textures": { + "end": "growthcraft_apples:block/stripped_apple_log_top", + "side": "growthcraft_apples:block/stripped_apple_log" + } +} diff --git a/src/main/resources/assets/growthcraft_apples/models/block/apple_wood_stripped.json b/src/main/resources/assets/growthcraft_apples/models/block/apple_wood_stripped.json new file mode 100644 index 0000000..a79f39a --- /dev/null +++ b/src/main/resources/assets/growthcraft_apples/models/block/apple_wood_stripped.json @@ -0,0 +1,7 @@ +{ + "parent": "block/cube_column", + "textures": { + "end": "growthcraft_apples:block/stripped_apple_log", + "side": "growthcraft_apples:block/stripped_apple_log" + } +} diff --git a/src/main/resources/assets/growthcraft_apples/models/block/bee_box_apple.json b/src/main/resources/assets/growthcraft_apples/models/block/bee_box_apple.json new file mode 100644 index 0000000..fcae669 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apples/models/block/bee_box_apple.json @@ -0,0 +1,289 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "0": "growthcraft_apples:block/apple_wood_log", + "1": "growthcraft_apples:block/apple_wood_log_top", + "2": "growthcraft_apples:block/apple_plank", + "3": "growthcraft_apples:block/apple_plank_trapdoor", + "missing": "growthcraft:block/missing", + "particle": "growthcraft_apples:block/apple_wood_log" + }, + "elements": [ + { + "name": "foot_NE", + "from": [12, 0, 2], + "to": [14, 3, 4], + "faces": { + "north": {"uv": [0, 7, 7, 16], "texture": "#0"}, + "east": {"uv": [9, 7, 16, 16], "texture": "#0"}, + "south": {"uv": [0, 7, 7, 16], "texture": "#0"}, + "west": {"uv": [9, 7, 16, 16], "texture": "#0"}, + "up": {"uv": [0, 0, 7, 7], "texture": "#0"}, + "down": {"uv": [9, 0, 16, 7], "texture": "#0"} + } + }, + { + "name": "foot_NW", + "from": [2, 0, 2], + "to": [4, 3, 4], + "faces": { + "north": {"uv": [0, 7, 7, 16], "texture": "#0"}, + "east": {"uv": [9, 7, 16, 16], "texture": "#0"}, + "south": {"uv": [0, 7, 7, 16], "texture": "#0"}, + "west": {"uv": [9, 7, 16, 16], "texture": "#0"}, + "up": {"uv": [0, 0, 7, 7], "texture": "#0"}, + "down": {"uv": [9, 0, 16, 7], "texture": "#0"} + } + }, + { + "name": "foot_SE", + "from": [12, 0, 12], + "to": [14, 3, 14], + "faces": { + "north": {"uv": [0, 7, 7, 16], "texture": "#0"}, + "east": {"uv": [9, 7, 16, 16], "texture": "#0"}, + "south": {"uv": [0, 7, 7, 16], "texture": "#0"}, + "west": {"uv": [9, 7, 16, 16], "texture": "#0"}, + "up": {"uv": [0, 0, 7, 7], "texture": "#0"}, + "down": {"uv": [9, 0, 16, 7], "texture": "#0"} + } + }, + { + "name": "foot_SW", + "from": [2, 0, 12], + "to": [4, 3, 14], + "faces": { + "north": {"uv": [0, 7, 7, 16], "texture": "#0"}, + "east": {"uv": [9, 7, 16, 16], "texture": "#0"}, + "south": {"uv": [0, 7, 7, 16], "texture": "#0"}, + "west": {"uv": [9, 7, 16, 16], "texture": "#0"}, + "up": {"uv": [0, 0, 7, 7], "texture": "#0"}, + "down": {"uv": [9, 0, 16, 7], "texture": "#0"} + } + }, + { + "name": "bottom", + "from": [1, 3, 1], + "to": [15, 4, 15], + "faces": { + "north": {"uv": [1, 0, 15, 1], "texture": "#1"}, + "east": {"uv": [1, 15, 15, 16], "texture": "#1"}, + "south": {"uv": [1, 15, 15, 16], "texture": "#1"}, + "west": {"uv": [1, 0, 15, 1], "texture": "#1"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#1"}, + "down": {"uv": [0, 0, 16, 16], "texture": "#1"} + } + }, + { + "name": "bottom", + "from": [0, 11, 0], + "to": [16, 12, 16], + "faces": { + "north": {"uv": [0, 0, 16, 1], "texture": "#1"}, + "east": {"uv": [0, 15, 16, 16], "texture": "#1"}, + "south": {"uv": [0, 15, 16, 16], "texture": "#1"}, + "west": {"uv": [0, 15, 16, 16], "texture": "#1"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#1"}, + "down": {"uv": [0, 0, 16, 16], "texture": "#1"} + } + }, + { + "name": "bottom", + "from": [0, 12, 0], + "to": [16, 13, 16], + "faces": { + "north": {"uv": [0, 14, 16, 15], "texture": "#1"}, + "east": {"uv": [0, 1, 16, 2], "texture": "#1"}, + "south": {"uv": [0, 14, 16, 15], "texture": "#1"}, + "west": {"uv": [0, 1, 16, 2], "texture": "#1"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#1"}, + "down": {"uv": [0, 0, 16, 16], "texture": "#1"} + } + }, + { + "name": "bottom", + "from": [0, 13, 0], + "to": [16, 14, 16], + "faces": { + "north": {"uv": [0, 15, 16, 16], "texture": "#1"}, + "east": {"uv": [0, 0, 16, 1], "texture": "#1"}, + "south": {"uv": [0, 0, 16, 1], "texture": "#1"}, + "west": {"uv": [0, 0, 16, 1], "texture": "#1"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#1"}, + "down": {"uv": [0, 0, 16, 16], "texture": "#1"} + } + }, + { + "name": "post_NW", + "from": [1, 4, 1], + "to": [2, 12, 2], + "faces": { + "north": {"uv": [0, 4, 1, 12], "texture": "#1"}, + "east": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "south": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "west": {"uv": [15, 4, 16, 12], "texture": "#1"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#missing"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#missing"} + } + }, + { + "name": "post_NE", + "from": [14, 4, 1], + "to": [15, 12, 2], + "faces": { + "north": {"uv": [0, 0, 1, 8], "texture": "#1"}, + "east": {"uv": [15, 0, 16, 8], "texture": "#1"}, + "south": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "west": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#missing"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#missing"} + } + }, + { + "name": "post_SE", + "from": [14, 4, 14], + "to": [15, 12, 15], + "faces": { + "north": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "east": {"uv": [0, 4, 1, 12], "texture": "#1"}, + "south": {"uv": [15, 7, 16, 15], "texture": "#1"}, + "west": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#missing"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#missing"} + } + }, + { + "name": "post_SW", + "from": [1, 4, 14], + "to": [2, 12, 15], + "faces": { + "north": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "east": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "south": {"uv": [15, 0, 16, 8], "texture": "#1"}, + "west": {"uv": [0, 7, 1, 15], "texture": "#1"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#missing"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#missing"} + } + }, + { + "from": [2, 4, 1], + "to": [14, 12, 2], + "faces": { + "north": {"uv": [2, 0, 14, 8], "texture": "#2"}, + "east": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "south": {"uv": [0, 0, 12, 8], "texture": "#missing"}, + "west": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "up": {"uv": [0, 0, 12, 1], "texture": "#missing"}, + "down": {"uv": [0, 0, 12, 1], "texture": "#missing"} + } + }, + { + "from": [2, 4, 14], + "to": [14, 12, 15], + "faces": { + "north": {"uv": [0, 0, 12, 8], "texture": "#missing"}, + "east": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "south": {"uv": [2, 0, 14, 8], "texture": "#2"}, + "west": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "up": {"uv": [0, 0, 12, 1], "texture": "#missing"}, + "down": {"uv": [0, 0, 12, 1], "texture": "#missing"} + } + }, + { + "from": [1, 4, 2], + "to": [2, 12, 14], + "faces": { + "north": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "east": {"uv": [0, 0, 12, 8], "texture": "#missing"}, + "south": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "west": {"uv": [2, 0, 14, 8], "texture": "#2"}, + "up": {"uv": [0, 0, 1, 12], "texture": "#missing"}, + "down": {"uv": [0, 0, 1, 12], "texture": "#missing"} + } + }, + { + "from": [14, 4, 2], + "to": [15, 12, 14], + "faces": { + "north": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "east": {"uv": [2, 0, 14, 8], "texture": "#2"}, + "south": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "west": {"uv": [0, 0, 12, 8], "texture": "#missing"}, + "up": {"uv": [0, 0, 1, 12], "texture": "#missing"}, + "down": {"uv": [0, 0, 1, 12], "texture": "#missing"} + } + }, + { + "name": "beebox_top", + "from": [2, 14, 2], + "to": [14, 16, 14], + "faces": { + "north": {"uv": [0, 0, 16, 2], "texture": "#1"}, + "east": {"uv": [0, 0, 16, 2], "texture": "#1"}, + "south": {"uv": [0, 0, 16, 2], "texture": "#1"}, + "west": {"uv": [0, 0, 16, 2], "texture": "#1"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#1"} + } + }, + { + "from": [5, 4, 0.5], + "to": [11, 6, 1.5], + "faces": { + "north": {"uv": [5, 14, 11, 16], "texture": "#3"}, + "east": {"uv": [5, 14, 6, 16], "texture": "#3"}, + "south": {"uv": [0, 0, 6, 2], "texture": "#missing"}, + "west": {"uv": [5, 14, 6, 16], "texture": "#3"}, + "up": {"uv": [5, 15, 11, 16], "texture": "#3"}, + "down": {"uv": [5, 14, 11, 15], "texture": "#3"} + } + }, + { + "from": [6, 6, 0.5], + "to": [10, 7, 1.5], + "faces": { + "north": {"uv": [5, 0, 9, 1], "texture": "#1"}, + "east": {"uv": [0, 4, 1, 5], "texture": "#1"}, + "south": {"uv": [0, 0, 4, 1], "texture": "#missing"}, + "west": {"uv": [15, 10, 16, 11], "texture": "#1"}, + "up": {"uv": [2, 15, 6, 16], "texture": "#1"}, + "down": {"uv": [0, 0, 4, 1], "texture": "#missing"} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [75, -135, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "thirdperson_lefthand": { + "rotation": [75, -135, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson_righthand": { + "rotation": [0, -135, 0], + "scale": [0.4, 0.4, 0.4] + }, + "firstperson_lefthand": { + "rotation": [0, -135, 0], + "scale": [0.4, 0.4, 0.4] + }, + "ground": { + "rotation": [0, 180, 0], + "translation": [0, 3, 0], + "scale": [0.25, 0.25, 0.25] + }, + "gui": { + "rotation": [30, -45, 0], + "scale": [0.625, 0.625, 0.625] + }, + "head": { + "rotation": [0, 180, 0] + }, + "fixed": { + "rotation": [0, 180, 0], + "scale": [0.5, 0.5, 0.5] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apples/models/item/apple_cider_fluid_bucket.json b/src/main/resources/assets/growthcraft_apples/models/item/apple_cider_fluid_bucket.json new file mode 100644 index 0000000..f5fba3f --- /dev/null +++ b/src/main/resources/assets/growthcraft_apples/models/item/apple_cider_fluid_bucket.json @@ -0,0 +1,7 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft:item/bucket/bucket_fluid", + "layer1": "growthcraft:item/bucket/bucket_base" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apples/models/item/apple_juice_fluid_bucket.json b/src/main/resources/assets/growthcraft_apples/models/item/apple_juice_fluid_bucket.json new file mode 100644 index 0000000..f5fba3f --- /dev/null +++ b/src/main/resources/assets/growthcraft_apples/models/item/apple_juice_fluid_bucket.json @@ -0,0 +1,7 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft:item/bucket/bucket_fluid", + "layer1": "growthcraft:item/bucket/bucket_base" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apples/models/item/apple_plank.json b/src/main/resources/assets/growthcraft_apples/models/item/apple_plank.json new file mode 100644 index 0000000..6f3af11 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apples/models/item/apple_plank.json @@ -0,0 +1,3 @@ +{ + "parent": "growthcraft_apples:block/apple_plank" +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apples/models/item/apple_plank_button.json b/src/main/resources/assets/growthcraft_apples/models/item/apple_plank_button.json new file mode 100644 index 0000000..402e30c --- /dev/null +++ b/src/main/resources/assets/growthcraft_apples/models/item/apple_plank_button.json @@ -0,0 +1,3 @@ +{ + "parent": "growthcraft_apples:block/apple_plank_button_inventory" +} diff --git a/src/main/resources/assets/growthcraft_apples/models/item/apple_plank_door.json b/src/main/resources/assets/growthcraft_apples/models/item/apple_plank_door.json new file mode 100644 index 0000000..fc6cc93 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apples/models/item/apple_plank_door.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_apples:item/apple_plank_door" + } +} diff --git a/src/main/resources/assets/growthcraft_apples/models/item/apple_plank_fence.json b/src/main/resources/assets/growthcraft_apples/models/item/apple_plank_fence.json new file mode 100644 index 0000000..3715aab --- /dev/null +++ b/src/main/resources/assets/growthcraft_apples/models/item/apple_plank_fence.json @@ -0,0 +1,6 @@ +{ + "parent": "block/fence_inventory", + "textures": { + "texture": "growthcraft_apples:block/apple_plank" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apples/models/item/apple_plank_fence_gate.json b/src/main/resources/assets/growthcraft_apples/models/item/apple_plank_fence_gate.json new file mode 100644 index 0000000..44d3a86 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apples/models/item/apple_plank_fence_gate.json @@ -0,0 +1,3 @@ +{ + "parent": "growthcraft_apples:block/apple_plank_fence_gate" +} diff --git a/src/main/resources/assets/growthcraft_apples/models/item/apple_plank_pressure_plate.json b/src/main/resources/assets/growthcraft_apples/models/item/apple_plank_pressure_plate.json new file mode 100644 index 0000000..dc868d9 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apples/models/item/apple_plank_pressure_plate.json @@ -0,0 +1,3 @@ +{ + "parent": "growthcraft_apples:block/apple_plank_pressure_plate" +} diff --git a/src/main/resources/assets/growthcraft_apples/models/item/apple_plank_slab.json b/src/main/resources/assets/growthcraft_apples/models/item/apple_plank_slab.json new file mode 100644 index 0000000..e61bec6 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apples/models/item/apple_plank_slab.json @@ -0,0 +1,3 @@ +{ + "parent": "block/acacia_slab" +} diff --git a/src/main/resources/assets/growthcraft_apples/models/item/apple_plank_stairs.json b/src/main/resources/assets/growthcraft_apples/models/item/apple_plank_stairs.json new file mode 100644 index 0000000..a6c4868 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apples/models/item/apple_plank_stairs.json @@ -0,0 +1,22 @@ +{ + "parent": "growthcraft_apples:block/apple_plank_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/growthcraft_apples/models/item/apple_plank_trapdoor.json b/src/main/resources/assets/growthcraft_apples/models/item/apple_plank_trapdoor.json new file mode 100644 index 0000000..f176e94 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apples/models/item/apple_plank_trapdoor.json @@ -0,0 +1,3 @@ +{ + "parent": "growthcraft_apples:block/apple_plank_trapdoor_bottom" +} diff --git a/src/main/resources/assets/growthcraft_apples/models/item/apple_seeds.json b/src/main/resources/assets/growthcraft_apples/models/item/apple_seeds.json new file mode 100644 index 0000000..5d1a40e --- /dev/null +++ b/src/main/resources/assets/growthcraft_apples/models/item/apple_seeds.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "growthcraft_apples:item/apple_seeds" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apples/models/item/apple_tree_fruit.json b/src/main/resources/assets/growthcraft_apples/models/item/apple_tree_fruit.json new file mode 100644 index 0000000..56e9902 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apples/models/item/apple_tree_fruit.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "item/apple" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apples/models/item/apple_tree_leaves.json b/src/main/resources/assets/growthcraft_apples/models/item/apple_tree_leaves.json new file mode 100644 index 0000000..6821d90 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apples/models/item/apple_tree_leaves.json @@ -0,0 +1,3 @@ +{ + "parent": "growthcraft_apples:block/apple_tree_leaves" +} diff --git a/src/main/resources/assets/growthcraft_apples/models/item/apple_tree_sapling.json b/src/main/resources/assets/growthcraft_apples/models/item/apple_tree_sapling.json new file mode 100644 index 0000000..e3858f6 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apples/models/item/apple_tree_sapling.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_apples:block/apple_tree_sapling" + } +} diff --git a/src/main/resources/assets/growthcraft_apples/models/item/apple_wood.json b/src/main/resources/assets/growthcraft_apples/models/item/apple_wood.json new file mode 100644 index 0000000..9101127 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apples/models/item/apple_wood.json @@ -0,0 +1,3 @@ +{ + "parent": "growthcraft_apples:block/apple_wood" +} diff --git a/src/main/resources/assets/growthcraft_apples/models/item/apple_wood_log.json b/src/main/resources/assets/growthcraft_apples/models/item/apple_wood_log.json new file mode 100644 index 0000000..3656021 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apples/models/item/apple_wood_log.json @@ -0,0 +1,3 @@ +{ + "parent": "growthcraft_apples:block/apple_wood_log" +} diff --git a/src/main/resources/assets/growthcraft_apples/models/item/apple_wood_log_stripped.json b/src/main/resources/assets/growthcraft_apples/models/item/apple_wood_log_stripped.json new file mode 100644 index 0000000..83a01ab --- /dev/null +++ b/src/main/resources/assets/growthcraft_apples/models/item/apple_wood_log_stripped.json @@ -0,0 +1,3 @@ +{ + "parent": "growthcraft_apples:block/apple_wood_log_stripped" +} diff --git a/src/main/resources/assets/growthcraft_apples/models/item/apple_wood_stripped.json b/src/main/resources/assets/growthcraft_apples/models/item/apple_wood_stripped.json new file mode 100644 index 0000000..12e97ae --- /dev/null +++ b/src/main/resources/assets/growthcraft_apples/models/item/apple_wood_stripped.json @@ -0,0 +1,3 @@ +{ + "parent": "growthcraft_apples:block/apple_wood_stripped" +} diff --git a/src/main/resources/assets/growthcraft_apples/models/item/bee_box_apple.json b/src/main/resources/assets/growthcraft_apples/models/item/bee_box_apple.json new file mode 100644 index 0000000..3f150b3 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apples/models/item/bee_box_apple.json @@ -0,0 +1,3 @@ +{ + "parent": "growthcraft_apples:block/bee_box_apple" +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apples/models/item/fishtrap_apple.json b/src/main/resources/assets/growthcraft_apples/models/item/fishtrap_apple.json new file mode 100644 index 0000000..89c0c61 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apples/models/item/fishtrap_apple.json @@ -0,0 +1,3 @@ +{ + "parent": "growthcraft_apples:block/fishtrap_apple" +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apples/textures/block/apple_crop_stem.png b/src/main/resources/assets/growthcraft_apples/textures/block/apple_crop_stem.png new file mode 100644 index 0000000..5bbd538 Binary files /dev/null and b/src/main/resources/assets/growthcraft_apples/textures/block/apple_crop_stem.png differ diff --git a/src/main/resources/assets/growthcraft_apples/textures/block/apple_door_lower.png b/src/main/resources/assets/growthcraft_apples/textures/block/apple_door_lower.png new file mode 100644 index 0000000..9a0f778 Binary files /dev/null and b/src/main/resources/assets/growthcraft_apples/textures/block/apple_door_lower.png differ diff --git a/src/main/resources/assets/growthcraft_apples/textures/block/apple_door_upper.png b/src/main/resources/assets/growthcraft_apples/textures/block/apple_door_upper.png new file mode 100644 index 0000000..d1a425e Binary files /dev/null and b/src/main/resources/assets/growthcraft_apples/textures/block/apple_door_upper.png differ diff --git a/src/main/resources/assets/growthcraft_apples/textures/block/apple_plank.png b/src/main/resources/assets/growthcraft_apples/textures/block/apple_plank.png new file mode 100644 index 0000000..a1f8a44 Binary files /dev/null and b/src/main/resources/assets/growthcraft_apples/textures/block/apple_plank.png differ diff --git a/src/main/resources/assets/growthcraft_apples/textures/block/apple_plank_door_bottom.png b/src/main/resources/assets/growthcraft_apples/textures/block/apple_plank_door_bottom.png new file mode 100644 index 0000000..9a0f778 Binary files /dev/null and b/src/main/resources/assets/growthcraft_apples/textures/block/apple_plank_door_bottom.png differ diff --git a/src/main/resources/assets/growthcraft_apples/textures/block/apple_plank_door_top.png b/src/main/resources/assets/growthcraft_apples/textures/block/apple_plank_door_top.png new file mode 100644 index 0000000..d1a425e Binary files /dev/null and b/src/main/resources/assets/growthcraft_apples/textures/block/apple_plank_door_top.png differ diff --git a/src/main/resources/assets/growthcraft_apples/textures/block/apple_plank_trapdoor.png b/src/main/resources/assets/growthcraft_apples/textures/block/apple_plank_trapdoor.png new file mode 100644 index 0000000..454a1c7 Binary files /dev/null and b/src/main/resources/assets/growthcraft_apples/textures/block/apple_plank_trapdoor.png differ diff --git a/src/main/resources/assets/growthcraft_apples/textures/block/apple_tree_fruit_stage0.png b/src/main/resources/assets/growthcraft_apples/textures/block/apple_tree_fruit_stage0.png new file mode 100644 index 0000000..1fb4696 Binary files /dev/null and b/src/main/resources/assets/growthcraft_apples/textures/block/apple_tree_fruit_stage0.png differ diff --git a/src/main/resources/assets/growthcraft_apples/textures/block/apple_tree_fruit_stage4.png b/src/main/resources/assets/growthcraft_apples/textures/block/apple_tree_fruit_stage4.png new file mode 100644 index 0000000..ee98aec Binary files /dev/null and b/src/main/resources/assets/growthcraft_apples/textures/block/apple_tree_fruit_stage4.png differ diff --git a/src/main/resources/assets/growthcraft_apples/textures/block/apple_tree_fruit_stage7.png b/src/main/resources/assets/growthcraft_apples/textures/block/apple_tree_fruit_stage7.png new file mode 100644 index 0000000..0e05404 Binary files /dev/null and b/src/main/resources/assets/growthcraft_apples/textures/block/apple_tree_fruit_stage7.png differ diff --git a/src/main/resources/assets/growthcraft_apples/textures/block/apple_tree_leaves.png b/src/main/resources/assets/growthcraft_apples/textures/block/apple_tree_leaves.png new file mode 100644 index 0000000..2531ef9 Binary files /dev/null and b/src/main/resources/assets/growthcraft_apples/textures/block/apple_tree_leaves.png differ diff --git a/src/main/resources/assets/growthcraft_apples/textures/block/apple_tree_leaves_opaque.png b/src/main/resources/assets/growthcraft_apples/textures/block/apple_tree_leaves_opaque.png new file mode 100644 index 0000000..868a64a Binary files /dev/null and b/src/main/resources/assets/growthcraft_apples/textures/block/apple_tree_leaves_opaque.png differ diff --git a/src/main/resources/assets/growthcraft_apples/textures/block/apple_tree_sapling.png b/src/main/resources/assets/growthcraft_apples/textures/block/apple_tree_sapling.png new file mode 100644 index 0000000..fe2acbd Binary files /dev/null and b/src/main/resources/assets/growthcraft_apples/textures/block/apple_tree_sapling.png differ diff --git a/src/main/resources/assets/growthcraft_apples/textures/block/apple_wood_log.png b/src/main/resources/assets/growthcraft_apples/textures/block/apple_wood_log.png new file mode 100644 index 0000000..61c7421 Binary files /dev/null and b/src/main/resources/assets/growthcraft_apples/textures/block/apple_wood_log.png differ diff --git a/src/main/resources/assets/growthcraft_apples/textures/block/apple_wood_log_top.png b/src/main/resources/assets/growthcraft_apples/textures/block/apple_wood_log_top.png new file mode 100644 index 0000000..eeb3fb6 Binary files /dev/null and b/src/main/resources/assets/growthcraft_apples/textures/block/apple_wood_log_top.png differ diff --git a/src/main/resources/assets/growthcraft_apples/textures/block/fishtrap_apple.png b/src/main/resources/assets/growthcraft_apples/textures/block/fishtrap_apple.png new file mode 100644 index 0000000..e217672 Binary files /dev/null and b/src/main/resources/assets/growthcraft_apples/textures/block/fishtrap_apple.png differ diff --git a/src/main/resources/assets/growthcraft_apples/textures/block/fishtrap_apple_front.png b/src/main/resources/assets/growthcraft_apples/textures/block/fishtrap_apple_front.png new file mode 100644 index 0000000..ae6ab97 Binary files /dev/null and b/src/main/resources/assets/growthcraft_apples/textures/block/fishtrap_apple_front.png differ diff --git a/src/main/resources/assets/growthcraft_apples/textures/block/fluid/apple_cider_fluid.png b/src/main/resources/assets/growthcraft_apples/textures/block/fluid/apple_cider_fluid.png new file mode 100644 index 0000000..c6f2fa9 Binary files /dev/null and b/src/main/resources/assets/growthcraft_apples/textures/block/fluid/apple_cider_fluid.png differ diff --git a/src/main/resources/assets/growthcraft_apples/textures/block/fluid/apple_cider_fluid_flowing.png b/src/main/resources/assets/growthcraft_apples/textures/block/fluid/apple_cider_fluid_flowing.png new file mode 100644 index 0000000..5b12070 Binary files /dev/null and b/src/main/resources/assets/growthcraft_apples/textures/block/fluid/apple_cider_fluid_flowing.png differ diff --git a/src/main/resources/assets/growthcraft_apples/textures/block/fluid/apple_cider_fluid_flowing.png.mcmeta b/src/main/resources/assets/growthcraft_apples/textures/block/fluid/apple_cider_fluid_flowing.png.mcmeta new file mode 100644 index 0000000..4f0718a --- /dev/null +++ b/src/main/resources/assets/growthcraft_apples/textures/block/fluid/apple_cider_fluid_flowing.png.mcmeta @@ -0,0 +1,3 @@ +{ + "animation": {} +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apples/textures/block/fluid/apple_cider_fluid_overlay.png b/src/main/resources/assets/growthcraft_apples/textures/block/fluid/apple_cider_fluid_overlay.png new file mode 100644 index 0000000..d5d4b02 Binary files /dev/null and b/src/main/resources/assets/growthcraft_apples/textures/block/fluid/apple_cider_fluid_overlay.png differ diff --git a/src/main/resources/assets/growthcraft_apples/textures/block/fluid/apple_cider_fluid_still.png b/src/main/resources/assets/growthcraft_apples/textures/block/fluid/apple_cider_fluid_still.png new file mode 100644 index 0000000..fe5c394 Binary files /dev/null and b/src/main/resources/assets/growthcraft_apples/textures/block/fluid/apple_cider_fluid_still.png differ diff --git a/src/main/resources/assets/growthcraft_apples/textures/block/fluid/apple_cider_fluid_still.png.mcmeta b/src/main/resources/assets/growthcraft_apples/textures/block/fluid/apple_cider_fluid_still.png.mcmeta new file mode 100644 index 0000000..0645f48 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apples/textures/block/fluid/apple_cider_fluid_still.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 2 + } +} diff --git a/src/main/resources/assets/growthcraft_apples/textures/block/fluid/apple_juice_fluid.png b/src/main/resources/assets/growthcraft_apples/textures/block/fluid/apple_juice_fluid.png new file mode 100644 index 0000000..c6f2fa9 Binary files /dev/null and b/src/main/resources/assets/growthcraft_apples/textures/block/fluid/apple_juice_fluid.png differ diff --git a/src/main/resources/assets/growthcraft_apples/textures/block/fluid/apple_juice_fluid_flowing.png b/src/main/resources/assets/growthcraft_apples/textures/block/fluid/apple_juice_fluid_flowing.png new file mode 100644 index 0000000..5b12070 Binary files /dev/null and b/src/main/resources/assets/growthcraft_apples/textures/block/fluid/apple_juice_fluid_flowing.png differ diff --git a/src/main/resources/assets/growthcraft_apples/textures/block/fluid/apple_juice_fluid_flowing.png.mcmeta b/src/main/resources/assets/growthcraft_apples/textures/block/fluid/apple_juice_fluid_flowing.png.mcmeta new file mode 100644 index 0000000..4f0718a --- /dev/null +++ b/src/main/resources/assets/growthcraft_apples/textures/block/fluid/apple_juice_fluid_flowing.png.mcmeta @@ -0,0 +1,3 @@ +{ + "animation": {} +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_apples/textures/block/fluid/apple_juice_fluid_overlay.png b/src/main/resources/assets/growthcraft_apples/textures/block/fluid/apple_juice_fluid_overlay.png new file mode 100644 index 0000000..d5d4b02 Binary files /dev/null and b/src/main/resources/assets/growthcraft_apples/textures/block/fluid/apple_juice_fluid_overlay.png differ diff --git a/src/main/resources/assets/growthcraft_apples/textures/block/fluid/apple_juice_fluid_still.png b/src/main/resources/assets/growthcraft_apples/textures/block/fluid/apple_juice_fluid_still.png new file mode 100644 index 0000000..fe5c394 Binary files /dev/null and b/src/main/resources/assets/growthcraft_apples/textures/block/fluid/apple_juice_fluid_still.png differ diff --git a/src/main/resources/assets/growthcraft_apples/textures/block/fluid/apple_juice_fluid_still.png.mcmeta b/src/main/resources/assets/growthcraft_apples/textures/block/fluid/apple_juice_fluid_still.png.mcmeta new file mode 100644 index 0000000..0645f48 --- /dev/null +++ b/src/main/resources/assets/growthcraft_apples/textures/block/fluid/apple_juice_fluid_still.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 2 + } +} diff --git a/src/main/resources/assets/growthcraft_apples/textures/block/stripped_apple_log.png b/src/main/resources/assets/growthcraft_apples/textures/block/stripped_apple_log.png new file mode 100644 index 0000000..f5ca0cc Binary files /dev/null and b/src/main/resources/assets/growthcraft_apples/textures/block/stripped_apple_log.png differ diff --git a/src/main/resources/assets/growthcraft_apples/textures/block/stripped_apple_log_top.png b/src/main/resources/assets/growthcraft_apples/textures/block/stripped_apple_log_top.png new file mode 100644 index 0000000..e20546a Binary files /dev/null and b/src/main/resources/assets/growthcraft_apples/textures/block/stripped_apple_log_top.png differ diff --git a/src/main/resources/assets/growthcraft_apples/textures/item/apple_door.png b/src/main/resources/assets/growthcraft_apples/textures/item/apple_door.png new file mode 100644 index 0000000..e600110 Binary files /dev/null and b/src/main/resources/assets/growthcraft_apples/textures/item/apple_door.png differ diff --git a/src/main/resources/assets/growthcraft_apples/textures/item/apple_plank_door.png b/src/main/resources/assets/growthcraft_apples/textures/item/apple_plank_door.png new file mode 100644 index 0000000..e600110 Binary files /dev/null and b/src/main/resources/assets/growthcraft_apples/textures/item/apple_plank_door.png differ diff --git a/src/main/resources/assets/growthcraft_apples/textures/item/apple_seeds.png b/src/main/resources/assets/growthcraft_apples/textures/item/apple_seeds.png new file mode 100644 index 0000000..be580a2 Binary files /dev/null and b/src/main/resources/assets/growthcraft_apples/textures/item/apple_seeds.png differ diff --git a/src/main/resources/assets/growthcraft_apples/textures/item/bucket/bucket_base.png b/src/main/resources/assets/growthcraft_apples/textures/item/bucket/bucket_base.png new file mode 100644 index 0000000..86e6a34 Binary files /dev/null and b/src/main/resources/assets/growthcraft_apples/textures/item/bucket/bucket_base.png differ diff --git a/src/main/resources/assets/growthcraft_apples/textures/item/bucket/bucket_fluid.png b/src/main/resources/assets/growthcraft_apples/textures/item/bucket/bucket_fluid.png new file mode 100644 index 0000000..46b2121 Binary files /dev/null and b/src/main/resources/assets/growthcraft_apples/textures/item/bucket/bucket_fluid.png differ diff --git a/src/main/resources/assets/growthcraft_apples/textures/patchouli/screenshots/apple_blocks.png b/src/main/resources/assets/growthcraft_apples/textures/patchouli/screenshots/apple_blocks.png new file mode 100644 index 0000000..61d1804 Binary files /dev/null and b/src/main/resources/assets/growthcraft_apples/textures/patchouli/screenshots/apple_blocks.png differ diff --git a/src/main/resources/assets/growthcraft_apples/textures/patchouli/screenshots/apple_tree_fullgrown.png b/src/main/resources/assets/growthcraft_apples/textures/patchouli/screenshots/apple_tree_fullgrown.png new file mode 100644 index 0000000..b53a4dc Binary files /dev/null and b/src/main/resources/assets/growthcraft_apples/textures/patchouli/screenshots/apple_tree_fullgrown.png differ diff --git a/src/main/resources/assets/growthcraft_apples/textures/patchouli/screenshots/apple_tree_sapling.png b/src/main/resources/assets/growthcraft_apples/textures/patchouli/screenshots/apple_tree_sapling.png new file mode 100644 index 0000000..d6aae01 Binary files /dev/null and b/src/main/resources/assets/growthcraft_apples/textures/patchouli/screenshots/apple_tree_sapling.png differ diff --git a/src/main/resources/assets/growthcraft_bamboo/blockstates/bamboo_plank.json b/src/main/resources/assets/growthcraft_bamboo/blockstates/bamboo_plank.json new file mode 100644 index 0000000..7102dd8 --- /dev/null +++ b/src/main/resources/assets/growthcraft_bamboo/blockstates/bamboo_plank.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "growthcraft_bamboo:block/bamboo_plank" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_bamboo/blockstates/bamboo_plank_button.json b/src/main/resources/assets/growthcraft_bamboo/blockstates/bamboo_plank_button.json new file mode 100644 index 0000000..2ba1896 --- /dev/null +++ b/src/main/resources/assets/growthcraft_bamboo/blockstates/bamboo_plank_button.json @@ -0,0 +1,115 @@ +{ + "variants": { + "face=floor,facing=east,powered=false": { "model": "growthcraft_bamboo:block/bamboo_plank_button", "y": 90 }, + "face=floor,facing=west,powered=false": { + "model": "growthcraft_bamboo:block/bamboo_plank_button", + "y": 270 + }, + "face=floor,facing=south,powered=false": { + "model": "growthcraft_bamboo:block/bamboo_plank_button", + "y": 180 + }, + "face=floor,facing=north,powered=false": { + "model": "growthcraft_bamboo:block/bamboo_plank_button" + }, + "face=wall,facing=east,powered=false": { + "model": "growthcraft_bamboo:block/bamboo_plank_button", + "uvlock": true, + "x": 90, + "y": 90 + }, + "face=wall,facing=west,powered=false": { + "model": "growthcraft_bamboo:block/bamboo_plank_button", + "uvlock": true, + "x": 90, + "y": 270 + }, + "face=wall,facing=south,powered=false": { + "model": "growthcraft_bamboo:block/bamboo_plank_button", + "uvlock": true, + "x": 90, + "y": 180 + }, + "face=wall,facing=north,powered=false": { + "model": "growthcraft_bamboo:block/bamboo_plank_button", + "uvlock": true, + "x": 90 + }, + "face=ceiling,facing=east,powered=false": { + "model": "growthcraft_bamboo:block/bamboo_plank_button", + "x": 180, + "y": 270 + }, + "face=ceiling,facing=west,powered=false": { + "model": "growthcraft_bamboo:block/bamboo_plank_button", + "x": 180, + "y": 90 + }, + "face=ceiling,facing=south,powered=false": { + "model": "growthcraft_bamboo:block/bamboo_plank_button", + "x": 180 + }, + "face=ceiling,facing=north,powered=false": { + "model": "growthcraft_bamboo:block/bamboo_plank_button", + "x": 180, + "y": 180 + }, + "face=floor,facing=east,powered=true": { + "model": "growthcraft_bamboo:block/bamboo_plank_button_pressed", + "y": 90 + }, + "face=floor,facing=west,powered=true": { + "model": "growthcraft_bamboo:block/bamboo_plank_button_pressed", + "y": 270 + }, + "face=floor,facing=south,powered=true": { + "model": "growthcraft_bamboo:block/bamboo_plank_button_pressed", + "y": 180 + }, + "face=floor,facing=north,powered=true": { + "model": "growthcraft_bamboo:block/bamboo_plank_button_pressed" + }, + "face=wall,facing=east,powered=true": { + "model": "growthcraft_bamboo:block/bamboo_plank_button_pressed", + "uvlock": true, + "x": 90, + "y": 90 + }, + "face=wall,facing=west,powered=true": { + "model": "growthcraft_bamboo:block/bamboo_plank_button_pressed", + "uvlock": true, + "x": 90, + "y": 270 + }, + "face=wall,facing=south,powered=true": { + "model": "growthcraft_bamboo:block/bamboo_plank_button_pressed", + "uvlock": true, + "x": 90, + "y": 180 + }, + "face=wall,facing=north,powered=true": { + "model": "growthcraft_bamboo:block/bamboo_plank_button_pressed", + "uvlock": true, + "x": 90 + }, + "face=ceiling,facing=east,powered=true": { + "model": "growthcraft_bamboo:block/bamboo_plank_button_pressed", + "x": 180, + "y": 270 + }, + "face=ceiling,facing=west,powered=true": { + "model": "growthcraft_bamboo:block/bamboo_plank_button_pressed", + "x": 180, + "y": 90 + }, + "face=ceiling,facing=south,powered=true": { + "model": "growthcraft_bamboo:block/bamboo_plank_button_pressed", + "x": 180 + }, + "face=ceiling,facing=north,powered=true": { + "model": "growthcraft_bamboo:block/bamboo_plank_button_pressed", + "x": 180, + "y": 180 + } + } +} diff --git a/src/main/resources/assets/growthcraft_bamboo/blockstates/bamboo_plank_door.json b/src/main/resources/assets/growthcraft_bamboo/blockstates/bamboo_plank_door.json new file mode 100644 index 0000000..929cee4 --- /dev/null +++ b/src/main/resources/assets/growthcraft_bamboo/blockstates/bamboo_plank_door.json @@ -0,0 +1,124 @@ +{ + "variants": { + "facing=east,half=lower,hinge=left,open=false": { + "model": "growthcraft_bamboo:block/bamboo_plank_door_bottom" + }, + "facing=south,half=lower,hinge=left,open=false": { + "model": "growthcraft_bamboo:block/bamboo_plank_door_bottom", + "y": 90 + }, + "facing=west,half=lower,hinge=left,open=false": { + "model": "growthcraft_bamboo:block/bamboo_plank_door_bottom", + "y": 180 + }, + "facing=north,half=lower,hinge=left,open=false": { + "model": "growthcraft_bamboo:block/bamboo_plank_door_bottom", + "y": 270 + }, + "facing=east,half=lower,hinge=right,open=false": { + "model": "growthcraft_bamboo:block/bamboo_plank_door_bottom_hinge" + }, + "facing=south,half=lower,hinge=right,open=false": { + "model": "growthcraft_bamboo:block/bamboo_plank_door_bottom_hinge", + "y": 90 + }, + "facing=west,half=lower,hinge=right,open=false": { + "model": "growthcraft_bamboo:block/bamboo_plank_door_bottom_hinge", + "y": 180 + }, + "facing=north,half=lower,hinge=right,open=false": { + "model": "growthcraft_bamboo:block/bamboo_plank_door_bottom_hinge", + "y": 270 + }, + "facing=east,half=lower,hinge=left,open=true": { + "model": "growthcraft_bamboo:block/bamboo_plank_door_bottom_hinge", + "y": 90 + }, + "facing=south,half=lower,hinge=left,open=true": { + "model": "growthcraft_bamboo:block/bamboo_plank_door_bottom_hinge", + "y": 180 + }, + "facing=west,half=lower,hinge=left,open=true": { + "model": "growthcraft_bamboo:block/bamboo_plank_door_bottom_hinge", + "y": 270 + }, + "facing=north,half=lower,hinge=left,open=true": { + "model": "growthcraft_bamboo:block/bamboo_plank_door_bottom_hinge" + }, + "facing=east,half=lower,hinge=right,open=true": { + "model": "growthcraft_bamboo:block/bamboo_plank_door_bottom", + "y": 270 + }, + "facing=south,half=lower,hinge=right,open=true": { + "model": "growthcraft_bamboo:block/bamboo_plank_door_bottom" + }, + "facing=west,half=lower,hinge=right,open=true": { + "model": "growthcraft_bamboo:block/bamboo_plank_door_bottom", + "y": 90 + }, + "facing=north,half=lower,hinge=right,open=true": { + "model": "growthcraft_bamboo:block/bamboo_plank_door_bottom", + "y": 180 + }, + "facing=east,half=upper,hinge=left,open=false": { + "model": "growthcraft_bamboo:block/bamboo_plank_door_top" + }, + "facing=south,half=upper,hinge=left,open=false": { + "model": "growthcraft_bamboo:block/bamboo_plank_door_top", + "y": 90 + }, + "facing=west,half=upper,hinge=left,open=false": { + "model": "growthcraft_bamboo:block/bamboo_plank_door_top", + "y": 180 + }, + "facing=north,half=upper,hinge=left,open=false": { + "model": "growthcraft_bamboo:block/bamboo_plank_door_top", + "y": 270 + }, + "facing=east,half=upper,hinge=right,open=false": { + "model": "growthcraft_bamboo:block/bamboo_plank_door_top_hinge" + }, + "facing=south,half=upper,hinge=right,open=false": { + "model": "growthcraft_bamboo:block/bamboo_plank_door_top_hinge", + "y": 90 + }, + "facing=west,half=upper,hinge=right,open=false": { + "model": "growthcraft_bamboo:block/bamboo_plank_door_top_hinge", + "y": 180 + }, + "facing=north,half=upper,hinge=right,open=false": { + "model": "growthcraft_bamboo:block/bamboo_plank_door_top_hinge", + "y": 270 + }, + "facing=east,half=upper,hinge=left,open=true": { + "model": "growthcraft_bamboo:block/bamboo_plank_door_top_hinge", + "y": 90 + }, + "facing=south,half=upper,hinge=left,open=true": { + "model": "growthcraft_bamboo:block/bamboo_plank_door_top_hinge", + "y": 180 + }, + "facing=west,half=upper,hinge=left,open=true": { + "model": "growthcraft_bamboo:block/bamboo_plank_door_top_hinge", + "y": 270 + }, + "facing=north,half=upper,hinge=left,open=true": { + "model": "growthcraft_bamboo:block/bamboo_plank_door_top_hinge" + }, + "facing=east,half=upper,hinge=right,open=true": { + "model": "growthcraft_bamboo:block/bamboo_plank_door_top", + "y": 270 + }, + "facing=south,half=upper,hinge=right,open=true": { + "model": "growthcraft_bamboo:block/bamboo_plank_door_top" + }, + "facing=west,half=upper,hinge=right,open=true": { + "model": "growthcraft_bamboo:block/bamboo_plank_door_top", + "y": 90 + }, + "facing=north,half=upper,hinge=right,open=true": { + "model": "growthcraft_bamboo:block/bamboo_plank_door_top", + "y": 180 + } + } +} diff --git a/src/main/resources/assets/growthcraft_bamboo/blockstates/bamboo_plank_fence.json b/src/main/resources/assets/growthcraft_bamboo/blockstates/bamboo_plank_fence.json new file mode 100644 index 0000000..f6ef664 --- /dev/null +++ b/src/main/resources/assets/growthcraft_bamboo/blockstates/bamboo_plank_fence.json @@ -0,0 +1,25 @@ +{ + "multipart": [ + { + "apply": { + "model": "growthcraft_bamboo:block/bamboo_plank_fence_post" + } + }, + { + "when": { "north": "true" }, + "apply": { "model": "growthcraft_bamboo:block/bamboo_plank_fence_side", "y": 0, "uvlock": true } + }, + { + "when": { "east": "true" }, + "apply": { "model": "growthcraft_bamboo:block/bamboo_plank_fence_side", "y": 90, "uvlock": true } + }, + { + "when": { "south": "true" }, + "apply": { "model": "growthcraft_bamboo:block/bamboo_plank_fence_side", "y": 180, "uvlock": true } + }, + { + "when": { "west": "true" }, + "apply": { "model": "growthcraft_bamboo:block/bamboo_plank_fence_side", "y": 270, "uvlock": true } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_bamboo/blockstates/bamboo_plank_fence_gate.json b/src/main/resources/assets/growthcraft_bamboo/blockstates/bamboo_plank_fence_gate.json new file mode 100644 index 0000000..5971be2 --- /dev/null +++ b/src/main/resources/assets/growthcraft_bamboo/blockstates/bamboo_plank_fence_gate.json @@ -0,0 +1,20 @@ +{ + "variants": { + "facing=south,in_wall=false,open=false": { "model": "growthcraft_bamboo:block/bamboo_plank_fence_gate", "uvlock": true }, + "facing=west,in_wall=false,open=false": { "model": "growthcraft_bamboo:block/bamboo_plank_fence_gate", "uvlock": true, "y": 90 }, + "facing=north,in_wall=false,open=false": { "model": "growthcraft_bamboo:block/bamboo_plank_fence_gate", "uvlock": true, "y": 180 }, + "facing=east,in_wall=false,open=false": { "model": "growthcraft_bamboo:block/bamboo_plank_fence_gate", "uvlock": true, "y": 270 }, + "facing=south,in_wall=false,open=true": { "model": "growthcraft_bamboo:block/bamboo_plank_fence_gate_open", "uvlock": true }, + "facing=west,in_wall=false,open=true": { "model": "growthcraft_bamboo:block/bamboo_plank_fence_gate_open", "uvlock": true, "y": 90 }, + "facing=north,in_wall=false,open=true": { "model": "growthcraft_bamboo:block/bamboo_plank_fence_gate_open", "uvlock": true, "y": 180 }, + "facing=east,in_wall=false,open=true": { "model": "growthcraft_bamboo:block/bamboo_plank_fence_gate_open", "uvlock": true, "y": 270 }, + "facing=south,in_wall=true,open=false": { "model": "growthcraft_bamboo:block/bamboo_plank_fence_gate_wall", "uvlock": true }, + "facing=west,in_wall=true,open=false": { "model": "growthcraft_bamboo:block/bamboo_plank_fence_gate_wall", "uvlock": true, "y": 90 }, + "facing=north,in_wall=true,open=false": { "model": "growthcraft_bamboo:block/bamboo_plank_fence_gate_wall", "uvlock": true, "y": 180 }, + "facing=east,in_wall=true,open=false": { "model": "growthcraft_bamboo:block/bamboo_plank_fence_gate_wall", "uvlock": true, "y": 270 }, + "facing=south,in_wall=true,open=true": { "model": "growthcraft_bamboo:block/bamboo_plank_fence_gate_wall_open", "uvlock": true }, + "facing=west,in_wall=true,open=true": { "model": "growthcraft_bamboo:block/bamboo_plank_fence_gate_wall_open", "uvlock": true, "y": 90 }, + "facing=north,in_wall=true,open=true": { "model": "growthcraft_bamboo:block/bamboo_plank_fence_gate_wall_open", "uvlock": true, "y": 180 }, + "facing=east,in_wall=true,open=true": { "model": "growthcraft_bamboo:block/bamboo_plank_fence_gate_wall_open", "uvlock": true, "y": 270 } + } +} diff --git a/src/main/resources/assets/growthcraft_bamboo/blockstates/bamboo_plank_fence_rope_linen.json b/src/main/resources/assets/growthcraft_bamboo/blockstates/bamboo_plank_fence_rope_linen.json new file mode 100644 index 0000000..3690dc3 --- /dev/null +++ b/src/main/resources/assets/growthcraft_bamboo/blockstates/bamboo_plank_fence_rope_linen.json @@ -0,0 +1,77 @@ +{ + "multipart": [ + { + "apply": { + "model": "growthcraft_bamboo:block/bamboo_plank_fence_post" + } + }, + { + "apply": { + "model": "growthcraft:block/rope_linen_knot", + "uvlock": false + }, + "when": { + "knot": true + } + }, + { + "apply": { + "model": "growthcraft:block/rope_linen_side", + "uvlock": false + }, + "when": { + "north": "true" + } + }, + { + "apply": { + "model": "growthcraft:block/rope_linen_side", + "uvlock": false, + "y": 90 + }, + "when": { + "east": "true" + } + }, + { + "apply": { + "model": "growthcraft:block/rope_linen_side", + "uvlock": false, + "y": 180 + }, + "when": { + "south": "true" + } + }, + { + "apply": { + "model": "growthcraft:block/rope_linen_side", + "uvlock": false, + "y": 270 + }, + "when": { + "west": "true" + } + }, + { + "apply": { + "model": "growthcraft:block/rope_linen_side", + "uvlock": false, + "x": 270 + }, + "when": { + "up": "true" + } + }, + { + "apply": { + "model": "growthcraft:block/rope_linen_side", + "uvlock": false, + "x": 90 + }, + "when": { + "down": "true" + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_bamboo/blockstates/bamboo_plank_pressure_plate.json b/src/main/resources/assets/growthcraft_bamboo/blockstates/bamboo_plank_pressure_plate.json new file mode 100644 index 0000000..4860487 --- /dev/null +++ b/src/main/resources/assets/growthcraft_bamboo/blockstates/bamboo_plank_pressure_plate.json @@ -0,0 +1,6 @@ +{ + "variants": { + "powered=false": { "model": "growthcraft_bamboo:block/bamboo_plank_pressure_plate" }, + "powered=true": { "model": "growthcraft_bamboo:block/bamboo_plank_pressure_plate_down" } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_bamboo/blockstates/bamboo_plank_slab.json b/src/main/resources/assets/growthcraft_bamboo/blockstates/bamboo_plank_slab.json new file mode 100644 index 0000000..eb1cfc8 --- /dev/null +++ b/src/main/resources/assets/growthcraft_bamboo/blockstates/bamboo_plank_slab.json @@ -0,0 +1,7 @@ +{ + "variants": { + "type=bottom": { "model": "growthcraft_bamboo:block/bamboo_plank_slab" }, + "type=top": { "model": "growthcraft_bamboo:block/bamboo_plank_slab_top" }, + "type=double": { "model": "growthcraft_bamboo:block/bamboo_plank" } + } +} diff --git a/src/main/resources/assets/growthcraft_bamboo/blockstates/bamboo_plank_stairs.json b/src/main/resources/assets/growthcraft_bamboo/blockstates/bamboo_plank_stairs.json new file mode 100644 index 0000000..b9c5182 --- /dev/null +++ b/src/main/resources/assets/growthcraft_bamboo/blockstates/bamboo_plank_stairs.json @@ -0,0 +1,209 @@ +{ + "variants": { + "facing=east,half=bottom,shape=straight": { + "model": "growthcraft_bamboo:block/bamboo_plank_stairs" + }, + "facing=west,half=bottom,shape=straight": { + "model": "growthcraft_bamboo:block/bamboo_plank_stairs", + "y": 180, + "uvlock": true + }, + "facing=south,half=bottom,shape=straight": { + "model": "growthcraft_bamboo:block/bamboo_plank_stairs", + "y": 90, + "uvlock": true + }, + "facing=north,half=bottom,shape=straight": { + "model": "growthcraft_bamboo:block/bamboo_plank_stairs", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=outer_right": { + "model": "growthcraft_bamboo:block/bamboo_plank_stairs_outer" + }, + "facing=west,half=bottom,shape=outer_right": { + "model": "growthcraft_bamboo:block/bamboo_plank_stairs_outer", + "y": 180, + "uvlock": true + }, + "facing=south,half=bottom,shape=outer_right": { + "model": "growthcraft_bamboo:block/bamboo_plank_stairs_outer", + "y": 90, + "uvlock": true + }, + "facing=north,half=bottom,shape=outer_right": { + "model": "growthcraft_bamboo:block/bamboo_plank_stairs_outer", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=outer_left": { + "model": "growthcraft_bamboo:block/bamboo_plank_stairs_outer", + "y": 270, + "uvlock": true + }, + "facing=west,half=bottom,shape=outer_left": { + "model": "growthcraft_bamboo:block/bamboo_plank_stairs_outer", + "y": 90, + "uvlock": true + }, + "facing=south,half=bottom,shape=outer_left": { + "model": "growthcraft_bamboo:block/bamboo_plank_stairs_outer" + }, + "facing=north,half=bottom,shape=outer_left": { + "model": "growthcraft_bamboo:block/bamboo_plank_stairs_outer", + "y": 180, + "uvlock": true + }, + "facing=east,half=bottom,shape=inner_right": { + "model": "growthcraft_bamboo:block/bamboo_plank_stairs_inner" + }, + "facing=west,half=bottom,shape=inner_right": { + "model": "growthcraft_bamboo:block/bamboo_plank_stairs_inner", + "y": 180, + "uvlock": true + }, + "facing=south,half=bottom,shape=inner_right": { + "model": "growthcraft_bamboo:block/bamboo_plank_stairs_inner", + "y": 90, + "uvlock": true + }, + "facing=north,half=bottom,shape=inner_right": { + "model": "growthcraft_bamboo:block/bamboo_plank_stairs_inner", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=inner_left": { + "model": "growthcraft_bamboo:block/bamboo_plank_stairs_inner", + "y": 270, + "uvlock": true + }, + "facing=west,half=bottom,shape=inner_left": { + "model": "growthcraft_bamboo:block/bamboo_plank_stairs_inner", + "y": 90, + "uvlock": true + }, + "facing=south,half=bottom,shape=inner_left": { + "model": "growthcraft_bamboo:block/bamboo_plank_stairs_inner" + }, + "facing=north,half=bottom,shape=inner_left": { + "model": "growthcraft_bamboo:block/bamboo_plank_stairs_inner", + "y": 180, + "uvlock": true + }, + "facing=east,half=top,shape=straight": { + "model": "growthcraft_bamboo:block/bamboo_plank_stairs", + "x": 180, + "uvlock": true + }, + "facing=west,half=top,shape=straight": { + "model": "growthcraft_bamboo:block/bamboo_plank_stairs", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=straight": { + "model": "growthcraft_bamboo:block/bamboo_plank_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=north,half=top,shape=straight": { + "model": "growthcraft_bamboo:block/bamboo_plank_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=east,half=top,shape=outer_right": { + "model": "growthcraft_bamboo:block/bamboo_plank_stairs_outer", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=west,half=top,shape=outer_right": { + "model": "growthcraft_bamboo:block/bamboo_plank_stairs_outer", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=south,half=top,shape=outer_right": { + "model": "growthcraft_bamboo:block/bamboo_plank_stairs_outer", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=north,half=top,shape=outer_right": { + "model": "growthcraft_bamboo:block/bamboo_plank_stairs_outer", + "x": 180, + "uvlock": true + }, + "facing=east,half=top,shape=outer_left": { + "model": "growthcraft_bamboo:block/bamboo_plank_stairs_outer", + "x": 180, + "uvlock": true + }, + "facing=west,half=top,shape=outer_left": { + "model": "growthcraft_bamboo:block/bamboo_plank_stairs_outer", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=outer_left": { + "model": "growthcraft_bamboo:block/bamboo_plank_stairs_outer", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=north,half=top,shape=outer_left": { + "model": "growthcraft_bamboo:block/bamboo_plank_stairs_outer", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=east,half=top,shape=inner_right": { + "model": "growthcraft_bamboo:block/bamboo_plank_stairs_inner", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=west,half=top,shape=inner_right": { + "model": "growthcraft_bamboo:block/bamboo_plank_stairs_inner", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=south,half=top,shape=inner_right": { + "model": "growthcraft_bamboo:block/bamboo_plank_stairs_inner", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=north,half=top,shape=inner_right": { + "model": "growthcraft_bamboo:block/bamboo_plank_stairs_inner", + "x": 180, + "uvlock": true + }, + "facing=east,half=top,shape=inner_left": { + "model": "growthcraft_bamboo:block/bamboo_plank_stairs_inner", + "x": 180, + "uvlock": true + }, + "facing=west,half=top,shape=inner_left": { + "model": "growthcraft_bamboo:block/bamboo_plank_stairs_inner", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=inner_left": { + "model": "growthcraft_bamboo:block/bamboo_plank_stairs_inner", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=north,half=top,shape=inner_left": { + "model": "growthcraft_bamboo:block/bamboo_plank_stairs_inner", + "x": 180, + "y": 270, + "uvlock": true + } + } +} diff --git a/src/main/resources/assets/growthcraft_bamboo/blockstates/bamboo_plank_trapdoor.json b/src/main/resources/assets/growthcraft_bamboo/blockstates/bamboo_plank_trapdoor.json new file mode 100644 index 0000000..be7fc5c --- /dev/null +++ b/src/main/resources/assets/growthcraft_bamboo/blockstates/bamboo_plank_trapdoor.json @@ -0,0 +1,20 @@ +{ + "variants": { + "facing=north,half=bottom,open=false": { "model": "growthcraft_bamboo:block/bamboo_plank_trapdoor_bottom" }, + "facing=south,half=bottom,open=false": { "model": "growthcraft_bamboo:block/bamboo_plank_trapdoor_bottom", "y": 180 }, + "facing=east,half=bottom,open=false": { "model": "growthcraft_bamboo:block/bamboo_plank_trapdoor_bottom", "y": 90 }, + "facing=west,half=bottom,open=false": { "model": "growthcraft_bamboo:block/bamboo_plank_trapdoor_bottom", "y": 270 }, + "facing=north,half=top,open=false": { "model": "growthcraft_bamboo:block/bamboo_plank_trapdoor_top" }, + "facing=south,half=top,open=false": { "model": "growthcraft_bamboo:block/bamboo_plank_trapdoor_top", "y": 180 }, + "facing=east,half=top,open=false": { "model": "growthcraft_bamboo:block/bamboo_plank_trapdoor_top", "y": 90 }, + "facing=west,half=top,open=false": { "model": "growthcraft_bamboo:block/bamboo_plank_trapdoor_top", "y": 270 }, + "facing=north,half=bottom,open=true": { "model": "growthcraft_bamboo:block/bamboo_plank_trapdoor_open" }, + "facing=south,half=bottom,open=true": { "model": "growthcraft_bamboo:block/bamboo_plank_trapdoor_open", "y": 180 }, + "facing=east,half=bottom,open=true": { "model": "growthcraft_bamboo:block/bamboo_plank_trapdoor_open", "y": 90 }, + "facing=west,half=bottom,open=true": { "model": "growthcraft_bamboo:block/bamboo_plank_trapdoor_open", "y": 270 }, + "facing=north,half=top,open=true": { "model": "growthcraft_bamboo:block/bamboo_plank_trapdoor_open", "x": 180, "y": 180 }, + "facing=south,half=top,open=true": { "model": "growthcraft_bamboo:block/bamboo_plank_trapdoor_open", "x": 180, "y": 0 }, + "facing=east,half=top,open=true": { "model": "growthcraft_bamboo:block/bamboo_plank_trapdoor_open", "x": 180, "y": 270 }, + "facing=west,half=top,open=true": { "model": "growthcraft_bamboo:block/bamboo_plank_trapdoor_open", "x": 180, "y": 90 } + } +} diff --git a/src/main/resources/assets/growthcraft_bamboo/blockstates/bamboo_tree_leaves.json b/src/main/resources/assets/growthcraft_bamboo/blockstates/bamboo_tree_leaves.json new file mode 100644 index 0000000..5f37dce --- /dev/null +++ b/src/main/resources/assets/growthcraft_bamboo/blockstates/bamboo_tree_leaves.json @@ -0,0 +1,5 @@ +{ + "variants": { + "": { "model": "growthcraft_bamboo:block/bamboo_tree_leaves" } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_bamboo/blockstates/bamboo_tree_sapling.json b/src/main/resources/assets/growthcraft_bamboo/blockstates/bamboo_tree_sapling.json new file mode 100644 index 0000000..aabd167 --- /dev/null +++ b/src/main/resources/assets/growthcraft_bamboo/blockstates/bamboo_tree_sapling.json @@ -0,0 +1,5 @@ +{ + "variants": { + "": { "model": "growthcraft_bamboo:block/bamboo_tree_sapling" } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_bamboo/blockstates/bamboo_wood.json b/src/main/resources/assets/growthcraft_bamboo/blockstates/bamboo_wood.json new file mode 100644 index 0000000..d7c7b6a --- /dev/null +++ b/src/main/resources/assets/growthcraft_bamboo/blockstates/bamboo_wood.json @@ -0,0 +1,7 @@ +{ + "variants": { + "axis=y": { "model": "growthcraft_bamboo:block/bamboo_wood" }, + "axis=z": { "model": "growthcraft_bamboo:block/bamboo_wood", "x": 90 }, + "axis=x": { "model": "growthcraft_bamboo:block/bamboo_wood", "x": 90, "y": 90 } + } +} diff --git a/src/main/resources/assets/growthcraft_bamboo/blockstates/bamboo_wood_log.json b/src/main/resources/assets/growthcraft_bamboo/blockstates/bamboo_wood_log.json new file mode 100644 index 0000000..48226de --- /dev/null +++ b/src/main/resources/assets/growthcraft_bamboo/blockstates/bamboo_wood_log.json @@ -0,0 +1,7 @@ +{ + "variants": { + "axis=y": { "model": "growthcraft_bamboo:block/bamboo_wood_log" }, + "axis=z": { "model": "growthcraft_bamboo:block/bamboo_wood_log", "x": 90 }, + "axis=x": { "model": "growthcraft_bamboo:block/bamboo_wood_log", "x": 90, "y": 90 } + } +} diff --git a/src/main/resources/assets/growthcraft_bamboo/blockstates/bamboo_wood_log_stripped.json b/src/main/resources/assets/growthcraft_bamboo/blockstates/bamboo_wood_log_stripped.json new file mode 100644 index 0000000..9528a4e --- /dev/null +++ b/src/main/resources/assets/growthcraft_bamboo/blockstates/bamboo_wood_log_stripped.json @@ -0,0 +1,7 @@ +{ + "variants": { + "axis=y": { "model": "growthcraft_bamboo:block/bamboo_wood_log_stripped" }, + "axis=z": { "model": "growthcraft_bamboo:block/bamboo_wood_log_stripped", "x": 90 }, + "axis=x": { "model": "growthcraft_bamboo:block/bamboo_wood_log_stripped", "x": 90, "y": 90 } + } +} diff --git a/src/main/resources/assets/growthcraft_bamboo/blockstates/bamboo_wood_stripped.json b/src/main/resources/assets/growthcraft_bamboo/blockstates/bamboo_wood_stripped.json new file mode 100644 index 0000000..7594650 --- /dev/null +++ b/src/main/resources/assets/growthcraft_bamboo/blockstates/bamboo_wood_stripped.json @@ -0,0 +1,7 @@ +{ + "variants": { + "axis=y": { "model": "growthcraft_bamboo:block/bamboo_wood_stripped" }, + "axis=z": { "model": "growthcraft_bamboo:block/bamboo_wood_stripped", "x": 90 }, + "axis=x": { "model": "growthcraft_bamboo:block/bamboo_wood_stripped", "x": 90, "y": 90 } + } +} diff --git a/src/main/resources/assets/growthcraft_bamboo/blockstates/bee_box_bamboo.json b/src/main/resources/assets/growthcraft_bamboo/blockstates/bee_box_bamboo.json new file mode 100644 index 0000000..6452f0c --- /dev/null +++ b/src/main/resources/assets/growthcraft_bamboo/blockstates/bee_box_bamboo.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=north": { + "model": "growthcraft_bamboo:block/bee_box_bamboo" + }, + "facing=south": { + "model": "growthcraft_bamboo:block/bee_box_bamboo", + "y": 180 + }, + "facing=east": { + "model": "growthcraft_bamboo:block/bee_box_bamboo", + "y": 90 + }, + "facing=west": { + "model": "growthcraft_bamboo:block/bee_box_bamboo", + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_bamboo/blockstates/fishtrap_bamboo.json b/src/main/resources/assets/growthcraft_bamboo/blockstates/fishtrap_bamboo.json new file mode 100644 index 0000000..f223386 --- /dev/null +++ b/src/main/resources/assets/growthcraft_bamboo/blockstates/fishtrap_bamboo.json @@ -0,0 +1,27 @@ +{ + "variants": { + "facing=north": { + "model": "growthcraft_bamboo:block/fishtrap_bamboo" + }, + "facing=south": { + "model": "growthcraft_bamboo:block/fishtrap_bamboo", + "y": 180 + }, + "facing=west": { + "model": "growthcraft_bamboo:block/fishtrap_bamboo", + "y": 270 + }, + "facing=east": { + "model": "growthcraft_bamboo:block/fishtrap_bamboo", + "y": 90 + }, + "facing=up": { + "model": "growthcraft_bamboo:block/fishtrap_bamboo", + "x": -90 + }, + "facing=down": { + "model": "growthcraft_bamboo:block/fishtrap_bamboo", + "x": 90 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_bamboo/blockstates/rope_knot_bamboo.json b/src/main/resources/assets/growthcraft_bamboo/blockstates/rope_knot_bamboo.json new file mode 100644 index 0000000..2d5e3cc --- /dev/null +++ b/src/main/resources/assets/growthcraft_bamboo/blockstates/rope_knot_bamboo.json @@ -0,0 +1,39 @@ +{ + "multipart": [ + { + "apply": { "model": "growthcraft:rope_knot_bamboo" } + }, + { + "when": { "north": 1 }, + "apply": { "model": "growthcraft:rope_fence_side", "uvlock": false } + }, + { + "when": { "north": 2 }, + "apply": { "model": "growthcraft:bamboo_fence_side", "uvlock": true } + }, + { + "when": { "east": 1 }, + "apply": { "model": "growthcraft:rope_fence_side", "y": 90, "uvlock": false } + }, + { + "when": { "east": 2 }, + "apply": { "model": "growthcraft:bamboo_fence_side", "y": 90, "uvlock": true } + }, + { + "when": { "south": 1 }, + "apply": { "model": "growthcraft:rope_fence_side", "y": 180, "uvlock": false } + }, + { + "when": { "south": 2 }, + "apply": { "model": "growthcraft:bamboo_fence_side", "y": 180, "uvlock": true } + }, + { + "when": { "west": 1 }, + "apply": { "model": "growthcraft:rope_fence_side", "y": 270, "uvlock": false } + }, + { + "when": { "west": 2 }, + "apply": { "model": "growthcraft:bamboo_fence_side", "y": 270, "uvlock": true } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_bamboo/lang/en_us.json b/src/main/resources/assets/growthcraft_bamboo/lang/en_us.json new file mode 100644 index 0000000..c74d1ac --- /dev/null +++ b/src/main/resources/assets/growthcraft_bamboo/lang/en_us.json @@ -0,0 +1,22 @@ +{ + "block.growthcraft_bamboo.bamboo_plank": "Bamboo Planks", + "block.growthcraft_bamboo.bamboo_plank_button": "Bamboo Button", + "block.growthcraft_bamboo.bamboo_plank_door": "Bamboo Door", + "block.growthcraft_bamboo.bamboo_plank_fence": "Bamboo Fence", + "block.growthcraft_bamboo.bamboo_plank_fence_gate": "Bamboo Fence Gate", + "block.growthcraft_bamboo.bamboo_plank_fence_rope_linen": "Rope Bamboo Fence Post", + "block.growthcraft_bamboo.bamboo_plank_pressure_plate": "Bamboo Pressure Plate", + "block.growthcraft_bamboo.bamboo_plank_slab": "Bamboo Slab", + "block.growthcraft_bamboo.bamboo_plank_stairs": "Bamboo Stairs", + "block.growthcraft_bamboo.bamboo_plank_trapdoor": "Bamboo Trapdoor", + "block.growthcraft_bamboo.bamboo_tree_leaves": "Bamboo Tree Leaves", + "block.growthcraft_bamboo.bamboo_tree_sapling": "Bamboo Shoot", + "block.growthcraft_bamboo.bamboo_wood": "Bamboo Internode", + "block.growthcraft_bamboo.bamboo_wood_log": "Bamboo Node", + "block.growthcraft_bamboo.bamboo_wood_log_stripped": "Stripped Bamboo Node", + "block.growthcraft_bamboo.bamboo_wood_stripped": "Stripped Bamboo Internode", + "block.growthcraft_bamboo.bee_box_bamboo": "Bee Box (Bamboo)", + "block.growthcraft_bamboo.fishtrap_bamboo": "Fishtrap (Bamboo)", + "item.growthcraft_bamboo.bamboo_coal": "Bamboo Charcoal", + "item.growthcraft_bamboo.bamboo_stick": "Bamboo Stick" +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_bamboo/lang/ko_kr.lang b/src/main/resources/assets/growthcraft_bamboo/lang/ko_kr.lang new file mode 100644 index 0000000..355a8c9 --- /dev/null +++ b/src/main/resources/assets/growthcraft_bamboo/lang/ko_kr.lang @@ -0,0 +1,15 @@ +item.bamboo_coal.name=대나무 숯 +item.bamboo_door_item.name=대나무 문 +item.bamboo_stick.name=대나무 막대기 + +tile.bamboo_fence.name=대나무 울타리 +tile.bamboo_fence_gate.name=대나무 울타리 문 +tile.bamboo_leaves.name=대나무 잎 +tile.bamboo_plank.name=대나무 판자 +tile.bamboo_shoot.name=죽순 +tile.bamboo_slab_double.name=대나무 반 블록 +tile.bamboo_slab_half.name=대나무 반 블록 +tile.bamboo_stairs.name=대나무 계단 +tile.bamboo_stalk.name=대나무 + +tile.rope_knot_bamboo.name=Bamboo Fence (Rope) \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_bamboo/lang/ru_ru.json b/src/main/resources/assets/growthcraft_bamboo/lang/ru_ru.json new file mode 100644 index 0000000..025ac43 --- /dev/null +++ b/src/main/resources/assets/growthcraft_bamboo/lang/ru_ru.json @@ -0,0 +1,22 @@ +{ + "block.growthcraft_bamboo.bamboo_plank": "Бамбуковые доски", + "block.growthcraft_bamboo.bamboo_plank_button": "Бамбуковая кнопка", + "block.growthcraft_bamboo.bamboo_plank_door": "Бамбуковая дверь", + "block.growthcraft_bamboo.bamboo_plank_fence": "Бамбуковый забор", + "block.growthcraft_bamboo.bamboo_plank_fence_gate": "Бамбуковые ворота", + "block.growthcraft_bamboo.bamboo_plank_fence_rope_linen": "Веревка на бамбуковом заборе", + "block.growthcraft_bamboo.bamboo_plank_pressure_plate": "Бамбуковая нажимная плита", + "block.growthcraft_bamboo.bamboo_plank_slab": "Бамбуковая плита", + "block.growthcraft_bamboo.bamboo_plank_stairs": "Бамбуковые ступеньки", + "block.growthcraft_bamboo.bamboo_plank_trapdoor": "Бамбуковый люк", + "block.growthcraft_bamboo.bamboo_tree_leaves": "Листва бамбука", + "block.growthcraft_bamboo.bamboo_tree_sapling": "Росток бамбука", + "block.growthcraft_bamboo.bamboo_wood": "Бамбуковое междоузлие", + "block.growthcraft_bamboo.bamboo_wood_log": "Бамбуковый узел", + "block.growthcraft_bamboo.bamboo_wood_log_stripped": "Обтесанный бамбуковый узел", + "block.growthcraft_bamboo.bamboo_wood_stripped": "Обтесанное бамбуковое междоузлие", + "block.growthcraft_bamboo.bee_box_bamboo": "Бамбуковый улей", + "block.growthcraft_bamboo.fishtrap_bamboo": "Бамбуковая ловушка для рыбы", + "item.growthcraft_bamboo.bamboo_coal": "Бабмуковый уголь", + "item.growthcraft_bamboo.bamboo_stick": "Бамбуковая палка" +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_bamboo/lang/tr_tr.lang b/src/main/resources/assets/growthcraft_bamboo/lang/tr_tr.lang new file mode 100644 index 0000000..833e67e --- /dev/null +++ b/src/main/resources/assets/growthcraft_bamboo/lang/tr_tr.lang @@ -0,0 +1,15 @@ +item.bamboo_coal.name=Bambu Odun Kömürü +item.bamboo_door_item.name=Bambu Kapısı +item.bamboo_stick.name=Bambu Çubuğu + +tile.bamboo_fence.name=Bambu Çiti +tile.bamboo_fence_gate.name=Bamboo Çit Kapısı +tile.bamboo_leaves.name=Bambu Yaprakları +tile.bamboo_plank.name=Bambu Tahtaları +tile.bamboo_shoot.name=Bambu Filizi +tile.bamboo_slab_double.name=Bambu Basamakları +tile.bamboo_slab_half.name=Bambu Basamağı +tile.bamboo_stairs.name=Bambu Merdiveni +tile.bamboo_stalk.name=Bambu + +tile.rope_knot_bamboo.name=Bamboo Fence (Rope) \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_bamboo/lang/zh_cn.lang b/src/main/resources/assets/growthcraft_bamboo/lang/zh_cn.lang new file mode 100644 index 0000000..8c4be47 --- /dev/null +++ b/src/main/resources/assets/growthcraft_bamboo/lang/zh_cn.lang @@ -0,0 +1,15 @@ +item.bamboo_coal.name=竹炭 +item.bamboo_door_item.name=竹门 +item.bamboo_stick.name=竹棍 + +tile.bamboo_fence.name=竹栅栏 +tile.bamboo_fence_gate.name=竹栅栏门 +tile.bamboo_leaves.name=竹叶 +tile.bamboo_plank.name=竹板 +tile.bamboo_shoot.name=竹笋 +tile.bamboo_slab_double.name=竹板台阶 +tile.bamboo_slab_half.name=竹板台阶 +tile.bamboo_stairs.name=竹板楼梯 +tile.bamboo_stalk.name=竹子 + +tile.rope_knot_bamboo.name=Bamboo Fence (Rope) \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_bamboo/models/block/bamboo_plank.json b/src/main/resources/assets/growthcraft_bamboo/models/block/bamboo_plank.json new file mode 100644 index 0000000..992c369 --- /dev/null +++ b/src/main/resources/assets/growthcraft_bamboo/models/block/bamboo_plank.json @@ -0,0 +1,7 @@ +{ + "parent": "block/cube_all", + "textures": { + "particle": "growthcraft_bamboo:block/bamboo_plank", + "all": "growthcraft_bamboo:block/bamboo_plank" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_bamboo/models/block/bamboo_plank_button.json b/src/main/resources/assets/growthcraft_bamboo/models/block/bamboo_plank_button.json new file mode 100644 index 0000000..e0fc5a3 --- /dev/null +++ b/src/main/resources/assets/growthcraft_bamboo/models/block/bamboo_plank_button.json @@ -0,0 +1,6 @@ +{ + "parent": "block/button", + "textures": { + "texture": "growthcraft_bamboo:block/bamboo_plank" + } +} diff --git a/src/main/resources/assets/growthcraft_bamboo/models/block/bamboo_plank_button_inventory.json b/src/main/resources/assets/growthcraft_bamboo/models/block/bamboo_plank_button_inventory.json new file mode 100644 index 0000000..60d2d21 --- /dev/null +++ b/src/main/resources/assets/growthcraft_bamboo/models/block/bamboo_plank_button_inventory.json @@ -0,0 +1,6 @@ +{ + "parent": "block/button_inventory", + "textures": { + "texture": "growthcraft_bamboo:block/bamboo_plank" + } +} diff --git a/src/main/resources/assets/growthcraft_bamboo/models/block/bamboo_plank_button_pressed.json b/src/main/resources/assets/growthcraft_bamboo/models/block/bamboo_plank_button_pressed.json new file mode 100644 index 0000000..58438d7 --- /dev/null +++ b/src/main/resources/assets/growthcraft_bamboo/models/block/bamboo_plank_button_pressed.json @@ -0,0 +1,6 @@ +{ + "parent": "block/button_pressed", + "textures": { + "texture": "growthcraft_bamboo:block/bamboo_plank" + } +} diff --git a/src/main/resources/assets/growthcraft_bamboo/models/block/bamboo_plank_door_bottom.json b/src/main/resources/assets/growthcraft_bamboo/models/block/bamboo_plank_door_bottom.json new file mode 100644 index 0000000..b41ddf9 --- /dev/null +++ b/src/main/resources/assets/growthcraft_bamboo/models/block/bamboo_plank_door_bottom.json @@ -0,0 +1,7 @@ +{ + "parent": "block/door_bottom", + "textures": { + "bottom": "growthcraft_bamboo:block/bamboo_plank_door_bottom", + "top": "growthcraft_bamboo:block/bamboo_plank_door_top" + } +} diff --git a/src/main/resources/assets/growthcraft_bamboo/models/block/bamboo_plank_door_bottom_hinge.json b/src/main/resources/assets/growthcraft_bamboo/models/block/bamboo_plank_door_bottom_hinge.json new file mode 100644 index 0000000..1b16018 --- /dev/null +++ b/src/main/resources/assets/growthcraft_bamboo/models/block/bamboo_plank_door_bottom_hinge.json @@ -0,0 +1,7 @@ +{ + "parent": "block/door_bottom_rh", + "textures": { + "bottom": "growthcraft_bamboo:block/bamboo_plank_door_bottom", + "top": "growthcraft_bamboo:block/bamboo_plank_door_top" + } +} diff --git a/src/main/resources/assets/growthcraft_bamboo/models/block/bamboo_plank_door_top.json b/src/main/resources/assets/growthcraft_bamboo/models/block/bamboo_plank_door_top.json new file mode 100644 index 0000000..a8e1af5 --- /dev/null +++ b/src/main/resources/assets/growthcraft_bamboo/models/block/bamboo_plank_door_top.json @@ -0,0 +1,7 @@ +{ + "parent": "block/door_top", + "textures": { + "bottom": "growthcraft_bamboo:block/bamboo_plank_door_bottom", + "top": "growthcraft_bamboo:block/bamboo_plank_door_top" + } +} diff --git a/src/main/resources/assets/growthcraft_bamboo/models/block/bamboo_plank_door_top_hinge.json b/src/main/resources/assets/growthcraft_bamboo/models/block/bamboo_plank_door_top_hinge.json new file mode 100644 index 0000000..bd2aacc --- /dev/null +++ b/src/main/resources/assets/growthcraft_bamboo/models/block/bamboo_plank_door_top_hinge.json @@ -0,0 +1,7 @@ +{ + "parent": "block/door_top_rh", + "textures": { + "bottom": "growthcraft_bamboo:block/bamboo_plank_door_bottom", + "top": "growthcraft_bamboo:block/bamboo_plank_door_top" + } +} diff --git a/src/main/resources/assets/growthcraft_bamboo/models/block/bamboo_plank_door_top_left.json b/src/main/resources/assets/growthcraft_bamboo/models/block/bamboo_plank_door_top_left.json new file mode 100644 index 0000000..9a12c85 --- /dev/null +++ b/src/main/resources/assets/growthcraft_bamboo/models/block/bamboo_plank_door_top_left.json @@ -0,0 +1,9 @@ +{ + "parent": "block/door_top_left", + "ambientocclusion": false, + "render_type": "cutout", + "textures": { + "bottom": "growthcraft_bamboo:block/bamboo_plank_door_bottom", + "top": "growthcraft_bamboo:block/bamboo_plank_door_top" + } +} diff --git a/src/main/resources/assets/growthcraft_bamboo/models/block/bamboo_plank_door_top_left_open.json b/src/main/resources/assets/growthcraft_bamboo/models/block/bamboo_plank_door_top_left_open.json new file mode 100644 index 0000000..2ced8f2 --- /dev/null +++ b/src/main/resources/assets/growthcraft_bamboo/models/block/bamboo_plank_door_top_left_open.json @@ -0,0 +1,9 @@ +{ + "parent": "block/door_top_left_open", + "ambientocclusion": false, + "render_type": "cutout", + "textures": { + "bottom": "growthcraft_bamboo:block/bamboo_plank_door_bottom", + "top": "growthcraft_bamboo:block/bamboo_plank_door_top" + } +} diff --git a/src/main/resources/assets/growthcraft_bamboo/models/block/bamboo_plank_door_top_right.json b/src/main/resources/assets/growthcraft_bamboo/models/block/bamboo_plank_door_top_right.json new file mode 100644 index 0000000..dc4c2a8 --- /dev/null +++ b/src/main/resources/assets/growthcraft_bamboo/models/block/bamboo_plank_door_top_right.json @@ -0,0 +1,9 @@ +{ + "parent": "block/door_top_right", + "ambientocclusion": false, + "render_type": "cutout", + "textures": { + "bottom": "growthcraft_bamboo:block/bamboo_plank_door_bottom", + "top": "growthcraft_bamboo:block/bamboo_plank_door_top" + } +} diff --git a/src/main/resources/assets/growthcraft_bamboo/models/block/bamboo_plank_door_top_right_open.json b/src/main/resources/assets/growthcraft_bamboo/models/block/bamboo_plank_door_top_right_open.json new file mode 100644 index 0000000..77b52b8 --- /dev/null +++ b/src/main/resources/assets/growthcraft_bamboo/models/block/bamboo_plank_door_top_right_open.json @@ -0,0 +1,9 @@ +{ + "parent": "block/door_top_right_open", + "ambientocclusion": false, + "render_type": "cutout", + "textures": { + "bottom": "growthcraft_bamboo:block/bamboo_plank_door_bottom", + "top": "growthcraft_bamboo:block/bamboo_plank_door_top" + } +} diff --git a/src/main/resources/assets/growthcraft_bamboo/models/block/bamboo_plank_fence_gate.json b/src/main/resources/assets/growthcraft_bamboo/models/block/bamboo_plank_fence_gate.json new file mode 100644 index 0000000..6883340 --- /dev/null +++ b/src/main/resources/assets/growthcraft_bamboo/models/block/bamboo_plank_fence_gate.json @@ -0,0 +1,6 @@ +{ + "parent": "block/template_fence_gate", + "textures": { + "texture": "growthcraft_bamboo:block/bamboo_plank" + } +} diff --git a/src/main/resources/assets/growthcraft_bamboo/models/block/bamboo_plank_fence_gate_open.json b/src/main/resources/assets/growthcraft_bamboo/models/block/bamboo_plank_fence_gate_open.json new file mode 100644 index 0000000..da694c1 --- /dev/null +++ b/src/main/resources/assets/growthcraft_bamboo/models/block/bamboo_plank_fence_gate_open.json @@ -0,0 +1,6 @@ +{ + "parent": "block/template_fence_gate_open", + "textures": { + "texture": "growthcraft_bamboo:block/bamboo_plank" + } +} diff --git a/src/main/resources/assets/growthcraft_bamboo/models/block/bamboo_plank_fence_gate_wall.json b/src/main/resources/assets/growthcraft_bamboo/models/block/bamboo_plank_fence_gate_wall.json new file mode 100644 index 0000000..777c401 --- /dev/null +++ b/src/main/resources/assets/growthcraft_bamboo/models/block/bamboo_plank_fence_gate_wall.json @@ -0,0 +1,6 @@ +{ + "parent": "block/template_fence_gate_wall", + "textures": { + "texture": "growthcraft_bamboo:block/bamboo_plank" + } +} diff --git a/src/main/resources/assets/growthcraft_bamboo/models/block/bamboo_plank_fence_gate_wall_open.json b/src/main/resources/assets/growthcraft_bamboo/models/block/bamboo_plank_fence_gate_wall_open.json new file mode 100644 index 0000000..364d1fd --- /dev/null +++ b/src/main/resources/assets/growthcraft_bamboo/models/block/bamboo_plank_fence_gate_wall_open.json @@ -0,0 +1,6 @@ +{ + "parent": "block/template_fence_gate_wall_open", + "textures": { + "texture": "growthcraft_bamboo:block/bamboo_plank" + } +} diff --git a/src/main/resources/assets/growthcraft_bamboo/models/block/bamboo_plank_fence_post.json b/src/main/resources/assets/growthcraft_bamboo/models/block/bamboo_plank_fence_post.json new file mode 100644 index 0000000..2ceedc9 --- /dev/null +++ b/src/main/resources/assets/growthcraft_bamboo/models/block/bamboo_plank_fence_post.json @@ -0,0 +1,6 @@ +{ + "parent": "block/fence_post", + "textures": { + "texture": "growthcraft_bamboo:block/bamboo_plank" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_bamboo/models/block/bamboo_plank_fence_rope_linen.json b/src/main/resources/assets/growthcraft_bamboo/models/block/bamboo_plank_fence_rope_linen.json new file mode 100644 index 0000000..5f64b68 --- /dev/null +++ b/src/main/resources/assets/growthcraft_bamboo/models/block/bamboo_plank_fence_rope_linen.json @@ -0,0 +1,354 @@ +{ + "textures": { + "0": "growthcraft:block/rope_linen_knot", + "1": "growthcraft_bamboo:block/bamboo_plank", + "particle": "growthcraft_bamboo:block/bamboo_plank" + }, + "elements": [ + { + "name": "fence_post", + "from": [ + 6.0, + 0.0, + 6.0 + ], + "to": [ + 10.0, + 16.0, + 10.0 + ], + "faces": { + "north": { + "texture": "#1", + "uv": [ + 0.0, + 0.0, + 4.0, + 16.0 + ] + }, + "east": { + "texture": "#1", + "uv": [ + 0.0, + 0.0, + 4.0, + 16.0 + ] + }, + "south": { + "texture": "#1", + "uv": [ + 0.0, + 0.0, + 4.0, + 16.0 + ] + }, + "west": { + "texture": "#1", + "uv": [ + 0.0, + 0.0, + 4.0, + 16.0 + ] + }, + "up": { + "texture": "#1", + "uv": [ + 0.0, + 0.0, + 4.0, + 4.0 + ] + }, + "down": { + "texture": "#1", + "uv": [ + 0.0, + 0.0, + 4.0, + 4.0 + ] + } + } + }, + { + "name": "South", + "from": [ + 5.0, + 6.0, + 10.0 + ], + "to": [ + 11.0, + 14.0, + 11.0 + ], + "faces": { + "north": { + "texture": "#0", + "uv": [ + 0.0, + 0.0, + 6.0, + 8.0 + ] + }, + "east": { + "texture": "#0", + "uv": [ + 0.0, + 0.0, + 1.0, + 8.0 + ] + }, + "south": { + "texture": "#0", + "uv": [ + 0.0, + 0.0, + 6.0, + 8.0 + ] + }, + "west": { + "texture": "#0", + "uv": [ + 0.0, + 0.0, + 1.0, + 8.0 + ] + }, + "up": { + "texture": "#0", + "uv": [ + 0.0, + 0.0, + 6.0, + 1.0 + ] + }, + "down": { + "texture": "#0", + "uv": [ + 0.0, + 0.0, + 6.0, + 1.0 + ] + } + } + }, + { + "name": "North", + "from": [ + 5.0, + 6.0, + 5.0 + ], + "to": [ + 11.0, + 14.0, + 6.0 + ], + "faces": { + "north": { + "texture": "#0", + "uv": [ + 0.0, + 0.0, + 6.0, + 8.0 + ] + }, + "east": { + "texture": "#0", + "uv": [ + 0.0, + 0.0, + 1.0, + 8.0 + ] + }, + "south": { + "texture": "#0", + "uv": [ + 0.0, + 0.0, + 6.0, + 8.0 + ] + }, + "west": { + "texture": "#0", + "uv": [ + 0.0, + 0.0, + 1.0, + 8.0 + ] + }, + "up": { + "texture": "#0", + "uv": [ + 0.0, + 0.0, + 6.0, + 1.0 + ] + }, + "down": { + "texture": "#0", + "uv": [ + 0.0, + 0.0, + 6.0, + 1.0 + ] + } + } + }, + { + "name": "West", + "from": [ + 5.0, + 6.0, + 6.0 + ], + "to": [ + 6.0, + 14.0, + 10.0 + ], + "faces": { + "north": { + "texture": "#0", + "uv": [ + 0.0, + 0.0, + 1.0, + 8.0 + ] + }, + "east": { + "texture": "#0", + "uv": [ + 0.0, + 0.0, + 6.0, + 8.0 + ] + }, + "south": { + "texture": "#0", + "uv": [ + 0.0, + 0.0, + 1.0, + 8.0 + ] + }, + "west": { + "texture": "#0", + "uv": [ + 0.0, + 0.0, + 6.0, + 8.0 + ] + }, + "up": { + "texture": "#0", + "uv": [ + 0.0, + 0.0, + 1.0, + 6.0 + ] + }, + "down": { + "texture": "#0", + "uv": [ + 0.0, + 0.0, + 1.0, + 6.0 + ] + } + } + }, + { + "name": "East", + "from": [ + 10.0, + 6.0, + 6.0 + ], + "to": [ + 11.0, + 14.0, + 10.0 + ], + "faces": { + "north": { + "texture": "#0", + "uv": [ + 0.0, + 0.0, + 1.0, + 8.0 + ] + }, + "east": { + "texture": "#0", + "uv": [ + 0.0, + 0.0, + 6.0, + 8.0 + ] + }, + "south": { + "texture": "#0", + "uv": [ + 0.0, + 0.0, + 1.0, + 8.0 + ] + }, + "west": { + "texture": "#0", + "uv": [ + 0.0, + 0.0, + 6.0, + 8.0 + ] + }, + "up": { + "texture": "#0", + "uv": [ + 0.0, + 0.0, + 1.0, + 6.0 + ] + }, + "down": { + "texture": "#0", + "uv": [ + 0.0, + 0.0, + 1.0, + 6.0 + ] + } + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_bamboo/models/block/bamboo_plank_fence_side.json b/src/main/resources/assets/growthcraft_bamboo/models/block/bamboo_plank_fence_side.json new file mode 100644 index 0000000..cb4054d --- /dev/null +++ b/src/main/resources/assets/growthcraft_bamboo/models/block/bamboo_plank_fence_side.json @@ -0,0 +1,6 @@ +{ + "parent": "block/fence_side", + "textures": { + "texture": "growthcraft_bamboo:block/bamboo_plank" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_bamboo/models/block/bamboo_plank_pressure_plate.json b/src/main/resources/assets/growthcraft_bamboo/models/block/bamboo_plank_pressure_plate.json new file mode 100644 index 0000000..9a15f48 --- /dev/null +++ b/src/main/resources/assets/growthcraft_bamboo/models/block/bamboo_plank_pressure_plate.json @@ -0,0 +1,6 @@ +{ + "parent": "block/pressure_plate_up", + "textures": { + "texture": "growthcraft_bamboo:block/bamboo_plank" + } +} diff --git a/src/main/resources/assets/growthcraft_bamboo/models/block/bamboo_plank_pressure_plate_down.json b/src/main/resources/assets/growthcraft_bamboo/models/block/bamboo_plank_pressure_plate_down.json new file mode 100644 index 0000000..d1f9993 --- /dev/null +++ b/src/main/resources/assets/growthcraft_bamboo/models/block/bamboo_plank_pressure_plate_down.json @@ -0,0 +1,6 @@ +{ + "parent": "block/pressure_plate_down", + "textures": { + "texture": "growthcraft_bamboo:block/bamboo_plank" + } +} diff --git a/src/main/resources/assets/growthcraft_bamboo/models/block/bamboo_plank_slab.json b/src/main/resources/assets/growthcraft_bamboo/models/block/bamboo_plank_slab.json new file mode 100644 index 0000000..ac2cced --- /dev/null +++ b/src/main/resources/assets/growthcraft_bamboo/models/block/bamboo_plank_slab.json @@ -0,0 +1,8 @@ +{ + "parent": "block/slab", + "textures": { + "bottom": "growthcraft_bamboo:block/bamboo_plank", + "top": "growthcraft_bamboo:block/bamboo_plank", + "side": "growthcraft_bamboo:block/bamboo_plank" + } +} diff --git a/src/main/resources/assets/growthcraft_bamboo/models/block/bamboo_plank_slab_top.json b/src/main/resources/assets/growthcraft_bamboo/models/block/bamboo_plank_slab_top.json new file mode 100644 index 0000000..32893dc --- /dev/null +++ b/src/main/resources/assets/growthcraft_bamboo/models/block/bamboo_plank_slab_top.json @@ -0,0 +1,8 @@ +{ + "parent": "block/slab_top", + "textures": { + "bottom": "growthcraft_bamboo:block/bamboo_plank", + "top": "growthcraft_bamboo:block/bamboo_plank", + "side": "growthcraft_bamboo:block/bamboo_plank" + } +} diff --git a/src/main/resources/assets/growthcraft_bamboo/models/block/bamboo_plank_stairs.json b/src/main/resources/assets/growthcraft_bamboo/models/block/bamboo_plank_stairs.json new file mode 100644 index 0000000..16bfd96 --- /dev/null +++ b/src/main/resources/assets/growthcraft_bamboo/models/block/bamboo_plank_stairs.json @@ -0,0 +1,8 @@ +{ + "parent": "block/stairs", + "textures": { + "bottom": "growthcraft_bamboo:block/bamboo_plank", + "top": "growthcraft_bamboo:block/bamboo_plank", + "side": "growthcraft_bamboo:block/bamboo_plank" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_bamboo/models/block/bamboo_plank_stairs_inner.json b/src/main/resources/assets/growthcraft_bamboo/models/block/bamboo_plank_stairs_inner.json new file mode 100644 index 0000000..5787119 --- /dev/null +++ b/src/main/resources/assets/growthcraft_bamboo/models/block/bamboo_plank_stairs_inner.json @@ -0,0 +1,8 @@ +{ + "parent": "block/inner_stairs", + "textures": { + "bottom": "growthcraft_bamboo:block/bamboo_plank", + "top": "growthcraft_bamboo:block/bamboo_plank", + "side": "growthcraft_bamboo:block/bamboo_plank" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_bamboo/models/block/bamboo_plank_stairs_outer.json b/src/main/resources/assets/growthcraft_bamboo/models/block/bamboo_plank_stairs_outer.json new file mode 100644 index 0000000..1b08473 --- /dev/null +++ b/src/main/resources/assets/growthcraft_bamboo/models/block/bamboo_plank_stairs_outer.json @@ -0,0 +1,8 @@ +{ + "parent": "block/outer_stairs", + "textures": { + "bottom": "growthcraft_bamboo:block/bamboo_plank", + "top": "growthcraft_bamboo:block/bamboo_plank", + "side": "growthcraft_bamboo:block/bamboo_plank" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_bamboo/models/block/bamboo_plank_trapdoor_bottom.json b/src/main/resources/assets/growthcraft_bamboo/models/block/bamboo_plank_trapdoor_bottom.json new file mode 100644 index 0000000..69d43c1 --- /dev/null +++ b/src/main/resources/assets/growthcraft_bamboo/models/block/bamboo_plank_trapdoor_bottom.json @@ -0,0 +1,6 @@ +{ + "parent": "block/template_orientable_trapdoor_bottom", + "textures": { + "texture": "growthcraft_bamboo:block/bamboo_plank_trapdoor" + } +} diff --git a/src/main/resources/assets/growthcraft_bamboo/models/block/bamboo_plank_trapdoor_open.json b/src/main/resources/assets/growthcraft_bamboo/models/block/bamboo_plank_trapdoor_open.json new file mode 100644 index 0000000..9824596 --- /dev/null +++ b/src/main/resources/assets/growthcraft_bamboo/models/block/bamboo_plank_trapdoor_open.json @@ -0,0 +1,6 @@ +{ + "parent": "block/template_orientable_trapdoor_open", + "textures": { + "texture": "growthcraft_bamboo:block/bamboo_plank_trapdoor" + } +} diff --git a/src/main/resources/assets/growthcraft_bamboo/models/block/bamboo_plank_trapdoor_top.json b/src/main/resources/assets/growthcraft_bamboo/models/block/bamboo_plank_trapdoor_top.json new file mode 100644 index 0000000..2cbc20d --- /dev/null +++ b/src/main/resources/assets/growthcraft_bamboo/models/block/bamboo_plank_trapdoor_top.json @@ -0,0 +1,6 @@ +{ + "parent": "block/template_orientable_trapdoor_top", + "textures": { + "texture": "growthcraft_bamboo:block/bamboo_plank_trapdoor" + } +} diff --git a/src/main/resources/assets/growthcraft_bamboo/models/block/bamboo_tree_leaves.json b/src/main/resources/assets/growthcraft_bamboo/models/block/bamboo_tree_leaves.json new file mode 100644 index 0000000..da326d5 --- /dev/null +++ b/src/main/resources/assets/growthcraft_bamboo/models/block/bamboo_tree_leaves.json @@ -0,0 +1,6 @@ +{ + "parent": "block/leaves", + "textures": { + "all": "growthcraft_bamboo:block/bamboo_tree_leaves" + } +} diff --git a/src/main/resources/assets/growthcraft_bamboo/models/block/bamboo_tree_sapling.json b/src/main/resources/assets/growthcraft_bamboo/models/block/bamboo_tree_sapling.json new file mode 100644 index 0000000..e4bd1a0 --- /dev/null +++ b/src/main/resources/assets/growthcraft_bamboo/models/block/bamboo_tree_sapling.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cross", + "textures": { + "cross": "growthcraft_bamboo:block/bamboo_tree_sapling" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_bamboo/models/block/bamboo_wood.json b/src/main/resources/assets/growthcraft_bamboo/models/block/bamboo_wood.json new file mode 100644 index 0000000..c3efea4 --- /dev/null +++ b/src/main/resources/assets/growthcraft_bamboo/models/block/bamboo_wood.json @@ -0,0 +1,54 @@ +{ + "textures": { + "0": "growthcraft_bamboo:block/bamboo_wood_log", + "1": "growthcraft_bamboo:block/bamboo_wood_log", + "particle": "growthcraft_bamboo:block/bamboo_wood_log" + }, + "elements": [ + { + "name": "bamboo", + "from": [4, 0, 4], + "to": [12, 16, 12], + "faces": { + "north": {"uv": [4, 0, 12, 16], "texture": "#0"}, + "east": {"uv": [4, 0, 12, 16], "texture": "#0"}, + "south": {"uv": [4, 0, 12, 16], "texture": "#0"}, + "west": {"uv": [4, 0, 12, 16], "texture": "#0"}, + "up": {"uv": [4, 4, 12, 12], "texture": "#1"}, + "down": {"uv": [4, 4, 12, 12], "texture": "#1"} + } + } + ], + "display": { + "gui": { + "rotation": [30, 225, 0], + "translation": [0, 0, 0], + "scale": [0.625, 0.625, 0.625] + }, + "ground": { + "rotation": [0, 0, 0], + "translation": [0, 3, 0], + "scale": [0.25, 0.25, 0.25] + }, + "fixed": { + "rotation": [0, 0, 0], + "translation": [0, 0, 0], + "scale": [0.5, 0.5, 0.5] + }, + "thirdperson_righthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson_righthand": { + "rotation": [0, 45, 0], + "translation": [0, 0, 0], + "scale": [0.4, 0.4, 0.4] + }, + "firstperson_lefthand": { + "rotation": [0, 225, 0], + "translation": [0, 0, 0], + "scale": [0.4, 0.4, 0.4] + } + } +} diff --git a/src/main/resources/assets/growthcraft_bamboo/models/block/bamboo_wood_log.json b/src/main/resources/assets/growthcraft_bamboo/models/block/bamboo_wood_log.json new file mode 100644 index 0000000..7af9654 --- /dev/null +++ b/src/main/resources/assets/growthcraft_bamboo/models/block/bamboo_wood_log.json @@ -0,0 +1,54 @@ +{ + "textures": { + "0": "growthcraft_bamboo:block/bamboo_wood_log", + "1": "growthcraft_bamboo:block/bamboo_wood_log_top", + "particle": "growthcraft_bamboo:block/bamboo_wood_log" + }, + "elements": [ + { + "name": "bamboo", + "from": [4, 0, 4], + "to": [12, 16, 12], + "faces": { + "north": {"uv": [4, 0, 12, 16], "texture": "#0"}, + "east": {"uv": [4, 0, 12, 16], "texture": "#0"}, + "south": {"uv": [4, 0, 12, 16], "texture": "#0"}, + "west": {"uv": [4, 0, 12, 16], "texture": "#0"}, + "up": {"uv": [4, 4, 12, 12], "texture": "#1"}, + "down": {"uv": [4, 4, 12, 12], "texture": "#1"} + } + } + ], + "display": { + "gui": { + "rotation": [30, 225, 0], + "translation": [0, 0, 0], + "scale": [0.625, 0.625, 0.625] + }, + "ground": { + "rotation": [0, 0, 0], + "translation": [0, 3, 0], + "scale": [0.25, 0.25, 0.25] + }, + "fixed": { + "rotation": [0, 0, 0], + "translation": [0, 0, 0], + "scale": [0.5, 0.5, 0.5] + }, + "thirdperson_righthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson_righthand": { + "rotation": [0, 45, 0], + "translation": [0, 0, 0], + "scale": [0.4, 0.4, 0.4] + }, + "firstperson_lefthand": { + "rotation": [0, 225, 0], + "translation": [0, 0, 0], + "scale": [0.4, 0.4, 0.4] + } + } +} diff --git a/src/main/resources/assets/growthcraft_bamboo/models/block/bamboo_wood_log_stripped.json b/src/main/resources/assets/growthcraft_bamboo/models/block/bamboo_wood_log_stripped.json new file mode 100644 index 0000000..0962759 --- /dev/null +++ b/src/main/resources/assets/growthcraft_bamboo/models/block/bamboo_wood_log_stripped.json @@ -0,0 +1,54 @@ +{ + "textures": { + "0": "growthcraft_bamboo:block/bamboo_wood_log_stripped", + "1": "growthcraft_bamboo:block/bamboo_wood_log_stripped_top", + "particle": "growthcraft_bamboo:block/bamboo_wood_log_stripped" + }, + "elements": [ + { + "name": "bamboo", + "from": [4, 0, 4], + "to": [12, 16, 12], + "faces": { + "north": {"uv": [4, 0, 12, 16], "texture": "#0"}, + "east": {"uv": [4, 0, 12, 16], "texture": "#0"}, + "south": {"uv": [4, 0, 12, 16], "texture": "#0"}, + "west": {"uv": [4, 0, 12, 16], "texture": "#0"}, + "up": {"uv": [4, 4, 12, 12], "texture": "#1"}, + "down": {"uv": [4, 4, 12, 12], "texture": "#1"} + } + } + ], + "display": { + "gui": { + "rotation": [30, 225, 0], + "translation": [0, 0, 0], + "scale": [0.625, 0.625, 0.625] + }, + "ground": { + "rotation": [0, 0, 0], + "translation": [0, 3, 0], + "scale": [0.25, 0.25, 0.25] + }, + "fixed": { + "rotation": [0, 0, 0], + "translation": [0, 0, 0], + "scale": [0.5, 0.5, 0.5] + }, + "thirdperson_righthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson_righthand": { + "rotation": [0, 45, 0], + "translation": [0, 0, 0], + "scale": [0.4, 0.4, 0.4] + }, + "firstperson_lefthand": { + "rotation": [0, 225, 0], + "translation": [0, 0, 0], + "scale": [0.4, 0.4, 0.4] + } + } +} diff --git a/src/main/resources/assets/growthcraft_bamboo/models/block/bamboo_wood_stripped.json b/src/main/resources/assets/growthcraft_bamboo/models/block/bamboo_wood_stripped.json new file mode 100644 index 0000000..4cd51d2 --- /dev/null +++ b/src/main/resources/assets/growthcraft_bamboo/models/block/bamboo_wood_stripped.json @@ -0,0 +1,54 @@ +{ + "textures": { + "0": "growthcraft_bamboo:block/bamboo_wood_log_stripped", + "1": "growthcraft_bamboo:block/bamboo_wood_log_stripped", + "particle": "growthcraft_bamboo:block/bamboo_wood_log_stripped" + }, + "elements": [ + { + "name": "bamboo", + "from": [4, 0, 4], + "to": [12, 16, 12], + "faces": { + "north": {"uv": [4, 0, 12, 16], "texture": "#0"}, + "east": {"uv": [4, 0, 12, 16], "texture": "#0"}, + "south": {"uv": [4, 0, 12, 16], "texture": "#0"}, + "west": {"uv": [4, 0, 12, 16], "texture": "#0"}, + "up": {"uv": [4, 4, 12, 12], "texture": "#1"}, + "down": {"uv": [4, 4, 12, 12], "texture": "#1"} + } + } + ], + "display": { + "gui": { + "rotation": [30, 225, 0], + "translation": [0, 0, 0], + "scale": [0.625, 0.625, 0.625] + }, + "ground": { + "rotation": [0, 0, 0], + "translation": [0, 3, 0], + "scale": [0.25, 0.25, 0.25] + }, + "fixed": { + "rotation": [0, 0, 0], + "translation": [0, 0, 0], + "scale": [0.5, 0.5, 0.5] + }, + "thirdperson_righthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson_righthand": { + "rotation": [0, 45, 0], + "translation": [0, 0, 0], + "scale": [0.4, 0.4, 0.4] + }, + "firstperson_lefthand": { + "rotation": [0, 225, 0], + "translation": [0, 0, 0], + "scale": [0.4, 0.4, 0.4] + } + } +} diff --git a/src/main/resources/assets/growthcraft_bamboo/models/block/bee_box_bamboo.json b/src/main/resources/assets/growthcraft_bamboo/models/block/bee_box_bamboo.json new file mode 100644 index 0000000..aa9ba64 --- /dev/null +++ b/src/main/resources/assets/growthcraft_bamboo/models/block/bee_box_bamboo.json @@ -0,0 +1,297 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "0": "growthcraft_bamboo:block/bamboo_wood_log", + "1": "growthcraft_bamboo:block/bamboo_wood_log_top", + "2": "growthcraft_bamboo:block/bamboo_plank", + "3": "growthcraft_bamboo:block/bamboo_plank_trapdoor", + "particle": "growthcraft_bamboo:block/bamboo_wood_log" + }, + "elements": [ + { + "name": "foot_NE", + "from": [12, 0, 2], + "to": [14, 3, 4], + "faces": { + "north": {"uv": [4, 7, 7, 16], "texture": "#0"}, + "east": {"uv": [9, 7, 12, 16], "texture": "#0"}, + "south": {"uv": [4, 7, 7, 16], "texture": "#0"}, + "west": {"uv": [9, 7, 12, 16], "texture": "#0"}, + "up": {"uv": [4, 14, 6, 16], "texture": "#0"}, + "down": {"uv": [10, 14, 12, 16], "texture": "#0"} + } + }, + { + "name": "foot_NW", + "from": [2, 0, 2], + "to": [4, 3, 4], + "faces": { + "north": {"uv": [4, 7, 7, 16], "texture": "#0"}, + "east": {"uv": [9, 7, 12, 16], "texture": "#0"}, + "south": {"uv": [4, 7, 7, 16], "texture": "#0"}, + "west": {"uv": [9, 7, 12, 16], "texture": "#0"}, + "up": {"uv": [4, 14, 6, 16], "texture": "#0"}, + "down": {"uv": [10, 14, 12, 16], "texture": "#0"} + } + }, + { + "name": "foot_SE", + "from": [12, 0, 12], + "to": [14, 3, 14], + "faces": { + "north": {"uv": [4, 7, 7, 16], "texture": "#0"}, + "east": {"uv": [9, 7, 12, 16], "texture": "#0"}, + "south": {"uv": [4, 7, 7, 16], "texture": "#0"}, + "west": {"uv": [9, 7, 12, 16], "texture": "#0"}, + "up": {"uv": [4, 14, 6, 16], "texture": "#0"}, + "down": {"uv": [10, 14, 12, 16], "texture": "#0"} + } + }, + { + "name": "foot_SW", + "from": [2, 0, 12], + "to": [4, 3, 14], + "faces": { + "north": {"uv": [4, 7, 7, 16], "texture": "#0"}, + "east": {"uv": [9, 7, 12, 16], "texture": "#0"}, + "south": {"uv": [4, 7, 7, 16], "texture": "#0"}, + "west": {"uv": [9, 7, 12, 16], "texture": "#0"}, + "up": {"uv": [4, 14, 6, 16], "texture": "#0"}, + "down": {"uv": [10, 14, 12, 16], "texture": "#0"} + } + }, + { + "name": "bottom", + "from": [1, 3, 1], + "to": [15, 4, 15], + "faces": { + "north": {"uv": [4, 4, 12, 5], "texture": "#1"}, + "east": {"uv": [4, 11, 12, 12], "texture": "#1"}, + "south": {"uv": [4, 11, 12, 12], "texture": "#1"}, + "west": {"uv": [4, 4, 12, 5], "texture": "#1"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#1"}, + "down": {"uv": [4, 4, 12, 12], "texture": "#1"} + } + }, + { + "name": "bottom", + "from": [0, 11, 0], + "to": [16, 12, 16], + "faces": { + "north": {"uv": [4, 4, 12, 5], "texture": "#1"}, + "east": {"uv": [4, 11, 12, 12], "texture": "#1"}, + "south": {"uv": [4, 11, 12, 12], "texture": "#1"}, + "west": {"uv": [4, 11, 12, 12], "texture": "#1"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#1"}, + "down": {"uv": [4, 4, 12, 12], "texture": "#1"} + } + }, + { + "name": "bottom", + "from": [0, 12, 0], + "to": [16, 13, 16], + "faces": { + "north": {"uv": [4, 10, 12, 11], "texture": "#1"}, + "east": {"uv": [4, 5, 12, 6], "texture": "#1"}, + "south": {"uv": [4, 10, 12, 11], "texture": "#1"}, + "west": {"uv": [4, 5, 12, 6], "texture": "#1"}, + "up": {"uv": [4, 4, 12, 12], "texture": "#1"}, + "down": {"uv": [4, 4, 12, 12], "texture": "#1"} + } + }, + { + "name": "bottom", + "from": [0, 13, 0], + "to": [16, 14, 16], + "faces": { + "north": {"uv": [4, 11, 12, 12], "texture": "#1"}, + "east": {"uv": [4, 4, 12, 5], "texture": "#1"}, + "south": {"uv": [4, 4, 12, 5], "texture": "#1"}, + "west": {"uv": [4, 4, 12, 5], "texture": "#1"}, + "up": {"uv": [4, 4, 12, 12], "texture": "#1"}, + "down": {"uv": [4, 4, 12, 12], "texture": "#1"} + } + }, + { + "name": "post_NW", + "from": [1, 4, 1], + "to": [2, 12, 2], + "faces": { + "north": {"uv": [4, 4, 5, 12], "texture": "#1"}, + "east": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "south": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "west": {"uv": [11, 4, 12, 12], "texture": "#1"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#missing"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#missing"} + } + }, + { + "name": "post_NE", + "from": [14, 4, 1], + "to": [15, 12, 2], + "faces": { + "north": {"uv": [4, 4, 5, 12], "texture": "#1"}, + "east": {"uv": [11, 4, 12, 12], "texture": "#1"}, + "south": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "west": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#missing"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#missing"} + } + }, + { + "name": "post_SE", + "from": [14, 4, 14], + "to": [15, 12, 15], + "faces": { + "north": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "east": {"uv": [4, 4, 5, 12], "texture": "#1"}, + "south": {"uv": [11, 4, 12, 12], "texture": "#1"}, + "west": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#missing"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#missing"} + } + }, + { + "name": "post_SW", + "from": [1, 4, 14], + "to": [2, 12, 15], + "faces": { + "north": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "east": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "south": {"uv": [11, 4, 12, 12], "texture": "#1"}, + "west": {"uv": [4, 4, 5, 12], "texture": "#1"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#missing"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#missing"} + } + }, + { + "from": [2, 4, 1], + "to": [14, 12, 2], + "faces": { + "north": {"uv": [2, 0, 14, 8], "texture": "#2"}, + "east": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "south": {"uv": [0, 0, 12, 8], "texture": "#missing"}, + "west": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "up": {"uv": [0, 0, 12, 1], "texture": "#missing"}, + "down": {"uv": [0, 0, 12, 1], "texture": "#missing"} + } + }, + { + "from": [2, 4, 14], + "to": [14, 12, 15], + "faces": { + "north": {"uv": [0, 0, 12, 8], "texture": "#missing"}, + "east": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "south": {"uv": [2, 0, 14, 8], "texture": "#2"}, + "west": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "up": {"uv": [0, 0, 12, 1], "texture": "#missing"}, + "down": {"uv": [0, 0, 12, 1], "texture": "#missing"} + } + }, + { + "from": [1, 4, 2], + "to": [2, 12, 14], + "faces": { + "north": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "east": {"uv": [0, 0, 12, 8], "texture": "#missing"}, + "south": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "west": {"uv": [2, 0, 14, 8], "texture": "#2"}, + "up": {"uv": [0, 0, 1, 12], "texture": "#missing"}, + "down": {"uv": [0, 0, 1, 12], "texture": "#missing"} + } + }, + { + "from": [14, 4, 2], + "to": [15, 12, 14], + "faces": { + "north": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "east": {"uv": [2, 0, 14, 8], "texture": "#2"}, + "south": {"uv": [0, 0, 1, 8], "texture": "#missing"}, + "west": {"uv": [0, 0, 12, 8], "texture": "#missing"}, + "up": {"uv": [0, 0, 1, 12], "texture": "#missing"}, + "down": {"uv": [0, 0, 1, 12], "texture": "#missing"} + } + }, + { + "name": "beebox_top", + "from": [2, 14, 2], + "to": [14, 16, 14], + "faces": { + "north": {"uv": [4, 4, 12, 6], "texture": "#1"}, + "east": {"uv": [4, 4, 12, 6], "texture": "#1"}, + "south": {"uv": [4, 4, 12, 6], "texture": "#1"}, + "west": {"uv": [4, 4, 12, 6], "texture": "#1"}, + "up": {"uv": [4, 4, 12, 12], "texture": "#1"}, + "down": {"uv": [4, 4, 12, 12], "texture": "#1"} + } + }, + { + "from": [5, 4, 0.5], + "to": [11, 6, 1.5], + "faces": { + "north": {"uv": [5, 14, 11, 16], "texture": "#3"}, + "east": {"uv": [5, 14, 6, 16], "texture": "#3"}, + "south": {"uv": [0, 0, 6, 2], "texture": "#missing"}, + "west": {"uv": [5, 14, 6, 16], "texture": "#3"}, + "up": {"uv": [5, 15, 11, 16], "texture": "#3"}, + "down": {"uv": [5, 14, 11, 15], "texture": "#3"} + } + }, + { + "from": [6, 6, 0.5], + "to": [10, 7, 1.5], + "faces": { + "north": {"uv": [6, 5, 10, 6], "texture": "#1"}, + "east": {"uv": [5, 5, 6, 6], "texture": "#1"}, + "south": {"uv": [0, 0, 4, 1], "texture": "#missing"}, + "west": {"uv": [10, 5, 11, 6], "texture": "#1"}, + "up": {"uv": [5, 10, 9, 11], "texture": "#1"}, + "down": {"uv": [0, 0, 4, 1], "texture": "#missing"} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [75, -135, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "thirdperson_lefthand": { + "rotation": [75, -135, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson_righthand": { + "rotation": [0, -135, 0], + "scale": [0.4, 0.4, 0.4] + }, + "firstperson_lefthand": { + "rotation": [0, -135, 0], + "scale": [0.4, 0.4, 0.4] + }, + "ground": { + "rotation": [0, 180, 0], + "translation": [0, 3, 0], + "scale": [0.25, 0.25, 0.25] + }, + "gui": { + "rotation": [30, -45, 0], + "scale": [0.625, 0.625, 0.625] + }, + "head": { + "rotation": [0, 180, 0] + }, + "fixed": { + "rotation": [0, 180, 0], + "scale": [0.5, 0.5, 0.5] + } + }, + "groups": [ + { + "name": "bee_box_bamboo", + "origin": [8, 8, 8], + "color": 0, + "children": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_bamboo/models/block/fishtrap_bamboo.json b/src/main/resources/assets/growthcraft_bamboo/models/block/fishtrap_bamboo.json new file mode 100644 index 0000000..0978dca --- /dev/null +++ b/src/main/resources/assets/growthcraft_bamboo/models/block/fishtrap_bamboo.json @@ -0,0 +1,1273 @@ +{ + "parent": "block/block", + "textures": { + "0": "growthcraft_bamboo:block/fishtrap_bamboo", + "1": "growthcraft_bamboo:block/fishtrap_bamboo_front", + "missing": "growthcraft:block/missing", + "particle": "growthcraft_bamboo:block/fishtrap_bamboo" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [ + 16, + 2, + 2 + ], + "faces": { + "north": { + "uv": [ + 0, + 14, + 16, + 16 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 14, + 14, + 16, + 16 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 0, + 0, + 16, + 2 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 0, + 0, + 2, + 2 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 0, + 0, + 16, + 2 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 0, + 0, + 16, + 2 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 14, + 2, + 0 + ], + "to": [ + 16, + 14, + 2 + ], + "faces": { + "north": { + "uv": [ + 0, + 2, + 2, + 14 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 14, + 2, + 16, + 14 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 0, + 2, + 2, + 14 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 1, + 2, + 2, + 14 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 0, + 0, + 2, + 1 + ], + "texture": "#missing" + }, + "down": { + "uv": [ + 0, + 0, + 2, + 1 + ], + "texture": "#missing" + } + } + }, + { + "from": [ + 0, + 2, + 0 + ], + "to": [ + 2, + 14, + 2 + ], + "faces": { + "north": { + "uv": [ + 14, + 2, + 16, + 14 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 14, + 2, + 15, + 14 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 14, + 2, + 16, + 14 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 0, + 2, + 2, + 14 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 0, + 0, + 2, + 1 + ], + "texture": "#missing" + }, + "down": { + "uv": [ + 0, + 0, + 2, + 1 + ], + "texture": "#missing" + } + } + }, + { + "from": [ + 0, + 14, + 0 + ], + "to": [ + 16, + 16, + 2 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 16, + 2 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 14, + 0, + 16, + 2 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 0, + 14, + 16, + 16 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 0, + 0, + 2, + 2 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 0, + 14, + 16, + 16 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 0, + 14, + 16, + 16 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 2, + 2, + 1 + ], + "to": [ + 14, + 14, + 1.5 + ], + "faces": { + "north": { + "uv": [ + 2, + 2, + 14, + 14 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 0, + 0, + 0.5, + 12 + ], + "texture": "#missing" + }, + "south": { + "uv": [ + 2, + 2, + 14, + 14 + ], + "rotation": 180, + "texture": "#1" + }, + "west": { + "uv": [ + 0, + 0, + 0.5, + 12 + ], + "texture": "#missing" + }, + "up": { + "uv": [ + 0, + 0, + 12, + 0.5 + ], + "texture": "#missing" + }, + "down": { + "uv": [ + 0, + 0, + 12, + 0.5 + ], + "texture": "#missing" + } + } + }, + { + "from": [ + 0, + 0, + 14 + ], + "to": [ + 16, + 2, + 16 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 8, + 8, + 23 + ] + }, + "faces": { + "north": { + "uv": [ + 0, + 0, + 16, + 2 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 0, + 14, + 2, + 16 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 0, + 14, + 16, + 16 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 14, + 14, + 16, + 16 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 0, + 0, + 16, + 2 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 0, + 14, + 16, + 16 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 14, + 2, + 14 + ], + "to": [ + 16, + 14, + 16 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 8, + 8, + 23 + ] + }, + "faces": { + "north": { + "uv": [ + 14, + 2, + 16, + 14 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 0, + 2, + 2, + 14 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 14, + 2, + 16, + 14 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 0, + 2, + 2, + 14 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 0, + 0, + 2, + 2 + ], + "texture": "#missing" + }, + "down": { + "uv": [ + 0, + 0, + 2, + 2 + ], + "texture": "#missing" + } + } + }, + { + "from": [ + 0, + 2, + 14 + ], + "to": [ + 2, + 14, + 16 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 8, + 8, + 23 + ] + }, + "faces": { + "north": { + "uv": [ + 0, + 2, + 2, + 14 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 14, + 2, + 16, + 14 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 0, + 2, + 2, + 14 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 14, + 2, + 16, + 14 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 0, + 0, + 2, + 2 + ], + "texture": "#missing" + }, + "down": { + "uv": [ + 0, + 0, + 2, + 2 + ], + "texture": "#missing" + } + } + }, + { + "from": [ + 0, + 14, + 14 + ], + "to": [ + 16, + 16, + 16 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 8, + 8, + 23 + ] + }, + "faces": { + "north": { + "uv": [ + 0, + 14, + 16, + 16 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 0, + 0, + 2, + 2 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 0, + 0, + 16, + 2 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 14, + 0, + 16, + 2 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 0, + 0, + 16, + 2 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 0, + 14, + 16, + 16 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 2, + 2, + 15 + ], + "to": [ + 14, + 14, + 15.5 + ], + "faces": { + "north": { + "uv": [ + 2, + 2, + 14, + 14 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 0, + 0, + 0.5, + 12 + ], + "texture": "#missing" + }, + "south": { + "uv": [ + 2, + 2, + 14, + 14 + ], + "rotation": 180, + "texture": "#0" + }, + "west": { + "uv": [ + 0, + 0, + 0.5, + 12 + ], + "texture": "#missing" + }, + "up": { + "uv": [ + 0, + 0, + 12, + 0.5 + ], + "texture": "#missing" + }, + "down": { + "uv": [ + 0, + 0, + 12, + 0.5 + ], + "texture": "#missing" + } + } + }, + { + "from": [ + 14, + 0, + 2 + ], + "to": [ + 16, + 2, + 14 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 2, + 2 + ], + "texture": "#missing" + }, + "east": { + "uv": [ + 2, + 14, + 14, + 16 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 0, + 0, + 2, + 2 + ], + "texture": "#missing" + }, + "west": { + "uv": [ + 2, + 0, + 14, + 2 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 14, + 2, + 16, + 14 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 14, + 2, + 16, + 14 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 14, + 14, + 2 + ], + "to": [ + 16, + 16, + 14 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 3, + 2 + ], + "texture": "#missing" + }, + "east": { + "uv": [ + 2, + 0, + 14, + 2 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 0, + 0, + 3, + 2 + ], + "texture": "#missing" + }, + "west": { + "uv": [ + 2, + 14, + 14, + 16 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 0, + 2, + 2, + 14 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 14, + 2, + 16, + 14 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 14.5, + 2, + 2 + ], + "to": [ + 15.5, + 14, + 14 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 1, + 12 + ], + "texture": "#missing" + }, + "east": { + "uv": [ + 2, + 2, + 14, + 14 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 0, + 0, + 1, + 12 + ], + "texture": "#missing" + }, + "west": { + "uv": [ + 2, + 2, + 14, + 14 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 0, + 0, + 1, + 12 + ], + "texture": "#missing" + }, + "down": { + "uv": [ + 0, + 0, + 1, + 12 + ], + "texture": "#missing" + } + } + }, + { + "from": [ + 0, + 14, + 2 + ], + "to": [ + 2, + 16, + 14 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 3, + 2 + ], + "texture": "#missing" + }, + "east": { + "uv": [ + 2, + 14, + 14, + 16 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 0, + 0, + 3, + 2 + ], + "texture": "#missing" + }, + "west": { + "uv": [ + 2, + 0, + 14, + 2 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 0, + 2, + 2, + 14 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 0, + 2, + 2, + 14 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 0, + 0, + 2 + ], + "to": [ + 2, + 2, + 14 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 2, + 2 + ], + "texture": "#missing" + }, + "east": { + "uv": [ + 2, + 0, + 14, + 2 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 0, + 0, + 2, + 2 + ], + "texture": "#missing" + }, + "west": { + "uv": [ + 2, + 14, + 14, + 16 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 0, + 2, + 2, + 14 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 0, + 2, + 2, + 14 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 0.5, + 2, + 2 + ], + "to": [ + 1.5, + 14, + 14 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 1, + 12 + ], + "texture": "#missing" + }, + "east": { + "uv": [ + 2, + 2, + 14, + 14 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 0, + 0, + 1, + 12 + ], + "texture": "#missing" + }, + "west": { + "uv": [ + 2, + 2, + 14, + 14 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 0, + 0, + 1, + 12 + ], + "texture": "#missing" + }, + "down": { + "uv": [ + 0, + 0, + 1, + 12 + ], + "texture": "#missing" + } + } + }, + { + "from": [ + 2, + 0.5, + 2 + ], + "to": [ + 14, + 1.5, + 14 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 12, + 1 + ], + "texture": "#missing" + }, + "east": { + "uv": [ + 0, + 0, + 12, + 1 + ], + "texture": "#missing" + }, + "south": { + "uv": [ + 0, + 0, + 12, + 1 + ], + "texture": "#missing" + }, + "west": { + "uv": [ + 0, + 0, + 12, + 1 + ], + "texture": "#missing" + }, + "up": { + "uv": [ + 2, + 2, + 14, + 14 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 2, + 2, + 14, + 14 + ], + "texture": "#0" + } + } + }, + { + "from": [ + 2, + 14.5, + 2 + ], + "to": [ + 14, + 15.5, + 14 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 12, + 1 + ], + "texture": "#missing" + }, + "east": { + "uv": [ + 0, + 0, + 12, + 1 + ], + "texture": "#missing" + }, + "south": { + "uv": [ + 0, + 0, + 12, + 1 + ], + "texture": "#missing" + }, + "west": { + "uv": [ + 0, + 0, + 12, + 1 + ], + "texture": "#missing" + }, + "up": { + "uv": [ + 2, + 2, + 14, + 14 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 2, + 2, + 14, + 14 + ], + "texture": "#0" + } + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_bamboo/models/item/bamboo_coal.json b/src/main/resources/assets/growthcraft_bamboo/models/item/bamboo_coal.json new file mode 100644 index 0000000..294e6ac --- /dev/null +++ b/src/main/resources/assets/growthcraft_bamboo/models/item/bamboo_coal.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_bamboo:item/coal" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_bamboo/models/item/bamboo_plank.json b/src/main/resources/assets/growthcraft_bamboo/models/item/bamboo_plank.json new file mode 100644 index 0000000..136837f --- /dev/null +++ b/src/main/resources/assets/growthcraft_bamboo/models/item/bamboo_plank.json @@ -0,0 +1,3 @@ +{ + "parent": "growthcraft_bamboo:block/bamboo_plank" +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_bamboo/models/item/bamboo_plank_boat.json b/src/main/resources/assets/growthcraft_bamboo/models/item/bamboo_plank_boat.json new file mode 100644 index 0000000..6817e28 --- /dev/null +++ b/src/main/resources/assets/growthcraft_bamboo/models/item/bamboo_plank_boat.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_bamboo:item/bamboo_plank_boat" + } +} diff --git a/src/main/resources/assets/growthcraft_bamboo/models/item/bamboo_plank_button.json b/src/main/resources/assets/growthcraft_bamboo/models/item/bamboo_plank_button.json new file mode 100644 index 0000000..c15d895 --- /dev/null +++ b/src/main/resources/assets/growthcraft_bamboo/models/item/bamboo_plank_button.json @@ -0,0 +1,3 @@ +{ + "parent": "growthcraft_bamboo:block/bamboo_plank_button_inventory" +} diff --git a/src/main/resources/assets/growthcraft_bamboo/models/item/bamboo_plank_door.json b/src/main/resources/assets/growthcraft_bamboo/models/item/bamboo_plank_door.json new file mode 100644 index 0000000..8506efb --- /dev/null +++ b/src/main/resources/assets/growthcraft_bamboo/models/item/bamboo_plank_door.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_bamboo:item/bamboo_plank_door" + } +} diff --git a/src/main/resources/assets/growthcraft_bamboo/models/item/bamboo_plank_fence.json b/src/main/resources/assets/growthcraft_bamboo/models/item/bamboo_plank_fence.json new file mode 100644 index 0000000..1e10bab --- /dev/null +++ b/src/main/resources/assets/growthcraft_bamboo/models/item/bamboo_plank_fence.json @@ -0,0 +1,6 @@ +{ + "parent": "block/fence_inventory", + "textures": { + "texture": "growthcraft_bamboo:block/bamboo_plank" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_bamboo/models/item/bamboo_plank_fence_gate.json b/src/main/resources/assets/growthcraft_bamboo/models/item/bamboo_plank_fence_gate.json new file mode 100644 index 0000000..fbe6bf7 --- /dev/null +++ b/src/main/resources/assets/growthcraft_bamboo/models/item/bamboo_plank_fence_gate.json @@ -0,0 +1,3 @@ +{ + "parent": "growthcraft_bamboo:block/bamboo_plank_fence_gate" +} diff --git a/src/main/resources/assets/growthcraft_bamboo/models/item/bamboo_plank_pressure_plate.json b/src/main/resources/assets/growthcraft_bamboo/models/item/bamboo_plank_pressure_plate.json new file mode 100644 index 0000000..3cb32a4 --- /dev/null +++ b/src/main/resources/assets/growthcraft_bamboo/models/item/bamboo_plank_pressure_plate.json @@ -0,0 +1,3 @@ +{ + "parent": "growthcraft_bamboo:block/bamboo_plank_pressure_plate" +} diff --git a/src/main/resources/assets/growthcraft_bamboo/models/item/bamboo_plank_slab.json b/src/main/resources/assets/growthcraft_bamboo/models/item/bamboo_plank_slab.json new file mode 100644 index 0000000..4c97720 --- /dev/null +++ b/src/main/resources/assets/growthcraft_bamboo/models/item/bamboo_plank_slab.json @@ -0,0 +1,3 @@ +{ + "parent": "growthcraft_bamboo:block/bamboo_plank_slab" +} diff --git a/src/main/resources/assets/growthcraft_bamboo/models/item/bamboo_plank_stairs.json b/src/main/resources/assets/growthcraft_bamboo/models/item/bamboo_plank_stairs.json new file mode 100644 index 0000000..14dc269 --- /dev/null +++ b/src/main/resources/assets/growthcraft_bamboo/models/item/bamboo_plank_stairs.json @@ -0,0 +1,22 @@ +{ + "parent": "growthcraft_bamboo:block/bamboo_plank_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/growthcraft_bamboo/models/item/bamboo_plank_trapdoor.json b/src/main/resources/assets/growthcraft_bamboo/models/item/bamboo_plank_trapdoor.json new file mode 100644 index 0000000..ee42b3b --- /dev/null +++ b/src/main/resources/assets/growthcraft_bamboo/models/item/bamboo_plank_trapdoor.json @@ -0,0 +1,3 @@ +{ + "parent": "growthcraft_bamboo:block/bamboo_plank_trapdoor_bottom" +} diff --git a/src/main/resources/assets/growthcraft_bamboo/models/item/bamboo_seeds.json b/src/main/resources/assets/growthcraft_bamboo/models/item/bamboo_seeds.json new file mode 100644 index 0000000..5f9be66 --- /dev/null +++ b/src/main/resources/assets/growthcraft_bamboo/models/item/bamboo_seeds.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_apples:item/apple_seeds" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_bamboo/models/item/bamboo_stick.json b/src/main/resources/assets/growthcraft_bamboo/models/item/bamboo_stick.json new file mode 100644 index 0000000..c435678 --- /dev/null +++ b/src/main/resources/assets/growthcraft_bamboo/models/item/bamboo_stick.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_bamboo:item/bamboo" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_bamboo/models/item/bamboo_tree_leaves.json b/src/main/resources/assets/growthcraft_bamboo/models/item/bamboo_tree_leaves.json new file mode 100644 index 0000000..7f1d843 --- /dev/null +++ b/src/main/resources/assets/growthcraft_bamboo/models/item/bamboo_tree_leaves.json @@ -0,0 +1,3 @@ +{ + "parent": "growthcraft_bamboo:block/bamboo_tree_leaves" +} diff --git a/src/main/resources/assets/growthcraft_bamboo/models/item/bamboo_tree_sapling.json b/src/main/resources/assets/growthcraft_bamboo/models/item/bamboo_tree_sapling.json new file mode 100644 index 0000000..397e511 --- /dev/null +++ b/src/main/resources/assets/growthcraft_bamboo/models/item/bamboo_tree_sapling.json @@ -0,0 +1,3 @@ +{ + "parent": "growthcraft_bamboo:block/bamboo_tree_sapling" +} diff --git a/src/main/resources/assets/growthcraft_bamboo/models/item/bamboo_wood.json b/src/main/resources/assets/growthcraft_bamboo/models/item/bamboo_wood.json new file mode 100644 index 0000000..6542c73 --- /dev/null +++ b/src/main/resources/assets/growthcraft_bamboo/models/item/bamboo_wood.json @@ -0,0 +1,3 @@ +{ + "parent": "growthcraft_bamboo:block/bamboo_wood_log" +} diff --git a/src/main/resources/assets/growthcraft_bamboo/models/item/bamboo_wood_log.json b/src/main/resources/assets/growthcraft_bamboo/models/item/bamboo_wood_log.json new file mode 100644 index 0000000..6542c73 --- /dev/null +++ b/src/main/resources/assets/growthcraft_bamboo/models/item/bamboo_wood_log.json @@ -0,0 +1,3 @@ +{ + "parent": "growthcraft_bamboo:block/bamboo_wood_log" +} diff --git a/src/main/resources/assets/growthcraft_bamboo/models/item/bamboo_wood_log_stripped.json b/src/main/resources/assets/growthcraft_bamboo/models/item/bamboo_wood_log_stripped.json new file mode 100644 index 0000000..f487abf --- /dev/null +++ b/src/main/resources/assets/growthcraft_bamboo/models/item/bamboo_wood_log_stripped.json @@ -0,0 +1,3 @@ +{ + "parent": "growthcraft_bamboo:block/bamboo_wood_log_stripped" +} diff --git a/src/main/resources/assets/growthcraft_bamboo/models/item/bamboo_wood_stripped.json b/src/main/resources/assets/growthcraft_bamboo/models/item/bamboo_wood_stripped.json new file mode 100644 index 0000000..60f1007 --- /dev/null +++ b/src/main/resources/assets/growthcraft_bamboo/models/item/bamboo_wood_stripped.json @@ -0,0 +1,3 @@ +{ + "parent": "growthcraft_bamboo:block/bamboo_wood_stripped" +} diff --git a/src/main/resources/assets/growthcraft_bamboo/models/item/bee_box_bamboo.json b/src/main/resources/assets/growthcraft_bamboo/models/item/bee_box_bamboo.json new file mode 100644 index 0000000..9008627 --- /dev/null +++ b/src/main/resources/assets/growthcraft_bamboo/models/item/bee_box_bamboo.json @@ -0,0 +1,3 @@ +{ + "parent": "growthcraft_bamboo:block/bee_box_bamboo" +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_bamboo/models/item/fishtrap_bamboo.json b/src/main/resources/assets/growthcraft_bamboo/models/item/fishtrap_bamboo.json new file mode 100644 index 0000000..b44ec32 --- /dev/null +++ b/src/main/resources/assets/growthcraft_bamboo/models/item/fishtrap_bamboo.json @@ -0,0 +1,3 @@ +{ + "parent": "growthcraft_bamboo:block/fishtrap_bamboo" +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_bamboo/textures/block/bamboo_fence.png b/src/main/resources/assets/growthcraft_bamboo/textures/block/bamboo_fence.png new file mode 100644 index 0000000..b8d3845 Binary files /dev/null and b/src/main/resources/assets/growthcraft_bamboo/textures/block/bamboo_fence.png differ diff --git a/src/main/resources/assets/growthcraft_bamboo/textures/block/bamboo_fence_top.png b/src/main/resources/assets/growthcraft_bamboo/textures/block/bamboo_fence_top.png new file mode 100644 index 0000000..290afec Binary files /dev/null and b/src/main/resources/assets/growthcraft_bamboo/textures/block/bamboo_fence_top.png differ diff --git a/src/main/resources/assets/growthcraft_bamboo/textures/block/bamboo_plank.png b/src/main/resources/assets/growthcraft_bamboo/textures/block/bamboo_plank.png new file mode 100644 index 0000000..42a7a2c Binary files /dev/null and b/src/main/resources/assets/growthcraft_bamboo/textures/block/bamboo_plank.png differ diff --git a/src/main/resources/assets/growthcraft_bamboo/textures/block/bamboo_plank_door_bottom.png b/src/main/resources/assets/growthcraft_bamboo/textures/block/bamboo_plank_door_bottom.png new file mode 100644 index 0000000..d5d2137 Binary files /dev/null and b/src/main/resources/assets/growthcraft_bamboo/textures/block/bamboo_plank_door_bottom.png differ diff --git a/src/main/resources/assets/growthcraft_bamboo/textures/block/bamboo_plank_door_top.png b/src/main/resources/assets/growthcraft_bamboo/textures/block/bamboo_plank_door_top.png new file mode 100644 index 0000000..dbec4d5 Binary files /dev/null and b/src/main/resources/assets/growthcraft_bamboo/textures/block/bamboo_plank_door_top.png differ diff --git a/src/main/resources/assets/growthcraft_bamboo/textures/block/bamboo_plank_stripped.png b/src/main/resources/assets/growthcraft_bamboo/textures/block/bamboo_plank_stripped.png new file mode 100644 index 0000000..3c3480d Binary files /dev/null and b/src/main/resources/assets/growthcraft_bamboo/textures/block/bamboo_plank_stripped.png differ diff --git a/src/main/resources/assets/growthcraft_bamboo/textures/block/bamboo_plank_trapdoor.png b/src/main/resources/assets/growthcraft_bamboo/textures/block/bamboo_plank_trapdoor.png new file mode 100644 index 0000000..fb1e923 Binary files /dev/null and b/src/main/resources/assets/growthcraft_bamboo/textures/block/bamboo_plank_trapdoor.png differ diff --git a/src/main/resources/assets/growthcraft_bamboo/textures/block/bamboo_tree_leaves.png b/src/main/resources/assets/growthcraft_bamboo/textures/block/bamboo_tree_leaves.png new file mode 100644 index 0000000..0b65414 Binary files /dev/null and b/src/main/resources/assets/growthcraft_bamboo/textures/block/bamboo_tree_leaves.png differ diff --git a/src/main/resources/assets/growthcraft_bamboo/textures/block/bamboo_tree_leaves_opaque.png b/src/main/resources/assets/growthcraft_bamboo/textures/block/bamboo_tree_leaves_opaque.png new file mode 100644 index 0000000..a79208a Binary files /dev/null and b/src/main/resources/assets/growthcraft_bamboo/textures/block/bamboo_tree_leaves_opaque.png differ diff --git a/src/main/resources/assets/growthcraft_bamboo/textures/block/bamboo_tree_sapling.png b/src/main/resources/assets/growthcraft_bamboo/textures/block/bamboo_tree_sapling.png new file mode 100644 index 0000000..9dcb5a6 Binary files /dev/null and b/src/main/resources/assets/growthcraft_bamboo/textures/block/bamboo_tree_sapling.png differ diff --git a/src/main/resources/assets/growthcraft_bamboo/textures/block/bamboo_wood_log.png b/src/main/resources/assets/growthcraft_bamboo/textures/block/bamboo_wood_log.png new file mode 100644 index 0000000..e70834f Binary files /dev/null and b/src/main/resources/assets/growthcraft_bamboo/textures/block/bamboo_wood_log.png differ diff --git a/src/main/resources/assets/growthcraft_bamboo/textures/block/bamboo_wood_log_stripped.png b/src/main/resources/assets/growthcraft_bamboo/textures/block/bamboo_wood_log_stripped.png new file mode 100644 index 0000000..af6886b Binary files /dev/null and b/src/main/resources/assets/growthcraft_bamboo/textures/block/bamboo_wood_log_stripped.png differ diff --git a/src/main/resources/assets/growthcraft_bamboo/textures/block/bamboo_wood_log_stripped_top.png b/src/main/resources/assets/growthcraft_bamboo/textures/block/bamboo_wood_log_stripped_top.png new file mode 100644 index 0000000..62ae276 Binary files /dev/null and b/src/main/resources/assets/growthcraft_bamboo/textures/block/bamboo_wood_log_stripped_top.png differ diff --git a/src/main/resources/assets/growthcraft_bamboo/textures/block/bamboo_wood_log_top.png b/src/main/resources/assets/growthcraft_bamboo/textures/block/bamboo_wood_log_top.png new file mode 100644 index 0000000..1df2761 Binary files /dev/null and b/src/main/resources/assets/growthcraft_bamboo/textures/block/bamboo_wood_log_top.png differ diff --git a/src/main/resources/assets/growthcraft_bamboo/textures/block/fishtrap_bamboo.png b/src/main/resources/assets/growthcraft_bamboo/textures/block/fishtrap_bamboo.png new file mode 100644 index 0000000..797db62 Binary files /dev/null and b/src/main/resources/assets/growthcraft_bamboo/textures/block/fishtrap_bamboo.png differ diff --git a/src/main/resources/assets/growthcraft_bamboo/textures/block/fishtrap_bamboo_front.png b/src/main/resources/assets/growthcraft_bamboo/textures/block/fishtrap_bamboo_front.png new file mode 100644 index 0000000..3b9ca09 Binary files /dev/null and b/src/main/resources/assets/growthcraft_bamboo/textures/block/fishtrap_bamboo_front.png differ diff --git a/src/main/resources/assets/growthcraft_bamboo/textures/block/plant_nocolor.png b/src/main/resources/assets/growthcraft_bamboo/textures/block/plant_nocolor.png new file mode 100644 index 0000000..849d0b5 Binary files /dev/null and b/src/main/resources/assets/growthcraft_bamboo/textures/block/plant_nocolor.png differ diff --git a/src/main/resources/assets/growthcraft_bamboo/textures/block/scaffold.png b/src/main/resources/assets/growthcraft_bamboo/textures/block/scaffold.png new file mode 100644 index 0000000..ce732a9 Binary files /dev/null and b/src/main/resources/assets/growthcraft_bamboo/textures/block/scaffold.png differ diff --git a/src/main/resources/assets/growthcraft_bamboo/textures/item/bamboo.png b/src/main/resources/assets/growthcraft_bamboo/textures/item/bamboo.png new file mode 100644 index 0000000..6e7cd0e Binary files /dev/null and b/src/main/resources/assets/growthcraft_bamboo/textures/item/bamboo.png differ diff --git a/src/main/resources/assets/growthcraft_bamboo/textures/item/bamboo_plank_boat.png b/src/main/resources/assets/growthcraft_bamboo/textures/item/bamboo_plank_boat.png new file mode 100644 index 0000000..44a3b2d Binary files /dev/null and b/src/main/resources/assets/growthcraft_bamboo/textures/item/bamboo_plank_boat.png differ diff --git a/src/main/resources/assets/growthcraft_bamboo/textures/item/bamboo_plank_door.png b/src/main/resources/assets/growthcraft_bamboo/textures/item/bamboo_plank_door.png new file mode 100644 index 0000000..62a72e5 Binary files /dev/null and b/src/main/resources/assets/growthcraft_bamboo/textures/item/bamboo_plank_door.png differ diff --git a/src/main/resources/assets/growthcraft_bamboo/textures/item/coal.png b/src/main/resources/assets/growthcraft_bamboo/textures/item/coal.png new file mode 100644 index 0000000..8001446 Binary files /dev/null and b/src/main/resources/assets/growthcraft_bamboo/textures/item/coal.png differ diff --git a/src/main/resources/assets/growthcraft_bamboo/textures/item/raft.png b/src/main/resources/assets/growthcraft_bamboo/textures/item/raft.png new file mode 100644 index 0000000..39783f5 Binary files /dev/null and b/src/main/resources/assets/growthcraft_bamboo/textures/item/raft.png differ diff --git a/src/main/resources/assets/growthcraft_bamboo/textures/item/shoot.png b/src/main/resources/assets/growthcraft_bamboo/textures/item/shoot.png new file mode 100644 index 0000000..9dcb5a6 Binary files /dev/null and b/src/main/resources/assets/growthcraft_bamboo/textures/item/shoot.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/blockstates/amber_ale_fluid.json b/src/main/resources/assets/growthcraft_cellar/blockstates/amber_ale_fluid.json new file mode 100644 index 0000000..31dc5fa --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/blockstates/amber_ale_fluid.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "growthcraft:block/fluid" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/blockstates/amber_lager_fluid.json b/src/main/resources/assets/growthcraft_cellar/blockstates/amber_lager_fluid.json new file mode 100644 index 0000000..31dc5fa --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/blockstates/amber_lager_fluid.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "growthcraft:block/fluid" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/blockstates/amber_wort_fluid.json b/src/main/resources/assets/growthcraft_cellar/blockstates/amber_wort_fluid.json new file mode 100644 index 0000000..31dc5fa --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/blockstates/amber_wort_fluid.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "growthcraft:block/fluid" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/blockstates/brew_kettle.json b/src/main/resources/assets/growthcraft_cellar/blockstates/brew_kettle.json new file mode 100644 index 0000000..288aed3 --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/blockstates/brew_kettle.json @@ -0,0 +1,16 @@ +{ + "variants": { + "lit=false,has_lid=false": { + "model": "growthcraft_cellar:block/brew_kettle" + }, + "lit=false,has_lid=true": { + "model": "growthcraft_cellar:block/brew_kettle_lid" + }, + "lit=true,has_lid=true": { + "model": "growthcraft_cellar:block/brew_kettle_lid" + }, + "lit=true,has_lid=false": { + "model": "growthcraft_cellar:block/brew_kettle" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/blockstates/brown_ale_fluid.json b/src/main/resources/assets/growthcraft_cellar/blockstates/brown_ale_fluid.json new file mode 100644 index 0000000..31dc5fa --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/blockstates/brown_ale_fluid.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "growthcraft:block/fluid" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/blockstates/brown_lager_fluid.json b/src/main/resources/assets/growthcraft_cellar/blockstates/brown_lager_fluid.json new file mode 100644 index 0000000..31dc5fa --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/blockstates/brown_lager_fluid.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "growthcraft:block/fluid" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/blockstates/brown_wort_fluid.json b/src/main/resources/assets/growthcraft_cellar/blockstates/brown_wort_fluid.json new file mode 100644 index 0000000..31dc5fa --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/blockstates/brown_wort_fluid.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "growthcraft:block/fluid" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/blockstates/copper_ale_fluid.json b/src/main/resources/assets/growthcraft_cellar/blockstates/copper_ale_fluid.json new file mode 100644 index 0000000..31dc5fa --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/blockstates/copper_ale_fluid.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "growthcraft:block/fluid" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/blockstates/copper_lager_fluid.json b/src/main/resources/assets/growthcraft_cellar/blockstates/copper_lager_fluid.json new file mode 100644 index 0000000..31dc5fa --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/blockstates/copper_lager_fluid.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "growthcraft:block/fluid" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/blockstates/copper_wort_fluid.json b/src/main/resources/assets/growthcraft_cellar/blockstates/copper_wort_fluid.json new file mode 100644 index 0000000..31dc5fa --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/blockstates/copper_wort_fluid.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "growthcraft:block/fluid" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/blockstates/culture_jar.json b/src/main/resources/assets/growthcraft_cellar/blockstates/culture_jar.json new file mode 100644 index 0000000..50ef73a --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/blockstates/culture_jar.json @@ -0,0 +1,40 @@ +{ + "forge_marker": 1, + "defaults": { + "textures": { + "particle": "growthcraft_cellar:block/culture_jar" + } + }, + "variants": { + "facing=north,lit=true": { + "model": "growthcraft_cellar:block/culture_jar" + }, + "facing=south,lit=true": { + "model": "growthcraft_cellar:block/culture_jar", + "y": 180 + }, + "facing=east,lit=true": { + "model": "growthcraft_cellar:block/culture_jar", + "y": 90 + }, + "facing=west,lit=true": { + "model": "growthcraft_cellar:block/culture_jar", + "y": 270 + }, + "facing=north,lit=false": { + "model": "growthcraft_cellar:block/culture_jar" + }, + "facing=south,lit=false": { + "model": "growthcraft_cellar:block/culture_jar", + "y": 180 + }, + "facing=east,lit=false": { + "model": "growthcraft_cellar:block/culture_jar", + "y": 90 + }, + "facing=west,lit=false": { + "model": "growthcraft_cellar:block/culture_jar", + "y": 270 + } + } +} diff --git a/src/main/resources/assets/growthcraft_cellar/blockstates/dark_lager_fluid.json b/src/main/resources/assets/growthcraft_cellar/blockstates/dark_lager_fluid.json new file mode 100644 index 0000000..31dc5fa --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/blockstates/dark_lager_fluid.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "growthcraft:block/fluid" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/blockstates/dark_wort_fluid.json b/src/main/resources/assets/growthcraft_cellar/blockstates/dark_wort_fluid.json new file mode 100644 index 0000000..31dc5fa --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/blockstates/dark_wort_fluid.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "growthcraft:block/fluid" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/blockstates/deep_amber_wort_fluid.json b/src/main/resources/assets/growthcraft_cellar/blockstates/deep_amber_wort_fluid.json new file mode 100644 index 0000000..31dc5fa --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/blockstates/deep_amber_wort_fluid.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "growthcraft:block/fluid" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/blockstates/deep_copper_wort_fluid.json b/src/main/resources/assets/growthcraft_cellar/blockstates/deep_copper_wort_fluid.json new file mode 100644 index 0000000..31dc5fa --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/blockstates/deep_copper_wort_fluid.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "growthcraft:block/fluid" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/blockstates/fermentation_barrel_oak.json b/src/main/resources/assets/growthcraft_cellar/blockstates/fermentation_barrel_oak.json new file mode 100644 index 0000000..c362341 --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/blockstates/fermentation_barrel_oak.json @@ -0,0 +1,27 @@ +{ + "variants": { + "facing=north": { + "model": "growthcraft_cellar:block/fermentation_barrel_oak" + }, + "facing=south": { + "model": "growthcraft_cellar:block/fermentation_barrel_oak", + "y": 180 + }, + "facing=east": { + "model": "growthcraft_cellar:block/fermentation_barrel_oak", + "y": 90 + }, + "facing=west": { + "model": "growthcraft_cellar:block/fermentation_barrel_oak", + "y": 270 + }, + "facing=up": { + "model": "growthcraft_cellar:block/fermentation_barrel_oak", + "x": 90 + }, + "facing=down": { + "model": "growthcraft_cellar:block/fermentation_barrel_oak", + "x": 270 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/blockstates/fruit_press.json b/src/main/resources/assets/growthcraft_cellar/blockstates/fruit_press.json new file mode 100644 index 0000000..fcb8d09 --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/blockstates/fruit_press.json @@ -0,0 +1,20 @@ +{ + "variants": { + "facing=east": { + "model": "growthcraft_cellar:block/fruit_press", + "y": 180 + }, + "facing=west": { + "model": "growthcraft_cellar:block/fruit_press", + "y": 0 + }, + "facing=south": { + "model": "growthcraft_cellar:block/fruit_press", + "y": 270 + }, + "facing=north": { + "model": "growthcraft_cellar:block/fruit_press", + "y": 90 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/blockstates/fruit_press_piston.json b/src/main/resources/assets/growthcraft_cellar/blockstates/fruit_press_piston.json new file mode 100644 index 0000000..1a84f7e --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/blockstates/fruit_press_piston.json @@ -0,0 +1,32 @@ +{ + "variants": { + "facing=north,pressed=false": { + "model": "growthcraft_cellar:block/fruit_press_piston_up", + "y": 270 + }, + "facing=north,pressed=true": { + "model": "growthcraft_cellar:block/fruit_press_piston_down", + "y": 270 + }, + "facing=south,pressed=false": { + "model": "growthcraft_cellar:block/fruit_press_piston_up", + "y": 270 + }, + "facing=south,pressed=true": { + "model": "growthcraft_cellar:block/fruit_press_piston_down", + "y": 270 + }, + "facing=east,pressed=false": { + "model": "growthcraft_cellar:block/fruit_press_piston_up" + }, + "facing=east,pressed=true": { + "model": "growthcraft_cellar:block/fruit_press_piston_down" + }, + "facing=west,pressed=false": { + "model": "growthcraft_cellar:block/fruit_press_piston_up" + }, + "facing=west,pressed=true": { + "model": "growthcraft_cellar:block/fruit_press_piston_down" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/blockstates/golden_wort_fluid.json b/src/main/resources/assets/growthcraft_cellar/blockstates/golden_wort_fluid.json new file mode 100644 index 0000000..31dc5fa --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/blockstates/golden_wort_fluid.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "growthcraft:block/fluid" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/blockstates/grape_vine.json b/src/main/resources/assets/growthcraft_cellar/blockstates/grape_vine.json new file mode 100644 index 0000000..d289054 --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/blockstates/grape_vine.json @@ -0,0 +1,36 @@ +{ + "multipart": [ + { + "when": { + "age": "0|1" + }, + "apply": { + "model": "growthcraft_cellar:block/grape_vine/grape_vine_stage0" + } + }, + { + "when": { + "age": "2|3" + }, + "apply": { + "model": "growthcraft_cellar:block/grape_vine/grape_vine_stage2" + } + }, + { + "when": { + "age": "4|5" + }, + "apply": { + "model": "growthcraft_cellar:block/grape_vine/grape_vine_stage4" + } + }, + { + "when": { + "age": "6|7" + }, + "apply": { + "model": "growthcraft_cellar:block/grape_vine/grape_vine_stage7" + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/blockstates/grape_vine_crop.json b/src/main/resources/assets/growthcraft_cellar/blockstates/grape_vine_crop.json new file mode 100644 index 0000000..8cfbea2 --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/blockstates/grape_vine_crop.json @@ -0,0 +1,79 @@ +{ + "multipart": [ + { + "when": { + "age": "0|1|2|3" + }, + "apply": { + "model": "growthcraft_cellar:block/grape_vine/grape_vine_crop_stage0" + } + }, + { + "when": { + "age": "4|5|6|7" + }, + "apply": { + "model": "growthcraft_cellar:block/grape_vine/grape_vine_crop_stage4" + } + }, + { + "when": { + "north": "true" + }, + "apply": { + "model": "growthcraft:block/rope_linen_side", + "uvlock": false + } + }, + { + "when": { + "east": "true" + }, + "apply": { + "model": "growthcraft:block/rope_linen_side", + "y": 90, + "uvlock": false + } + }, + { + "when": { + "south": "true" + }, + "apply": { + "model": "growthcraft:block/rope_linen_side", + "y": 180, + "uvlock": false + } + }, + { + "when": { + "west": "true" + }, + "apply": { + "model": "growthcraft:block/rope_linen_side", + "y": 270, + "uvlock": false + } + }, + { + "when": { + "up": "true" + }, + "apply": { + "model": "growthcraft:block/rope_linen_side", + "x": 270, + "uvlock": false + } + }, + { + "when": { + "down": "true" + }, + "apply": { + "model": "growthcraft:block/rope_linen_side", + "x": 90, + "uvlock": false + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/blockstates/grape_vine_leaves.json b/src/main/resources/assets/growthcraft_cellar/blockstates/grape_vine_leaves.json new file mode 100644 index 0000000..5203363 --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/blockstates/grape_vine_leaves.json @@ -0,0 +1,84 @@ +{ + "multipart": [ + { + "apply": { + "model": "growthcraft:block/rope_linen" + } + }, + { + "when": { + "trunk_connected": "true" + }, + "apply": { + "model": "growthcraft_cellar:block/grape_vine/grape_vine_leaves_trunk" + } + }, + { + "when": { + "age": "0|1|2|3|4|5|6|7" + }, + "apply": { + "model": "growthcraft_cellar:block/grape_vine/grape_vine_leaves" + } + }, + { + "when": { + "north": "true" + }, + "apply": { + "model": "growthcraft:block/rope_linen_side", + "uvlock": false + } + }, + { + "when": { + "east": "true" + }, + "apply": { + "model": "growthcraft:block/rope_linen_side", + "y": 90, + "uvlock": false + } + }, + { + "when": { + "south": "true" + }, + "apply": { + "model": "growthcraft:block/rope_linen_side", + "y": 180, + "uvlock": false + } + }, + { + "when": { + "west": "true" + }, + "apply": { + "model": "growthcraft:block/rope_linen_side", + "y": 270, + "uvlock": false + } + }, + { + "when": { + "up": "true" + }, + "apply": { + "model": "growthcraft:block/rope_linen_side", + "x": 270, + "uvlock": false + } + }, + { + "when": { + "down": "true" + }, + "apply": { + "model": "growthcraft:block/rope_linen_side", + "x": 90, + "uvlock": false + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/blockstates/hopped_golden_wort_fluid.json b/src/main/resources/assets/growthcraft_cellar/blockstates/hopped_golden_wort_fluid.json new file mode 100644 index 0000000..31dc5fa --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/blockstates/hopped_golden_wort_fluid.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "growthcraft:block/fluid" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/blockstates/hops_vine.json b/src/main/resources/assets/growthcraft_cellar/blockstates/hops_vine.json new file mode 100644 index 0000000..75453de --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/blockstates/hops_vine.json @@ -0,0 +1,132 @@ +{ + "multipart": [ + { + "apply": { + "model": "growthcraft:block/rope_linen" + } + }, + { + "when": { + "age": 0 + }, + "apply": { + "model": "growthcraft_cellar:block/hops_vine_stage0" + } + }, + { + "when": { + "age": 1 + }, + "apply": { + "model": "growthcraft_cellar:block/hops_vine_stage0" + } + }, + { + "when": { + "age": 2 + }, + "apply": { + "model": "growthcraft_cellar:block/hops_vine_stage2" + } + }, + { + "when": { + "age": 3 + }, + "apply": { + "model": "growthcraft_cellar:block/hops_vine_stage2" + } + }, + { + "when": { + "age": 4 + }, + "apply": { + "model": "growthcraft_cellar:block/hops_vine_stage4" + } + }, + { + "when": { + "age": 5 + }, + "apply": { + "model": "growthcraft_cellar:block/hops_vine_stage4" + } + }, + { + "when": { + "age": 6 + }, + "apply": { + "model": "growthcraft_cellar:block/hops_vine_stage4" + } + }, + { + "when": { + "age": 7 + }, + "apply": { + "model": "growthcraft_cellar:block/hops_vine_stage7" + } + }, + { + "when": { + "north": "true" + }, + "apply": { + "model": "growthcraft:block/rope_linen_side", + "uvlock": false + } + }, + { + "when": { + "east": "true" + }, + "apply": { + "model": "growthcraft:block/rope_linen_side", + "y": 90, + "uvlock": false + } + }, + { + "when": { + "south": "true" + }, + "apply": { + "model": "growthcraft:block/rope_linen_side", + "y": 180, + "uvlock": false + } + }, + { + "when": { + "west": "true" + }, + "apply": { + "model": "growthcraft:block/rope_linen_side", + "y": 270, + "uvlock": false + } + }, + { + "when": { + "up": "true" + }, + "apply": { + "model": "growthcraft:block/rope_linen_side", + "x": 270, + "uvlock": false + } + }, + { + "when": { + "down": "true" + }, + "apply": { + "model": "growthcraft:block/rope_linen_side", + "x": 90, + "uvlock": false + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/blockstates/ipa_ale_fluid.json b/src/main/resources/assets/growthcraft_cellar/blockstates/ipa_ale_fluid.json new file mode 100644 index 0000000..31dc5fa --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/blockstates/ipa_ale_fluid.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "growthcraft:block/fluid" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/blockstates/old_port_ale_fluid.json b/src/main/resources/assets/growthcraft_cellar/blockstates/old_port_ale_fluid.json new file mode 100644 index 0000000..31dc5fa --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/blockstates/old_port_ale_fluid.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "growthcraft:block/fluid" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/blockstates/pale_ale_fluid.json b/src/main/resources/assets/growthcraft_cellar/blockstates/pale_ale_fluid.json new file mode 100644 index 0000000..31dc5fa --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/blockstates/pale_ale_fluid.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "growthcraft:block/fluid" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/blockstates/pale_golden_wort_fluid.json b/src/main/resources/assets/growthcraft_cellar/blockstates/pale_golden_wort_fluid.json new file mode 100644 index 0000000..31dc5fa --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/blockstates/pale_golden_wort_fluid.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "growthcraft:block/fluid" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/blockstates/pale_lager_fluid.json b/src/main/resources/assets/growthcraft_cellar/blockstates/pale_lager_fluid.json new file mode 100644 index 0000000..31dc5fa --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/blockstates/pale_lager_fluid.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "growthcraft:block/fluid" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/blockstates/pilsner_lager_fluid.json b/src/main/resources/assets/growthcraft_cellar/blockstates/pilsner_lager_fluid.json new file mode 100644 index 0000000..31dc5fa --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/blockstates/pilsner_lager_fluid.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "growthcraft:block/fluid" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/blockstates/purple_grape_juice_fluid.json b/src/main/resources/assets/growthcraft_cellar/blockstates/purple_grape_juice_fluid.json new file mode 100644 index 0000000..31dc5fa --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/blockstates/purple_grape_juice_fluid.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "growthcraft:block/fluid" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/blockstates/purple_grape_vine.json b/src/main/resources/assets/growthcraft_cellar/blockstates/purple_grape_vine.json new file mode 100644 index 0000000..6331e84 --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/blockstates/purple_grape_vine.json @@ -0,0 +1,100 @@ +{ + "multipart": [ + { + "apply": { + "model": "growthcraft:block/rope_linen" + } + }, + { + "when": { + "age": "0|1" + }, + "apply": { + "model": "growthcraft_cellar:block/grape_vine/grape_vine_stage0" + } + }, + { + "when": { + "age": "2|3" + }, + "apply": { + "model": "growthcraft_cellar:block/grape_vine/grape_vine_stage2" + } + }, + { + "when": { + "age": "4|5" + }, + "apply": { + "model": "growthcraft_cellar:block/grape_vine/grape_vine_stage4" + } + }, + { + "when": { + "age": "6|7" + }, + "apply": { + "model": "growthcraft_cellar:block/grape_vine/grape_vine_stage7" + } + }, + { + "when": { + "north": "true" + }, + "apply": { + "model": "growthcraft:block/rope_linen_side", + "uvlock": false + } + }, + { + "when": { + "east": "true" + }, + "apply": { + "model": "growthcraft:block/rope_linen_side", + "y": 90, + "uvlock": false + } + }, + { + "when": { + "south": "true" + }, + "apply": { + "model": "growthcraft:block/rope_linen_side", + "y": 180, + "uvlock": false + } + }, + { + "when": { + "west": "true" + }, + "apply": { + "model": "growthcraft:block/rope_linen_side", + "y": 270, + "uvlock": false + } + }, + { + "when": { + "up": "true" + }, + "apply": { + "model": "growthcraft:block/rope_linen_side", + "x": 270, + "uvlock": false + } + }, + { + "when": { + "down": "true" + }, + "apply": { + "model": "growthcraft:block/rope_linen_side", + "x": 90, + "uvlock": false + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/blockstates/purple_grape_vine_crop.json b/src/main/resources/assets/growthcraft_cellar/blockstates/purple_grape_vine_crop.json new file mode 100644 index 0000000..b2c1b14 --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/blockstates/purple_grape_vine_crop.json @@ -0,0 +1,28 @@ +{ + "multipart": [ + { + "when": { + "age": "0|1|2|3" + }, + "apply": { + "model": "growthcraft_cellar:block/grape_vine/purple_grape_vine_crop_stage0" + } + }, + { + "when": { + "age": "4|5|6" + }, + "apply": { + "model": "growthcraft_cellar:block/grape_vine/purple_grape_vine_crop_stage4" + } + }, + { + "when": { + "age": "7" + }, + "apply": { + "model": "growthcraft_cellar:block/grape_vine/purple_grape_vine_crop_stage7" + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/blockstates/purple_grape_vine_leaves.json b/src/main/resources/assets/growthcraft_cellar/blockstates/purple_grape_vine_leaves.json new file mode 100644 index 0000000..ce91e5d --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/blockstates/purple_grape_vine_leaves.json @@ -0,0 +1,75 @@ +{ + "multipart": [ + { + "apply": { + "model": "growthcraft:block/rope_linen" + } + }, + { + "when": { + "age": "0|1|2|3|4|5|6|7" + }, + "apply": { + "model": "growthcraft_cellar:block/grape_vine/grape_vine_leaves" + } + }, + { + "when": { + "north": "true" + }, + "apply": { + "model": "growthcraft:block/rope_linen_side", + "uvlock": false + } + }, + { + "when": { + "east": "true" + }, + "apply": { + "model": "growthcraft:block/rope_linen_side", + "y": 90, + "uvlock": false + } + }, + { + "when": { + "south": "true" + }, + "apply": { + "model": "growthcraft:block/rope_linen_side", + "y": 180, + "uvlock": false + } + }, + { + "when": { + "west": "true" + }, + "apply": { + "model": "growthcraft:block/rope_linen_side", + "y": 270, + "uvlock": false + } + }, + { + "when": { + "up": "true" + }, + "apply": { + "model": "growthcraft:block/rope_linen_side", + "x": 270, + "uvlock": false + } + }, + { + "when": { + "down": "true" + }, + "apply": { + "model": "growthcraft_cellar:block/grape_vine/grape_vine_leaves_trunk", + "uvlock": false + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/blockstates/purple_grape_wine_fluid.json b/src/main/resources/assets/growthcraft_cellar/blockstates/purple_grape_wine_fluid.json new file mode 100644 index 0000000..31dc5fa --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/blockstates/purple_grape_wine_fluid.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "growthcraft:block/fluid" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/blockstates/red_grape_juice_fluid.json b/src/main/resources/assets/growthcraft_cellar/blockstates/red_grape_juice_fluid.json new file mode 100644 index 0000000..31dc5fa --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/blockstates/red_grape_juice_fluid.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "growthcraft:block/fluid" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/blockstates/red_grape_vine.json b/src/main/resources/assets/growthcraft_cellar/blockstates/red_grape_vine.json new file mode 100644 index 0000000..6331e84 --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/blockstates/red_grape_vine.json @@ -0,0 +1,100 @@ +{ + "multipart": [ + { + "apply": { + "model": "growthcraft:block/rope_linen" + } + }, + { + "when": { + "age": "0|1" + }, + "apply": { + "model": "growthcraft_cellar:block/grape_vine/grape_vine_stage0" + } + }, + { + "when": { + "age": "2|3" + }, + "apply": { + "model": "growthcraft_cellar:block/grape_vine/grape_vine_stage2" + } + }, + { + "when": { + "age": "4|5" + }, + "apply": { + "model": "growthcraft_cellar:block/grape_vine/grape_vine_stage4" + } + }, + { + "when": { + "age": "6|7" + }, + "apply": { + "model": "growthcraft_cellar:block/grape_vine/grape_vine_stage7" + } + }, + { + "when": { + "north": "true" + }, + "apply": { + "model": "growthcraft:block/rope_linen_side", + "uvlock": false + } + }, + { + "when": { + "east": "true" + }, + "apply": { + "model": "growthcraft:block/rope_linen_side", + "y": 90, + "uvlock": false + } + }, + { + "when": { + "south": "true" + }, + "apply": { + "model": "growthcraft:block/rope_linen_side", + "y": 180, + "uvlock": false + } + }, + { + "when": { + "west": "true" + }, + "apply": { + "model": "growthcraft:block/rope_linen_side", + "y": 270, + "uvlock": false + } + }, + { + "when": { + "up": "true" + }, + "apply": { + "model": "growthcraft:block/rope_linen_side", + "x": 270, + "uvlock": false + } + }, + { + "when": { + "down": "true" + }, + "apply": { + "model": "growthcraft:block/rope_linen_side", + "x": 90, + "uvlock": false + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/blockstates/red_grape_vine_crop.json b/src/main/resources/assets/growthcraft_cellar/blockstates/red_grape_vine_crop.json new file mode 100644 index 0000000..21eb28b --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/blockstates/red_grape_vine_crop.json @@ -0,0 +1,28 @@ +{ + "multipart": [ + { + "when": { + "age": "0|1|2|3" + }, + "apply": { + "model": "growthcraft_cellar:block/grape_vine/red_grape_vine_crop_stage0" + } + }, + { + "when": { + "age": "4|5|6" + }, + "apply": { + "model": "growthcraft_cellar:block/grape_vine/red_grape_vine_crop_stage4" + } + }, + { + "when": { + "age": "7" + }, + "apply": { + "model": "growthcraft_cellar:block/grape_vine/red_grape_vine_crop_stage7" + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/blockstates/red_grape_vine_leaves.json b/src/main/resources/assets/growthcraft_cellar/blockstates/red_grape_vine_leaves.json new file mode 100644 index 0000000..ce91e5d --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/blockstates/red_grape_vine_leaves.json @@ -0,0 +1,75 @@ +{ + "multipart": [ + { + "apply": { + "model": "growthcraft:block/rope_linen" + } + }, + { + "when": { + "age": "0|1|2|3|4|5|6|7" + }, + "apply": { + "model": "growthcraft_cellar:block/grape_vine/grape_vine_leaves" + } + }, + { + "when": { + "north": "true" + }, + "apply": { + "model": "growthcraft:block/rope_linen_side", + "uvlock": false + } + }, + { + "when": { + "east": "true" + }, + "apply": { + "model": "growthcraft:block/rope_linen_side", + "y": 90, + "uvlock": false + } + }, + { + "when": { + "south": "true" + }, + "apply": { + "model": "growthcraft:block/rope_linen_side", + "y": 180, + "uvlock": false + } + }, + { + "when": { + "west": "true" + }, + "apply": { + "model": "growthcraft:block/rope_linen_side", + "y": 270, + "uvlock": false + } + }, + { + "when": { + "up": "true" + }, + "apply": { + "model": "growthcraft:block/rope_linen_side", + "x": 270, + "uvlock": false + } + }, + { + "when": { + "down": "true" + }, + "apply": { + "model": "growthcraft_cellar:block/grape_vine/grape_vine_leaves_trunk", + "uvlock": false + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/blockstates/red_grape_wine_fluid.json b/src/main/resources/assets/growthcraft_cellar/blockstates/red_grape_wine_fluid.json new file mode 100644 index 0000000..31dc5fa --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/blockstates/red_grape_wine_fluid.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "growthcraft:block/fluid" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/blockstates/roaster.json b/src/main/resources/assets/growthcraft_cellar/blockstates/roaster.json new file mode 100644 index 0000000..9ee0920 --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/blockstates/roaster.json @@ -0,0 +1,245 @@ +{ + "variants": { + "facing=north,lit=false,roasting_level=1": { + "model": "growthcraft_cellar:block/roaster_chimney_level_1" + }, + "facing=south,lit=false,roasting_level=1": { + "model": "growthcraft_cellar:block/roaster_chimney_level_1", + "y": 180 + }, + "facing=east,lit=false,roasting_level=1": { + "model": "growthcraft_cellar:block/roaster_chimney_level_1", + "y": 90 + }, + "facing=west,lit=false,roasting_level=1": { + "model": "growthcraft_cellar:block/roaster_chimney_level_1", + "y": 270 + }, + "facing=north,lit=true,roasting_level=1": { + "model": "growthcraft_cellar:block/roaster_chimney_level_1" + }, + "facing=south,lit=true,roasting_level=1": { + "model": "growthcraft_cellar:block/roaster_chimney_level_1", + "y": 180 + }, + "facing=east,lit=true,roasting_level=1": { + "model": "growthcraft_cellar:block/roaster_chimney_level_1", + "y": 90 + }, + "facing=west,lit=true,roasting_level=1": { + "model": "growthcraft_cellar:block/roaster_chimney_level_1", + "y": 270 + }, + "facing=north,lit=false,roasting_level=2": { + "model": "growthcraft_cellar:block/roaster_chimney_level_2" + }, + "facing=south,lit=false,roasting_level=2": { + "model": "growthcraft_cellar:block/roaster_chimney_level_2", + "y": 180 + }, + "facing=east,lit=false,roasting_level=2": { + "model": "growthcraft_cellar:block/roaster_chimney_level_2", + "y": 90 + }, + "facing=west,lit=false,roasting_level=2": { + "model": "growthcraft_cellar:block/roaster_chimney_level_2", + "y": 270 + }, + "facing=north,lit=true,roasting_level=2": { + "model": "growthcraft_cellar:block/roaster_chimney_level_2" + }, + "facing=south,lit=true,roasting_level=2": { + "model": "growthcraft_cellar:block/roaster_chimney_level_2", + "y": 180 + }, + "facing=east,lit=true,roasting_level=2": { + "model": "growthcraft_cellar:block/roaster_chimney_level_2", + "y": 90 + }, + "facing=west,lit=true,roasting_level=2": { + "model": "growthcraft_cellar:block/roaster_chimney_level_2", + "y": 270 + }, + "facing=north,lit=false,roasting_level=3": { + "model": "growthcraft_cellar:block/roaster_chimney_level_3" + }, + "facing=south,lit=false,roasting_level=3": { + "model": "growthcraft_cellar:block/roaster_chimney_level_3", + "y": 180 + }, + "facing=east,lit=false,roasting_level=3": { + "model": "growthcraft_cellar:block/roaster_chimney_level_3", + "y": 90 + }, + "facing=west,lit=false,roasting_level=3": { + "model": "growthcraft_cellar:block/roaster_chimney_level_3", + "y": 270 + }, + "facing=north,lit=true,roasting_level=3": { + "model": "growthcraft_cellar:block/roaster_chimney_level_3" + }, + "facing=south,lit=true,roasting_level=3": { + "model": "growthcraft_cellar:block/roaster_chimney_level_3", + "y": 180 + }, + "facing=east,lit=true,roasting_level=3": { + "model": "growthcraft_cellar:block/roaster_chimney_level_3", + "y": 90 + }, + "facing=west,lit=true,roasting_level=3": { + "model": "growthcraft_cellar:block/roaster_chimney_level_3", + "y": 270 + }, + "facing=north,lit=false,roasting_level=4": { + "model": "growthcraft_cellar:block/roaster_chimney_level_4" + }, + "facing=south,lit=false,roasting_level=4": { + "model": "growthcraft_cellar:block/roaster_chimney_level_4", + "y": 180 + }, + "facing=east,lit=false,roasting_level=4": { + "model": "growthcraft_cellar:block/roaster_chimney_level_4", + "y": 90 + }, + "facing=west,lit=false,roasting_level=4": { + "model": "growthcraft_cellar:block/roaster_chimney_level_4", + "y": 270 + }, + "facing=north,lit=true,roasting_level=4": { + "model": "growthcraft_cellar:block/roaster_chimney_level_4" + }, + "facing=south,lit=true,roasting_level=4": { + "model": "growthcraft_cellar:block/roaster_chimney_level_4", + "y": 180 + }, + "facing=east,lit=true,roasting_level=4": { + "model": "growthcraft_cellar:block/roaster_chimney_level_4", + "y": 90 + }, + "facing=west,lit=true,roasting_level=4": { + "model": "growthcraft_cellar:block/roaster_chimney_level_4", + "y": 270 + }, + "facing=north,lit=false,roasting_level=5": { + "model": "growthcraft_cellar:block/roaster_chimney_level_5" + }, + "facing=south,lit=false,roasting_level=5": { + "model": "growthcraft_cellar:block/roaster_chimney_level_5", + "y": 180 + }, + "facing=east,lit=false,roasting_level=5": { + "model": "growthcraft_cellar:block/roaster_chimney_level_5", + "y": 90 + }, + "facing=west,lit=false,roasting_level=5": { + "model": "growthcraft_cellar:block/roaster_chimney_level_5", + "y": 270 + }, + "facing=north,lit=true,roasting_level=5": { + "model": "growthcraft_cellar:block/roaster_chimney_level_5" + }, + "facing=south,lit=true,roasting_level=5": { + "model": "growthcraft_cellar:block/roaster_chimney_level_5", + "y": 180 + }, + "facing=east,lit=true,roasting_level=5": { + "model": "growthcraft_cellar:block/roaster_chimney_level_5", + "y": 90 + }, + "facing=west,lit=true,roasting_level=5": { + "model": "growthcraft_cellar:block/roaster_chimney_level_5", + "y": 270 + }, + "facing=north,lit=false,roasting_level=6": { + "model": "growthcraft_cellar:block/roaster_chimney_level_6" + }, + "facing=south,lit=false,roasting_level=6": { + "model": "growthcraft_cellar:block/roaster_chimney_level_6", + "y": 180 + }, + "facing=east,lit=false,roasting_level=6": { + "model": "growthcraft_cellar:block/roaster_chimney_level_6", + "y": 90 + }, + "facing=west,lit=false,roasting_level=6": { + "model": "growthcraft_cellar:block/roaster_chimney_level_6", + "y": 270 + }, + "facing=north,lit=true,roasting_level=6": { + "model": "growthcraft_cellar:block/roaster_chimney_level_6" + }, + "facing=south,lit=true,roasting_level=6": { + "model": "growthcraft_cellar:block/roaster_chimney_level_6", + "y": 180 + }, + "facing=east,lit=true,roasting_level=6": { + "model": "growthcraft_cellar:block/roaster_chimney_level_6", + "y": 90 + }, + "facing=west,lit=true,roasting_level=6": { + "model": "growthcraft_cellar:block/roaster_chimney_level_6", + "y": 270 + }, + "facing=north,lit=false,roasting_level=7": { + "model": "growthcraft_cellar:block/roaster_chimney_level_7" + }, + "facing=south,lit=false,roasting_level=7": { + "model": "growthcraft_cellar:block/roaster_chimney_level_7", + "y": 180 + }, + "facing=east,lit=false,roasting_level=7": { + "model": "growthcraft_cellar:block/roaster_chimney_level_7", + "y": 90 + }, + "facing=west,lit=false,roasting_level=7": { + "model": "growthcraft_cellar:block/roaster_chimney_level_7", + "y": 270 + }, + "facing=north,lit=true,roasting_level=7": { + "model": "growthcraft_cellar:block/roaster_chimney_level_7" + }, + "facing=south,lit=true,roasting_level=7": { + "model": "growthcraft_cellar:block/roaster_chimney_level_7", + "y": 180 + }, + "facing=east,lit=true,roasting_level=7": { + "model": "growthcraft_cellar:block/roaster_chimney_level_7", + "y": 90 + }, + "facing=west,lit=true,roasting_level=7": { + "model": "growthcraft_cellar:block/roaster_chimney_level_7", + "y": 270 + }, + "facing=north,lit=false,roasting_level=8": { + "model": "growthcraft_cellar:block/roaster_chimney_level_8" + }, + "facing=south,lit=false,roasting_level=8": { + "model": "growthcraft_cellar:block/roaster_chimney_level_8", + "y": 180 + }, + "facing=east,lit=false,roasting_level=8": { + "model": "growthcraft_cellar:block/roaster_chimney_level_8", + "y": 90 + }, + "facing=west,lit=false,roasting_level=8": { + "model": "growthcraft_cellar:block/roaster_chimney_level_8", + "y": 270 + }, + "facing=north,lit=true,roasting_level=8": { + "model": "growthcraft_cellar:block/roaster_chimney_level_8" + }, + "facing=south,lit=true,roasting_level=8": { + "model": "growthcraft_cellar:block/roaster_chimney_level_8", + "y": 180 + }, + "facing=east,lit=true,roasting_level=8": { + "model": "growthcraft_cellar:block/roaster_chimney_level_8", + "y": 90 + }, + "facing=west,lit=true,roasting_level=8": { + "model": "growthcraft_cellar:block/roaster_chimney_level_8", + "y": 270 + } + } + +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/blockstates/stout_ale_fluid.json b/src/main/resources/assets/growthcraft_cellar/blockstates/stout_ale_fluid.json new file mode 100644 index 0000000..31dc5fa --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/blockstates/stout_ale_fluid.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "growthcraft:block/fluid" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/blockstates/vienna_lager_fluid.json b/src/main/resources/assets/growthcraft_cellar/blockstates/vienna_lager_fluid.json new file mode 100644 index 0000000..31dc5fa --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/blockstates/vienna_lager_fluid.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "growthcraft:block/fluid" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/blockstates/white_grape_juice_fluid.json b/src/main/resources/assets/growthcraft_cellar/blockstates/white_grape_juice_fluid.json new file mode 100644 index 0000000..31dc5fa --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/blockstates/white_grape_juice_fluid.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "growthcraft:block/fluid" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/blockstates/white_grape_vine.json b/src/main/resources/assets/growthcraft_cellar/blockstates/white_grape_vine.json new file mode 100644 index 0000000..6331e84 --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/blockstates/white_grape_vine.json @@ -0,0 +1,100 @@ +{ + "multipart": [ + { + "apply": { + "model": "growthcraft:block/rope_linen" + } + }, + { + "when": { + "age": "0|1" + }, + "apply": { + "model": "growthcraft_cellar:block/grape_vine/grape_vine_stage0" + } + }, + { + "when": { + "age": "2|3" + }, + "apply": { + "model": "growthcraft_cellar:block/grape_vine/grape_vine_stage2" + } + }, + { + "when": { + "age": "4|5" + }, + "apply": { + "model": "growthcraft_cellar:block/grape_vine/grape_vine_stage4" + } + }, + { + "when": { + "age": "6|7" + }, + "apply": { + "model": "growthcraft_cellar:block/grape_vine/grape_vine_stage7" + } + }, + { + "when": { + "north": "true" + }, + "apply": { + "model": "growthcraft:block/rope_linen_side", + "uvlock": false + } + }, + { + "when": { + "east": "true" + }, + "apply": { + "model": "growthcraft:block/rope_linen_side", + "y": 90, + "uvlock": false + } + }, + { + "when": { + "south": "true" + }, + "apply": { + "model": "growthcraft:block/rope_linen_side", + "y": 180, + "uvlock": false + } + }, + { + "when": { + "west": "true" + }, + "apply": { + "model": "growthcraft:block/rope_linen_side", + "y": 270, + "uvlock": false + } + }, + { + "when": { + "up": "true" + }, + "apply": { + "model": "growthcraft:block/rope_linen_side", + "x": 270, + "uvlock": false + } + }, + { + "when": { + "down": "true" + }, + "apply": { + "model": "growthcraft:block/rope_linen_side", + "x": 90, + "uvlock": false + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/blockstates/white_grape_vine_crop.json b/src/main/resources/assets/growthcraft_cellar/blockstates/white_grape_vine_crop.json new file mode 100644 index 0000000..e53b937 --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/blockstates/white_grape_vine_crop.json @@ -0,0 +1,28 @@ +{ + "multipart": [ + { + "when": { + "age": "0|1|2|3" + }, + "apply": { + "model": "growthcraft_cellar:block/grape_vine/white_grape_vine_crop_stage0" + } + }, + { + "when": { + "age": "4|5|6" + }, + "apply": { + "model": "growthcraft_cellar:block/grape_vine/white_grape_vine_crop_stage4" + } + }, + { + "when": { + "age": "7" + }, + "apply": { + "model": "growthcraft_cellar:block/grape_vine/white_grape_vine_crop_stage7" + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/blockstates/white_grape_vine_leaves.json b/src/main/resources/assets/growthcraft_cellar/blockstates/white_grape_vine_leaves.json new file mode 100644 index 0000000..ce91e5d --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/blockstates/white_grape_vine_leaves.json @@ -0,0 +1,75 @@ +{ + "multipart": [ + { + "apply": { + "model": "growthcraft:block/rope_linen" + } + }, + { + "when": { + "age": "0|1|2|3|4|5|6|7" + }, + "apply": { + "model": "growthcraft_cellar:block/grape_vine/grape_vine_leaves" + } + }, + { + "when": { + "north": "true" + }, + "apply": { + "model": "growthcraft:block/rope_linen_side", + "uvlock": false + } + }, + { + "when": { + "east": "true" + }, + "apply": { + "model": "growthcraft:block/rope_linen_side", + "y": 90, + "uvlock": false + } + }, + { + "when": { + "south": "true" + }, + "apply": { + "model": "growthcraft:block/rope_linen_side", + "y": 180, + "uvlock": false + } + }, + { + "when": { + "west": "true" + }, + "apply": { + "model": "growthcraft:block/rope_linen_side", + "y": 270, + "uvlock": false + } + }, + { + "when": { + "up": "true" + }, + "apply": { + "model": "growthcraft:block/rope_linen_side", + "x": 270, + "uvlock": false + } + }, + { + "when": { + "down": "true" + }, + "apply": { + "model": "growthcraft_cellar:block/grape_vine/grape_vine_leaves_trunk", + "uvlock": false + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/blockstates/white_grape_wine_fluid.json b/src/main/resources/assets/growthcraft_cellar/blockstates/white_grape_wine_fluid.json new file mode 100644 index 0000000..31dc5fa --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/blockstates/white_grape_wine_fluid.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "growthcraft:block/fluid" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/blockstates/wort_fluid.json b/src/main/resources/assets/growthcraft_cellar/blockstates/wort_fluid.json new file mode 100644 index 0000000..31dc5fa --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/blockstates/wort_fluid.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "growthcraft:block/fluid" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/lang/en_us.json b/src/main/resources/assets/growthcraft_cellar/lang/en_us.json new file mode 100644 index 0000000..e1cafad --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/lang/en_us.json @@ -0,0 +1,125 @@ +{ + "block.growthcraft_cellar.brew_kettle": "Brew Kettle", + "block.growthcraft_cellar.culture_jar": "Culture Jar", + "block.growthcraft_cellar.fermentation_barrel_oak": "Fermentation Barrel (Oak)", + "block.growthcraft_cellar.fruit_press": "Fruit Press", + "block.growthcraft_cellar.fruit_press_piston": "Fruit Press", + "block.growthcraft_cellar.grape_vine": "Grape Vine", + "block.growthcraft_cellar.grape_vine_crop": "Grape Vine", + "block.growthcraft_cellar.grape_vine_leaves": "Grape Vine", + "block.growthcraft_cellar.hops_vine": "Hops Vine", + "block.growthcraft_cellar.purple_grape_vine": "Purple Grape Vine", + "block.growthcraft_cellar.purple_grape_vine_crop": "Purple Grape Vine", + "block.growthcraft_cellar.purple_grape_vine_leaves": "Purple Grape Vine", + "block.growthcraft_cellar.red_grape_vine": "Red Grape Vine", + "block.growthcraft_cellar.red_grape_vine_crop": "Red Grape Vine", + "block.growthcraft_cellar.red_grape_vine_leaves": "Red Grape Vine", + "block.growthcraft_cellar.roaster": "Roaster", + "block.growthcraft_cellar.white_grape_vine": "White Grape Vine", + "block.growthcraft_cellar.white_grape_vine_crop": "White Grape Vine", + "block.growthcraft_cellar.white_grape_vine_leaves": "White Grape Vine", + "container.growthcraft_cellar.brew_kettle": "Brew Kettle", + "container.growthcraft_cellar.culture_jar": "Culture Jar", + "container.growthcraft_cellar.fermentation_barrel": "Fermentation Barrel", + "container.growthcraft_cellar.fruit_press": "Fruit Press", + "container.growthcraft_cellar.roaster": "Roaster", + "fluid.growthcraft_cellar.amber_ale_fluid": "Amber Ale", + "fluid.growthcraft_cellar.amber_lager_fluid": "Amber Lager", + "fluid.growthcraft_cellar.amber_wort_fluid": "Amber Wort", + "fluid.growthcraft_cellar.brown_ale_fluid": "Brown Ale", + "fluid.growthcraft_cellar.brown_lager_fluid": "Brown Lager", + "fluid.growthcraft_cellar.brown_wort_fluid": "Brown Wort", + "fluid.growthcraft_cellar.copper_ale_fluid": "Copper Ale", + "fluid.growthcraft_cellar.copper_lager_fluid": "Copper Lager", + "fluid.growthcraft_cellar.copper_wort_fluid": "Copper Wort", + "fluid.growthcraft_cellar.dark_lager_fluid": "Dark Lager", + "fluid.growthcraft_cellar.dark_wort_fluid": "Dark Wort", + "fluid.growthcraft_cellar.deep_amber_wort_fluid": "Deep Amber Wort", + "fluid.growthcraft_cellar.deep_copper_wort_fluid": "Deep Copper Wort", + "fluid.growthcraft_cellar.golden_wort_fluid": "Golden Wort", + "fluid.growthcraft_cellar.hopped_golden_wort_fluid": "Hopped Golden Wort", + "fluid.growthcraft_cellar.ipa_ale_fluid": "IPA Ale", + "fluid.growthcraft_cellar.old_port_ale_fluid": "Old Port Ale", + "fluid.growthcraft_cellar.pale_ale_fluid": "Pale Ale", + "fluid.growthcraft_cellar.pale_golden_wort_fluid": "Pale Golden Wort", + "fluid.growthcraft_cellar.pale_lager_fluid": "Pale Lager", + "fluid.growthcraft_cellar.pilsner_lager_fluid": "Pilsner Lager", + "fluid.growthcraft_cellar.purple_grape_juice_fluid": "Purple Grape Juice", + "fluid.growthcraft_cellar.purple_grape_wine_fluid": "Purple Wine", + "fluid.growthcraft_cellar.red_grape_juice_fluid": "Red Grape Juice", + "fluid.growthcraft_cellar.red_grape_wine_fluid": "Red Wine", + "fluid.growthcraft_cellar.stout_ale_fluid": "Stout Ale", + "fluid.growthcraft_cellar.vienna_lager_fluid": "Vienna Lager", + "fluid.growthcraft_cellar.white_grape_juice_fluid": "White Grape Juice", + "fluid.growthcraft_cellar.white_grape_wine_fluid": "White Wine", + "fluid.growthcraft_cellar.wort_fluid": "Wort", + "item.growthcraft_cellar.amber_ale_fluid_bucket": "Amber Ale Bucket", + "item.growthcraft_cellar.amber_lager_fluid_bucket": "Amber Lager Bucket", + "item.growthcraft_cellar.amber_wort_fluid_bucket": "Amber Wort Bucket", + "item.growthcraft_cellar.brew_kettle_lid": "Brew Kettle Lid", + "item.growthcraft_cellar.brown_ale_fluid_bucket": "Brown Ale Bucket", + "item.growthcraft_cellar.brown_lager_fluid_bucket": "Brown Lager Bucket", + "item.growthcraft_cellar.brown_wort_fluid_bucket": "Brown Wort Bucket", + "item.growthcraft_cellar.copper_ale_fluid_bucket": "Copper Ale Bucket", + "item.growthcraft_cellar.copper_lager_fluid_bucket": "Copper Lager Bucket", + "item.growthcraft_cellar.copper_wort_fluid_bucket": "Copper Wort Bucket", + "item.growthcraft_cellar.dark_lager_fluid_bucket": "Dark Lager Bucket", + "item.growthcraft_cellar.dark_wort_fluid_bucket": "Dark Wort Bucket", + "item.growthcraft_cellar.deep_amber_wort_fluid_bucket": "Deep Amber Wort Bucket", + "item.growthcraft_cellar.deep_copper_wort_fluid_bucket": "Deep Copper Wort Bucket", + "item.growthcraft_cellar.golden_wort_fluid_bucket": "Golden Wort Bucket", + "item.growthcraft_cellar.grain": "Grain", + "item.growthcraft_cellar.grain_amber": "Amber Roasted Grain", + "item.growthcraft_cellar.grain_brown": "Brown Roasted Grain", + "item.growthcraft_cellar.grain_copper": "Copper Roasted Grain", + "item.growthcraft_cellar.grain_dark": "Dark Roasted Grain", + "item.growthcraft_cellar.grain_deep_amber": "Deep Amber Roasted Grain", + "item.growthcraft_cellar.grain_deep_copper": "Deep Copper Roasted Grain", + "item.growthcraft_cellar.grain_golden": "Golden Roasted Grain", + "item.growthcraft_cellar.grain_pale_golden": "Pale Golden Roasted Grain", + "item.growthcraft_cellar.grape_purple": "Purple Grapes", + "item.growthcraft_cellar.grape_red": "Red Grapes", + "item.growthcraft_cellar.grape_seeds_purple": "Purple Grape Seeds", + "item.growthcraft_cellar.grape_seeds_red": "Red Grape Seeds", + "item.growthcraft_cellar.grape_seeds_white": "White Grape Seeds", + "item.growthcraft_cellar.grape_white": "White Grapes", + "item.growthcraft_cellar.hopped_golden_wort_fluid_bucket": "Hopped Golden Wort Bucket", + "item.growthcraft_cellar.hops": "Hops", + "item.growthcraft_cellar.hops_seeds": "Hops Seeds", + "item.growthcraft_cellar.ipa_ale_fluid_bucket": "IPA Ale Bucket", + "item.growthcraft_cellar.kindling": "Kindling", + "item.growthcraft_cellar.old_port_ale_fluid_bucket": "Old Port Ale Bucket", + "item.growthcraft_cellar.pale_ale_fluid_bucket": "Pale Ale Bucket", + "item.growthcraft_cellar.pale_golden_wort_fluid_bucket": "Pale Golden Wort Bucket", + "item.growthcraft_cellar.pale_lager_fluid_bucket": "Pale Lager Bucket", + "item.growthcraft_cellar.pilsner_lager_fluid_bucket": "Pilsner Lager Bucket", + "item.growthcraft_cellar.potion_ale": "Pint of", + "item.growthcraft_cellar.potion_ale.effect.empty": "Pint Glass (Ale)", + "item.growthcraft_cellar.potion_lager": "Pint of", + "item.growthcraft_cellar.potion_lager.effect.empty": "Pint Glass (Lager)", + "item.growthcraft_cellar.potion_wine": "Bottle of", + "item.growthcraft_cellar.potion_wine.effect.empty": "Wine Bottle", + "item.growthcraft_cellar.purple_grape_juice_fluid_bucket": "Purple Grape Juice Bucket", + "item.growthcraft_cellar.purple_grape_wine_fluid_bucket": "Purple Wine Bucket", + "item.growthcraft_cellar.red_grape_juice_fluid_bucket": "Red Grape Juice Bucket", + "item.growthcraft_cellar.red_grape_wine_fluid_bucket": "Red Wine Bucket", + "item.growthcraft_cellar.stout_ale_fluid_bucket": "Stout Ale Bucket", + "item.growthcraft_cellar.vienna_lager_fluid_bucket": "Vienna Lager Bucket", + "item.growthcraft_cellar.white_grape_juice_fluid_bucket": "White Grape Juice Bucket", + "item.growthcraft_cellar.white_grape_wine_fluid_bucket": "White Wine Bucket", + "item.growthcraft_cellar.wort_fluid_bucket": "Wort Bucket", + "item.growthcraft_cellar.yeast_bayanus": "Bayanus Yeast", + "item.growthcraft_cellar.yeast_bayanus_ethereal": "Bayanus Yeast (Ethereal)", + "item.growthcraft_cellar.yeast_brewers": "Brewer's Yeast", + "item.growthcraft_cellar.yeast_brewers_ethereal": "Brewer's Yeast (Ethereal)", + "item.growthcraft_cellar.yeast_ethereal": "Ethereal Yeast", + "item.growthcraft_cellar.yeast_lager": "Lager Yeast", + "item.growthcraft_cellar.yeast_lager_ethereal": "Lager Yeast (Ethereal)", + "growthcraft_cellar.tooltip.roaster.progress": "Roast Level %s (%d%%)", + "growthcraft_cellar.tooltip.fermentation.progress": "Fermenting %s%%", + "jei.growthcraft_cellar.category.culture_jar": "Culture Jar (Culturing)", + "jei.growthcraft_cellar.category.culture_jar_starter": "Culture Jar (Starters)", + "jei.growthcraft_cellar.category.fermentation_barrel": "Fermenting", + "jei.growthcraft_cellar.category.fruit_press": "Pressing", + "jei.growthcraft_cellar.category.roaster": "Roasting" +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/lang/ko_kr.lang b/src/main/resources/assets/growthcraft_cellar/lang/ko_kr.lang new file mode 100644 index 0000000..025ea61 --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/lang/ko_kr.lang @@ -0,0 +1,55 @@ +# Tooltips (Number is a percentage) +# number is a percentage +format.tipsy_chance=%d%% 취할 확률 + +# Other +potion.tipsy=취함 + +# Achievements +achievement.getDrunk=양조하는데 무슨 문제 있어? +achievement.getDrunk.desc=취함 V를 얻으세요. + +# Modifiers +fluids.tag.chilled=차가운 +fluids.tag.cider=사이다 +fluids.tag.cream=크림 +fluids.tag.deadly=치명적인 +fluids.tag.extended=대형 +fluids.tag.fermented=발효된 +fluids.tag.fortified=강화된 +fluids.tag.hopped=홉이 들어간 +fluids.tag.hyper_extended=특-대형 +fluids.tag.intoxicated=도수 높은 +fluids.tag.magical=마법 +fluids.tag.mash=숙성되지 않은 +fluids.tag.poisoned=독 있는 +fluids.tag.potent=강력한 +fluids.tag.sake=청주 +fluids.tag.wine=포도주 +fluids.tag.young=어린 + +# Items +item.achievement_dummy.name=양조하는데 무슨 문제 있어? +item.yeast.brewers.name=맥주 효모 +item.yeast.lager.name=라거 효모 +item.yeast.bayanus.name=베이야누스 효모 +item.yeast.ethereal.name=여린 효모 +item.yeast.origin.name=기초 효모 +item.brew_kettle_lid.name=양조용 솥단지 뚜껑 +item.barrel_tap.name=나무통 꼭지 + +# Gui +container.growthcraft.brewKettle=양조용 솥단지 +container.grc.CultureJar=배양 단지 +container.grc.fermentBarrel=숙성용 나무통 +container.grc.fruitPress=과일 압착기 +gui.grc.discard=버리기 +gui.grc.cantferment=숙성시킬 수 없습니다 +gui.grc.switch=통 위치 바꾸기 + +# Tile Entities +tile.brew_kettle.name=양조용 솥단지 +tile.cork_log.name=Cork Wood +tile.culture_jar.name=배양 단지 +tile.fermentation_barrel.name=숙성용 나무통 +tile.fruit_press.name=과일 압착기 diff --git a/src/main/resources/assets/growthcraft_cellar/lang/ru_ru.json b/src/main/resources/assets/growthcraft_cellar/lang/ru_ru.json new file mode 100644 index 0000000..7a0bced --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/lang/ru_ru.json @@ -0,0 +1,118 @@ +{ + "block.growthcraft_cellar.barrel_ferment_oak": "Бочка для брожения", + "block.growthcraft_cellar.brew_kettle": "Варочный котел", + "block.growthcraft_cellar.culture_jar": "Банка для культурации", + "block.growthcraft_cellar.fruit_press": "Давильный чан", + "block.growthcraft_cellar.fruit_press_piston": "Давильный чан", + "block.growthcraft_cellar.grape_vine": "Виноградная лоза", + "block.growthcraft_cellar.grape_vine_crop": "Виноградная лоза", + "block.growthcraft_cellar.grape_vine_leaves": "Виноградная лоза", + "block.growthcraft_cellar.hops_vine": "Хмелевая лоза", + "block.growthcraft_cellar.purple_grape_vine": "Лоза фиолетового винограда", + "block.growthcraft_cellar.purple_grape_vine_crop": "Лоза фиолетового винограда", + "block.growthcraft_cellar.purple_grape_vine_leaves": "Лоза фиолетового винограда", + "block.growthcraft_cellar.red_grape_vine": "Лоза красного винограда", + "block.growthcraft_cellar.red_grape_vine_crop": "Лоза красного винограда", + "block.growthcraft_cellar.red_grape_vine_leaves": "Лоза красного винограда", + "block.growthcraft_cellar.roaster": "Жаровня", + "block.growthcraft_cellar.white_grape_vine": "Лоза белого винограда", + "block.growthcraft_cellar.white_grape_vine_crop": "Лоза белого винограда", + "block.growthcraft_cellar.white_grape_vine_leaves": "Лоза белого винограда", + "container.growthcraft_cellar.barrel_ferment": "Бочка для брожения", + "container.growthcraft_cellar.brew_kettle": "Варочный котел", + "container.growthcraft_cellar.culture_jar": "Банка для культурации", + "container.growthcraft_cellar.fruit_press": "Давильный чан", + "container.growthcraft_cellar.roaster": "Жаровня", + "fluid_type.growthcraft_cellar.amber_ale_fluid": "Янтарный эль", + "fluid_type.growthcraft_cellar.amber_lager_fluid": "Янтарный лагер", + "fluid_type.growthcraft_cellar.amber_wort_fluid": "Янтарное сусло", + "fluid_type.growthcraft_cellar.brown_ale_fluid": "Коричневый эль", + "fluid_type.growthcraft_cellar.brown_lager_fluid": "Коричневый лагер", + "fluid_type.growthcraft_cellar.brown_wort_fluid": "коричневое сусло", + "fluid_type.growthcraft_cellar.copper_ale_fluid": "Медный эль", + "fluid_type.growthcraft_cellar.copper_lager_fluid": "Медный лагер", + "fluid_type.growthcraft_cellar.copper_wort_fluid": "Медное сусло", + "fluid_type.growthcraft_cellar.dark_lager_fluid": "Темный лагер", + "fluid_type.growthcraft_cellar.dark_wort_fluid": "Темное сусло", + "fluid_type.growthcraft_cellar.deep_amber_wort_fluid": "Темно-янтарное сусло", + "fluid_type.growthcraft_cellar.deep_copper_wort_fluid": "Темно-медное сусло", + "fluid_type.growthcraft_cellar.golden_wort_fluid": "Золотистое сусло", + "fluid_type.growthcraft_cellar.hopped_golden_wort_fluid": "Охмеленное золотистое сусло", + "fluid_type.growthcraft_cellar.ipa_ale_fluid": "Индийский эль", + "fluid_type.growthcraft_cellar.old_port_ale_fluid": "Шотландский эль", + "fluid_type.growthcraft_cellar.pale_ale_fluid": "Пейл-эль", + "fluid_type.growthcraft_cellar.pale_golden_wort_fluid": "Бледно-золотистое сусло", + "fluid_type.growthcraft_cellar.pale_lager_fluid": "Бледный лагер", + "fluid_type.growthcraft_cellar.pilsner_lager_fluid": "Лагер Пильзнер", + "fluid_type.growthcraft_cellar.purple_grape_juice_fluid": "Сок фиолетового винограда", + "fluid_type.growthcraft_cellar.purple_grape_wine_fluid": "Фиолетовое вино", + "fluid_type.growthcraft_cellar.red_grape_juice_fluid": "Сок красного винограда", + "fluid_type.growthcraft_cellar.red_grape_wine_fluid": "Красное вино", + "fluid_type.growthcraft_cellar.stout_ale_fluid": "Стаут эль", + "fluid_type.growthcraft_cellar.vienna_lager_fluid": "Венский лагер", + "fluid_type.growthcraft_cellar.white_grape_juice_fluid": "Сок белого винограда", + "fluid_type.growthcraft_cellar.white_grape_wine_fluid": "Белое вино", + "fluid_type.growthcraft_cellar.wort_fluid": "Сусло", + "item.growthcraft_cellar.amber_ale_fluid_bucket": "Ведро янтарного эля", + "item.growthcraft_cellar.amber_lager_fluid_bucket": "Ведро янтарного лагера", + "item.growthcraft_cellar.amber_wort_fluid_bucket": "Ведро янтарного сусла", + "item.growthcraft_cellar.brew_kettle_lid": "Крышка варочного котла", + "item.growthcraft_cellar.brown_ale_fluid_bucket": "Ведро коричневого эля", + "item.growthcraft_cellar.brown_lager_fluid_bucket": "Ведро коричневого лагера", + "item.growthcraft_cellar.brown_wort_fluid_bucket": "Ведро коричневого сусла", + "item.growthcraft_cellar.copper_ale_fluid_bucket": "Ведро медного эля", + "item.growthcraft_cellar.copper_lager_fluid_bucket": "Ведро медного лагера", + "item.growthcraft_cellar.copper_wort_fluid_bucket": "Ведро медного сусла", + "item.growthcraft_cellar.dark_lager_fluid_bucket": "Ведро темного лагера", + "item.growthcraft_cellar.dark_wort_fluid_bucket": "Ведро темного сусла", + "item.growthcraft_cellar.deep_amber_wort_fluid_bucket": "Ведро темно-янтарного сусла", + "item.growthcraft_cellar.deep_copper_wort_fluid_bucket": "Ведро темно-медного сусла", + "item.growthcraft_cellar.golden_wort_fluid_bucket": "Ведро золотистого сусла", + "item.growthcraft_cellar.grain": "Зерно", + "item.growthcraft_cellar.grain_amber": "Янтарное жареное зерно", + "item.growthcraft_cellar.grain_brown": "Коричневое жареное зерно", + "item.growthcraft_cellar.grain_copper": "Медное жареное зерно", + "item.growthcraft_cellar.grain_dark": "Темное жареное зерно", + "item.growthcraft_cellar.grain_deep_amber": "Темно-янтарное жареное зерно", + "item.growthcraft_cellar.grain_deep_copper": "Темно-медное жареное зерно", + "item.growthcraft_cellar.grain_golden": "Золотистое жареное зерно", + "item.growthcraft_cellar.grain_pale_golden": "Бледно-золотистое жареное зерно", + "item.growthcraft_cellar.grape_purple": "Фиолетовый виноград", + "item.growthcraft_cellar.grape_red": "Красный виноград", + "item.growthcraft_cellar.grape_seeds_purple": "Семена фиолетового виноградла", + "item.growthcraft_cellar.grape_seeds_red": "Семена красного винограда", + "item.growthcraft_cellar.grape_seeds_white": "Семена белого винограда", + "item.growthcraft_cellar.grape_white": "Белый виноград", + "item.growthcraft_cellar.hopped_golden_wort_fluid_bucket": "Ведро охмеленного золотистого сусла", + "item.growthcraft_cellar.hops": "Хмель", + "item.growthcraft_cellar.hops_seeds": "Семена хмеля", + "item.growthcraft_cellar.ipa_ale_fluid_bucket": "Ведро индийского эля", + "item.growthcraft_cellar.kindling": "Растопка", + "item.growthcraft_cellar.old_port_ale_fluid_bucket": "Ведро шотландского эля", + "item.growthcraft_cellar.pale_ale_fluid_bucket": "Ведро пейл-эля", + "item.growthcraft_cellar.pale_golden_wort_fluid_bucket": "Ведро бледно-золотистого сусла", + "item.growthcraft_cellar.pale_lager_fluid_bucket": "Ведро вредного лагеря", + "item.growthcraft_cellar.pilsner_lager_fluid_bucket": "Ведро лагера Пильзнер", + "item.growthcraft_cellar.potion_ale": "Пинта", + "item.growthcraft_cellar.potion_ale.effect.empty": "Пинта эля", + "item.growthcraft_cellar.potion_lager": "Пинта", + "item.growthcraft_cellar.potion_lager.effect.empty": "Пинта лагера", + "item.growthcraft_cellar.potion_wine": "Бутылка", + "item.growthcraft_cellar.potion_wine.effect.empty": "Бутылка вина", + "item.growthcraft_cellar.purple_grape_juice_fluid_bucket": "Ведро сока фиолетового винограда", + "item.growthcraft_cellar.purple_grape_wine_fluid_bucket": "Ведро фиолетового вина", + "item.growthcraft_cellar.red_grape_juice_fluid_bucket": "Ведро сока красного винограда", + "item.growthcraft_cellar.red_grape_wine_fluid_bucket": "Ведро красного вина", + "item.growthcraft_cellar.stout_ale_fluid_bucket": "Ведро стаут эля", + "item.growthcraft_cellar.vienna_lager_fluid_bucket": "Ведро венского лагера", + "item.growthcraft_cellar.white_grape_juice_fluid_bucket": "Ведро сока белого винограда", + "item.growthcraft_cellar.white_grape_wine_fluid_bucket": "Ведро белого вина", + "item.growthcraft_cellar.wort_fluid_bucket": "Ведро сусла", + "item.growthcraft_cellar.yeast_bayanus": "Винные дрожжи", + "item.growthcraft_cellar.yeast_bayanus_ethereal": "Эфирные винные дрожжи", + "item.growthcraft_cellar.yeast_brewers": "Пивные дрожжи", + "item.growthcraft_cellar.yeast_brewers_ethereal": "Эфирные пивные дрожжи", + "item.growthcraft_cellar.yeast_ethereal": "Эфирные дрожжи", + "item.growthcraft_cellar.yeast_lager": "Лагерные дрожжи", + "item.growthcraft_cellar.yeast_lager_ethereal": "Эфирные лагерные дрожжи" +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/lang/tr_tr.lang b/src/main/resources/assets/growthcraft_cellar/lang/tr_tr.lang new file mode 100644 index 0000000..46d8d13 --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/lang/tr_tr.lang @@ -0,0 +1,56 @@ +# Tooltips (Number is a percentage) +# number is a percentage +format.tipsy_chance=%d%% Şansla İçkili + +# Other +potion.tipsy=İçkili + +# Achievements +achievement.getDrunk=Sorun mu biracılık? +achievement.getDrunk.desc=İçkili V etkisini elde et. + +# Modifiers +fluids.tag.chilled=Dinlendirilmiş +fluids.tag.cider=Şıra +fluids.tag.cream=Krema +fluids.tag.deadly=Ölümcül +fluids.tag.extended=Uzatılmış +fluids.tag.fermented=Fermente Edilmiş +fluids.tag.fortified=Güçlendirilmiş +fluids.tag.hopped=Şerbetçiotu Katılmış +fluids.tag.hyper_extended=Hiper-Uzatılmış +fluids.tag.intoxicated=Alkollü +fluids.tag.kumis=Kımız +fluids.tag.magical=Sihirli +fluids.tag.mash=Püre +fluids.tag.poisoned=Zehirli +fluids.tag.potent=Güçlü +fluids.tag.sake=Sake +fluids.tag.wine=Şarap +fluids.tag.young=Yeni + +# Items +item.achievement_dummy.name=Sorun mu biracılık? +item.yeast.brewers.name=Biracı'nın Mayası +item.yeast.lager.name=Alman Bira Mayası +item.yeast.bayanus.name=Bayanus Mayası +item.yeast.ethereal.name=Ruhani Maya +item.yeast.origin.name=Asıl Maya +item.brew_kettle_lid.name=Biracı İbrik Kapağı +item.barrel_tap.name=Fıçı Musluğu + +# Gui +container.growthcraft.brewKettle=Bira İbriği +container.grc.CultureJar=Maya Kavanozu +container.grc.fermentBarrel=Fermentasyon Fıçısı +container.grc.fruitPress=Meyve Presi +gui.grc.discard=Vazgeç +gui.grc.cantferment=Fermente Edilemez +gui.grc.switch=Tankları Değiştir + +# Tile Entities +tile.brew_kettle.name=Bira İbriği +tile.cork_log.name=Cork Wood +tile.culture_jar.name=Kültür Kavanozu +tile.fermentation_barrel.name=Fermentasyon Fıçısı +tile.fruit_press.name=Meyve Presi diff --git a/src/main/resources/assets/growthcraft_cellar/lang/zh_cn.lang b/src/main/resources/assets/growthcraft_cellar/lang/zh_cn.lang new file mode 100644 index 0000000..098cede --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/lang/zh_cn.lang @@ -0,0 +1,47 @@ +# Tooltips (Number is a percentage) +# number is a percentage +format.tipsy_chance=有%d%%概率醉酒 + +# Other +potion.tipsy=微醺 + +# Achievements +achievement.getDrunk=难以酿造? +achievement.getDrunk.desc=获得:微醺 V + +# Modifiers +fluids.tag.chilled=啤酒 +fluids.tag.cider=苹果酒 +fluids.tag.deadly=致命 +fluids.tag.extended=后劲 +fluids.tag.fermented=发酵 +fluids.tag.fortified=精馏 +fluids.tag.hopped=啤酒花 +fluids.tag.hyper_extended=大后劲 +fluids.tag.intoxicated=沉醉 +fluids.tag.magical=蕴魔 +fluids.tag.poisoned=毒酒 +fluids.tag.potent=高度 +fluids.tag.wine=葡萄酒 +fluids.tag.young=低度 + +# Items +#item.achievement_dummy.name=难以酿造? +item.yeast.brewers.name=酿酒酵母 +item.yeast.lager.name=窖藏啤酒酵母 +item.yeast.bayanus.name=贝酵母 +item.yeast.ethereal.name=乙醇酵母 +item.yeast.origin.name=原酵母 + + +# Gui +container.brew_kettle=酿造锅 +container.grc.fermentBarrel=发酵桶 +container.grc.fruitPress=榨汁机 + +# Tile Entities +tile.brew_kettle.name=酿造锅 +tile.cork_log.name=Cork Wood +tile.culture_jar.name=发酵罐 +tile.fermentation_barrel.name=发酵桶 +tile.fruit_press.name=榨汁机 diff --git a/src/main/resources/assets/growthcraft_cellar/models/block/amber_ale.json b/src/main/resources/assets/growthcraft_cellar/models/block/amber_ale.json new file mode 100644 index 0000000..11cc634 --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/block/amber_ale.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "growthcraft_cellar:block/fluid/fluid_overlay" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/block/amber_lager.json b/src/main/resources/assets/growthcraft_cellar/models/block/amber_lager.json new file mode 100644 index 0000000..11cc634 --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/block/amber_lager.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "growthcraft_cellar:block/fluid/fluid_overlay" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/block/brew_kettle.json b/src/main/resources/assets/growthcraft_cellar/models/block/brew_kettle.json new file mode 100644 index 0000000..a063b42 --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/block/brew_kettle.json @@ -0,0 +1,860 @@ +{ + "credit": "Made with Blockbench, a free, modern block model editor by JannisX11. Model by Kisutora.", + "ambientocclusion": false, + "textures": { + "0": "growthcraft_cellar:block/brew_kettle/brew_kettle_top", + "1": "growthcraft_cellar:block/brew_kettle/brew_kettle_base", + "2": "growthcraft_cellar:block/brew_kettle/brew_kettle_feet", + "3": "growthcraft_cellar:block/brew_kettle/brew_kettle_side", + "particle": "growthcraft_cellar:block/brew_kettle/brew_kettle_base" + }, + "elements": [ + { + "name": "kettle_bottom", + "from": [ + 1, + 3, + 1 + ], + "to": [ + 15, + 4, + 15 + ], + "faces": { + "up": { + "uv": [ + 1, + 1, + 15, + 15 + ], + "texture": "#1", + "cullface": "up" + }, + "down": { + "uv": [ + 1, + 1, + 15, + 15 + ], + "texture": "#1" + } + }, + "type": "cube" + }, + { + "name": "kettle_side_n", + "from": [ + 1, + 3, + 0 + ], + "to": [ + 15, + 16, + 1 + ], + "faces": { + "north": { + "uv": [ + 1, + 0, + 15, + 13 + ], + "texture": "#3", + "cullface": "north" + }, + "south": { + "uv": [ + 1, + 0, + 15, + 13 + ], + "texture": "#3" + }, + "up": { + "uv": [ + 1, + 0, + 15, + 1 + ], + "texture": "#0", + "cullface": "up" + }, + "down": { + "uv": [ + 1, + 15, + 15, + 16 + ], + "texture": "#1" + } + }, + "type": "cube" + }, + { + "name": "kettle_side_e", + "from": [ + 15, + 3, + 0 + ], + "to": [ + 16, + 16, + 16 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 1, + 13 + ], + "texture": "#3", + "cullface": "north" + }, + "east": { + "uv": [ + 0, + 0, + 16, + 13 + ], + "texture": "#3", + "cullface": "east" + }, + "south": { + "uv": [ + 15, + 0, + 16, + 13 + ], + "texture": "#3", + "cullface": "south" + }, + "west": { + "uv": [ + 0, + 0, + 16, + 13 + ], + "texture": "#3" + }, + "up": { + "uv": [ + 15, + 0, + 16, + 16 + ], + "texture": "#0", + "cullface": "up" + }, + "down": { + "uv": [ + 15, + 0, + 16, + 16 + ], + "texture": "#1" + } + }, + "type": "cube" + }, + { + "name": "kettle_side_s", + "from": [ + 1, + 3, + 15 + ], + "to": [ + 15, + 16, + 16 + ], + "faces": { + "north": { + "uv": [ + 1, + 0, + 15, + 13 + ], + "texture": "#3" + }, + "south": { + "uv": [ + 1, + 0, + 15, + 13 + ], + "texture": "#3", + "cullface": "south" + }, + "up": { + "uv": [ + 1, + 15, + 15, + 16 + ], + "texture": "#0", + "cullface": "up" + }, + "down": { + "uv": [ + 1, + 0, + 15, + 1 + ], + "texture": "#1" + } + }, + "type": "cube" + }, + { + "name": "kettle_side_w", + "from": [ + 0, + 3, + 0 + ], + "to": [ + 1, + 16, + 16 + ], + "faces": { + "north": { + "uv": [ + 15, + 0, + 16, + 13 + ], + "texture": "#3", + "cullface": "north" + }, + "east": { + "uv": [ + 0, + 0, + 16, + 13 + ], + "texture": "#3" + }, + "south": { + "uv": [ + 0, + 0, + 1, + 13 + ], + "texture": "#3", + "cullface": "south" + }, + "west": { + "uv": [ + 0, + 0, + 16, + 13 + ], + "texture": "#3", + "cullface": "west" + }, + "up": { + "uv": [ + 0, + 0, + 1, + 16 + ], + "texture": "#0", + "cullface": "up" + }, + "down": { + "uv": [ + 0, + 0, + 1, + 16 + ], + "texture": "#1" + } + }, + "type": "cube" + }, + { + "name": "kettle_leg_r_n", + "from": [ + 0, + 0, + 0 + ], + "to": [ + 4, + 3, + 2 + ], + "faces": { + "north": { + "uv": [ + 12, + 13, + 16, + 16 + ], + "texture": "#3" + }, + "east": { + "uv": [ + 14, + 13, + 16, + 16 + ], + "texture": "#3" + }, + "south": { + "uv": [ + 0, + 13, + 4, + 16 + ], + "texture": "#3" + }, + "west": { + "uv": [ + 0, + 13, + 2, + 16 + ], + "texture": "#3" + }, + "down": { + "uv": [ + 0, + 14, + 4, + 16 + ], + "texture": "#2" + } + }, + "type": "cube" + }, + { + "name": "kettle_leg_l_n", + "from": [ + 12, + 0, + 0 + ], + "to": [ + 16, + 3, + 2 + ], + "faces": { + "north": { + "uv": [ + 0, + 13, + 4, + 16 + ], + "texture": "#3" + }, + "east": { + "uv": [ + 14, + 13, + 16, + 16 + ], + "texture": "#3" + }, + "south": { + "uv": [ + 12, + 13, + 16, + 16 + ], + "texture": "#3" + }, + "west": { + "uv": [ + 0, + 13, + 2, + 16 + ], + "texture": "#3" + }, + "down": { + "uv": [ + 12, + 14, + 16, + 16 + ], + "texture": "#2" + } + }, + "type": "cube" + }, + { + "name": "kettle_leg_r_s", + "from": [ + 12, + 0, + 14 + ], + "to": [ + 16, + 3, + 16 + ], + "faces": { + "north": { + "uv": [ + 0, + 13, + 4, + 16 + ], + "texture": "#3" + }, + "east": { + "uv": [ + 0, + 13, + 2, + 16 + ], + "texture": "#3" + }, + "south": { + "uv": [ + 12, + 13, + 16, + 16 + ], + "texture": "#3" + }, + "west": { + "uv": [ + 14, + 13, + 16, + 16 + ], + "texture": "#3" + }, + "down": { + "uv": [ + 12, + 0, + 16, + 2 + ], + "texture": "#2" + } + }, + "type": "cube" + }, + { + "name": "kettle_leg_l_s", + "from": [ + 0, + 0, + 14 + ], + "to": [ + 4, + 3, + 16 + ], + "faces": { + "north": { + "uv": [ + 12, + 13, + 16, + 16 + ], + "texture": "#3" + }, + "east": { + "uv": [ + 0, + 13, + 2, + 16 + ], + "texture": "#3" + }, + "south": { + "uv": [ + 0, + 13, + 4, + 16 + ], + "texture": "#3" + }, + "west": { + "uv": [ + 14, + 13, + 16, + 16 + ], + "texture": "#3" + }, + "down": { + "uv": [ + 0, + 0, + 4, + 2 + ], + "texture": "#2" + } + }, + "type": "cube" + }, + { + "name": "kettle_leg_r_e", + "from": [ + 14, + 0, + 2 + ], + "to": [ + 16, + 3, + 4 + ], + "faces": { + "east": { + "uv": [ + 12, + 13, + 14, + 16 + ], + "texture": "#3" + }, + "south": { + "uv": [ + 14, + 13, + 16, + 16 + ], + "texture": "#3" + }, + "west": { + "uv": [ + 2, + 13, + 4, + 16 + ], + "texture": "#3" + }, + "down": { + "uv": [ + 14, + 12, + 16, + 14 + ], + "texture": "#2" + } + }, + "type": "cube" + }, + { + "name": "kettle_leg_l_e", + "from": [ + 14, + 0, + 12 + ], + "to": [ + 16, + 3, + 14 + ], + "faces": { + "north": { + "uv": [ + 0, + 13, + 2, + 16 + ], + "texture": "#3" + }, + "east": { + "uv": [ + 2, + 13, + 4, + 16 + ], + "texture": "#3" + }, + "west": { + "uv": [ + 12, + 13, + 14, + 16 + ], + "texture": "#3" + }, + "down": { + "uv": [ + 14, + 2, + 16, + 4 + ], + "texture": "#2" + } + }, + "type": "cube" + }, + { + "name": "kettle_leg_r_w", + "from": [ + 0, + 0, + 12 + ], + "to": [ + 2, + 3, + 14 + ], + "faces": { + "north": { + "uv": [ + 14, + 13, + 16, + 16 + ], + "texture": "#3" + }, + "east": { + "uv": [ + 2, + 13, + 4, + 16 + ], + "texture": "#3" + }, + "west": { + "uv": [ + 12, + 13, + 14, + 16 + ], + "texture": "#3" + }, + "down": { + "uv": [ + 0, + 2, + 2, + 4 + ], + "texture": "#2" + } + }, + "type": "cube" + }, + { + "name": "kettle_leg_l_w", + "from": [ + 0, + 0, + 2 + ], + "to": [ + 2, + 3, + 4 + ], + "faces": { + "east": { + "uv": [ + 12, + 13, + 14, + 16 + ], + "texture": "#3" + }, + "south": { + "uv": [ + 0, + 13, + 2, + 16 + ], + "texture": "#3" + }, + "west": { + "uv": [ + 2, + 13, + 4, + 16 + ], + "texture": "#3" + }, + "down": { + "uv": [ + 0, + 12, + 2, + 14 + ], + "texture": "#2" + } + }, + "type": "cube" + } + ], + "display": { + "gui": { + "rotation": [ + 30, + 225, + 0 + ], + "translation": [ + 0, + 0, + 0 + ], + "scale": [ + 0.625, + 0.625, + 0.625 + ] + }, + "ground": { + "rotation": [ + 0, + 0, + 0 + ], + "translation": [ + 0, + 3, + 0 + ], + "scale": [ + 0.25, + 0.25, + 0.25 + ] + }, + "fixed": { + "rotation": [ + 0, + 0, + 0 + ], + "translation": [ + 0, + 0, + 0 + ], + "scale": [ + 0.5, + 0.5, + 0.5 + ] + }, + "thirdperson_righthand": { + "rotation": [ + 75, + 45, + 0 + ], + "translation": [ + 0, + 2.5, + 0 + ], + "scale": [ + 0.375, + 0.375, + 0.375 + ] + }, + "firstperson_righthand": { + "rotation": [ + 0, + 45, + 0 + ], + "translation": [ + 0, + 0, + 0 + ], + "scale": [ + 0.4, + 0.4, + 0.4 + ] + }, + "firstperson_lefthand": { + "rotation": [ + 0, + 225, + 0 + ], + "translation": [ + 0, + 0, + 0 + ], + "scale": [ + 0.4, + 0.4, + 0.4 + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/block/brew_kettle_lid.json b/src/main/resources/assets/growthcraft_cellar/models/block/brew_kettle_lid.json new file mode 100644 index 0000000..4ccff37 --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/block/brew_kettle_lid.json @@ -0,0 +1,906 @@ +{ + "credit": "Made with Blockbench, a free, modern block model editor by JannisX11. Model by Kisutora.", + "ambientocclusion": false, + "textures": { + "0": "growthcraft_cellar:block/brew_kettle/brew_kettle_top", + "1": "growthcraft_cellar:block/brew_kettle/brew_kettle_base", + "2": "growthcraft_cellar:block/brew_kettle/brew_kettle_feet", + "3": "growthcraft_cellar:block/brew_kettle/brew_kettle_side", + "4": "growthcraft_cellar:block/brew_kettle/brew_kettle_lid", + "particle": "growthcraft_cellar:block/brew_kettle/brew_kettle_base" + }, + "elements": [ + { + "name": "kettle_lid", + "from": [ + 1, + 14, + 1 + ], + "to": [ + 15, + 15, + 15 + ], + "faces": { + "up": { + "uv": [ + 1, + 1, + 15, + 15 + ], + "texture": "#4" + } + } + }, + { + "name": "kettle_bottom", + "from": [ + 1, + 3, + 1 + ], + "to": [ + 15, + 4, + 15 + ], + "faces": { + "up": { + "uv": [ + 1, + 1, + 15, + 15 + ], + "texture": "#1", + "cullface": "up" + }, + "down": { + "uv": [ + 1, + 1, + 15, + 15 + ], + "texture": "#1" + } + }, + "type": "cube" + }, + { + "name": "kettle_side_n", + "from": [ + 1, + 3, + 0 + ], + "to": [ + 15, + 16, + 1 + ], + "faces": { + "north": { + "uv": [ + 1, + 0, + 15, + 13 + ], + "texture": "#3", + "cullface": "north" + }, + "south": { + "uv": [ + 1, + 0, + 15, + 13 + ], + "texture": "#3" + }, + "up": { + "uv": [ + 1, + 0, + 15, + 1 + ], + "texture": "#0", + "cullface": "up" + }, + "down": { + "uv": [ + 1, + 15, + 15, + 16 + ], + "texture": "#1" + } + }, + "type": "cube" + }, + { + "name": "kettle_side_e", + "from": [ + 15, + 3, + 0 + ], + "to": [ + 16, + 16, + 16 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 1, + 13 + ], + "texture": "#3", + "cullface": "north" + }, + "east": { + "uv": [ + 0, + 0, + 16, + 13 + ], + "texture": "#3", + "cullface": "east" + }, + "south": { + "uv": [ + 15, + 0, + 16, + 13 + ], + "texture": "#3", + "cullface": "south" + }, + "west": { + "uv": [ + 0, + 0, + 16, + 13 + ], + "texture": "#3" + }, + "up": { + "uv": [ + 15, + 0, + 16, + 16 + ], + "texture": "#0", + "cullface": "up" + }, + "down": { + "uv": [ + 15, + 0, + 16, + 16 + ], + "texture": "#1" + } + }, + "type": "cube" + }, + { + "name": "kettle_side_s", + "from": [ + 1, + 3, + 15 + ], + "to": [ + 15, + 16, + 16 + ], + "faces": { + "north": { + "uv": [ + 1, + 0, + 15, + 13 + ], + "texture": "#3" + }, + "south": { + "uv": [ + 1, + 0, + 15, + 13 + ], + "texture": "#3", + "cullface": "south" + }, + "up": { + "uv": [ + 1, + 15, + 15, + 16 + ], + "texture": "#0", + "cullface": "up" + }, + "down": { + "uv": [ + 1, + 0, + 15, + 1 + ], + "texture": "#1" + } + }, + "type": "cube" + }, + { + "name": "kettle_side_w", + "from": [ + 0, + 3, + 0 + ], + "to": [ + 1, + 16, + 16 + ], + "faces": { + "north": { + "uv": [ + 15, + 0, + 16, + 13 + ], + "texture": "#3", + "cullface": "north" + }, + "east": { + "uv": [ + 0, + 0, + 16, + 13 + ], + "texture": "#3" + }, + "south": { + "uv": [ + 0, + 0, + 1, + 13 + ], + "texture": "#3", + "cullface": "south" + }, + "west": { + "uv": [ + 0, + 0, + 16, + 13 + ], + "texture": "#3", + "cullface": "west" + }, + "up": { + "uv": [ + 0, + 0, + 1, + 16 + ], + "texture": "#0", + "cullface": "up" + }, + "down": { + "uv": [ + 0, + 0, + 1, + 16 + ], + "texture": "#1" + } + }, + "type": "cube" + }, + { + "name": "kettle_leg_r_n", + "from": [ + 0, + 0, + 0 + ], + "to": [ + 4, + 3, + 2 + ], + "faces": { + "north": { + "uv": [ + 12, + 13, + 16, + 16 + ], + "texture": "#3" + }, + "east": { + "uv": [ + 14, + 13, + 16, + 16 + ], + "texture": "#3" + }, + "south": { + "uv": [ + 0, + 13, + 4, + 16 + ], + "texture": "#3" + }, + "west": { + "uv": [ + 0, + 13, + 2, + 16 + ], + "texture": "#3" + }, + "down": { + "uv": [ + 0, + 14, + 4, + 16 + ], + "texture": "#2" + } + }, + "type": "cube" + }, + { + "name": "kettle_leg_l_n", + "from": [ + 12, + 0, + 0 + ], + "to": [ + 16, + 3, + 2 + ], + "faces": { + "north": { + "uv": [ + 0, + 13, + 4, + 16 + ], + "texture": "#3" + }, + "east": { + "uv": [ + 14, + 13, + 16, + 16 + ], + "texture": "#3" + }, + "south": { + "uv": [ + 12, + 13, + 16, + 16 + ], + "texture": "#3" + }, + "west": { + "uv": [ + 0, + 13, + 2, + 16 + ], + "texture": "#3" + }, + "down": { + "uv": [ + 12, + 14, + 16, + 16 + ], + "texture": "#2" + } + }, + "type": "cube" + }, + { + "name": "kettle_leg_r_s", + "from": [ + 12, + 0, + 14 + ], + "to": [ + 16, + 3, + 16 + ], + "faces": { + "north": { + "uv": [ + 0, + 13, + 4, + 16 + ], + "texture": "#3" + }, + "east": { + "uv": [ + 0, + 13, + 2, + 16 + ], + "texture": "#3" + }, + "south": { + "uv": [ + 12, + 13, + 16, + 16 + ], + "texture": "#3" + }, + "west": { + "uv": [ + 14, + 13, + 16, + 16 + ], + "texture": "#3" + }, + "down": { + "uv": [ + 12, + 0, + 16, + 2 + ], + "texture": "#2" + } + }, + "type": "cube" + }, + { + "name": "kettle_leg_l_s", + "from": [ + 0, + 0, + 14 + ], + "to": [ + 4, + 3, + 16 + ], + "faces": { + "north": { + "uv": [ + 12, + 13, + 16, + 16 + ], + "texture": "#3" + }, + "east": { + "uv": [ + 0, + 13, + 2, + 16 + ], + "texture": "#3" + }, + "south": { + "uv": [ + 0, + 13, + 4, + 16 + ], + "texture": "#3" + }, + "west": { + "uv": [ + 14, + 13, + 16, + 16 + ], + "texture": "#3" + }, + "down": { + "uv": [ + 0, + 0, + 4, + 2 + ], + "texture": "#2" + } + }, + "type": "cube" + }, + { + "name": "kettle_leg_r_e", + "from": [ + 14, + 0, + 2 + ], + "to": [ + 16, + 3, + 4 + ], + "faces": { + "east": { + "uv": [ + 12, + 13, + 14, + 16 + ], + "texture": "#3" + }, + "south": { + "uv": [ + 14, + 13, + 16, + 16 + ], + "texture": "#3" + }, + "west": { + "uv": [ + 2, + 13, + 4, + 16 + ], + "texture": "#3" + }, + "down": { + "uv": [ + 14, + 12, + 16, + 14 + ], + "texture": "#2" + } + }, + "type": "cube" + }, + { + "name": "kettle_leg_l_e", + "from": [ + 14, + 0, + 12 + ], + "to": [ + 16, + 3, + 14 + ], + "faces": { + "north": { + "uv": [ + 0, + 13, + 2, + 16 + ], + "texture": "#3" + }, + "east": { + "uv": [ + 2, + 13, + 4, + 16 + ], + "texture": "#3" + }, + "west": { + "uv": [ + 12, + 13, + 14, + 16 + ], + "texture": "#3" + }, + "down": { + "uv": [ + 14, + 2, + 16, + 4 + ], + "texture": "#2" + } + }, + "type": "cube" + }, + { + "name": "kettle_leg_r_w", + "from": [ + 0, + 0, + 12 + ], + "to": [ + 2, + 3, + 14 + ], + "faces": { + "north": { + "uv": [ + 14, + 13, + 16, + 16 + ], + "texture": "#3" + }, + "east": { + "uv": [ + 2, + 13, + 4, + 16 + ], + "texture": "#3" + }, + "west": { + "uv": [ + 12, + 13, + 14, + 16 + ], + "texture": "#3" + }, + "down": { + "uv": [ + 0, + 2, + 2, + 4 + ], + "texture": "#2" + } + }, + "type": "cube" + }, + { + "name": "kettle_leg_l_w", + "from": [ + 0, + 0, + 2 + ], + "to": [ + 2, + 3, + 4 + ], + "faces": { + "east": { + "uv": [ + 12, + 13, + 14, + 16 + ], + "texture": "#3" + }, + "south": { + "uv": [ + 0, + 13, + 2, + 16 + ], + "texture": "#3" + }, + "west": { + "uv": [ + 2, + 13, + 4, + 16 + ], + "texture": "#3" + }, + "down": { + "uv": [ + 0, + 12, + 2, + 14 + ], + "texture": "#2" + } + }, + "type": "cube" + } + ], + "display": { + "gui": { + "rotation": [ + 30, + 225, + 0 + ], + "translation": [ + 0, + 0, + 0 + ], + "scale": [ + 0.625, + 0.625, + 0.625 + ] + }, + "ground": { + "rotation": [ + 0, + 0, + 0 + ], + "translation": [ + 0, + 3, + 0 + ], + "scale": [ + 0.25, + 0.25, + 0.25 + ] + }, + "fixed": { + "rotation": [ + 0, + 0, + 0 + ], + "translation": [ + 0, + 0, + 0 + ], + "scale": [ + 0.5, + 0.5, + 0.5 + ] + }, + "thirdperson_righthand": { + "rotation": [ + 75, + 45, + 0 + ], + "translation": [ + 0, + 2.5, + 0 + ], + "scale": [ + 0.375, + 0.375, + 0.375 + ] + }, + "firstperson_righthand": { + "rotation": [ + 0, + 45, + 0 + ], + "translation": [ + 0, + 0, + 0 + ], + "scale": [ + 0.4, + 0.4, + 0.4 + ] + }, + "firstperson_lefthand": { + "rotation": [ + 0, + 225, + 0 + ], + "translation": [ + 0, + 0, + 0 + ], + "scale": [ + 0.4, + 0.4, + 0.4 + ] + } + } +} + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/assets/growthcraft_cellar/models/block/brown_ale.json b/src/main/resources/assets/growthcraft_cellar/models/block/brown_ale.json new file mode 100644 index 0000000..11cc634 --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/block/brown_ale.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "growthcraft_cellar:block/fluid/fluid_overlay" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/block/brown_lager.json b/src/main/resources/assets/growthcraft_cellar/models/block/brown_lager.json new file mode 100644 index 0000000..11cc634 --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/block/brown_lager.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "growthcraft_cellar:block/fluid/fluid_overlay" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/block/copper_ale.json b/src/main/resources/assets/growthcraft_cellar/models/block/copper_ale.json new file mode 100644 index 0000000..11cc634 --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/block/copper_ale.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "growthcraft_cellar:block/fluid/fluid_overlay" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/block/copper_lager.json b/src/main/resources/assets/growthcraft_cellar/models/block/copper_lager.json new file mode 100644 index 0000000..11cc634 --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/block/copper_lager.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "growthcraft_cellar:block/fluid/fluid_overlay" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/block/culture_jar.json b/src/main/resources/assets/growthcraft_cellar/models/block/culture_jar.json new file mode 100644 index 0000000..696edec --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/block/culture_jar.json @@ -0,0 +1,617 @@ +{ + "credit": "Made with Blockbench, a free, modern block model editor by JannisX11. Model by Kisutora.", + "ambientocclusion": false, + "render_type": "translucent", + "textures": { + "0": "growthcraft_cellar:block/culture_jar", + "particle": "growthcraft_cellar:block/culture_jar", + "missing": "growthcraft:block/missing" + }, + "elements": [ + { + "name": "bottom", + "from": [ + 6, + 0, + 6 + ], + "to": [ + 10, + 1, + 10 + ], + "faces": { + "down": { + "uv": [ + 6, + 5, + 10, + 9 + ], + "texture": "#0" + } + } + }, + { + "name": "side_n", + "from": [ + 6, + 0, + 5 + ], + "to": [ + 10, + 5, + 6 + ], + "faces": { + "north": { + "uv": [ + 6, + 11, + 10, + 16 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 10, + 11, + 11, + 16 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 5, + 11, + 6, + 16 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 6, + 4, + 10, + 5 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 6, + 9, + 10, + 10 + ], + "texture": "#0" + } + } + }, + { + "name": "side_s", + "from": [ + 6, + 0, + 10 + ], + "to": [ + 10, + 5, + 11 + ], + "faces": { + "east": { + "uv": [ + 5, + 11, + 6, + 16 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 6, + 11, + 10, + 16 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 10, + 11, + 11, + 16 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 6, + 9, + 10, + 10 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 6, + 4, + 10, + 5 + ], + "texture": "#0" + } + } + }, + { + "name": "side_w", + "from": [ + 5, + 0, + 6 + ], + "to": [ + 6, + 5, + 10 + ], + "faces": { + "north": { + "uv": [ + 10, + 11, + 11, + 16 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 5, + 11, + 6, + 16 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 6, + 11, + 10, + 16 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 5, + 5, + 6, + 9 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 5, + 5, + 6, + 9 + ], + "texture": "#0" + } + } + }, + { + "name": "side_e", + "from": [ + 10, + 0, + 6 + ], + "to": [ + 11, + 5, + 10 + ], + "faces": { + "north": { + "uv": [ + 5, + 11, + 6, + 16 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 6, + 11, + 10, + 16 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 10, + 11, + 11, + 16 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 10, + 5, + 11, + 9 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 10, + 5, + 11, + 9 + ], + "texture": "#0" + } + } + }, + { + "name": "top_w", + "from": [ + 6, + 5, + 6 + ], + "to": [ + 7, + 6, + 10 + ], + "faces": { + "north": { + "uv": [ + 9, + 10, + 10, + 11 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 6, + 10, + 7, + 11 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 6, + 10, + 10, + 11 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 6, + 5, + 7, + 9 + ], + "texture": "#0" + } + } + }, + { + "name": "top_e", + "from": [ + 9, + 5, + 6 + ], + "to": [ + 10, + 6, + 10 + ], + "faces": { + "north": { + "uv": [ + 6, + 10, + 7, + 11 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 6, + 10, + 10, + 11 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 9, + 10, + 10, + 11 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 9, + 5, + 10, + 9 + ], + "texture": "#0" + } + } + }, + { + "name": "top_n", + "from": [ + 7, + 5, + 6 + ], + "to": [ + 9, + 6, + 7 + ], + "faces": { + "north": { + "uv": [ + 7, + 10, + 9, + 11 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 7, + 5, + 9, + 6 + ], + "texture": "#0" + } + } + }, + { + "name": "top_s", + "from": [ + 7, + 5, + 9 + ], + "to": [ + 9, + 6, + 10 + ], + "faces": { + "south": { + "uv": [ + 7, + 10, + 9, + 11 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 7, + 8, + 9, + 9 + ], + "texture": "#0" + } + } + }, + { + "name": "cork", + "from": [ + 7, + 6, + 7 + ], + "to": [ + 9, + 8, + 9 + ], + "faces": { + "north": { + "uv": [ + 0, + 2, + 2, + 4 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 2, + 0, + 4, + 2 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 0, + 2, + 2, + 4 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 2, + 0, + 4, + 2 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 0, + 0, + 2, + 2 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 0, + 0, + 2, + 2 + ], + "texture": "#0" + } + } + } + ], + "display": { + "gui": { + "rotation": [ + 30, + 225, + 0 + ], + "translation": [ + 0, + 0, + 0 + ], + "scale": [ + 0.625, + 0.625, + 0.625 + ] + }, + "ground": { + "rotation": [ + 0, + 0, + 0 + ], + "translation": [ + 0, + 3, + 0 + ], + "scale": [ + 0.25, + 0.25, + 0.25 + ] + }, + "fixed": { + "rotation": [ + 0, + 0, + 0 + ], + "translation": [ + 0, + 0, + 0 + ], + "scale": [ + 0.5, + 0.5, + 0.5 + ] + }, + "thirdperson_righthand": { + "rotation": [ + 75, + 45, + 0 + ], + "translation": [ + 0, + 2.5, + 0 + ], + "scale": [ + 0.375, + 0.375, + 0.375 + ] + }, + "firstperson_righthand": { + "rotation": [ + 0, + 45, + 0 + ], + "translation": [ + 0, + 0, + 0 + ], + "scale": [ + 0.7, + 0.7, + 0.7 + ] + }, + "firstperson_lefthand": { + "rotation": [ + 0, + 225, + 0 + ], + "translation": [ + 0, + 0, + 0 + ], + "scale": [ + 0.7, + 0.7, + 0.7 + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/block/dark_lager.json b/src/main/resources/assets/growthcraft_cellar/models/block/dark_lager.json new file mode 100644 index 0000000..11cc634 --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/block/dark_lager.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "growthcraft_cellar:block/fluid/fluid_overlay" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/block/fermentation_barrel_oak.json b/src/main/resources/assets/growthcraft_cellar/models/block/fermentation_barrel_oak.json new file mode 100644 index 0000000..8e7b7c4 --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/block/fermentation_barrel_oak.json @@ -0,0 +1,3627 @@ +{ + "credit": "Made with Blockbench, a free, modern block model editor by JannisX11", + "ambientocclusion": false, + "render_type": "cutout", + "textures": { + "0": "growthcraft_cellar:block/barrel_ferment/oak_bottom", + "1": "growthcraft_cellar:block/barrel_ferment/oak_side", + "2": "growthcraft_cellar:block/barrel_ferment/oak_side_alt", + "3": "growthcraft_cellar:block/barrel_ferment/oak_top", + "missing": "growthcraft:block/missing", + "particle": "growthcraft_cellar:block/barrel_ferment/oak_bottom" + }, + "elements": [ + { + "name": "cube", + "from": [ + 11, + 2, + 0 + ], + "to": [ + 13, + 3, + 4 + ], + "faces": { + "north": { + "uv": [ + 2, + 0, + 4, + 1 + ], + "texture": "#2" + }, + "east": { + "uv": [ + 0, + 13, + 4, + 14 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 2, + 0, + 4, + 1 + ], + "texture": "#2" + }, + "west": { + "uv": [ + 0, + 11, + 4, + 12 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 0, + 3, + 4, + 5 + ], + "texture": "#1", + "rotation": 270 + }, + "down": { + "uv": [ + 0, + 11, + 4, + 13 + ], + "texture": "#1", + "rotation": 90 + } + }, + "rotation": { + "origin": [ + 14, + 10, + 0 + ], + "axis": "y", + "angle": 0 + }, + "type": "cube" + }, + { + "name": "cube", + "from": [ + 0, + 5, + 4 + ], + "to": [ + 1, + 11, + 12 + ], + "faces": { + "north": { + "uv": [ + 6, + 0, + 12, + 1 + ], + "texture": "#2", + "rotation": 270 + }, + "east": { + "uv": [ + 0, + 0, + 8, + 6 + ], + "rotation": 180, + "texture": "#missing" + }, + "south": { + "uv": [ + 5, + 0, + 11, + 1 + ], + "texture": "#2", + "rotation": 90 + }, + "west": { + "uv": [ + 4, + 5, + 12, + 11 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 4, + 15, + 12, + 16 + ], + "texture": "#1", + "rotation": 90 + }, + "down": { + "uv": [ + 4, + 0, + 12, + 1 + ], + "texture": "#1", + "rotation": 90 + } + }, + "rotation": { + "origin": [ + 8, + 9, + 2 + ], + "axis": "x", + "angle": 0 + }, + "type": "cube" + }, + { + "name": "east_outer_1", + "from": [ + 15, + 5, + 4 + ], + "to": [ + 16, + 11, + 12 + ], + "faces": { + "north": { + "uv": [ + 5, + 0, + 11, + 1 + ], + "texture": "#2", + "rotation": 90 + }, + "east": { + "uv": [ + 4, + 5, + 12, + 11 + ], + "texture": "#1", + "rotation": 180 + }, + "south": { + "uv": [ + 6, + 0, + 12, + 1 + ], + "texture": "#2", + "rotation": 270 + }, + "west": { + "uv": [ + 0, + 0, + 8, + 6 + ], + "texture": "#missing" + }, + "up": { + "uv": [ + 4, + 0, + 12, + 1 + ], + "texture": "#1", + "rotation": 270 + }, + "down": { + "uv": [ + 4, + 11, + 12, + 12 + ], + "texture": "#1", + "rotation": 270 + } + }, + "rotation": { + "origin": [ + 8, + 7, + 3 + ], + "axis": "x", + "angle": 0 + }, + "type": "cube" + }, + { + "name": "cube", + "from": [ + 5, + 14, + 0 + ], + "to": [ + 11, + 15, + 4 + ], + "faces": { + "north": { + "uv": [ + 2, + 0, + 8, + 1 + ], + "texture": "#2" + }, + "east": { + "uv": [ + 0, + 1, + 4, + 2 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 2, + 0, + 8, + 1 + ], + "texture": "#2" + }, + "west": { + "uv": [ + 0, + 1, + 4, + 2 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 0, + 5, + 4, + 11 + ], + "texture": "#1", + "rotation": 90 + }, + "down": { + "uv": [ + 0, + 4, + 4, + 10 + ], + "texture": "#1", + "rotation": 270 + } + }, + "rotation": { + "origin": [ + 8, + 7, + 0 + ], + "axis": "y", + "angle": 0 + }, + "type": "cube" + }, + { + "name": "east_outer_2", + "from": [ + 14, + 3, + 4 + ], + "to": [ + 15, + 13, + 12 + ], + "faces": { + "north": { + "uv": [ + 4, + 0, + 14, + 1 + ], + "texture": "#2", + "rotation": 90 + }, + "east": { + "uv": [ + 4, + 3, + 12, + 13 + ], + "texture": "#1", + "rotation": 180 + }, + "south": { + "uv": [ + 5, + 0, + 15, + 1 + ], + "texture": "#2", + "rotation": 270 + }, + "west": { + "uv": [ + 0, + 0, + 8, + 10 + ], + "texture": "#missing" + }, + "up": { + "uv": [ + 4, + 1, + 12, + 2 + ], + "texture": "#1", + "rotation": 270 + }, + "down": { + "uv": [ + 4, + 12, + 12, + 13 + ], + "texture": "#1", + "rotation": 270 + } + }, + "rotation": { + "origin": [ + 7, + 8, + 3 + ], + "axis": "x", + "angle": 0 + }, + "type": "cube" + }, + { + "name": "east_outer_3", + "from": [ + 13, + 2, + 4 + ], + "to": [ + 14, + 14, + 12 + ], + "faces": { + "north": { + "uv": [ + 3, + 0, + 15, + 1 + ], + "texture": "#2", + "rotation": 90 + }, + "east": { + "uv": [ + 4, + 2, + 12, + 14 + ], + "texture": "#1", + "rotation": 180 + }, + "south": { + "uv": [ + 4, + 0, + 16, + 1 + ], + "texture": "#2", + "rotation": 270 + }, + "west": { + "uv": [ + 0, + 0, + 8, + 12 + ], + "texture": "#missing" + }, + "up": { + "uv": [ + 4, + 2, + 12, + 3 + ], + "texture": "#1", + "rotation": 270 + }, + "down": { + "uv": [ + 4, + 13, + 12, + 14 + ], + "texture": "#1", + "rotation": 270 + } + }, + "rotation": { + "origin": [ + 6, + 9, + 3 + ], + "axis": "x", + "angle": 0 + }, + "type": "cube" + }, + { + "name": "cube", + "from": [ + 3, + 14, + 4 + ], + "to": [ + 13, + 15, + 12 + ], + "faces": { + "north": { + "uv": [ + 1, + 0, + 11, + 1 + ], + "texture": "#2" + }, + "east": { + "uv": [ + 4, + 1, + 12, + 2 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 1, + 0, + 11, + 1 + ], + "texture": "#2" + }, + "west": { + "uv": [ + 4, + 1, + 12, + 2 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 4, + 3, + 12, + 13 + ], + "texture": "#1", + "rotation": 90 + }, + "down": { + "uv": [ + 0, + 0, + 8, + 10 + ], + "rotation": 270, + "texture": "#missing" + } + }, + "rotation": { + "origin": [ + 8, + 7, + 8 + ], + "axis": "y", + "angle": 0 + }, + "type": "cube" + }, + { + "name": "cube", + "from": [ + 1, + 3, + 4 + ], + "to": [ + 2, + 13, + 12 + ], + "faces": { + "north": { + "uv": [ + 5, + 0, + 15, + 1 + ], + "texture": "#2", + "rotation": 270 + }, + "east": { + "uv": [ + 0, + 0, + 8, + 10 + ], + "rotation": 180, + "texture": "#missing" + }, + "south": { + "uv": [ + 4, + 0, + 14, + 1 + ], + "texture": "#2", + "rotation": 90 + }, + "west": { + "uv": [ + 4, + 3, + 12, + 13 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 4, + 14, + 12, + 15 + ], + "texture": "#1", + "rotation": 90 + }, + "down": { + "uv": [ + 4, + 1, + 12, + 2 + ], + "texture": "#1", + "rotation": 90 + } + }, + "rotation": { + "origin": [ + 9, + 9, + 2 + ], + "axis": "x", + "angle": 0 + }, + "type": "cube" + }, + { + "name": "cube", + "from": [ + 2, + 2, + 4 + ], + "to": [ + 3, + 14, + 12 + ], + "faces": { + "north": { + "uv": [ + 4, + 0, + 16, + 1 + ], + "texture": "#2", + "rotation": 270 + }, + "east": { + "uv": [ + 0, + 0, + 8, + 12 + ], + "rotation": 180, + "texture": "#missing" + }, + "south": { + "uv": [ + 3, + 0, + 15, + 1 + ], + "texture": "#2", + "rotation": 90 + }, + "west": { + "uv": [ + 4, + 2, + 12, + 14 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 4, + 13, + 12, + 14 + ], + "texture": "#1", + "rotation": 90 + }, + "down": { + "uv": [ + 4, + 2, + 12, + 3 + ], + "texture": "#1", + "rotation": 90 + } + }, + "rotation": { + "origin": [ + 10, + 9, + 2 + ], + "axis": "x", + "angle": 0 + }, + "type": "cube" + }, + { + "name": "cube", + "from": [ + 3, + 1, + 4 + ], + "to": [ + 13, + 2, + 12 + ], + "faces": { + "north": { + "uv": [ + 1, + 0, + 11, + 1 + ], + "texture": "#2" + }, + "east": { + "uv": [ + 4, + 14, + 12, + 15 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 1, + 0, + 11, + 1 + ], + "texture": "#2" + }, + "west": { + "uv": [ + 4, + 14, + 12, + 15 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 0, + 0, + 8, + 10 + ], + "rotation": 270, + "texture": "#missing" + }, + "down": { + "uv": [ + 4, + 3, + 12, + 13 + ], + "texture": "#1", + "rotation": 90 + } + }, + "rotation": { + "origin": [ + 8, + 9, + 8 + ], + "axis": "y", + "angle": 0 + }, + "type": "cube" + }, + { + "name": "cube", + "from": [ + 1, + 5, + 0 + ], + "to": [ + 2, + 11, + 4 + ], + "faces": { + "north": { + "uv": [ + 6, + 0, + 12, + 1 + ], + "texture": "#2", + "rotation": 270 + }, + "east": { + "uv": [ + 0, + 5, + 4, + 11 + ], + "texture": "#1", + "rotation": 180 + }, + "south": { + "uv": [ + 5, + 0, + 11, + 1 + ], + "texture": "#2", + "rotation": 90 + }, + "west": { + "uv": [ + 0, + 5, + 4, + 11 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 0, + 14, + 4, + 15 + ], + "texture": "#1", + "rotation": 90 + }, + "down": { + "uv": [ + 0, + 1, + 4, + 2 + ], + "texture": "#1", + "rotation": 90 + } + }, + "rotation": { + "origin": [ + 9, + 9, + -6 + ], + "axis": "x", + "angle": 0 + }, + "type": "cube" + }, + { + "name": "cube", + "from": [ + 2, + 11, + 0 + ], + "to": [ + 3, + 13, + 4 + ], + "faces": { + "north": { + "uv": [ + 6, + 0, + 8, + 1 + ], + "texture": "#2", + "rotation": 270 + }, + "east": { + "uv": [ + 0, + 3, + 4, + 5 + ], + "texture": "#1", + "rotation": 180 + }, + "south": { + "uv": [ + 5, + 0, + 7, + 1 + ], + "texture": "#2", + "rotation": 90 + }, + "west": { + "uv": [ + 0, + 3, + 4, + 5 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 0, + 13, + 4, + 14 + ], + "texture": "#1", + "rotation": 90 + }, + "down": { + "uv": [ + 4, + 11, + 8, + 12 + ], + "texture": "#1", + "rotation": 90 + } + }, + "rotation": { + "origin": [ + 10, + 10, + -6 + ], + "axis": "x", + "angle": 0 + }, + "type": "cube" + }, + { + "name": "cube", + "from": [ + 2, + 3, + 0 + ], + "to": [ + 3, + 5, + 4 + ], + "faces": { + "north": { + "uv": [ + 6, + 0, + 8, + 1 + ], + "texture": "#2", + "rotation": 270 + }, + "east": { + "uv": [ + 0, + 11, + 4, + 13 + ], + "texture": "#1", + "rotation": 180 + }, + "south": { + "uv": [ + 5, + 0, + 7, + 1 + ], + "texture": "#2", + "rotation": 90 + }, + "west": { + "uv": [ + 0, + 11, + 4, + 13 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 4, + 4, + 8, + 5 + ], + "texture": "#1", + "rotation": 90 + }, + "down": { + "uv": [ + 0, + 2, + 4, + 3 + ], + "texture": "#1", + "rotation": 90 + } + }, + "rotation": { + "origin": [ + 10, + 2, + -6 + ], + "axis": "x", + "angle": 0 + }, + "type": "cube" + }, + { + "name": "east_outer_2", + "from": [ + 14, + 5, + 0 + ], + "to": [ + 15, + 11, + 4 + ], + "faces": { + "north": { + "uv": [ + 5, + 0, + 11, + 1 + ], + "texture": "#2", + "rotation": 90 + }, + "east": { + "uv": [ + 0, + 5, + 4, + 11 + ], + "texture": "#1", + "rotation": 180 + }, + "south": { + "uv": [ + 6, + 0, + 12, + 1 + ], + "texture": "#2", + "rotation": 270 + }, + "west": { + "uv": [ + 0, + 5, + 4, + 11 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 0, + 1, + 4, + 2 + ], + "texture": "#1", + "rotation": 270 + }, + "down": { + "uv": [ + 0, + 14, + 4, + 15 + ], + "texture": "#1", + "rotation": 270 + } + }, + "rotation": { + "origin": [ + 7, + 7, + -5 + ], + "axis": "x", + "angle": 0 + }, + "type": "cube" + }, + { + "name": "east_outer_3", + "from": [ + 13, + 11, + 0 + ], + "to": [ + 14, + 13, + 4 + ], + "faces": { + "north": { + "uv": [ + 5, + 0, + 7, + 1 + ], + "texture": "#2", + "rotation": 90 + }, + "east": { + "uv": [ + 0, + 4, + 4, + 6 + ], + "texture": "#1", + "rotation": 180 + }, + "south": { + "uv": [ + 6, + 0, + 8, + 1 + ], + "texture": "#2", + "rotation": 270 + }, + "west": { + "uv": [ + 0, + 3, + 4, + 5 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 0, + 2, + 4, + 3 + ], + "texture": "#1", + "rotation": 270 + }, + "down": { + "uv": [ + 0, + 11, + 4, + 12 + ], + "texture": "#1", + "rotation": 270 + } + }, + "rotation": { + "origin": [ + 6, + 9, + -5 + ], + "axis": "x", + "angle": 0 + }, + "type": "cube" + }, + { + "name": "east_outer_4", + "from": [ + 13, + 3, + 0 + ], + "to": [ + 14, + 5, + 4 + ], + "faces": { + "north": { + "uv": [ + 5, + 0, + 7, + 1 + ], + "texture": "#2", + "rotation": 90 + }, + "east": { + "uv": [ + 0, + 11, + 4, + 13 + ], + "texture": "#1", + "rotation": 180 + }, + "south": { + "uv": [ + 6, + 0, + 8, + 1 + ], + "texture": "#2", + "rotation": 270 + }, + "west": { + "uv": [ + 0, + 11, + 4, + 13 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 0, + 4, + 4, + 5 + ], + "texture": "#1", + "rotation": 270 + }, + "down": { + "uv": [ + 0, + 13, + 4, + 14 + ], + "texture": "#1", + "rotation": 270 + } + }, + "rotation": { + "origin": [ + 6, + 1, + -5 + ], + "axis": "x", + "angle": 0 + }, + "type": "cube" + }, + { + "name": "cube", + "from": [ + 5, + 15, + 4 + ], + "to": [ + 11, + 16, + 12 + ], + "faces": { + "north": { + "uv": [ + 2, + 0, + 8, + 1 + ], + "texture": "#2" + }, + "east": { + "uv": [ + 4, + 0, + 12, + 1 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 2, + 0, + 8, + 1 + ], + "texture": "#2" + }, + "west": { + "uv": [ + 4, + 0, + 12, + 1 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 4, + 5, + 12, + 11 + ], + "texture": "#1", + "rotation": 90 + }, + "down": { + "uv": [ + 0, + 0, + 8, + 6 + ], + "rotation": 270, + "texture": "#missing" + } + }, + "rotation": { + "origin": [ + 8, + 8, + 8 + ], + "axis": "y", + "angle": 0 + }, + "type": "cube" + }, + { + "name": "cube", + "from": [ + 11, + 13, + 0 + ], + "to": [ + 13, + 14, + 4 + ], + "faces": { + "north": { + "uv": [ + 2, + 0, + 4, + 1 + ], + "texture": "#2" + }, + "east": { + "uv": [ + 0, + 2, + 4, + 3 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 2, + 0, + 4, + 1 + ], + "texture": "#2" + }, + "west": { + "uv": [ + 0, + 3, + 4, + 4 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 0, + 3, + 4, + 5 + ], + "texture": "#1", + "rotation": 90 + }, + "down": { + "uv": [ + 0, + 2, + 4, + 4 + ], + "texture": "#1", + "rotation": 270 + } + }, + "rotation": { + "origin": [ + 10, + 6, + 0 + ], + "axis": "y", + "angle": 0 + }, + "type": "cube" + }, + { + "name": "cube", + "from": [ + 3, + 13, + 0 + ], + "to": [ + 5, + 14, + 4 + ], + "faces": { + "north": { + "uv": [ + 2, + 0, + 4, + 1 + ], + "texture": "#2" + }, + "east": { + "uv": [ + 0, + 10, + 4, + 11 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 2, + 0, + 4, + 1 + ], + "texture": "#2" + }, + "west": { + "uv": [ + 0, + 2, + 4, + 3 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 0, + 11, + 4, + 13 + ], + "texture": "#1", + "rotation": 90 + }, + "down": { + "uv": [ + 0, + 10, + 4, + 12 + ], + "texture": "#1", + "rotation": 270 + } + }, + "rotation": { + "origin": [ + 2, + 6, + 0 + ], + "axis": "y", + "angle": 0 + }, + "type": "cube" + }, + { + "name": "cube", + "from": [ + 5, + 0, + 4 + ], + "to": [ + 11, + 1, + 12 + ], + "faces": { + "north": { + "uv": [ + 2, + 0, + 8, + 1 + ], + "texture": "#2" + }, + "east": { + "uv": [ + 4, + 15, + 12, + 16 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 2, + 0, + 8, + 1 + ], + "texture": "#2" + }, + "west": { + "uv": [ + 4, + 15, + 12, + 16 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 0, + 0, + 8, + 6 + ], + "rotation": 270, + "texture": "#missing" + }, + "down": { + "uv": [ + 4, + 5, + 12, + 11 + ], + "texture": "#1", + "rotation": 90 + } + }, + "rotation": { + "origin": [ + 8, + 8, + 8 + ], + "axis": "y", + "angle": 0 + }, + "type": "cube" + }, + { + "name": "cube", + "from": [ + 5, + 1, + 0 + ], + "to": [ + 11, + 2, + 4 + ], + "faces": { + "north": { + "uv": [ + 2, + 0, + 8, + 1 + ], + "texture": "#2" + }, + "east": { + "uv": [ + 0, + 14, + 4, + 15 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 2, + 0, + 8, + 1 + ], + "texture": "#2" + }, + "west": { + "uv": [ + 0, + 14, + 4, + 15 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 0, + 5, + 4, + 11 + ], + "texture": "#1", + "rotation": 270 + }, + "down": { + "uv": [ + 0, + 5, + 4, + 11 + ], + "texture": "#1", + "rotation": 90 + } + }, + "rotation": { + "origin": [ + 8, + 9, + 0 + ], + "axis": "y", + "angle": 0 + }, + "type": "cube" + }, + { + "name": "cube", + "from": [ + 3, + 2, + 0 + ], + "to": [ + 5, + 3, + 4 + ], + "faces": { + "north": { + "uv": [ + 2, + 0, + 4, + 1 + ], + "texture": "#2" + }, + "east": { + "uv": [ + 0, + 4, + 4, + 5 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 2, + 0, + 4, + 1 + ], + "texture": "#2" + }, + "west": { + "uv": [ + 0, + 13, + 4, + 14 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 0, + 11, + 4, + 13 + ], + "texture": "#1", + "rotation": 270 + }, + "down": { + "uv": [ + 0, + 2, + 4, + 4 + ], + "texture": "#1", + "rotation": 90 + } + }, + "rotation": { + "origin": [ + 6, + 10, + 0 + ], + "axis": "y", + "angle": 0 + }, + "type": "cube" + }, + { + "name": "cube", + "from": [ + 3, + 3, + 1 + ], + "to": [ + 13, + 13, + 2 + ], + "faces": { + "north": { + "uv": [ + 3, + 3, + 13, + 13 + ], + "texture": "#3" + }, + "east": { + "uv": [ + 0, + 0, + 1, + 10 + ], + "texture": "#missing" + }, + "south": { + "uv": [ + 0, + 0, + 10, + 10 + ], + "texture": "#missing" + }, + "west": { + "uv": [ + 0, + 0, + 1, + 10 + ], + "texture": "#missing" + }, + "up": { + "uv": [ + 0, + 0, + 10, + 1 + ], + "texture": "#missing" + }, + "down": { + "uv": [ + 0, + 0, + 10, + 1 + ], + "texture": "#missing" + } + }, + "type": "cube" + }, + { + "name": "cube", + "from": [ + 5, + 2, + 1 + ], + "to": [ + 11, + 3, + 2 + ], + "faces": { + "north": { + "uv": [ + 5, + 13, + 11, + 14 + ], + "texture": "#3" + }, + "east": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#missing" + }, + "south": { + "uv": [ + 0, + 0, + 6, + 1 + ], + "texture": "#missing" + }, + "west": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#missing" + }, + "up": { + "uv": [ + 0, + 0, + 6, + 1 + ], + "texture": "#missing" + }, + "down": { + "uv": [ + 0, + 0, + 6, + 1 + ], + "texture": "#missing" + } + }, + "type": "cube" + }, + { + "name": "cube", + "from": [ + 5, + 13, + 1 + ], + "to": [ + 11, + 14, + 2 + ], + "faces": { + "north": { + "uv": [ + 5, + 2, + 11, + 3 + ], + "texture": "#3" + }, + "east": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#missing" + }, + "south": { + "uv": [ + 0, + 0, + 6, + 1 + ], + "texture": "#missing" + }, + "west": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#missing" + }, + "up": { + "uv": [ + 0, + 0, + 6, + 1 + ], + "texture": "#missing" + }, + "down": { + "uv": [ + 0, + 0, + 6, + 1 + ], + "texture": "#missing" + } + }, + "type": "cube" + }, + { + "name": "cube", + "from": [ + 2, + 5, + 1 + ], + "to": [ + 3, + 11, + 2 + ], + "faces": { + "north": { + "uv": [ + 13, + 5, + 14, + 11 + ], + "texture": "#3" + }, + "east": { + "uv": [ + 0, + 0, + 1, + 6 + ], + "texture": "#missing" + }, + "south": { + "uv": [ + 0, + 0, + 1, + 6 + ], + "texture": "#missing" + }, + "west": { + "uv": [ + 0, + 0, + 1, + 6 + ], + "texture": "#missing" + }, + "up": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#missing" + }, + "down": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#missing" + } + }, + "type": "cube" + }, + { + "name": "cube", + "from": [ + 13, + 5, + 1 + ], + "to": [ + 14, + 11, + 2 + ], + "faces": { + "north": { + "uv": [ + 2, + 5, + 3, + 11 + ], + "texture": "#3" + }, + "east": { + "uv": [ + 0, + 0, + 1, + 6 + ], + "texture": "#missing" + }, + "south": { + "uv": [ + 0, + 0, + 1, + 6 + ], + "texture": "#missing" + }, + "west": { + "uv": [ + 0, + 0, + 1, + 6 + ], + "texture": "#missing" + }, + "up": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#missing" + }, + "down": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#missing" + } + }, + "type": "cube" + }, + { + "name": "cube", + "from": [ + 1, + 5, + 12 + ], + "to": [ + 2, + 11, + 16 + ], + "faces": { + "north": { + "uv": [ + 6, + 0, + 12, + 1 + ], + "texture": "#2", + "rotation": 270 + }, + "east": { + "uv": [ + 12, + 5, + 16, + 11 + ], + "texture": "#1", + "rotation": 180 + }, + "south": { + "uv": [ + 5, + 0, + 11, + 1 + ], + "texture": "#2", + "rotation": 90 + }, + "west": { + "uv": [ + 12, + 5, + 16, + 11 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 12, + 14, + 16, + 15 + ], + "texture": "#1", + "rotation": 90 + }, + "down": { + "uv": [ + 12, + 1, + 16, + 2 + ], + "texture": "#1", + "rotation": 90 + } + }, + "rotation": { + "origin": [ + 9, + 9, + 6 + ], + "axis": "x", + "angle": 0 + }, + "type": "cube" + }, + { + "name": "cube", + "from": [ + 2, + 11, + 12 + ], + "to": [ + 3, + 13, + 16 + ], + "faces": { + "north": { + "uv": [ + 6, + 0, + 8, + 1 + ], + "texture": "#2", + "rotation": 270 + }, + "east": { + "uv": [ + 12, + 3, + 16, + 5 + ], + "texture": "#1", + "rotation": 180 + }, + "south": { + "uv": [ + 5, + 0, + 7, + 1 + ], + "texture": "#2", + "rotation": 90 + }, + "west": { + "uv": [ + 12, + 3, + 16, + 5 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 12, + 13, + 16, + 14 + ], + "texture": "#1", + "rotation": 90 + }, + "down": { + "uv": [ + 4, + 11, + 8, + 12 + ], + "texture": "#1", + "rotation": 90 + } + }, + "rotation": { + "origin": [ + 10, + 10, + 6 + ], + "axis": "x", + "angle": 0 + }, + "type": "cube" + }, + { + "name": "cube", + "from": [ + 3, + 13, + 12 + ], + "to": [ + 5, + 14, + 16 + ], + "faces": { + "north": { + "uv": [ + 2, + 0, + 4, + 1 + ], + "texture": "#2" + }, + "east": { + "uv": [ + 12, + 10, + 16, + 11 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 2, + 0, + 4, + 1 + ], + "texture": "#2" + }, + "west": { + "uv": [ + 12, + 2, + 16, + 3 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 12, + 11, + 16, + 13 + ], + "texture": "#1", + "rotation": 90 + }, + "down": { + "uv": [ + 12, + 10, + 16, + 12 + ], + "texture": "#1", + "rotation": 270 + } + }, + "rotation": { + "origin": [ + 2, + 6, + 12 + ], + "axis": "y", + "angle": 0 + }, + "type": "cube" + }, + { + "name": "cube", + "from": [ + 5, + 14, + 12 + ], + "to": [ + 11, + 15, + 16 + ], + "faces": { + "north": { + "uv": [ + 2, + 0, + 8, + 1 + ], + "texture": "#2" + }, + "east": { + "uv": [ + 12, + 1, + 16, + 2 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 2, + 0, + 8, + 1 + ], + "texture": "#2" + }, + "west": { + "uv": [ + 12, + 1, + 16, + 2 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 12, + 5, + 16, + 11 + ], + "texture": "#1", + "rotation": 90 + }, + "down": { + "uv": [ + 0, + 4, + 4, + 10 + ], + "texture": "#1", + "rotation": 270 + } + }, + "rotation": { + "origin": [ + 8, + 7, + 12 + ], + "axis": "y", + "angle": 0 + }, + "type": "cube" + }, + { + "name": "cube", + "from": [ + 11, + 13, + 12 + ], + "to": [ + 13, + 14, + 16 + ], + "faces": { + "north": { + "uv": [ + 2, + 0, + 4, + 1 + ], + "texture": "#2" + }, + "east": { + "uv": [ + 12, + 2, + 16, + 3 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 2, + 0, + 4, + 1 + ], + "texture": "#2" + }, + "west": { + "uv": [ + 0, + 3, + 4, + 4 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 12, + 3, + 16, + 5 + ], + "texture": "#1", + "rotation": 90 + }, + "down": { + "uv": [ + 0, + 2, + 4, + 4 + ], + "texture": "#1", + "rotation": 270 + } + }, + "rotation": { + "origin": [ + 10, + 6, + 12 + ], + "axis": "y", + "angle": 0 + }, + "type": "cube" + }, + { + "name": "east_outer_4", + "from": [ + 13, + 11, + 12 + ], + "to": [ + 14, + 13, + 16 + ], + "faces": { + "north": { + "uv": [ + 5, + 0, + 7, + 1 + ], + "texture": "#2", + "rotation": 90 + }, + "east": { + "uv": [ + 12, + 3, + 16, + 5 + ], + "texture": "#1", + "rotation": 180 + }, + "south": { + "uv": [ + 6, + 0, + 8, + 1 + ], + "texture": "#2", + "rotation": 270 + }, + "west": { + "uv": [ + 0, + 3, + 4, + 5 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 12, + 2, + 16, + 3 + ], + "texture": "#1", + "rotation": 270 + }, + "down": { + "uv": [ + 0, + 11, + 4, + 12 + ], + "texture": "#1", + "rotation": 270 + } + }, + "rotation": { + "origin": [ + 6, + 9, + 7 + ], + "axis": "x", + "angle": 0 + }, + "type": "cube" + }, + { + "name": "east_outer_3", + "from": [ + 14, + 5, + 12 + ], + "to": [ + 15, + 11, + 16 + ], + "faces": { + "north": { + "uv": [ + 5, + 0, + 11, + 1 + ], + "texture": "#2", + "rotation": 90 + }, + "east": { + "uv": [ + 12, + 5, + 16, + 11 + ], + "texture": "#1", + "rotation": 180 + }, + "south": { + "uv": [ + 6, + 0, + 12, + 1 + ], + "texture": "#2", + "rotation": 270 + }, + "west": { + "uv": [ + 0, + 5, + 4, + 11 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 12, + 1, + 16, + 2 + ], + "texture": "#1", + "rotation": 270 + }, + "down": { + "uv": [ + 12, + 14, + 16, + 15 + ], + "texture": "#1", + "rotation": 270 + } + }, + "rotation": { + "origin": [ + 7, + 7, + 7 + ], + "axis": "x", + "angle": 0 + }, + "type": "cube" + }, + { + "name": "east_outer_5", + "from": [ + 13, + 3, + 12 + ], + "to": [ + 14, + 5, + 16 + ], + "faces": { + "north": { + "uv": [ + 5, + 0, + 7, + 1 + ], + "texture": "#2", + "rotation": 90 + }, + "east": { + "uv": [ + 12, + 11, + 16, + 13 + ], + "texture": "#1", + "rotation": 180 + }, + "south": { + "uv": [ + 6, + 0, + 8, + 1 + ], + "texture": "#2", + "rotation": 270 + }, + "west": { + "uv": [ + 0, + 11, + 4, + 13 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 0, + 4, + 4, + 5 + ], + "texture": "#1", + "rotation": 270 + }, + "down": { + "uv": [ + 12, + 13, + 16, + 14 + ], + "texture": "#1", + "rotation": 270 + } + }, + "rotation": { + "origin": [ + 6, + 1, + 7 + ], + "axis": "x", + "angle": 0 + }, + "type": "cube" + }, + { + "name": "cube", + "from": [ + 11, + 2, + 12 + ], + "to": [ + 13, + 3, + 16 + ], + "faces": { + "north": { + "uv": [ + 2, + 0, + 4, + 1 + ], + "texture": "#2" + }, + "east": { + "uv": [ + 12, + 13, + 16, + 14 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 2, + 0, + 4, + 1 + ], + "texture": "#2" + }, + "west": { + "uv": [ + 0, + 11, + 4, + 12 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 0, + 3, + 4, + 5 + ], + "texture": "#1", + "rotation": 270 + }, + "down": { + "uv": [ + 12, + 11, + 16, + 13 + ], + "texture": "#1", + "rotation": 90 + } + }, + "rotation": { + "origin": [ + 14, + 10, + 12 + ], + "axis": "y", + "angle": 0 + }, + "type": "cube" + }, + { + "name": "cube", + "from": [ + 5, + 1, + 12 + ], + "to": [ + 11, + 2, + 16 + ], + "faces": { + "north": { + "uv": [ + 2, + 0, + 8, + 1 + ], + "texture": "#2" + }, + "east": { + "uv": [ + 12, + 14, + 16, + 15 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 2, + 0, + 8, + 1 + ], + "texture": "#2" + }, + "west": { + "uv": [ + 0, + 11, + 4, + 12 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 0, + 5, + 4, + 11 + ], + "texture": "#1", + "rotation": 270 + }, + "down": { + "uv": [ + 12, + 5, + 16, + 11 + ], + "texture": "#1", + "rotation": 90 + } + }, + "rotation": { + "origin": [ + 8, + 9, + 12 + ], + "axis": "y", + "angle": 0 + }, + "type": "cube" + }, + { + "name": "cube", + "from": [ + 2, + 3, + 12 + ], + "to": [ + 3, + 5, + 16 + ], + "faces": { + "north": { + "uv": [ + 6, + 0, + 8, + 1 + ], + "texture": "#2", + "rotation": 270 + }, + "east": { + "uv": [ + 0, + 11, + 4, + 13 + ], + "texture": "#1", + "rotation": 180 + }, + "south": { + "uv": [ + 5, + 0, + 7, + 1 + ], + "texture": "#2", + "rotation": 90 + }, + "west": { + "uv": [ + 0, + 5, + 4, + 7 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 4, + 4, + 8, + 5 + ], + "texture": "#1", + "rotation": 90 + }, + "down": { + "uv": [ + 12, + 2, + 16, + 3 + ], + "texture": "#1", + "rotation": 90 + } + }, + "rotation": { + "origin": [ + 10, + 2, + 6 + ], + "axis": "x", + "angle": 0 + }, + "type": "cube" + }, + { + "name": "cube", + "from": [ + 3, + 2, + 12 + ], + "to": [ + 5, + 3, + 16 + ], + "faces": { + "north": { + "uv": [ + 2, + 0, + 4, + 1 + ], + "texture": "#2" + }, + "east": { + "uv": [ + 0, + 4, + 4, + 5 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 2, + 0, + 4, + 1 + ], + "texture": "#2" + }, + "west": { + "uv": [ + 0, + 11, + 4, + 12 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 0, + 11, + 4, + 13 + ], + "texture": "#1", + "rotation": 270 + }, + "down": { + "uv": [ + 12, + 3, + 16, + 5 + ], + "texture": "#1", + "rotation": 90 + } + }, + "rotation": { + "origin": [ + 6, + 10, + 12 + ], + "axis": "y", + "angle": 0 + }, + "type": "cube" + }, + { + "name": "cube", + "from": [ + 5, + 2, + 14 + ], + "to": [ + 11, + 3, + 15 + ], + "faces": { + "north": { + "uv": [ + 5, + 13, + 11, + 14 + ], + "texture": "#3" + }, + "east": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#missing" + }, + "south": { + "uv": [ + 5, + 13, + 11, + 14 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#missing" + }, + "up": { + "uv": [ + 0, + 0, + 6, + 1 + ], + "texture": "#missing" + }, + "down": { + "uv": [ + 0, + 0, + 6, + 1 + ], + "texture": "#missing" + } + }, + "type": "cube" + }, + { + "name": "cube", + "from": [ + 3, + 3, + 14 + ], + "to": [ + 13, + 13, + 15 + ], + "faces": { + "north": { + "uv": [ + 3, + 3, + 13, + 13 + ], + "texture": "#3" + }, + "east": { + "uv": [ + 0, + 0, + 1, + 10 + ], + "texture": "#missing" + }, + "south": { + "uv": [ + 3, + 3, + 13, + 13 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 0, + 0, + 1, + 10 + ], + "texture": "#missing" + }, + "up": { + "uv": [ + 0, + 0, + 10, + 1 + ], + "texture": "#missing" + }, + "down": { + "uv": [ + 0, + 0, + 10, + 1 + ], + "texture": "#missing" + } + }, + "type": "cube" + }, + { + "name": "cube", + "from": [ + 5, + 13, + 14 + ], + "to": [ + 11, + 14, + 15 + ], + "faces": { + "north": { + "uv": [ + 5, + 2, + 11, + 3 + ], + "texture": "#3" + }, + "east": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#missing" + }, + "south": { + "uv": [ + 5, + 2, + 11, + 3 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#missing" + }, + "up": { + "uv": [ + 0, + 0, + 6, + 1 + ], + "texture": "#missing" + }, + "down": { + "uv": [ + 0, + 0, + 6, + 1 + ], + "texture": "#missing" + } + }, + "type": "cube" + }, + { + "name": "cube", + "from": [ + 13, + 5, + 14 + ], + "to": [ + 14, + 11, + 15 + ], + "faces": { + "north": { + "uv": [ + 2, + 5, + 3, + 11 + ], + "texture": "#3" + }, + "east": { + "uv": [ + 0, + 0, + 1, + 6 + ], + "texture": "#missing" + }, + "south": { + "uv": [ + 13, + 5, + 14, + 11 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 0, + 0, + 1, + 6 + ], + "texture": "#missing" + }, + "up": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#missing" + }, + "down": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#missing" + } + }, + "type": "cube" + }, + { + "name": "cube", + "from": [ + 2, + 5, + 14 + ], + "to": [ + 3, + 11, + 15 + ], + "faces": { + "north": { + "uv": [ + 13, + 5, + 14, + 11 + ], + "texture": "#3" + }, + "east": { + "uv": [ + 0, + 0, + 1, + 6 + ], + "texture": "#missing" + }, + "south": { + "uv": [ + 2, + 5, + 3, + 11 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 0, + 0, + 1, + 6 + ], + "texture": "#missing" + }, + "up": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#missing" + }, + "down": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#missing" + } + }, + "type": "cube" + } + ], + "display": { + "gui": { + "rotation": [ + 30, + 225, + 0 + ], + "translation": [ + 0, + 0, + 0 + ], + "scale": [ + 0.625, + 0.625, + 0.625 + ] + }, + "ground": { + "rotation": [ + 0, + 0, + 0 + ], + "translation": [ + 0, + 3, + 0 + ], + "scale": [ + 0.25, + 0.25, + 0.25 + ] + }, + "fixed": { + "rotation": [ + 0, + 0, + 0 + ], + "translation": [ + 0, + 0, + 0 + ], + "scale": [ + 0.5, + 0.5, + 0.5 + ] + }, + "thirdperson_righthand": { + "rotation": [ + 75, + 45, + 0 + ], + "translation": [ + 0, + 2.5, + 0 + ], + "scale": [ + 0.375, + 0.375, + 0.375 + ] + }, + "firstperson_righthand": { + "rotation": [ + 0, + 45, + 0 + ], + "translation": [ + 0, + 0, + 0 + ], + "scale": [ + 0.40, + 0.40, + 0.40 + ] + }, + "firstperson_lefthand": { + "rotation": [ + 0, + 225, + 0 + ], + "translation": [ + 0, + 0, + 0 + ], + "scale": [ + 0.40, + 0.40, + 0.40 + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/block/fluid_overlay.json b/src/main/resources/assets/growthcraft_cellar/models/block/fluid_overlay.json new file mode 100644 index 0000000..11cc634 --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/block/fluid_overlay.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "growthcraft_cellar:block/fluid/fluid_overlay" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/block/fruit_press.json b/src/main/resources/assets/growthcraft_cellar/models/block/fruit_press.json new file mode 100644 index 0000000..c0553f2 --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/block/fruit_press.json @@ -0,0 +1,395 @@ +{ + "credit": "Made with Blockbench, a free, modern block model editor by JannisX11. Model by Kisutora.", + "textures": { + "0": "growthcraft_cellar:block/fruit_press/fruit_press_basket", + "1": "growthcraft_cellar:block/fruit_press/fruit_press_bottom", + "2": "growthcraft_cellar:block/fruit_press/fruit_press", + "particle": "growthcraft_cellar:block/fruit_press/fruit_press_basket" + }, + "elements": [ + { + "name": "metal_upper_left_n", + "from": [14, 12, 9], + "to": [15, 14, 15], + "rotation": {"angle": 0, "axis": "y", "origin": [14.5, 13, 12]}, + "faces": { + "east": {"uv": [1, 1, 7, 3], "texture": "#2"}, + "south": {"uv": [14, 1, 15, 3], "texture": "#2"}, + "up": {"uv": [1, 0, 7, 1], "rotation": 270, "texture": "#2"}, + "down": {"uv": [1, 3, 7, 4], "rotation": 90, "texture": "#2"} + } + }, + { + "name": "metal_upper_right_s", + "from": [1, 12, 9], + "to": [2, 14, 15], + "rotation": {"angle": 0, "axis": "y", "origin": [1.5, 13, 12]}, + "faces": { + "south": {"uv": [1, 1, 2, 3], "texture": "#2"}, + "west": {"uv": [9, 1, 15, 3], "texture": "#2"}, + "up": {"uv": [9, 0, 15, 1], "rotation": 90, "texture": "#2"}, + "down": {"uv": [9, 3, 15, 4], "rotation": 270, "texture": "#2"} + } + }, + { + "name": "metal_upper_left_s", + "from": [1, 12, 1], + "to": [2, 14, 7], + "rotation": {"angle": 0, "axis": "y", "origin": [1.5, 13, 4]}, + "faces": { + "north": {"uv": [14, 1, 15, 3], "texture": "#2"}, + "west": {"uv": [1, 1, 7, 3], "texture": "#2"}, + "up": {"uv": [1, 0, 7, 1], "rotation": 90, "texture": "#2"}, + "down": {"uv": [1, 3, 7, 4], "rotation": 270, "texture": "#2"} + } + }, + { + "name": "metal_upper_e", + "from": [2, 12, 14], + "to": [14, 14, 15], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 13, 14.5]}, + "faces": { + "south": {"uv": [2, 1, 14, 3], "texture": "#2"}, + "up": {"uv": [2, 0, 14, 1], "texture": "#2"}, + "down": {"uv": [2, 3, 14, 4], "texture": "#2"} + } + }, + { + "name": "metal_upper_w", + "from": [2, 12, 1], + "to": [14, 14, 2], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 13, 1.5]}, + "faces": { + "north": {"uv": [2, 1, 14, 3], "texture": "#2"}, + "up": {"uv": [2, 0, 14, 1], "rotation": 180, "texture": "#2"}, + "down": {"uv": [2, 3, 14, 4], "rotation": 180, "texture": "#2"} + } + }, + { + "name": "support_filler_s", + "from": [1, 4, 7], + "to": [2, 7, 9], + "rotation": {"angle": 0, "axis": "y", "origin": [1.5, 5.5, 8]}, + "faces": { + "north": {"uv": [0, 14, 3, 15], "rotation": 270, "texture": "#1"}, + "east": {"uv": [0, 0, 2, 3], "texture": "#1"}, + "south": {"uv": [0, 15, 3, 16], "rotation": 270, "texture": "#1"}, + "west": {"uv": [0, 0, 2, 3], "texture": "#1"}, + "up": {"uv": [0, 0, 3, 1], "texture": "#1"}, + "down": {"uv": [0, 0, 3, 1], "texture": "#1"} + } + }, + { + "name": "support_filler_n", + "from": [14, 4, 7], + "to": [15, 7, 9], + "rotation": {"angle": 0, "axis": "y", "origin": [14.5, 5.5, 8]}, + "faces": { + "north": {"uv": [0, 15, 3, 16], "rotation": 270, "texture": "#1"}, + "east": {"uv": [0, 0, 2, 3], "texture": "#1"}, + "south": {"uv": [0, 14, 3, 15], "rotation": 270, "texture": "#1"}, + "west": {"uv": [0, 0, 2, 3], "texture": "#1"}, + "up": {"uv": [0, 0, 3, 1], "texture": "#1"}, + "down": {"uv": [0, 0, 3, 1], "texture": "#1"} + } + }, + { + "name": "support_n", + "from": [14, 7, 7], + "to": [16, 16, 9], + "rotation": {"angle": 0, "axis": "y", "origin": [15, 11.5, 8]}, + "faces": { + "north": {"uv": [3, 14, 12, 16], "rotation": 270, "texture": "#1"}, + "east": {"uv": [3, 14, 12, 16], "rotation": 270, "texture": "#1"}, + "south": {"uv": [3, 14, 12, 16], "rotation": 270, "texture": "#1"}, + "west": {"uv": [3, 14, 12, 16], "texture": "#1"}, + "up": {"uv": [0, 0, 2, 2], "texture": "#1"}, + "down": {"uv": [0, 0, 2, 2], "texture": "#1"} + } + }, + { + "name": "support_s", + "from": [0, 7, 7], + "to": [2, 16, 9], + "rotation": {"angle": 0, "axis": "y", "origin": [1, 11.5, 8]}, + "faces": { + "north": {"uv": [3, 14, 12, 16], "rotation": 270, "texture": "#1"}, + "east": {"uv": [3, 14, 12, 16], "texture": "#1"}, + "south": {"uv": [3, 14, 12, 16], "rotation": 270, "texture": "#1"}, + "west": {"uv": [3, 14, 12, 16], "rotation": 270, "texture": "#1"}, + "up": {"uv": [0, 0, 2, 2], "texture": "#1"}, + "down": {"uv": [0, 0, 2, 2], "texture": "#1"} + } + }, + { + "name": "base_foot_ne", + "from": [13, 0, 13], + "to": [15, 3, 15], + "rotation": {"angle": 0, "axis": "y", "origin": [14, 1.5, 14]}, + "faces": { + "north": {"uv": [2, 8, 4, 11], "texture": "#2"}, + "east": {"uv": [0, 8, 2, 11], "texture": "#2"}, + "south": {"uv": [2, 8, 4, 11], "texture": "#2"}, + "west": {"uv": [0, 8, 2, 11], "texture": "#2"}, + "down": {"uv": [4, 9, 6, 11], "rotation": 90, "texture": "#2"} + } + }, + { + "name": "base_foot_se", + "from": [1, 0, 13], + "to": [3, 3, 15], + "rotation": {"angle": 0, "axis": "y", "origin": [2, 1.5, 14]}, + "faces": { + "north": {"uv": [0, 8, 2, 11], "texture": "#2"}, + "east": {"uv": [2, 8, 4, 11], "texture": "#2"}, + "south": {"uv": [0, 8, 2, 11], "texture": "#2"}, + "west": {"uv": [2, 8, 4, 11], "texture": "#2"}, + "down": {"uv": [4, 9, 6, 11], "texture": "#2"} + } + }, + { + "name": "base_foot_nw", + "from": [13, 0, 1], + "to": [15, 3, 3], + "rotation": {"angle": 0, "axis": "y", "origin": [14, 1.5, 2]}, + "faces": { + "north": {"uv": [0, 8, 2, 11], "texture": "#2"}, + "east": {"uv": [2, 8, 4, 11], "texture": "#2"}, + "south": {"uv": [0, 8, 2, 11], "texture": "#2"}, + "west": {"uv": [2, 8, 4, 11], "texture": "#2"}, + "down": {"uv": [4, 9, 6, 11], "rotation": 180, "texture": "#2"} + } + }, + { + "name": "base_foot_sw", + "from": [1, 0, 1], + "to": [3, 3, 3], + "rotation": {"angle": 0, "axis": "y", "origin": [2, 1.5, 2]}, + "faces": { + "north": {"uv": [2, 8, 4, 11], "texture": "#2"}, + "east": {"uv": [0, 8, 2, 11], "texture": "#2"}, + "south": {"uv": [2, 8, 4, 11], "texture": "#2"}, + "west": {"uv": [0, 8, 2, 11], "texture": "#2"}, + "down": {"uv": [4, 9, 6, 11], "rotation": 270, "texture": "#2"} + } + }, + { + "name": "base_side_n", + "from": [15, 3, 0], + "to": [16, 7, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [15.5, 5, 8]}, + "faces": { + "north": {"uv": [0, 12, 1, 16], "texture": "#2"}, + "east": {"uv": [0, 12, 16, 16], "texture": "#2"}, + "south": {"uv": [15, 12, 16, 16], "texture": "#2"}, + "west": {"uv": [0, 12, 16, 16], "texture": "#2"}, + "up": {"uv": [0, 11, 16, 12], "rotation": 270, "texture": "#2"}, + "down": {"uv": [0, 11, 16, 12], "rotation": 90, "texture": "#2"} + } + }, + { + "name": "base_side_s", + "from": [0, 3, 0], + "to": [1, 7, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [0.5, 5, 8]}, + "faces": { + "north": {"uv": [15, 12, 16, 16], "texture": "#2"}, + "east": {"uv": [0, 12, 16, 16], "texture": "#2"}, + "south": {"uv": [0, 12, 1, 16], "texture": "#2"}, + "west": {"uv": [0, 12, 16, 16], "texture": "#2"}, + "up": {"uv": [0, 11, 16, 12], "rotation": 90, "texture": "#2"}, + "down": {"uv": [0, 11, 16, 12], "rotation": 270, "texture": "#2"} + } + }, + { + "name": "base_side_e", + "from": [1, 3, 15], + "to": [15, 7, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 5, 15.5]}, + "faces": { + "north": {"uv": [1, 12, 15, 16], "texture": "#2"}, + "south": {"uv": [1, 12, 15, 16], "texture": "#2"}, + "up": {"uv": [1, 11, 15, 12], "texture": "#2"}, + "down": {"uv": [1, 11, 15, 12], "texture": "#2"} + } + }, + { + "name": "base_side_w", + "from": [1, 3, 0], + "to": [15, 7, 1], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 5, 0.5]}, + "faces": { + "north": {"uv": [1, 12, 15, 16], "texture": "#2"}, + "south": {"uv": [1, 12, 15, 16], "texture": "#2"}, + "up": {"uv": [1, 11, 15, 12], "rotation": 180, "texture": "#2"}, + "down": {"uv": [1, 11, 15, 12], "rotation": 180, "texture": "#2"} + } + }, + { + "name": "base_bottom", + "from": [1, 2.99, 1], + "to": [15, 4, 15], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 3.5, 8]}, + "faces": { + "up": {"uv": [0, 0, 14, 14], "rotation": 90, "texture": "#1"}, + "down": {"uv": [0, 0, 14, 14], "rotation": 270, "texture": "#1"} + } + }, + { + "name": "basket_side_n", + "from": [13, 4, 2], + "to": [14, 16, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [13.5, 10, 8]}, + "faces": { + "north": {"uv": [2, 1, 3, 13], "texture": "#0"}, + "east": {"uv": [2, 1, 14, 13], "texture": "#0"}, + "south": {"uv": [13, 1, 14, 13], "texture": "#0"}, + "west": {"uv": [2, 1, 14, 13], "texture": "#0"}, + "up": {"uv": [2, 0, 14, 1], "rotation": 270, "texture": "#0"} + } + }, + { + "name": "basket_side_s", + "from": [2, 4, 2], + "to": [3, 16, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [2.5, 10, 8]}, + "faces": { + "north": {"uv": [13, 1, 14, 13], "texture": "#0"}, + "east": {"uv": [2, 1, 14, 13], "texture": "#0"}, + "south": {"uv": [2, 1, 3, 13], "texture": "#0"}, + "west": {"uv": [2, 1, 14, 13], "texture": "#0"}, + "up": {"uv": [2, 0, 14, 1], "rotation": 90, "texture": "#0"} + } + }, + { + "name": "basket_side_e", + "from": [3, 4, 13], + "to": [13, 16, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 10, 13.5]}, + "faces": { + "north": {"uv": [3, 1, 13, 13], "texture": "#0"}, + "south": {"uv": [3, 1, 13, 13], "texture": "#0"}, + "up": {"uv": [3, 0, 13, 1], "texture": "#0"} + } + }, + { + "name": "basket_side_w", + "from": [3, 4, 2], + "to": [13, 16, 3], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 10, 2.5]}, + "faces": { + "north": {"uv": [3, 1, 13, 13], "texture": "#0"}, + "south": {"uv": [3, 1, 13, 13], "texture": "#0"}, + "up": {"uv": [3, 0, 13, 1], "rotation": 180, "texture": "#0"} + } + }, + { + "name": "metal_lower_right_n", + "from": [14, 8, 1], + "to": [15, 10, 7], + "rotation": {"angle": 0, "axis": "y", "origin": [14.5, 9, 4]}, + "faces": { + "north": {"uv": [1, 5, 2, 7], "texture": "#2"}, + "east": {"uv": [9, 5, 15, 7], "texture": "#2"}, + "up": {"uv": [9, 4, 15, 5], "rotation": 270, "texture": "#2"}, + "down": {"uv": [9, 7, 15, 8], "rotation": 90, "texture": "#2"} + } + }, + { + "name": "metal_lower_left_n", + "from": [14, 8, 9], + "to": [15, 10, 15], + "rotation": {"angle": 0, "axis": "y", "origin": [14.5, 9, 12]}, + "faces": { + "east": {"uv": [1, 5, 7, 7], "texture": "#2"}, + "south": {"uv": [14, 5, 15, 7], "texture": "#2"}, + "up": {"uv": [1, 4, 7, 5], "rotation": 270, "texture": "#2"}, + "down": {"uv": [1, 7, 7, 8], "rotation": 90, "texture": "#2"} + } + }, + { + "name": "metal_lower_right_s", + "from": [1, 8, 9], + "to": [2, 10, 15], + "rotation": {"angle": 0, "axis": "y", "origin": [1.5, 9, 12]}, + "faces": { + "south": {"uv": [1, 5, 2, 7], "texture": "#2"}, + "west": {"uv": [9, 5, 15, 7], "texture": "#2"}, + "up": {"uv": [9, 4, 15, 5], "rotation": 90, "texture": "#2"}, + "down": {"uv": [9, 7, 15, 8], "rotation": 270, "texture": "#2"} + } + }, + { + "name": "metal_lower_left_s", + "from": [1, 8, 1], + "to": [2, 10, 7], + "rotation": {"angle": 0, "axis": "y", "origin": [1.5, 9, 4]}, + "faces": { + "north": {"uv": [14, 5, 15, 7], "texture": "#2"}, + "west": {"uv": [1, 5, 7, 7], "texture": "#2"}, + "up": {"uv": [1, 4, 7, 5], "rotation": 90, "texture": "#2"}, + "down": {"uv": [1, 7, 7, 8], "rotation": 270, "texture": "#2"} + } + }, + { + "name": "metal_lower_e", + "from": [2, 8, 14], + "to": [14, 10, 15], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 9, 14.5]}, + "faces": { + "south": {"uv": [2, 5, 14, 7], "texture": "#2"}, + "up": {"uv": [2, 4, 14, 5], "texture": "#2"}, + "down": {"uv": [2, 7, 14, 8], "texture": "#2"} + } + }, + { + "name": "metal_lower_w", + "from": [2, 8, 1], + "to": [14, 10, 2], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 9, 1.5]}, + "faces": { + "north": {"uv": [2, 5, 14, 7], "texture": "#2"}, + "up": {"uv": [2, 4, 14, 5], "rotation": 180, "texture": "#2"}, + "down": {"uv": [2, 7, 14, 8], "rotation": 180, "texture": "#2"} + } + }, + { + "name": "metal_upper_right_n", + "from": [14, 12, 1], + "to": [15, 14, 7], + "rotation": {"angle": 0, "axis": "y", "origin": [14.5, 13, 4]}, + "faces": { + "north": {"uv": [1, 1, 2, 3], "texture": "#2"}, + "east": {"uv": [9, 1, 15, 3], "texture": "#2"}, + "up": {"uv": [9, 0, 15, 1], "rotation": 270, "texture": "#2"}, + "down": {"uv": [9, 3, 15, 4], "rotation": 90, "texture": "#2"} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson_righthand": { + "rotation": [0, 45, 0], + "scale": [0.4, 0.4, 0.4] + }, + "firstperson_lefthand": { + "rotation": [0, 225, 0], + "scale": [0.4, 0.4, 0.4] + }, + "ground": { + "translation": [0, 3, 0], + "scale": [0.25, 0.25, 0.25] + }, + "gui": { + "rotation": [30, 225, 0], + "scale": [0.625, 0.625, 0.625] + }, + "fixed": { + "scale": [0.5, 0.5, 0.5] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/block/fruit_press_piston_down.json b/src/main/resources/assets/growthcraft_cellar/models/block/fruit_press_piston_down.json new file mode 100644 index 0000000..7993831 --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/block/fruit_press_piston_down.json @@ -0,0 +1,152 @@ +{ + "credit": "Made with Blockbench, a free, modern block model editor by JannisX11. Model by Kisutora.", + "textures": { + "0": "growthcraft_cellar:block/fruit_press/fruit_press_bottom", + "1": "growthcraft_cellar:block/fruit_press/fruit_press_piston_bottom", + "2": "growthcraft_cellar:block/fruit_press/fruit_press_piston_head", + "3": "growthcraft_cellar:block/fruit_press/fruit_press_piston_side", + "4": "growthcraft_cellar:block/fruit_press/fruit_press_piston_inner", + "particle": "growthcraft_cellar:block/fruit_press/fruit_press_piston_head" + }, + "elements": [ + { + "name": "support_n", + "from": [14, 0, 7], + "to": [16, 16, 9], + "faces": { + "north": {"uv": [14, 0, 16, 16], "texture": "#0"}, + "east": {"uv": [14, 0, 16, 16], "texture": "#0"}, + "south": {"uv": [14, 0, 16, 16], "texture": "#0"}, + "west": {"uv": [14, 0, 16, 16], "texture": "#0"}, + "up": {"uv": [0, 14, 2, 16], "rotation": 90, "texture": "#0"} + } + }, + { + "name": "support_s", + "from": [0, 0, 7], + "to": [2, 16, 9], + "faces": { + "north": {"uv": [14, 0, 16, 16], "texture": "#0"}, + "east": {"uv": [14, 0, 16, 16], "texture": "#0"}, + "south": {"uv": [14, 0, 16, 16], "texture": "#0"}, + "west": {"uv": [14, 0, 16, 16], "texture": "#0"}, + "up": {"uv": [0, 14, 2, 16], "rotation": 90, "texture": "#0"} + } + }, + { + "name": "support_filler", + "from": [2, 13, 7], + "to": [3, 15, 9], + "faces": { + "north": {"uv": [0, 14, 1, 16], "texture": "#0"}, + "south": {"uv": [0, 14, 1, 16], "texture": "#0"}, + "up": {"uv": [0, 14, 2, 15], "rotation": 90, "texture": "#0"}, + "down": {"uv": [0, 14, 2, 15], "rotation": 270, "texture": "#0"} + } + }, + { + "name": "support_filler", + "from": [2, 9, 7], + "to": [3, 11, 9], + "faces": { + "north": {"uv": [0, 14, 1, 16], "texture": "#0"}, + "south": {"uv": [0, 14, 1, 16], "texture": "#0"}, + "up": {"uv": [0, 14, 2, 15], "rotation": 90, "texture": "#0"}, + "down": {"uv": [0, 14, 2, 15], "rotation": 270, "texture": "#0"} + } + }, + { + "name": "support_filler", + "from": [13, 13, 7], + "to": [14, 15, 9], + "faces": { + "north": {"uv": [0, 14, 1, 16], "texture": "#0"}, + "south": {"uv": [0, 14, 1, 16], "texture": "#0"}, + "up": {"uv": [0, 14, 2, 15], "rotation": 90, "texture": "#0"}, + "down": {"uv": [0, 14, 2, 15], "rotation": 270, "texture": "#0"} + } + }, + { + "name": "support_filler", + "from": [13, 9, 7], + "to": [14, 11, 9], + "faces": { + "north": {"uv": [0, 14, 1, 16], "texture": "#0"}, + "south": {"uv": [0, 14, 1, 16], "texture": "#0"}, + "up": {"uv": [0, 14, 2, 15], "rotation": 90, "texture": "#0"}, + "down": {"uv": [0, 14, 2, 15], "rotation": 270, "texture": "#0"} + } + }, + { + "name": "piston_head", + "from": [3, -3, 3], + "to": [13, 0, 13], + "faces": { + "north": {"uv": [0, 11, 10, 14], "texture": "#2"}, + "east": {"uv": [0, 11, 10, 14], "texture": "#2"}, + "south": {"uv": [0, 11, 10, 14], "texture": "#2"}, + "west": {"uv": [0, 11, 10, 14], "texture": "#2"}, + "up": {"uv": [0, 0, 10, 10], "rotation": 90, "texture": "#2"}, + "down": {"uv": [0, 0, 10, 10], "rotation": 270, "texture": "#2"} + } + }, + { + "name": "piston_base", + "from": [3, 9, 3], + "to": [13, 16, 13], + "faces": { + "north": {"uv": [3, 1, 13, 8], "texture": "#3"}, + "east": {"uv": [3, 1, 13, 8], "texture": "#3"}, + "south": {"uv": [3, 1, 13, 8], "texture": "#3"}, + "west": {"uv": [3, 1, 13, 8], "texture": "#3"}, + "up": {"uv": [3, 3, 13, 13], "rotation": 90, "texture": "#1"}, + "down": {"uv": [3, 3, 13, 13], "rotation": 270, "texture": "#4"} + } + }, + { + "name": "piston_extended", + "from": [6.5, 0, 6.5], + "to": [9.5, 9, 9.5], + "faces": { + "north": {"uv": [12, 0, 15, 9], "texture": "#2"}, + "east": {"uv": [12, 0, 15, 9], "texture": "#2"}, + "south": {"uv": [12, 0, 15, 9], "texture": "#2"}, + "west": {"uv": [12, 0, 15, 9], "texture": "#2"} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson_righthand": { + "rotation": [0, 45, 0], + "scale": [0.4, 0.4, 0.4] + }, + "firstperson_lefthand": { + "rotation": [0, 225, 0], + "scale": [0.4, 0.4, 0.4] + }, + "ground": { + "translation": [0, 3, 0], + "scale": [0.25, 0.25, 0.25] + }, + "gui": { + "rotation": [30, 225, 0], + "scale": [0.625, 0.625, 0.625] + }, + "fixed": { + "scale": [0.5, 0.5, 0.5] + } + }, + "groups": [ + { + "name": "fruit_press_piston_down", + "origin": [8, 8, 8], + "color": 0, + "children": [0, 1, 2, 3, 4, 5, 6, 7, 8] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/block/fruit_press_piston_up.json b/src/main/resources/assets/growthcraft_cellar/models/block/fruit_press_piston_up.json new file mode 100644 index 0000000..3d8fe40 --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/block/fruit_press_piston_up.json @@ -0,0 +1,138 @@ +{ + "credit": "Made with Blockbench, a free, modern block model editor by JannisX11. Model by Kisutora.", + "textures": { + "0": "growthcraft_cellar:block/fruit_press/fruit_press_bottom", + "1": "growthcraft_cellar:block/fruit_press/fruit_press_piston_bottom", + "2": "growthcraft_cellar:block/fruit_press/fruit_press_piston_head", + "3": "growthcraft_cellar:block/fruit_press/fruit_press_piston_side", + "particle": "growthcraft_cellar:block/fruit_press/fruit_press_piston_head" + }, + "elements": [ + { + "name": "support_n", + "from": [14, 0, 7], + "to": [16, 16, 9], + "faces": { + "north": {"uv": [14, 0, 16, 16], "texture": "#0"}, + "east": {"uv": [14, 0, 16, 16], "texture": "#0"}, + "south": {"uv": [14, 0, 16, 16], "texture": "#0"}, + "west": {"uv": [14, 0, 16, 16], "texture": "#0"}, + "up": {"uv": [0, 14, 2, 16], "rotation": 90, "texture": "#0"} + } + }, + { + "name": "support_s", + "from": [0, 0, 7], + "to": [2, 16, 9], + "faces": { + "north": {"uv": [14, 0, 16, 16], "texture": "#0"}, + "east": {"uv": [14, 0, 16, 16], "texture": "#0"}, + "south": {"uv": [14, 0, 16, 16], "texture": "#0"}, + "west": {"uv": [14, 0, 16, 16], "texture": "#0"}, + "up": {"uv": [0, 14, 2, 16], "rotation": 90, "texture": "#0"} + } + }, + { + "name": "support_filler", + "from": [2, 13, 7], + "to": [3, 15, 9], + "faces": { + "north": {"uv": [0, 14, 1, 16], "texture": "#0"}, + "south": {"uv": [0, 14, 1, 16], "texture": "#0"}, + "up": {"uv": [0, 14, 2, 15], "rotation": 90, "texture": "#0"}, + "down": {"uv": [0, 14, 2, 15], "rotation": 270, "texture": "#0"} + } + }, + { + "name": "support_filler", + "from": [2, 9, 7], + "to": [3, 11, 9], + "faces": { + "north": {"uv": [0, 14, 1, 16], "texture": "#0"}, + "south": {"uv": [0, 14, 1, 16], "texture": "#0"}, + "up": {"uv": [0, 14, 2, 15], "rotation": 90, "texture": "#0"}, + "down": {"uv": [0, 14, 2, 15], "rotation": 270, "texture": "#0"} + } + }, + { + "name": "support_filler", + "from": [13, 13, 7], + "to": [14, 15, 9], + "faces": { + "north": {"uv": [0, 14, 1, 16], "texture": "#0"}, + "south": {"uv": [0, 14, 1, 16], "texture": "#0"}, + "up": {"uv": [0, 14, 2, 15], "rotation": 90, "texture": "#0"}, + "down": {"uv": [0, 14, 2, 15], "rotation": 270, "texture": "#0"} + } + }, + { + "name": "support_filler", + "from": [13, 9, 7], + "to": [14, 11, 9], + "faces": { + "north": {"uv": [0, 14, 1, 16], "texture": "#0"}, + "south": {"uv": [0, 14, 1, 16], "texture": "#0"}, + "up": {"uv": [0, 14, 2, 15], "rotation": 90, "texture": "#0"}, + "down": {"uv": [0, 14, 2, 15], "rotation": 270, "texture": "#0"} + } + }, + { + "name": "piston_head", + "from": [3, 6, 3], + "to": [13, 9, 13], + "faces": { + "north": {"uv": [0, 11, 10, 14], "texture": "#2"}, + "east": {"uv": [0, 11, 10, 14], "texture": "#2"}, + "south": {"uv": [0, 11, 10, 14], "texture": "#2"}, + "west": {"uv": [0, 11, 10, 14], "texture": "#2"}, + "down": {"uv": [0, 0, 10, 10], "rotation": 270, "texture": "#2"} + } + }, + { + "name": "piston_base", + "from": [3, 9, 3], + "to": [13, 16, 13], + "faces": { + "north": {"uv": [3, 1, 13, 8], "texture": "#3"}, + "east": {"uv": [3, 1, 13, 8], "texture": "#3"}, + "south": {"uv": [3, 1, 13, 8], "texture": "#3"}, + "west": {"uv": [3, 1, 13, 8], "texture": "#3"}, + "up": {"uv": [3, 3, 13, 13], "rotation": 90, "texture": "#1"} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson_righthand": { + "rotation": [0, 45, 0], + "scale": [0.4, 0.4, 0.4] + }, + "firstperson_lefthand": { + "rotation": [0, 225, 0], + "scale": [0.4, 0.4, 0.4] + }, + "ground": { + "translation": [0, 3, 0], + "scale": [0.25, 0.25, 0.25] + }, + "gui": { + "rotation": [30, 225, 0], + "scale": [0.625, 0.625, 0.625] + }, + "fixed": { + "scale": [0.5, 0.5, 0.5] + } + }, + "groups": [ + { + "name": "fruit_press_piston_up", + "origin": [8, 8, 8], + "color": 0, + "children": [0, 1, 2, 3, 4, 5, 6, 7] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/block/grape_vine/grape_vine_leaves.json b/src/main/resources/assets/growthcraft_cellar/models/block/grape_vine/grape_vine_leaves.json new file mode 100644 index 0000000..6c4fa51 --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/block/grape_vine/grape_vine_leaves.json @@ -0,0 +1,424 @@ +{ + "ambientocclusion": false, + "textures": { + "0": "growthcraft_cellar:block/grape_vine/grape_vine_leaves", + "particle": "growthcraft_cellar:block/grape_vine/grape_vine_leaves", + "missing": "growthcraft:block/missing" + }, + "elements": [ + { + "name": "north", + "from": [ + 0, + 0, + 0 + ], + "to": [ + 16, + 16, + 0 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 0, + 0, + 0, + 16 + ], + "texture": "#missing" + }, + "south": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 0, + 0, + 0, + 16 + ], + "texture": "#missing" + }, + "up": { + "uv": [ + 0, + 0, + 16, + 0 + ], + "texture": "#missing" + }, + "down": { + "uv": [ + 0, + 0, + 16, + 0 + ], + "texture": "#missing" + } + } + }, + { + "name": "south", + "from": [ + 0, + 0, + 16 + ], + "to": [ + 16, + 16, + 16 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 0, + 0, + 0, + 16 + ], + "texture": "#missing" + }, + "south": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 0, + 0, + 0, + 16 + ], + "texture": "#missing" + }, + "up": { + "uv": [ + 0, + 0, + 16, + 0 + ], + "texture": "#missing" + }, + "down": { + "uv": [ + 0, + 0, + 16, + 0 + ], + "texture": "#missing" + } + } + }, + { + "name": "west", + "from": [ + 0, + 0, + 0 + ], + "to": [ + 0, + 16, + 16 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 0, + 16 + ], + "texture": "#missing" + }, + "east": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 0, + 0, + 0, + 16 + ], + "texture": "#missing" + }, + "west": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 0, + 0, + 0, + 16 + ], + "texture": "#missing" + }, + "down": { + "uv": [ + 0, + 0, + 0, + 16 + ], + "texture": "#missing" + } + } + }, + { + "name": "east", + "from": [ + 16, + 0, + 0 + ], + "to": [ + 16, + 16, + 16 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 0, + 16 + ], + "texture": "#missing" + }, + "east": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 0, + 0, + 0, + 16 + ], + "texture": "#missing" + }, + "west": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 0, + 0, + 0, + 16 + ], + "texture": "#missing" + }, + "down": { + "uv": [ + 0, + 0, + 0, + 16 + ], + "texture": "#missing" + } + } + }, + { + "name": "down", + "from": [ + 0, + 0, + 0 + ], + "to": [ + 16, + 0, + 16 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 16, + 0 + ], + "texture": "#missing" + }, + "east": { + "uv": [ + 0, + 0, + 16, + 0 + ], + "texture": "#missing" + }, + "south": { + "uv": [ + 0, + 0, + 16, + 0 + ], + "texture": "#missing" + }, + "west": { + "uv": [ + 0, + 0, + 16, + 0 + ], + "texture": "#missing" + }, + "up": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#0" + } + } + }, + { + "name": "up", + "from": [ + 0, + 16, + 0 + ], + "to": [ + 16, + 16, + 16 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 16, + 0 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 0, + 0, + 16, + 0 + ], + "texture": "#missing" + }, + "south": { + "uv": [ + 0, + 0, + 16, + 0 + ], + "texture": "#missing" + }, + "west": { + "uv": [ + 0, + 0, + 16, + 0 + ], + "texture": "#missing" + }, + "up": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#0" + } + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/block/grape_vine/grape_vine_leaves_trunk.json b/src/main/resources/assets/growthcraft_cellar/models/block/grape_vine/grape_vine_leaves_trunk.json new file mode 100644 index 0000000..1f3b5ca --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/block/grape_vine/grape_vine_leaves_trunk.json @@ -0,0 +1,212 @@ +{ + "credit": "Made with Blockbench", + "ambientocclusion": false, + "textures": { + "0": "growthcraft_cellar:block/grape_vine/grape_vine_trunk", + "1": "growthcraft_cellar:block/grape_vine/grape_vine_crop_stage4", + "particle": "growthcraft_cellar:block/grape_vine/grape_vine_crop_stage4" + }, + "elements": [ + { + "name": "trunk", + "from": [ + 6, + 0, + 6 + ], + "to": [ + 10, + 11, + 10 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 4, + 11 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 0, + 0, + 4, + 11 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 0, + 0, + 4, + 11 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 0, + 0, + 4, + 11 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 0, + 0, + 4, + 4 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 0, + 12, + 4, + 16 + ], + "texture": "#0" + } + } + }, + { + "name": "east", + "from": [ + 12, + -8, + 0 + ], + "to": [ + 12, + 0, + 16 + ], + "faces": { + "east": { + "uv": [ + 0, + 0, + 16, + 8 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 0, + 0, + 16, + 8 + ], + "texture": "#1" + } + } + }, + { + "name": "west", + "from": [ + 4, + -8, + 0 + ], + "to": [ + 4, + 0, + 16 + ], + "faces": { + "east": { + "uv": [ + 0, + 0, + 16, + 8 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 0, + 0, + 16, + 8 + ], + "texture": "#1" + } + } + }, + { + "name": "north", + "from": [ + 0, + -8, + 4 + ], + "to": [ + 16, + 0, + 4 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 16, + 8 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 0, + 0, + 16, + 8 + ], + "texture": "#1" + } + } + }, + { + "name": "south", + "from": [ + 0, + -8, + 12 + ], + "to": [ + 16, + 0, + 12 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 16, + 8 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 0, + 0, + 16, + 8 + ], + "texture": "#1" + } + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/block/grape_vine/grape_vine_stage0.json b/src/main/resources/assets/growthcraft_cellar/models/block/grape_vine/grape_vine_stage0.json new file mode 100644 index 0000000..f60c0f5 --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/block/grape_vine/grape_vine_stage0.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cross", + "textures": { + "cross": "growthcraft_cellar:block/grape_vine/grape_vine_stage0" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/block/grape_vine/grape_vine_stage2.json b/src/main/resources/assets/growthcraft_cellar/models/block/grape_vine/grape_vine_stage2.json new file mode 100644 index 0000000..f829018 --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/block/grape_vine/grape_vine_stage2.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cross", + "textures": { + "cross": "growthcraft_cellar:block/grape_vine/grape_vine_stage2" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/block/grape_vine/grape_vine_stage4.json b/src/main/resources/assets/growthcraft_cellar/models/block/grape_vine/grape_vine_stage4.json new file mode 100644 index 0000000..49b89cf --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/block/grape_vine/grape_vine_stage4.json @@ -0,0 +1,78 @@ +{ + "textures": { + "0": "growthcraft_cellar:block/grape_vine/grape_vine_trunk", + "particle": "growthcraft_cellar:block/grape_vine/grape_vine_trunk" + }, + "render_type": "cutout", + "elements": [ + { + "name": "trunk", + "from": [ + 6.0, + -1.0, + 6.0 + ], + "to": [ + 10.0, + 16.0, + 10.0 + ], + "faces": { + "north": { + "texture": "#0", + "uv": [ + 0.0, + 0.0, + 4.0, + 16.0 + ] + }, + "east": { + "texture": "#0", + "uv": [ + 0.0, + 0.0, + 4.0, + 16.0 + ] + }, + "south": { + "texture": "#0", + "uv": [ + 0.0, + 0.0, + 4.0, + 16.0 + ] + }, + "west": { + "texture": "#0", + "uv": [ + 0.0, + 0.0, + 4.0, + 16.0 + ] + }, + "up": { + "texture": "#0", + "uv": [ + 0.0, + 0.0, + 4.0, + 4.0 + ] + }, + "down": { + "texture": "#0", + "uv": [ + 0.0, + 0.0, + 4.0, + 4.0 + ] + } + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/block/grape_vine/grape_vine_stage7.json b/src/main/resources/assets/growthcraft_cellar/models/block/grape_vine/grape_vine_stage7.json new file mode 100644 index 0000000..49b89cf --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/block/grape_vine/grape_vine_stage7.json @@ -0,0 +1,78 @@ +{ + "textures": { + "0": "growthcraft_cellar:block/grape_vine/grape_vine_trunk", + "particle": "growthcraft_cellar:block/grape_vine/grape_vine_trunk" + }, + "render_type": "cutout", + "elements": [ + { + "name": "trunk", + "from": [ + 6.0, + -1.0, + 6.0 + ], + "to": [ + 10.0, + 16.0, + 10.0 + ], + "faces": { + "north": { + "texture": "#0", + "uv": [ + 0.0, + 0.0, + 4.0, + 16.0 + ] + }, + "east": { + "texture": "#0", + "uv": [ + 0.0, + 0.0, + 4.0, + 16.0 + ] + }, + "south": { + "texture": "#0", + "uv": [ + 0.0, + 0.0, + 4.0, + 16.0 + ] + }, + "west": { + "texture": "#0", + "uv": [ + 0.0, + 0.0, + 4.0, + 16.0 + ] + }, + "up": { + "texture": "#0", + "uv": [ + 0.0, + 0.0, + 4.0, + 4.0 + ] + }, + "down": { + "texture": "#0", + "uv": [ + 0.0, + 0.0, + 4.0, + 4.0 + ] + } + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/block/grape_vine/purple_grape_vine_crop_stage0.json b/src/main/resources/assets/growthcraft_cellar/models/block/grape_vine/purple_grape_vine_crop_stage0.json new file mode 100644 index 0000000..2f9c1fb --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/block/grape_vine/purple_grape_vine_crop_stage0.json @@ -0,0 +1,9 @@ +{ + "parent": "growthcraft_cellar:block/grape_vine/template/grape_vine_crop_stage0", + "textures": { + "0": "growthcraft_cellar:block/grape_vine/grape_vine_crop_stage0", + "2": "growthcraft_cellar:item/grape_purple", + "particle": "growthcraft_cellar:block/grape_vine/grape_vine_leaves", + "missing": "growthcraft:block/missing" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/block/grape_vine/purple_grape_vine_crop_stage4.json b/src/main/resources/assets/growthcraft_cellar/models/block/grape_vine/purple_grape_vine_crop_stage4.json new file mode 100644 index 0000000..62040fc --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/block/grape_vine/purple_grape_vine_crop_stage4.json @@ -0,0 +1,9 @@ +{ + "parent": "growthcraft_cellar:block/grape_vine/template/grape_vine_crop_stage4", + "textures": { + "0": "growthcraft_cellar:block/grape_vine/grape_vine_crop_stage0", + "2": "growthcraft_cellar:item/grape_purple", + "particle": "growthcraft_cellar:block/grape_vine/grape_vine_leaves", + "missing": "growthcraft:block/missing" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/block/grape_vine/purple_grape_vine_crop_stage7.json b/src/main/resources/assets/growthcraft_cellar/models/block/grape_vine/purple_grape_vine_crop_stage7.json new file mode 100644 index 0000000..81b61d8 --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/block/grape_vine/purple_grape_vine_crop_stage7.json @@ -0,0 +1,9 @@ +{ + "parent": "growthcraft_cellar:block/grape_vine/template/grape_vine_crop_stage7", + "textures": { + "0": "growthcraft_cellar:block/grape_vine/grape_vine_crop_stage4", + "2": "growthcraft_cellar:item/grape_purple", + "particle": "growthcraft_cellar:block/grape_vine/grape_vine_leaves", + "missing": "growthcraft:block/missing" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/block/grape_vine/red_grape_vine_crop_stage0.json b/src/main/resources/assets/growthcraft_cellar/models/block/grape_vine/red_grape_vine_crop_stage0.json new file mode 100644 index 0000000..a73e51c --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/block/grape_vine/red_grape_vine_crop_stage0.json @@ -0,0 +1,9 @@ +{ + "parent": "growthcraft_cellar:block/grape_vine/template/grape_vine_crop_stage0", + "textures": { + "0": "growthcraft_cellar:block/grape_vine/grape_vine_crop_stage0", + "2": "growthcraft_cellar:item/grape_red", + "particle": "growthcraft_cellar:block/grape_vine/grape_vine_leaves", + "missing": "growthcraft:block/missing" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/block/grape_vine/red_grape_vine_crop_stage4.json b/src/main/resources/assets/growthcraft_cellar/models/block/grape_vine/red_grape_vine_crop_stage4.json new file mode 100644 index 0000000..03f2d43 --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/block/grape_vine/red_grape_vine_crop_stage4.json @@ -0,0 +1,9 @@ +{ + "parent": "growthcraft_cellar:block/grape_vine/template/grape_vine_crop_stage4", + "textures": { + "0": "growthcraft_cellar:block/grape_vine/grape_vine_crop_stage0", + "2": "growthcraft_cellar:item/grape_red", + "particle": "growthcraft_cellar:block/grape_vine/grape_vine_leaves", + "missing": "growthcraft:block/missing" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/block/grape_vine/red_grape_vine_crop_stage7.json b/src/main/resources/assets/growthcraft_cellar/models/block/grape_vine/red_grape_vine_crop_stage7.json new file mode 100644 index 0000000..6d02787 --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/block/grape_vine/red_grape_vine_crop_stage7.json @@ -0,0 +1,9 @@ +{ + "parent": "growthcraft_cellar:block/grape_vine/template/grape_vine_crop_stage7", + "textures": { + "0": "growthcraft_cellar:block/grape_vine/grape_vine_crop_stage4", + "2": "growthcraft_cellar:item/grape_red", + "particle": "growthcraft_cellar:block/grape_vine/grape_vine_leaves", + "missing": "growthcraft:block/missing" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/block/grape_vine/template/grape_vine_crop_stage0.json b/src/main/resources/assets/growthcraft_cellar/models/block/grape_vine/template/grape_vine_crop_stage0.json new file mode 100644 index 0000000..50aa0d3 --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/block/grape_vine/template/grape_vine_crop_stage0.json @@ -0,0 +1,145 @@ +{ + "credit": "Made with Blockbench", + "render_type": "cutout", + "ambientocclusion": false, + "textures": { + "0": "growthcraft_cellar:block/grape_vine/grape_vine_crop_stage0", + "2": "growthcraft_cellar:item/grape_red", + "particle": "growthcraft_cellar:block/grape_vine/grape_vine_leaves", + "missing": "growthcraft:block/missing" + }, + "elements": [ + { + "name": "east", + "from": [ + 12, + 8, + 0 + ], + "to": [ + 12, + 16, + 16 + ], + "faces": { + "east": { + "uv": [ + 0, + 0, + 16, + 8 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 0, + 0, + 16, + 8 + ], + "texture": "#0" + } + } + }, + { + "name": "west", + "from": [ + 4, + 8, + 0 + ], + "to": [ + 4, + 16, + 16 + ], + "faces": { + "east": { + "uv": [ + 0, + 0, + 16, + 8 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 0, + 0, + 16, + 8 + ], + "texture": "#0" + } + } + }, + { + "name": "south", + "from": [ + 0, + 8, + 12 + ], + "to": [ + 16, + 16, + 12 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 16, + 8 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 0, + 0, + 16, + 8 + ], + "texture": "#0" + } + } + }, + { + "name": "north", + "from": [ + 0, + 8, + 4 + ], + "to": [ + 16, + 16, + 4 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 16, + 8 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 0, + 0, + 16, + 8 + ], + "texture": "#0" + } + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/block/grape_vine/template/grape_vine_crop_stage4.json b/src/main/resources/assets/growthcraft_cellar/models/block/grape_vine/template/grape_vine_crop_stage4.json new file mode 100644 index 0000000..916168d --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/block/grape_vine/template/grape_vine_crop_stage4.json @@ -0,0 +1,301 @@ +{ + "credit": "Made with Blockbench", + "render_type": "cutout", + "ambientocclusion": false, + "textures": { + "0": "growthcraft_cellar:block/grape_vine/grape_vine_crop_stage0", + "2": "growthcraft_cellar:item/grape_red", + "particle": "growthcraft_cellar:block/grape_vine/grape_vine_leaves", + "missing": "growthcraft:block/missing" + }, + "elements": [ + { + "name": "east", + "from": [ + 12, + 8, + 0 + ], + "to": [ + 12, + 16, + 16 + ], + "faces": { + "east": { + "uv": [ + 0, + 0, + 16, + 8 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 0, + 0, + 16, + 8 + ], + "texture": "#0" + } + } + }, + { + "name": "west", + "from": [ + 4, + 8, + 0 + ], + "to": [ + 4, + 16, + 16 + ], + "faces": { + "east": { + "uv": [ + 0, + 0, + 16, + 8 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 0, + 0, + 16, + 8 + ], + "texture": "#0" + } + } + }, + { + "name": "south", + "from": [ + 0, + 8, + 12 + ], + "to": [ + 16, + 16, + 12 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 16, + 8 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 0, + 0, + 16, + 8 + ], + "texture": "#0" + } + } + }, + { + "name": "north", + "from": [ + 0, + 8, + 4 + ], + "to": [ + 16, + 16, + 4 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 16, + 8 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 0, + 0, + 16, + 8 + ], + "texture": "#0" + } + } + }, + { + "name": "fruit1", + "from": [ + 5.29289, + 10, + 7.53553 + ], + "to": [ + 11.29289, + 16, + 7.53553 + ], + "rotation": { + "angle": -45, + "axis": "y", + "origin": [ + 8.29289, + 11.5, + 7.53553 + ] + }, + "faces": { + "north": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#2" + }, + "east": { + "uv": [ + 0, + 0, + 0, + 7 + ], + "texture": "#missing" + }, + "south": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#2" + }, + "west": { + "uv": [ + 0, + 0, + 0, + 7 + ], + "texture": "#missing" + }, + "up": { + "uv": [ + 0, + 0, + 10, + 0 + ], + "texture": "#missing" + }, + "down": { + "uv": [ + 0, + 0, + 10, + 0 + ], + "texture": "#missing" + } + } + }, + { + "name": "fruit2", + "from": [ + 5.29289, + 10, + 7.53553 + ], + "to": [ + 11.29289, + 16, + 7.53553 + ], + "rotation": { + "angle": 45, + "axis": "y", + "origin": [ + 8.29289, + 11.5, + 7.53553 + ] + }, + "faces": { + "north": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#2" + }, + "east": { + "uv": [ + 0, + 0, + 0, + 7 + ], + "texture": "#missing" + }, + "south": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#2" + }, + "west": { + "uv": [ + 0, + 0, + 0, + 7 + ], + "texture": "#missing" + }, + "up": { + "uv": [ + 0, + 0, + 10, + 0 + ], + "texture": "#missing" + }, + "down": { + "uv": [ + 0, + 0, + 10, + 0 + ], + "texture": "#missing" + } + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/block/grape_vine/template/grape_vine_crop_stage7.json b/src/main/resources/assets/growthcraft_cellar/models/block/grape_vine/template/grape_vine_crop_stage7.json new file mode 100644 index 0000000..d33ed3f --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/block/grape_vine/template/grape_vine_crop_stage7.json @@ -0,0 +1,301 @@ +{ + "credit": "Made with Blockbench", + "render_type": "cutout", + "ambientocclusion": false, + "textures": { + "0": "growthcraft_cellar:block/grape_vine/grape_vine_crop_stage4", + "2": "growthcraft_cellar:item/grape_red", + "particle": "growthcraft_cellar:block/grape_vine/grape_vine_leaves", + "missing": "growthcraft:block/missing" + }, + "elements": [ + { + "name": "east", + "from": [ + 12, + 8, + 0 + ], + "to": [ + 12, + 16, + 16 + ], + "faces": { + "east": { + "uv": [ + 0, + 0, + 16, + 8 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 0, + 0, + 16, + 8 + ], + "texture": "#0" + } + } + }, + { + "name": "west", + "from": [ + 4, + 8, + 0 + ], + "to": [ + 4, + 16, + 16 + ], + "faces": { + "east": { + "uv": [ + 0, + 0, + 16, + 8 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 0, + 0, + 16, + 8 + ], + "texture": "#0" + } + } + }, + { + "name": "south", + "from": [ + 0, + 8, + 12 + ], + "to": [ + 16, + 16, + 12 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 16, + 8 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 0, + 0, + 16, + 8 + ], + "texture": "#0" + } + } + }, + { + "name": "north", + "from": [ + 0, + 8, + 4 + ], + "to": [ + 16, + 16, + 4 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 16, + 8 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 0, + 0, + 16, + 8 + ], + "texture": "#0" + } + } + }, + { + "name": "fruit1", + "from": [ + 3.29289, + 6, + 7.53553 + ], + "to": [ + 13.29289, + 16, + 7.53553 + ], + "rotation": { + "angle": -45, + "axis": "y", + "origin": [ + 8.29289, + 11.5, + 7.53553 + ] + }, + "faces": { + "north": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#2" + }, + "east": { + "uv": [ + 0, + 0, + 0, + 7 + ], + "texture": "#missing" + }, + "south": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#2" + }, + "west": { + "uv": [ + 0, + 0, + 0, + 7 + ], + "texture": "#missing" + }, + "up": { + "uv": [ + 0, + 0, + 10, + 0 + ], + "texture": "#missing" + }, + "down": { + "uv": [ + 0, + 0, + 10, + 0 + ], + "texture": "#missing" + } + } + }, + { + "name": "fruit2", + "from": [ + 3.29289, + 6, + 7.53553 + ], + "to": [ + 13.29289, + 16, + 7.53553 + ], + "rotation": { + "angle": 45, + "axis": "y", + "origin": [ + 8.29289, + 11.5, + 7.53553 + ] + }, + "faces": { + "north": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#2" + }, + "east": { + "uv": [ + 0, + 0, + 0, + 7 + ], + "texture": "#missing" + }, + "south": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#2" + }, + "west": { + "uv": [ + 0, + 0, + 0, + 7 + ], + "texture": "#missing" + }, + "up": { + "uv": [ + 0, + 0, + 10, + 0 + ], + "texture": "#missing" + }, + "down": { + "uv": [ + 0, + 0, + 10, + 0 + ], + "texture": "#missing" + } + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/block/grape_vine/white_grape_vine_crop_stage0.json b/src/main/resources/assets/growthcraft_cellar/models/block/grape_vine/white_grape_vine_crop_stage0.json new file mode 100644 index 0000000..47dc213 --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/block/grape_vine/white_grape_vine_crop_stage0.json @@ -0,0 +1,9 @@ +{ + "parent": "growthcraft_cellar:block/grape_vine/template/grape_vine_crop_stage0", + "textures": { + "0": "growthcraft_cellar:block/grape_vine/grape_vine_crop_stage0", + "2": "growthcraft_cellar:item/grape_white", + "particle": "growthcraft_cellar:block/grape_vine/grape_vine_leaves", + "missing": "growthcraft:block/missing" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/block/grape_vine/white_grape_vine_crop_stage4.json b/src/main/resources/assets/growthcraft_cellar/models/block/grape_vine/white_grape_vine_crop_stage4.json new file mode 100644 index 0000000..5f6c93a --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/block/grape_vine/white_grape_vine_crop_stage4.json @@ -0,0 +1,9 @@ +{ + "parent": "growthcraft_cellar:block/grape_vine/template/grape_vine_crop_stage4", + "textures": { + "0": "growthcraft_cellar:block/grape_vine/grape_vine_crop_stage0", + "2": "growthcraft_cellar:item/grape_white", + "particle": "growthcraft_cellar:block/grape_vine/grape_vine_leaves", + "missing": "growthcraft:block/missing" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/block/grape_vine/white_grape_vine_crop_stage7.json b/src/main/resources/assets/growthcraft_cellar/models/block/grape_vine/white_grape_vine_crop_stage7.json new file mode 100644 index 0000000..0bd5a0b --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/block/grape_vine/white_grape_vine_crop_stage7.json @@ -0,0 +1,9 @@ +{ + "parent": "growthcraft_cellar:block/grape_vine/template/grape_vine_crop_stage7", + "textures": { + "0": "growthcraft_cellar:block/grape_vine/grape_vine_crop_stage4", + "2": "growthcraft_cellar:item/grape_white", + "particle": "growthcraft_cellar:block/grape_vine/grape_vine_leaves", + "missing": "growthcraft:block/missing" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/block/hops_vine_stage0.json b/src/main/resources/assets/growthcraft_cellar/models/block/hops_vine_stage0.json new file mode 100644 index 0000000..58dfca5 --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/block/hops_vine_stage0.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cross", + "textures": { + "cross": "growthcraft_cellar:block/hops_vine_stage0" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/block/hops_vine_stage2.json b/src/main/resources/assets/growthcraft_cellar/models/block/hops_vine_stage2.json new file mode 100644 index 0000000..431971f --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/block/hops_vine_stage2.json @@ -0,0 +1,145 @@ +{ + "render_type": "cutout", + "textures": { + "0": "growthcraft_cellar:block/leaves", + "particle": "growthcraft_cellar:block/leaves" + }, + "elements": [ + { + "name": "cube", + "from": [ + 6, + 0, + 4 + ], + "to": [ + 6, + 8, + 12 + ], + "faces": { + "east": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#0" + } + }, + "type": "cube" + }, + { + "name": "cube", + "from": [ + 10, + 0, + 4 + ], + "to": [ + 10, + 8, + 12 + ], + "faces": { + "east": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#0" + } + }, + "type": "cube" + }, + { + "name": "cube", + "from": [ + 4, + 0, + 10 + ], + "to": [ + 12, + 8, + 10 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#0" + } + }, + "type": "cube" + }, + { + "name": "cube", + "from": [ + 4, + 0, + 6 + ], + "to": [ + 12, + 8, + 6 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#0" + } + }, + "type": "cube" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/block/hops_vine_stage4.json b/src/main/resources/assets/growthcraft_cellar/models/block/hops_vine_stage4.json new file mode 100644 index 0000000..17d1b99 --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/block/hops_vine_stage4.json @@ -0,0 +1,145 @@ +{ + "render_type": "cutout", + "textures": { + "0": "growthcraft_cellar:block/leaves", + "particle": "growthcraft_cellar:block/leaves" + }, + "elements": [ + { + "name": "cube", + "from": [ + 4, + 0, + 0 + ], + "to": [ + 4, + 16, + 16 + ], + "faces": { + "east": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#0" + } + }, + "type": "cube" + }, + { + "name": "cube", + "from": [ + 12, + 0, + 0 + ], + "to": [ + 12, + 16, + 16 + ], + "faces": { + "east": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#0" + } + }, + "type": "cube" + }, + { + "name": "cube", + "from": [ + 0, + 0, + 12 + ], + "to": [ + 16, + 16, + 12 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#0" + } + }, + "type": "cube" + }, + { + "name": "cube", + "from": [ + 0, + 0, + 4 + ], + "to": [ + 16, + 16, + 4 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#0" + } + }, + "type": "cube" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/block/hops_vine_stage7.json b/src/main/resources/assets/growthcraft_cellar/models/block/hops_vine_stage7.json new file mode 100644 index 0000000..03d7fc0 --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/block/hops_vine_stage7.json @@ -0,0 +1,7 @@ +{ + "parent": "growthcraft_cellar:block/hops_vine_stage4", + "render_type": "cutout", + "textures": { + "0": "growthcraft_cellar:block/leaves_fruit" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/block/ipa_ale.json b/src/main/resources/assets/growthcraft_cellar/models/block/ipa_ale.json new file mode 100644 index 0000000..11cc634 --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/block/ipa_ale.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "growthcraft_cellar:block/fluid/fluid_overlay" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/block/old_port_ale.json b/src/main/resources/assets/growthcraft_cellar/models/block/old_port_ale.json new file mode 100644 index 0000000..11cc634 --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/block/old_port_ale.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "growthcraft_cellar:block/fluid/fluid_overlay" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/block/pale_ale.json b/src/main/resources/assets/growthcraft_cellar/models/block/pale_ale.json new file mode 100644 index 0000000..11cc634 --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/block/pale_ale.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "growthcraft_cellar:block/fluid/fluid_overlay" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/block/pale_lager.json b/src/main/resources/assets/growthcraft_cellar/models/block/pale_lager.json new file mode 100644 index 0000000..11cc634 --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/block/pale_lager.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "growthcraft_cellar:block/fluid/fluid_overlay" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/block/pilsner_lager.json b/src/main/resources/assets/growthcraft_cellar/models/block/pilsner_lager.json new file mode 100644 index 0000000..11cc634 --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/block/pilsner_lager.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "growthcraft_cellar:block/fluid/fluid_overlay" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/block/purple_grape_juice.json b/src/main/resources/assets/growthcraft_cellar/models/block/purple_grape_juice.json new file mode 100644 index 0000000..11cc634 --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/block/purple_grape_juice.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "growthcraft_cellar:block/fluid/fluid_overlay" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/block/red_grape_juice.json b/src/main/resources/assets/growthcraft_cellar/models/block/red_grape_juice.json new file mode 100644 index 0000000..11cc634 --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/block/red_grape_juice.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "growthcraft_cellar:block/fluid/fluid_overlay" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/block/roaster.json b/src/main/resources/assets/growthcraft_cellar/models/block/roaster.json new file mode 100644 index 0000000..175eb72 --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/block/roaster.json @@ -0,0 +1,689 @@ +{ + "credit": "Made with Blockbench", + "ambientocclusion": false, + "render_type": "cutout", + "textures": { + "0": "growthcraft_cellar:block/brew_kettle/brew_kettle_base", + "1": "growthcraft_cellar:block/brew_kettle/brew_kettle_lid", + "2": "growthcraft_cellar:block/brew_kettle/brew_kettle_top", + "3": "growthcraft_cellar:block/brew_kettle/brew_kettle_side", + "missing": "growthcraft:block/missing", + "particle": "growthcraft_cellar:block/brew_kettle/brew_kettle_base" + }, + "elements": [ + { + "name": "foot_north_west", + "from": [ + 0, + 0, + 0 + ], + "to": [ + 2, + 2, + 2 + ], + "faces": { + "north": { + "uv": [ + 14, + 14, + 16, + 16 + ], + "texture": "#3" + }, + "east": { + "uv": [ + 0, + 14, + 2, + 16 + ], + "texture": "#3" + }, + "south": { + "uv": [ + 2, + 14, + 4, + 16 + ], + "texture": "#3" + }, + "west": { + "uv": [ + 2, + 14, + 4, + 16 + ], + "texture": "#3" + }, + "up": { + "uv": [ + 0, + 0, + 2, + 2 + ], + "texture": "#missing" + }, + "down": { + "uv": [ + 14, + 0, + 16, + 2 + ], + "texture": "#2" + } + } + }, + { + "name": "foot_south_west", + "from": [ + 0, + 0, + 14 + ], + "to": [ + 2, + 2, + 16 + ], + "faces": { + "north": { + "uv": [ + 14, + 14, + 16, + 16 + ], + "texture": "#3" + }, + "east": { + "uv": [ + 0, + 14, + 2, + 16 + ], + "texture": "#3" + }, + "south": { + "uv": [ + 0, + 14, + 2, + 16 + ], + "texture": "#3" + }, + "west": { + "uv": [ + 12, + 14, + 14, + 16 + ], + "texture": "#3" + }, + "up": { + "uv": [ + 0, + 0, + 2, + 2 + ], + "texture": "#missing" + }, + "down": { + "uv": [ + 14, + 14, + 16, + 16 + ], + "texture": "#2" + } + } + }, + { + "name": "foot_north_east", + "from": [ + 14, + 0, + 0 + ], + "to": [ + 16, + 2, + 2 + ], + "faces": { + "north": { + "uv": [ + 0, + 14, + 2, + 16 + ], + "texture": "#3" + }, + "east": { + "uv": [ + 14, + 14, + 16, + 16 + ], + "texture": "#3" + }, + "south": { + "uv": [ + 12, + 14, + 14, + 16 + ], + "texture": "#3" + }, + "west": { + "uv": [ + 2, + 14, + 4, + 16 + ], + "texture": "#3" + }, + "up": { + "uv": [ + 0, + 0, + 2, + 2 + ], + "texture": "#missing" + }, + "down": { + "uv": [ + 0, + 0, + 2, + 2 + ], + "texture": "#2" + } + } + }, + { + "name": "foot_south_east", + "from": [ + 14, + 0, + 14 + ], + "to": [ + 16, + 2, + 16 + ], + "faces": { + "north": { + "uv": [ + 0, + 14, + 2, + 16 + ], + "texture": "#3" + }, + "east": { + "uv": [ + 12, + 14, + 14, + 16 + ], + "texture": "#3" + }, + "south": { + "uv": [ + 14, + 14, + 16, + 16 + ], + "texture": "#3" + }, + "west": { + "uv": [ + 12, + 14, + 14, + 16 + ], + "texture": "#3" + }, + "up": { + "uv": [ + 0, + 0, + 2, + 2 + ], + "texture": "#missing" + }, + "down": { + "uv": [ + 0, + 14, + 2, + 16 + ], + "texture": "#2" + } + } + }, + { + "name": "body", + "from": [ + 0, + 2, + 0 + ], + "to": [ + 16, + 10, + 16 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 16, + 8 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 0, + 0, + 16, + 8 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 0, + 0, + 16, + 8 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 0, + 0, + 16, + 8 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#2" + }, + "down": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#0" + } + } + }, + { + "name": "topper", + "from": [ + 2, + 10, + 0 + ], + "to": [ + 14, + 14, + 16 + ], + "faces": { + "north": { + "uv": [ + 2, + 0, + 14, + 4 + ], + "texture": "#3" + }, + "east": { + "uv": [ + 0, + 0, + 16, + 4 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 2, + 0, + 14, + 4 + ], + "texture": "#3" + }, + "west": { + "uv": [ + 0, + 0, + 16, + 4 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#1" + }, + "down": { + "uv": [ + 0, + 0, + 12, + 16 + ], + "texture": "#missing" + } + } + }, + { + "name": "top_west_angle", + "from": [ + 1.75, + 10.1, + 0.001 + ], + "to": [ + 3.75, + 14.7, + 15.999 + ], + "rotation": { + "angle": -22.5, + "axis": "z", + "origin": [ + 0, + 13, + 0 + ] + }, + "faces": { + "north": { + "uv": [ + 0, + 0, + 2, + 4.6 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 0, + 0, + 15.998, + 4.6 + ], + "texture": "#missing" + }, + "south": { + "uv": [ + 2, + 0, + 4, + 4.6 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 0, + 0, + 15.998, + 4.6 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 0, + 0, + 2, + 15.998 + ], + "texture": "#missing" + }, + "down": { + "uv": [ + 0, + 0, + 2, + 15.998 + ], + "texture": "#missing" + } + } + }, + { + "name": "top_west_angle", + "from": [ + 12.25, + 10.1, + 0.001 + ], + "to": [ + 14.25, + 14.7, + 15.999 + ], + "rotation": { + "angle": 22.5, + "axis": "z", + "origin": [ + 16, + 13, + 0 + ] + }, + "faces": { + "north": { + "uv": [ + 14, + 0, + 16, + 4.6 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 0, + 0, + 15.998, + 4.6 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 0, + 0, + 2, + 4.6 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 0, + 0, + 15.998, + 4.6 + ], + "texture": "#missing" + }, + "up": { + "uv": [ + 0, + 0, + 2, + 15.998 + ], + "texture": "#missing" + }, + "down": { + "uv": [ + 0, + 0, + 2, + 15.998 + ], + "texture": "#missing" + } + } + } + ], + "display": { + "gui": { + "rotation": [ + 30, + 225, + 0 + ], + "translation": [ + 0, + 0, + 0 + ], + "scale": [ + 0.625, + 0.625, + 0.625 + ] + }, + "ground": { + "rotation": [ + 0, + 0, + 0 + ], + "translation": [ + 0, + 3, + 0 + ], + "scale": [ + 0.25, + 0.25, + 0.25 + ] + }, + "fixed": { + "rotation": [ + 0, + 0, + 0 + ], + "translation": [ + 0, + 0, + 0 + ], + "scale": [ + 0.5, + 0.5, + 0.5 + ] + }, + "thirdperson_righthand": { + "rotation": [ + 75, + 45, + 0 + ], + "translation": [ + 0, + 2.5, + 0 + ], + "scale": [ + 0.375, + 0.375, + 0.375 + ] + }, + "firstperson_righthand": { + "rotation": [ + 0, + 45, + 0 + ], + "translation": [ + 0, + 0, + 0 + ], + "scale": [ + 0.4, + 0.4, + 0.4 + ] + }, + "firstperson_lefthand": { + "rotation": [ + 0, + 225, + 0 + ], + "translation": [ + 0, + 0, + 0 + ], + "scale": [ + 0.4, + 0.4, + 0.4 + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/block/roaster_chimney_level_1.json b/src/main/resources/assets/growthcraft_cellar/models/block/roaster_chimney_level_1.json new file mode 100644 index 0000000..7b46b04 --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/block/roaster_chimney_level_1.json @@ -0,0 +1,211 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "0": "growthcraft_cellar:block/brew_kettle/brew_kettle_base", + "1": "growthcraft_cellar:block/brew_kettle/brew_kettle_lid", + "2": "growthcraft_cellar:block/brew_kettle/brew_kettle_top", + "3": "growthcraft_cellar:block/brew_kettle/brew_kettle_side", + "particle": "growthcraft_cellar:block/brew_kettle/brew_kettle_base", + "missing": "growthcraft:block/missing" + }, + "elements": [ + { + "name": "foot_north_west", + "from": [0, 0, 0], + "to": [2, 2, 2], + "faces": { + "north": {"uv": [14, 14, 16, 16], "texture": "#3"}, + "east": {"uv": [0, 14, 2, 16], "texture": "#3"}, + "south": {"uv": [2, 14, 4, 16], "texture": "#3"}, + "west": {"uv": [2, 14, 4, 16], "texture": "#3"}, + "up": {"uv": [0, 0, 2, 2], "texture": "#missing"}, + "down": {"uv": [14, 0, 16, 2], "texture": "#2"} + } + }, + { + "name": "foot_south_west", + "from": [0, 0, 14], + "to": [2, 2, 16], + "faces": { + "north": {"uv": [14, 14, 16, 16], "texture": "#3"}, + "east": {"uv": [0, 14, 2, 16], "texture": "#3"}, + "south": {"uv": [0, 14, 2, 16], "texture": "#3"}, + "west": {"uv": [12, 14, 14, 16], "texture": "#3"}, + "up": {"uv": [0, 0, 2, 2], "texture": "#missing"}, + "down": {"uv": [14, 14, 16, 16], "texture": "#2"} + } + }, + { + "name": "foot_north_east", + "from": [14, 0, 0], + "to": [16, 2, 2], + "faces": { + "north": {"uv": [0, 14, 2, 16], "texture": "#3"}, + "east": {"uv": [14, 14, 16, 16], "texture": "#3"}, + "south": {"uv": [12, 14, 14, 16], "texture": "#3"}, + "west": {"uv": [2, 14, 4, 16], "texture": "#3"}, + "up": {"uv": [0, 0, 2, 2], "texture": "#missing"}, + "down": {"uv": [0, 0, 2, 2], "texture": "#2"} + } + }, + { + "name": "foot_south_east", + "from": [14, 0, 14], + "to": [16, 2, 16], + "faces": { + "north": {"uv": [0, 14, 2, 16], "texture": "#3"}, + "east": {"uv": [12, 14, 14, 16], "texture": "#3"}, + "south": {"uv": [14, 14, 16, 16], "texture": "#3"}, + "west": {"uv": [12, 14, 14, 16], "texture": "#3"}, + "up": {"uv": [0, 0, 2, 2], "texture": "#missing"}, + "down": {"uv": [0, 14, 2, 16], "texture": "#2"} + } + }, + { + "name": "body", + "from": [0, 2, 0], + "to": [16, 10, 16], + "faces": { + "north": {"uv": [0, 0, 16, 8], "texture": "#1"}, + "east": {"uv": [0, 0, 16, 8], "texture": "#1"}, + "south": {"uv": [0, 0, 16, 8], "texture": "#1"}, + "west": {"uv": [0, 0, 16, 8], "texture": "#1"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#2"}, + "down": {"uv": [0, 0, 16, 16], "texture": "#0"} + } + }, + { + "name": "topper", + "from": [2, 10, 0], + "to": [14, 14, 16], + "faces": { + "north": {"uv": [2, 0, 14, 4], "texture": "#3"}, + "east": {"uv": [0, 0, 16, 4], "texture": "#1"}, + "south": {"uv": [2, 0, 14, 4], "texture": "#3"}, + "west": {"uv": [0, 0, 16, 4], "texture": "#1"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#1"}, + "down": {"uv": [0, 0, 12, 16], "texture": "#missing"} + } + }, + { + "name": "top_west_angle", + "from": [1.75, 10.1, 0.001], + "to": [3.75, 14.7, 15.999], + "rotation": {"angle": -22.5, "axis": "z", "origin": [0, 13, 0]}, + "faces": { + "north": {"uv": [0, 0, 2, 4.6], "texture": "#1"}, + "east": {"uv": [0, 0, 15.998, 4.6], "texture": "#missing"}, + "south": {"uv": [2, 0, 4, 4.6], "texture": "#1"}, + "west": {"uv": [0, 0, 15.998, 4.6], "texture": "#1"}, + "up": {"uv": [0, 0, 2, 15.998], "texture": "#missing"}, + "down": {"uv": [0, 0, 2, 15.998], "texture": "#missing"} + } + }, + { + "name": "top_west_angle", + "from": [12.25, 10.1, 0.001], + "to": [14.25, 14.7, 15.999], + "rotation": {"angle": 22.5, "axis": "z", "origin": [16, 13, 0]}, + "faces": { + "north": {"uv": [14, 0, 16, 4.6], "texture": "#1"}, + "east": {"uv": [0, 0, 15.998, 4.6], "texture": "#1"}, + "south": {"uv": [0, 0, 2, 4.6], "texture": "#1"}, + "west": {"uv": [0, 0, 15.998, 4.6], "texture": "#missing"}, + "up": {"uv": [0, 0, 2, 15.998], "texture": "#missing"}, + "down": {"uv": [0, 0, 2, 15.998], "texture": "#missing"} + } + }, + { + "name": "chimney_top", + "from": [6, 22, 11], + "to": [10, 23, 15], + "faces": { + "north": {"uv": [1, 2, 5, 3], "texture": "#3"}, + "east": {"uv": [1, 2, 5, 3], "texture": "#3"}, + "south": {"uv": [1, 2, 5, 3], "texture": "#3"}, + "west": {"uv": [1, 2, 5, 3], "texture": "#3"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#0"}, + "down": {"uv": [0, 0, 16, 16], "texture": "#0"} + } + }, + { + "name": "chimney_west", + "from": [6, 13, 11], + "to": [7, 22, 15], + "faces": { + "north": {"uv": [4, 3, 5, 12], "texture": "#3"}, + "east": {"uv": [1, 3, 5, 12], "texture": "#3"}, + "south": {"uv": [1, 3, 2, 12], "texture": "#3"}, + "west": {"uv": [1, 3, 5, 12], "texture": "#3"}, + "up": {"uv": [0, 0, 1, 4], "texture": "#missing"}, + "down": {"uv": [0, 0, 1, 4], "texture": "#missing"} + } + }, + { + "name": "chimney_east", + "from": [9, 13, 11], + "to": [10, 22, 15], + "faces": { + "north": {"uv": [1, 3, 2, 12], "texture": "#3"}, + "east": {"uv": [1, 3, 5, 12], "texture": "#3"}, + "south": {"uv": [4, 3, 5, 12], "texture": "#3"}, + "west": {"uv": [1, 3, 5, 12], "texture": "#3"}, + "up": {"uv": [0, 0, 1, 4], "texture": "#missing"}, + "down": {"uv": [0, 0, 1, 4], "texture": "#missing"} + } + }, + { + "name": "chimney_south", + "from": [7, 13, 14], + "to": [9, 22, 15], + "faces": { + "north": {"uv": [2, 3, 4, 12], "texture": "#3"}, + "east": {"uv": [0, 0, 1, 9], "texture": "#missing"}, + "south": {"uv": [2, 3, 4, 12], "texture": "#3"}, + "west": {"uv": [0, 0, 1, 9], "texture": "#missing"}, + "up": {"uv": [0, 0, 2, 1], "texture": "#missing"}, + "down": {"uv": [0, 0, 2, 1], "texture": "#missing"} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson_righthand": { + "rotation": [0, 45, 0], + "scale": [0.4, 0.4, 0.4] + }, + "firstperson_lefthand": { + "rotation": [0, 225, 0], + "scale": [0.4, 0.4, 0.4] + }, + "ground": { + "translation": [0, 3, 0], + "scale": [0.25, 0.25, 0.25] + }, + "gui": { + "rotation": [30, 225, 0], + "scale": [0.625, 0.625, 0.625] + }, + "fixed": { + "scale": [0.5, 0.5, 0.5] + } + }, + "groups": [ + { + "name": "roaster", + "origin": [8, 8, 8], + "color": 0, + "children": [0, 1, 2, 3, 4, 5, 6, 7] + }, + { + "name": "chimney", + "origin": [0, 0, 0], + "color": 0, + "children": [8, 9, 10, 11] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/block/roaster_chimney_level_2.json b/src/main/resources/assets/growthcraft_cellar/models/block/roaster_chimney_level_2.json new file mode 100644 index 0000000..83c695f --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/block/roaster_chimney_level_2.json @@ -0,0 +1,211 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "0": "growthcraft_cellar:block/brew_kettle/brew_kettle_base", + "1": "growthcraft_cellar:block/brew_kettle/brew_kettle_lid", + "2": "growthcraft_cellar:block/brew_kettle/brew_kettle_top", + "3": "growthcraft_cellar:block/brew_kettle/brew_kettle_side", + "particle": "growthcraft_cellar:block/brew_kettle/brew_kettle_base", + "missing": "growthcraft:block/missing" + }, + "elements": [ + { + "name": "foot_north_west", + "from": [0, 0, 0], + "to": [2, 2, 2], + "faces": { + "north": {"uv": [14, 14, 16, 16], "texture": "#3"}, + "east": {"uv": [0, 14, 2, 16], "texture": "#3"}, + "south": {"uv": [2, 14, 4, 16], "texture": "#3"}, + "west": {"uv": [2, 14, 4, 16], "texture": "#3"}, + "up": {"uv": [0, 0, 2, 2], "texture": "#missing"}, + "down": {"uv": [14, 0, 16, 2], "texture": "#2"} + } + }, + { + "name": "foot_south_west", + "from": [0, 0, 14], + "to": [2, 2, 16], + "faces": { + "north": {"uv": [14, 14, 16, 16], "texture": "#3"}, + "east": {"uv": [0, 14, 2, 16], "texture": "#3"}, + "south": {"uv": [0, 14, 2, 16], "texture": "#3"}, + "west": {"uv": [12, 14, 14, 16], "texture": "#3"}, + "up": {"uv": [0, 0, 2, 2], "texture": "#missing"}, + "down": {"uv": [14, 14, 16, 16], "texture": "#2"} + } + }, + { + "name": "foot_north_east", + "from": [14, 0, 0], + "to": [16, 2, 2], + "faces": { + "north": {"uv": [0, 14, 2, 16], "texture": "#3"}, + "east": {"uv": [14, 14, 16, 16], "texture": "#3"}, + "south": {"uv": [12, 14, 14, 16], "texture": "#3"}, + "west": {"uv": [2, 14, 4, 16], "texture": "#3"}, + "up": {"uv": [0, 0, 2, 2], "texture": "#missing"}, + "down": {"uv": [0, 0, 2, 2], "texture": "#2"} + } + }, + { + "name": "foot_south_east", + "from": [14, 0, 14], + "to": [16, 2, 16], + "faces": { + "north": {"uv": [0, 14, 2, 16], "texture": "#3"}, + "east": {"uv": [12, 14, 14, 16], "texture": "#3"}, + "south": {"uv": [14, 14, 16, 16], "texture": "#3"}, + "west": {"uv": [12, 14, 14, 16], "texture": "#3"}, + "up": {"uv": [0, 0, 2, 2], "texture": "#missing"}, + "down": {"uv": [0, 14, 2, 16], "texture": "#2"} + } + }, + { + "name": "body", + "from": [0, 2, 0], + "to": [16, 10, 16], + "faces": { + "north": {"uv": [0, 0, 16, 8], "texture": "#1"}, + "east": {"uv": [0, 0, 16, 8], "texture": "#1"}, + "south": {"uv": [0, 0, 16, 8], "texture": "#1"}, + "west": {"uv": [0, 0, 16, 8], "texture": "#1"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#2"}, + "down": {"uv": [0, 0, 16, 16], "texture": "#0"} + } + }, + { + "name": "topper", + "from": [2, 10, 0], + "to": [14, 14, 16], + "faces": { + "north": {"uv": [2, 0, 14, 4], "texture": "#3"}, + "east": {"uv": [0, 0, 16, 4], "texture": "#1"}, + "south": {"uv": [2, 0, 14, 4], "texture": "#3"}, + "west": {"uv": [0, 0, 16, 4], "texture": "#1"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#1"}, + "down": {"uv": [0, 0, 12, 16], "texture": "#missing"} + } + }, + { + "name": "top_west_angle", + "from": [1.75, 10.1, 0.001], + "to": [3.75, 14.7, 15.999], + "rotation": {"angle": -22.5, "axis": "z", "origin": [0, 13, 0]}, + "faces": { + "north": {"uv": [0, 0, 2, 4.6], "texture": "#1"}, + "east": {"uv": [0, 0, 15.998, 4.6], "texture": "#missing"}, + "south": {"uv": [2, 0, 4, 4.6], "texture": "#1"}, + "west": {"uv": [0, 0, 15.998, 4.6], "texture": "#1"}, + "up": {"uv": [0, 0, 2, 15.998], "texture": "#missing"}, + "down": {"uv": [0, 0, 2, 15.998], "texture": "#missing"} + } + }, + { + "name": "top_west_angle", + "from": [12.25, 10.1, 0.001], + "to": [14.25, 14.7, 15.999], + "rotation": {"angle": 22.5, "axis": "z", "origin": [16, 13, 0]}, + "faces": { + "north": {"uv": [14, 0, 16, 4.6], "texture": "#1"}, + "east": {"uv": [0, 0, 15.998, 4.6], "texture": "#1"}, + "south": {"uv": [0, 0, 2, 4.6], "texture": "#1"}, + "west": {"uv": [0, 0, 15.998, 4.6], "texture": "#missing"}, + "up": {"uv": [0, 0, 2, 15.998], "texture": "#missing"}, + "down": {"uv": [0, 0, 2, 15.998], "texture": "#missing"} + } + }, + { + "name": "chimney_top", + "from": [6, 21, 11], + "to": [10, 22, 15], + "faces": { + "north": {"uv": [1, 2, 5, 3], "texture": "#3"}, + "east": {"uv": [1, 2, 5, 3], "texture": "#3"}, + "south": {"uv": [1, 2, 5, 3], "texture": "#3"}, + "west": {"uv": [1, 2, 5, 3], "texture": "#3"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#0"}, + "down": {"uv": [0, 0, 16, 16], "texture": "#0"} + } + }, + { + "name": "chimney_west", + "from": [6, 12, 11], + "to": [7, 21, 15], + "faces": { + "north": {"uv": [4, 3, 5, 12], "texture": "#3"}, + "east": {"uv": [1, 3, 5, 12], "texture": "#3"}, + "south": {"uv": [1, 3, 2, 12], "texture": "#3"}, + "west": {"uv": [1, 3, 5, 12], "texture": "#3"}, + "up": {"uv": [0, 0, 1, 4], "texture": "#missing"}, + "down": {"uv": [0, 0, 1, 4], "texture": "#missing"} + } + }, + { + "name": "chimney_east", + "from": [9, 12, 11], + "to": [10, 21, 15], + "faces": { + "north": {"uv": [1, 3, 2, 12], "texture": "#3"}, + "east": {"uv": [1, 3, 5, 12], "texture": "#3"}, + "south": {"uv": [4, 3, 5, 12], "texture": "#3"}, + "west": {"uv": [1, 3, 5, 12], "texture": "#3"}, + "up": {"uv": [0, 0, 1, 4], "texture": "#missing"}, + "down": {"uv": [0, 0, 1, 4], "texture": "#missing"} + } + }, + { + "name": "chimney_south", + "from": [7, 12, 14], + "to": [9, 21, 15], + "faces": { + "north": {"uv": [2, 3, 4, 12], "texture": "#3"}, + "east": {"uv": [0, 0, 1, 9], "texture": "#missing"}, + "south": {"uv": [2, 3, 4, 12], "texture": "#3"}, + "west": {"uv": [0, 0, 1, 9], "texture": "#missing"}, + "up": {"uv": [0, 0, 2, 1], "texture": "#missing"}, + "down": {"uv": [0, 0, 2, 1], "texture": "#missing"} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson_righthand": { + "rotation": [0, 45, 0], + "scale": [0.4, 0.4, 0.4] + }, + "firstperson_lefthand": { + "rotation": [0, 225, 0], + "scale": [0.4, 0.4, 0.4] + }, + "ground": { + "translation": [0, 3, 0], + "scale": [0.25, 0.25, 0.25] + }, + "gui": { + "rotation": [30, 225, 0], + "scale": [0.625, 0.625, 0.625] + }, + "fixed": { + "scale": [0.5, 0.5, 0.5] + } + }, + "groups": [ + { + "name": "roaster", + "origin": [8, 8, 8], + "color": 0, + "children": [0, 1, 2, 3, 4, 5, 6, 7] + }, + { + "name": "chimney", + "origin": [0, 0, 0], + "color": 0, + "children": [8, 9, 10, 11] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/block/roaster_chimney_level_3.json b/src/main/resources/assets/growthcraft_cellar/models/block/roaster_chimney_level_3.json new file mode 100644 index 0000000..ebceed0 --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/block/roaster_chimney_level_3.json @@ -0,0 +1,211 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "0": "growthcraft_cellar:block/brew_kettle/brew_kettle_base", + "1": "growthcraft_cellar:block/brew_kettle/brew_kettle_lid", + "2": "growthcraft_cellar:block/brew_kettle/brew_kettle_top", + "3": "growthcraft_cellar:block/brew_kettle/brew_kettle_side", + "particle": "growthcraft_cellar:block/brew_kettle/brew_kettle_base", + "missing": "growthcraft:block/missing" + }, + "elements": [ + { + "name": "foot_north_west", + "from": [0, 0, 0], + "to": [2, 2, 2], + "faces": { + "north": {"uv": [14, 14, 16, 16], "texture": "#3"}, + "east": {"uv": [0, 14, 2, 16], "texture": "#3"}, + "south": {"uv": [2, 14, 4, 16], "texture": "#3"}, + "west": {"uv": [2, 14, 4, 16], "texture": "#3"}, + "up": {"uv": [0, 0, 2, 2], "texture": "#missing"}, + "down": {"uv": [14, 0, 16, 2], "texture": "#2"} + } + }, + { + "name": "foot_south_west", + "from": [0, 0, 14], + "to": [2, 2, 16], + "faces": { + "north": {"uv": [14, 14, 16, 16], "texture": "#3"}, + "east": {"uv": [0, 14, 2, 16], "texture": "#3"}, + "south": {"uv": [0, 14, 2, 16], "texture": "#3"}, + "west": {"uv": [12, 14, 14, 16], "texture": "#3"}, + "up": {"uv": [0, 0, 2, 2], "texture": "#missing"}, + "down": {"uv": [14, 14, 16, 16], "texture": "#2"} + } + }, + { + "name": "foot_north_east", + "from": [14, 0, 0], + "to": [16, 2, 2], + "faces": { + "north": {"uv": [0, 14, 2, 16], "texture": "#3"}, + "east": {"uv": [14, 14, 16, 16], "texture": "#3"}, + "south": {"uv": [12, 14, 14, 16], "texture": "#3"}, + "west": {"uv": [2, 14, 4, 16], "texture": "#3"}, + "up": {"uv": [0, 0, 2, 2], "texture": "#missing"}, + "down": {"uv": [0, 0, 2, 2], "texture": "#2"} + } + }, + { + "name": "foot_south_east", + "from": [14, 0, 14], + "to": [16, 2, 16], + "faces": { + "north": {"uv": [0, 14, 2, 16], "texture": "#3"}, + "east": {"uv": [12, 14, 14, 16], "texture": "#3"}, + "south": {"uv": [14, 14, 16, 16], "texture": "#3"}, + "west": {"uv": [12, 14, 14, 16], "texture": "#3"}, + "up": {"uv": [0, 0, 2, 2], "texture": "#missing"}, + "down": {"uv": [0, 14, 2, 16], "texture": "#2"} + } + }, + { + "name": "body", + "from": [0, 2, 0], + "to": [16, 10, 16], + "faces": { + "north": {"uv": [0, 0, 16, 8], "texture": "#1"}, + "east": {"uv": [0, 0, 16, 8], "texture": "#1"}, + "south": {"uv": [0, 0, 16, 8], "texture": "#1"}, + "west": {"uv": [0, 0, 16, 8], "texture": "#1"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#2"}, + "down": {"uv": [0, 0, 16, 16], "texture": "#0"} + } + }, + { + "name": "topper", + "from": [2, 10, 0], + "to": [14, 14, 16], + "faces": { + "north": {"uv": [2, 0, 14, 4], "texture": "#3"}, + "east": {"uv": [0, 0, 16, 4], "texture": "#1"}, + "south": {"uv": [2, 0, 14, 4], "texture": "#3"}, + "west": {"uv": [0, 0, 16, 4], "texture": "#1"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#1"}, + "down": {"uv": [0, 0, 12, 16], "texture": "#missing"} + } + }, + { + "name": "top_west_angle", + "from": [1.75, 10.1, 0.001], + "to": [3.75, 14.7, 15.999], + "rotation": {"angle": -22.5, "axis": "z", "origin": [0, 13, 0]}, + "faces": { + "north": {"uv": [0, 0, 2, 4.6], "texture": "#1"}, + "east": {"uv": [0, 0, 15.998, 4.6], "texture": "#missing"}, + "south": {"uv": [2, 0, 4, 4.6], "texture": "#1"}, + "west": {"uv": [0, 0, 15.998, 4.6], "texture": "#1"}, + "up": {"uv": [0, 0, 2, 15.998], "texture": "#missing"}, + "down": {"uv": [0, 0, 2, 15.998], "texture": "#missing"} + } + }, + { + "name": "top_west_angle", + "from": [12.25, 10.1, 0.001], + "to": [14.25, 14.7, 15.999], + "rotation": {"angle": 22.5, "axis": "z", "origin": [16, 13, 0]}, + "faces": { + "north": {"uv": [14, 0, 16, 4.6], "texture": "#1"}, + "east": {"uv": [0, 0, 15.998, 4.6], "texture": "#1"}, + "south": {"uv": [0, 0, 2, 4.6], "texture": "#1"}, + "west": {"uv": [0, 0, 15.998, 4.6], "texture": "#missing"}, + "up": {"uv": [0, 0, 2, 15.998], "texture": "#missing"}, + "down": {"uv": [0, 0, 2, 15.998], "texture": "#missing"} + } + }, + { + "name": "chimney_top", + "from": [6, 20, 11], + "to": [10, 21, 15], + "faces": { + "north": {"uv": [1, 2, 5, 3], "texture": "#3"}, + "east": {"uv": [1, 2, 5, 3], "texture": "#3"}, + "south": {"uv": [1, 2, 5, 3], "texture": "#3"}, + "west": {"uv": [1, 2, 5, 3], "texture": "#3"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#0"}, + "down": {"uv": [0, 0, 16, 16], "texture": "#0"} + } + }, + { + "name": "chimney_west", + "from": [6, 11, 11], + "to": [7, 20, 15], + "faces": { + "north": {"uv": [4, 3, 5, 12], "texture": "#3"}, + "east": {"uv": [1, 3, 5, 12], "texture": "#3"}, + "south": {"uv": [1, 3, 2, 12], "texture": "#3"}, + "west": {"uv": [1, 3, 5, 12], "texture": "#3"}, + "up": {"uv": [0, 0, 1, 4], "texture": "#missing"}, + "down": {"uv": [0, 0, 1, 4], "texture": "#missing"} + } + }, + { + "name": "chimney_east", + "from": [9, 11, 11], + "to": [10, 20, 15], + "faces": { + "north": {"uv": [1, 3, 2, 12], "texture": "#3"}, + "east": {"uv": [1, 3, 5, 12], "texture": "#3"}, + "south": {"uv": [4, 3, 5, 12], "texture": "#3"}, + "west": {"uv": [1, 3, 5, 12], "texture": "#3"}, + "up": {"uv": [0, 0, 1, 4], "texture": "#missing"}, + "down": {"uv": [0, 0, 1, 4], "texture": "#missing"} + } + }, + { + "name": "chimney_south", + "from": [7, 11, 14], + "to": [9, 20, 15], + "faces": { + "north": {"uv": [2, 3, 4, 12], "texture": "#3"}, + "east": {"uv": [0, 0, 1, 9], "texture": "#missing"}, + "south": {"uv": [2, 3, 4, 12], "texture": "#3"}, + "west": {"uv": [0, 0, 1, 9], "texture": "#missing"}, + "up": {"uv": [0, 0, 2, 1], "texture": "#missing"}, + "down": {"uv": [0, 0, 2, 1], "texture": "#missing"} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson_righthand": { + "rotation": [0, 45, 0], + "scale": [0.4, 0.4, 0.4] + }, + "firstperson_lefthand": { + "rotation": [0, 225, 0], + "scale": [0.4, 0.4, 0.4] + }, + "ground": { + "translation": [0, 3, 0], + "scale": [0.25, 0.25, 0.25] + }, + "gui": { + "rotation": [30, 225, 0], + "scale": [0.625, 0.625, 0.625] + }, + "fixed": { + "scale": [0.5, 0.5, 0.5] + } + }, + "groups": [ + { + "name": "roaster", + "origin": [8, 8, 8], + "color": 0, + "children": [0, 1, 2, 3, 4, 5, 6, 7] + }, + { + "name": "chimney", + "origin": [0, 0, 0], + "color": 0, + "children": [8, 9, 10, 11] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/block/roaster_chimney_level_4.json b/src/main/resources/assets/growthcraft_cellar/models/block/roaster_chimney_level_4.json new file mode 100644 index 0000000..9897cfb --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/block/roaster_chimney_level_4.json @@ -0,0 +1,211 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "0": "growthcraft_cellar:block/brew_kettle/brew_kettle_base", + "1": "growthcraft_cellar:block/brew_kettle/brew_kettle_lid", + "2": "growthcraft_cellar:block/brew_kettle/brew_kettle_top", + "3": "growthcraft_cellar:block/brew_kettle/brew_kettle_side", + "particle": "growthcraft_cellar:block/brew_kettle/brew_kettle_base", + "missing": "growthcraft:block/missing" + }, + "elements": [ + { + "name": "foot_north_west", + "from": [0, 0, 0], + "to": [2, 2, 2], + "faces": { + "north": {"uv": [14, 14, 16, 16], "texture": "#3"}, + "east": {"uv": [0, 14, 2, 16], "texture": "#3"}, + "south": {"uv": [2, 14, 4, 16], "texture": "#3"}, + "west": {"uv": [2, 14, 4, 16], "texture": "#3"}, + "up": {"uv": [0, 0, 2, 2], "texture": "#missing"}, + "down": {"uv": [14, 0, 16, 2], "texture": "#2"} + } + }, + { + "name": "foot_south_west", + "from": [0, 0, 14], + "to": [2, 2, 16], + "faces": { + "north": {"uv": [14, 14, 16, 16], "texture": "#3"}, + "east": {"uv": [0, 14, 2, 16], "texture": "#3"}, + "south": {"uv": [0, 14, 2, 16], "texture": "#3"}, + "west": {"uv": [12, 14, 14, 16], "texture": "#3"}, + "up": {"uv": [0, 0, 2, 2], "texture": "#missing"}, + "down": {"uv": [14, 14, 16, 16], "texture": "#2"} + } + }, + { + "name": "foot_north_east", + "from": [14, 0, 0], + "to": [16, 2, 2], + "faces": { + "north": {"uv": [0, 14, 2, 16], "texture": "#3"}, + "east": {"uv": [14, 14, 16, 16], "texture": "#3"}, + "south": {"uv": [12, 14, 14, 16], "texture": "#3"}, + "west": {"uv": [2, 14, 4, 16], "texture": "#3"}, + "up": {"uv": [0, 0, 2, 2], "texture": "#missing"}, + "down": {"uv": [0, 0, 2, 2], "texture": "#2"} + } + }, + { + "name": "foot_south_east", + "from": [14, 0, 14], + "to": [16, 2, 16], + "faces": { + "north": {"uv": [0, 14, 2, 16], "texture": "#3"}, + "east": {"uv": [12, 14, 14, 16], "texture": "#3"}, + "south": {"uv": [14, 14, 16, 16], "texture": "#3"}, + "west": {"uv": [12, 14, 14, 16], "texture": "#3"}, + "up": {"uv": [0, 0, 2, 2], "texture": "#missing"}, + "down": {"uv": [0, 14, 2, 16], "texture": "#2"} + } + }, + { + "name": "body", + "from": [0, 2, 0], + "to": [16, 10, 16], + "faces": { + "north": {"uv": [0, 0, 16, 8], "texture": "#1"}, + "east": {"uv": [0, 0, 16, 8], "texture": "#1"}, + "south": {"uv": [0, 0, 16, 8], "texture": "#1"}, + "west": {"uv": [0, 0, 16, 8], "texture": "#1"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#2"}, + "down": {"uv": [0, 0, 16, 16], "texture": "#0"} + } + }, + { + "name": "topper", + "from": [2, 10, 0], + "to": [14, 14, 16], + "faces": { + "north": {"uv": [2, 0, 14, 4], "texture": "#3"}, + "east": {"uv": [0, 0, 16, 4], "texture": "#1"}, + "south": {"uv": [2, 0, 14, 4], "texture": "#3"}, + "west": {"uv": [0, 0, 16, 4], "texture": "#1"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#1"}, + "down": {"uv": [0, 0, 12, 16], "texture": "#missing"} + } + }, + { + "name": "top_west_angle", + "from": [1.75, 10.1, 0.001], + "to": [3.75, 14.7, 15.999], + "rotation": {"angle": -22.5, "axis": "z", "origin": [0, 13, 0]}, + "faces": { + "north": {"uv": [0, 0, 2, 4.6], "texture": "#1"}, + "east": {"uv": [0, 0, 15.998, 4.6], "texture": "#missing"}, + "south": {"uv": [2, 0, 4, 4.6], "texture": "#1"}, + "west": {"uv": [0, 0, 15.998, 4.6], "texture": "#1"}, + "up": {"uv": [0, 0, 2, 15.998], "texture": "#missing"}, + "down": {"uv": [0, 0, 2, 15.998], "texture": "#missing"} + } + }, + { + "name": "top_west_angle", + "from": [12.25, 10.1, 0.001], + "to": [14.25, 14.7, 15.999], + "rotation": {"angle": 22.5, "axis": "z", "origin": [16, 13, 0]}, + "faces": { + "north": {"uv": [14, 0, 16, 4.6], "texture": "#1"}, + "east": {"uv": [0, 0, 15.998, 4.6], "texture": "#1"}, + "south": {"uv": [0, 0, 2, 4.6], "texture": "#1"}, + "west": {"uv": [0, 0, 15.998, 4.6], "texture": "#missing"}, + "up": {"uv": [0, 0, 2, 15.998], "texture": "#missing"}, + "down": {"uv": [0, 0, 2, 15.998], "texture": "#missing"} + } + }, + { + "name": "chimney_top", + "from": [6, 19, 11], + "to": [10, 20, 15], + "faces": { + "north": {"uv": [1, 2, 5, 3], "texture": "#3"}, + "east": {"uv": [1, 2, 5, 3], "texture": "#3"}, + "south": {"uv": [1, 2, 5, 3], "texture": "#3"}, + "west": {"uv": [1, 2, 5, 3], "texture": "#3"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#0"}, + "down": {"uv": [0, 0, 16, 16], "texture": "#0"} + } + }, + { + "name": "chimney_west", + "from": [6, 10, 11], + "to": [7, 19, 15], + "faces": { + "north": {"uv": [4, 3, 5, 12], "texture": "#3"}, + "east": {"uv": [1, 3, 5, 12], "texture": "#3"}, + "south": {"uv": [1, 3, 2, 12], "texture": "#3"}, + "west": {"uv": [1, 3, 5, 12], "texture": "#3"}, + "up": {"uv": [0, 0, 1, 4], "texture": "#missing"}, + "down": {"uv": [0, 0, 1, 4], "texture": "#missing"} + } + }, + { + "name": "chimney_east", + "from": [9, 10, 11], + "to": [10, 19, 15], + "faces": { + "north": {"uv": [1, 3, 2, 12], "texture": "#3"}, + "east": {"uv": [1, 3, 5, 12], "texture": "#3"}, + "south": {"uv": [4, 3, 5, 12], "texture": "#3"}, + "west": {"uv": [1, 3, 5, 12], "texture": "#3"}, + "up": {"uv": [0, 0, 1, 4], "texture": "#missing"}, + "down": {"uv": [0, 0, 1, 4], "texture": "#missing"} + } + }, + { + "name": "chimney_south", + "from": [7, 10, 14], + "to": [9, 19, 15], + "faces": { + "north": {"uv": [2, 3, 4, 12], "texture": "#3"}, + "east": {"uv": [0, 0, 1, 9], "texture": "#missing"}, + "south": {"uv": [2, 3, 4, 12], "texture": "#3"}, + "west": {"uv": [0, 0, 1, 9], "texture": "#missing"}, + "up": {"uv": [0, 0, 2, 1], "texture": "#missing"}, + "down": {"uv": [0, 0, 2, 1], "texture": "#missing"} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson_righthand": { + "rotation": [0, 45, 0], + "scale": [0.4, 0.4, 0.4] + }, + "firstperson_lefthand": { + "rotation": [0, 225, 0], + "scale": [0.4, 0.4, 0.4] + }, + "ground": { + "translation": [0, 3, 0], + "scale": [0.25, 0.25, 0.25] + }, + "gui": { + "rotation": [30, 225, 0], + "scale": [0.625, 0.625, 0.625] + }, + "fixed": { + "scale": [0.5, 0.5, 0.5] + } + }, + "groups": [ + { + "name": "roaster", + "origin": [8, 8, 8], + "color": 0, + "children": [0, 1, 2, 3, 4, 5, 6, 7] + }, + { + "name": "chimney", + "origin": [0, 0, 0], + "color": 0, + "children": [8, 9, 10, 11] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/block/roaster_chimney_level_5.json b/src/main/resources/assets/growthcraft_cellar/models/block/roaster_chimney_level_5.json new file mode 100644 index 0000000..e44cf36 --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/block/roaster_chimney_level_5.json @@ -0,0 +1,211 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "0": "growthcraft_cellar:block/brew_kettle/brew_kettle_base", + "1": "growthcraft_cellar:block/brew_kettle/brew_kettle_lid", + "2": "growthcraft_cellar:block/brew_kettle/brew_kettle_top", + "3": "growthcraft_cellar:block/brew_kettle/brew_kettle_side", + "particle": "growthcraft_cellar:block/brew_kettle/brew_kettle_base", + "missing": "growthcraft:block/missing" + }, + "elements": [ + { + "name": "foot_north_west", + "from": [0, 0, 0], + "to": [2, 2, 2], + "faces": { + "north": {"uv": [14, 14, 16, 16], "texture": "#3"}, + "east": {"uv": [0, 14, 2, 16], "texture": "#3"}, + "south": {"uv": [2, 14, 4, 16], "texture": "#3"}, + "west": {"uv": [2, 14, 4, 16], "texture": "#3"}, + "up": {"uv": [0, 0, 2, 2], "texture": "#missing"}, + "down": {"uv": [14, 0, 16, 2], "texture": "#2"} + } + }, + { + "name": "foot_south_west", + "from": [0, 0, 14], + "to": [2, 2, 16], + "faces": { + "north": {"uv": [14, 14, 16, 16], "texture": "#3"}, + "east": {"uv": [0, 14, 2, 16], "texture": "#3"}, + "south": {"uv": [0, 14, 2, 16], "texture": "#3"}, + "west": {"uv": [12, 14, 14, 16], "texture": "#3"}, + "up": {"uv": [0, 0, 2, 2], "texture": "#missing"}, + "down": {"uv": [14, 14, 16, 16], "texture": "#2"} + } + }, + { + "name": "foot_north_east", + "from": [14, 0, 0], + "to": [16, 2, 2], + "faces": { + "north": {"uv": [0, 14, 2, 16], "texture": "#3"}, + "east": {"uv": [14, 14, 16, 16], "texture": "#3"}, + "south": {"uv": [12, 14, 14, 16], "texture": "#3"}, + "west": {"uv": [2, 14, 4, 16], "texture": "#3"}, + "up": {"uv": [0, 0, 2, 2], "texture": "#missing"}, + "down": {"uv": [0, 0, 2, 2], "texture": "#2"} + } + }, + { + "name": "foot_south_east", + "from": [14, 0, 14], + "to": [16, 2, 16], + "faces": { + "north": {"uv": [0, 14, 2, 16], "texture": "#3"}, + "east": {"uv": [12, 14, 14, 16], "texture": "#3"}, + "south": {"uv": [14, 14, 16, 16], "texture": "#3"}, + "west": {"uv": [12, 14, 14, 16], "texture": "#3"}, + "up": {"uv": [0, 0, 2, 2], "texture": "#missing"}, + "down": {"uv": [0, 14, 2, 16], "texture": "#2"} + } + }, + { + "name": "body", + "from": [0, 2, 0], + "to": [16, 10, 16], + "faces": { + "north": {"uv": [0, 0, 16, 8], "texture": "#1"}, + "east": {"uv": [0, 0, 16, 8], "texture": "#1"}, + "south": {"uv": [0, 0, 16, 8], "texture": "#1"}, + "west": {"uv": [0, 0, 16, 8], "texture": "#1"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#2"}, + "down": {"uv": [0, 0, 16, 16], "texture": "#0"} + } + }, + { + "name": "topper", + "from": [2, 10, 0], + "to": [14, 14, 16], + "faces": { + "north": {"uv": [2, 0, 14, 4], "texture": "#3"}, + "east": {"uv": [0, 0, 16, 4], "texture": "#1"}, + "south": {"uv": [2, 0, 14, 4], "texture": "#3"}, + "west": {"uv": [0, 0, 16, 4], "texture": "#1"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#1"}, + "down": {"uv": [0, 0, 12, 16], "texture": "#missing"} + } + }, + { + "name": "top_west_angle", + "from": [1.75, 10.1, 0.001], + "to": [3.75, 14.7, 15.999], + "rotation": {"angle": -22.5, "axis": "z", "origin": [0, 13, 0]}, + "faces": { + "north": {"uv": [0, 0, 2, 4.6], "texture": "#1"}, + "east": {"uv": [0, 0, 15.998, 4.6], "texture": "#missing"}, + "south": {"uv": [2, 0, 4, 4.6], "texture": "#1"}, + "west": {"uv": [0, 0, 15.998, 4.6], "texture": "#1"}, + "up": {"uv": [0, 0, 2, 15.998], "texture": "#missing"}, + "down": {"uv": [0, 0, 2, 15.998], "texture": "#missing"} + } + }, + { + "name": "top_west_angle", + "from": [12.25, 10.1, 0.001], + "to": [14.25, 14.7, 15.999], + "rotation": {"angle": 22.5, "axis": "z", "origin": [16, 13, 0]}, + "faces": { + "north": {"uv": [14, 0, 16, 4.6], "texture": "#1"}, + "east": {"uv": [0, 0, 15.998, 4.6], "texture": "#1"}, + "south": {"uv": [0, 0, 2, 4.6], "texture": "#1"}, + "west": {"uv": [0, 0, 15.998, 4.6], "texture": "#missing"}, + "up": {"uv": [0, 0, 2, 15.998], "texture": "#missing"}, + "down": {"uv": [0, 0, 2, 15.998], "texture": "#missing"} + } + }, + { + "name": "chimney_top", + "from": [6, 18, 11], + "to": [10, 19, 15], + "faces": { + "north": {"uv": [1, 2, 5, 3], "texture": "#3"}, + "east": {"uv": [1, 2, 5, 3], "texture": "#3"}, + "south": {"uv": [1, 2, 5, 3], "texture": "#3"}, + "west": {"uv": [1, 2, 5, 3], "texture": "#3"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#0"}, + "down": {"uv": [0, 0, 16, 16], "texture": "#0"} + } + }, + { + "name": "chimney_west", + "from": [6, 9, 11], + "to": [7, 18, 15], + "faces": { + "north": {"uv": [4, 3, 5, 12], "texture": "#3"}, + "east": {"uv": [1, 3, 5, 12], "texture": "#3"}, + "south": {"uv": [1, 3, 2, 12], "texture": "#3"}, + "west": {"uv": [1, 3, 5, 12], "texture": "#3"}, + "up": {"uv": [0, 0, 1, 4], "texture": "#missing"}, + "down": {"uv": [0, 0, 1, 4], "texture": "#missing"} + } + }, + { + "name": "chimney_east", + "from": [9, 9, 11], + "to": [10, 18, 15], + "faces": { + "north": {"uv": [1, 3, 2, 12], "texture": "#3"}, + "east": {"uv": [1, 3, 5, 12], "texture": "#3"}, + "south": {"uv": [4, 3, 5, 12], "texture": "#3"}, + "west": {"uv": [1, 3, 5, 12], "texture": "#3"}, + "up": {"uv": [0, 0, 1, 4], "texture": "#missing"}, + "down": {"uv": [0, 0, 1, 4], "texture": "#missing"} + } + }, + { + "name": "chimney_south", + "from": [7, 9, 14], + "to": [9, 18, 15], + "faces": { + "north": {"uv": [2, 3, 4, 12], "texture": "#3"}, + "east": {"uv": [0, 0, 1, 9], "texture": "#missing"}, + "south": {"uv": [2, 3, 4, 12], "texture": "#3"}, + "west": {"uv": [0, 0, 1, 9], "texture": "#missing"}, + "up": {"uv": [0, 0, 2, 1], "texture": "#missing"}, + "down": {"uv": [0, 0, 2, 1], "texture": "#missing"} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson_righthand": { + "rotation": [0, 45, 0], + "scale": [0.4, 0.4, 0.4] + }, + "firstperson_lefthand": { + "rotation": [0, 225, 0], + "scale": [0.4, 0.4, 0.4] + }, + "ground": { + "translation": [0, 3, 0], + "scale": [0.25, 0.25, 0.25] + }, + "gui": { + "rotation": [30, 225, 0], + "scale": [0.625, 0.625, 0.625] + }, + "fixed": { + "scale": [0.5, 0.5, 0.5] + } + }, + "groups": [ + { + "name": "roaster", + "origin": [8, 8, 8], + "color": 0, + "children": [0, 1, 2, 3, 4, 5, 6, 7] + }, + { + "name": "chimney", + "origin": [0, 0, 0], + "color": 0, + "children": [8, 9, 10, 11] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/block/roaster_chimney_level_6.json b/src/main/resources/assets/growthcraft_cellar/models/block/roaster_chimney_level_6.json new file mode 100644 index 0000000..47a4e90 --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/block/roaster_chimney_level_6.json @@ -0,0 +1,211 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "0": "growthcraft_cellar:block/brew_kettle/brew_kettle_base", + "1": "growthcraft_cellar:block/brew_kettle/brew_kettle_lid", + "2": "growthcraft_cellar:block/brew_kettle/brew_kettle_top", + "3": "growthcraft_cellar:block/brew_kettle/brew_kettle_side", + "particle": "growthcraft_cellar:block/brew_kettle/brew_kettle_base", + "missing": "growthcraft:block/missing" + }, + "elements": [ + { + "name": "foot_north_west", + "from": [0, 0, 0], + "to": [2, 2, 2], + "faces": { + "north": {"uv": [14, 14, 16, 16], "texture": "#3"}, + "east": {"uv": [0, 14, 2, 16], "texture": "#3"}, + "south": {"uv": [2, 14, 4, 16], "texture": "#3"}, + "west": {"uv": [2, 14, 4, 16], "texture": "#3"}, + "up": {"uv": [0, 0, 2, 2], "texture": "#missing"}, + "down": {"uv": [14, 0, 16, 2], "texture": "#2"} + } + }, + { + "name": "foot_south_west", + "from": [0, 0, 14], + "to": [2, 2, 16], + "faces": { + "north": {"uv": [14, 14, 16, 16], "texture": "#3"}, + "east": {"uv": [0, 14, 2, 16], "texture": "#3"}, + "south": {"uv": [0, 14, 2, 16], "texture": "#3"}, + "west": {"uv": [12, 14, 14, 16], "texture": "#3"}, + "up": {"uv": [0, 0, 2, 2], "texture": "#missing"}, + "down": {"uv": [14, 14, 16, 16], "texture": "#2"} + } + }, + { + "name": "foot_north_east", + "from": [14, 0, 0], + "to": [16, 2, 2], + "faces": { + "north": {"uv": [0, 14, 2, 16], "texture": "#3"}, + "east": {"uv": [14, 14, 16, 16], "texture": "#3"}, + "south": {"uv": [12, 14, 14, 16], "texture": "#3"}, + "west": {"uv": [2, 14, 4, 16], "texture": "#3"}, + "up": {"uv": [0, 0, 2, 2], "texture": "#missing"}, + "down": {"uv": [0, 0, 2, 2], "texture": "#2"} + } + }, + { + "name": "foot_south_east", + "from": [14, 0, 14], + "to": [16, 2, 16], + "faces": { + "north": {"uv": [0, 14, 2, 16], "texture": "#3"}, + "east": {"uv": [12, 14, 14, 16], "texture": "#3"}, + "south": {"uv": [14, 14, 16, 16], "texture": "#3"}, + "west": {"uv": [12, 14, 14, 16], "texture": "#3"}, + "up": {"uv": [0, 0, 2, 2], "texture": "#missing"}, + "down": {"uv": [0, 14, 2, 16], "texture": "#2"} + } + }, + { + "name": "body", + "from": [0, 2, 0], + "to": [16, 10, 16], + "faces": { + "north": {"uv": [0, 0, 16, 8], "texture": "#1"}, + "east": {"uv": [0, 0, 16, 8], "texture": "#1"}, + "south": {"uv": [0, 0, 16, 8], "texture": "#1"}, + "west": {"uv": [0, 0, 16, 8], "texture": "#1"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#2"}, + "down": {"uv": [0, 0, 16, 16], "texture": "#0"} + } + }, + { + "name": "topper", + "from": [2, 10, 0], + "to": [14, 14, 16], + "faces": { + "north": {"uv": [2, 0, 14, 4], "texture": "#3"}, + "east": {"uv": [0, 0, 16, 4], "texture": "#1"}, + "south": {"uv": [2, 0, 14, 4], "texture": "#3"}, + "west": {"uv": [0, 0, 16, 4], "texture": "#1"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#1"}, + "down": {"uv": [0, 0, 12, 16], "texture": "#missing"} + } + }, + { + "name": "top_west_angle", + "from": [1.75, 10.1, 0.001], + "to": [3.75, 14.7, 15.999], + "rotation": {"angle": -22.5, "axis": "z", "origin": [0, 13, 0]}, + "faces": { + "north": {"uv": [0, 0, 2, 4.6], "texture": "#1"}, + "east": {"uv": [0, 0, 15.998, 4.6], "texture": "#missing"}, + "south": {"uv": [2, 0, 4, 4.6], "texture": "#1"}, + "west": {"uv": [0, 0, 15.998, 4.6], "texture": "#1"}, + "up": {"uv": [0, 0, 2, 15.998], "texture": "#missing"}, + "down": {"uv": [0, 0, 2, 15.998], "texture": "#missing"} + } + }, + { + "name": "top_west_angle", + "from": [12.25, 10.1, 0.001], + "to": [14.25, 14.7, 15.999], + "rotation": {"angle": 22.5, "axis": "z", "origin": [16, 13, 0]}, + "faces": { + "north": {"uv": [14, 0, 16, 4.6], "texture": "#1"}, + "east": {"uv": [0, 0, 15.998, 4.6], "texture": "#1"}, + "south": {"uv": [0, 0, 2, 4.6], "texture": "#1"}, + "west": {"uv": [0, 0, 15.998, 4.6], "texture": "#missing"}, + "up": {"uv": [0, 0, 2, 15.998], "texture": "#missing"}, + "down": {"uv": [0, 0, 2, 15.998], "texture": "#missing"} + } + }, + { + "name": "chimney_top", + "from": [6, 17, 11], + "to": [10, 18, 15], + "faces": { + "north": {"uv": [1, 2, 5, 3], "texture": "#3"}, + "east": {"uv": [1, 2, 5, 3], "texture": "#3"}, + "south": {"uv": [1, 2, 5, 3], "texture": "#3"}, + "west": {"uv": [1, 2, 5, 3], "texture": "#3"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#0"}, + "down": {"uv": [0, 0, 16, 16], "texture": "#0"} + } + }, + { + "name": "chimney_west", + "from": [6, 8, 11], + "to": [7, 17, 15], + "faces": { + "north": {"uv": [4, 3, 5, 12], "texture": "#3"}, + "east": {"uv": [1, 3, 5, 12], "texture": "#3"}, + "south": {"uv": [1, 3, 2, 12], "texture": "#3"}, + "west": {"uv": [1, 3, 5, 12], "texture": "#3"}, + "up": {"uv": [0, 0, 1, 4], "texture": "#missing"}, + "down": {"uv": [0, 0, 1, 4], "texture": "#missing"} + } + }, + { + "name": "chimney_east", + "from": [9, 8, 11], + "to": [10, 17, 15], + "faces": { + "north": {"uv": [1, 3, 2, 12], "texture": "#3"}, + "east": {"uv": [1, 3, 5, 12], "texture": "#3"}, + "south": {"uv": [4, 3, 5, 12], "texture": "#3"}, + "west": {"uv": [1, 3, 5, 12], "texture": "#3"}, + "up": {"uv": [0, 0, 1, 4], "texture": "#missing"}, + "down": {"uv": [0, 0, 1, 4], "texture": "#missing"} + } + }, + { + "name": "chimney_south", + "from": [7, 8, 14], + "to": [9, 17, 15], + "faces": { + "north": {"uv": [2, 3, 4, 12], "texture": "#3"}, + "east": {"uv": [0, 0, 1, 9], "texture": "#missing"}, + "south": {"uv": [2, 3, 4, 12], "texture": "#3"}, + "west": {"uv": [0, 0, 1, 9], "texture": "#missing"}, + "up": {"uv": [0, 0, 2, 1], "texture": "#missing"}, + "down": {"uv": [0, 0, 2, 1], "texture": "#missing"} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson_righthand": { + "rotation": [0, 45, 0], + "scale": [0.4, 0.4, 0.4] + }, + "firstperson_lefthand": { + "rotation": [0, 225, 0], + "scale": [0.4, 0.4, 0.4] + }, + "ground": { + "translation": [0, 3, 0], + "scale": [0.25, 0.25, 0.25] + }, + "gui": { + "rotation": [30, 225, 0], + "scale": [0.625, 0.625, 0.625] + }, + "fixed": { + "scale": [0.5, 0.5, 0.5] + } + }, + "groups": [ + { + "name": "roaster", + "origin": [8, 8, 8], + "color": 0, + "children": [0, 1, 2, 3, 4, 5, 6, 7] + }, + { + "name": "chimney", + "origin": [0, 0, 0], + "color": 0, + "children": [8, 9, 10, 11] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/block/roaster_chimney_level_7.json b/src/main/resources/assets/growthcraft_cellar/models/block/roaster_chimney_level_7.json new file mode 100644 index 0000000..89da783 --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/block/roaster_chimney_level_7.json @@ -0,0 +1,211 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "0": "growthcraft_cellar:block/brew_kettle/brew_kettle_base", + "1": "growthcraft_cellar:block/brew_kettle/brew_kettle_lid", + "2": "growthcraft_cellar:block/brew_kettle/brew_kettle_top", + "3": "growthcraft_cellar:block/brew_kettle/brew_kettle_side", + "particle": "growthcraft_cellar:block/brew_kettle/brew_kettle_base", + "missing": "growthcraft:block/missing" + }, + "elements": [ + { + "name": "foot_north_west", + "from": [0, 0, 0], + "to": [2, 2, 2], + "faces": { + "north": {"uv": [14, 14, 16, 16], "texture": "#3"}, + "east": {"uv": [0, 14, 2, 16], "texture": "#3"}, + "south": {"uv": [2, 14, 4, 16], "texture": "#3"}, + "west": {"uv": [2, 14, 4, 16], "texture": "#3"}, + "up": {"uv": [0, 0, 2, 2], "texture": "#missing"}, + "down": {"uv": [14, 0, 16, 2], "texture": "#2"} + } + }, + { + "name": "foot_south_west", + "from": [0, 0, 14], + "to": [2, 2, 16], + "faces": { + "north": {"uv": [14, 14, 16, 16], "texture": "#3"}, + "east": {"uv": [0, 14, 2, 16], "texture": "#3"}, + "south": {"uv": [0, 14, 2, 16], "texture": "#3"}, + "west": {"uv": [12, 14, 14, 16], "texture": "#3"}, + "up": {"uv": [0, 0, 2, 2], "texture": "#missing"}, + "down": {"uv": [14, 14, 16, 16], "texture": "#2"} + } + }, + { + "name": "foot_north_east", + "from": [14, 0, 0], + "to": [16, 2, 2], + "faces": { + "north": {"uv": [0, 14, 2, 16], "texture": "#3"}, + "east": {"uv": [14, 14, 16, 16], "texture": "#3"}, + "south": {"uv": [12, 14, 14, 16], "texture": "#3"}, + "west": {"uv": [2, 14, 4, 16], "texture": "#3"}, + "up": {"uv": [0, 0, 2, 2], "texture": "#missing"}, + "down": {"uv": [0, 0, 2, 2], "texture": "#2"} + } + }, + { + "name": "foot_south_east", + "from": [14, 0, 14], + "to": [16, 2, 16], + "faces": { + "north": {"uv": [0, 14, 2, 16], "texture": "#3"}, + "east": {"uv": [12, 14, 14, 16], "texture": "#3"}, + "south": {"uv": [14, 14, 16, 16], "texture": "#3"}, + "west": {"uv": [12, 14, 14, 16], "texture": "#3"}, + "up": {"uv": [0, 0, 2, 2], "texture": "#missing"}, + "down": {"uv": [0, 14, 2, 16], "texture": "#2"} + } + }, + { + "name": "body", + "from": [0, 2, 0], + "to": [16, 10, 16], + "faces": { + "north": {"uv": [0, 0, 16, 8], "texture": "#1"}, + "east": {"uv": [0, 0, 16, 8], "texture": "#1"}, + "south": {"uv": [0, 0, 16, 8], "texture": "#1"}, + "west": {"uv": [0, 0, 16, 8], "texture": "#1"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#2"}, + "down": {"uv": [0, 0, 16, 16], "texture": "#0"} + } + }, + { + "name": "topper", + "from": [2, 10, 0], + "to": [14, 14, 16], + "faces": { + "north": {"uv": [2, 0, 14, 4], "texture": "#3"}, + "east": {"uv": [0, 0, 16, 4], "texture": "#1"}, + "south": {"uv": [2, 0, 14, 4], "texture": "#3"}, + "west": {"uv": [0, 0, 16, 4], "texture": "#1"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#1"}, + "down": {"uv": [0, 0, 12, 16], "texture": "#missing"} + } + }, + { + "name": "top_west_angle", + "from": [1.75, 10.1, 0.001], + "to": [3.75, 14.7, 15.999], + "rotation": {"angle": -22.5, "axis": "z", "origin": [0, 13, 0]}, + "faces": { + "north": {"uv": [0, 0, 2, 4.6], "texture": "#1"}, + "east": {"uv": [0, 0, 15.998, 4.6], "texture": "#missing"}, + "south": {"uv": [2, 0, 4, 4.6], "texture": "#1"}, + "west": {"uv": [0, 0, 15.998, 4.6], "texture": "#1"}, + "up": {"uv": [0, 0, 2, 15.998], "texture": "#missing"}, + "down": {"uv": [0, 0, 2, 15.998], "texture": "#missing"} + } + }, + { + "name": "top_west_angle", + "from": [12.25, 10.1, 0.001], + "to": [14.25, 14.7, 15.999], + "rotation": {"angle": 22.5, "axis": "z", "origin": [16, 13, 0]}, + "faces": { + "north": {"uv": [14, 0, 16, 4.6], "texture": "#1"}, + "east": {"uv": [0, 0, 15.998, 4.6], "texture": "#1"}, + "south": {"uv": [0, 0, 2, 4.6], "texture": "#1"}, + "west": {"uv": [0, 0, 15.998, 4.6], "texture": "#missing"}, + "up": {"uv": [0, 0, 2, 15.998], "texture": "#missing"}, + "down": {"uv": [0, 0, 2, 15.998], "texture": "#missing"} + } + }, + { + "name": "chimney_top", + "from": [6, 16, 11], + "to": [10, 17, 15], + "faces": { + "north": {"uv": [1, 2, 5, 3], "texture": "#3"}, + "east": {"uv": [1, 2, 5, 3], "texture": "#3"}, + "south": {"uv": [1, 2, 5, 3], "texture": "#3"}, + "west": {"uv": [1, 2, 5, 3], "texture": "#3"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#0"}, + "down": {"uv": [0, 0, 16, 16], "texture": "#0"} + } + }, + { + "name": "chimney_west", + "from": [6, 7, 11], + "to": [7, 16, 15], + "faces": { + "north": {"uv": [4, 3, 5, 12], "texture": "#3"}, + "east": {"uv": [1, 3, 5, 12], "texture": "#3"}, + "south": {"uv": [1, 3, 2, 12], "texture": "#3"}, + "west": {"uv": [1, 3, 5, 12], "texture": "#3"}, + "up": {"uv": [0, 0, 1, 4], "texture": "#missing"}, + "down": {"uv": [0, 0, 1, 4], "texture": "#missing"} + } + }, + { + "name": "chimney_east", + "from": [9, 7, 11], + "to": [10, 16, 15], + "faces": { + "north": {"uv": [1, 3, 2, 12], "texture": "#3"}, + "east": {"uv": [1, 3, 5, 12], "texture": "#3"}, + "south": {"uv": [4, 3, 5, 12], "texture": "#3"}, + "west": {"uv": [1, 3, 5, 12], "texture": "#3"}, + "up": {"uv": [0, 0, 1, 4], "texture": "#missing"}, + "down": {"uv": [0, 0, 1, 4], "texture": "#missing"} + } + }, + { + "name": "chimney_south", + "from": [7, 7, 14], + "to": [9, 16, 15], + "faces": { + "north": {"uv": [2, 3, 4, 12], "texture": "#3"}, + "east": {"uv": [0, 0, 1, 9], "texture": "#missing"}, + "south": {"uv": [2, 3, 4, 12], "texture": "#3"}, + "west": {"uv": [0, 0, 1, 9], "texture": "#missing"}, + "up": {"uv": [0, 0, 2, 1], "texture": "#missing"}, + "down": {"uv": [0, 0, 2, 1], "texture": "#missing"} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson_righthand": { + "rotation": [0, 45, 0], + "scale": [0.4, 0.4, 0.4] + }, + "firstperson_lefthand": { + "rotation": [0, 225, 0], + "scale": [0.4, 0.4, 0.4] + }, + "ground": { + "translation": [0, 3, 0], + "scale": [0.25, 0.25, 0.25] + }, + "gui": { + "rotation": [30, 225, 0], + "scale": [0.625, 0.625, 0.625] + }, + "fixed": { + "scale": [0.5, 0.5, 0.5] + } + }, + "groups": [ + { + "name": "roaster", + "origin": [8, 8, 8], + "color": 0, + "children": [0, 1, 2, 3, 4, 5, 6, 7] + }, + { + "name": "chimney", + "origin": [0, 0, 0], + "color": 0, + "children": [8, 9, 10, 11] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/block/roaster_chimney_level_8.json b/src/main/resources/assets/growthcraft_cellar/models/block/roaster_chimney_level_8.json new file mode 100644 index 0000000..c798b2f --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/block/roaster_chimney_level_8.json @@ -0,0 +1,211 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "0": "growthcraft_cellar:block/brew_kettle/brew_kettle_base", + "1": "growthcraft_cellar:block/brew_kettle/brew_kettle_lid", + "2": "growthcraft_cellar:block/brew_kettle/brew_kettle_top", + "3": "growthcraft_cellar:block/brew_kettle/brew_kettle_side", + "particle": "growthcraft_cellar:block/brew_kettle/brew_kettle_base", + "missing": "growthcraft:block/missing" + }, + "elements": [ + { + "name": "foot_north_west", + "from": [0, 0, 0], + "to": [2, 2, 2], + "faces": { + "north": {"uv": [14, 14, 16, 16], "texture": "#3"}, + "east": {"uv": [0, 14, 2, 16], "texture": "#3"}, + "south": {"uv": [2, 14, 4, 16], "texture": "#3"}, + "west": {"uv": [2, 14, 4, 16], "texture": "#3"}, + "up": {"uv": [0, 0, 2, 2], "texture": "#missing"}, + "down": {"uv": [14, 0, 16, 2], "texture": "#2"} + } + }, + { + "name": "foot_south_west", + "from": [0, 0, 14], + "to": [2, 2, 16], + "faces": { + "north": {"uv": [14, 14, 16, 16], "texture": "#3"}, + "east": {"uv": [0, 14, 2, 16], "texture": "#3"}, + "south": {"uv": [0, 14, 2, 16], "texture": "#3"}, + "west": {"uv": [12, 14, 14, 16], "texture": "#3"}, + "up": {"uv": [0, 0, 2, 2], "texture": "#missing"}, + "down": {"uv": [14, 14, 16, 16], "texture": "#2"} + } + }, + { + "name": "foot_north_east", + "from": [14, 0, 0], + "to": [16, 2, 2], + "faces": { + "north": {"uv": [0, 14, 2, 16], "texture": "#3"}, + "east": {"uv": [14, 14, 16, 16], "texture": "#3"}, + "south": {"uv": [12, 14, 14, 16], "texture": "#3"}, + "west": {"uv": [2, 14, 4, 16], "texture": "#3"}, + "up": {"uv": [0, 0, 2, 2], "texture": "#missing"}, + "down": {"uv": [0, 0, 2, 2], "texture": "#2"} + } + }, + { + "name": "foot_south_east", + "from": [14, 0, 14], + "to": [16, 2, 16], + "faces": { + "north": {"uv": [0, 14, 2, 16], "texture": "#3"}, + "east": {"uv": [12, 14, 14, 16], "texture": "#3"}, + "south": {"uv": [14, 14, 16, 16], "texture": "#3"}, + "west": {"uv": [12, 14, 14, 16], "texture": "#3"}, + "up": {"uv": [0, 0, 2, 2], "texture": "#missing"}, + "down": {"uv": [0, 14, 2, 16], "texture": "#2"} + } + }, + { + "name": "body", + "from": [0, 2, 0], + "to": [16, 10, 16], + "faces": { + "north": {"uv": [0, 0, 16, 8], "texture": "#1"}, + "east": {"uv": [0, 0, 16, 8], "texture": "#1"}, + "south": {"uv": [0, 0, 16, 8], "texture": "#1"}, + "west": {"uv": [0, 0, 16, 8], "texture": "#1"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#2"}, + "down": {"uv": [0, 0, 16, 16], "texture": "#0"} + } + }, + { + "name": "topper", + "from": [2, 10, 0], + "to": [14, 14, 16], + "faces": { + "north": {"uv": [2, 0, 14, 4], "texture": "#3"}, + "east": {"uv": [0, 0, 16, 4], "texture": "#1"}, + "south": {"uv": [2, 0, 14, 4], "texture": "#3"}, + "west": {"uv": [0, 0, 16, 4], "texture": "#1"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#1"}, + "down": {"uv": [0, 0, 12, 16], "texture": "#missing"} + } + }, + { + "name": "top_west_angle", + "from": [1.75, 10.1, 0.001], + "to": [3.75, 14.7, 15.999], + "rotation": {"angle": -22.5, "axis": "z", "origin": [0, 13, 0]}, + "faces": { + "north": {"uv": [0, 0, 2, 4.6], "texture": "#1"}, + "east": {"uv": [0, 0, 15.998, 4.6], "texture": "#missing"}, + "south": {"uv": [2, 0, 4, 4.6], "texture": "#1"}, + "west": {"uv": [0, 0, 15.998, 4.6], "texture": "#1"}, + "up": {"uv": [0, 0, 2, 15.998], "texture": "#missing"}, + "down": {"uv": [0, 0, 2, 15.998], "texture": "#missing"} + } + }, + { + "name": "top_west_angle", + "from": [12.25, 10.1, 0.001], + "to": [14.25, 14.7, 15.999], + "rotation": {"angle": 22.5, "axis": "z", "origin": [16, 13, 0]}, + "faces": { + "north": {"uv": [14, 0, 16, 4.6], "texture": "#1"}, + "east": {"uv": [0, 0, 15.998, 4.6], "texture": "#1"}, + "south": {"uv": [0, 0, 2, 4.6], "texture": "#1"}, + "west": {"uv": [0, 0, 15.998, 4.6], "texture": "#missing"}, + "up": {"uv": [0, 0, 2, 15.998], "texture": "#missing"}, + "down": {"uv": [0, 0, 2, 15.998], "texture": "#missing"} + } + }, + { + "name": "chimney_top", + "from": [6, 15, 11], + "to": [10, 16, 15], + "faces": { + "north": {"uv": [1, 2, 5, 3], "texture": "#3"}, + "east": {"uv": [1, 2, 5, 3], "texture": "#3"}, + "south": {"uv": [1, 2, 5, 3], "texture": "#3"}, + "west": {"uv": [1, 2, 5, 3], "texture": "#3"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#0"}, + "down": {"uv": [0, 0, 16, 16], "texture": "#0"} + } + }, + { + "name": "chimney_west", + "from": [6, 6, 11], + "to": [7, 15, 15], + "faces": { + "north": {"uv": [4, 3, 5, 12], "texture": "#3"}, + "east": {"uv": [1, 3, 5, 12], "texture": "#3"}, + "south": {"uv": [1, 3, 2, 12], "texture": "#3"}, + "west": {"uv": [1, 3, 5, 12], "texture": "#3"}, + "up": {"uv": [0, 0, 1, 4], "texture": "#missing"}, + "down": {"uv": [0, 0, 1, 4], "texture": "#missing"} + } + }, + { + "name": "chimney_east", + "from": [9, 6, 11], + "to": [10, 15, 15], + "faces": { + "north": {"uv": [1, 3, 2, 12], "texture": "#3"}, + "east": {"uv": [1, 3, 5, 12], "texture": "#3"}, + "south": {"uv": [4, 3, 5, 12], "texture": "#3"}, + "west": {"uv": [1, 3, 5, 12], "texture": "#3"}, + "up": {"uv": [0, 0, 1, 4], "texture": "#missing"}, + "down": {"uv": [0, 0, 1, 4], "texture": "#missing"} + } + }, + { + "name": "chimney_south", + "from": [7, 6, 14], + "to": [9, 15, 15], + "faces": { + "north": {"uv": [2, 3, 4, 12], "texture": "#3"}, + "east": {"uv": [0, 0, 1, 9], "texture": "#missing"}, + "south": {"uv": [2, 3, 4, 12], "texture": "#3"}, + "west": {"uv": [0, 0, 1, 9], "texture": "#missing"}, + "up": {"uv": [0, 0, 2, 1], "texture": "#missing"}, + "down": {"uv": [0, 0, 2, 1], "texture": "#missing"} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson_righthand": { + "rotation": [0, 45, 0], + "scale": [0.4, 0.4, 0.4] + }, + "firstperson_lefthand": { + "rotation": [0, 225, 0], + "scale": [0.4, 0.4, 0.4] + }, + "ground": { + "translation": [0, 3, 0], + "scale": [0.25, 0.25, 0.25] + }, + "gui": { + "rotation": [30, 225, 0], + "scale": [0.625, 0.625, 0.625] + }, + "fixed": { + "scale": [0.5, 0.5, 0.5] + } + }, + "groups": [ + { + "name": "roaster", + "origin": [8, 8, 8], + "color": 0, + "children": [0, 1, 2, 3, 4, 5, 6, 7] + }, + { + "name": "chimney", + "origin": [0, 0, 0], + "color": 0, + "children": [8, 9, 10, 11] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/block/stout_ale.json b/src/main/resources/assets/growthcraft_cellar/models/block/stout_ale.json new file mode 100644 index 0000000..11cc634 --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/block/stout_ale.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "growthcraft_cellar:block/fluid/fluid_overlay" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/block/vienna_lager.json b/src/main/resources/assets/growthcraft_cellar/models/block/vienna_lager.json new file mode 100644 index 0000000..11cc634 --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/block/vienna_lager.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "growthcraft_cellar:block/fluid/fluid_overlay" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/block/white_grape_juice.json b/src/main/resources/assets/growthcraft_cellar/models/block/white_grape_juice.json new file mode 100644 index 0000000..11cc634 --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/block/white_grape_juice.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "growthcraft_cellar:block/fluid/fluid_overlay" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/block/wort.json b/src/main/resources/assets/growthcraft_cellar/models/block/wort.json new file mode 100644 index 0000000..11cc634 --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/block/wort.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "growthcraft_cellar:block/fluid/fluid_overlay" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/item/ale_potion.json b/src/main/resources/assets/growthcraft_cellar/models/item/ale_potion.json new file mode 100644 index 0000000..811935a --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/item/ale_potion.json @@ -0,0 +1,7 @@ +{ + "parent": "builtin/generated", + "textures": { + "layer0": "growthcraft_cellar:item/potion/brew_bottle_contents", + "layer1": "growthcraft_cellar:item/potion/brew_bottle_base" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/item/amber_ale_fluid_bucket.json b/src/main/resources/assets/growthcraft_cellar/models/item/amber_ale_fluid_bucket.json new file mode 100644 index 0000000..f5fba3f --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/item/amber_ale_fluid_bucket.json @@ -0,0 +1,7 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft:item/bucket/bucket_fluid", + "layer1": "growthcraft:item/bucket/bucket_base" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/item/amber_lager_fluid_bucket.json b/src/main/resources/assets/growthcraft_cellar/models/item/amber_lager_fluid_bucket.json new file mode 100644 index 0000000..f5fba3f --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/item/amber_lager_fluid_bucket.json @@ -0,0 +1,7 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft:item/bucket/bucket_fluid", + "layer1": "growthcraft:item/bucket/bucket_base" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/item/amber_wort_fluid_bucket.json b/src/main/resources/assets/growthcraft_cellar/models/item/amber_wort_fluid_bucket.json new file mode 100644 index 0000000..f5fba3f --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/item/amber_wort_fluid_bucket.json @@ -0,0 +1,7 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft:item/bucket/bucket_fluid", + "layer1": "growthcraft:item/bucket/bucket_base" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/item/brew_kettle.json b/src/main/resources/assets/growthcraft_cellar/models/item/brew_kettle.json new file mode 100644 index 0000000..62364bb --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/item/brew_kettle.json @@ -0,0 +1,3 @@ +{ + "parent": "growthcraft_cellar:block/brew_kettle" +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/item/brew_kettle_lid.json b/src/main/resources/assets/growthcraft_cellar/models/item/brew_kettle_lid.json new file mode 100644 index 0000000..9fb9b4e --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/item/brew_kettle_lid.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_cellar:item/brew_kettle_lid" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/item/brown_ale_fluid_bucket.json b/src/main/resources/assets/growthcraft_cellar/models/item/brown_ale_fluid_bucket.json new file mode 100644 index 0000000..f5fba3f --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/item/brown_ale_fluid_bucket.json @@ -0,0 +1,7 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft:item/bucket/bucket_fluid", + "layer1": "growthcraft:item/bucket/bucket_base" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/item/brown_lager_fluid_bucket.json b/src/main/resources/assets/growthcraft_cellar/models/item/brown_lager_fluid_bucket.json new file mode 100644 index 0000000..f5fba3f --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/item/brown_lager_fluid_bucket.json @@ -0,0 +1,7 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft:item/bucket/bucket_fluid", + "layer1": "growthcraft:item/bucket/bucket_base" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/item/brown_wort_fluid_bucket.json b/src/main/resources/assets/growthcraft_cellar/models/item/brown_wort_fluid_bucket.json new file mode 100644 index 0000000..f5fba3f --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/item/brown_wort_fluid_bucket.json @@ -0,0 +1,7 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft:item/bucket/bucket_fluid", + "layer1": "growthcraft:item/bucket/bucket_base" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/item/copper_ale_fluid_bucket.json b/src/main/resources/assets/growthcraft_cellar/models/item/copper_ale_fluid_bucket.json new file mode 100644 index 0000000..7fef0d7 --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/item/copper_ale_fluid_bucket.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_cellar:item/bucket/ale/copper_ale_bucket" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/item/copper_lager_fluid_bucket.json b/src/main/resources/assets/growthcraft_cellar/models/item/copper_lager_fluid_bucket.json new file mode 100644 index 0000000..76236ba --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/item/copper_lager_fluid_bucket.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_cellar:item/bucket/lager/copper_lager_bucket" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/item/copper_wort_fluid_bucket.json b/src/main/resources/assets/growthcraft_cellar/models/item/copper_wort_fluid_bucket.json new file mode 100644 index 0000000..625181b --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/item/copper_wort_fluid_bucket.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_cellar:item/bucket/wort/copper_wort_bucket" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/item/culture_jar.json b/src/main/resources/assets/growthcraft_cellar/models/item/culture_jar.json new file mode 100644 index 0000000..0d882e7 --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/item/culture_jar.json @@ -0,0 +1,85 @@ +{ + "parent": "growthcraft_cellar:block/culture_jar", + "display": { + "ground": { + "rotation": [ + 0, + 0, + 0 + ], + "translation": [ + 0, + 2, + 0 + ], + "scale": [ + 0.5, + 0.5, + 0.5 + ] + }, + "head": { + "rotation": [ + 0, + 180, + 0 + ], + "translation": [ + 0, + 13, + 7 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "thirdperson_righthand": { + "rotation": [ + 0, + 0, + 0 + ], + "translation": [ + 0, + 3, + 1 + ], + "scale": [ + 0.55, + 0.55, + 0.55 + ] + }, + "firstperson_righthand": { + "rotation": [ + 0, + -90, + 25 + ], + "translation": [ + 1.13, + 3.2, + 1.13 + ], + "scale": [ + 0.68, + 0.68, + 0.68 + ] + }, + "fixed": { + "rotation": [ + 0, + 180, + 0 + ], + "scale": [ + 1, + 1, + 1 + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/item/dark_lager_fluid_bucket.json b/src/main/resources/assets/growthcraft_cellar/models/item/dark_lager_fluid_bucket.json new file mode 100644 index 0000000..f5fba3f --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/item/dark_lager_fluid_bucket.json @@ -0,0 +1,7 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft:item/bucket/bucket_fluid", + "layer1": "growthcraft:item/bucket/bucket_base" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/item/dark_wort_fluid_bucket.json b/src/main/resources/assets/growthcraft_cellar/models/item/dark_wort_fluid_bucket.json new file mode 100644 index 0000000..f5fba3f --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/item/dark_wort_fluid_bucket.json @@ -0,0 +1,7 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft:item/bucket/bucket_fluid", + "layer1": "growthcraft:item/bucket/bucket_base" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/item/deep_amber_wort_fluid_bucket.json b/src/main/resources/assets/growthcraft_cellar/models/item/deep_amber_wort_fluid_bucket.json new file mode 100644 index 0000000..f5fba3f --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/item/deep_amber_wort_fluid_bucket.json @@ -0,0 +1,7 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft:item/bucket/bucket_fluid", + "layer1": "growthcraft:item/bucket/bucket_base" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/item/deep_copper_wort_fluid_bucket.json b/src/main/resources/assets/growthcraft_cellar/models/item/deep_copper_wort_fluid_bucket.json new file mode 100644 index 0000000..9a33a99 --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/item/deep_copper_wort_fluid_bucket.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_cellar:item/bucket/wort/deep_copper_wort_bucket" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/item/fermentation_barrel_oak.json b/src/main/resources/assets/growthcraft_cellar/models/item/fermentation_barrel_oak.json new file mode 100644 index 0000000..98503ae --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/item/fermentation_barrel_oak.json @@ -0,0 +1,3 @@ +{ + "parent": "growthcraft_cellar:block/fermentation_barrel_oak" +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/item/fruit_press.json b/src/main/resources/assets/growthcraft_cellar/models/item/fruit_press.json new file mode 100644 index 0000000..def4ba3 --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/item/fruit_press.json @@ -0,0 +1,3 @@ +{ + "parent": "growthcraft_cellar:block/fruit_press" +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/item/fruit_press_piston.json b/src/main/resources/assets/growthcraft_cellar/models/item/fruit_press_piston.json new file mode 100644 index 0000000..def4ba3 --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/item/fruit_press_piston.json @@ -0,0 +1,3 @@ +{ + "parent": "growthcraft_cellar:block/fruit_press" +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/item/golden_wort_fluid_bucket.json b/src/main/resources/assets/growthcraft_cellar/models/item/golden_wort_fluid_bucket.json new file mode 100644 index 0000000..f5fba3f --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/item/golden_wort_fluid_bucket.json @@ -0,0 +1,7 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft:item/bucket/bucket_fluid", + "layer1": "growthcraft:item/bucket/bucket_base" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/item/grain.json b/src/main/resources/assets/growthcraft_cellar/models/item/grain.json new file mode 100644 index 0000000..072d16b --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/item/grain.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_cellar:item/grain" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/item/grain_amber.json b/src/main/resources/assets/growthcraft_cellar/models/item/grain_amber.json new file mode 100644 index 0000000..ff175d9 --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/item/grain_amber.json @@ -0,0 +1,7 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_cellar:item/grain_base", + "layer1": "growthcraft:block/missing" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/item/grain_brown.json b/src/main/resources/assets/growthcraft_cellar/models/item/grain_brown.json new file mode 100644 index 0000000..8dd6ae0 --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/item/grain_brown.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_cellar:item/grain_base" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/item/grain_copper.json b/src/main/resources/assets/growthcraft_cellar/models/item/grain_copper.json new file mode 100644 index 0000000..8dd6ae0 --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/item/grain_copper.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_cellar:item/grain_base" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/item/grain_dark.json b/src/main/resources/assets/growthcraft_cellar/models/item/grain_dark.json new file mode 100644 index 0000000..8dd6ae0 --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/item/grain_dark.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_cellar:item/grain_base" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/item/grain_deep_amber.json b/src/main/resources/assets/growthcraft_cellar/models/item/grain_deep_amber.json new file mode 100644 index 0000000..8dd6ae0 --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/item/grain_deep_amber.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_cellar:item/grain_base" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/item/grain_deep_copper.json b/src/main/resources/assets/growthcraft_cellar/models/item/grain_deep_copper.json new file mode 100644 index 0000000..8dd6ae0 --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/item/grain_deep_copper.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_cellar:item/grain_base" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/item/grain_golden.json b/src/main/resources/assets/growthcraft_cellar/models/item/grain_golden.json new file mode 100644 index 0000000..8dd6ae0 --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/item/grain_golden.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_cellar:item/grain_base" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/item/grain_pale_golden.json b/src/main/resources/assets/growthcraft_cellar/models/item/grain_pale_golden.json new file mode 100644 index 0000000..8dd6ae0 --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/item/grain_pale_golden.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_cellar:item/grain_base" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/item/grape_purple.json b/src/main/resources/assets/growthcraft_cellar/models/item/grape_purple.json new file mode 100644 index 0000000..09d750a --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/item/grape_purple.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_cellar:item/grape_purple" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/item/grape_red.json b/src/main/resources/assets/growthcraft_cellar/models/item/grape_red.json new file mode 100644 index 0000000..4d846cd --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/item/grape_red.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_cellar:item/grape_red" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/item/grape_seeds_purple.json b/src/main/resources/assets/growthcraft_cellar/models/item/grape_seeds_purple.json new file mode 100644 index 0000000..bca14be --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/item/grape_seeds_purple.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_cellar:item/grape_seeds_purple" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/item/grape_seeds_red.json b/src/main/resources/assets/growthcraft_cellar/models/item/grape_seeds_red.json new file mode 100644 index 0000000..418a2fe --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/item/grape_seeds_red.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_cellar:item/grape_seeds_red" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/item/grape_seeds_white.json b/src/main/resources/assets/growthcraft_cellar/models/item/grape_seeds_white.json new file mode 100644 index 0000000..2af5f42 --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/item/grape_seeds_white.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_cellar:item/grape_seeds_white" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/item/grape_white.json b/src/main/resources/assets/growthcraft_cellar/models/item/grape_white.json new file mode 100644 index 0000000..ed2cbd3 --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/item/grape_white.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_cellar:item/grape_white" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/item/hopped_golden_wort_fluid_bucket.json b/src/main/resources/assets/growthcraft_cellar/models/item/hopped_golden_wort_fluid_bucket.json new file mode 100644 index 0000000..f5fba3f --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/item/hopped_golden_wort_fluid_bucket.json @@ -0,0 +1,7 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft:item/bucket/bucket_fluid", + "layer1": "growthcraft:item/bucket/bucket_base" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/item/hops.json b/src/main/resources/assets/growthcraft_cellar/models/item/hops.json new file mode 100644 index 0000000..09f2dce --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/item/hops.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_cellar:item/hops" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/item/hops_seeds.json b/src/main/resources/assets/growthcraft_cellar/models/item/hops_seeds.json new file mode 100644 index 0000000..e013f85 --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/item/hops_seeds.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_cellar:item/hop_seeds" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/item/ipa_ale_fluid_bucket.json b/src/main/resources/assets/growthcraft_cellar/models/item/ipa_ale_fluid_bucket.json new file mode 100644 index 0000000..f5fba3f --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/item/ipa_ale_fluid_bucket.json @@ -0,0 +1,7 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft:item/bucket/bucket_fluid", + "layer1": "growthcraft:item/bucket/bucket_base" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/item/kindling.json b/src/main/resources/assets/growthcraft_cellar/models/item/kindling.json new file mode 100644 index 0000000..f0c2127 --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/item/kindling.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_cellar:item/kindling" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/item/old_port_ale_fluid_bucket.json b/src/main/resources/assets/growthcraft_cellar/models/item/old_port_ale_fluid_bucket.json new file mode 100644 index 0000000..f5fba3f --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/item/old_port_ale_fluid_bucket.json @@ -0,0 +1,7 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft:item/bucket/bucket_fluid", + "layer1": "growthcraft:item/bucket/bucket_base" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/item/pale_ale_fluid_bucket.json b/src/main/resources/assets/growthcraft_cellar/models/item/pale_ale_fluid_bucket.json new file mode 100644 index 0000000..f5fba3f --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/item/pale_ale_fluid_bucket.json @@ -0,0 +1,7 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft:item/bucket/bucket_fluid", + "layer1": "growthcraft:item/bucket/bucket_base" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/item/pale_ale_potion.json b/src/main/resources/assets/growthcraft_cellar/models/item/pale_ale_potion.json new file mode 100644 index 0000000..f5fba3f --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/item/pale_ale_potion.json @@ -0,0 +1,7 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft:item/bucket/bucket_fluid", + "layer1": "growthcraft:item/bucket/bucket_base" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/item/pale_golden_wort_fluid_bucket.json b/src/main/resources/assets/growthcraft_cellar/models/item/pale_golden_wort_fluid_bucket.json new file mode 100644 index 0000000..f5fba3f --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/item/pale_golden_wort_fluid_bucket.json @@ -0,0 +1,7 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft:item/bucket/bucket_fluid", + "layer1": "growthcraft:item/bucket/bucket_base" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/item/pale_lager_fluid_bucket.json b/src/main/resources/assets/growthcraft_cellar/models/item/pale_lager_fluid_bucket.json new file mode 100644 index 0000000..f5fba3f --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/item/pale_lager_fluid_bucket.json @@ -0,0 +1,7 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft:item/bucket/bucket_fluid", + "layer1": "growthcraft:item/bucket/bucket_base" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/item/pilsner_lager_fluid_bucket.json b/src/main/resources/assets/growthcraft_cellar/models/item/pilsner_lager_fluid_bucket.json new file mode 100644 index 0000000..f5fba3f --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/item/pilsner_lager_fluid_bucket.json @@ -0,0 +1,7 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft:item/bucket/bucket_fluid", + "layer1": "growthcraft:item/bucket/bucket_base" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/item/potion_ale.json b/src/main/resources/assets/growthcraft_cellar/models/item/potion_ale.json new file mode 100644 index 0000000..3f32fc5 --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/item/potion_ale.json @@ -0,0 +1,124 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_cellar:item/potion/pint_ale_overlay", + "layer1": "growthcraft_cellar:item/potion/pint_ale" + }, + "gui_light": "front", + "display": { + "ground": { + "rotation": [ + 0, + 0, + 0 + ], + "translation": [ + 0, + 2, + 0 + ], + "scale": [ + 0.5, + 0.5, + 0.5 + ] + }, + "head": { + "rotation": [ + 0, + 180, + 0 + ], + "translation": [ + 0, + 13, + 7 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "thirdperson_righthand": { + "rotation": [ + 90, + 270, + 55 + ], + "translation": [ + 0, + 1.25, + -1.0 + ], + "scale": [ + 0.4, + 0.4, + 0.4 + ] + }, + "thirdperson_lefthand": { + "rotation": [ + 0, + 90, + 55 + ], + "translation": [ + 0, + 1.25, + -1.0 + ], + "scale": [ + 0.4, + 0.4, + 0.4 + ] + }, + "firstperson_righthand": { + "rotation": [ + 0, + -90, + 25 + ], + "translation": [ + 1.13, + 3.2, + 1.13 + ], + "scale": [ + 0.68, + 0.68, + 0.68 + ] + }, + "firstperson_lefthand": { + "rotation": [ + 0, + 90, + -25 + ], + "translation": [ + 1.13, + 3.2, + 1.13 + ], + "scale": [ + 0.68, + 0.68, + 0.68 + ] + }, + "fixed": { + "rotation": [ + 0, + 180, + 0 + ], + "scale": [ + 1, + 1, + 1 + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/item/potion_lager.json b/src/main/resources/assets/growthcraft_cellar/models/item/potion_lager.json new file mode 100644 index 0000000..3f32fc5 --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/item/potion_lager.json @@ -0,0 +1,124 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_cellar:item/potion/pint_ale_overlay", + "layer1": "growthcraft_cellar:item/potion/pint_ale" + }, + "gui_light": "front", + "display": { + "ground": { + "rotation": [ + 0, + 0, + 0 + ], + "translation": [ + 0, + 2, + 0 + ], + "scale": [ + 0.5, + 0.5, + 0.5 + ] + }, + "head": { + "rotation": [ + 0, + 180, + 0 + ], + "translation": [ + 0, + 13, + 7 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "thirdperson_righthand": { + "rotation": [ + 90, + 270, + 55 + ], + "translation": [ + 0, + 1.25, + -1.0 + ], + "scale": [ + 0.4, + 0.4, + 0.4 + ] + }, + "thirdperson_lefthand": { + "rotation": [ + 0, + 90, + 55 + ], + "translation": [ + 0, + 1.25, + -1.0 + ], + "scale": [ + 0.4, + 0.4, + 0.4 + ] + }, + "firstperson_righthand": { + "rotation": [ + 0, + -90, + 25 + ], + "translation": [ + 1.13, + 3.2, + 1.13 + ], + "scale": [ + 0.68, + 0.68, + 0.68 + ] + }, + "firstperson_lefthand": { + "rotation": [ + 0, + 90, + -25 + ], + "translation": [ + 1.13, + 3.2, + 1.13 + ], + "scale": [ + 0.68, + 0.68, + 0.68 + ] + }, + "fixed": { + "rotation": [ + 0, + 180, + 0 + ], + "scale": [ + 1, + 1, + 1 + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/item/potion_wine.json b/src/main/resources/assets/growthcraft_cellar/models/item/potion_wine.json new file mode 100644 index 0000000..fb4e2a1 --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/item/potion_wine.json @@ -0,0 +1,124 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_cellar:item/potion/brew_bottle_contents", + "layer1": "growthcraft_cellar:item/potion/brew_bottle_base" + }, + "gui_light": "front", + "display": { + "ground": { + "rotation": [ + 0, + 0, + 0 + ], + "translation": [ + 0, + 2, + 0 + ], + "scale": [ + 0.5, + 0.5, + 0.5 + ] + }, + "head": { + "rotation": [ + 0, + 180, + 0 + ], + "translation": [ + 0, + 13, + 7 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "thirdperson_righthand": { + "rotation": [ + 90, + 270, + 55 + ], + "translation": [ + 0, + 1.25, + -1.0 + ], + "scale": [ + 0.4, + 0.4, + 0.4 + ] + }, + "thirdperson_lefthand": { + "rotation": [ + 0, + 90, + 55 + ], + "translation": [ + 0, + 1.25, + -1.0 + ], + "scale": [ + 0.4, + 0.4, + 0.4 + ] + }, + "firstperson_righthand": { + "rotation": [ + 0, + -90, + 25 + ], + "translation": [ + 1.13, + 3.2, + 1.13 + ], + "scale": [ + 0.68, + 0.68, + 0.68 + ] + }, + "firstperson_lefthand": { + "rotation": [ + 0, + 90, + -25 + ], + "translation": [ + 1.13, + 3.2, + 1.13 + ], + "scale": [ + 0.68, + 0.68, + 0.68 + ] + }, + "fixed": { + "rotation": [ + 0, + 180, + 0 + ], + "scale": [ + 1, + 1, + 1 + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/item/purple_grape_juice_fluid_bucket.json b/src/main/resources/assets/growthcraft_cellar/models/item/purple_grape_juice_fluid_bucket.json new file mode 100644 index 0000000..f5fba3f --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/item/purple_grape_juice_fluid_bucket.json @@ -0,0 +1,7 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft:item/bucket/bucket_fluid", + "layer1": "growthcraft:item/bucket/bucket_base" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/item/purple_grape_wine_fluid_bucket.json b/src/main/resources/assets/growthcraft_cellar/models/item/purple_grape_wine_fluid_bucket.json new file mode 100644 index 0000000..f5fba3f --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/item/purple_grape_wine_fluid_bucket.json @@ -0,0 +1,7 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft:item/bucket/bucket_fluid", + "layer1": "growthcraft:item/bucket/bucket_base" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/item/red_grape_juice_fluid_bucket.json b/src/main/resources/assets/growthcraft_cellar/models/item/red_grape_juice_fluid_bucket.json new file mode 100644 index 0000000..f5fba3f --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/item/red_grape_juice_fluid_bucket.json @@ -0,0 +1,7 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft:item/bucket/bucket_fluid", + "layer1": "growthcraft:item/bucket/bucket_base" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/item/red_grape_wine_fluid_bucket.json b/src/main/resources/assets/growthcraft_cellar/models/item/red_grape_wine_fluid_bucket.json new file mode 100644 index 0000000..f5fba3f --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/item/red_grape_wine_fluid_bucket.json @@ -0,0 +1,7 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft:item/bucket/bucket_fluid", + "layer1": "growthcraft:item/bucket/bucket_base" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/item/roaster.json b/src/main/resources/assets/growthcraft_cellar/models/item/roaster.json new file mode 100644 index 0000000..0956855 --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/item/roaster.json @@ -0,0 +1,3 @@ +{ + "parent": "growthcraft_cellar:block/roaster_chimney_level_4" +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/item/stout_ale_fluid_bucket.json b/src/main/resources/assets/growthcraft_cellar/models/item/stout_ale_fluid_bucket.json new file mode 100644 index 0000000..f5fba3f --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/item/stout_ale_fluid_bucket.json @@ -0,0 +1,7 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft:item/bucket/bucket_fluid", + "layer1": "growthcraft:item/bucket/bucket_base" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/item/vienna_lager_fluid_bucket.json b/src/main/resources/assets/growthcraft_cellar/models/item/vienna_lager_fluid_bucket.json new file mode 100644 index 0000000..f5fba3f --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/item/vienna_lager_fluid_bucket.json @@ -0,0 +1,7 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft:item/bucket/bucket_fluid", + "layer1": "growthcraft:item/bucket/bucket_base" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/item/white_grape_juice_fluid_bucket.json b/src/main/resources/assets/growthcraft_cellar/models/item/white_grape_juice_fluid_bucket.json new file mode 100644 index 0000000..f5fba3f --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/item/white_grape_juice_fluid_bucket.json @@ -0,0 +1,7 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft:item/bucket/bucket_fluid", + "layer1": "growthcraft:item/bucket/bucket_base" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/item/white_grape_wine_fluid_bucket.json b/src/main/resources/assets/growthcraft_cellar/models/item/white_grape_wine_fluid_bucket.json new file mode 100644 index 0000000..f5fba3f --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/item/white_grape_wine_fluid_bucket.json @@ -0,0 +1,7 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft:item/bucket/bucket_fluid", + "layer1": "growthcraft:item/bucket/bucket_base" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/item/wort_fluid_bucket.json b/src/main/resources/assets/growthcraft_cellar/models/item/wort_fluid_bucket.json new file mode 100644 index 0000000..f5fba3f --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/item/wort_fluid_bucket.json @@ -0,0 +1,7 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft:item/bucket/bucket_fluid", + "layer1": "growthcraft:item/bucket/bucket_base" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/item/yeast_bayanus.json b/src/main/resources/assets/growthcraft_cellar/models/item/yeast_bayanus.json new file mode 100644 index 0000000..299038f --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/item/yeast_bayanus.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_cellar:item/yeast_bayanus" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/item/yeast_bayanus_ethereal.json b/src/main/resources/assets/growthcraft_cellar/models/item/yeast_bayanus_ethereal.json new file mode 100644 index 0000000..299038f --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/item/yeast_bayanus_ethereal.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_cellar:item/yeast_bayanus" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/item/yeast_brewers.json b/src/main/resources/assets/growthcraft_cellar/models/item/yeast_brewers.json new file mode 100644 index 0000000..added2c --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/item/yeast_brewers.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_cellar:item/yeast_brewers" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/item/yeast_brewers_ethereal.json b/src/main/resources/assets/growthcraft_cellar/models/item/yeast_brewers_ethereal.json new file mode 100644 index 0000000..added2c --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/item/yeast_brewers_ethereal.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_cellar:item/yeast_brewers" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/item/yeast_ethereal.json b/src/main/resources/assets/growthcraft_cellar/models/item/yeast_ethereal.json new file mode 100644 index 0000000..a4a0ec7 --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/item/yeast_ethereal.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_cellar:item/yeast_ethereal" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/item/yeast_lager.json b/src/main/resources/assets/growthcraft_cellar/models/item/yeast_lager.json new file mode 100644 index 0000000..fa61847 --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/item/yeast_lager.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_cellar:item/yeast_lager" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/models/item/yeast_lager_ethereal.json b/src/main/resources/assets/growthcraft_cellar/models/item/yeast_lager_ethereal.json new file mode 100644 index 0000000..fa61847 --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/models/item/yeast_lager_ethereal.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_cellar:item/yeast_lager" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/barrel_ferment/iron_tap.png b/src/main/resources/assets/growthcraft_cellar/textures/block/barrel_ferment/iron_tap.png new file mode 100644 index 0000000..7816799 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/barrel_ferment/iron_tap.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/barrel_ferment/oak_bottom.png b/src/main/resources/assets/growthcraft_cellar/textures/block/barrel_ferment/oak_bottom.png new file mode 100644 index 0000000..0e06bd7 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/barrel_ferment/oak_bottom.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/barrel_ferment/oak_side.png b/src/main/resources/assets/growthcraft_cellar/textures/block/barrel_ferment/oak_side.png new file mode 100644 index 0000000..c6a8895 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/barrel_ferment/oak_side.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/barrel_ferment/oak_side_alt.png b/src/main/resources/assets/growthcraft_cellar/textures/block/barrel_ferment/oak_side_alt.png new file mode 100644 index 0000000..fb7c5aa Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/barrel_ferment/oak_side_alt.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/barrel_ferment/oak_top.png b/src/main/resources/assets/growthcraft_cellar/textures/block/barrel_ferment/oak_top.png new file mode 100644 index 0000000..0e06bd7 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/barrel_ferment/oak_top.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/brew_kettle/brew_kettle_base.png b/src/main/resources/assets/growthcraft_cellar/textures/block/brew_kettle/brew_kettle_base.png new file mode 100644 index 0000000..d5a30dd Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/brew_kettle/brew_kettle_base.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/brew_kettle/brew_kettle_feet.png b/src/main/resources/assets/growthcraft_cellar/textures/block/brew_kettle/brew_kettle_feet.png new file mode 100644 index 0000000..fb31385 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/brew_kettle/brew_kettle_feet.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/brew_kettle/brew_kettle_lid.png b/src/main/resources/assets/growthcraft_cellar/textures/block/brew_kettle/brew_kettle_lid.png new file mode 100644 index 0000000..59ad5da Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/brew_kettle/brew_kettle_lid.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/brew_kettle/brew_kettle_side.png b/src/main/resources/assets/growthcraft_cellar/textures/block/brew_kettle/brew_kettle_side.png new file mode 100644 index 0000000..c7c1391 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/brew_kettle/brew_kettle_side.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/brew_kettle/brew_kettle_top.png b/src/main/resources/assets/growthcraft_cellar/textures/block/brew_kettle/brew_kettle_top.png new file mode 100644 index 0000000..a84f32e Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/brew_kettle/brew_kettle_top.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/cork_leaves/cork_leaves.png b/src/main/resources/assets/growthcraft_cellar/textures/block/cork_leaves/cork_leaves.png new file mode 100644 index 0000000..4aaaf88 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/cork_leaves/cork_leaves.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/cork_leaves/cork_leaves_opaque.png b/src/main/resources/assets/growthcraft_cellar/textures/block/cork_leaves/cork_leaves_opaque.png new file mode 100644 index 0000000..868c3fa Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/cork_leaves/cork_leaves_opaque.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/cork_log/cork_log_end.png b/src/main/resources/assets/growthcraft_cellar/textures/block/cork_log/cork_log_end.png new file mode 100644 index 0000000..3815e74 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/cork_log/cork_log_end.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/cork_log/cork_log_grain.png b/src/main/resources/assets/growthcraft_cellar/textures/block/cork_log/cork_log_grain.png new file mode 100644 index 0000000..9302290 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/cork_log/cork_log_grain.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/cork_log/cork_log_side.png b/src/main/resources/assets/growthcraft_cellar/textures/block/cork_log/cork_log_side.png new file mode 100644 index 0000000..f10fc0b Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/cork_log/cork_log_side.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/cork_sapling.png b/src/main/resources/assets/growthcraft_cellar/textures/block/cork_sapling.png new file mode 100644 index 0000000..a07be77 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/cork_sapling.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/culture_jar.png b/src/main/resources/assets/growthcraft_cellar/textures/block/culture_jar.png new file mode 100644 index 0000000..c75c291 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/culture_jar.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/amber_ale_fluid.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/amber_ale_fluid.png new file mode 100644 index 0000000..c6f2fa9 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/amber_ale_fluid.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/amber_ale_fluid_flowing.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/amber_ale_fluid_flowing.png new file mode 100644 index 0000000..5b12070 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/amber_ale_fluid_flowing.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/amber_ale_fluid_flowing.png.mcmeta b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/amber_ale_fluid_flowing.png.mcmeta new file mode 100644 index 0000000..4f0718a --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/amber_ale_fluid_flowing.png.mcmeta @@ -0,0 +1,3 @@ +{ + "animation": {} +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/amber_ale_fluid_overlay.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/amber_ale_fluid_overlay.png new file mode 100644 index 0000000..d5d4b02 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/amber_ale_fluid_overlay.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/amber_ale_fluid_still.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/amber_ale_fluid_still.png new file mode 100644 index 0000000..fe5c394 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/amber_ale_fluid_still.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/amber_ale_fluid_still.png.mcmeta b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/amber_ale_fluid_still.png.mcmeta new file mode 100644 index 0000000..0645f48 --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/amber_ale_fluid_still.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 2 + } +} diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/amber_lager_fluid.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/amber_lager_fluid.png new file mode 100644 index 0000000..c6f2fa9 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/amber_lager_fluid.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/amber_lager_fluid_flowing.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/amber_lager_fluid_flowing.png new file mode 100644 index 0000000..5b12070 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/amber_lager_fluid_flowing.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/amber_lager_fluid_flowing.png.mcmeta b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/amber_lager_fluid_flowing.png.mcmeta new file mode 100644 index 0000000..4f0718a --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/amber_lager_fluid_flowing.png.mcmeta @@ -0,0 +1,3 @@ +{ + "animation": {} +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/amber_lager_fluid_overlay.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/amber_lager_fluid_overlay.png new file mode 100644 index 0000000..d5d4b02 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/amber_lager_fluid_overlay.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/amber_lager_fluid_still.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/amber_lager_fluid_still.png new file mode 100644 index 0000000..fe5c394 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/amber_lager_fluid_still.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/amber_lager_fluid_still.png.mcmeta b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/amber_lager_fluid_still.png.mcmeta new file mode 100644 index 0000000..0645f48 --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/amber_lager_fluid_still.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 2 + } +} diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/amber_wort_fluid.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/amber_wort_fluid.png new file mode 100644 index 0000000..c6f2fa9 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/amber_wort_fluid.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/amber_wort_fluid_flowing.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/amber_wort_fluid_flowing.png new file mode 100644 index 0000000..5b12070 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/amber_wort_fluid_flowing.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/amber_wort_fluid_flowing.png.mcmeta b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/amber_wort_fluid_flowing.png.mcmeta new file mode 100644 index 0000000..4f0718a --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/amber_wort_fluid_flowing.png.mcmeta @@ -0,0 +1,3 @@ +{ + "animation": {} +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/amber_wort_fluid_overlay.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/amber_wort_fluid_overlay.png new file mode 100644 index 0000000..d5d4b02 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/amber_wort_fluid_overlay.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/amber_wort_fluid_still.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/amber_wort_fluid_still.png new file mode 100644 index 0000000..fe5c394 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/amber_wort_fluid_still.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/amber_wort_fluid_still.png.mcmeta b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/amber_wort_fluid_still.png.mcmeta new file mode 100644 index 0000000..0645f48 --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/amber_wort_fluid_still.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 2 + } +} diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/brown_ale_fluid.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/brown_ale_fluid.png new file mode 100644 index 0000000..c6f2fa9 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/brown_ale_fluid.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/brown_ale_fluid_flowing.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/brown_ale_fluid_flowing.png new file mode 100644 index 0000000..5b12070 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/brown_ale_fluid_flowing.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/brown_ale_fluid_flowing.png.mcmeta b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/brown_ale_fluid_flowing.png.mcmeta new file mode 100644 index 0000000..4f0718a --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/brown_ale_fluid_flowing.png.mcmeta @@ -0,0 +1,3 @@ +{ + "animation": {} +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/brown_ale_fluid_overlay.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/brown_ale_fluid_overlay.png new file mode 100644 index 0000000..d5d4b02 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/brown_ale_fluid_overlay.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/brown_ale_fluid_still.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/brown_ale_fluid_still.png new file mode 100644 index 0000000..fe5c394 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/brown_ale_fluid_still.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/brown_ale_fluid_still.png.mcmeta b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/brown_ale_fluid_still.png.mcmeta new file mode 100644 index 0000000..0645f48 --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/brown_ale_fluid_still.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 2 + } +} diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/brown_lager_fluid.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/brown_lager_fluid.png new file mode 100644 index 0000000..c6f2fa9 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/brown_lager_fluid.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/brown_lager_fluid_flowing.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/brown_lager_fluid_flowing.png new file mode 100644 index 0000000..5b12070 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/brown_lager_fluid_flowing.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/brown_lager_fluid_flowing.png.mcmeta b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/brown_lager_fluid_flowing.png.mcmeta new file mode 100644 index 0000000..4f0718a --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/brown_lager_fluid_flowing.png.mcmeta @@ -0,0 +1,3 @@ +{ + "animation": {} +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/brown_lager_fluid_overlay.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/brown_lager_fluid_overlay.png new file mode 100644 index 0000000..d5d4b02 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/brown_lager_fluid_overlay.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/brown_lager_fluid_still.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/brown_lager_fluid_still.png new file mode 100644 index 0000000..fe5c394 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/brown_lager_fluid_still.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/brown_lager_fluid_still.png.mcmeta b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/brown_lager_fluid_still.png.mcmeta new file mode 100644 index 0000000..0645f48 --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/brown_lager_fluid_still.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 2 + } +} diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/brown_wort_fluid.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/brown_wort_fluid.png new file mode 100644 index 0000000..c6f2fa9 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/brown_wort_fluid.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/brown_wort_fluid_flowing.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/brown_wort_fluid_flowing.png new file mode 100644 index 0000000..5b12070 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/brown_wort_fluid_flowing.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/brown_wort_fluid_flowing.png.mcmeta b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/brown_wort_fluid_flowing.png.mcmeta new file mode 100644 index 0000000..4f0718a --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/brown_wort_fluid_flowing.png.mcmeta @@ -0,0 +1,3 @@ +{ + "animation": {} +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/brown_wort_fluid_overlay.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/brown_wort_fluid_overlay.png new file mode 100644 index 0000000..d5d4b02 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/brown_wort_fluid_overlay.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/brown_wort_fluid_still.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/brown_wort_fluid_still.png new file mode 100644 index 0000000..fe5c394 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/brown_wort_fluid_still.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/brown_wort_fluid_still.png.mcmeta b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/brown_wort_fluid_still.png.mcmeta new file mode 100644 index 0000000..0645f48 --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/brown_wort_fluid_still.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 2 + } +} diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/copper_ale_fluid.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/copper_ale_fluid.png new file mode 100644 index 0000000..c6f2fa9 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/copper_ale_fluid.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/copper_ale_fluid_flowing.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/copper_ale_fluid_flowing.png new file mode 100644 index 0000000..5b12070 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/copper_ale_fluid_flowing.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/copper_ale_fluid_flowing.png.mcmeta b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/copper_ale_fluid_flowing.png.mcmeta new file mode 100644 index 0000000..4f0718a --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/copper_ale_fluid_flowing.png.mcmeta @@ -0,0 +1,3 @@ +{ + "animation": {} +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/copper_ale_fluid_overlay.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/copper_ale_fluid_overlay.png new file mode 100644 index 0000000..d5d4b02 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/copper_ale_fluid_overlay.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/copper_ale_fluid_still.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/copper_ale_fluid_still.png new file mode 100644 index 0000000..fe5c394 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/copper_ale_fluid_still.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/copper_ale_fluid_still.png.mcmeta b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/copper_ale_fluid_still.png.mcmeta new file mode 100644 index 0000000..0645f48 --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/copper_ale_fluid_still.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 2 + } +} diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/copper_lager_fluid.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/copper_lager_fluid.png new file mode 100644 index 0000000..c6f2fa9 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/copper_lager_fluid.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/copper_lager_fluid_flowing.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/copper_lager_fluid_flowing.png new file mode 100644 index 0000000..5b12070 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/copper_lager_fluid_flowing.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/copper_lager_fluid_flowing.png.mcmeta b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/copper_lager_fluid_flowing.png.mcmeta new file mode 100644 index 0000000..4f0718a --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/copper_lager_fluid_flowing.png.mcmeta @@ -0,0 +1,3 @@ +{ + "animation": {} +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/copper_lager_fluid_overlay.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/copper_lager_fluid_overlay.png new file mode 100644 index 0000000..d5d4b02 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/copper_lager_fluid_overlay.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/copper_lager_fluid_still.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/copper_lager_fluid_still.png new file mode 100644 index 0000000..fe5c394 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/copper_lager_fluid_still.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/copper_lager_fluid_still.png.mcmeta b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/copper_lager_fluid_still.png.mcmeta new file mode 100644 index 0000000..0645f48 --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/copper_lager_fluid_still.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 2 + } +} diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/copper_wort_fluid.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/copper_wort_fluid.png new file mode 100644 index 0000000..c6f2fa9 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/copper_wort_fluid.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/copper_wort_fluid_flowing.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/copper_wort_fluid_flowing.png new file mode 100644 index 0000000..5b12070 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/copper_wort_fluid_flowing.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/copper_wort_fluid_flowing.png.mcmeta b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/copper_wort_fluid_flowing.png.mcmeta new file mode 100644 index 0000000..4f0718a --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/copper_wort_fluid_flowing.png.mcmeta @@ -0,0 +1,3 @@ +{ + "animation": {} +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/copper_wort_fluid_overlay.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/copper_wort_fluid_overlay.png new file mode 100644 index 0000000..d5d4b02 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/copper_wort_fluid_overlay.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/copper_wort_fluid_still.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/copper_wort_fluid_still.png new file mode 100644 index 0000000..fe5c394 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/copper_wort_fluid_still.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/copper_wort_fluid_still.png.mcmeta b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/copper_wort_fluid_still.png.mcmeta new file mode 100644 index 0000000..0645f48 --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/copper_wort_fluid_still.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 2 + } +} diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/dark_lager_fluid.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/dark_lager_fluid.png new file mode 100644 index 0000000..c6f2fa9 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/dark_lager_fluid.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/dark_lager_fluid_flowing.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/dark_lager_fluid_flowing.png new file mode 100644 index 0000000..5b12070 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/dark_lager_fluid_flowing.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/dark_lager_fluid_flowing.png.mcmeta b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/dark_lager_fluid_flowing.png.mcmeta new file mode 100644 index 0000000..4f0718a --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/dark_lager_fluid_flowing.png.mcmeta @@ -0,0 +1,3 @@ +{ + "animation": {} +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/dark_lager_fluid_overlay.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/dark_lager_fluid_overlay.png new file mode 100644 index 0000000..d5d4b02 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/dark_lager_fluid_overlay.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/dark_lager_fluid_still.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/dark_lager_fluid_still.png new file mode 100644 index 0000000..fe5c394 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/dark_lager_fluid_still.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/dark_lager_fluid_still.png.mcmeta b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/dark_lager_fluid_still.png.mcmeta new file mode 100644 index 0000000..0645f48 --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/dark_lager_fluid_still.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 2 + } +} diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/dark_wort_fluid.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/dark_wort_fluid.png new file mode 100644 index 0000000..c6f2fa9 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/dark_wort_fluid.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/dark_wort_fluid_flowing.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/dark_wort_fluid_flowing.png new file mode 100644 index 0000000..5b12070 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/dark_wort_fluid_flowing.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/dark_wort_fluid_flowing.png.mcmeta b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/dark_wort_fluid_flowing.png.mcmeta new file mode 100644 index 0000000..4f0718a --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/dark_wort_fluid_flowing.png.mcmeta @@ -0,0 +1,3 @@ +{ + "animation": {} +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/dark_wort_fluid_overlay.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/dark_wort_fluid_overlay.png new file mode 100644 index 0000000..d5d4b02 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/dark_wort_fluid_overlay.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/dark_wort_fluid_still.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/dark_wort_fluid_still.png new file mode 100644 index 0000000..fe5c394 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/dark_wort_fluid_still.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/dark_wort_fluid_still.png.mcmeta b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/dark_wort_fluid_still.png.mcmeta new file mode 100644 index 0000000..0645f48 --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/dark_wort_fluid_still.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 2 + } +} diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/deep_amber_wort_fluid.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/deep_amber_wort_fluid.png new file mode 100644 index 0000000..c6f2fa9 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/deep_amber_wort_fluid.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/deep_amber_wort_fluid_flowing.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/deep_amber_wort_fluid_flowing.png new file mode 100644 index 0000000..5b12070 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/deep_amber_wort_fluid_flowing.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/deep_amber_wort_fluid_flowing.png.mcmeta b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/deep_amber_wort_fluid_flowing.png.mcmeta new file mode 100644 index 0000000..4f0718a --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/deep_amber_wort_fluid_flowing.png.mcmeta @@ -0,0 +1,3 @@ +{ + "animation": {} +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/deep_amber_wort_fluid_overlay.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/deep_amber_wort_fluid_overlay.png new file mode 100644 index 0000000..d5d4b02 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/deep_amber_wort_fluid_overlay.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/deep_amber_wort_fluid_still.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/deep_amber_wort_fluid_still.png new file mode 100644 index 0000000..fe5c394 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/deep_amber_wort_fluid_still.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/deep_amber_wort_fluid_still.png.mcmeta b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/deep_amber_wort_fluid_still.png.mcmeta new file mode 100644 index 0000000..0645f48 --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/deep_amber_wort_fluid_still.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 2 + } +} diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/fluid_flowing.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/fluid_flowing.png new file mode 100644 index 0000000..5a2d758 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/fluid_flowing.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/fluid_flowing.png.mcmeta b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/fluid_flowing.png.mcmeta new file mode 100644 index 0000000..4f0718a --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/fluid_flowing.png.mcmeta @@ -0,0 +1,3 @@ +{ + "animation": {} +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/fluid_overlay.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/fluid_overlay.png new file mode 100644 index 0000000..484a82f Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/fluid_overlay.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/fluid_still.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/fluid_still.png new file mode 100644 index 0000000..adf9f52 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/fluid_still.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/fluid_still.png.mcmeta b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/fluid_still.png.mcmeta new file mode 100644 index 0000000..0645f48 --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/fluid_still.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 2 + } +} diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/golden_wort_fluid.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/golden_wort_fluid.png new file mode 100644 index 0000000..c6f2fa9 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/golden_wort_fluid.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/golden_wort_fluid_flowing.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/golden_wort_fluid_flowing.png new file mode 100644 index 0000000..5b12070 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/golden_wort_fluid_flowing.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/golden_wort_fluid_flowing.png.mcmeta b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/golden_wort_fluid_flowing.png.mcmeta new file mode 100644 index 0000000..4f0718a --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/golden_wort_fluid_flowing.png.mcmeta @@ -0,0 +1,3 @@ +{ + "animation": {} +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/golden_wort_fluid_overlay.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/golden_wort_fluid_overlay.png new file mode 100644 index 0000000..d5d4b02 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/golden_wort_fluid_overlay.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/golden_wort_fluid_still.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/golden_wort_fluid_still.png new file mode 100644 index 0000000..fe5c394 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/golden_wort_fluid_still.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/golden_wort_fluid_still.png.mcmeta b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/golden_wort_fluid_still.png.mcmeta new file mode 100644 index 0000000..0645f48 --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/golden_wort_fluid_still.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 2 + } +} diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/hopped_golden_wort_fluid.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/hopped_golden_wort_fluid.png new file mode 100644 index 0000000..c6f2fa9 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/hopped_golden_wort_fluid.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/hopped_golden_wort_fluid_flowing.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/hopped_golden_wort_fluid_flowing.png new file mode 100644 index 0000000..5b12070 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/hopped_golden_wort_fluid_flowing.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/hopped_golden_wort_fluid_flowing.png.mcmeta b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/hopped_golden_wort_fluid_flowing.png.mcmeta new file mode 100644 index 0000000..4f0718a --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/hopped_golden_wort_fluid_flowing.png.mcmeta @@ -0,0 +1,3 @@ +{ + "animation": {} +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/hopped_golden_wort_fluid_overlay.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/hopped_golden_wort_fluid_overlay.png new file mode 100644 index 0000000..d5d4b02 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/hopped_golden_wort_fluid_overlay.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/hopped_golden_wort_fluid_still.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/hopped_golden_wort_fluid_still.png new file mode 100644 index 0000000..fe5c394 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/hopped_golden_wort_fluid_still.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/hopped_golden_wort_fluid_still.png.mcmeta b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/hopped_golden_wort_fluid_still.png.mcmeta new file mode 100644 index 0000000..0645f48 --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/hopped_golden_wort_fluid_still.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 2 + } +} diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/ipa_ale_fluid.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/ipa_ale_fluid.png new file mode 100644 index 0000000..c6f2fa9 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/ipa_ale_fluid.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/ipa_ale_fluid_flowing.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/ipa_ale_fluid_flowing.png new file mode 100644 index 0000000..5b12070 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/ipa_ale_fluid_flowing.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/ipa_ale_fluid_flowing.png.mcmeta b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/ipa_ale_fluid_flowing.png.mcmeta new file mode 100644 index 0000000..4f0718a --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/ipa_ale_fluid_flowing.png.mcmeta @@ -0,0 +1,3 @@ +{ + "animation": {} +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/ipa_ale_fluid_overlay.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/ipa_ale_fluid_overlay.png new file mode 100644 index 0000000..d5d4b02 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/ipa_ale_fluid_overlay.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/ipa_ale_fluid_still.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/ipa_ale_fluid_still.png new file mode 100644 index 0000000..fe5c394 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/ipa_ale_fluid_still.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/ipa_ale_fluid_still.png.mcmeta b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/ipa_ale_fluid_still.png.mcmeta new file mode 100644 index 0000000..0645f48 --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/ipa_ale_fluid_still.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 2 + } +} diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/old_port_ale_fluid.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/old_port_ale_fluid.png new file mode 100644 index 0000000..c6f2fa9 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/old_port_ale_fluid.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/old_port_ale_fluid_flowing.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/old_port_ale_fluid_flowing.png new file mode 100644 index 0000000..5b12070 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/old_port_ale_fluid_flowing.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/old_port_ale_fluid_flowing.png.mcmeta b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/old_port_ale_fluid_flowing.png.mcmeta new file mode 100644 index 0000000..4f0718a --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/old_port_ale_fluid_flowing.png.mcmeta @@ -0,0 +1,3 @@ +{ + "animation": {} +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/old_port_ale_fluid_overlay.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/old_port_ale_fluid_overlay.png new file mode 100644 index 0000000..d5d4b02 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/old_port_ale_fluid_overlay.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/old_port_ale_fluid_still.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/old_port_ale_fluid_still.png new file mode 100644 index 0000000..fe5c394 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/old_port_ale_fluid_still.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/old_port_ale_fluid_still.png.mcmeta b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/old_port_ale_fluid_still.png.mcmeta new file mode 100644 index 0000000..0645f48 --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/old_port_ale_fluid_still.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 2 + } +} diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/pale_ale_fluid.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/pale_ale_fluid.png new file mode 100644 index 0000000..c6f2fa9 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/pale_ale_fluid.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/pale_ale_fluid_flowing.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/pale_ale_fluid_flowing.png new file mode 100644 index 0000000..5b12070 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/pale_ale_fluid_flowing.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/pale_ale_fluid_flowing.png.mcmeta b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/pale_ale_fluid_flowing.png.mcmeta new file mode 100644 index 0000000..4f0718a --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/pale_ale_fluid_flowing.png.mcmeta @@ -0,0 +1,3 @@ +{ + "animation": {} +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/pale_ale_fluid_overlay.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/pale_ale_fluid_overlay.png new file mode 100644 index 0000000..d5d4b02 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/pale_ale_fluid_overlay.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/pale_ale_fluid_still.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/pale_ale_fluid_still.png new file mode 100644 index 0000000..fe5c394 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/pale_ale_fluid_still.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/pale_ale_fluid_still.png.mcmeta b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/pale_ale_fluid_still.png.mcmeta new file mode 100644 index 0000000..0645f48 --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/pale_ale_fluid_still.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 2 + } +} diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/pale_golden_wort_fluid.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/pale_golden_wort_fluid.png new file mode 100644 index 0000000..c6f2fa9 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/pale_golden_wort_fluid.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/pale_golden_wort_fluid_flowing.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/pale_golden_wort_fluid_flowing.png new file mode 100644 index 0000000..5b12070 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/pale_golden_wort_fluid_flowing.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/pale_golden_wort_fluid_flowing.png.mcmeta b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/pale_golden_wort_fluid_flowing.png.mcmeta new file mode 100644 index 0000000..4f0718a --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/pale_golden_wort_fluid_flowing.png.mcmeta @@ -0,0 +1,3 @@ +{ + "animation": {} +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/pale_golden_wort_fluid_overlay.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/pale_golden_wort_fluid_overlay.png new file mode 100644 index 0000000..d5d4b02 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/pale_golden_wort_fluid_overlay.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/pale_golden_wort_fluid_still.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/pale_golden_wort_fluid_still.png new file mode 100644 index 0000000..fe5c394 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/pale_golden_wort_fluid_still.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/pale_golden_wort_fluid_still.png.mcmeta b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/pale_golden_wort_fluid_still.png.mcmeta new file mode 100644 index 0000000..0645f48 --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/pale_golden_wort_fluid_still.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 2 + } +} diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/pale_lager_fluid.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/pale_lager_fluid.png new file mode 100644 index 0000000..c6f2fa9 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/pale_lager_fluid.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/pale_lager_fluid_flowing.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/pale_lager_fluid_flowing.png new file mode 100644 index 0000000..5b12070 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/pale_lager_fluid_flowing.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/pale_lager_fluid_flowing.png.mcmeta b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/pale_lager_fluid_flowing.png.mcmeta new file mode 100644 index 0000000..4f0718a --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/pale_lager_fluid_flowing.png.mcmeta @@ -0,0 +1,3 @@ +{ + "animation": {} +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/pale_lager_fluid_overlay.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/pale_lager_fluid_overlay.png new file mode 100644 index 0000000..d5d4b02 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/pale_lager_fluid_overlay.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/pale_lager_fluid_still.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/pale_lager_fluid_still.png new file mode 100644 index 0000000..fe5c394 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/pale_lager_fluid_still.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/pale_lager_fluid_still.png.mcmeta b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/pale_lager_fluid_still.png.mcmeta new file mode 100644 index 0000000..0645f48 --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/pale_lager_fluid_still.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 2 + } +} diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/pilsner_lager_fluid.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/pilsner_lager_fluid.png new file mode 100644 index 0000000..c6f2fa9 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/pilsner_lager_fluid.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/pilsner_lager_fluid_flowing.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/pilsner_lager_fluid_flowing.png new file mode 100644 index 0000000..5b12070 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/pilsner_lager_fluid_flowing.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/pilsner_lager_fluid_flowing.png.mcmeta b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/pilsner_lager_fluid_flowing.png.mcmeta new file mode 100644 index 0000000..4f0718a --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/pilsner_lager_fluid_flowing.png.mcmeta @@ -0,0 +1,3 @@ +{ + "animation": {} +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/pilsner_lager_fluid_overlay.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/pilsner_lager_fluid_overlay.png new file mode 100644 index 0000000..d5d4b02 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/pilsner_lager_fluid_overlay.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/pilsner_lager_fluid_still.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/pilsner_lager_fluid_still.png new file mode 100644 index 0000000..fe5c394 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/pilsner_lager_fluid_still.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/pilsner_lager_fluid_still.png.mcmeta b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/pilsner_lager_fluid_still.png.mcmeta new file mode 100644 index 0000000..0645f48 --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/pilsner_lager_fluid_still.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 2 + } +} diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/purple_grape_juice_fluid.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/purple_grape_juice_fluid.png new file mode 100644 index 0000000..c6f2fa9 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/purple_grape_juice_fluid.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/purple_grape_juice_fluid_flowing.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/purple_grape_juice_fluid_flowing.png new file mode 100644 index 0000000..5b12070 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/purple_grape_juice_fluid_flowing.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/purple_grape_juice_fluid_flowing.png.mcmeta b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/purple_grape_juice_fluid_flowing.png.mcmeta new file mode 100644 index 0000000..4f0718a --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/purple_grape_juice_fluid_flowing.png.mcmeta @@ -0,0 +1,3 @@ +{ + "animation": {} +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/purple_grape_juice_fluid_overlay.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/purple_grape_juice_fluid_overlay.png new file mode 100644 index 0000000..d5d4b02 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/purple_grape_juice_fluid_overlay.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/purple_grape_juice_fluid_still.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/purple_grape_juice_fluid_still.png new file mode 100644 index 0000000..fe5c394 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/purple_grape_juice_fluid_still.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/purple_grape_juice_fluid_still.png.mcmeta b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/purple_grape_juice_fluid_still.png.mcmeta new file mode 100644 index 0000000..0645f48 --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/purple_grape_juice_fluid_still.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 2 + } +} diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/purple_grape_wine_fluid.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/purple_grape_wine_fluid.png new file mode 100644 index 0000000..c6f2fa9 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/purple_grape_wine_fluid.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/purple_grape_wine_fluid_flowing.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/purple_grape_wine_fluid_flowing.png new file mode 100644 index 0000000..5b12070 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/purple_grape_wine_fluid_flowing.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/purple_grape_wine_fluid_flowing.png.mcmeta b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/purple_grape_wine_fluid_flowing.png.mcmeta new file mode 100644 index 0000000..4f0718a --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/purple_grape_wine_fluid_flowing.png.mcmeta @@ -0,0 +1,3 @@ +{ + "animation": {} +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/purple_grape_wine_fluid_overlay.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/purple_grape_wine_fluid_overlay.png new file mode 100644 index 0000000..d5d4b02 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/purple_grape_wine_fluid_overlay.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/purple_grape_wine_fluid_still.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/purple_grape_wine_fluid_still.png new file mode 100644 index 0000000..fe5c394 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/purple_grape_wine_fluid_still.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/purple_grape_wine_fluid_still.png.mcmeta b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/purple_grape_wine_fluid_still.png.mcmeta new file mode 100644 index 0000000..0645f48 --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/purple_grape_wine_fluid_still.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 2 + } +} diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/red_grape_juice_fluid.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/red_grape_juice_fluid.png new file mode 100644 index 0000000..c6f2fa9 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/red_grape_juice_fluid.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/red_grape_juice_fluid_flowing.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/red_grape_juice_fluid_flowing.png new file mode 100644 index 0000000..5b12070 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/red_grape_juice_fluid_flowing.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/red_grape_juice_fluid_flowing.png.mcmeta b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/red_grape_juice_fluid_flowing.png.mcmeta new file mode 100644 index 0000000..4f0718a --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/red_grape_juice_fluid_flowing.png.mcmeta @@ -0,0 +1,3 @@ +{ + "animation": {} +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/red_grape_juice_fluid_overlay.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/red_grape_juice_fluid_overlay.png new file mode 100644 index 0000000..d5d4b02 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/red_grape_juice_fluid_overlay.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/red_grape_juice_fluid_still.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/red_grape_juice_fluid_still.png new file mode 100644 index 0000000..fe5c394 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/red_grape_juice_fluid_still.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/red_grape_juice_fluid_still.png.mcmeta b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/red_grape_juice_fluid_still.png.mcmeta new file mode 100644 index 0000000..0645f48 --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/red_grape_juice_fluid_still.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 2 + } +} diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/red_grape_wine_fluid.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/red_grape_wine_fluid.png new file mode 100644 index 0000000..c6f2fa9 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/red_grape_wine_fluid.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/red_grape_wine_fluid_flowing.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/red_grape_wine_fluid_flowing.png new file mode 100644 index 0000000..5b12070 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/red_grape_wine_fluid_flowing.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/red_grape_wine_fluid_flowing.png.mcmeta b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/red_grape_wine_fluid_flowing.png.mcmeta new file mode 100644 index 0000000..4f0718a --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/red_grape_wine_fluid_flowing.png.mcmeta @@ -0,0 +1,3 @@ +{ + "animation": {} +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/red_grape_wine_fluid_overlay.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/red_grape_wine_fluid_overlay.png new file mode 100644 index 0000000..d5d4b02 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/red_grape_wine_fluid_overlay.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/red_grape_wine_fluid_still.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/red_grape_wine_fluid_still.png new file mode 100644 index 0000000..fe5c394 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/red_grape_wine_fluid_still.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/red_grape_wine_fluid_still.png.mcmeta b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/red_grape_wine_fluid_still.png.mcmeta new file mode 100644 index 0000000..0645f48 --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/red_grape_wine_fluid_still.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 2 + } +} diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/stout_ale_fluid.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/stout_ale_fluid.png new file mode 100644 index 0000000..c6f2fa9 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/stout_ale_fluid.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/stout_ale_fluid_flowing.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/stout_ale_fluid_flowing.png new file mode 100644 index 0000000..5b12070 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/stout_ale_fluid_flowing.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/stout_ale_fluid_flowing.png.mcmeta b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/stout_ale_fluid_flowing.png.mcmeta new file mode 100644 index 0000000..4f0718a --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/stout_ale_fluid_flowing.png.mcmeta @@ -0,0 +1,3 @@ +{ + "animation": {} +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/stout_ale_fluid_overlay.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/stout_ale_fluid_overlay.png new file mode 100644 index 0000000..d5d4b02 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/stout_ale_fluid_overlay.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/stout_ale_fluid_still.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/stout_ale_fluid_still.png new file mode 100644 index 0000000..fe5c394 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/stout_ale_fluid_still.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/stout_ale_fluid_still.png.mcmeta b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/stout_ale_fluid_still.png.mcmeta new file mode 100644 index 0000000..0645f48 --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/stout_ale_fluid_still.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 2 + } +} diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/vienna_lager_fluid.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/vienna_lager_fluid.png new file mode 100644 index 0000000..c6f2fa9 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/vienna_lager_fluid.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/vienna_lager_fluid_flowing.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/vienna_lager_fluid_flowing.png new file mode 100644 index 0000000..5b12070 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/vienna_lager_fluid_flowing.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/vienna_lager_fluid_flowing.png.mcmeta b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/vienna_lager_fluid_flowing.png.mcmeta new file mode 100644 index 0000000..4f0718a --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/vienna_lager_fluid_flowing.png.mcmeta @@ -0,0 +1,3 @@ +{ + "animation": {} +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/vienna_lager_fluid_overlay.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/vienna_lager_fluid_overlay.png new file mode 100644 index 0000000..d5d4b02 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/vienna_lager_fluid_overlay.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/vienna_lager_fluid_still.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/vienna_lager_fluid_still.png new file mode 100644 index 0000000..fe5c394 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/vienna_lager_fluid_still.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/vienna_lager_fluid_still.png.mcmeta b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/vienna_lager_fluid_still.png.mcmeta new file mode 100644 index 0000000..0645f48 --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/vienna_lager_fluid_still.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 2 + } +} diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/white_grape_juice_fluid.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/white_grape_juice_fluid.png new file mode 100644 index 0000000..c6f2fa9 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/white_grape_juice_fluid.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/white_grape_juice_fluid_flowing.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/white_grape_juice_fluid_flowing.png new file mode 100644 index 0000000..5b12070 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/white_grape_juice_fluid_flowing.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/white_grape_juice_fluid_flowing.png.mcmeta b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/white_grape_juice_fluid_flowing.png.mcmeta new file mode 100644 index 0000000..4f0718a --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/white_grape_juice_fluid_flowing.png.mcmeta @@ -0,0 +1,3 @@ +{ + "animation": {} +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/white_grape_juice_fluid_overlay.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/white_grape_juice_fluid_overlay.png new file mode 100644 index 0000000..d5d4b02 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/white_grape_juice_fluid_overlay.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/white_grape_juice_fluid_still.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/white_grape_juice_fluid_still.png new file mode 100644 index 0000000..fe5c394 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/white_grape_juice_fluid_still.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/white_grape_juice_fluid_still.png.mcmeta b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/white_grape_juice_fluid_still.png.mcmeta new file mode 100644 index 0000000..0645f48 --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/white_grape_juice_fluid_still.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 2 + } +} diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/white_grape_wine_fluid.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/white_grape_wine_fluid.png new file mode 100644 index 0000000..c6f2fa9 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/white_grape_wine_fluid.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/white_grape_wine_fluid_flowing.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/white_grape_wine_fluid_flowing.png new file mode 100644 index 0000000..5b12070 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/white_grape_wine_fluid_flowing.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/white_grape_wine_fluid_flowing.png.mcmeta b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/white_grape_wine_fluid_flowing.png.mcmeta new file mode 100644 index 0000000..4f0718a --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/white_grape_wine_fluid_flowing.png.mcmeta @@ -0,0 +1,3 @@ +{ + "animation": {} +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/white_grape_wine_fluid_overlay.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/white_grape_wine_fluid_overlay.png new file mode 100644 index 0000000..d5d4b02 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/white_grape_wine_fluid_overlay.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/white_grape_wine_fluid_still.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/white_grape_wine_fluid_still.png new file mode 100644 index 0000000..fe5c394 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/white_grape_wine_fluid_still.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/white_grape_wine_fluid_still.png.mcmeta b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/white_grape_wine_fluid_still.png.mcmeta new file mode 100644 index 0000000..0645f48 --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/white_grape_wine_fluid_still.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 2 + } +} diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/wort_fluid.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/wort_fluid.png new file mode 100644 index 0000000..c6f2fa9 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/wort_fluid.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/wort_fluid_flowing.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/wort_fluid_flowing.png new file mode 100644 index 0000000..5b12070 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/wort_fluid_flowing.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/wort_fluid_flowing.png.mcmeta b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/wort_fluid_flowing.png.mcmeta new file mode 100644 index 0000000..4f0718a --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/wort_fluid_flowing.png.mcmeta @@ -0,0 +1,3 @@ +{ + "animation": {} +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/wort_fluid_overlay.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/wort_fluid_overlay.png new file mode 100644 index 0000000..d5d4b02 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/wort_fluid_overlay.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/wort_fluid_still.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/wort_fluid_still.png new file mode 100644 index 0000000..fe5c394 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/wort_fluid_still.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/wort_fluid_still.png.mcmeta b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/wort_fluid_still.png.mcmeta new file mode 100644 index 0000000..0645f48 --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/textures/block/fluid/wort_fluid_still.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 2 + } +} diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fruit_press/fruit_press.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fruit_press/fruit_press.png new file mode 100644 index 0000000..bb353c1 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fruit_press/fruit_press.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fruit_press/fruit_press_basket.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fruit_press/fruit_press_basket.png new file mode 100644 index 0000000..31ac53f Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fruit_press/fruit_press_basket.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fruit_press/fruit_press_bottom.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fruit_press/fruit_press_bottom.png new file mode 100644 index 0000000..1ced4c2 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fruit_press/fruit_press_bottom.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fruit_press/fruit_press_piston_bottom.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fruit_press/fruit_press_piston_bottom.png new file mode 100644 index 0000000..cd8efbf Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fruit_press/fruit_press_piston_bottom.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fruit_press/fruit_press_piston_head.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fruit_press/fruit_press_piston_head.png new file mode 100644 index 0000000..5f29fa4 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fruit_press/fruit_press_piston_head.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fruit_press/fruit_press_piston_inner.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fruit_press/fruit_press_piston_inner.png new file mode 100644 index 0000000..eb98df0 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fruit_press/fruit_press_piston_inner.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/fruit_press/fruit_press_piston_side.png b/src/main/resources/assets/growthcraft_cellar/textures/block/fruit_press/fruit_press_piston_side.png new file mode 100644 index 0000000..a66340f Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/fruit_press/fruit_press_piston_side.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/grape_vine/grape_vine_crop_stage0.png b/src/main/resources/assets/growthcraft_cellar/textures/block/grape_vine/grape_vine_crop_stage0.png new file mode 100644 index 0000000..d4296bd Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/grape_vine/grape_vine_crop_stage0.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/grape_vine/grape_vine_crop_stage4.png b/src/main/resources/assets/growthcraft_cellar/textures/block/grape_vine/grape_vine_crop_stage4.png new file mode 100644 index 0000000..d5f2299 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/grape_vine/grape_vine_crop_stage4.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/grape_vine/grape_vine_leaves.png b/src/main/resources/assets/growthcraft_cellar/textures/block/grape_vine/grape_vine_leaves.png new file mode 100644 index 0000000..f1a5849 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/grape_vine/grape_vine_leaves.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/grape_vine/grape_vine_stage0.png b/src/main/resources/assets/growthcraft_cellar/textures/block/grape_vine/grape_vine_stage0.png new file mode 100644 index 0000000..ebfd3d1 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/grape_vine/grape_vine_stage0.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/grape_vine/grape_vine_stage2.png b/src/main/resources/assets/growthcraft_cellar/textures/block/grape_vine/grape_vine_stage2.png new file mode 100644 index 0000000..080b5cd Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/grape_vine/grape_vine_stage2.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/grape_vine/grape_vine_trunk.png b/src/main/resources/assets/growthcraft_cellar/textures/block/grape_vine/grape_vine_trunk.png new file mode 100644 index 0000000..7111129 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/grape_vine/grape_vine_trunk.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/hops_vine_stage0.png b/src/main/resources/assets/growthcraft_cellar/textures/block/hops_vine_stage0.png new file mode 100644 index 0000000..d136bc9 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/hops_vine_stage0.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/hops_vine_stage4.png b/src/main/resources/assets/growthcraft_cellar/textures/block/hops_vine_stage4.png new file mode 100644 index 0000000..080b5cd Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/hops_vine_stage4.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/hops_vine_trunk.png b/src/main/resources/assets/growthcraft_cellar/textures/block/hops_vine_trunk.png new file mode 100644 index 0000000..7111129 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/hops_vine_trunk.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/leaves.png b/src/main/resources/assets/growthcraft_cellar/textures/block/leaves.png new file mode 100644 index 0000000..d52d6ec Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/leaves.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/leaves_fruit.png b/src/main/resources/assets/growthcraft_cellar/textures/block/leaves_fruit.png new file mode 100644 index 0000000..c8cac4f Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/leaves_fruit.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/leaves_hops.png b/src/main/resources/assets/growthcraft_cellar/textures/block/leaves_hops.png new file mode 100644 index 0000000..b89a4b5 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/leaves_hops.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/leaves_opaque.png b/src/main/resources/assets/growthcraft_cellar/textures/block/leaves_opaque.png new file mode 100644 index 0000000..01dd0f0 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/leaves_opaque.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/leaves_opaque_x.png b/src/main/resources/assets/growthcraft_cellar/textures/block/leaves_opaque_x.png new file mode 100644 index 0000000..7a542e8 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/leaves_opaque_x.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/block/leaves_x.png b/src/main/resources/assets/growthcraft_cellar/textures/block/leaves_x.png new file mode 100644 index 0000000..a4a3f92 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/block/leaves_x.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/gui/brew_kettle_screen.png b/src/main/resources/assets/growthcraft_cellar/textures/gui/brew_kettle_screen.png new file mode 100644 index 0000000..2533c3b Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/gui/brew_kettle_screen.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/gui/culture_jar_screen.png b/src/main/resources/assets/growthcraft_cellar/textures/gui/culture_jar_screen.png new file mode 100644 index 0000000..c148cb6 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/gui/culture_jar_screen.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/gui/fermentation_barrel_screen.png b/src/main/resources/assets/growthcraft_cellar/textures/gui/fermentation_barrel_screen.png new file mode 100644 index 0000000..515aeb0 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/gui/fermentation_barrel_screen.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/gui/fruit_press_screen.png b/src/main/resources/assets/growthcraft_cellar/textures/gui/fruit_press_screen.png new file mode 100644 index 0000000..4e58778 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/gui/fruit_press_screen.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/gui/roaster_screen.png b/src/main/resources/assets/growthcraft_cellar/textures/gui/roaster_screen.png new file mode 100644 index 0000000..d42da67 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/gui/roaster_screen.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/item/barrel_tap.png b/src/main/resources/assets/growthcraft_cellar/textures/item/barrel_tap.png new file mode 100644 index 0000000..2a296e8 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/item/barrel_tap.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/item/brew_kettle_lid.png b/src/main/resources/assets/growthcraft_cellar/textures/item/brew_kettle_lid.png new file mode 100644 index 0000000..2f055d8 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/item/brew_kettle_lid.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/item/bucket/ale/amber_ale_bucket.png b/src/main/resources/assets/growthcraft_cellar/textures/item/bucket/ale/amber_ale_bucket.png new file mode 100644 index 0000000..e35e7fe Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/item/bucket/ale/amber_ale_bucket.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/item/bucket/ale/brown_ale_bucket.png b/src/main/resources/assets/growthcraft_cellar/textures/item/bucket/ale/brown_ale_bucket.png new file mode 100644 index 0000000..a5b186f Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/item/bucket/ale/brown_ale_bucket.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/item/bucket/ale/copper_ale_bucket.png b/src/main/resources/assets/growthcraft_cellar/textures/item/bucket/ale/copper_ale_bucket.png new file mode 100644 index 0000000..e8b2ed7 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/item/bucket/ale/copper_ale_bucket.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/item/bucket/ale/ipa_ale_bucket.png b/src/main/resources/assets/growthcraft_cellar/textures/item/bucket/ale/ipa_ale_bucket.png new file mode 100644 index 0000000..4d130c2 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/item/bucket/ale/ipa_ale_bucket.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/item/bucket/ale/old_port_ale_bucket.png b/src/main/resources/assets/growthcraft_cellar/textures/item/bucket/ale/old_port_ale_bucket.png new file mode 100644 index 0000000..85080ad Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/item/bucket/ale/old_port_ale_bucket.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/item/bucket/ale/pale_ale_bucket.png b/src/main/resources/assets/growthcraft_cellar/textures/item/bucket/ale/pale_ale_bucket.png new file mode 100644 index 0000000..8b7f384 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/item/bucket/ale/pale_ale_bucket.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/item/bucket/ale/stout_ale_bucket.png b/src/main/resources/assets/growthcraft_cellar/textures/item/bucket/ale/stout_ale_bucket.png new file mode 100644 index 0000000..d893085 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/item/bucket/ale/stout_ale_bucket.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/item/bucket/bucket_base.png b/src/main/resources/assets/growthcraft_cellar/textures/item/bucket/bucket_base.png new file mode 100644 index 0000000..86e6a34 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/item/bucket/bucket_base.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/item/bucket/juice/purple_grape_juice_bucket.png b/src/main/resources/assets/growthcraft_cellar/textures/item/bucket/juice/purple_grape_juice_bucket.png new file mode 100644 index 0000000..edc3e82 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/item/bucket/juice/purple_grape_juice_bucket.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/item/bucket/juice/red_grape_juice_bucket.png b/src/main/resources/assets/growthcraft_cellar/textures/item/bucket/juice/red_grape_juice_bucket.png new file mode 100644 index 0000000..7bb40de Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/item/bucket/juice/red_grape_juice_bucket.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/item/bucket/juice/white_grape_juice_bucket.png b/src/main/resources/assets/growthcraft_cellar/textures/item/bucket/juice/white_grape_juice_bucket.png new file mode 100644 index 0000000..5bc7f55 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/item/bucket/juice/white_grape_juice_bucket.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/item/bucket/lager/amber_lager_bucket.png b/src/main/resources/assets/growthcraft_cellar/textures/item/bucket/lager/amber_lager_bucket.png new file mode 100644 index 0000000..ef4f600 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/item/bucket/lager/amber_lager_bucket.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/item/bucket/lager/brown_lager_bucket.png b/src/main/resources/assets/growthcraft_cellar/textures/item/bucket/lager/brown_lager_bucket.png new file mode 100644 index 0000000..457a8b9 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/item/bucket/lager/brown_lager_bucket.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/item/bucket/lager/copper_lager_bucket.png b/src/main/resources/assets/growthcraft_cellar/textures/item/bucket/lager/copper_lager_bucket.png new file mode 100644 index 0000000..b990458 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/item/bucket/lager/copper_lager_bucket.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/item/bucket/lager/dark_lager_bucket.png b/src/main/resources/assets/growthcraft_cellar/textures/item/bucket/lager/dark_lager_bucket.png new file mode 100644 index 0000000..f702ae8 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/item/bucket/lager/dark_lager_bucket.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/item/bucket/lager/pale_lager_bucket.png b/src/main/resources/assets/growthcraft_cellar/textures/item/bucket/lager/pale_lager_bucket.png new file mode 100644 index 0000000..f59bc7c Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/item/bucket/lager/pale_lager_bucket.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/item/bucket/lager/pilsner_lager_bucket.png b/src/main/resources/assets/growthcraft_cellar/textures/item/bucket/lager/pilsner_lager_bucket.png new file mode 100644 index 0000000..4cc58bc Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/item/bucket/lager/pilsner_lager_bucket.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/item/bucket/lager/vienna_lager_bucket.png b/src/main/resources/assets/growthcraft_cellar/textures/item/bucket/lager/vienna_lager_bucket.png new file mode 100644 index 0000000..f8e44b0 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/item/bucket/lager/vienna_lager_bucket.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/item/bucket/wine/bucket_overlay_purple_wine.png b/src/main/resources/assets/growthcraft_cellar/textures/item/bucket/wine/bucket_overlay_purple_wine.png new file mode 100644 index 0000000..65d13cb Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/item/bucket/wine/bucket_overlay_purple_wine.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/item/bucket/wine/bucket_overlay_red_wine.png b/src/main/resources/assets/growthcraft_cellar/textures/item/bucket/wine/bucket_overlay_red_wine.png new file mode 100644 index 0000000..018c819 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/item/bucket/wine/bucket_overlay_red_wine.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/item/bucket/wine/bucket_overlay_white_wine.png b/src/main/resources/assets/growthcraft_cellar/textures/item/bucket/wine/bucket_overlay_white_wine.png new file mode 100644 index 0000000..294f3df Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/item/bucket/wine/bucket_overlay_white_wine.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/item/bucket/wort/amber_wort_bucket.png b/src/main/resources/assets/growthcraft_cellar/textures/item/bucket/wort/amber_wort_bucket.png new file mode 100644 index 0000000..a4bd383 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/item/bucket/wort/amber_wort_bucket.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/item/bucket/wort/brown_wort_bucket.png b/src/main/resources/assets/growthcraft_cellar/textures/item/bucket/wort/brown_wort_bucket.png new file mode 100644 index 0000000..a4bd383 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/item/bucket/wort/brown_wort_bucket.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/item/bucket/wort/bucket_overlay_hopped_golden_wort.png b/src/main/resources/assets/growthcraft_cellar/textures/item/bucket/wort/bucket_overlay_hopped_golden_wort.png new file mode 100644 index 0000000..12754e6 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/item/bucket/wort/bucket_overlay_hopped_golden_wort.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/item/bucket/wort/bucket_overlay_red_wine.png b/src/main/resources/assets/growthcraft_cellar/textures/item/bucket/wort/bucket_overlay_red_wine.png new file mode 100644 index 0000000..018c819 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/item/bucket/wort/bucket_overlay_red_wine.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/item/bucket/wort/bucket_overlay_wort.png b/src/main/resources/assets/growthcraft_cellar/textures/item/bucket/wort/bucket_overlay_wort.png new file mode 100644 index 0000000..ea9f263 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/item/bucket/wort/bucket_overlay_wort.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/item/bucket/wort/copper_wort_bucket.png b/src/main/resources/assets/growthcraft_cellar/textures/item/bucket/wort/copper_wort_bucket.png new file mode 100644 index 0000000..a4bd383 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/item/bucket/wort/copper_wort_bucket.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/item/bucket/wort/dark_wort_bucket.png b/src/main/resources/assets/growthcraft_cellar/textures/item/bucket/wort/dark_wort_bucket.png new file mode 100644 index 0000000..a4bd383 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/item/bucket/wort/dark_wort_bucket.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/item/bucket/wort/deep_amber_wort_bucket.png b/src/main/resources/assets/growthcraft_cellar/textures/item/bucket/wort/deep_amber_wort_bucket.png new file mode 100644 index 0000000..a4bd383 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/item/bucket/wort/deep_amber_wort_bucket.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/item/bucket/wort/deep_copper_wort_bucket.png b/src/main/resources/assets/growthcraft_cellar/textures/item/bucket/wort/deep_copper_wort_bucket.png new file mode 100644 index 0000000..a4bd383 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/item/bucket/wort/deep_copper_wort_bucket.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/item/bucket/wort/golden_wort_bucket.png b/src/main/resources/assets/growthcraft_cellar/textures/item/bucket/wort/golden_wort_bucket.png new file mode 100644 index 0000000..a4bd383 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/item/bucket/wort/golden_wort_bucket.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/item/bucket/wort/hopped_golden_wort_bucket.png b/src/main/resources/assets/growthcraft_cellar/textures/item/bucket/wort/hopped_golden_wort_bucket.png new file mode 100644 index 0000000..1206692 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/item/bucket/wort/hopped_golden_wort_bucket.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/item/bucket/wort/pale_golden_wort_bucket.png b/src/main/resources/assets/growthcraft_cellar/textures/item/bucket/wort/pale_golden_wort_bucket.png new file mode 100644 index 0000000..eb997fa Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/item/bucket/wort/pale_golden_wort_bucket.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/item/cellar_bottle.png b/src/main/resources/assets/growthcraft_cellar/textures/item/cellar_bottle.png new file mode 100644 index 0000000..ad5cdf9 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/item/cellar_bottle.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/item/cork_bark.png b/src/main/resources/assets/growthcraft_cellar/textures/item/cork_bark.png new file mode 100644 index 0000000..f10fc0b Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/item/cork_bark.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/item/grain.png b/src/main/resources/assets/growthcraft_cellar/textures/item/grain.png new file mode 100644 index 0000000..d4b4d51 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/item/grain.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/item/grain_base.png b/src/main/resources/assets/growthcraft_cellar/textures/item/grain_base.png new file mode 100644 index 0000000..dab5bac Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/item/grain_base.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/item/grape_purple.png b/src/main/resources/assets/growthcraft_cellar/textures/item/grape_purple.png new file mode 100644 index 0000000..8677d7c Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/item/grape_purple.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/item/grape_red.png b/src/main/resources/assets/growthcraft_cellar/textures/item/grape_red.png new file mode 100644 index 0000000..2798b77 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/item/grape_red.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/item/grape_seeds_purple.png b/src/main/resources/assets/growthcraft_cellar/textures/item/grape_seeds_purple.png new file mode 100644 index 0000000..ee20e87 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/item/grape_seeds_purple.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/item/grape_seeds_red.png b/src/main/resources/assets/growthcraft_cellar/textures/item/grape_seeds_red.png new file mode 100644 index 0000000..164f352 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/item/grape_seeds_red.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/item/grape_seeds_white.png b/src/main/resources/assets/growthcraft_cellar/textures/item/grape_seeds_white.png new file mode 100644 index 0000000..09a9cc5 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/item/grape_seeds_white.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/item/grape_white.png b/src/main/resources/assets/growthcraft_cellar/textures/item/grape_white.png new file mode 100644 index 0000000..8a95a81 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/item/grape_white.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/item/hop_seeds.png b/src/main/resources/assets/growthcraft_cellar/textures/item/hop_seeds.png new file mode 100644 index 0000000..2927fec Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/item/hop_seeds.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/item/hops.png b/src/main/resources/assets/growthcraft_cellar/textures/item/hops.png new file mode 100644 index 0000000..7a78f70 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/item/hops.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/item/img.png b/src/main/resources/assets/growthcraft_cellar/textures/item/img.png new file mode 100644 index 0000000..c30a36e Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/item/img.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/item/kindling.png b/src/main/resources/assets/growthcraft_cellar/textures/item/kindling.png new file mode 100644 index 0000000..35671db Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/item/kindling.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/item/potion/brew_bottle_base.png b/src/main/resources/assets/growthcraft_cellar/textures/item/potion/brew_bottle_base.png new file mode 100644 index 0000000..ad5cdf9 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/item/potion/brew_bottle_base.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/item/potion/brew_bottle_contents.png b/src/main/resources/assets/growthcraft_cellar/textures/item/potion/brew_bottle_contents.png new file mode 100644 index 0000000..ffb2ad8 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/item/potion/brew_bottle_contents.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/item/potion/pint_ale.png b/src/main/resources/assets/growthcraft_cellar/textures/item/potion/pint_ale.png new file mode 100644 index 0000000..e274a04 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/item/potion/pint_ale.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/item/potion/pint_ale_icon.png b/src/main/resources/assets/growthcraft_cellar/textures/item/potion/pint_ale_icon.png new file mode 100644 index 0000000..a5cf455 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/item/potion/pint_ale_icon.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/item/potion/pint_ale_overlay.bak.png b/src/main/resources/assets/growthcraft_cellar/textures/item/potion/pint_ale_overlay.bak.png new file mode 100644 index 0000000..74780d8 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/item/potion/pint_ale_overlay.bak.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/item/potion/pint_ale_overlay.png b/src/main/resources/assets/growthcraft_cellar/textures/item/potion/pint_ale_overlay.png new file mode 100644 index 0000000..b887f72 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/item/potion/pint_ale_overlay.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/item/wort_bucket.png b/src/main/resources/assets/growthcraft_cellar/textures/item/wort_bucket.png new file mode 100644 index 0000000..a4bd383 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/item/wort_bucket.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/item/yeast_bayanus.png b/src/main/resources/assets/growthcraft_cellar/textures/item/yeast_bayanus.png new file mode 100644 index 0000000..3505ecb Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/item/yeast_bayanus.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/item/yeast_brewers.png b/src/main/resources/assets/growthcraft_cellar/textures/item/yeast_brewers.png new file mode 100644 index 0000000..674d38b Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/item/yeast_brewers.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/item/yeast_ethereal.png b/src/main/resources/assets/growthcraft_cellar/textures/item/yeast_ethereal.png new file mode 100644 index 0000000..e983c08 Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/item/yeast_ethereal.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/item/yeast_lager.png b/src/main/resources/assets/growthcraft_cellar/textures/item/yeast_lager.png new file mode 100644 index 0000000..6494d2b Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/item/yeast_lager.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/textures/item/yeast_origin.png b/src/main/resources/assets/growthcraft_cellar/textures/item/yeast_origin.png new file mode 100644 index 0000000..07a03ad Binary files /dev/null and b/src/main/resources/assets/growthcraft_cellar/textures/item/yeast_origin.png differ diff --git a/src/main/resources/assets/growthcraft_cellar/utilReplicateResources.py b/src/main/resources/assets/growthcraft_cellar/utilReplicateResources.py new file mode 100644 index 0000000..6e64ff5 --- /dev/null +++ b/src/main/resources/assets/growthcraft_cellar/utilReplicateResources.py @@ -0,0 +1,41 @@ +import shutil + +templateBaseDye = "wort" + +dyes = [ + "amber_ale", + "amber_lager", + "brown_ale", + "brown_lager", + "copper_ale", + "copper_lager", + "dark_lager", + "ipa_ale", + "old_port_ale", + "pale_ale", + "pale_lager", + "pilsner_lager", + "stout_ale", + "vienna_lager" +] + +for dye in dyes: + if dye == templateBaseDye: + continue + sourceFiles = [ + "blockstates/%s.json" % templateBaseDye, + "models/block/%s.json" % templateBaseDye, + "models/item/%s_bucket.json" % templateBaseDye + ] + targetFiles = [ + "blockstates/%s.json" % dye, + "models/block/%s.json" % dye, + "models/item/%s_bucket.json" % dye + ] + for x in range(0, len(sourceFiles)): + shutil.copy(sourceFiles[x], targetFiles[x]) + with open(targetFiles[x], 'r') as file: + contents = file.read() + contents = contents.replace(templateBaseDye, dye) + with open(targetFiles[x], 'w') as file: + file.write(contents) diff --git a/src/main/resources/assets/growthcraft_milk/blockstates/appenzeller_cheese.json b/src/main/resources/assets/growthcraft_milk/blockstates/appenzeller_cheese.json new file mode 100644 index 0000000..8cf25c6 --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/blockstates/appenzeller_cheese.json @@ -0,0 +1,333 @@ +{ + "multipart": [ + { + "when": { + "OR": [ + { + "slicestop": "0", + "facing": "north|east|south|west" + }, + { + "slicesbottom": "0", + "facing": "north|east|south|west" + } + ] + }, + "apply": { + "model": "growthcraft:block/empty" + } + }, + { + "when": { + "slicestop": "1", + "facing": "north" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_1" + } + }, + { + "when": { + "slicestop": "2", + "facing": "north" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_2" + } + }, + { + "when": { + "slicestop": "3", + "facing": "north" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_3" + } + }, + { + "when": { + "slicestop": "4", + "facing": "north" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_4" + } + }, + { + "when": { + "slicesbottom": "1", + "facing": "north" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_1" + } + }, + { + "when": { + "slicesbottom": "2", + "facing": "north" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_2" + } + }, + { + "when": { + "slicesbottom": "3", + "facing": "north" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_3" + } + }, + { + "when": { + "slicesbottom": "4", + "facing": "north" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_4" + } + }, + { + "when": { + "slicestop": "1", + "facing": "east" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_1", + "y": 90 + } + }, + { + "when": { + "slicestop": "2", + "facing": "east" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_2", + "y": 90 + } + }, + { + "when": { + "slicestop": "3", + "facing": "east" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_3", + "y": 90 + } + }, + { + "when": { + "slicestop": "4", + "facing": "east" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_4", + "y": 90 + } + }, + { + "when": { + "slicesbottom": "1", + "facing": "east" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_1", + "y": 90 + } + }, + { + "when": { + "slicesbottom": "2", + "facing": "east" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_2", + "y": 90 + } + }, + { + "when": { + "slicesbottom": "3", + "facing": "east" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_3", + "y": 90 + } + }, + { + "when": { + "slicesbottom": "4", + "facing": "east" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_4", + "y": 90 + } + }, + { + "when": { + "slicestop": "1", + "facing": "south" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_1", + "y": 180 + } + }, + { + "when": { + "slicestop": "2", + "facing": "south" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_2", + "y": 180 + } + }, + { + "when": { + "slicestop": "3", + "facing": "south" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_3", + "y": 180 + } + }, + { + "when": { + "slicestop": "4", + "facing": "south" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_4", + "y": 180 + } + }, + { + "when": { + "slicesbottom": "1", + "facing": "south" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_1", + "y": 180 + } + }, + { + "when": { + "slicesbottom": "2", + "facing": "south" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_2", + "y": 180 + } + }, + { + "when": { + "slicesbottom": "3", + "facing": "south" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_3", + "y": 180 + } + }, + { + "when": { + "slicesbottom": "4", + "facing": "south" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_4", + "y": 180 + } + }, + { + "when": { + "slicestop": "1", + "facing": "west" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_1", + "y": 270 + } + }, + { + "when": { + "slicestop": "2", + "facing": "west" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_2", + "y": 270 + } + }, + { + "when": { + "slicestop": "3", + "facing": "west" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_3", + "y": 270 + } + }, + { + "when": { + "slicestop": "4", + "facing": "west" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_4", + "y": 270 + } + }, + { + "when": { + "slicesbottom": "1", + "facing": "west" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_1", + "y": 270 + } + }, + { + "when": { + "slicesbottom": "2", + "facing": "west" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_2", + "y": 270 + } + }, + { + "when": { + "slicesbottom": "3", + "facing": "west" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_3", + "y": 270 + } + }, + { + "when": { + "slicesbottom": "4", + "facing": "west" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_4", + "y": 270 + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/blockstates/appenzeller_cheese_aged.json b/src/main/resources/assets/growthcraft_milk/blockstates/appenzeller_cheese_aged.json new file mode 100644 index 0000000..3961fe1 --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/blockstates/appenzeller_cheese_aged.json @@ -0,0 +1,89 @@ +{ + "multipart": [ + { + "when": { "OR": [ + { + "slicestop": "0", + "facing": "north|east|south|west" + }, + { + "slicesbottom": "0", + "facing": "north|east|south|west" + } + ]}, + "apply": {"model": "growthcraft:block/empty"} + }, + { + "when": { + "slicestop": "1", + "facing": "north" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_1" + } + }, + { + "when": { + "slicestop": "2", + "facing": "north" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_2" + } + }, + { + "when": { + "slicestop": "3", + "facing": "north" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_3" + } + }, + { + "when": { + "slicestop": "4", + "facing": "north" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_4" + } + }, + { + "when": { + "slicesbottom": "1", + "facing": "north" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_1" + } + }, + { + "when": { + "slicesbottom": "2", + "facing": "north" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_2" + } + }, + { + "when": { + "slicesbottom": "3", + "facing": "north" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_3" + } + }, + { + "when": { + "slicesbottom": "4", + "facing": "north" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_4" + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/blockstates/appenzeller_cheese_curds.json b/src/main/resources/assets/growthcraft_milk/blockstates/appenzeller_cheese_curds.json new file mode 100644 index 0000000..251f6ee --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/blockstates/appenzeller_cheese_curds.json @@ -0,0 +1,34 @@ +{ + "forge_marker": 1, + "defaults": { + "textures": { + "particle": "growthcraft_milk:block/cheese_curd/cheese_curd" + } + }, + "variants": { + "age=0": { + "model": "growthcraft_milk:block/cheese_curd/cheese_curd_cloth" + }, + "age=1": { + "model": "growthcraft_milk:block/cheese_curd/cheese_curd_cloth" + }, + "age=2": { + "model": "growthcraft_milk:block/cheese_curd/cheese_curd_cloth" + }, + "age=3": { + "model": "growthcraft_milk:block/cheese_curd/cheese_curd_cloth" + }, + "age=4": { + "model": "growthcraft_milk:block/cheese_curd/cheese_curd_cloth" + }, + "age=5": { + "model": "growthcraft_milk:block/cheese_curd/cheese_curd_cloth" + }, + "age=6": { + "model": "growthcraft_milk:block/cheese_curd/cheese_curd_cloth" + }, + "age=7": { + "model": "growthcraft_milk:block/cheese_curd/cheese_curd_cloth" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/blockstates/asiago_cheese.json b/src/main/resources/assets/growthcraft_milk/blockstates/asiago_cheese.json new file mode 100644 index 0000000..8cf25c6 --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/blockstates/asiago_cheese.json @@ -0,0 +1,333 @@ +{ + "multipart": [ + { + "when": { + "OR": [ + { + "slicestop": "0", + "facing": "north|east|south|west" + }, + { + "slicesbottom": "0", + "facing": "north|east|south|west" + } + ] + }, + "apply": { + "model": "growthcraft:block/empty" + } + }, + { + "when": { + "slicestop": "1", + "facing": "north" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_1" + } + }, + { + "when": { + "slicestop": "2", + "facing": "north" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_2" + } + }, + { + "when": { + "slicestop": "3", + "facing": "north" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_3" + } + }, + { + "when": { + "slicestop": "4", + "facing": "north" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_4" + } + }, + { + "when": { + "slicesbottom": "1", + "facing": "north" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_1" + } + }, + { + "when": { + "slicesbottom": "2", + "facing": "north" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_2" + } + }, + { + "when": { + "slicesbottom": "3", + "facing": "north" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_3" + } + }, + { + "when": { + "slicesbottom": "4", + "facing": "north" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_4" + } + }, + { + "when": { + "slicestop": "1", + "facing": "east" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_1", + "y": 90 + } + }, + { + "when": { + "slicestop": "2", + "facing": "east" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_2", + "y": 90 + } + }, + { + "when": { + "slicestop": "3", + "facing": "east" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_3", + "y": 90 + } + }, + { + "when": { + "slicestop": "4", + "facing": "east" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_4", + "y": 90 + } + }, + { + "when": { + "slicesbottom": "1", + "facing": "east" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_1", + "y": 90 + } + }, + { + "when": { + "slicesbottom": "2", + "facing": "east" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_2", + "y": 90 + } + }, + { + "when": { + "slicesbottom": "3", + "facing": "east" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_3", + "y": 90 + } + }, + { + "when": { + "slicesbottom": "4", + "facing": "east" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_4", + "y": 90 + } + }, + { + "when": { + "slicestop": "1", + "facing": "south" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_1", + "y": 180 + } + }, + { + "when": { + "slicestop": "2", + "facing": "south" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_2", + "y": 180 + } + }, + { + "when": { + "slicestop": "3", + "facing": "south" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_3", + "y": 180 + } + }, + { + "when": { + "slicestop": "4", + "facing": "south" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_4", + "y": 180 + } + }, + { + "when": { + "slicesbottom": "1", + "facing": "south" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_1", + "y": 180 + } + }, + { + "when": { + "slicesbottom": "2", + "facing": "south" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_2", + "y": 180 + } + }, + { + "when": { + "slicesbottom": "3", + "facing": "south" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_3", + "y": 180 + } + }, + { + "when": { + "slicesbottom": "4", + "facing": "south" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_4", + "y": 180 + } + }, + { + "when": { + "slicestop": "1", + "facing": "west" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_1", + "y": 270 + } + }, + { + "when": { + "slicestop": "2", + "facing": "west" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_2", + "y": 270 + } + }, + { + "when": { + "slicestop": "3", + "facing": "west" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_3", + "y": 270 + } + }, + { + "when": { + "slicestop": "4", + "facing": "west" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_4", + "y": 270 + } + }, + { + "when": { + "slicesbottom": "1", + "facing": "west" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_1", + "y": 270 + } + }, + { + "when": { + "slicesbottom": "2", + "facing": "west" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_2", + "y": 270 + } + }, + { + "when": { + "slicesbottom": "3", + "facing": "west" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_3", + "y": 270 + } + }, + { + "when": { + "slicesbottom": "4", + "facing": "west" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_4", + "y": 270 + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/blockstates/asiago_cheese_curds.json b/src/main/resources/assets/growthcraft_milk/blockstates/asiago_cheese_curds.json new file mode 100644 index 0000000..251f6ee --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/blockstates/asiago_cheese_curds.json @@ -0,0 +1,34 @@ +{ + "forge_marker": 1, + "defaults": { + "textures": { + "particle": "growthcraft_milk:block/cheese_curd/cheese_curd" + } + }, + "variants": { + "age=0": { + "model": "growthcraft_milk:block/cheese_curd/cheese_curd_cloth" + }, + "age=1": { + "model": "growthcraft_milk:block/cheese_curd/cheese_curd_cloth" + }, + "age=2": { + "model": "growthcraft_milk:block/cheese_curd/cheese_curd_cloth" + }, + "age=3": { + "model": "growthcraft_milk:block/cheese_curd/cheese_curd_cloth" + }, + "age=4": { + "model": "growthcraft_milk:block/cheese_curd/cheese_curd_cloth" + }, + "age=5": { + "model": "growthcraft_milk:block/cheese_curd/cheese_curd_cloth" + }, + "age=6": { + "model": "growthcraft_milk:block/cheese_curd/cheese_curd_cloth" + }, + "age=7": { + "model": "growthcraft_milk:block/cheese_curd/cheese_curd_cloth" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/blockstates/butter_milk_fluid.json b/src/main/resources/assets/growthcraft_milk/blockstates/butter_milk_fluid.json new file mode 100644 index 0000000..31dc5fa --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/blockstates/butter_milk_fluid.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "growthcraft:block/fluid" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/blockstates/casu_marzu_cheese.json b/src/main/resources/assets/growthcraft_milk/blockstates/casu_marzu_cheese.json new file mode 100644 index 0000000..8cf25c6 --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/blockstates/casu_marzu_cheese.json @@ -0,0 +1,333 @@ +{ + "multipart": [ + { + "when": { + "OR": [ + { + "slicestop": "0", + "facing": "north|east|south|west" + }, + { + "slicesbottom": "0", + "facing": "north|east|south|west" + } + ] + }, + "apply": { + "model": "growthcraft:block/empty" + } + }, + { + "when": { + "slicestop": "1", + "facing": "north" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_1" + } + }, + { + "when": { + "slicestop": "2", + "facing": "north" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_2" + } + }, + { + "when": { + "slicestop": "3", + "facing": "north" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_3" + } + }, + { + "when": { + "slicestop": "4", + "facing": "north" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_4" + } + }, + { + "when": { + "slicesbottom": "1", + "facing": "north" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_1" + } + }, + { + "when": { + "slicesbottom": "2", + "facing": "north" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_2" + } + }, + { + "when": { + "slicesbottom": "3", + "facing": "north" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_3" + } + }, + { + "when": { + "slicesbottom": "4", + "facing": "north" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_4" + } + }, + { + "when": { + "slicestop": "1", + "facing": "east" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_1", + "y": 90 + } + }, + { + "when": { + "slicestop": "2", + "facing": "east" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_2", + "y": 90 + } + }, + { + "when": { + "slicestop": "3", + "facing": "east" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_3", + "y": 90 + } + }, + { + "when": { + "slicestop": "4", + "facing": "east" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_4", + "y": 90 + } + }, + { + "when": { + "slicesbottom": "1", + "facing": "east" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_1", + "y": 90 + } + }, + { + "when": { + "slicesbottom": "2", + "facing": "east" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_2", + "y": 90 + } + }, + { + "when": { + "slicesbottom": "3", + "facing": "east" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_3", + "y": 90 + } + }, + { + "when": { + "slicesbottom": "4", + "facing": "east" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_4", + "y": 90 + } + }, + { + "when": { + "slicestop": "1", + "facing": "south" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_1", + "y": 180 + } + }, + { + "when": { + "slicestop": "2", + "facing": "south" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_2", + "y": 180 + } + }, + { + "when": { + "slicestop": "3", + "facing": "south" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_3", + "y": 180 + } + }, + { + "when": { + "slicestop": "4", + "facing": "south" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_4", + "y": 180 + } + }, + { + "when": { + "slicesbottom": "1", + "facing": "south" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_1", + "y": 180 + } + }, + { + "when": { + "slicesbottom": "2", + "facing": "south" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_2", + "y": 180 + } + }, + { + "when": { + "slicesbottom": "3", + "facing": "south" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_3", + "y": 180 + } + }, + { + "when": { + "slicesbottom": "4", + "facing": "south" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_4", + "y": 180 + } + }, + { + "when": { + "slicestop": "1", + "facing": "west" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_1", + "y": 270 + } + }, + { + "when": { + "slicestop": "2", + "facing": "west" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_2", + "y": 270 + } + }, + { + "when": { + "slicestop": "3", + "facing": "west" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_3", + "y": 270 + } + }, + { + "when": { + "slicestop": "4", + "facing": "west" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_4", + "y": 270 + } + }, + { + "when": { + "slicesbottom": "1", + "facing": "west" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_1", + "y": 270 + } + }, + { + "when": { + "slicesbottom": "2", + "facing": "west" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_2", + "y": 270 + } + }, + { + "when": { + "slicesbottom": "3", + "facing": "west" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_3", + "y": 270 + } + }, + { + "when": { + "slicesbottom": "4", + "facing": "west" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_4", + "y": 270 + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/blockstates/casu_marzu_cheese_curds.json b/src/main/resources/assets/growthcraft_milk/blockstates/casu_marzu_cheese_curds.json new file mode 100644 index 0000000..251f6ee --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/blockstates/casu_marzu_cheese_curds.json @@ -0,0 +1,34 @@ +{ + "forge_marker": 1, + "defaults": { + "textures": { + "particle": "growthcraft_milk:block/cheese_curd/cheese_curd" + } + }, + "variants": { + "age=0": { + "model": "growthcraft_milk:block/cheese_curd/cheese_curd_cloth" + }, + "age=1": { + "model": "growthcraft_milk:block/cheese_curd/cheese_curd_cloth" + }, + "age=2": { + "model": "growthcraft_milk:block/cheese_curd/cheese_curd_cloth" + }, + "age=3": { + "model": "growthcraft_milk:block/cheese_curd/cheese_curd_cloth" + }, + "age=4": { + "model": "growthcraft_milk:block/cheese_curd/cheese_curd_cloth" + }, + "age=5": { + "model": "growthcraft_milk:block/cheese_curd/cheese_curd_cloth" + }, + "age=6": { + "model": "growthcraft_milk:block/cheese_curd/cheese_curd_cloth" + }, + "age=7": { + "model": "growthcraft_milk:block/cheese_curd/cheese_curd_cloth" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/blockstates/cheddar_cheese.json b/src/main/resources/assets/growthcraft_milk/blockstates/cheddar_cheese.json new file mode 100644 index 0000000..8cf25c6 --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/blockstates/cheddar_cheese.json @@ -0,0 +1,333 @@ +{ + "multipart": [ + { + "when": { + "OR": [ + { + "slicestop": "0", + "facing": "north|east|south|west" + }, + { + "slicesbottom": "0", + "facing": "north|east|south|west" + } + ] + }, + "apply": { + "model": "growthcraft:block/empty" + } + }, + { + "when": { + "slicestop": "1", + "facing": "north" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_1" + } + }, + { + "when": { + "slicestop": "2", + "facing": "north" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_2" + } + }, + { + "when": { + "slicestop": "3", + "facing": "north" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_3" + } + }, + { + "when": { + "slicestop": "4", + "facing": "north" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_4" + } + }, + { + "when": { + "slicesbottom": "1", + "facing": "north" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_1" + } + }, + { + "when": { + "slicesbottom": "2", + "facing": "north" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_2" + } + }, + { + "when": { + "slicesbottom": "3", + "facing": "north" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_3" + } + }, + { + "when": { + "slicesbottom": "4", + "facing": "north" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_4" + } + }, + { + "when": { + "slicestop": "1", + "facing": "east" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_1", + "y": 90 + } + }, + { + "when": { + "slicestop": "2", + "facing": "east" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_2", + "y": 90 + } + }, + { + "when": { + "slicestop": "3", + "facing": "east" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_3", + "y": 90 + } + }, + { + "when": { + "slicestop": "4", + "facing": "east" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_4", + "y": 90 + } + }, + { + "when": { + "slicesbottom": "1", + "facing": "east" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_1", + "y": 90 + } + }, + { + "when": { + "slicesbottom": "2", + "facing": "east" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_2", + "y": 90 + } + }, + { + "when": { + "slicesbottom": "3", + "facing": "east" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_3", + "y": 90 + } + }, + { + "when": { + "slicesbottom": "4", + "facing": "east" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_4", + "y": 90 + } + }, + { + "when": { + "slicestop": "1", + "facing": "south" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_1", + "y": 180 + } + }, + { + "when": { + "slicestop": "2", + "facing": "south" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_2", + "y": 180 + } + }, + { + "when": { + "slicestop": "3", + "facing": "south" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_3", + "y": 180 + } + }, + { + "when": { + "slicestop": "4", + "facing": "south" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_4", + "y": 180 + } + }, + { + "when": { + "slicesbottom": "1", + "facing": "south" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_1", + "y": 180 + } + }, + { + "when": { + "slicesbottom": "2", + "facing": "south" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_2", + "y": 180 + } + }, + { + "when": { + "slicesbottom": "3", + "facing": "south" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_3", + "y": 180 + } + }, + { + "when": { + "slicesbottom": "4", + "facing": "south" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_4", + "y": 180 + } + }, + { + "when": { + "slicestop": "1", + "facing": "west" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_1", + "y": 270 + } + }, + { + "when": { + "slicestop": "2", + "facing": "west" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_2", + "y": 270 + } + }, + { + "when": { + "slicestop": "3", + "facing": "west" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_3", + "y": 270 + } + }, + { + "when": { + "slicestop": "4", + "facing": "west" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_4", + "y": 270 + } + }, + { + "when": { + "slicesbottom": "1", + "facing": "west" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_1", + "y": 270 + } + }, + { + "when": { + "slicesbottom": "2", + "facing": "west" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_2", + "y": 270 + } + }, + { + "when": { + "slicesbottom": "3", + "facing": "west" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_3", + "y": 270 + } + }, + { + "when": { + "slicesbottom": "4", + "facing": "west" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_4", + "y": 270 + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/blockstates/cheddar_cheese_curds.json b/src/main/resources/assets/growthcraft_milk/blockstates/cheddar_cheese_curds.json new file mode 100644 index 0000000..251f6ee --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/blockstates/cheddar_cheese_curds.json @@ -0,0 +1,34 @@ +{ + "forge_marker": 1, + "defaults": { + "textures": { + "particle": "growthcraft_milk:block/cheese_curd/cheese_curd" + } + }, + "variants": { + "age=0": { + "model": "growthcraft_milk:block/cheese_curd/cheese_curd_cloth" + }, + "age=1": { + "model": "growthcraft_milk:block/cheese_curd/cheese_curd_cloth" + }, + "age=2": { + "model": "growthcraft_milk:block/cheese_curd/cheese_curd_cloth" + }, + "age=3": { + "model": "growthcraft_milk:block/cheese_curd/cheese_curd_cloth" + }, + "age=4": { + "model": "growthcraft_milk:block/cheese_curd/cheese_curd_cloth" + }, + "age=5": { + "model": "growthcraft_milk:block/cheese_curd/cheese_curd_cloth" + }, + "age=6": { + "model": "growthcraft_milk:block/cheese_curd/cheese_curd_cloth" + }, + "age=7": { + "model": "growthcraft_milk:block/cheese_curd/cheese_curd_cloth" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/blockstates/cheese_base_fluid.json b/src/main/resources/assets/growthcraft_milk/blockstates/cheese_base_fluid.json new file mode 100644 index 0000000..31dc5fa --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/blockstates/cheese_base_fluid.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "growthcraft:block/fluid" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/blockstates/cheese_press.json b/src/main/resources/assets/growthcraft_milk/blockstates/cheese_press.json new file mode 100644 index 0000000..c91d078 --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/blockstates/cheese_press.json @@ -0,0 +1,81 @@ +{ + "multipart": [ + { + "apply": { + "model": "growthcraft_milk:block/cheese_press_base" + } + }, + { + "when": { + "rotation": "0" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_press_topper_0", + "uvlock": true + } + }, + { + "when": { + "rotation": "1" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_press_topper_1", + "uvlock": true + } + }, + { + "when": { + "rotation": "2" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_press_topper_2", + "uvlock": true + } + }, + { + "when": { + "rotation": "3" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_press_topper_3", + "uvlock": true + } + }, + { + "when": { + "rotation": "4" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_press_topper_4", + "uvlock": true + } + }, + { + "when": { + "rotation": "5" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_press_topper_5", + "uvlock": true + } + }, + { + "when": { + "rotation": "6" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_press_topper_6", + "uvlock": true + } + }, + { + "when": { + "rotation": "7" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_press_topper_7", + "uvlock": true + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/blockstates/churn.json b/src/main/resources/assets/growthcraft_milk/blockstates/churn.json new file mode 100644 index 0000000..ad9896d --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/blockstates/churn.json @@ -0,0 +1,16 @@ +{ + "forge_marker": 1, + "defaults": { + "textures": { + "particle": "growthcraft_milk:block/butter_churn/butter_churn" + } + }, + "variants": { + "plunged=false": { + "model": "growthcraft_milk:block/churn_up" + }, + "plunged=true": { + "model": "growthcraft_milk:block/churn_down" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/blockstates/condensed_milk_fluid.json b/src/main/resources/assets/growthcraft_milk/blockstates/condensed_milk_fluid.json new file mode 100644 index 0000000..31dc5fa --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/blockstates/condensed_milk_fluid.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "growthcraft:block/fluid" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/blockstates/cream_fluid.json b/src/main/resources/assets/growthcraft_milk/blockstates/cream_fluid.json new file mode 100644 index 0000000..31dc5fa --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/blockstates/cream_fluid.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "growthcraft:block/fluid" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/blockstates/cultured_milk_fluid.json b/src/main/resources/assets/growthcraft_milk/blockstates/cultured_milk_fluid.json new file mode 100644 index 0000000..31dc5fa --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/blockstates/cultured_milk_fluid.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "growthcraft:block/fluid" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/blockstates/emmentaler_cheese.json b/src/main/resources/assets/growthcraft_milk/blockstates/emmentaler_cheese.json new file mode 100644 index 0000000..8cf25c6 --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/blockstates/emmentaler_cheese.json @@ -0,0 +1,333 @@ +{ + "multipart": [ + { + "when": { + "OR": [ + { + "slicestop": "0", + "facing": "north|east|south|west" + }, + { + "slicesbottom": "0", + "facing": "north|east|south|west" + } + ] + }, + "apply": { + "model": "growthcraft:block/empty" + } + }, + { + "when": { + "slicestop": "1", + "facing": "north" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_1" + } + }, + { + "when": { + "slicestop": "2", + "facing": "north" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_2" + } + }, + { + "when": { + "slicestop": "3", + "facing": "north" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_3" + } + }, + { + "when": { + "slicestop": "4", + "facing": "north" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_4" + } + }, + { + "when": { + "slicesbottom": "1", + "facing": "north" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_1" + } + }, + { + "when": { + "slicesbottom": "2", + "facing": "north" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_2" + } + }, + { + "when": { + "slicesbottom": "3", + "facing": "north" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_3" + } + }, + { + "when": { + "slicesbottom": "4", + "facing": "north" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_4" + } + }, + { + "when": { + "slicestop": "1", + "facing": "east" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_1", + "y": 90 + } + }, + { + "when": { + "slicestop": "2", + "facing": "east" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_2", + "y": 90 + } + }, + { + "when": { + "slicestop": "3", + "facing": "east" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_3", + "y": 90 + } + }, + { + "when": { + "slicestop": "4", + "facing": "east" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_4", + "y": 90 + } + }, + { + "when": { + "slicesbottom": "1", + "facing": "east" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_1", + "y": 90 + } + }, + { + "when": { + "slicesbottom": "2", + "facing": "east" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_2", + "y": 90 + } + }, + { + "when": { + "slicesbottom": "3", + "facing": "east" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_3", + "y": 90 + } + }, + { + "when": { + "slicesbottom": "4", + "facing": "east" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_4", + "y": 90 + } + }, + { + "when": { + "slicestop": "1", + "facing": "south" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_1", + "y": 180 + } + }, + { + "when": { + "slicestop": "2", + "facing": "south" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_2", + "y": 180 + } + }, + { + "when": { + "slicestop": "3", + "facing": "south" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_3", + "y": 180 + } + }, + { + "when": { + "slicestop": "4", + "facing": "south" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_4", + "y": 180 + } + }, + { + "when": { + "slicesbottom": "1", + "facing": "south" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_1", + "y": 180 + } + }, + { + "when": { + "slicesbottom": "2", + "facing": "south" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_2", + "y": 180 + } + }, + { + "when": { + "slicesbottom": "3", + "facing": "south" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_3", + "y": 180 + } + }, + { + "when": { + "slicesbottom": "4", + "facing": "south" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_4", + "y": 180 + } + }, + { + "when": { + "slicestop": "1", + "facing": "west" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_1", + "y": 270 + } + }, + { + "when": { + "slicestop": "2", + "facing": "west" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_2", + "y": 270 + } + }, + { + "when": { + "slicestop": "3", + "facing": "west" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_3", + "y": 270 + } + }, + { + "when": { + "slicestop": "4", + "facing": "west" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_4", + "y": 270 + } + }, + { + "when": { + "slicesbottom": "1", + "facing": "west" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_1", + "y": 270 + } + }, + { + "when": { + "slicesbottom": "2", + "facing": "west" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_2", + "y": 270 + } + }, + { + "when": { + "slicesbottom": "3", + "facing": "west" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_3", + "y": 270 + } + }, + { + "when": { + "slicesbottom": "4", + "facing": "west" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_4", + "y": 270 + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/blockstates/emmentaler_cheese_curds.json b/src/main/resources/assets/growthcraft_milk/blockstates/emmentaler_cheese_curds.json new file mode 100644 index 0000000..251f6ee --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/blockstates/emmentaler_cheese_curds.json @@ -0,0 +1,34 @@ +{ + "forge_marker": 1, + "defaults": { + "textures": { + "particle": "growthcraft_milk:block/cheese_curd/cheese_curd" + } + }, + "variants": { + "age=0": { + "model": "growthcraft_milk:block/cheese_curd/cheese_curd_cloth" + }, + "age=1": { + "model": "growthcraft_milk:block/cheese_curd/cheese_curd_cloth" + }, + "age=2": { + "model": "growthcraft_milk:block/cheese_curd/cheese_curd_cloth" + }, + "age=3": { + "model": "growthcraft_milk:block/cheese_curd/cheese_curd_cloth" + }, + "age=4": { + "model": "growthcraft_milk:block/cheese_curd/cheese_curd_cloth" + }, + "age=5": { + "model": "growthcraft_milk:block/cheese_curd/cheese_curd_cloth" + }, + "age=6": { + "model": "growthcraft_milk:block/cheese_curd/cheese_curd_cloth" + }, + "age=7": { + "model": "growthcraft_milk:block/cheese_curd/cheese_curd_cloth" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/blockstates/gorgonzola_cheese.json b/src/main/resources/assets/growthcraft_milk/blockstates/gorgonzola_cheese.json new file mode 100644 index 0000000..8cf25c6 --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/blockstates/gorgonzola_cheese.json @@ -0,0 +1,333 @@ +{ + "multipart": [ + { + "when": { + "OR": [ + { + "slicestop": "0", + "facing": "north|east|south|west" + }, + { + "slicesbottom": "0", + "facing": "north|east|south|west" + } + ] + }, + "apply": { + "model": "growthcraft:block/empty" + } + }, + { + "when": { + "slicestop": "1", + "facing": "north" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_1" + } + }, + { + "when": { + "slicestop": "2", + "facing": "north" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_2" + } + }, + { + "when": { + "slicestop": "3", + "facing": "north" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_3" + } + }, + { + "when": { + "slicestop": "4", + "facing": "north" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_4" + } + }, + { + "when": { + "slicesbottom": "1", + "facing": "north" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_1" + } + }, + { + "when": { + "slicesbottom": "2", + "facing": "north" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_2" + } + }, + { + "when": { + "slicesbottom": "3", + "facing": "north" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_3" + } + }, + { + "when": { + "slicesbottom": "4", + "facing": "north" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_4" + } + }, + { + "when": { + "slicestop": "1", + "facing": "east" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_1", + "y": 90 + } + }, + { + "when": { + "slicestop": "2", + "facing": "east" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_2", + "y": 90 + } + }, + { + "when": { + "slicestop": "3", + "facing": "east" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_3", + "y": 90 + } + }, + { + "when": { + "slicestop": "4", + "facing": "east" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_4", + "y": 90 + } + }, + { + "when": { + "slicesbottom": "1", + "facing": "east" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_1", + "y": 90 + } + }, + { + "when": { + "slicesbottom": "2", + "facing": "east" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_2", + "y": 90 + } + }, + { + "when": { + "slicesbottom": "3", + "facing": "east" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_3", + "y": 90 + } + }, + { + "when": { + "slicesbottom": "4", + "facing": "east" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_4", + "y": 90 + } + }, + { + "when": { + "slicestop": "1", + "facing": "south" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_1", + "y": 180 + } + }, + { + "when": { + "slicestop": "2", + "facing": "south" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_2", + "y": 180 + } + }, + { + "when": { + "slicestop": "3", + "facing": "south" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_3", + "y": 180 + } + }, + { + "when": { + "slicestop": "4", + "facing": "south" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_4", + "y": 180 + } + }, + { + "when": { + "slicesbottom": "1", + "facing": "south" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_1", + "y": 180 + } + }, + { + "when": { + "slicesbottom": "2", + "facing": "south" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_2", + "y": 180 + } + }, + { + "when": { + "slicesbottom": "3", + "facing": "south" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_3", + "y": 180 + } + }, + { + "when": { + "slicesbottom": "4", + "facing": "south" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_4", + "y": 180 + } + }, + { + "when": { + "slicestop": "1", + "facing": "west" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_1", + "y": 270 + } + }, + { + "when": { + "slicestop": "2", + "facing": "west" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_2", + "y": 270 + } + }, + { + "when": { + "slicestop": "3", + "facing": "west" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_3", + "y": 270 + } + }, + { + "when": { + "slicestop": "4", + "facing": "west" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_4", + "y": 270 + } + }, + { + "when": { + "slicesbottom": "1", + "facing": "west" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_1", + "y": 270 + } + }, + { + "when": { + "slicesbottom": "2", + "facing": "west" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_2", + "y": 270 + } + }, + { + "when": { + "slicesbottom": "3", + "facing": "west" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_3", + "y": 270 + } + }, + { + "when": { + "slicesbottom": "4", + "facing": "west" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_4", + "y": 270 + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/blockstates/gorgonzola_cheese_curds.json b/src/main/resources/assets/growthcraft_milk/blockstates/gorgonzola_cheese_curds.json new file mode 100644 index 0000000..251f6ee --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/blockstates/gorgonzola_cheese_curds.json @@ -0,0 +1,34 @@ +{ + "forge_marker": 1, + "defaults": { + "textures": { + "particle": "growthcraft_milk:block/cheese_curd/cheese_curd" + } + }, + "variants": { + "age=0": { + "model": "growthcraft_milk:block/cheese_curd/cheese_curd_cloth" + }, + "age=1": { + "model": "growthcraft_milk:block/cheese_curd/cheese_curd_cloth" + }, + "age=2": { + "model": "growthcraft_milk:block/cheese_curd/cheese_curd_cloth" + }, + "age=3": { + "model": "growthcraft_milk:block/cheese_curd/cheese_curd_cloth" + }, + "age=4": { + "model": "growthcraft_milk:block/cheese_curd/cheese_curd_cloth" + }, + "age=5": { + "model": "growthcraft_milk:block/cheese_curd/cheese_curd_cloth" + }, + "age=6": { + "model": "growthcraft_milk:block/cheese_curd/cheese_curd_cloth" + }, + "age=7": { + "model": "growthcraft_milk:block/cheese_curd/cheese_curd_cloth" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/blockstates/gouda_cheese.json b/src/main/resources/assets/growthcraft_milk/blockstates/gouda_cheese.json new file mode 100644 index 0000000..8cf25c6 --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/blockstates/gouda_cheese.json @@ -0,0 +1,333 @@ +{ + "multipart": [ + { + "when": { + "OR": [ + { + "slicestop": "0", + "facing": "north|east|south|west" + }, + { + "slicesbottom": "0", + "facing": "north|east|south|west" + } + ] + }, + "apply": { + "model": "growthcraft:block/empty" + } + }, + { + "when": { + "slicestop": "1", + "facing": "north" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_1" + } + }, + { + "when": { + "slicestop": "2", + "facing": "north" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_2" + } + }, + { + "when": { + "slicestop": "3", + "facing": "north" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_3" + } + }, + { + "when": { + "slicestop": "4", + "facing": "north" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_4" + } + }, + { + "when": { + "slicesbottom": "1", + "facing": "north" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_1" + } + }, + { + "when": { + "slicesbottom": "2", + "facing": "north" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_2" + } + }, + { + "when": { + "slicesbottom": "3", + "facing": "north" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_3" + } + }, + { + "when": { + "slicesbottom": "4", + "facing": "north" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_4" + } + }, + { + "when": { + "slicestop": "1", + "facing": "east" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_1", + "y": 90 + } + }, + { + "when": { + "slicestop": "2", + "facing": "east" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_2", + "y": 90 + } + }, + { + "when": { + "slicestop": "3", + "facing": "east" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_3", + "y": 90 + } + }, + { + "when": { + "slicestop": "4", + "facing": "east" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_4", + "y": 90 + } + }, + { + "when": { + "slicesbottom": "1", + "facing": "east" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_1", + "y": 90 + } + }, + { + "when": { + "slicesbottom": "2", + "facing": "east" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_2", + "y": 90 + } + }, + { + "when": { + "slicesbottom": "3", + "facing": "east" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_3", + "y": 90 + } + }, + { + "when": { + "slicesbottom": "4", + "facing": "east" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_4", + "y": 90 + } + }, + { + "when": { + "slicestop": "1", + "facing": "south" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_1", + "y": 180 + } + }, + { + "when": { + "slicestop": "2", + "facing": "south" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_2", + "y": 180 + } + }, + { + "when": { + "slicestop": "3", + "facing": "south" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_3", + "y": 180 + } + }, + { + "when": { + "slicestop": "4", + "facing": "south" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_4", + "y": 180 + } + }, + { + "when": { + "slicesbottom": "1", + "facing": "south" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_1", + "y": 180 + } + }, + { + "when": { + "slicesbottom": "2", + "facing": "south" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_2", + "y": 180 + } + }, + { + "when": { + "slicesbottom": "3", + "facing": "south" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_3", + "y": 180 + } + }, + { + "when": { + "slicesbottom": "4", + "facing": "south" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_4", + "y": 180 + } + }, + { + "when": { + "slicestop": "1", + "facing": "west" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_1", + "y": 270 + } + }, + { + "when": { + "slicestop": "2", + "facing": "west" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_2", + "y": 270 + } + }, + { + "when": { + "slicestop": "3", + "facing": "west" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_3", + "y": 270 + } + }, + { + "when": { + "slicestop": "4", + "facing": "west" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_4", + "y": 270 + } + }, + { + "when": { + "slicesbottom": "1", + "facing": "west" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_1", + "y": 270 + } + }, + { + "when": { + "slicesbottom": "2", + "facing": "west" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_2", + "y": 270 + } + }, + { + "when": { + "slicesbottom": "3", + "facing": "west" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_3", + "y": 270 + } + }, + { + "when": { + "slicesbottom": "4", + "facing": "west" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_4", + "y": 270 + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/blockstates/gouda_cheese_curds.json b/src/main/resources/assets/growthcraft_milk/blockstates/gouda_cheese_curds.json new file mode 100644 index 0000000..251f6ee --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/blockstates/gouda_cheese_curds.json @@ -0,0 +1,34 @@ +{ + "forge_marker": 1, + "defaults": { + "textures": { + "particle": "growthcraft_milk:block/cheese_curd/cheese_curd" + } + }, + "variants": { + "age=0": { + "model": "growthcraft_milk:block/cheese_curd/cheese_curd_cloth" + }, + "age=1": { + "model": "growthcraft_milk:block/cheese_curd/cheese_curd_cloth" + }, + "age=2": { + "model": "growthcraft_milk:block/cheese_curd/cheese_curd_cloth" + }, + "age=3": { + "model": "growthcraft_milk:block/cheese_curd/cheese_curd_cloth" + }, + "age=4": { + "model": "growthcraft_milk:block/cheese_curd/cheese_curd_cloth" + }, + "age=5": { + "model": "growthcraft_milk:block/cheese_curd/cheese_curd_cloth" + }, + "age=6": { + "model": "growthcraft_milk:block/cheese_curd/cheese_curd_cloth" + }, + "age=7": { + "model": "growthcraft_milk:block/cheese_curd/cheese_curd_cloth" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/blockstates/kumis_fluid.json b/src/main/resources/assets/growthcraft_milk/blockstates/kumis_fluid.json new file mode 100644 index 0000000..31dc5fa --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/blockstates/kumis_fluid.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "growthcraft:block/fluid" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/blockstates/milk_fluid.json b/src/main/resources/assets/growthcraft_milk/blockstates/milk_fluid.json new file mode 100644 index 0000000..31dc5fa --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/blockstates/milk_fluid.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "growthcraft:block/fluid" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/blockstates/mixing_vat.json b/src/main/resources/assets/growthcraft_milk/blockstates/mixing_vat.json new file mode 100644 index 0000000..d6bc94a --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/blockstates/mixing_vat.json @@ -0,0 +1,10 @@ +{ + "variants": { + "lit=true": { + "model": "growthcraft_milk:block/mixing_vat" + }, + "lit=false": { + "model": "growthcraft_milk:block/mixing_vat" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/blockstates/monterey_cheese.json b/src/main/resources/assets/growthcraft_milk/blockstates/monterey_cheese.json new file mode 100644 index 0000000..8cf25c6 --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/blockstates/monterey_cheese.json @@ -0,0 +1,333 @@ +{ + "multipart": [ + { + "when": { + "OR": [ + { + "slicestop": "0", + "facing": "north|east|south|west" + }, + { + "slicesbottom": "0", + "facing": "north|east|south|west" + } + ] + }, + "apply": { + "model": "growthcraft:block/empty" + } + }, + { + "when": { + "slicestop": "1", + "facing": "north" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_1" + } + }, + { + "when": { + "slicestop": "2", + "facing": "north" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_2" + } + }, + { + "when": { + "slicestop": "3", + "facing": "north" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_3" + } + }, + { + "when": { + "slicestop": "4", + "facing": "north" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_4" + } + }, + { + "when": { + "slicesbottom": "1", + "facing": "north" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_1" + } + }, + { + "when": { + "slicesbottom": "2", + "facing": "north" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_2" + } + }, + { + "when": { + "slicesbottom": "3", + "facing": "north" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_3" + } + }, + { + "when": { + "slicesbottom": "4", + "facing": "north" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_4" + } + }, + { + "when": { + "slicestop": "1", + "facing": "east" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_1", + "y": 90 + } + }, + { + "when": { + "slicestop": "2", + "facing": "east" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_2", + "y": 90 + } + }, + { + "when": { + "slicestop": "3", + "facing": "east" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_3", + "y": 90 + } + }, + { + "when": { + "slicestop": "4", + "facing": "east" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_4", + "y": 90 + } + }, + { + "when": { + "slicesbottom": "1", + "facing": "east" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_1", + "y": 90 + } + }, + { + "when": { + "slicesbottom": "2", + "facing": "east" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_2", + "y": 90 + } + }, + { + "when": { + "slicesbottom": "3", + "facing": "east" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_3", + "y": 90 + } + }, + { + "when": { + "slicesbottom": "4", + "facing": "east" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_4", + "y": 90 + } + }, + { + "when": { + "slicestop": "1", + "facing": "south" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_1", + "y": 180 + } + }, + { + "when": { + "slicestop": "2", + "facing": "south" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_2", + "y": 180 + } + }, + { + "when": { + "slicestop": "3", + "facing": "south" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_3", + "y": 180 + } + }, + { + "when": { + "slicestop": "4", + "facing": "south" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_4", + "y": 180 + } + }, + { + "when": { + "slicesbottom": "1", + "facing": "south" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_1", + "y": 180 + } + }, + { + "when": { + "slicesbottom": "2", + "facing": "south" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_2", + "y": 180 + } + }, + { + "when": { + "slicesbottom": "3", + "facing": "south" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_3", + "y": 180 + } + }, + { + "when": { + "slicesbottom": "4", + "facing": "south" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_4", + "y": 180 + } + }, + { + "when": { + "slicestop": "1", + "facing": "west" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_1", + "y": 270 + } + }, + { + "when": { + "slicestop": "2", + "facing": "west" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_2", + "y": 270 + } + }, + { + "when": { + "slicestop": "3", + "facing": "west" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_3", + "y": 270 + } + }, + { + "when": { + "slicestop": "4", + "facing": "west" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_4", + "y": 270 + } + }, + { + "when": { + "slicesbottom": "1", + "facing": "west" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_1", + "y": 270 + } + }, + { + "when": { + "slicesbottom": "2", + "facing": "west" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_2", + "y": 270 + } + }, + { + "when": { + "slicesbottom": "3", + "facing": "west" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_3", + "y": 270 + } + }, + { + "when": { + "slicesbottom": "4", + "facing": "west" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_4", + "y": 270 + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/blockstates/monterey_cheese_curds.json b/src/main/resources/assets/growthcraft_milk/blockstates/monterey_cheese_curds.json new file mode 100644 index 0000000..251f6ee --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/blockstates/monterey_cheese_curds.json @@ -0,0 +1,34 @@ +{ + "forge_marker": 1, + "defaults": { + "textures": { + "particle": "growthcraft_milk:block/cheese_curd/cheese_curd" + } + }, + "variants": { + "age=0": { + "model": "growthcraft_milk:block/cheese_curd/cheese_curd_cloth" + }, + "age=1": { + "model": "growthcraft_milk:block/cheese_curd/cheese_curd_cloth" + }, + "age=2": { + "model": "growthcraft_milk:block/cheese_curd/cheese_curd_cloth" + }, + "age=3": { + "model": "growthcraft_milk:block/cheese_curd/cheese_curd_cloth" + }, + "age=4": { + "model": "growthcraft_milk:block/cheese_curd/cheese_curd_cloth" + }, + "age=5": { + "model": "growthcraft_milk:block/cheese_curd/cheese_curd_cloth" + }, + "age=6": { + "model": "growthcraft_milk:block/cheese_curd/cheese_curd_cloth" + }, + "age=7": { + "model": "growthcraft_milk:block/cheese_curd/cheese_curd_cloth" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/blockstates/pancheon.json b/src/main/resources/assets/growthcraft_milk/blockstates/pancheon.json new file mode 100644 index 0000000..e7fa3ba --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/blockstates/pancheon.json @@ -0,0 +1,25 @@ +{ + "forge_marker": 1, + "defaults": { + "textures": { + "particle": "growthcraft_milk:block/pancheon" + } + }, + "variants": { + "facing=north": { + "model": "growthcraft_milk:block/pancheon" + }, + "facing=south": { + "model": "growthcraft_milk:block/pancheon", + "y": 180 + }, + "facing=east": { + "model": "growthcraft_milk:block/pancheon", + "y": 90 + }, + "facing=west": { + "model": "growthcraft_milk:block/pancheon", + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/blockstates/parmesan_cheese.json b/src/main/resources/assets/growthcraft_milk/blockstates/parmesan_cheese.json new file mode 100644 index 0000000..8cf25c6 --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/blockstates/parmesan_cheese.json @@ -0,0 +1,333 @@ +{ + "multipart": [ + { + "when": { + "OR": [ + { + "slicestop": "0", + "facing": "north|east|south|west" + }, + { + "slicesbottom": "0", + "facing": "north|east|south|west" + } + ] + }, + "apply": { + "model": "growthcraft:block/empty" + } + }, + { + "when": { + "slicestop": "1", + "facing": "north" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_1" + } + }, + { + "when": { + "slicestop": "2", + "facing": "north" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_2" + } + }, + { + "when": { + "slicestop": "3", + "facing": "north" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_3" + } + }, + { + "when": { + "slicestop": "4", + "facing": "north" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_4" + } + }, + { + "when": { + "slicesbottom": "1", + "facing": "north" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_1" + } + }, + { + "when": { + "slicesbottom": "2", + "facing": "north" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_2" + } + }, + { + "when": { + "slicesbottom": "3", + "facing": "north" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_3" + } + }, + { + "when": { + "slicesbottom": "4", + "facing": "north" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_4" + } + }, + { + "when": { + "slicestop": "1", + "facing": "east" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_1", + "y": 90 + } + }, + { + "when": { + "slicestop": "2", + "facing": "east" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_2", + "y": 90 + } + }, + { + "when": { + "slicestop": "3", + "facing": "east" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_3", + "y": 90 + } + }, + { + "when": { + "slicestop": "4", + "facing": "east" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_4", + "y": 90 + } + }, + { + "when": { + "slicesbottom": "1", + "facing": "east" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_1", + "y": 90 + } + }, + { + "when": { + "slicesbottom": "2", + "facing": "east" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_2", + "y": 90 + } + }, + { + "when": { + "slicesbottom": "3", + "facing": "east" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_3", + "y": 90 + } + }, + { + "when": { + "slicesbottom": "4", + "facing": "east" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_4", + "y": 90 + } + }, + { + "when": { + "slicestop": "1", + "facing": "south" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_1", + "y": 180 + } + }, + { + "when": { + "slicestop": "2", + "facing": "south" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_2", + "y": 180 + } + }, + { + "when": { + "slicestop": "3", + "facing": "south" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_3", + "y": 180 + } + }, + { + "when": { + "slicestop": "4", + "facing": "south" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_4", + "y": 180 + } + }, + { + "when": { + "slicesbottom": "1", + "facing": "south" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_1", + "y": 180 + } + }, + { + "when": { + "slicesbottom": "2", + "facing": "south" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_2", + "y": 180 + } + }, + { + "when": { + "slicesbottom": "3", + "facing": "south" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_3", + "y": 180 + } + }, + { + "when": { + "slicesbottom": "4", + "facing": "south" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_4", + "y": 180 + } + }, + { + "when": { + "slicestop": "1", + "facing": "west" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_1", + "y": 270 + } + }, + { + "when": { + "slicestop": "2", + "facing": "west" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_2", + "y": 270 + } + }, + { + "when": { + "slicestop": "3", + "facing": "west" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_3", + "y": 270 + } + }, + { + "when": { + "slicestop": "4", + "facing": "west" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_4", + "y": 270 + } + }, + { + "when": { + "slicesbottom": "1", + "facing": "west" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_1", + "y": 270 + } + }, + { + "when": { + "slicesbottom": "2", + "facing": "west" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_2", + "y": 270 + } + }, + { + "when": { + "slicesbottom": "3", + "facing": "west" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_3", + "y": 270 + } + }, + { + "when": { + "slicesbottom": "4", + "facing": "west" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_4", + "y": 270 + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/blockstates/parmesan_cheese_curds.json b/src/main/resources/assets/growthcraft_milk/blockstates/parmesan_cheese_curds.json new file mode 100644 index 0000000..251f6ee --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/blockstates/parmesan_cheese_curds.json @@ -0,0 +1,34 @@ +{ + "forge_marker": 1, + "defaults": { + "textures": { + "particle": "growthcraft_milk:block/cheese_curd/cheese_curd" + } + }, + "variants": { + "age=0": { + "model": "growthcraft_milk:block/cheese_curd/cheese_curd_cloth" + }, + "age=1": { + "model": "growthcraft_milk:block/cheese_curd/cheese_curd_cloth" + }, + "age=2": { + "model": "growthcraft_milk:block/cheese_curd/cheese_curd_cloth" + }, + "age=3": { + "model": "growthcraft_milk:block/cheese_curd/cheese_curd_cloth" + }, + "age=4": { + "model": "growthcraft_milk:block/cheese_curd/cheese_curd_cloth" + }, + "age=5": { + "model": "growthcraft_milk:block/cheese_curd/cheese_curd_cloth" + }, + "age=6": { + "model": "growthcraft_milk:block/cheese_curd/cheese_curd_cloth" + }, + "age=7": { + "model": "growthcraft_milk:block/cheese_curd/cheese_curd_cloth" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/blockstates/provolone_cheese.json b/src/main/resources/assets/growthcraft_milk/blockstates/provolone_cheese.json new file mode 100644 index 0000000..8cf25c6 --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/blockstates/provolone_cheese.json @@ -0,0 +1,333 @@ +{ + "multipart": [ + { + "when": { + "OR": [ + { + "slicestop": "0", + "facing": "north|east|south|west" + }, + { + "slicesbottom": "0", + "facing": "north|east|south|west" + } + ] + }, + "apply": { + "model": "growthcraft:block/empty" + } + }, + { + "when": { + "slicestop": "1", + "facing": "north" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_1" + } + }, + { + "when": { + "slicestop": "2", + "facing": "north" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_2" + } + }, + { + "when": { + "slicestop": "3", + "facing": "north" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_3" + } + }, + { + "when": { + "slicestop": "4", + "facing": "north" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_4" + } + }, + { + "when": { + "slicesbottom": "1", + "facing": "north" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_1" + } + }, + { + "when": { + "slicesbottom": "2", + "facing": "north" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_2" + } + }, + { + "when": { + "slicesbottom": "3", + "facing": "north" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_3" + } + }, + { + "when": { + "slicesbottom": "4", + "facing": "north" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_4" + } + }, + { + "when": { + "slicestop": "1", + "facing": "east" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_1", + "y": 90 + } + }, + { + "when": { + "slicestop": "2", + "facing": "east" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_2", + "y": 90 + } + }, + { + "when": { + "slicestop": "3", + "facing": "east" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_3", + "y": 90 + } + }, + { + "when": { + "slicestop": "4", + "facing": "east" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_4", + "y": 90 + } + }, + { + "when": { + "slicesbottom": "1", + "facing": "east" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_1", + "y": 90 + } + }, + { + "when": { + "slicesbottom": "2", + "facing": "east" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_2", + "y": 90 + } + }, + { + "when": { + "slicesbottom": "3", + "facing": "east" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_3", + "y": 90 + } + }, + { + "when": { + "slicesbottom": "4", + "facing": "east" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_4", + "y": 90 + } + }, + { + "when": { + "slicestop": "1", + "facing": "south" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_1", + "y": 180 + } + }, + { + "when": { + "slicestop": "2", + "facing": "south" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_2", + "y": 180 + } + }, + { + "when": { + "slicestop": "3", + "facing": "south" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_3", + "y": 180 + } + }, + { + "when": { + "slicestop": "4", + "facing": "south" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_4", + "y": 180 + } + }, + { + "when": { + "slicesbottom": "1", + "facing": "south" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_1", + "y": 180 + } + }, + { + "when": { + "slicesbottom": "2", + "facing": "south" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_2", + "y": 180 + } + }, + { + "when": { + "slicesbottom": "3", + "facing": "south" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_3", + "y": 180 + } + }, + { + "when": { + "slicesbottom": "4", + "facing": "south" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_4", + "y": 180 + } + }, + { + "when": { + "slicestop": "1", + "facing": "west" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_1", + "y": 270 + } + }, + { + "when": { + "slicestop": "2", + "facing": "west" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_2", + "y": 270 + } + }, + { + "when": { + "slicestop": "3", + "facing": "west" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_3", + "y": 270 + } + }, + { + "when": { + "slicestop": "4", + "facing": "west" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_top_4", + "y": 270 + } + }, + { + "when": { + "slicesbottom": "1", + "facing": "west" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_1", + "y": 270 + } + }, + { + "when": { + "slicesbottom": "2", + "facing": "west" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_2", + "y": 270 + } + }, + { + "when": { + "slicesbottom": "3", + "facing": "west" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_3", + "y": 270 + } + }, + { + "when": { + "slicesbottom": "4", + "facing": "west" + }, + "apply": { + "model": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_4", + "y": 270 + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/blockstates/provolone_cheese_curds.json b/src/main/resources/assets/growthcraft_milk/blockstates/provolone_cheese_curds.json new file mode 100644 index 0000000..251f6ee --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/blockstates/provolone_cheese_curds.json @@ -0,0 +1,34 @@ +{ + "forge_marker": 1, + "defaults": { + "textures": { + "particle": "growthcraft_milk:block/cheese_curd/cheese_curd" + } + }, + "variants": { + "age=0": { + "model": "growthcraft_milk:block/cheese_curd/cheese_curd_cloth" + }, + "age=1": { + "model": "growthcraft_milk:block/cheese_curd/cheese_curd_cloth" + }, + "age=2": { + "model": "growthcraft_milk:block/cheese_curd/cheese_curd_cloth" + }, + "age=3": { + "model": "growthcraft_milk:block/cheese_curd/cheese_curd_cloth" + }, + "age=4": { + "model": "growthcraft_milk:block/cheese_curd/cheese_curd_cloth" + }, + "age=5": { + "model": "growthcraft_milk:block/cheese_curd/cheese_curd_cloth" + }, + "age=6": { + "model": "growthcraft_milk:block/cheese_curd/cheese_curd_cloth" + }, + "age=7": { + "model": "growthcraft_milk:block/cheese_curd/cheese_curd_cloth" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/blockstates/rennet_fluid.json b/src/main/resources/assets/growthcraft_milk/blockstates/rennet_fluid.json new file mode 100644 index 0000000..31dc5fa --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/blockstates/rennet_fluid.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "growthcraft:block/fluid" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/blockstates/ricotta_cheese_curds.json b/src/main/resources/assets/growthcraft_milk/blockstates/ricotta_cheese_curds.json new file mode 100644 index 0000000..251f6ee --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/blockstates/ricotta_cheese_curds.json @@ -0,0 +1,34 @@ +{ + "forge_marker": 1, + "defaults": { + "textures": { + "particle": "growthcraft_milk:block/cheese_curd/cheese_curd" + } + }, + "variants": { + "age=0": { + "model": "growthcraft_milk:block/cheese_curd/cheese_curd_cloth" + }, + "age=1": { + "model": "growthcraft_milk:block/cheese_curd/cheese_curd_cloth" + }, + "age=2": { + "model": "growthcraft_milk:block/cheese_curd/cheese_curd_cloth" + }, + "age=3": { + "model": "growthcraft_milk:block/cheese_curd/cheese_curd_cloth" + }, + "age=4": { + "model": "growthcraft_milk:block/cheese_curd/cheese_curd_cloth" + }, + "age=5": { + "model": "growthcraft_milk:block/cheese_curd/cheese_curd_cloth" + }, + "age=6": { + "model": "growthcraft_milk:block/cheese_curd/cheese_curd_cloth" + }, + "age=7": { + "model": "growthcraft_milk:block/cheese_curd/cheese_curd_cloth" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/blockstates/skim_milk_fluid.json b/src/main/resources/assets/growthcraft_milk/blockstates/skim_milk_fluid.json new file mode 100644 index 0000000..31dc5fa --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/blockstates/skim_milk_fluid.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "growthcraft:block/fluid" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/blockstates/thistle_crop.json b/src/main/resources/assets/growthcraft_milk/blockstates/thistle_crop.json new file mode 100644 index 0000000..85272e5 --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/blockstates/thistle_crop.json @@ -0,0 +1,68 @@ +{ + "multipart": [ + { + "when": { + "age": "0" + }, + "apply": { + "model": "growthcraft_milk:block/thistle_crop_stage0" + } + }, + { + "when": { + "age": "1" + }, + "apply": { + "model": "growthcraft_milk:block/thistle_crop_stage1" + } + }, + { + "when": { + "age": "2" + }, + "apply": { + "model": "growthcraft_milk:block/thistle_crop_stage1" + } + }, + { + "when": { + "age": "3" + }, + "apply": { + "model": "growthcraft_milk:block/thistle_crop_stage1" + } + }, + { + "when": { + "age": "4" + }, + "apply": { + "model": "growthcraft_milk:block/thistle_crop_stage2" + } + }, + { + "when": { + "age": "5" + }, + "apply": { + "model": "growthcraft_milk:block/thistle_crop_stage2" + } + }, + { + "when": { + "age": "6" + }, + "apply": { + "model": "growthcraft_milk:block/thistle_crop_stage2" + } + }, + { + "when": { + "age": "7" + }, + "apply": { + "model": "growthcraft_milk:block/thistle_crop_stage3" + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/blockstates/whey_fluid.json b/src/main/resources/assets/growthcraft_milk/blockstates/whey_fluid.json new file mode 100644 index 0000000..31dc5fa --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/blockstates/whey_fluid.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "growthcraft:block/fluid" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/lang/en_us.json b/src/main/resources/assets/growthcraft_milk/lang/en_us.json new file mode 100644 index 0000000..3754b68 --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/lang/en_us.json @@ -0,0 +1,103 @@ +{ + "block.growthcraft_milk.appenzeller_cheese": "Appenzeller Cheese", + "block.growthcraft_milk.appenzeller_cheese_curds": "Appenzeller Cheese Curds", + "block.growthcraft_milk.asiago_cheese": "Asiago Cheese", + "block.growthcraft_milk.asiago_cheese_curds": "Asiago Cheese Curds", + "block.growthcraft_milk.casu_marzu_cheese": "Casu Marzu Cheese", + "block.growthcraft_milk.casu_marzu_cheese_curds": "Casu Marzu Cheese Curds", + "block.growthcraft_milk.cheddar_cheese": "Cheddar Cheese", + "block.growthcraft_milk.cheddar_cheese_curds": "Cheddar Cheese Curds", + "block.growthcraft_milk.cheese_press": "Cheese Press", + "block.growthcraft_milk.churn": "Churn", + "block.growthcraft_milk.emmentaler_cheese": "Emmentaler Cheese", + "block.growthcraft_milk.emmentaler_cheese_curds": "Emmentaler Cheese Curds", + "block.growthcraft_milk.gorgonzola_cheese": "Gorgonzola Cheese", + "block.growthcraft_milk.gorgonzola_cheese_curds": "Gorgonzola Cheese Curds", + "block.growthcraft_milk.gouda_cheese": "Gouda Cheese", + "block.growthcraft_milk.gouda_cheese_curds": "Gouda Cheese Curds", + "block.growthcraft_milk.mixing_vat": "Mixing Vat", + "block.growthcraft_milk.monterey_cheese": "Monterey Cheese", + "block.growthcraft_milk.monterey_cheese_curds": "Monterey Cheese Curds", + "block.growthcraft_milk.pancheon": "Pancheon", + "block.growthcraft_milk.parmesan_cheese": "Parmesan Cheese", + "block.growthcraft_milk.parmesan_cheese_curds": "Parmesan Cheese Curds", + "block.growthcraft_milk.provolone_cheese": "Provolone Cheese", + "block.growthcraft_milk.provolone_cheese_curds": "Provolone Cheese Curds", + "block.growthcraft_milk.ricotta_cheese_curds": "Ricotta Cheese Curds", + "block.growthcraft_milk.thistle_crop": "Thistle", + "container.growthcraft_milk.cheese_press": "Cheese Press", + "container.growthcraft_milk.churn": "Churn", + "container.growthcraft_milk.mixing_vat": "Mixing Vat", + "container.growthcraft_milk.pancheon": "Pancheon", + "fluid.growthcraft_milk.butter_milk_fluid": "Butter Milk", + "fluid.growthcraft_milk.cheese_base_fluid": "Cheese Base", + "fluid.growthcraft_milk.condensed_milk_fluid": "Condensed Milk", + "fluid.growthcraft_milk.cream_fluid": "Cream", + "fluid.growthcraft_milk.cultured_milk_fluid": "Cultured Milk", + "fluid.growthcraft_milk.kumis_fluid": "Kumis", + "fluid.growthcraft_milk.milk_fluid": "Milk", + "fluid.growthcraft_milk.rennet_fluid": "Rennet", + "fluid.growthcraft_milk.skim_milk_fluid": "Skim Milk", + "fluid.growthcraft_milk.whey_fluid": "Whey", + "item.growthcraft_milk.appenzeller_cheese_curds_drained": "Appenzeller Cheese Curds (Drained)", + "item.growthcraft_milk.appenzeller_cheese_slice": "Appenzeller Cheese Slice", + "item.growthcraft_milk.asiago_cheese_curds_drained": "Asiago Cheese Curds (Drained)", + "item.growthcraft_milk.asiago_cheese_slice": "Asiago Cheese Slice", + "item.growthcraft_milk.butter": "Butter", + "item.growthcraft_milk.butter_milk_fluid_bucket": "Butter Milk Bucket", + "item.growthcraft_milk.butter_salted": "Salted Butter", + "item.growthcraft_milk.casu_marzu_cheese_curds_drained": "Casu Marzu Cheese Curds (Drained)", + "item.growthcraft_milk.casu_marzu_cheese_slice": "Casu Marzu Cheese Slice", + "item.growthcraft_milk.cheddar_cheese_curds_drained": "Cheddar Cheese Curds (Drained)", + "item.growthcraft_milk.cheddar_cheese_slice": "Cheddar Cheese Slice", + "item.growthcraft_milk.cheese_base_fluid_bucket": "Bucket of Cheese Base", + "item.growthcraft_milk.cheese_cloth": "Cheese Cloth", + "item.growthcraft_milk.condensed_milk_fluid_bucket": "Condensed Milk Bucket", + "item.growthcraft_milk.cream_fluid_bucket": "Cream Bucket", + "item.growthcraft_milk.cultured_milk_fluid_bucket": "Cultured Milk Bucket", + "item.growthcraft_milk.emmentaler_cheese_curds_drained": "Emmentaler Cheese Curds (Drained)", + "item.growthcraft_milk.emmentaler_cheese_slice": "Emmentaler Cheese Slice", + "item.growthcraft_milk.gorgonzola_cheese_curds_drained": "Gorgonzola Cheese Curds (Drained)", + "item.growthcraft_milk.gorgonzola_cheese_slice": "Gorgonzola Cheese Slice", + "item.growthcraft_milk.gouda_cheese_curds_drained": "Gouda Cheese Curds (Drained)", + "item.growthcraft_milk.gouda_cheese_slice": "Gouda Cheese Slice", + "item.growthcraft_milk.ice_cream_apple": "Apple Ice Cream", + "item.growthcraft_milk.ice_cream_chocolate": "Chocolate Ice Cream", + "item.growthcraft_milk.ice_cream_grape_purple": "Grape Ice Cream", + "item.growthcraft_milk.ice_cream_grape_red": "Grape Ice Cream", + "item.growthcraft_milk.ice_cream_grape_white": "Grape Ice Cream", + "item.growthcraft_milk.ice_cream_honey": "Honey Ice Cream", + "item.growthcraft_milk.ice_cream_pumpkin": "Pumpkin Space Ice Cream", + "item.growthcraft_milk.ice_cream_watermelon": "Watermelon Ice Cream", + "item.growthcraft_milk.kumis_fluid_bucket": "Kumis Bucket", + "item.growthcraft_milk.milk_fluid_bucket": "Milk Bucket", + "item.growthcraft_milk.milking_bucket_iron": "Iron Milking Bucket", + "item.growthcraft_milk.monterey_cheese_curds_drained": "Monterey Cheese Curds (Drained)", + "item.growthcraft_milk.monterey_cheese_slice": "Monterey Cheese Slice", + "item.growthcraft_milk.parmesan_cheese_curds_drained": "Parmesan Cheese Curds (Drained)", + "item.growthcraft_milk.parmesan_cheese_slice": "Parmesan Cheese Slice", + "item.growthcraft_milk.provolone_cheese_curds_drained": "Provolone Cheese Curds (Drained)", + "item.growthcraft_milk.provolone_cheese_slice": "Provolone Cheese Slice", + "item.growthcraft_milk.rennet_fluid_bucket": "Rennet Bucket", + "item.growthcraft_milk.ricotta_cheese_curds_drained": "Ricotta Cheese Curds (Drained)", + "item.growthcraft_milk.ricotta_cheese_slice": "Ricotta Cheese Bowl", + "item.growthcraft_milk.skim_milk_fluid_bucket": "Skim Milk Bucket", + "item.growthcraft_milk.starter_culture": "Starter Culture", + "item.growthcraft_milk.stomach": "Stomach", + "item.growthcraft_milk.thistle": "Thistle", + "item.growthcraft_milk.thistle_seed": "Thistle Seeds", + "item.growthcraft_milk.whey_fluid_bucket": "Whey Bucket", + "item.growthcraft_milk.yogurt_apple": "Apple Yogurt", + "item.growthcraft_milk.yogurt_chocolate": "Chocolate Yogurt", + "item.growthcraft_milk.yogurt_grape_purple": "Grape (Purple) Yogurt", + "item.growthcraft_milk.yogurt_grape_red": "Grape (Red) Yogurt", + "item.growthcraft_milk.yogurt_grape_white": "Grape (White) Yogurt", + "item.growthcraft_milk.yogurt_honey": "Honey Yogurt", + "item.growthcraft_milk.yogurt_plain": "Plain Yogurt", + "item.growthcraft_milk.yogurt_pumpkin": "Pumpkin Spice Yogurt", + "item.growthcraft_milk.yogurt_watermelon": "Watermelon Yogurt", + "jei.growthcraft_milk.category.cheese_press": "Pressing", + "jei.growthcraft_milk.category.pancheon": "Pancheon", + "jei.growthcraft_milk.category.churn": "Churn", + "jei.growthcraft_milk.category.mixing_vat": "Mixing Vat" +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/lang/ko_kr.lang b/src/main/resources/assets/growthcraft_milk/lang/ko_kr.lang new file mode 100644 index 0000000..1f22121 --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/lang/ko_kr.lang @@ -0,0 +1,125 @@ + + +# Fluids +fluid.fluid_butter_milk=버터 우유 + +fluid.fluid_cheese_asiago=아지아고 치즈 +fluid.fluid_cheese_gorgonzola=고르곤졸라 치즈 +fluid.fluid_cheese_appenzeller=아펜젤러 치즈 +fluid.fluid_cheese_cheddar=체다 치즈 +fluid.fluid_cheese_monterey=몬테레이 치즈 +fluid.fluid_cheese_parmesan=파마산 치즈 +fluid.fluid_cheese_emmentaler=에멘탈 치즈 +fluid.fluid_cheese_ricotta=리코타 치즈 + +fluid.fluid_cream=크림 + +fluid.fluid_milk=우유 +fluid.fluid_milk_curds=응고된 우유 + +fluid.fluid_rennet=치즈 효소 + +fluid.fluid_skim_milk=탈지유 +fluid.fluid_whey=단백질 빠진 맑은 우유 +fluid.fluid_condensed_milk=저온 살균 우유 + +# Items +item.bottlefluid_milk.name=우유병 +item.bottlefluid_butter_milk.name=버터 우유병 +item.bottlefluid_cream.name=크림 병 +item.bottlefluid_milk_curds.name=응고된 우유병 +item.bottlefluid_rennet.name=치즈 효소 병 +item.bottlefluid_skim_milk.name=탈지유 병 +item.bottlefluid_whey.name=단백질 빠진 맑은 우유병 +item.bottlefluid_condensed_milk.name=저온 살균 우유병 + +item.butter.salted.name=가염 버터 +item.butter.unsalted.name=버터 + +item.cheese_aged_slice.gorgonzola.name=고르곤졸라 치즈 조각 +item.cheese_aged_slice.emmentaler.name=에멘탈 치즈 조각 +item.cheese_aged_slice.appenzeller.name=아펜젤러 치즈 조각 +item.cheese_aged_slice.asiago.name=아지아고 치즈 조각 +item.cheese_aged_slice.parmesan.name=파마산 치즈 조각 +item.cheese_waxed_slice.cheddar.name=체다 치즈 조각 +item.cheese_waxed_slice.monterey.name=몬테레이 치즈 조각 +item.cheese_simple_slice.ricotta.name=리코타 치즈 조각 +item.cheese_cloth.name=치즈 천 + +item.ice_cream.apple.name=사과 아이스크림 +item.ice_cream.chocolate.name=초콜릿 아이스크림 +item.ice_cream.grape_purple.name=자주색 포도 아이스크림 +item.ice_cream.honey.name=벌꿀 아이스크림 +item.ice_cream.plain.name=아이스크림 +item.ice_cream.watermelon.name=수박 아이스크림 + +item.starter_culture.name=기초 배양균 +item.stomach.name=위장 + +item.thistle.name=엉겅퀴 +item.thistle_seed.name=엉겅퀴 + +item.yogurt.apple.name=사과 요거트 +item.yogurt.chocolate.name=초콜릿 요거트 +item.yogurt.grape_purple.name=자주색 포도 요거트 +item.yogurt.honey.name=벌꿀 요거트 +item.yogurt.plain.name=요거트 +item.yogurt.watermelon.name=수박 요거트 + +# Tiles (blocks) +tile.cheese_aged.gorgonzola.unaged.name=고르곤졸라 치즈 (숙성되지 않음) +tile.cheese_aged.gorgonzola.aged.name=고르곤졸라 치즈 (숙성됨) +tile.cheese_aged.gorgonzola.cut.name=고르곤졸라 치즈 (숙성됨) + +tile.cheese_aged.emmentaler.unaged.name=에멘탈 치즈 (숙성되지 않음) +tile.cheese_aged.emmentaler.aged.name=에멘탈 치즈 (숙성됨) +tile.cheese_aged.emmentaler.cut.name=에멘탈 치즈 (숙성됨) + +tile.cheese_aged.appenzeller.unaged.name=아펜젤러 치즈 (숙성되지 않음) +tile.cheese_aged.appenzeller.aged.name=아펜젤러 치즈 (숙성됨) +tile.cheese_aged.appenzeller.cut.name=아펜젤러 치즈 (숙성됨) + +tile.cheese_aged.asiago.unaged.name=아지아고 치즈 (숙성되지 않음) +tile.cheese_aged.asiago.aged.name=아지아고 치즈 (숙성됨) +tile.cheese_aged.asiago.cut.name=아지아고 치즈 (숙성됨) + +tile.cheese_aged.parmesan.unaged.name=파마산 치즈 (숙성되지 않음) +tile.cheese_aged.parmesan.aged.name=파마산 치즈 (숙성됨) +tile.cheese_aged.parmesan.cut.name=파마산 치즈 (숙성됨) + +tile.cheese_waxed.cheddar.aged.name=체다 치즈 (숙성됨) +tile.cheese_waxed.cheddar.unaged.name=체다 치즈 (숙성되지 않음) +tile.cheese_waxed.cheddar.unwaxed.name=체다 치즈 (밀랍 껍질 벗겨냄) +tile.cheese_waxed.cheddar.cut.name=체다 치즈 (숙성됨) + +tile.cheese_waxed.monterey.aged.name=몬테레이 치즈 (숙성됨) +tile.cheese_waxed.monterey.unaged.name=몬테레이 치즈 (숙성되지 않음) +tile.cheese_waxed.monterey.unwaxed.name=몬테레이 치즈 (밀랍 껍질 벗겨냄) +tile.cheese_waxed.monterey.cut.name=몬테레이 치즈 (숙성됨) + +tile.curds_aged.gorgonzola.name=고르곤졸라용 응고된 우유 +tile.curds_aged.gorgonzola.dried.name=고르곤졸라용 응고된 우유 (건조됨) +tile.curds_aged.emmentaler.name=에멘탈용 응고된 우유 +tile.curds_aged.emmentaler.dried.name=에멘탈용 응고된 우유 (건조됨) +tile.curds_aged.appenzeller.name=아펜젤러용 응고된 우유 +tile.curds_aged.appenzeller.dried.name=아펜젤러용 응고된 우유 (건조됨) +tile.curds_aged.asiago.name=아지아고용 응고된 우유 +tile.curds_aged.asiago.dried.name=아지아고용 응고된 우유 (건조됨) +tile.curds_aged.parmesan.name=파마산용 응고된 우유 +tile.curds_aged.parmesan.dried.name=파마산용 응고된 우유 (건조됨) + +tile.curds_simple.ricotta.name=리코타용 응고된 우유 +tile.curds_simple.ricotta.dried.name=리코타용 응고된 우유 (건조됨) + +tile.curds_waxed.cheddar.name=체다용 응고된 우유 +tile.curds_waxed.cheddar.dried.name=체다용 응고된 우유 (건조됨) +tile.curds_waxed.monterey.name=몬테레이용 응고된 우유 +tile.curds_waxed.monterey.dried.name=몬테레이용 응고된 우유 (건조됨) + +tile.cheese_press.name=치즈 압착기 +tile.cheese_vat.name=치즈 제작용 통 +tile.churn.name=우유 거품기 +tile.milk.name=우유 +tile.pancheon.name=판천 +tile.rennet.name=치즈 효소 +tile.thistle.name=엉겅퀴 diff --git a/src/main/resources/assets/growthcraft_milk/lang/ru_ru.json b/src/main/resources/assets/growthcraft_milk/lang/ru_ru.json new file mode 100644 index 0000000..0638d60 --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/lang/ru_ru.json @@ -0,0 +1,99 @@ +{ + "block.growthcraft_milk.appenzeller_cheese": "Аппенцеллер", + "block.growthcraft_milk.appenzeller_cheese_curds": "Творог аппенцеллера", + "block.growthcraft_milk.asiago_cheese": "Азиаго", + "block.growthcraft_milk.asiago_cheese_curds": "Творог азиаго", + "block.growthcraft_milk.casu_marzu_cheese": "Касу марцу", + "block.growthcraft_milk.casu_marzu_cheese_curds": "Творог касу марцу", + "block.growthcraft_milk.cheddar_cheese": "Чеддер", + "block.growthcraft_milk.cheddar_cheese_curds": "Творог чеддера", + "block.growthcraft_milk.cheese_press": "Сырный пресс", + "block.growthcraft_milk.churn": "Маслобойка", + "block.growthcraft_milk.emmentaler_cheese": "Эмменталь", + "block.growthcraft_milk.emmentaler_cheese_curds": "Творог эмменталя", + "block.growthcraft_milk.gorgonzola_cheese": "Горгонзола", + "block.growthcraft_milk.gorgonzola_cheese_curds": "Творог горгонзолы", + "block.growthcraft_milk.gouda_cheese": "Гауда", + "block.growthcraft_milk.gouda_cheese_curds": "Творог гауды", + "block.growthcraft_milk.mixing_vat": "Смесительный чан", + "block.growthcraft_milk.monterey_cheese": "Монтерей", + "block.growthcraft_milk.monterey_cheese_curds": "Творог монтерея", + "block.growthcraft_milk.pancheon": "Миска для отстаивания молока", + "block.growthcraft_milk.parmesan_cheese": "Пармезан", + "block.growthcraft_milk.parmesan_cheese_curds": "Творог пармезана", + "block.growthcraft_milk.provolone_cheese": "Проволоне", + "block.growthcraft_milk.provolone_cheese_curds": "Творог проволоне", + "block.growthcraft_milk.ricotta_cheese_curds": "Рикотта", + "block.growthcraft_milk.thistle_crop": "Чертополох", + "container.growthcraft_milk.cheese_press": "Сырный пресс", + "container.growthcraft_milk.churn": "Маслобойка", + "container.growthcraft_milk.mixing_vat": "Смесительный чан", + "container.growthcraft_milk.pancheon": "Миска для отстаивания молока", + "fluid_type.growthcraft_milk.butter_milk_fluid": "Пахта", + "fluid_type.growthcraft_milk.cheese_base_fluid": "Основа для сыра", + "fluid_type.growthcraft_milk.condensed_milk_fluid": "Сгущенное молоко", + "fluid_type.growthcraft_milk.cream_fluid": "Сливки", + "fluid_type.growthcraft_milk.cultured_milk_fluid": "Кислое молоко", + "fluid_type.growthcraft_milk.kumis_fluid": "Кумыс", + "fluid_type.growthcraft_milk.milk_fluid": "Молоко", + "fluid_type.growthcraft_milk.rennet_fluid": "Сычужный фермент", + "fluid_type.growthcraft_milk.skim_milk_fluid": "Обезжиренное молоко", + "fluid_type.growthcraft_milk.whey_fluid": "Сыворотка", + "item.growthcraft_milk.appenzeller_cheese_curds_drained": "Сухой творог аппенцеллера", + "item.growthcraft_milk.appenzeller_cheese_slice": "Кусочек аппенцеллера", + "item.growthcraft_milk.asiago_cheese_curds_drained": "Сухой творог азиаго", + "item.growthcraft_milk.asiago_cheese_slice": "Кусочек азиаго", + "item.growthcraft_milk.butter": "Масло", + "item.growthcraft_milk.butter_milk_fluid_bucket": "Ведро пахты", + "item.growthcraft_milk.butter_salted": "Соленое масло", + "item.growthcraft_milk.casu_marzu_cheese_curds_drained": "Сухой творог касу марцу", + "item.growthcraft_milk.casu_marzu_cheese_slice": "Кусочек касу марцу", + "item.growthcraft_milk.cheddar_cheese_curds_drained": "Сухой творог чеддера", + "item.growthcraft_milk.cheddar_cheese_slice": "Кусочек чеддера", + "item.growthcraft_milk.cheese_base_fluid_bucket": "Ведро основы для сыра", + "item.growthcraft_milk.cheese_cloth": "Марля", + "item.growthcraft_milk.condensed_milk_fluid_bucket": "Ведро сгущенного молока", + "item.growthcraft_milk.cream_fluid_bucket": "Ведро сливок", + "item.growthcraft_milk.cultured_milk_fluid_bucket": "Ведро кислого молока", + "item.growthcraft_milk.emmentaler_cheese_curds_drained": "Сухой творог эмменталя", + "item.growthcraft_milk.emmentaler_cheese_slice": "Кусочек эмменталя", + "item.growthcraft_milk.gorgonzola_cheese_curds_drained": "Сухой творог горгонзолы", + "item.growthcraft_milk.gorgonzola_cheese_slice": "Кусочек горгонзолы", + "item.growthcraft_milk.gouda_cheese_curds_drained": "Сухой творог гауды", + "item.growthcraft_milk.gouda_cheese_slice": "Кусочек гауды", + "item.growthcraft_milk.ice_cream_apple": "Яблочное мороженное", + "item.growthcraft_milk.ice_cream_chocolate": "Шоколадное мороженное", + "item.growthcraft_milk.ice_cream_grape_purple": "Мороженное из фиолетового винограда", + "item.growthcraft_milk.ice_cream_grape_red": "Мороженное из красного винограда", + "item.growthcraft_milk.ice_cream_grape_white": "Мороженное из белого винограда", + "item.growthcraft_milk.ice_cream_honey": "Медовое мороженное", + "item.growthcraft_milk.ice_cream_pumpkin": "Тыквенное мороженное", + "item.growthcraft_milk.ice_cream_watermelon": "Арбузное мороженное", + "item.growthcraft_milk.kumis_fluid_bucket": "Ведро кумыса", + "item.growthcraft_milk.milk_fluid_bucket": "Ведро молока", + "item.growthcraft_milk.milking_bucket_iron": "Ведро для дойки", + "item.growthcraft_milk.monterey_cheese_curds_drained": "Сухой творог монтерея", + "item.growthcraft_milk.monterey_cheese_slice": "Кусочек монтерея", + "item.growthcraft_milk.parmesan_cheese_curds_drained": "Сухой творог пармезана", + "item.growthcraft_milk.parmesan_cheese_slice": "Кусочек пармезана", + "item.growthcraft_milk.provolone_cheese_curds_drained": "Сухой творог проволоне", + "item.growthcraft_milk.provolone_cheese_slice": "Кусочек проволоне", + "item.growthcraft_milk.rennet_fluid_bucket": "Ведро сычужного фермента", + "item.growthcraft_milk.ricotta_cheese_curds_drained": "Сухая рикотта", + "item.growthcraft_milk.ricotta_cheese_slice": "Тарелка рикотты", + "item.growthcraft_milk.skim_milk_fluid_bucket": "Ведро обезжиренного молока", + "item.growthcraft_milk.starter_culture": "Закваска", + "item.growthcraft_milk.stomach": "Желудок", + "item.growthcraft_milk.thistle": "Чертополох", + "item.growthcraft_milk.thistle_seed": "Семена чертополоха", + "item.growthcraft_milk.whey_fluid_bucket": "Ведро сыворотки", + "item.growthcraft_milk.yogurt_apple": "Яблочный йогурт", + "item.growthcraft_milk.yogurt_chocolate": "Шоколадный йогурт", + "item.growthcraft_milk.yogurt_grape_purple": "Йогурт с фиолетовым виноградом", + "item.growthcraft_milk.yogurt_grape_red": "Йогурт с красным виноградом", + "item.growthcraft_milk.yogurt_grape_white": "Йогурт с белым виноградом", + "item.growthcraft_milk.yogurt_honey": "Медовый йогурт", + "item.growthcraft_milk.yogurt_plain": "Йогурт", + "item.growthcraft_milk.yogurt_pumpkin": "Тыквенный йогурт", + "item.growthcraft_milk.yogurt_watermelon": "Арбузный йогурт" +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/lang/tr_tr.lang b/src/main/resources/assets/growthcraft_milk/lang/tr_tr.lang new file mode 100644 index 0000000..f2cbedd --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/lang/tr_tr.lang @@ -0,0 +1,172 @@ + + +# Fluids +fluid.fluid_booze_kumis_fermented=Kımız +fluid.fluid_booze_kumis_potent=Kımız +fluid.fluid_booze_kumis_extended=Kımız +fluid.fluid_booze_kumis_hyperextended=Kımız +fluid.fluid_booze_kumis_potent_extended=Kımız +fluid.fluid_booze_kumis_potent_hyperextended=Kımız +fluid.fluid_booze_kumis_poisoned=Kımız + +fluid.fluid_booze_kumis_kumis_fermented=Fermente Kımız +fluid.fluid_booze_kumis_kumis_potent=Güçlü Kımız +fluid.fluid_booze_kumis_kumis_extended=Uzatılmış Kımız +fluid.fluid_booze_kumis_kumis_hyperextended=Hiper-Uzatılmış Kımız +fluid.fluid_booze_kumis_kumis_potent_extended=Uzatılmış Güçlü Kımız +fluid.fluid_booze_kumis_kumis_potent_hyperextended=Hiper-Uzatılmış Güçlü Kımız +fluid.fluid_booze_kumis_kumis_poisoned=Kımız + +fluid.fluid_butter_milk=Ayran + +fluid.fluid_cheese_asiago=Asiago Peyniri +fluid.fluid_cheese_cazu_marzu=Cazu Marzu Peyniri +fluid.fluid_cheese_gorgonzola=Gorgonzola Peyniri +fluid.fluid_cheese_gouda=Hoda Peyniri +fluid.fluid_cheese_appenzeller=Appenzeller Peyniri +fluid.fluid_cheese_cheddar=Çedar Peyniri +fluid.fluid_cheese_monterey=Monterey Peyniri +fluid.fluid_cheese_parmesan=Parmesan Peyniri +fluid.fluid_cheese_provolone=Provolone Peyniri +fluid.fluid_cheese_emmentaler=Emmental Peyniri +fluid.fluid_cheese_ricotta=Ricotta Peyniri + +fluid.fluid_cream=Kaymak + +fluid.fluid_milk=Süt +fluid.fluid_milk_curds=Süt Loru + +fluid.fluid_rennet=Peynir Mayası + +fluid.fluid_skim_milk=Yağsız Süt +fluid.fluid_whey=Peynir Altı Suyu +fluid.fluid_condensed_milk=Pastörize Süt + +# Items +item.bottlefluid_milk.name=Süt Şişesi +item.bottlefluid_butter_milk.name=Ayran Şişesi +item.bottlefluid_cream.name=Kaymak Şişesi +item.bottlefluid_milk_curds.name=Süt Loru Şişesi +item.bottlefluid_rennet.name=Peynir Mayası Şişesi +item.bottlefluid_skim_milk.name=Yağsız Süt Şişesi +item.bottlefluid_whey.name=Peynir Altı Suyu Şişesi +item.bottlefluid_condensed_milk.name=Pastörize Süt Şişesi + +item.butter.salted.name=Tuzlu Yağ +item.butter.unsalted.name=Tuzsuz Yağ + +item.cheese_aged_slice.casu_marzu.name=Cazu Marzu Peynir Dilimi +item.cheese_aged_slice.gorgonzola.name=Gorgonzola Peynir Dilimi +item.cheese_aged_slice.emmentaler.name=Emmentaler Peynir Dilimi +item.cheese_aged_slice.appenzeller.name=Appenzeller Peynir Dilimi +item.cheese_aged_slice.asiago.name=Asiago Peynir Dilimi +item.cheese_aged_slice.parmesan.name=Parmesan Peynir Dilimi + +item.cheese_cloth.name=Peynir Bezi + +item.cheese_simple_slice.ricotta.name=Ricotta Peyniri + +item.cheese_waxed_slice.cheddar.name=Cheddar Peynir Dilimi +item.cheese_waxed_slice.gouda.name=Gouda Peynir Dilimi +item.cheese_waxed_slice.monterey.name=Monterey Peynir Dilimi +item.cheese_waxed_slice.provolone.name=Provolone Peynir Dilimi + +item.ice_cream.apple.name=Elmalı Dondurma +item.ice_cream.chocolate.name=Çikolatalı Dondurma +item.ice_cream.grape_purple.name=Mor Üzümlü Dondurma +item.ice_cream.honey.name=Ballı Dondurma +item.ice_cream.plain.name=Dondurma +item.ice_cream.watermelon.name=Karpuzlu Dondurma + +item.starter_culture.name=Başlangıç Kültürü +item.stomach.name=Mide + +item.knife.name=Peynir Bıçağı + +item.thistle.name=Devedikeni +item.thistle_seed.name=Devedikeni + +item.yogurt.apple.name=Elma Yoğurdu +item.yogurt.chocolate.name=Çikolatalı Yoğurt +item.yogurt.grape_purple.name=Mor Üzüm Yoğurdu +item.yogurt.honey.name=Ballı Yoğurt +item.yogurt.plain.name=Yoğurt +item.yogurt.watermelon.name=Karpuzlu Yoğurt + +# Tiles (blocks) +tile.cheese_aged.appenzeller.unaged.name=Appenzeller Peyniri (Taze) +tile.cheese_aged.appenzeller.aged.name=Appenzeller Peyniri (Eski) +tile.cheese_aged.appenzeller.cut.name=Appenzeller Peyniri (Eski) + +tile.cheese_aged.asiago.unaged.name=Asiago Peyniri (Taze) +tile.cheese_aged.asiago.aged.name=Asiago Peyniri (Eski) +tile.cheese_aged.asiago.cut.name=Asiago Peyniri (Eski) + +tile.cheese_aged.casu_marzu.unaged.name=Casu Marzu Peyniri (Taze) +tile.cheese_aged.casu_marzu.aged.name=Casu Marzu Peyniri (Eski) +tile.cheese_aged.casu_marzu.cut.name=Casu Marzu Peyniri (Eski) + +tile.cheese_aged.emmentaler.unaged.name=Emmentaler Peyniri (Taze) +tile.cheese_aged.emmentaler.aged.name=Emmentaler Peyniri (Eski) +tile.cheese_aged.emmentaler.cut.name=Emmentaler Peyniri (Eski) + +tile.cheese_aged.gorgonzola.unaged.name=Gorgonzola Peyniri (Taze) +tile.cheese_aged.gorgonzola.aged.name=Gorgonzola Peyniri (Eski) +tile.cheese_aged.gorgonzola.cut.name=Gorgonzola Peyniri (Eski) + +tile.cheese_aged.parmesan.unaged.name=Parmesan Peyniri (Taze) +tile.cheese_aged.parmesan.aged.name=Parmesan Peyniri (Eski) +tile.cheese_aged.parmesan.cut.name=Parmesan Peyniri (Eski) + +tile.cheese_waxed.cheddar.aged.name=Cheddar Peyniri (Eski) +tile.cheese_waxed.cheddar.unaged.name=Cheddar Peyniri (Taze) +tile.cheese_waxed.cheddar.unwaxed.name=Cheddar Peyniri (Mumlanmamış) +tile.cheese_waxed.cheddar.cut.name=Cheddar Peyniri (Eski) + +tile.cheese_waxed.gouda.aged.name=Gouda Peyniri (Eski) +tile.cheese_waxed.gouda.unaged.name=Gouda Peyniri (Taze) +tile.cheese_waxed.gouda.unwaxed.name=Gouda Peyniri (Mumlanmamış) +tile.cheese_waxed.gouda.cut.name=Gouda Peyniri (Eski) + +tile.cheese_waxed.monterey.aged.name=Monterey Peyniri (Eski) +tile.cheese_waxed.monterey.unaged.name=Monterey Peyniri (Taze) +tile.cheese_waxed.monterey.unwaxed.name=Monterey Peyniri (Mumlanmamış) +tile.cheese_waxed.monterey.cut.name=Monterey Peyniri (Eski) + +tile.cheese_waxed.provolone.aged.name=Provolone Peyniri (Eski) +tile.cheese_waxed.provolone.unaged.name=Provolone Peyniri (Taze) +tile.cheese_waxed.provolone.unwaxed.name=Provolone Peyniri (Mumlanmamış) +tile.cheese_waxed.provolone.cut.name=Provolone Peyniri (Eski) + +tile.curds_aged.appenzeller.name=Appenzeller Loru +tile.curds_aged.appenzeller.dried.name=Appenzeller Loru (Kurumuş) +tile.curds_aged.asiago.name=Asiago Loru +tile.curds_aged.asiago.dried.name=Asiago Curds (Dried) +tile.curds_aged.casu_marzu.name=Casu Marzu Loru +tile.curds_aged.casu_marzu.dried.name=Casu Marzu Loru (Kurumuş) +tile.curds_aged.emmentaler.name=Emmentaler Loru +tile.curds_aged.emmentaler.dried.name=Emmentaler Loru (Kurumuş) +tile.curds_aged.gorgonzola.name=Gorgonzola Loru +tile.curds_aged.gorgonzola.dried.name=Gorgonzola Loru (Kurumuş) +tile.curds_aged.parmesan.name=Parmesan Loru +tile.curds_aged.parmesan.dried.name=Parmesan Loru (Kurumuş) + +tile.curds_simple.ricotta.name=Ricotta Loru +tile.curds_simple.ricotta.dried.name=Ricotta Loru (Kurumuş) + +tile.curds_waxed.cheddar.name=Cheddar Loru +tile.curds_waxed.cheddar.dried.name=Cheddar Loru (Kurumuş) +tile.curds_waxed.gouda.name=Gouda Loru +tile.curds_waxed.gouda.dried.name=Gouda Loru (Kurumuş) +tile.curds_waxed.monterey.name=Monterey Loru +tile.curds_waxed.monterey.dried.name=Monterey Loru (Kurumuş) +tile.curds_waxed.provolone.name=Provolone loru +tile.curds_waxed.provolone.dried.name=Provolone Loru (Kurumuş) + +tile.cheese_press.name=Peynir Presi +tile.cheese_vat.name=Peynir Fıçısı +tile.churn.name=Süt Kabo +tile.milk.name=Süt +tile.pancheon.name=Pancheon +tile.rennet.name=Peynir Mayası +tile.thistle.name=Devedikeni diff --git a/src/main/resources/assets/growthcraft_milk/lang/zh_cn.lang b/src/main/resources/assets/growthcraft_milk/lang/zh_cn.lang new file mode 100644 index 0000000..4be3a3a --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/lang/zh_cn.lang @@ -0,0 +1,97 @@ + + +# Fluids +fluid.fluid_butter_milk=酪乳 + +fluid.fluid_cheese_asiago=艾斯阿格奶酪 +fluid.fluid_cheese_gorgonzola=古冈左拉奶酪 +fluid.fluid_cheese_appenzeller=阿彭策尔奶酪 +fluid.fluid_cheese_cheddar=切达奶酪 +fluid.fluid_cheese_monterey=蒙特瑞奶酪 +fluid.fluid_cheese_parmesan=帕马森奶酪 +fluid.fluid_cheese_emmentaler=瑞士奶酪 +fluid.fluid_cheese_ricotta=里科塔奶酪 + +fluid.fluid_cream=奶油 + +fluid.fluid_milk=牛奶 +fluid.fluid_milk_curds=凝乳 + +fluid.fluid_rennet=凝乳酶 + +fluid.fluid_skim_milk=脱脂奶 +fluid.fluid_whey=乳清 +fluid.fluid_condensed_milk=巴氏奶 + +# Items +item.bottlefluid_milk.name=牛奶瓶 +item.bottlefluid_butter_milk.name=酪乳瓶 +item.bottlefluid_cream.name=奶油瓶 +item.bottlefluid_milk_curds.name=凝乳瓶 +item.bottlefluid_rennet.name=凝乳酶瓶 +item.bottlefluid_skim_milk.name=脱脂奶瓶 +item.bottlefluid_whey.name=乳清瓶 +item.bottlefluid_condensed_milk.name=巴氏奶瓶 + +item.butter.salted.name=咸黄油 +item.butter.unsalted.name=黄油 + +item.cheese_aged_slice.gorgonzola.name=小块古冈左拉奶酪 +item.cheese_aged_slice.emmentaler.name=小块瑞士奶酪 +item.cheese_aged_slice.appenzeller.name=小块阿彭策尔奶酪 +item.cheese_aged_slice.asiago.name=小块艾斯阿格奶酪 +item.cheese_aged_slice.parmesan.name=小块帕马森奶酪 +item.cheese_waxed_slice.cheddar.name=小块切达奶酪 +item.cheese_waxed_slice.monterey.name=小块蒙特瑞奶酪 +item.cheese_simple_slice.ricotta.name=小块里科塔奶酪 +item.cheese_cloth.name=奶酪纱布 + +item.ice_cream.apple.name=苹果冰淇淋 +item.ice_cream.chocolate.name=巧克力冰淇淋 +item.ice_cream.grape.name=葡萄冰淇淋 +item.ice_cream.honey.name=蜂蜜冰淇淋 +item.ice_cream.plain.name=原味冰淇淋 +item.ice_cream.watermelon.name=西瓜冰淇淋 + +item.starter_culture.name=发酵剂 +item.stomach.name=胃 + +item.thistle.name=蓟 +item.thistle_seed.name=蓟种子 + +item.yogurt.apple.name=苹果酸奶 +item.yogurt.chocolate.name=巧克力酸奶 +item.yogurt.grape.name=葡萄酸奶 +item.yogurt.honey.name=蜂蜜酸奶 +item.yogurt.plain.name=原味酸奶 +item.yogurt.watermelon.name=西瓜酸奶 + +# Tiles (blocks) +tile.cheese_aged.gorgonzola.unaged.name=古冈左拉奶酪 +tile.cheese_aged.emmentaler.unaged.name=瑞士奶酪 +tile.cheese_aged.appenzeller.unaged.name=阿彭策尔奶酪 +tile.cheese_aged.asiago.unaged.name=艾斯阿格奶酪 +tile.cheese_aged.parmesan.unaged.name=帕马森奶酪 + +tile.cheese_waxed.cheddar.unaged.name=切达奶酪 +tile.cheese_waxed.cheddar.unwaxed.name=切达奶酪 +tile.cheese_waxed.monterey.unwaxed.name=蒙特瑞奶酪 + +tile.curds_aged.gorgonzola.name=古冈左拉奶酪凝乳 +tile.curds_aged.emmentaler.name=瑞士奶酪凝乳 +tile.curds_aged.appenzeller.name=阿彭策尔奶酪凝乳 +tile.curds_aged.asiago.name=艾斯阿格奶酪凝乳 +tile.curds_aged.parmesan.name=帕马森奶酪凝乳 + +tile.curds_simple.ricotta.name=里科塔奶酪凝乳 + +tile.curds_waxed.cheddar.name=切达奶酪凝乳 +tile.curds_waxed.monterey.name=蒙特瑞奶酪凝乳 + +tile.cheese_press.name=奶酪挤压器 +tile.cheese_vat.name=奶酪缸 +tile.churn.name=搅乳器 +tile.milk.name=牛奶 +#tile.pancheon.name=Pancheon +tile.rennet.name=凝乳酶 +tile.thistle.name=蓟 diff --git a/src/main/resources/assets/growthcraft_milk/models/block/cheese_curd/cheese_curd_cloth.json b/src/main/resources/assets/growthcraft_milk/models/block/cheese_curd/cheese_curd_cloth.json new file mode 100644 index 0000000..f138244 --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/models/block/cheese_curd/cheese_curd_cloth.json @@ -0,0 +1,527 @@ + +{ + "credit": "Made with Blockbench, a free, modern block model editor by JannisX11. Model by Kisutora.", + "ambientocclusion": false, + "render_type": "cutout", + "textures": { + "0": "growthcraft_milk:block/cheese_curd/cheese_curds_cloth", + "2": "growthcraft_milk:block/cheese_curd/cheese_curds_cloth_string", + "1": "growthcraft_milk:block/cheese_curd/cheese_curds", + "particle": "growthcraft_milk:block/cheese_curd/cheese_curds_cloth" + }, + "elements": [ + { + "name": "string", + "from": [ + 3.15, + 8, + 7.65 + ], + "to": [ + 13.15, + 16, + 7.65 + ], + "rotation": { + "angle": -45, + "axis": "y", + "origin": [ + 7.65, + 15.5, + 7.65 + ] + }, + "faces": { + "north": { + "uv": [ + 0, + 0, + 10, + 8 + ], + "texture": "#2" + }, + "south": { + "uv": [ + 0, + 0, + 10, + 8 + ], + "texture": "#2" + } + } + }, + { + "name": "string", + "from": [ + 8.15, + 8, + 2.65 + ], + "to": [ + 8.15, + 16, + 12.65 + ], + "rotation": { + "angle": -45, + "axis": "y", + "origin": [ + 7.65, + 15.5, + 7.65 + ] + }, + "faces": { + "east": { + "uv": [ + 0, + 0, + 10, + 8 + ], + "texture": "#2" + }, + "west": { + "uv": [ + 0, + 0, + 10, + 8 + ], + "texture": "#2" + } + } + }, + { + "name": "cloth_side_N", + "from": [ + 4, + 3, + 4 + ], + "to": [ + 12, + 8, + 5 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 8, + 5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 7, + 0, + 8, + 5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 0, + 0, + 8, + 6 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 0, + 0, + 1, + 5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 0, + 0, + 8, + 1 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 0, + 0, + 8, + 1 + ], + "texture": "#0" + } + } + }, + { + "name": "cloth_side_E", + "from": [ + 11, + 3, + 5 + ], + "to": [ + 12, + 8, + 11 + ], + "faces": { + "east": { + "uv": [ + 1, + 0, + 7, + 5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 1, + 0, + 7, + 6 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 0, + 0, + 1, + 6 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 0, + 0, + 1, + 6 + ], + "texture": "#0" + } + } + }, + { + "name": "cloth_side_S", + "from": [ + 4, + 3, + 11 + ], + "to": [ + 12, + 8, + 12 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 8, + 6 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 0, + 0, + 1, + 5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 0, + 0, + 8, + 5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 7, + 0, + 8, + 5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 0, + 0, + 8, + 1 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 0, + 0, + 8, + 1 + ], + "texture": "#0" + } + } + }, + { + "name": "cloth_side_W", + "from": [ + 4, + 3, + 5 + ], + "to": [ + 5, + 8, + 11 + ], + "faces": { + "east": { + "uv": [ + 1, + 0, + 7, + 6 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 1, + 0, + 7, + 5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 0, + 0, + 1, + 6 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 0, + 0, + 1, + 6 + ], + "texture": "#0" + } + } + }, + { + "name": "cloth_bottom", + "from": [ + 5, + 2, + 5 + ], + "to": [ + 11, + 3, + 11 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 6, + 1 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 0, + 0, + 6, + 1 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 0, + 0, + 6, + 1 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 0, + 0, + 6, + 1 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 5, + 5, + 11, + 11 + ], + "texture": "#0" + } + } + }, + { + "name": "curds", + "from": [ + 5, + 7, + 5 + ], + "to": [ + 11, + 7, + 11 + ], + "faces": { + "up": { + "uv": [ + 0, + 0, + 6, + 6 + ], + "texture": "#1", + "tintindex": 0 + } + } + } + ], + "display": { + "gui": { + "rotation": [ + 30, + 225, + 0 + ], + "translation": [ + 0, + 0, + 0 + ], + "scale": [ + 0.625, + 0.625, + 0.625 + ] + }, + "ground": { + "rotation": [ + 0, + 0, + 0 + ], + "translation": [ + 0, + 3, + 0 + ], + "scale": [ + 0.25, + 0.25, + 0.25 + ] + }, + "fixed": { + "rotation": [ + 0, + 0, + 0 + ], + "translation": [ + 0, + 0, + 0 + ], + "scale": [ + 0.5, + 0.5, + 0.5 + ] + }, + "thirdperson_righthand": { + "rotation": [ + 75, + 45, + 0 + ], + "translation": [ + 0, + 2.5, + 0 + ], + "scale": [ + 0.375, + 0.375, + 0.375 + ] + }, + "firstperson_righthand": { + "rotation": [ + 0, + 45, + 0 + ], + "translation": [ + 0, + 0, + 0 + ], + "scale": [ + 0.40, + 0.40, + 0.40 + ] + }, + "firstperson_lefthand": { + "rotation": [ + 0, + 225, + 0 + ], + "translation": [ + 0, + 0, + 0 + ], + "scale": [ + 0.40, + 0.40, + 0.40 + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/models/block/cheese_press_base.json b/src/main/resources/assets/growthcraft_milk/models/block/cheese_press_base.json new file mode 100644 index 0000000..9ce3c3d --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/models/block/cheese_press_base.json @@ -0,0 +1,1939 @@ +{ + "credit": "Made with Blockbench, a free, modern block model editor by JannisX11. Model by Alatyami & Kisutora.", + "textures": { + "0": "growthcraft_milk:block/cheese_press/base", + "1": "growthcraft_milk:block/cheese_press/barrel_side", + "2": "growthcraft_milk:block/cheese_press/vice_top", + "3": "growthcraft_milk:block/cheese_press/iron_frame", + "particle": "growthcraft_milk:block/cheese_press/base", + "missing": "growthcraft:block/missing" + }, + "elements": [ + { + "name": "base", + "from": [ + 0, + 0, + 0 + ], + "to": [ + 16, + 1, + 16 + ], + "faces": { + "north": { + "uv": [ + 0, + 15, + 16, + 16 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 0, + 15, + 16, + 16 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 0, + 15, + 16, + 16 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 0, + 15, + 16, + 16 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#0", + "rotation": 180 + } + }, + "type": "cube" + }, + { + "name": "barrel_side_00", + "from": [ + 6, + 1, + 0 + ], + "to": [ + 10, + 9, + 1 + ], + "faces": { + "north": { + "uv": [ + 6, + 0, + 10, + 8 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 15, + 0, + 16, + 8 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 6, + 0, + 10, + 8 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 0, + 0, + 1, + 8 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 6, + 0, + 10, + 1 + ], + "texture": "#2" + } + }, + "type": "cube" + }, + { + "name": "barrel_side_19", + "from": [ + 4, + 1, + 1 + ], + "to": [ + 6, + 9, + 2 + ], + "faces": { + "north": { + "uv": [ + 10, + 0, + 12, + 8 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 14, + 0, + 15, + 8 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 4, + 0, + 6, + 8 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 1, + 0, + 2, + 8 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 4, + 0, + 6, + 1 + ], + "texture": "#2" + } + }, + "type": "cube" + }, + { + "name": "barrel_side_18", + "from": [ + 3, + 1, + 2 + ], + "to": [ + 4, + 9, + 3 + ], + "faces": { + "north": { + "uv": [ + 12, + 0, + 13, + 8 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 13, + 0, + 14, + 8 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 3, + 0, + 4, + 8 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 2, + 0, + 3, + 8 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 3, + 0, + 4, + 1 + ], + "texture": "#2" + } + }, + "type": "cube" + }, + { + "name": "barrel_side_17", + "from": [ + 2, + 1, + 3 + ], + "to": [ + 3, + 9, + 4 + ], + "faces": { + "north": { + "uv": [ + 13, + 0, + 14, + 8 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 12, + 0, + 13, + 8 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 2, + 0, + 3, + 8 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 3, + 0, + 4, + 8 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 0, + 3, + 1, + 4 + ], + "texture": "#2" + } + }, + "type": "cube" + }, + { + "name": "barrel_side_16", + "from": [ + 1, + 1, + 4 + ], + "to": [ + 2, + 9, + 6 + ], + "faces": { + "north": { + "uv": [ + 14, + 0, + 15, + 8 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 10, + 0, + 12, + 8 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 1, + 0, + 2, + 8 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 4, + 0, + 6, + 8 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 0, + 4, + 1, + 6 + ], + "texture": "#2" + } + }, + "type": "cube" + }, + { + "name": "barrel_side_15", + "from": [ + 0, + 1, + 6 + ], + "to": [ + 1, + 9, + 10 + ], + "faces": { + "north": { + "uv": [ + 15, + 0, + 16, + 8 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 6, + 0, + 10, + 8 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 0, + 0, + 1, + 8 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 6, + 0, + 10, + 8 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 0, + 6, + 1, + 10 + ], + "texture": "#2" + } + }, + "type": "cube" + }, + { + "name": "barrel_side_14", + "from": [ + 1, + 1, + 10 + ], + "to": [ + 2, + 9, + 12 + ], + "faces": { + "north": { + "uv": [ + 14, + 0, + 15, + 8 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 4, + 0, + 6, + 8 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 1, + 0, + 2, + 8 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 10, + 0, + 12, + 8 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 0, + 10, + 1, + 12 + ], + "texture": "#2" + } + }, + "type": "cube" + }, + { + "name": "barrel_side_13", + "from": [ + 2, + 1, + 12 + ], + "to": [ + 3, + 9, + 13 + ], + "faces": { + "north": { + "uv": [ + 13, + 0, + 14, + 8 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 3, + 0, + 4, + 8 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 2, + 0, + 3, + 8 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 12, + 0, + 13, + 8 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 0, + 12, + 1, + 13 + ], + "texture": "#2" + } + }, + "type": "cube" + }, + { + "name": "barrel_side_12", + "from": [ + 3, + 1, + 13 + ], + "to": [ + 4, + 9, + 14 + ], + "faces": { + "north": { + "uv": [ + 12, + 0, + 13, + 8 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 2, + 0, + 3, + 8 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 3, + 0, + 4, + 8 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 13, + 0, + 14, + 8 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 3, + 15, + 4, + 16 + ], + "texture": "#2" + } + }, + "type": "cube" + }, + { + "name": "barrel_side_11", + "from": [ + 4, + 1, + 14 + ], + "to": [ + 6, + 9, + 15 + ], + "faces": { + "north": { + "uv": [ + 10, + 0, + 12, + 8 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 1, + 0, + 2, + 8 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 4, + 0, + 6, + 8 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 14, + 0, + 15, + 8 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 4, + 15, + 6, + 16 + ], + "texture": "#2" + } + }, + "type": "cube" + }, + { + "name": "barrel_side_10", + "from": [ + 6, + 1, + 15 + ], + "to": [ + 10, + 9, + 16 + ], + "faces": { + "north": { + "uv": [ + 6, + 0, + 10, + 8 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 0, + 0, + 1, + 8 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 6, + 0, + 10, + 8 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 15, + 0, + 16, + 8 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 6, + 15, + 10, + 16 + ], + "texture": "#2" + } + }, + "type": "cube" + }, + { + "name": "barrel_side_09", + "from": [ + 10, + 1, + 14 + ], + "to": [ + 12, + 9, + 15 + ], + "faces": { + "north": { + "uv": [ + 4, + 0, + 6, + 8 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 1, + 0, + 2, + 8 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 10, + 0, + 12, + 8 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 14, + 0, + 15, + 8 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 10, + 15, + 12, + 16 + ], + "texture": "#2" + } + }, + "type": "cube" + }, + { + "name": "barrel_side_08", + "from": [ + 12, + 1, + 13 + ], + "to": [ + 13, + 9, + 14 + ], + "faces": { + "north": { + "uv": [ + 3, + 0, + 4, + 8 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 2, + 0, + 3, + 8 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 12, + 0, + 13, + 8 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 13, + 0, + 14, + 8 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 12, + 15, + 13, + 16 + ], + "texture": "#2" + } + }, + "type": "cube" + }, + { + "name": "barrel_side_07", + "from": [ + 13, + 1, + 12 + ], + "to": [ + 14, + 9, + 13 + ], + "faces": { + "north": { + "uv": [ + 2, + 0, + 3, + 8 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 3, + 0, + 4, + 8 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 13, + 0, + 14, + 8 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 12, + 0, + 13, + 8 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 15, + 12, + 16, + 13 + ], + "texture": "#2" + } + }, + "type": "cube" + }, + { + "name": "barrel_side_06", + "from": [ + 14, + 1, + 10 + ], + "to": [ + 15, + 9, + 12 + ], + "faces": { + "north": { + "uv": [ + 1, + 0, + 2, + 8 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 4, + 0, + 6, + 8 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 14, + 0, + 15, + 8 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 10, + 0, + 12, + 8 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 15, + 10, + 16, + 12 + ], + "texture": "#2" + } + }, + "type": "cube" + }, + { + "name": "barrel_side_05", + "from": [ + 15, + 1, + 6 + ], + "to": [ + 16, + 9, + 10 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 1, + 8 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 6, + 0, + 10, + 8 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 15, + 0, + 16, + 8 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 6, + 0, + 10, + 8 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 15, + 6, + 16, + 10 + ], + "texture": "#2" + } + }, + "type": "cube" + }, + { + "name": "barrel_side_04", + "from": [ + 14, + 1, + 4 + ], + "to": [ + 15, + 9, + 6 + ], + "faces": { + "north": { + "uv": [ + 1, + 0, + 2, + 8 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 10, + 0, + 12, + 8 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 14, + 0, + 15, + 8 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 4, + 0, + 6, + 8 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 15, + 4, + 16, + 6 + ], + "texture": "#2" + } + }, + "type": "cube" + }, + { + "name": "barrel_side_03", + "from": [ + 13, + 1, + 3 + ], + "to": [ + 14, + 9, + 4 + ], + "faces": { + "north": { + "uv": [ + 2, + 0, + 3, + 8 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 12, + 0, + 13, + 8 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 13, + 0, + 14, + 8 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 3, + 0, + 4, + 8 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 15, + 3, + 16, + 4 + ], + "texture": "#2" + } + }, + "type": "cube" + }, + { + "name": "barrel_side_02", + "from": [ + 12, + 1, + 2 + ], + "to": [ + 13, + 9, + 3 + ], + "faces": { + "north": { + "uv": [ + 3, + 0, + 4, + 8 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 13, + 0, + 14, + 8 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 12, + 0, + 13, + 8 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 2, + 0, + 3, + 8 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 12, + 0, + 13, + 1 + ], + "texture": "#2" + } + }, + "type": "cube" + }, + { + "name": "barrel_side_01", + "from": [ + 10, + 1, + 1 + ], + "to": [ + 12, + 9, + 2 + ], + "faces": { + "north": { + "uv": [ + 4, + 0, + 6, + 8 + ], + "texture": "#1" + }, + "east": { + "uv": [ + 14, + 0, + 15, + 8 + ], + "texture": "#1" + }, + "south": { + "uv": [ + 10, + 0, + 12, + 8 + ], + "texture": "#1" + }, + "west": { + "uv": [ + 1, + 0, + 2, + 8 + ], + "texture": "#1" + }, + "up": { + "uv": [ + 10, + 0, + 12, + 1 + ], + "texture": "#2" + } + }, + "type": "cube" + }, + { + "name": "ne-sw", + "from": [ + 10.6, + 12, + 5 + ], + "to": [ + 11.6, + 13, + 26 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#3" + }, + "east": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#3" + }, + "south": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#3" + }, + "west": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#3" + }, + "up": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#3" + }, + "down": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#3" + } + }, + "rotation": { + "origin": [ + 18.5, + 2, + 8 + ], + "axis": "y", + "angle": -45 + }, + "type": "cube" + }, + { + "name": "nw-se", + "from": [ + 0.6000000000000001, + 12, + -6 + ], + "to": [ + 1.6, + 13, + 15.5 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#3" + }, + "east": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#3" + }, + "south": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#3" + }, + "west": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#3" + }, + "up": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#3" + }, + "down": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#3" + } + }, + "rotation": { + "origin": [ + 8.5, + 2, + -2 + ], + "axis": "y", + "angle": 45 + }, + "type": "cube" + }, + { + "name": "ne", + "from": [ + 15, + 1, + 0 + ], + "to": [ + 16, + 15, + 1 + ], + "faces": { + "north": { + "uv": [ + 2, + 1, + 3, + 15 + ], + "texture": "#3" + }, + "east": { + "uv": [ + 13, + 1, + 14, + 15 + ], + "texture": "#3" + }, + "south": { + "uv": [ + 12, + 1, + 13, + 15 + ], + "texture": "#3" + }, + "west": { + "uv": [ + 3, + 1, + 4, + 15 + ], + "texture": "#3" + }, + "up": { + "uv": [ + 2, + 1, + 3, + 2 + ], + "texture": "#3" + } + }, + "type": "cube" + }, + { + "name": "se", + "from": [ + 15, + 1, + 15 + ], + "to": [ + 16, + 15, + 16 + ], + "faces": { + "north": { + "uv": [ + 3, + 1, + 4, + 15 + ], + "texture": "#3" + }, + "east": { + "uv": [ + 2, + 1, + 3, + 15 + ], + "texture": "#3" + }, + "south": { + "uv": [ + 13, + 1, + 14, + 15 + ], + "texture": "#3" + }, + "west": { + "uv": [ + 12, + 1, + 13, + 15 + ], + "texture": "#3" + }, + "up": { + "uv": [ + 2, + 1, + 3, + 2 + ], + "texture": "#3" + } + }, + "type": "cube" + }, + { + "name": "nw", + "from": [ + 0, + 1, + 0 + ], + "to": [ + 1, + 15, + 1 + ], + "faces": { + "north": { + "uv": [ + 13, + 1, + 14, + 15 + ], + "texture": "#3" + }, + "east": { + "uv": [ + 12, + 1, + 13, + 15 + ], + "texture": "#3" + }, + "south": { + "uv": [ + 3, + 1, + 4, + 15 + ], + "texture": "#3" + }, + "west": { + "uv": [ + 2, + 1, + 3, + 15 + ], + "texture": "#3" + }, + "up": { + "uv": [ + 2, + 1, + 3, + 2 + ], + "texture": "#3" + } + }, + "type": "cube" + }, + { + "name": "sw", + "from": [ + 0, + 1, + 15 + ], + "to": [ + 1, + 15, + 16 + ], + "faces": { + "north": { + "uv": [ + 12, + 1, + 13, + 15 + ], + "texture": "#3" + }, + "east": { + "uv": [ + 3, + 1, + 4, + 15 + ], + "texture": "#3" + }, + "south": { + "uv": [ + 2, + 1, + 3, + 15 + ], + "texture": "#3" + }, + "west": { + "uv": [ + 13, + 1, + 14, + 15 + ], + "texture": "#3" + }, + "up": { + "uv": [ + 2, + 1, + 3, + 2 + ], + "texture": "#3" + } + }, + "type": "cube" + }, + { + "name": "screw", + "from": [ + 6, + 11.99, + 6 + ], + "to": [ + 10, + 13.01, + 10 + ], + "faces": { + "north": { + "uv": [ + 6, + 13, + 10, + 14.01953125 + ], + "texture": "#3" + }, + "east": { + "uv": [ + 6, + 12, + 10, + 13.01953125 + ], + "texture": "#3" + }, + "south": { + "uv": [ + 6, + 11, + 10, + 12.01953125 + ], + "texture": "#3" + }, + "west": { + "uv": [ + 6, + 14, + 10, + 15.01953125 + ], + "texture": "#3" + }, + "up": { + "uv": [ + 6, + 1, + 10, + 5 + ], + "texture": "#3" + }, + "down": { + "uv": [ + 6, + 1, + 10, + 5 + ], + "texture": "#3" + } + }, + "rotation": { + "origin": [ + 10.75, + 5.99, + 8.75 + ], + "axis": "y", + "angle": 0 + }, + "type": "cube" + } + ], + "groups": [ + 0, + { + "name": "barrel", + "isOpen": false, + "display": { + "visibility": true, + "autouv": true + }, + "children": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20 + ] + }, + { + "name": "frame", + "isOpen": false, + "display": { + "visibility": true, + "autouv": true + }, + "children": [ + 21, + 22, + 23, + 24, + 25, + 26 + ] + }, + 27 + ], + "display": { + "gui": { + "rotation": [ + 30, + 225, + 0 + ], + "translation": [ + 0, + 0, + 0 + ], + "scale": [ + 0.625, + 0.625, + 0.625 + ] + }, + "ground": { + "rotation": [ + 0, + 0, + 0 + ], + "translation": [ + 0, + 3, + 0 + ], + "scale": [ + 0.25, + 0.25, + 0.25 + ] + }, + "fixed": { + "rotation": [ + 0, + 0, + 0 + ], + "translation": [ + 0, + 0, + 0 + ], + "scale": [ + 0.5, + 0.5, + 0.5 + ] + }, + "thirdperson_righthand": { + "rotation": [ + 75, + 45, + 0 + ], + "translation": [ + 0, + 2.5, + 0 + ], + "scale": [ + 0.375, + 0.375, + 0.375 + ] + }, + "firstperson_righthand": { + "rotation": [ + 0, + 45, + 0 + ], + "translation": [ + 0, + 0, + 0 + ], + "scale": [ + 0.4, + 0.4, + 0.4 + ] + }, + "firstperson_lefthand": { + "rotation": [ + 0, + 225, + 0 + ], + "translation": [ + 0, + 0, + 0 + ], + "scale": [ + 0.4, + 0.4, + 0.4 + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/models/block/cheese_press_topper_0.json b/src/main/resources/assets/growthcraft_milk/models/block/cheese_press_topper_0.json new file mode 100644 index 0000000..7dfadb0 --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/models/block/cheese_press_topper_0.json @@ -0,0 +1,796 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "2": "growthcraft_milk:block/cheese_press/vice_top", + "3": "growthcraft_milk:block/cheese_press/iron_frame", + "default": "growthcraft_milk:block/cheese_press/base", + "missing": "growthcraft:block/missing" + }, + "elements": [ + { + "name": "lid_west_1", + "from": [ + 2, + 11, + 4 + ], + "to": [ + 3, + 12, + 12 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#2" + }, + "east": { + "uv": [ + 0, + 0, + 8, + 1 + ], + "texture": "#default" + }, + "south": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#2" + }, + "west": { + "uv": [ + 0, + 0, + 8, + 1 + ], + "texture": "#2" + }, + "up": { + "uv": [ + 2, + 4, + 3, + 12 + ], + "texture": "#2" + }, + "down": { + "uv": [ + 13, + 4, + 14, + 12 + ], + "texture": "#2" + } + } + }, + { + "name": "lid_east_1", + "from": [ + 13, + 11, + 4 + ], + "to": [ + 14, + 12, + 12 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#2" + }, + "east": { + "uv": [ + 0, + 0, + 8, + 1 + ], + "texture": "#2" + }, + "south": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#2" + }, + "west": { + "uv": [ + 0, + 0, + 8, + 1 + ], + "texture": "#default" + }, + "up": { + "uv": [ + 13, + 4, + 14, + 12 + ], + "texture": "#2" + }, + "down": { + "uv": [ + 2, + 3, + 3, + 11 + ], + "texture": "#2" + } + } + }, + { + "name": "lid_center", + "from": [ + 3, + 11, + 3 + ], + "to": [ + 13, + 12, + 13 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 8, + 1 + ], + "texture": "#2" + }, + "east": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#2" + }, + "south": { + "uv": [ + 0, + 0, + 8, + 1 + ], + "texture": "#2" + }, + "west": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#2" + }, + "up": { + "uv": [ + 3, + 3, + 13, + 13 + ], + "texture": "#2" + }, + "down": { + "uv": [ + 3, + 3, + 13, + 13 + ], + "texture": "#2" + } + } + }, + { + "name": "lid_south_0", + "from": [ + 6, + 11, + 14 + ], + "to": [ + 10, + 12, + 15 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 4, + 1 + ], + "texture": "#missing" + }, + "east": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#2" + }, + "south": { + "uv": [ + 6, + 15, + 10, + 16 + ], + "texture": "#2" + }, + "west": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#2" + }, + "up": { + "uv": [ + 6, + 14, + 10, + 15 + ], + "texture": "#2" + }, + "down": { + "uv": [ + 6, + 14, + 10, + 15 + ], + "texture": "#2" + } + } + }, + { + "name": "lid_north_0", + "from": [ + 6, + 11, + 1 + ], + "to": [ + 10, + 12, + 2 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 4, + 1 + ], + "texture": "#2" + }, + "east": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#2" + }, + "south": { + "uv": [ + 0, + 0, + 4, + 1 + ], + "texture": "#missing" + }, + "west": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#2" + }, + "up": { + "uv": [ + 6, + 1, + 10, + 2 + ], + "texture": "#2" + }, + "down": { + "uv": [ + 6, + 1, + 10, + 2 + ], + "texture": "#2" + } + } + }, + { + "name": "lid_west_0", + "from": [ + 1, + 11, + 6 + ], + "to": [ + 2, + 12, + 10 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#2" + }, + "east": { + "uv": [ + 0, + 0, + 4, + 1 + ], + "texture": "#default" + }, + "south": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#2" + }, + "west": { + "uv": [ + 0, + 0, + 4, + 1 + ], + "texture": "#2" + }, + "up": { + "uv": [ + 1, + 6, + 2, + 10 + ], + "texture": "#2" + }, + "down": { + "uv": [ + 14, + 6, + 15, + 10 + ], + "texture": "#2" + } + } + }, + { + "name": "lid_east_0", + "from": [ + 14, + 11, + 6 + ], + "to": [ + 15, + 12, + 10 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#2" + }, + "east": { + "uv": [ + 0, + 0, + 4, + 1 + ], + "texture": "#2" + }, + "south": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#2" + }, + "west": { + "uv": [ + 0, + 0, + 4, + 1 + ], + "texture": "#default" + }, + "up": { + "uv": [ + 14, + 6, + 15, + 10 + ], + "texture": "#2" + }, + "down": { + "uv": [ + 1, + 7, + 2, + 11 + ], + "texture": "#2" + } + } + }, + { + "name": "lid_south_1", + "from": [ + 4, + 11, + 13 + ], + "to": [ + 12, + 12, + 14 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 8, + 1 + ], + "texture": "#missing" + }, + "east": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#2" + }, + "south": { + "uv": [ + 0, + 0, + 8, + 1 + ], + "texture": "#2" + }, + "west": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#2" + }, + "up": { + "uv": [ + 4, + 13, + 12, + 14 + ], + "texture": "#2" + }, + "down": { + "uv": [ + 4, + 13, + 12, + 14 + ], + "texture": "#2" + } + } + }, + { + "name": "lid_north_1", + "from": [ + 4, + 11, + 2 + ], + "to": [ + 12, + 12, + 3 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 8, + 1 + ], + "texture": "#2" + }, + "east": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#2" + }, + "south": { + "uv": [ + 0, + 0, + 8, + 1 + ], + "texture": "#missing" + }, + "west": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#2" + }, + "up": { + "uv": [ + 4, + 2, + 12, + 3 + ], + "texture": "#2" + }, + "down": { + "uv": [ + 4, + 2, + 12, + 3 + ], + "texture": "#2" + } + } + }, + { + "name": "handle", + "from": [ + 7, + 16, + 4 + ], + "to": [ + 9, + 17, + 12 + ], + "faces": { + "north": { + "uv": [ + 14, + 1, + 16, + 2 + ], + "texture": "#3" + }, + "east": { + "uv": [ + 4, + 7, + 12, + 8 + ], + "texture": "#3" + }, + "south": { + "uv": [ + 0, + 1, + 2, + 2 + ], + "texture": "#3" + }, + "west": { + "uv": [ + 4, + 10, + 12, + 11 + ], + "texture": "#3" + }, + "up": { + "uv": [ + 4, + 8, + 12, + 10 + ], + "rotation": 90, + "texture": "#3" + }, + "down": { + "uv": [ + 4, + 8, + 12, + 10 + ], + "rotation": 90, + "texture": "#3" + } + } + }, + { + "name": "screw", + "from": [ + 7.25, + 12, + 7.25 + ], + "to": [ + 8.75, + 16, + 8.75 + ], + "faces": { + "north": { + "uv": [ + 0, + 8, + 1, + 12 + ], + "texture": "#3" + }, + "east": { + "uv": [ + 0, + 4, + 1, + 8 + ], + "texture": "#3" + }, + "south": { + "uv": [ + 0, + 0, + 1, + 4 + ], + "texture": "#3" + }, + "west": { + "uv": [ + 0, + 12, + 1, + 16 + ], + "texture": "#3" + }, + "up": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#default" + }, + "down": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#default" + } + } + } + ], + "groups": [ + { + "name": "lid", + "origin": [ + 8, + 8, + 8 + ], + "color": 0, + "children": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8 + ] + }, + 9, + 10 + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/models/block/cheese_press_topper_1.json b/src/main/resources/assets/growthcraft_milk/models/block/cheese_press_topper_1.json new file mode 100644 index 0000000..b1fe59b --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/models/block/cheese_press_topper_1.json @@ -0,0 +1,165 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "2": "growthcraft_milk:block/cheese_press/vice_top", + "3": "growthcraft_milk:block/cheese_press/iron_frame", + "default": "growthcraft_milk:block/cheese_press/base", + "missing": "growthcraft:block/missing" + }, + "elements": [ + { + "name": "lid_west_1", + "from": [2, 10.5, 4], + "to": [3, 11.5, 12], + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "east": {"uv": [0, 0, 8, 1], "texture": "#default"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "west": {"uv": [0, 0, 8, 1], "texture": "#2"}, + "up": {"uv": [2, 4, 3, 12], "texture": "#2"}, + "down": {"uv": [13, 4, 14, 12], "texture": "#2"} + } + }, + { + "name": "lid_east_1", + "from": [13, 10.5, 4], + "to": [14, 11.5, 12], + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "east": {"uv": [0, 0, 8, 1], "texture": "#2"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "west": {"uv": [0, 0, 8, 1], "texture": "#default"}, + "up": {"uv": [13, 4, 14, 12], "texture": "#2"}, + "down": {"uv": [2, 3, 3, 11], "texture": "#2"} + } + }, + { + "name": "lid_center", + "from": [3, 10.5, 3], + "to": [13, 11.5, 13], + "faces": { + "north": {"uv": [0, 0, 8, 1], "texture": "#2"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "south": {"uv": [0, 0, 8, 1], "texture": "#2"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "up": {"uv": [3, 3, 13, 13], "texture": "#2"}, + "down": {"uv": [3, 3, 13, 13], "texture": "#2"} + } + }, + { + "name": "lid_south_0", + "from": [6, 10.5, 14], + "to": [10, 11.5, 15], + "faces": { + "north": {"uv": [0, 0, 4, 1], "texture": "#missing"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "south": {"uv": [6, 15, 10, 16], "texture": "#2"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "up": {"uv": [6, 14, 10, 15], "texture": "#2"}, + "down": {"uv": [6, 14, 10, 15], "texture": "#2"} + } + }, + { + "name": "lid_north_0", + "from": [6, 10.5, 1], + "to": [10, 11.5, 2], + "faces": { + "north": {"uv": [0, 0, 4, 1], "texture": "#2"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "south": {"uv": [0, 0, 4, 1], "texture": "#missing"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "up": {"uv": [6, 1, 10, 2], "texture": "#2"}, + "down": {"uv": [6, 1, 10, 2], "texture": "#2"} + } + }, + { + "name": "lid_west_0", + "from": [1, 10.5, 6], + "to": [2, 11.5, 10], + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "east": {"uv": [0, 0, 4, 1], "texture": "#default"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "west": {"uv": [0, 0, 4, 1], "texture": "#2"}, + "up": {"uv": [1, 6, 2, 10], "texture": "#2"}, + "down": {"uv": [14, 6, 15, 10], "texture": "#2"} + } + }, + { + "name": "lid_east_0", + "from": [14, 10.5, 6], + "to": [15, 11.5, 10], + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "east": {"uv": [0, 0, 4, 1], "texture": "#2"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "west": {"uv": [0, 0, 4, 1], "texture": "#default"}, + "up": {"uv": [14, 6, 15, 10], "texture": "#2"}, + "down": {"uv": [1, 7, 2, 11], "texture": "#2"} + } + }, + { + "name": "lid_south_1", + "from": [4, 10.5, 13], + "to": [12, 11.5, 14], + "faces": { + "north": {"uv": [0, 0, 8, 1], "texture": "#missing"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "south": {"uv": [0, 0, 8, 1], "texture": "#2"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "up": {"uv": [4, 13, 12, 14], "texture": "#2"}, + "down": {"uv": [4, 13, 12, 14], "texture": "#2"} + } + }, + { + "name": "lid_north_1", + "from": [4, 10.5, 2], + "to": [12, 11.5, 3], + "faces": { + "north": {"uv": [0, 0, 8, 1], "texture": "#2"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "south": {"uv": [0, 0, 8, 1], "texture": "#missing"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "up": {"uv": [4, 2, 12, 3], "texture": "#2"}, + "down": {"uv": [4, 2, 12, 3], "texture": "#2"} + } + }, + { + "name": "handle", + "from": [7, 15.5, 4], + "to": [9, 16.5, 12], + "rotation": {"angle": -45, "axis": "y", "origin": [8, 16, 8]}, + "faces": { + "north": {"uv": [14, 1, 16, 2], "texture": "#3"}, + "east": {"uv": [4, 7, 12, 8], "texture": "#3"}, + "south": {"uv": [0, 1, 2, 2], "texture": "#3"}, + "west": {"uv": [4, 10, 12, 11], "texture": "#3"}, + "up": {"uv": [4, 8, 12, 10], "rotation": 90, "texture": "#3"}, + "down": {"uv": [4, 8, 12, 10], "rotation": 90, "texture": "#3"} + } + }, + { + "name": "screw", + "from": [7.25, 11.5, 7.25], + "to": [8.75, 15.5, 8.75], + "faces": { + "north": {"uv": [0, 8, 1, 12], "texture": "#3"}, + "east": {"uv": [0, 4, 1, 8], "texture": "#3"}, + "south": {"uv": [0, 0, 1, 4], "texture": "#3"}, + "west": {"uv": [0, 12, 1, 16], "texture": "#3"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#default"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#default"} + } + } + ], + "groups": [ + { + "name": "lid", + "origin": [8, 8, 8], + "color": 0, + "children": [0, 1, 2, 3, 4, 5, 6, 7, 8] + }, + 9, + 10 + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/models/block/cheese_press_topper_2.json b/src/main/resources/assets/growthcraft_milk/models/block/cheese_press_topper_2.json new file mode 100644 index 0000000..573d823 --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/models/block/cheese_press_topper_2.json @@ -0,0 +1,165 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "2": "growthcraft_milk:block/cheese_press/vice_top", + "3": "growthcraft_milk:block/cheese_press/iron_frame", + "default": "growthcraft_milk:block/cheese_press/base", + "missing": "growthcraft:block/missing" + }, + "elements": [ + { + "name": "lid_west_1", + "from": [2, 10, 4], + "to": [3, 11, 12], + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "east": {"uv": [0, 0, 8, 1], "texture": "#default"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "west": {"uv": [0, 0, 8, 1], "texture": "#2"}, + "up": {"uv": [2, 4, 3, 12], "texture": "#2"}, + "down": {"uv": [13, 4, 14, 12], "texture": "#2"} + } + }, + { + "name": "lid_east_1", + "from": [13, 10, 4], + "to": [14, 11, 12], + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "east": {"uv": [0, 0, 8, 1], "texture": "#2"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "west": {"uv": [0, 0, 8, 1], "texture": "#default"}, + "up": {"uv": [13, 4, 14, 12], "texture": "#2"}, + "down": {"uv": [2, 3, 3, 11], "texture": "#2"} + } + }, + { + "name": "lid_center", + "from": [3, 10, 3], + "to": [13, 11, 13], + "faces": { + "north": {"uv": [0, 0, 8, 1], "texture": "#2"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "south": {"uv": [0, 0, 8, 1], "texture": "#2"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "up": {"uv": [3, 3, 13, 13], "texture": "#2"}, + "down": {"uv": [3, 3, 13, 13], "texture": "#2"} + } + }, + { + "name": "lid_south_0", + "from": [6, 10, 14], + "to": [10, 11, 15], + "faces": { + "north": {"uv": [0, 0, 4, 1], "texture": "#missing"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "south": {"uv": [6, 15, 10, 16], "texture": "#2"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "up": {"uv": [6, 14, 10, 15], "texture": "#2"}, + "down": {"uv": [6, 14, 10, 15], "texture": "#2"} + } + }, + { + "name": "lid_north_0", + "from": [6, 10, 1], + "to": [10, 11, 2], + "faces": { + "north": {"uv": [0, 0, 4, 1], "texture": "#2"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "south": {"uv": [0, 0, 4, 1], "texture": "#missing"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "up": {"uv": [6, 1, 10, 2], "texture": "#2"}, + "down": {"uv": [6, 1, 10, 2], "texture": "#2"} + } + }, + { + "name": "lid_west_0", + "from": [1, 10, 6], + "to": [2, 11, 10], + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "east": {"uv": [0, 0, 4, 1], "texture": "#default"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "west": {"uv": [0, 0, 4, 1], "texture": "#2"}, + "up": {"uv": [1, 6, 2, 10], "texture": "#2"}, + "down": {"uv": [14, 6, 15, 10], "texture": "#2"} + } + }, + { + "name": "lid_east_0", + "from": [14, 10, 6], + "to": [15, 11, 10], + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "east": {"uv": [0, 0, 4, 1], "texture": "#2"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "west": {"uv": [0, 0, 4, 1], "texture": "#default"}, + "up": {"uv": [14, 6, 15, 10], "texture": "#2"}, + "down": {"uv": [1, 7, 2, 11], "texture": "#2"} + } + }, + { + "name": "lid_south_1", + "from": [4, 10, 13], + "to": [12, 11, 14], + "faces": { + "north": {"uv": [0, 0, 8, 1], "texture": "#missing"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "south": {"uv": [0, 0, 8, 1], "texture": "#2"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "up": {"uv": [4, 13, 12, 14], "texture": "#2"}, + "down": {"uv": [4, 13, 12, 14], "texture": "#2"} + } + }, + { + "name": "lid_north_1", + "from": [4, 10, 2], + "to": [12, 11, 3], + "faces": { + "north": {"uv": [0, 0, 8, 1], "texture": "#2"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "south": {"uv": [0, 0, 8, 1], "texture": "#missing"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "up": {"uv": [4, 2, 12, 3], "texture": "#2"}, + "down": {"uv": [4, 2, 12, 3], "texture": "#2"} + } + }, + { + "name": "handle", + "from": [4, 15, 7], + "to": [12, 16, 9], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 15.5, 8]}, + "faces": { + "north": {"uv": [4, 10, 12, 11], "texture": "#3"}, + "east": {"uv": [14, 1, 16, 2], "texture": "#3"}, + "south": {"uv": [4, 7, 12, 8], "texture": "#3"}, + "west": {"uv": [0, 1, 2, 2], "texture": "#3"}, + "up": {"uv": [4, 8, 12, 10], "rotation": 180, "texture": "#3"}, + "down": {"uv": [4, 8, 12, 10], "texture": "#3"} + } + }, + { + "name": "screw", + "from": [7.25, 11, 7.25], + "to": [8.75, 15, 8.75], + "faces": { + "north": {"uv": [0, 8, 1, 12], "texture": "#3"}, + "east": {"uv": [0, 4, 1, 8], "texture": "#3"}, + "south": {"uv": [0, 0, 1, 4], "texture": "#3"}, + "west": {"uv": [0, 12, 1, 16], "texture": "#3"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#default"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#default"} + } + } + ], + "groups": [ + { + "name": "lid", + "origin": [8, 8, 8], + "color": 0, + "children": [0, 1, 2, 3, 4, 5, 6, 7, 8] + }, + 9, + 10 + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/models/block/cheese_press_topper_3.json b/src/main/resources/assets/growthcraft_milk/models/block/cheese_press_topper_3.json new file mode 100644 index 0000000..5fd7019 --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/models/block/cheese_press_topper_3.json @@ -0,0 +1,165 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "2": "growthcraft_milk:block/cheese_press/vice_top", + "3": "growthcraft_milk:block/cheese_press/iron_frame", + "default": "growthcraft_milk:block/cheese_press/base", + "missing": "growthcraft:block/missing" + }, + "elements": [ + { + "name": "lid_west_1", + "from": [2, 9.5, 4], + "to": [3, 10.5, 12], + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "east": {"uv": [0, 0, 8, 1], "texture": "#default"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "west": {"uv": [0, 0, 8, 1], "texture": "#2"}, + "up": {"uv": [2, 4, 3, 12], "texture": "#2"}, + "down": {"uv": [13, 4, 14, 12], "texture": "#2"} + } + }, + { + "name": "lid_east_1", + "from": [13, 9.5, 4], + "to": [14, 10.5, 12], + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "east": {"uv": [0, 0, 8, 1], "texture": "#2"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "west": {"uv": [0, 0, 8, 1], "texture": "#default"}, + "up": {"uv": [13, 4, 14, 12], "texture": "#2"}, + "down": {"uv": [2, 3, 3, 11], "texture": "#2"} + } + }, + { + "name": "lid_center", + "from": [3, 9.5, 3], + "to": [13, 10.5, 13], + "faces": { + "north": {"uv": [0, 0, 8, 1], "texture": "#2"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "south": {"uv": [0, 0, 8, 1], "texture": "#2"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "up": {"uv": [3, 3, 13, 13], "texture": "#2"}, + "down": {"uv": [3, 3, 13, 13], "texture": "#2"} + } + }, + { + "name": "lid_south_0", + "from": [6, 9.5, 14], + "to": [10, 10.5, 15], + "faces": { + "north": {"uv": [0, 0, 4, 1], "texture": "#missing"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "south": {"uv": [6, 15, 10, 16], "texture": "#2"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "up": {"uv": [6, 14, 10, 15], "texture": "#2"}, + "down": {"uv": [6, 14, 10, 15], "texture": "#2"} + } + }, + { + "name": "lid_north_0", + "from": [6, 9.5, 1], + "to": [10, 10.5, 2], + "faces": { + "north": {"uv": [0, 0, 4, 1], "texture": "#2"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "south": {"uv": [0, 0, 4, 1], "texture": "#missing"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "up": {"uv": [6, 1, 10, 2], "texture": "#2"}, + "down": {"uv": [6, 1, 10, 2], "texture": "#2"} + } + }, + { + "name": "lid_west_0", + "from": [1, 9.5, 6], + "to": [2, 10.5, 10], + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "east": {"uv": [0, 0, 4, 1], "texture": "#default"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "west": {"uv": [0, 0, 4, 1], "texture": "#2"}, + "up": {"uv": [1, 6, 2, 10], "texture": "#2"}, + "down": {"uv": [14, 6, 15, 10], "texture": "#2"} + } + }, + { + "name": "lid_east_0", + "from": [14, 9.5, 6], + "to": [15, 10.5, 10], + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "east": {"uv": [0, 0, 4, 1], "texture": "#2"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "west": {"uv": [0, 0, 4, 1], "texture": "#default"}, + "up": {"uv": [14, 6, 15, 10], "texture": "#2"}, + "down": {"uv": [1, 7, 2, 11], "texture": "#2"} + } + }, + { + "name": "lid_south_1", + "from": [4, 9.5, 13], + "to": [12, 10.5, 14], + "faces": { + "north": {"uv": [0, 0, 8, 1], "texture": "#missing"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "south": {"uv": [0, 0, 8, 1], "texture": "#2"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "up": {"uv": [4, 13, 12, 14], "texture": "#2"}, + "down": {"uv": [4, 13, 12, 14], "texture": "#2"} + } + }, + { + "name": "lid_north_1", + "from": [4, 9.5, 2], + "to": [12, 10.5, 3], + "faces": { + "north": {"uv": [0, 0, 8, 1], "texture": "#2"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "south": {"uv": [0, 0, 8, 1], "texture": "#missing"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "up": {"uv": [4, 2, 12, 3], "texture": "#2"}, + "down": {"uv": [4, 2, 12, 3], "texture": "#2"} + } + }, + { + "name": "handle", + "from": [7, 14.5, 4], + "to": [9, 15.5, 12], + "rotation": {"angle": 45, "axis": "y", "origin": [8, 15, 8]}, + "faces": { + "north": {"uv": [0, 1, 2, 2], "texture": "#3"}, + "east": {"uv": [4, 10, 12, 11], "texture": "#3"}, + "south": {"uv": [14, 1, 16, 2], "texture": "#3"}, + "west": {"uv": [4, 7, 12, 8], "texture": "#3"}, + "up": {"uv": [4, 8, 12, 10], "rotation": 270, "texture": "#3"}, + "down": {"uv": [4, 8, 12, 10], "rotation": 270, "texture": "#3"} + } + }, + { + "name": "screw", + "from": [7.25, 10.5, 7.25], + "to": [8.75, 14.5, 8.75], + "faces": { + "north": {"uv": [0, 8, 1, 12], "texture": "#3"}, + "east": {"uv": [0, 4, 1, 8], "texture": "#3"}, + "south": {"uv": [0, 0, 1, 4], "texture": "#3"}, + "west": {"uv": [0, 12, 1, 16], "texture": "#3"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#default"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#default"} + } + } + ], + "groups": [ + { + "name": "lid", + "origin": [8, 8, 8], + "color": 0, + "children": [0, 1, 2, 3, 4, 5, 6, 7, 8] + }, + 9, + 10 + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/models/block/cheese_press_topper_4.json b/src/main/resources/assets/growthcraft_milk/models/block/cheese_press_topper_4.json new file mode 100644 index 0000000..af3b557 --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/models/block/cheese_press_topper_4.json @@ -0,0 +1,165 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "2": "growthcraft_milk:block/cheese_press/vice_top", + "3": "growthcraft_milk:block/cheese_press/iron_frame", + "default": "growthcraft_milk:block/cheese_press/base", + "missing": "growthcraft:block/missing" + }, + "elements": [ + { + "name": "lid_west_1", + "from": [2, 9, 4], + "to": [3, 10, 12], + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "east": {"uv": [0, 0, 8, 1], "texture": "#default"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "west": {"uv": [0, 0, 8, 1], "texture": "#2"}, + "up": {"uv": [2, 4, 3, 12], "texture": "#2"}, + "down": {"uv": [13, 4, 14, 12], "texture": "#2"} + } + }, + { + "name": "lid_east_1", + "from": [13, 9, 4], + "to": [14, 10, 12], + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "east": {"uv": [0, 0, 8, 1], "texture": "#2"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "west": {"uv": [0, 0, 8, 1], "texture": "#default"}, + "up": {"uv": [13, 4, 14, 12], "texture": "#2"}, + "down": {"uv": [2, 3, 3, 11], "texture": "#2"} + } + }, + { + "name": "lid_center", + "from": [3, 9, 3], + "to": [13, 10, 13], + "faces": { + "north": {"uv": [0, 0, 8, 1], "texture": "#2"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "south": {"uv": [0, 0, 8, 1], "texture": "#2"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "up": {"uv": [3, 3, 13, 13], "texture": "#2"}, + "down": {"uv": [3, 3, 13, 13], "texture": "#2"} + } + }, + { + "name": "lid_south_0", + "from": [6, 9, 14], + "to": [10, 10, 15], + "faces": { + "north": {"uv": [0, 0, 4, 1], "texture": "#missing"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "south": {"uv": [6, 15, 10, 16], "texture": "#2"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "up": {"uv": [6, 14, 10, 15], "texture": "#2"}, + "down": {"uv": [6, 14, 10, 15], "texture": "#2"} + } + }, + { + "name": "lid_north_0", + "from": [6, 9, 1], + "to": [10, 10, 2], + "faces": { + "north": {"uv": [0, 0, 4, 1], "texture": "#2"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "south": {"uv": [0, 0, 4, 1], "texture": "#missing"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "up": {"uv": [6, 1, 10, 2], "texture": "#2"}, + "down": {"uv": [6, 1, 10, 2], "texture": "#2"} + } + }, + { + "name": "lid_west_0", + "from": [1, 9, 6], + "to": [2, 10, 10], + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "east": {"uv": [0, 0, 4, 1], "texture": "#default"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "west": {"uv": [0, 0, 4, 1], "texture": "#2"}, + "up": {"uv": [1, 6, 2, 10], "texture": "#2"}, + "down": {"uv": [14, 6, 15, 10], "texture": "#2"} + } + }, + { + "name": "lid_east_0", + "from": [14, 9, 6], + "to": [15, 10, 10], + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "east": {"uv": [0, 0, 4, 1], "texture": "#2"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "west": {"uv": [0, 0, 4, 1], "texture": "#default"}, + "up": {"uv": [14, 6, 15, 10], "texture": "#2"}, + "down": {"uv": [1, 7, 2, 11], "texture": "#2"} + } + }, + { + "name": "lid_south_1", + "from": [4, 9, 13], + "to": [12, 10, 14], + "faces": { + "north": {"uv": [0, 0, 8, 1], "texture": "#missing"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "south": {"uv": [0, 0, 8, 1], "texture": "#2"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "up": {"uv": [4, 13, 12, 14], "texture": "#2"}, + "down": {"uv": [4, 13, 12, 14], "texture": "#2"} + } + }, + { + "name": "lid_north_1", + "from": [4, 9, 2], + "to": [12, 10, 3], + "faces": { + "north": {"uv": [0, 0, 8, 1], "texture": "#2"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "south": {"uv": [0, 0, 8, 1], "texture": "#missing"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "up": {"uv": [4, 2, 12, 3], "texture": "#2"}, + "down": {"uv": [4, 2, 12, 3], "texture": "#2"} + } + }, + { + "name": "handle", + "from": [7, 14, 4], + "to": [9, 15, 12], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 14.5, 8]}, + "faces": { + "north": {"uv": [0, 1, 2, 2], "texture": "#3"}, + "east": {"uv": [4, 10, 12, 11], "texture": "#3"}, + "south": {"uv": [14, 1, 16, 2], "texture": "#3"}, + "west": {"uv": [4, 7, 12, 8], "texture": "#3"}, + "up": {"uv": [4, 8, 12, 10], "rotation": 270, "texture": "#3"}, + "down": {"uv": [4, 8, 12, 10], "rotation": 270, "texture": "#3"} + } + }, + { + "name": "screw", + "from": [7.25, 10, 7.25], + "to": [8.75, 14, 8.75], + "faces": { + "north": {"uv": [0, 8, 1, 12], "texture": "#3"}, + "east": {"uv": [0, 4, 1, 8], "texture": "#3"}, + "south": {"uv": [0, 0, 1, 4], "texture": "#3"}, + "west": {"uv": [0, 12, 1, 16], "texture": "#3"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#default"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#default"} + } + } + ], + "groups": [ + { + "name": "lid", + "origin": [8, 8, 8], + "color": 0, + "children": [0, 1, 2, 3, 4, 5, 6, 7, 8] + }, + 9, + 10 + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/models/block/cheese_press_topper_5.json b/src/main/resources/assets/growthcraft_milk/models/block/cheese_press_topper_5.json new file mode 100644 index 0000000..8364f70 --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/models/block/cheese_press_topper_5.json @@ -0,0 +1,165 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "2": "growthcraft_milk:block/cheese_press/vice_top", + "3": "growthcraft_milk:block/cheese_press/iron_frame", + "default": "growthcraft_milk:block/cheese_press/base", + "missing": "growthcraft:block/missing" + }, + "elements": [ + { + "name": "lid_west_1", + "from": [2, 8.5, 4], + "to": [3, 9.5, 12], + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "east": {"uv": [0, 0, 8, 1], "texture": "#default"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "west": {"uv": [0, 0, 8, 1], "texture": "#2"}, + "up": {"uv": [2, 4, 3, 12], "texture": "#2"}, + "down": {"uv": [13, 4, 14, 12], "texture": "#2"} + } + }, + { + "name": "lid_east_1", + "from": [13, 8.5, 4], + "to": [14, 9.5, 12], + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "east": {"uv": [0, 0, 8, 1], "texture": "#2"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "west": {"uv": [0, 0, 8, 1], "texture": "#default"}, + "up": {"uv": [13, 4, 14, 12], "texture": "#2"}, + "down": {"uv": [2, 3, 3, 11], "texture": "#2"} + } + }, + { + "name": "lid_center", + "from": [3, 8.5, 3], + "to": [13, 9.5, 13], + "faces": { + "north": {"uv": [0, 0, 8, 1], "texture": "#2"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "south": {"uv": [0, 0, 8, 1], "texture": "#2"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "up": {"uv": [3, 3, 13, 13], "texture": "#2"}, + "down": {"uv": [3, 3, 13, 13], "texture": "#2"} + } + }, + { + "name": "lid_south_0", + "from": [6, 8.5, 14], + "to": [10, 9.5, 15], + "faces": { + "north": {"uv": [0, 0, 4, 1], "texture": "#missing"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "south": {"uv": [6, 15, 10, 16], "texture": "#2"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "up": {"uv": [6, 14, 10, 15], "texture": "#2"}, + "down": {"uv": [6, 14, 10, 15], "texture": "#2"} + } + }, + { + "name": "lid_north_0", + "from": [6, 8.5, 1], + "to": [10, 9.5, 2], + "faces": { + "north": {"uv": [0, 0, 4, 1], "texture": "#2"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "south": {"uv": [0, 0, 4, 1], "texture": "#missing"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "up": {"uv": [6, 1, 10, 2], "texture": "#2"}, + "down": {"uv": [6, 1, 10, 2], "texture": "#2"} + } + }, + { + "name": "lid_west_0", + "from": [1, 8.5, 6], + "to": [2, 9.5, 10], + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "east": {"uv": [0, 0, 4, 1], "texture": "#default"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "west": {"uv": [0, 0, 4, 1], "texture": "#2"}, + "up": {"uv": [1, 6, 2, 10], "texture": "#2"}, + "down": {"uv": [14, 6, 15, 10], "texture": "#2"} + } + }, + { + "name": "lid_east_0", + "from": [14, 8.5, 6], + "to": [15, 9.5, 10], + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "east": {"uv": [0, 0, 4, 1], "texture": "#2"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "west": {"uv": [0, 0, 4, 1], "texture": "#default"}, + "up": {"uv": [14, 6, 15, 10], "texture": "#2"}, + "down": {"uv": [1, 7, 2, 11], "texture": "#2"} + } + }, + { + "name": "lid_south_1", + "from": [4, 8.5, 13], + "to": [12, 9.5, 14], + "faces": { + "north": {"uv": [0, 0, 8, 1], "texture": "#missing"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "south": {"uv": [0, 0, 8, 1], "texture": "#2"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "up": {"uv": [4, 13, 12, 14], "texture": "#2"}, + "down": {"uv": [4, 13, 12, 14], "texture": "#2"} + } + }, + { + "name": "lid_north_1", + "from": [4, 8.5, 2], + "to": [12, 9.5, 3], + "faces": { + "north": {"uv": [0, 0, 8, 1], "texture": "#2"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "south": {"uv": [0, 0, 8, 1], "texture": "#missing"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "up": {"uv": [4, 2, 12, 3], "texture": "#2"}, + "down": {"uv": [4, 2, 12, 3], "texture": "#2"} + } + }, + { + "name": "handle", + "from": [7, 13.5, 4], + "to": [9, 14.5, 12], + "rotation": {"angle": -45, "axis": "y", "origin": [8, 14, 8]}, + "faces": { + "north": {"uv": [0, 1, 2, 2], "texture": "#3"}, + "east": {"uv": [4, 10, 12, 11], "texture": "#3"}, + "south": {"uv": [14, 1, 16, 2], "texture": "#3"}, + "west": {"uv": [4, 7, 12, 8], "texture": "#3"}, + "up": {"uv": [4, 8, 12, 10], "rotation": 270, "texture": "#3"}, + "down": {"uv": [4, 8, 12, 10], "rotation": 270, "texture": "#3"} + } + }, + { + "name": "screw", + "from": [7.25, 9.5, 7.25], + "to": [8.75, 13.5, 8.75], + "faces": { + "north": {"uv": [0, 8, 1, 12], "texture": "#3"}, + "east": {"uv": [0, 4, 1, 8], "texture": "#3"}, + "south": {"uv": [0, 0, 1, 4], "texture": "#3"}, + "west": {"uv": [0, 12, 1, 16], "texture": "#3"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#default"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#default"} + } + } + ], + "groups": [ + { + "name": "lid", + "origin": [8, 8, 8], + "color": 0, + "children": [0, 1, 2, 3, 4, 5, 6, 7, 8] + }, + 9, + 10 + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/models/block/cheese_press_topper_6.json b/src/main/resources/assets/growthcraft_milk/models/block/cheese_press_topper_6.json new file mode 100644 index 0000000..a7f6efc --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/models/block/cheese_press_topper_6.json @@ -0,0 +1,165 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "2": "growthcraft_milk:block/cheese_press/vice_top", + "3": "growthcraft_milk:block/cheese_press/iron_frame", + "default": "growthcraft_milk:block/cheese_press/base", + "missing": "growthcraft:block/missing" + }, + "elements": [ + { + "name": "lid_west_1", + "from": [2, 8, 4], + "to": [3, 9, 12], + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "east": {"uv": [0, 0, 8, 1], "texture": "#default"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "west": {"uv": [0, 0, 8, 1], "texture": "#2"}, + "up": {"uv": [2, 4, 3, 12], "texture": "#2"}, + "down": {"uv": [13, 4, 14, 12], "texture": "#2"} + } + }, + { + "name": "lid_east_1", + "from": [13, 8, 4], + "to": [14, 9, 12], + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "east": {"uv": [0, 0, 8, 1], "texture": "#2"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "west": {"uv": [0, 0, 8, 1], "texture": "#default"}, + "up": {"uv": [13, 4, 14, 12], "texture": "#2"}, + "down": {"uv": [2, 3, 3, 11], "texture": "#2"} + } + }, + { + "name": "lid_center", + "from": [3, 8, 3], + "to": [13, 9, 13], + "faces": { + "north": {"uv": [0, 0, 8, 1], "texture": "#2"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "south": {"uv": [0, 0, 8, 1], "texture": "#2"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "up": {"uv": [3, 3, 13, 13], "texture": "#2"}, + "down": {"uv": [3, 3, 13, 13], "texture": "#2"} + } + }, + { + "name": "lid_south_0", + "from": [6, 8, 14], + "to": [10, 9, 15], + "faces": { + "north": {"uv": [0, 0, 4, 1], "texture": "#missing"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "south": {"uv": [6, 15, 10, 16], "texture": "#2"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "up": {"uv": [6, 14, 10, 15], "texture": "#2"}, + "down": {"uv": [6, 14, 10, 15], "texture": "#2"} + } + }, + { + "name": "lid_north_0", + "from": [6, 8, 1], + "to": [10, 9, 2], + "faces": { + "north": {"uv": [0, 0, 4, 1], "texture": "#2"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "south": {"uv": [0, 0, 4, 1], "texture": "#missing"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "up": {"uv": [6, 1, 10, 2], "texture": "#2"}, + "down": {"uv": [6, 1, 10, 2], "texture": "#2"} + } + }, + { + "name": "lid_west_0", + "from": [1, 8, 6], + "to": [2, 9, 10], + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "east": {"uv": [0, 0, 4, 1], "texture": "#default"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "west": {"uv": [0, 0, 4, 1], "texture": "#2"}, + "up": {"uv": [1, 6, 2, 10], "texture": "#2"}, + "down": {"uv": [14, 6, 15, 10], "texture": "#2"} + } + }, + { + "name": "lid_east_0", + "from": [14, 8, 6], + "to": [15, 9, 10], + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "east": {"uv": [0, 0, 4, 1], "texture": "#2"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "west": {"uv": [0, 0, 4, 1], "texture": "#default"}, + "up": {"uv": [14, 6, 15, 10], "texture": "#2"}, + "down": {"uv": [1, 7, 2, 11], "texture": "#2"} + } + }, + { + "name": "lid_south_1", + "from": [4, 8, 13], + "to": [12, 9, 14], + "faces": { + "north": {"uv": [0, 0, 8, 1], "texture": "#missing"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "south": {"uv": [0, 0, 8, 1], "texture": "#2"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "up": {"uv": [4, 13, 12, 14], "texture": "#2"}, + "down": {"uv": [4, 13, 12, 14], "texture": "#2"} + } + }, + { + "name": "lid_north_1", + "from": [4, 8, 2], + "to": [12, 9, 3], + "faces": { + "north": {"uv": [0, 0, 8, 1], "texture": "#2"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "south": {"uv": [0, 0, 8, 1], "texture": "#missing"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "up": {"uv": [4, 2, 12, 3], "texture": "#2"}, + "down": {"uv": [4, 2, 12, 3], "texture": "#2"} + } + }, + { + "name": "handle", + "from": [4, 13, 7], + "to": [12, 14, 9], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 13.5, 8]}, + "faces": { + "north": {"uv": [4, 7, 12, 8], "texture": "#3"}, + "east": {"uv": [0, 1, 2, 2], "texture": "#3"}, + "south": {"uv": [4, 10, 12, 11], "texture": "#3"}, + "west": {"uv": [14, 1, 16, 2], "texture": "#3"}, + "up": {"uv": [4, 8, 12, 10], "texture": "#3"}, + "down": {"uv": [4, 8, 12, 10], "rotation": 180, "texture": "#3"} + } + }, + { + "name": "screw", + "from": [7.25, 9, 7.25], + "to": [8.75, 13, 8.75], + "faces": { + "north": {"uv": [0, 8, 1, 12], "texture": "#3"}, + "east": {"uv": [0, 4, 1, 8], "texture": "#3"}, + "south": {"uv": [0, 0, 1, 4], "texture": "#3"}, + "west": {"uv": [0, 12, 1, 16], "texture": "#3"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#default"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#default"} + } + } + ], + "groups": [ + { + "name": "lid", + "origin": [8, 8, 8], + "color": 0, + "children": [0, 1, 2, 3, 4, 5, 6, 7, 8] + }, + 9, + 10 + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/models/block/cheese_press_topper_7.json b/src/main/resources/assets/growthcraft_milk/models/block/cheese_press_topper_7.json new file mode 100644 index 0000000..6b96e60 --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/models/block/cheese_press_topper_7.json @@ -0,0 +1,165 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "2": "growthcraft_milk:block/cheese_press/vice_top", + "3": "growthcraft_milk:block/cheese_press/iron_frame", + "default": "growthcraft_milk:block/cheese_press/base", + "missing": "growthcraft:block/missing" + }, + "elements": [ + { + "name": "lid_west_1", + "from": [2, 7.5, 4], + "to": [3, 8.5, 12], + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "east": {"uv": [0, 0, 8, 1], "texture": "#default"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "west": {"uv": [0, 0, 8, 1], "texture": "#2"}, + "up": {"uv": [2, 4, 3, 12], "texture": "#2"}, + "down": {"uv": [13, 4, 14, 12], "texture": "#2"} + } + }, + { + "name": "lid_east_1", + "from": [13, 7.5, 4], + "to": [14, 8.5, 12], + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "east": {"uv": [0, 0, 8, 1], "texture": "#2"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "west": {"uv": [0, 0, 8, 1], "texture": "#default"}, + "up": {"uv": [13, 4, 14, 12], "texture": "#2"}, + "down": {"uv": [2, 3, 3, 11], "texture": "#2"} + } + }, + { + "name": "lid_center", + "from": [3, 7.5, 3], + "to": [13, 8.5, 13], + "faces": { + "north": {"uv": [0, 0, 8, 1], "texture": "#2"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "south": {"uv": [0, 0, 8, 1], "texture": "#2"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "up": {"uv": [3, 3, 13, 13], "texture": "#2"}, + "down": {"uv": [3, 3, 13, 13], "texture": "#2"} + } + }, + { + "name": "lid_south_0", + "from": [6, 7.5, 14], + "to": [10, 8.5, 15], + "faces": { + "north": {"uv": [0, 0, 4, 1], "texture": "#missing"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "south": {"uv": [6, 15, 10, 16], "texture": "#2"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "up": {"uv": [6, 14, 10, 15], "texture": "#2"}, + "down": {"uv": [6, 14, 10, 15], "texture": "#2"} + } + }, + { + "name": "lid_north_0", + "from": [6, 7.5, 1], + "to": [10, 8.5, 2], + "faces": { + "north": {"uv": [0, 0, 4, 1], "texture": "#2"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "south": {"uv": [0, 0, 4, 1], "texture": "#missing"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "up": {"uv": [6, 1, 10, 2], "texture": "#2"}, + "down": {"uv": [6, 1, 10, 2], "texture": "#2"} + } + }, + { + "name": "lid_west_0", + "from": [1, 7.5, 6], + "to": [2, 8.5, 10], + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "east": {"uv": [0, 0, 4, 1], "texture": "#default"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "west": {"uv": [0, 0, 4, 1], "texture": "#2"}, + "up": {"uv": [1, 6, 2, 10], "texture": "#2"}, + "down": {"uv": [14, 6, 15, 10], "texture": "#2"} + } + }, + { + "name": "lid_east_0", + "from": [14, 7.5, 6], + "to": [15, 8.5, 10], + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "east": {"uv": [0, 0, 4, 1], "texture": "#2"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "west": {"uv": [0, 0, 4, 1], "texture": "#default"}, + "up": {"uv": [14, 6, 15, 10], "texture": "#2"}, + "down": {"uv": [1, 7, 2, 11], "texture": "#2"} + } + }, + { + "name": "lid_south_1", + "from": [4, 7.5, 13], + "to": [12, 8.5, 14], + "faces": { + "north": {"uv": [0, 0, 8, 1], "texture": "#missing"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "south": {"uv": [0, 0, 8, 1], "texture": "#2"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "up": {"uv": [4, 13, 12, 14], "texture": "#2"}, + "down": {"uv": [4, 13, 12, 14], "texture": "#2"} + } + }, + { + "name": "lid_north_1", + "from": [4, 7.5, 2], + "to": [12, 8.5, 3], + "faces": { + "north": {"uv": [0, 0, 8, 1], "texture": "#2"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "south": {"uv": [0, 0, 8, 1], "texture": "#missing"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "up": {"uv": [4, 2, 12, 3], "texture": "#2"}, + "down": {"uv": [4, 2, 12, 3], "texture": "#2"} + } + }, + { + "name": "handle", + "from": [4, 12.5, 7], + "to": [12, 13.5, 9], + "rotation": {"angle": -45, "axis": "y", "origin": [8, 13, 8]}, + "faces": { + "north": {"uv": [4, 7, 12, 8], "texture": "#3"}, + "east": {"uv": [0, 1, 2, 2], "texture": "#3"}, + "south": {"uv": [4, 10, 12, 11], "texture": "#3"}, + "west": {"uv": [14, 1, 16, 2], "texture": "#3"}, + "up": {"uv": [4, 8, 12, 10], "texture": "#3"}, + "down": {"uv": [4, 8, 12, 10], "rotation": 180, "texture": "#3"} + } + }, + { + "name": "screw", + "from": [7.25, 8.5, 7.25], + "to": [8.75, 12.5, 8.75], + "faces": { + "north": {"uv": [0, 8, 1, 12], "texture": "#3"}, + "east": {"uv": [0, 4, 1, 8], "texture": "#3"}, + "south": {"uv": [0, 0, 1, 4], "texture": "#3"}, + "west": {"uv": [0, 12, 1, 16], "texture": "#3"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#default"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#default"} + } + } + ], + "groups": [ + { + "name": "lid", + "origin": [8, 8, 8], + "color": 0, + "children": [0, 1, 2, 3, 4, 5, 6, 7, 8] + }, + 9, + 10 + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/models/block/cheese_press_topper_east.json b/src/main/resources/assets/growthcraft_milk/models/block/cheese_press_topper_east.json new file mode 100644 index 0000000..affb55a --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/models/block/cheese_press_topper_east.json @@ -0,0 +1,795 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "2": "growthcraft_milk:block/cheese_press/vice_top", + "3": "growthcraft_milk:block/cheese_press/iron_frame", + "default": "growthcraft_milk:block/cheese_press/base" + }, + "elements": [ + { + "name": "lid_west_1", + "from": [ + 2, + 10, + 4 + ], + "to": [ + 3, + 11, + 12 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#2" + }, + "east": { + "uv": [ + 0, + 0, + 8, + 1 + ], + "texture": "#default" + }, + "south": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#2" + }, + "west": { + "uv": [ + 0, + 0, + 8, + 1 + ], + "texture": "#2" + }, + "up": { + "uv": [ + 2, + 4, + 3, + 12 + ], + "texture": "#2" + }, + "down": { + "uv": [ + 13, + 4, + 14, + 12 + ], + "texture": "#2" + } + } + }, + { + "name": "lid_east_1", + "from": [ + 13, + 10, + 4 + ], + "to": [ + 14, + 11, + 12 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#2" + }, + "east": { + "uv": [ + 0, + 0, + 8, + 1 + ], + "texture": "#2" + }, + "south": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#2" + }, + "west": { + "uv": [ + 0, + 0, + 8, + 1 + ], + "texture": "#default" + }, + "up": { + "uv": [ + 13, + 4, + 14, + 12 + ], + "texture": "#2" + }, + "down": { + "uv": [ + 2, + 3, + 3, + 11 + ], + "texture": "#2" + } + } + }, + { + "name": "lid_center", + "from": [ + 3, + 10, + 3 + ], + "to": [ + 13, + 11, + 13 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 8, + 1 + ], + "texture": "#2" + }, + "east": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#2" + }, + "south": { + "uv": [ + 0, + 0, + 8, + 1 + ], + "texture": "#2" + }, + "west": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#2" + }, + "up": { + "uv": [ + 3, + 3, + 13, + 13 + ], + "texture": "#2" + }, + "down": { + "uv": [ + 3, + 3, + 13, + 13 + ], + "texture": "#2" + } + } + }, + { + "name": "lid_south_0", + "from": [ + 6, + 10, + 14 + ], + "to": [ + 10, + 11, + 15 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 4, + 1 + ], + "texture": "#missing" + }, + "east": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#2" + }, + "south": { + "uv": [ + 6, + 15, + 10, + 16 + ], + "texture": "#2" + }, + "west": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#2" + }, + "up": { + "uv": [ + 6, + 14, + 10, + 15 + ], + "texture": "#2" + }, + "down": { + "uv": [ + 6, + 14, + 10, + 15 + ], + "texture": "#2" + } + } + }, + { + "name": "lid_north_0", + "from": [ + 6, + 10, + 1 + ], + "to": [ + 10, + 11, + 2 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 4, + 1 + ], + "texture": "#2" + }, + "east": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#2" + }, + "south": { + "uv": [ + 0, + 0, + 4, + 1 + ], + "texture": "#missing" + }, + "west": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#2" + }, + "up": { + "uv": [ + 6, + 1, + 10, + 2 + ], + "texture": "#2" + }, + "down": { + "uv": [ + 6, + 1, + 10, + 2 + ], + "texture": "#2" + } + } + }, + { + "name": "lid_west_0", + "from": [ + 1, + 10, + 6 + ], + "to": [ + 2, + 11, + 10 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#2" + }, + "east": { + "uv": [ + 0, + 0, + 4, + 1 + ], + "texture": "#default" + }, + "south": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#2" + }, + "west": { + "uv": [ + 0, + 0, + 4, + 1 + ], + "texture": "#2" + }, + "up": { + "uv": [ + 1, + 6, + 2, + 10 + ], + "texture": "#2" + }, + "down": { + "uv": [ + 14, + 6, + 15, + 10 + ], + "texture": "#2" + } + } + }, + { + "name": "lid_east_0", + "from": [ + 14, + 10, + 6 + ], + "to": [ + 15, + 11, + 10 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#2" + }, + "east": { + "uv": [ + 0, + 0, + 4, + 1 + ], + "texture": "#2" + }, + "south": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#2" + }, + "west": { + "uv": [ + 0, + 0, + 4, + 1 + ], + "texture": "#default" + }, + "up": { + "uv": [ + 14, + 6, + 15, + 10 + ], + "texture": "#2" + }, + "down": { + "uv": [ + 1, + 7, + 2, + 11 + ], + "texture": "#2" + } + } + }, + { + "name": "lid_south_1", + "from": [ + 4, + 10, + 13 + ], + "to": [ + 12, + 11, + 14 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 8, + 1 + ], + "texture": "#missing" + }, + "east": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#2" + }, + "south": { + "uv": [ + 0, + 0, + 8, + 1 + ], + "texture": "#2" + }, + "west": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#2" + }, + "up": { + "uv": [ + 4, + 13, + 12, + 14 + ], + "texture": "#2" + }, + "down": { + "uv": [ + 4, + 13, + 12, + 14 + ], + "texture": "#2" + } + } + }, + { + "name": "lid_north_1", + "from": [ + 4, + 10, + 2 + ], + "to": [ + 12, + 11, + 3 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 8, + 1 + ], + "texture": "#2" + }, + "east": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#2" + }, + "south": { + "uv": [ + 0, + 0, + 8, + 1 + ], + "texture": "#missing" + }, + "west": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#2" + }, + "up": { + "uv": [ + 4, + 2, + 12, + 3 + ], + "texture": "#2" + }, + "down": { + "uv": [ + 4, + 2, + 12, + 3 + ], + "texture": "#2" + } + } + }, + { + "name": "handle", + "from": [ + 7, + 15, + 4 + ], + "to": [ + 9, + 16, + 12 + ], + "faces": { + "north": { + "uv": [ + 14, + 1, + 16, + 2 + ], + "texture": "#3" + }, + "east": { + "uv": [ + 4, + 7, + 12, + 8 + ], + "texture": "#3" + }, + "south": { + "uv": [ + 0, + 1, + 2, + 2 + ], + "texture": "#3" + }, + "west": { + "uv": [ + 4, + 10, + 12, + 11 + ], + "texture": "#3" + }, + "up": { + "uv": [ + 4, + 8, + 12, + 10 + ], + "rotation": 90, + "texture": "#3" + }, + "down": { + "uv": [ + 4, + 8, + 12, + 10 + ], + "rotation": 90, + "texture": "#3" + } + } + }, + { + "name": "screw", + "from": [ + 7.25, + 11, + 7.25 + ], + "to": [ + 8.75, + 15, + 8.75 + ], + "faces": { + "north": { + "uv": [ + 0, + 8, + 1, + 12 + ], + "texture": "#3" + }, + "east": { + "uv": [ + 0, + 4, + 1, + 8 + ], + "texture": "#3" + }, + "south": { + "uv": [ + 0, + 0, + 1, + 4 + ], + "texture": "#3" + }, + "west": { + "uv": [ + 0, + 12, + 1, + 16 + ], + "texture": "#3" + }, + "up": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#default" + }, + "down": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#default" + } + } + } + ], + "groups": [ + { + "name": "lid", + "origin": [ + 8, + 8, + 8 + ], + "color": 0, + "children": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8 + ] + }, + 9, + 10 + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/models/block/cheese_press_topper_north.json b/src/main/resources/assets/growthcraft_milk/models/block/cheese_press_topper_north.json new file mode 100644 index 0000000..9b980c9 --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/models/block/cheese_press_topper_north.json @@ -0,0 +1,795 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "2": "growthcraft_milk:block/cheese_press/vice_top", + "3": "growthcraft_milk:block/cheese_press/iron_frame", + "default": "growthcraft_milk:block/cheese_press/base" + }, + "elements": [ + { + "name": "lid_west_1", + "from": [ + 2, + 11, + 4 + ], + "to": [ + 3, + 12, + 12 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#2" + }, + "east": { + "uv": [ + 0, + 0, + 8, + 1 + ], + "texture": "#default" + }, + "south": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#2" + }, + "west": { + "uv": [ + 0, + 0, + 8, + 1 + ], + "texture": "#2" + }, + "up": { + "uv": [ + 2, + 4, + 3, + 12 + ], + "texture": "#2" + }, + "down": { + "uv": [ + 13, + 4, + 14, + 12 + ], + "texture": "#2" + } + } + }, + { + "name": "lid_east_1", + "from": [ + 13, + 11, + 4 + ], + "to": [ + 14, + 12, + 12 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#2" + }, + "east": { + "uv": [ + 0, + 0, + 8, + 1 + ], + "texture": "#2" + }, + "south": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#2" + }, + "west": { + "uv": [ + 0, + 0, + 8, + 1 + ], + "texture": "#default" + }, + "up": { + "uv": [ + 13, + 4, + 14, + 12 + ], + "texture": "#2" + }, + "down": { + "uv": [ + 2, + 3, + 3, + 11 + ], + "texture": "#2" + } + } + }, + { + "name": "lid_center", + "from": [ + 3, + 11, + 3 + ], + "to": [ + 13, + 12, + 13 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 8, + 1 + ], + "texture": "#2" + }, + "east": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#2" + }, + "south": { + "uv": [ + 0, + 0, + 8, + 1 + ], + "texture": "#2" + }, + "west": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#2" + }, + "up": { + "uv": [ + 3, + 3, + 13, + 13 + ], + "texture": "#2" + }, + "down": { + "uv": [ + 3, + 3, + 13, + 13 + ], + "texture": "#2" + } + } + }, + { + "name": "lid_south_0", + "from": [ + 6, + 11, + 14 + ], + "to": [ + 10, + 12, + 15 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 4, + 1 + ], + "texture": "#missing" + }, + "east": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#2" + }, + "south": { + "uv": [ + 6, + 15, + 10, + 16 + ], + "texture": "#2" + }, + "west": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#2" + }, + "up": { + "uv": [ + 6, + 14, + 10, + 15 + ], + "texture": "#2" + }, + "down": { + "uv": [ + 6, + 14, + 10, + 15 + ], + "texture": "#2" + } + } + }, + { + "name": "lid_north_0", + "from": [ + 6, + 11, + 1 + ], + "to": [ + 10, + 12, + 2 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 4, + 1 + ], + "texture": "#2" + }, + "east": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#2" + }, + "south": { + "uv": [ + 0, + 0, + 4, + 1 + ], + "texture": "#missing" + }, + "west": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#2" + }, + "up": { + "uv": [ + 6, + 1, + 10, + 2 + ], + "texture": "#2" + }, + "down": { + "uv": [ + 6, + 1, + 10, + 2 + ], + "texture": "#2" + } + } + }, + { + "name": "lid_west_0", + "from": [ + 1, + 11, + 6 + ], + "to": [ + 2, + 12, + 10 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#2" + }, + "east": { + "uv": [ + 0, + 0, + 4, + 1 + ], + "texture": "#default" + }, + "south": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#2" + }, + "west": { + "uv": [ + 0, + 0, + 4, + 1 + ], + "texture": "#2" + }, + "up": { + "uv": [ + 1, + 6, + 2, + 10 + ], + "texture": "#2" + }, + "down": { + "uv": [ + 14, + 6, + 15, + 10 + ], + "texture": "#2" + } + } + }, + { + "name": "lid_east_0", + "from": [ + 14, + 11, + 6 + ], + "to": [ + 15, + 12, + 10 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#2" + }, + "east": { + "uv": [ + 0, + 0, + 4, + 1 + ], + "texture": "#2" + }, + "south": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#2" + }, + "west": { + "uv": [ + 0, + 0, + 4, + 1 + ], + "texture": "#default" + }, + "up": { + "uv": [ + 14, + 6, + 15, + 10 + ], + "texture": "#2" + }, + "down": { + "uv": [ + 1, + 7, + 2, + 11 + ], + "texture": "#2" + } + } + }, + { + "name": "lid_south_1", + "from": [ + 4, + 11, + 13 + ], + "to": [ + 12, + 12, + 14 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 8, + 1 + ], + "texture": "#missing" + }, + "east": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#2" + }, + "south": { + "uv": [ + 0, + 0, + 8, + 1 + ], + "texture": "#2" + }, + "west": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#2" + }, + "up": { + "uv": [ + 4, + 13, + 12, + 14 + ], + "texture": "#2" + }, + "down": { + "uv": [ + 4, + 13, + 12, + 14 + ], + "texture": "#2" + } + } + }, + { + "name": "lid_north_1", + "from": [ + 4, + 11, + 2 + ], + "to": [ + 12, + 12, + 3 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 8, + 1 + ], + "texture": "#2" + }, + "east": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#2" + }, + "south": { + "uv": [ + 0, + 0, + 8, + 1 + ], + "texture": "#missing" + }, + "west": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#2" + }, + "up": { + "uv": [ + 4, + 2, + 12, + 3 + ], + "texture": "#2" + }, + "down": { + "uv": [ + 4, + 2, + 12, + 3 + ], + "texture": "#2" + } + } + }, + { + "name": "handle", + "from": [ + 7, + 16, + 4 + ], + "to": [ + 9, + 17, + 12 + ], + "faces": { + "north": { + "uv": [ + 14, + 1, + 16, + 2 + ], + "texture": "#3" + }, + "east": { + "uv": [ + 4, + 7, + 12, + 8 + ], + "texture": "#3" + }, + "south": { + "uv": [ + 0, + 1, + 2, + 2 + ], + "texture": "#3" + }, + "west": { + "uv": [ + 4, + 10, + 12, + 11 + ], + "texture": "#3" + }, + "up": { + "uv": [ + 4, + 8, + 12, + 10 + ], + "rotation": 90, + "texture": "#3" + }, + "down": { + "uv": [ + 4, + 8, + 12, + 10 + ], + "rotation": 90, + "texture": "#3" + } + } + }, + { + "name": "screw", + "from": [ + 7.25, + 12, + 7.25 + ], + "to": [ + 8.75, + 16, + 8.75 + ], + "faces": { + "north": { + "uv": [ + 0, + 8, + 1, + 12 + ], + "texture": "#3" + }, + "east": { + "uv": [ + 0, + 4, + 1, + 8 + ], + "texture": "#3" + }, + "south": { + "uv": [ + 0, + 0, + 1, + 4 + ], + "texture": "#3" + }, + "west": { + "uv": [ + 0, + 12, + 1, + 16 + ], + "texture": "#3" + }, + "up": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#default" + }, + "down": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#default" + } + } + } + ], + "groups": [ + { + "name": "lid", + "origin": [ + 8, + 8, + 8 + ], + "color": 0, + "children": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8 + ] + }, + 9, + 10 + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/models/block/cheese_press_topper_south.json b/src/main/resources/assets/growthcraft_milk/models/block/cheese_press_topper_south.json new file mode 100644 index 0000000..8c81f6f --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/models/block/cheese_press_topper_south.json @@ -0,0 +1,806 @@ +{ + "credit": "Made with Blockbench, a free, modern block model editor by JannisX11. Model by Alatyami & Kisutora.", + "textures": { + "2": "growthcraft_milk:block/cheese_press/vice_top", + "3": "growthcraft_milk:block/cheese_press/iron_frame", + "default": "growthcraft_milk:block/cheese_press/base", + "missing": "growthcraft:block/missing" + }, + "elements": [ + { + "name": "lid_west_1", + "from": [ + 2, + 8, + 4 + ], + "to": [ + 3, + 9, + 12 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#2" + }, + "east": { + "uv": [ + 0, + 0, + 8, + 1 + ], + "texture": "#default" + }, + "south": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#2" + }, + "west": { + "uv": [ + 0, + 0, + 8, + 1 + ], + "texture": "#2" + }, + "up": { + "uv": [ + 2, + 4, + 3, + 12 + ], + "texture": "#2" + }, + "down": { + "uv": [ + 13, + 4, + 14, + 12 + ], + "texture": "#2" + } + }, + "type": "cube" + }, + { + "name": "lid_east_1", + "from": [ + 13, + 8, + 4 + ], + "to": [ + 14, + 9, + 12 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#2" + }, + "east": { + "uv": [ + 0, + 0, + 8, + 1 + ], + "texture": "#2" + }, + "south": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#2" + }, + "west": { + "uv": [ + 0, + 0, + 8, + 1 + ], + "texture": "#default" + }, + "up": { + "uv": [ + 13, + 4, + 14, + 12 + ], + "texture": "#2" + }, + "down": { + "uv": [ + 2, + 3, + 3, + 11 + ], + "texture": "#2" + } + }, + "type": "cube" + }, + { + "name": "lid_center", + "from": [ + 3, + 8, + 3 + ], + "to": [ + 13, + 9, + 13 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 8, + 1 + ], + "texture": "#2" + }, + "east": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#2" + }, + "south": { + "uv": [ + 0, + 0, + 8, + 1 + ], + "texture": "#2" + }, + "west": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#2" + }, + "up": { + "uv": [ + 3, + 3, + 13, + 13 + ], + "texture": "#2" + }, + "down": { + "uv": [ + 3, + 3, + 13, + 13 + ], + "texture": "#2" + } + }, + "type": "cube" + }, + { + "name": "lid_south_0", + "from": [ + 6, + 8, + 14 + ], + "to": [ + 10, + 9, + 15 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 4, + 1 + ], + "texture": "#missing" + }, + "east": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#2" + }, + "south": { + "uv": [ + 6, + 15, + 10, + 16 + ], + "texture": "#2" + }, + "west": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#2" + }, + "up": { + "uv": [ + 6, + 14, + 10, + 15 + ], + "texture": "#2" + }, + "down": { + "uv": [ + 6, + 14, + 10, + 15 + ], + "texture": "#2" + } + }, + "type": "cube" + }, + { + "name": "lid_north_0", + "from": [ + 6, + 8, + 1 + ], + "to": [ + 10, + 9, + 2 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 4, + 1 + ], + "texture": "#2" + }, + "east": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#2" + }, + "south": { + "uv": [ + 0, + 0, + 4, + 1 + ], + "texture": "#missing" + }, + "west": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#2" + }, + "up": { + "uv": [ + 6, + 1, + 10, + 2 + ], + "texture": "#2" + }, + "down": { + "uv": [ + 6, + 1, + 10, + 2 + ], + "texture": "#2" + } + }, + "type": "cube" + }, + { + "name": "lid_west_0", + "from": [ + 1, + 8, + 6 + ], + "to": [ + 2, + 9, + 10 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#2" + }, + "east": { + "uv": [ + 0, + 0, + 4, + 1 + ], + "texture": "#default" + }, + "south": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#2" + }, + "west": { + "uv": [ + 0, + 0, + 4, + 1 + ], + "texture": "#2" + }, + "up": { + "uv": [ + 1, + 6, + 2, + 10 + ], + "texture": "#2" + }, + "down": { + "uv": [ + 14, + 6, + 15, + 10 + ], + "texture": "#2" + } + }, + "type": "cube" + }, + { + "name": "lid_east_0", + "from": [ + 14, + 8, + 6 + ], + "to": [ + 15, + 9, + 10 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#2" + }, + "east": { + "uv": [ + 0, + 0, + 4, + 1 + ], + "texture": "#2" + }, + "south": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#2" + }, + "west": { + "uv": [ + 0, + 0, + 4, + 1 + ], + "texture": "#default" + }, + "up": { + "uv": [ + 14, + 6, + 15, + 10 + ], + "texture": "#2" + }, + "down": { + "uv": [ + 1, + 7, + 2, + 11 + ], + "texture": "#2" + } + }, + "type": "cube" + }, + { + "name": "lid_south_1", + "from": [ + 4, + 8, + 13 + ], + "to": [ + 12, + 9, + 14 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 8, + 1 + ], + "texture": "#missing" + }, + "east": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#2" + }, + "south": { + "uv": [ + 0, + 0, + 8, + 1 + ], + "texture": "#2" + }, + "west": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#2" + }, + "up": { + "uv": [ + 4, + 13, + 12, + 14 + ], + "texture": "#2" + }, + "down": { + "uv": [ + 4, + 13, + 12, + 14 + ], + "texture": "#2" + } + }, + "type": "cube" + }, + { + "name": "lid_north_1", + "from": [ + 4, + 8, + 2 + ], + "to": [ + 12, + 9, + 3 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 8, + 1 + ], + "texture": "#2" + }, + "east": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#2" + }, + "south": { + "uv": [ + 0, + 0, + 8, + 1 + ], + "texture": "#missing" + }, + "west": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#2" + }, + "up": { + "uv": [ + 4, + 2, + 12, + 3 + ], + "texture": "#2" + }, + "down": { + "uv": [ + 4, + 2, + 12, + 3 + ], + "texture": "#2" + } + }, + "type": "cube" + }, + { + "name": "handle", + "from": [ + 7, + 13, + 4 + ], + "to": [ + 9, + 14, + 12 + ], + "faces": { + "north": { + "uv": [ + 14, + 1, + 16, + 2 + ], + "texture": "#3" + }, + "east": { + "uv": [ + 4, + 7, + 12, + 8 + ], + "texture": "#3" + }, + "south": { + "uv": [ + 0, + 1, + 2, + 2 + ], + "texture": "#3" + }, + "west": { + "uv": [ + 4, + 10, + 12, + 11 + ], + "texture": "#3" + }, + "up": { + "uv": [ + 4, + 8, + 12, + 10 + ], + "texture": "#3", + "rotation": 90 + }, + "down": { + "uv": [ + 4, + 8, + 12, + 10 + ], + "texture": "#3", + "rotation": 90 + } + }, + "type": "cube" + }, + { + "name": "screw", + "from": [ + 7.25, + 9, + 7.25 + ], + "to": [ + 8.75, + 13, + 8.75 + ], + "faces": { + "north": { + "uv": [ + 0, + 8, + 1, + 12 + ], + "texture": "#3" + }, + "east": { + "uv": [ + 0, + 4, + 1, + 8 + ], + "texture": "#3" + }, + "south": { + "uv": [ + 0, + 0, + 1, + 4 + ], + "texture": "#3" + }, + "west": { + "uv": [ + 0, + 12, + 1, + 16 + ], + "texture": "#3" + }, + "up": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#default" + }, + "down": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#default" + } + }, + "type": "cube" + } + ], + "groups": [ + { + "name": "lid", + "isOpen": true, + "display": { + "visibility": true, + "autouv": true + }, + "children": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8 + ] + }, + 9, + 10 + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/models/block/cheese_press_topper_west.json b/src/main/resources/assets/growthcraft_milk/models/block/cheese_press_topper_west.json new file mode 100644 index 0000000..eab5d52 --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/models/block/cheese_press_topper_west.json @@ -0,0 +1,795 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "2": "growthcraft_milk:block/cheese_press/vice_top", + "3": "growthcraft_milk:block/cheese_press/iron_frame", + "default": "growthcraft_milk:block/cheese_press/base" + }, + "elements": [ + { + "name": "lid_west_1", + "from": [ + 2, + 7, + 4 + ], + "to": [ + 3, + 8, + 12 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#2" + }, + "east": { + "uv": [ + 0, + 0, + 8, + 1 + ], + "texture": "#default" + }, + "south": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#2" + }, + "west": { + "uv": [ + 0, + 0, + 8, + 1 + ], + "texture": "#2" + }, + "up": { + "uv": [ + 2, + 4, + 3, + 12 + ], + "texture": "#2" + }, + "down": { + "uv": [ + 13, + 4, + 14, + 12 + ], + "texture": "#2" + } + } + }, + { + "name": "lid_east_1", + "from": [ + 13, + 7, + 4 + ], + "to": [ + 14, + 8, + 12 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#2" + }, + "east": { + "uv": [ + 0, + 0, + 8, + 1 + ], + "texture": "#2" + }, + "south": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#2" + }, + "west": { + "uv": [ + 0, + 0, + 8, + 1 + ], + "texture": "#default" + }, + "up": { + "uv": [ + 13, + 4, + 14, + 12 + ], + "texture": "#2" + }, + "down": { + "uv": [ + 2, + 3, + 3, + 11 + ], + "texture": "#2" + } + } + }, + { + "name": "lid_center", + "from": [ + 3, + 7, + 3 + ], + "to": [ + 13, + 8, + 13 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 8, + 1 + ], + "texture": "#2" + }, + "east": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#2" + }, + "south": { + "uv": [ + 0, + 0, + 8, + 1 + ], + "texture": "#2" + }, + "west": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#2" + }, + "up": { + "uv": [ + 3, + 3, + 13, + 13 + ], + "texture": "#2" + }, + "down": { + "uv": [ + 3, + 3, + 13, + 13 + ], + "texture": "#2" + } + } + }, + { + "name": "lid_south_0", + "from": [ + 6, + 7, + 14 + ], + "to": [ + 10, + 8, + 15 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 4, + 1 + ], + "texture": "#missing" + }, + "east": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#2" + }, + "south": { + "uv": [ + 6, + 15, + 10, + 16 + ], + "texture": "#2" + }, + "west": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#2" + }, + "up": { + "uv": [ + 6, + 14, + 10, + 15 + ], + "texture": "#2" + }, + "down": { + "uv": [ + 6, + 14, + 10, + 15 + ], + "texture": "#2" + } + } + }, + { + "name": "lid_north_0", + "from": [ + 6, + 7, + 1 + ], + "to": [ + 10, + 8, + 2 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 4, + 1 + ], + "texture": "#2" + }, + "east": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#2" + }, + "south": { + "uv": [ + 0, + 0, + 4, + 1 + ], + "texture": "#missing" + }, + "west": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#2" + }, + "up": { + "uv": [ + 6, + 1, + 10, + 2 + ], + "texture": "#2" + }, + "down": { + "uv": [ + 6, + 1, + 10, + 2 + ], + "texture": "#2" + } + } + }, + { + "name": "lid_west_0", + "from": [ + 1, + 7, + 6 + ], + "to": [ + 2, + 8, + 10 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#2" + }, + "east": { + "uv": [ + 0, + 0, + 4, + 1 + ], + "texture": "#default" + }, + "south": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#2" + }, + "west": { + "uv": [ + 0, + 0, + 4, + 1 + ], + "texture": "#2" + }, + "up": { + "uv": [ + 1, + 6, + 2, + 10 + ], + "texture": "#2" + }, + "down": { + "uv": [ + 14, + 6, + 15, + 10 + ], + "texture": "#2" + } + } + }, + { + "name": "lid_east_0", + "from": [ + 14, + 7, + 6 + ], + "to": [ + 15, + 8, + 10 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#2" + }, + "east": { + "uv": [ + 0, + 0, + 4, + 1 + ], + "texture": "#2" + }, + "south": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#2" + }, + "west": { + "uv": [ + 0, + 0, + 4, + 1 + ], + "texture": "#default" + }, + "up": { + "uv": [ + 14, + 6, + 15, + 10 + ], + "texture": "#2" + }, + "down": { + "uv": [ + 1, + 7, + 2, + 11 + ], + "texture": "#2" + } + } + }, + { + "name": "lid_south_1", + "from": [ + 4, + 7, + 13 + ], + "to": [ + 12, + 8, + 14 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 8, + 1 + ], + "texture": "#missing" + }, + "east": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#2" + }, + "south": { + "uv": [ + 0, + 0, + 8, + 1 + ], + "texture": "#2" + }, + "west": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#2" + }, + "up": { + "uv": [ + 4, + 13, + 12, + 14 + ], + "texture": "#2" + }, + "down": { + "uv": [ + 4, + 13, + 12, + 14 + ], + "texture": "#2" + } + } + }, + { + "name": "lid_north_1", + "from": [ + 4, + 7, + 2 + ], + "to": [ + 12, + 8, + 3 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 8, + 1 + ], + "texture": "#2" + }, + "east": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#2" + }, + "south": { + "uv": [ + 0, + 0, + 8, + 1 + ], + "texture": "#missing" + }, + "west": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#2" + }, + "up": { + "uv": [ + 4, + 2, + 12, + 3 + ], + "texture": "#2" + }, + "down": { + "uv": [ + 4, + 2, + 12, + 3 + ], + "texture": "#2" + } + } + }, + { + "name": "handle", + "from": [ + 7, + 12, + 4 + ], + "to": [ + 9, + 13, + 12 + ], + "faces": { + "north": { + "uv": [ + 14, + 1, + 16, + 2 + ], + "texture": "#3" + }, + "east": { + "uv": [ + 4, + 7, + 12, + 8 + ], + "texture": "#3" + }, + "south": { + "uv": [ + 0, + 1, + 2, + 2 + ], + "texture": "#3" + }, + "west": { + "uv": [ + 4, + 10, + 12, + 11 + ], + "texture": "#3" + }, + "up": { + "uv": [ + 4, + 8, + 12, + 10 + ], + "rotation": 90, + "texture": "#3" + }, + "down": { + "uv": [ + 4, + 8, + 12, + 10 + ], + "rotation": 90, + "texture": "#3" + } + } + }, + { + "name": "screw", + "from": [ + 7.25, + 8, + 7.25 + ], + "to": [ + 8.75, + 12, + 8.75 + ], + "faces": { + "north": { + "uv": [ + 0, + 8, + 1, + 12 + ], + "texture": "#3" + }, + "east": { + "uv": [ + 0, + 4, + 1, + 8 + ], + "texture": "#3" + }, + "south": { + "uv": [ + 0, + 0, + 1, + 4 + ], + "texture": "#3" + }, + "west": { + "uv": [ + 0, + 12, + 1, + 16 + ], + "texture": "#3" + }, + "up": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#default" + }, + "down": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#default" + } + } + } + ], + "groups": [ + { + "name": "lid", + "origin": [ + 8, + 8, + 8 + ], + "color": 0, + "children": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8 + ] + }, + 9, + 10 + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/models/block/cheese_wheel/cheese_slab_slices_bottom_1.json b/src/main/resources/assets/growthcraft_milk/models/block/cheese_wheel/cheese_slab_slices_bottom_1.json new file mode 100644 index 0000000..f16617b --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/models/block/cheese_wheel/cheese_slab_slices_bottom_1.json @@ -0,0 +1,875 @@ +{ + "ambientocclusion": false, + "render_type": "cutout", + "textures": { + "0": "growthcraft_milk:block/cheese_slab/cheese_base", + "1": "growthcraft_milk:block/cheese_slab/cheese_side", + "missing": "growthcraft:block/missing", + "particle": "growthcraft_milk:block/cheese_base" + }, + "elements": [ + { + "name": "middle", + "from": [8, 0, 8], + "to": [13, 8, 13], + "faces": { + "north": { + "uv": [ + 3, + 8, + 8, + 16 + ], + "texture": "#1", + "tintindex": 0 + }, + "east": { + "uv": [ + 3, + 8, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 8, + 8, + 13, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 8, + 8, + 13, + 16 + ], + "texture": "#1", + "tintindex": 0 + }, + "up": { + "uv": [ + 8, + 8, + 13, + 13 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 8, + 3, + 13, + 8 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [8, 0, 13], + "to": [12, 8, 14], + "faces": { + "east": { + "uv": [ + 2, + 8, + 3, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 8, + 8, + 12, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 13, + 8, + 14, + 16 + ], + "texture": "#1", + "tintindex": 0 + }, + "up": { + "uv": [ + 8, + 13, + 12, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 8, + 2, + 12, + 3 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [12, 1, 13], + "to": [13, 7, 14], + "faces": { + "east": { + "uv": [ + 2, + 9, + 3, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 12, + 9, + 13, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 12, + 13, + 13, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 12, + 2, + 13, + 3 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [13, 0, 8], + "to": [14, 8, 12], + "faces": { + "north": { + "uv": [ + 2, + 8, + 3, + 16 + ], + "texture": "#1", + "tintindex": 0 + }, + "east": { + "uv": [ + 4, + 8, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 13, + 8, + 14, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 13, + 8, + 14, + 12 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 13, + 4, + 14, + 8 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [13, 1, 12], + "to": [14, 7, 13], + "faces": { + "east": { + "uv": [ + 3, + 9, + 4, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 13, + 9, + 14, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 13, + 12, + 14, + 13 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 13, + 3, + 14, + 4 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [8, 0, 14], + "to": [10, 8, 15], + "faces": { + "east": { + "uv": [ + 1, + 8, + 2, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 8, + 8, + 10, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 14, + 8, + 15, + 16 + ], + "texture": "#1", + "tintindex": 0 + }, + "up": { + "uv": [ + 8, + 14, + 10, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 8, + 1, + 10, + 2 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [10, 1, 14], + "to": [12, 7, 15], + "faces": { + "east": { + "uv": [ + 1, + 9, + 2, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 10, + 9, + 12, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 10, + 14, + 12, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 10, + 1, + 12, + 2 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [12, 2, 14], + "to": [13, 6, 15], + "faces": { + "east": { + "uv": [ + 1, + 10, + 2, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 12, + 10, + 13, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 12, + 14, + 13, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 12, + 1, + 13, + 2 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [14, 0, 8], + "to": [15, 8, 10], + "faces": { + "north": { + "uv": [ + 1, + 8, + 2, + 16 + ], + "texture": "#1", + "tintindex": 0 + }, + "east": { + "uv": [ + 6, + 8, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 14, + 8, + 15, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 14, + 8, + 15, + 10 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 14, + 6, + 15, + 8 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [14, 1, 10], + "to": [15, 7, 12], + "faces": { + "east": { + "uv": [ + 4, + 9, + 6, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 14, + 9, + 15, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 14, + 10, + 15, + 12 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 14, + 4, + 15, + 6 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [14, 2, 12], + "to": [15, 6, 13], + "faces": { + "east": { + "uv": [ + 3, + 10, + 4, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 14, + 10, + 15, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 14, + 12, + 15, + 13 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 14, + 3, + 15, + 4 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [8, 1, 15], + "to": [10, 7, 16], + "faces": { + "east": { + "uv": [ + 0, + 9, + 1, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 8, + 9, + 10, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 15, + 9, + 16, + 15 + ], + "texture": "#1", + "tintindex": 0 + }, + "up": { + "uv": [ + 8, + 15, + 10, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 8, + 0, + 10, + 1 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [10, 2, 15], + "to": [11, 6, 16], + "faces": { + "east": { + "uv": [ + 0, + 10, + 1, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 10, + 10, + 11, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 10, + 15, + 11, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 10, + 0, + 11, + 1 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [15, 1, 8], + "to": [16, 7, 10], + "faces": { + "north": { + "uv": [ + 0, + 9, + 1, + 15 + ], + "texture": "#1", + "tintindex": 0 + }, + "east": { + "uv": [ + 6, + 9, + 8, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 15, + 9, + 16, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 15, + 8, + 16, + 10 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 15, + 6, + 16, + 8 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [15, 2, 10], + "to": [16, 6, 11], + "faces": { + "east": { + "uv": [ + 5, + 10, + 6, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 15, + 10, + 16, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 15, + 10, + 16, + 11 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 15, + 5, + 16, + 6 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "corner", + "from": [13, 2, 13], + "to": [14, 6, 14], + "faces": { + "east": { + "uv": [ + 2, + 10, + 3, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 13, + 10, + 14, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 13, + 13, + 14, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 13, + 2, + 14, + 3 + ], + "texture": "#0", + "tintindex": 0 + } + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "thirdperson_lefthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson_righthand": { + "rotation": [0, 45, 0], + "scale": [0.4, 0.4, 0.4] + }, + "firstperson_lefthand": { + "rotation": [0, 225, 0], + "scale": [0.4, 0.4, 0.4] + }, + "ground": { + "translation": [0, 3, 0], + "scale": [0.25, 0.25, 0.25] + }, + "gui": { + "rotation": [30, 225, 0], + "scale": [0.625, 0.625, 0.625] + }, + "fixed": { + "scale": [0.5, 0.5, 0.5] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/models/block/cheese_wheel/cheese_slab_slices_bottom_2.json b/src/main/resources/assets/growthcraft_milk/models/block/cheese_wheel/cheese_slab_slices_bottom_2.json new file mode 100644 index 0000000..56c0d6d --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/models/block/cheese_wheel/cheese_slab_slices_bottom_2.json @@ -0,0 +1,1637 @@ +{ + "ambientocclusion": false, + "render_type": "cutout", + "textures": { + "0": "growthcraft_milk:block/cheese_slab/cheese_base", + "1": "growthcraft_milk:block/cheese_slab/cheese_side", + "missing": "growthcraft:block/missing", + "particle": "growthcraft_milk:block/cheese_slab/cheese_base" + }, + "elements": [ + { + "name": "middle", + "from": [8, 0, 8], + "to": [13, 8, 13], + "faces": { + "north": { + "uv": [ + 3, + 8, + 8, + 16 + ], + "texture": "#1", + "tintindex": 0 + }, + "east": { + "uv": [ + 3, + 8, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 8, + 8, + 13, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 8, + 8, + 13, + 13 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 8, + 3, + 13, + 8 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [8, 0, 13], + "to": [12, 8, 14], + "faces": { + "east": { + "uv": [ + 2, + 8, + 3, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 8, + 8, + 12, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 8, + 13, + 12, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 8, + 2, + 12, + 3 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [12, 1, 13], + "to": [13, 7, 14], + "faces": { + "east": { + "uv": [ + 2, + 9, + 3, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 12, + 9, + 13, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 12, + 13, + 13, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 12, + 2, + 13, + 3 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [13, 0, 8], + "to": [14, 8, 12], + "faces": { + "north": { + "uv": [ + 2, + 8, + 3, + 16 + ], + "texture": "#1", + "tintindex": 0 + }, + "east": { + "uv": [ + 4, + 8, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 13, + 8, + 14, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 13, + 8, + 14, + 12 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 13, + 4, + 14, + 8 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [13, 1, 12], + "to": [14, 7, 13], + "faces": { + "east": { + "uv": [ + 3, + 9, + 4, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 13, + 9, + 14, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 13, + 12, + 14, + 13 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 13, + 3, + 14, + 4 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [8, 0, 14], + "to": [10, 8, 15], + "faces": { + "east": { + "uv": [ + 1, + 8, + 2, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 8, + 8, + 10, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 8, + 14, + 10, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 8, + 1, + 10, + 2 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [10, 1, 14], + "to": [12, 7, 15], + "faces": { + "east": { + "uv": [ + 1, + 9, + 2, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 10, + 9, + 12, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 10, + 14, + 12, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 10, + 1, + 12, + 2 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [12, 2, 14], + "to": [13, 6, 15], + "faces": { + "east": { + "uv": [ + 1, + 10, + 2, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 12, + 10, + 13, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 12, + 14, + 13, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 12, + 1, + 13, + 2 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [14, 0, 8], + "to": [15, 8, 10], + "faces": { + "north": { + "uv": [ + 1, + 8, + 2, + 16 + ], + "texture": "#1", + "tintindex": 0 + }, + "east": { + "uv": [ + 6, + 8, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 14, + 8, + 15, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 14, + 8, + 15, + 10 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 14, + 6, + 15, + 8 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [14, 1, 10], + "to": [15, 7, 12], + "faces": { + "east": { + "uv": [ + 4, + 9, + 6, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 14, + 9, + 15, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 14, + 10, + 15, + 12 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 14, + 4, + 15, + 6 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [14, 2, 12], + "to": [15, 6, 13], + "faces": { + "east": { + "uv": [ + 3, + 10, + 4, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 14, + 10, + 15, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 14, + 12, + 15, + 13 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 14, + 3, + 15, + 4 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [8, 1, 15], + "to": [10, 7, 16], + "faces": { + "east": { + "uv": [ + 0, + 9, + 1, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 8, + 9, + 10, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 8, + 15, + 10, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 8, + 0, + 10, + 1 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [10, 2, 15], + "to": [11, 6, 16], + "faces": { + "east": { + "uv": [ + 0, + 10, + 1, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 10, + 10, + 11, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 10, + 15, + 11, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 10, + 0, + 11, + 1 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [15, 1, 8], + "to": [16, 7, 10], + "faces": { + "north": { + "uv": [ + 0, + 9, + 1, + 15 + ], + "texture": "#1", + "tintindex": 0 + }, + "east": { + "uv": [ + 6, + 9, + 8, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 15, + 9, + 16, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 15, + 8, + 16, + 10 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 15, + 6, + 16, + 8 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [15, 2, 10], + "to": [16, 6, 11], + "faces": { + "east": { + "uv": [ + 5, + 10, + 6, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 15, + 10, + 16, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 15, + 10, + 16, + 11 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 15, + 5, + 16, + 6 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "corner", + "from": [13, 2, 13], + "to": [14, 6, 14], + "faces": { + "east": { + "uv": [ + 2, + 10, + 3, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 13, + 10, + 14, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 13, + 13, + 14, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 13, + 2, + 14, + 3 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "middle", + "from": [3, 0, 8], + "to": [8, 8, 13], + "faces": { + "north": { + "uv": [ + 8, + 8, + 13, + 16 + ], + "texture": "#1", + "tintindex": 0 + }, + "south": { + "uv": [ + 3, + 8, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 8, + 8, + 13, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 3, + 8, + 8, + 13 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 3, + 3, + 8, + 8 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [2, 0, 8], + "to": [3, 8, 12], + "faces": { + "north": { + "uv": [ + 13, + 8, + 14, + 16 + ], + "texture": "#1", + "tintindex": 0 + }, + "south": { + "uv": [ + 2, + 8, + 3, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 8, + 8, + 12, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 2, + 8, + 3, + 12 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 2, + 4, + 3, + 8 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [2, 1, 12], + "to": [3, 7, 13], + "faces": { + "south": { + "uv": [ + 2, + 9, + 3, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 12, + 9, + 13, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 2, + 12, + 3, + 13 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 2, + 3, + 3, + 4 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [4, 0, 13], + "to": [8, 8, 14], + "faces": { + "south": { + "uv": [ + 4, + 8, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 13, + 8, + 14, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 4, + 13, + 8, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 4, + 2, + 8, + 3 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [3, 1, 13], + "to": [4, 7, 14], + "faces": { + "south": { + "uv": [ + 3, + 9, + 4, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 13, + 9, + 14, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 3, + 13, + 4, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 3, + 2, + 4, + 3 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [1, 0, 8], + "to": [2, 8, 10], + "faces": { + "north": { + "uv": [ + 14, + 8, + 15, + 16 + ], + "texture": "#1", + "tintindex": 0 + }, + "south": { + "uv": [ + 1, + 8, + 2, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 8, + 8, + 10, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 1, + 8, + 2, + 10 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 1, + 6, + 2, + 8 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [1, 1, 10], + "to": [2, 7, 12], + "faces": { + "south": { + "uv": [ + 1, + 9, + 2, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 10, + 9, + 12, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 1, + 10, + 2, + 12 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 1, + 4, + 2, + 6 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [1, 2, 12], + "to": [2, 6, 13], + "faces": { + "south": { + "uv": [ + 1, + 10, + 2, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 12, + 10, + 13, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 1, + 12, + 2, + 13 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 1, + 3, + 2, + 4 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [6, 0, 14], + "to": [8, 8, 15], + "faces": { + "south": { + "uv": [ + 6, + 8, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 14, + 8, + 15, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 6, + 14, + 8, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 6, + 1, + 8, + 2 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [4, 1, 14], + "to": [6, 7, 15], + "faces": { + "south": { + "uv": [ + 4, + 9, + 6, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 14, + 9, + 15, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 4, + 14, + 6, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 4, + 1, + 6, + 2 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [3, 2, 14], + "to": [4, 6, 15], + "faces": { + "south": { + "uv": [ + 3, + 10, + 4, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 14, + 10, + 15, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 3, + 14, + 4, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 3, + 1, + 4, + 2 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [0, 1, 8], + "to": [1, 7, 10], + "faces": { + "north": { + "uv": [ + 15, + 9, + 16, + 15 + ], + "texture": "#1", + "tintindex": 0 + }, + "south": { + "uv": [ + 0, + 9, + 1, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 8, + 9, + 10, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 0, + 8, + 1, + 10 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 0, + 6, + 1, + 8 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [0, 2, 10], + "to": [1, 6, 11], + "faces": { + "south": { + "uv": [ + 0, + 10, + 1, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 10, + 10, + 11, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 0, + 10, + 1, + 11 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 0, + 5, + 1, + 6 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [6, 1, 15], + "to": [8, 7, 16], + "faces": { + "south": { + "uv": [ + 6, + 9, + 8, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 15, + 9, + 16, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 6, + 15, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 6, + 0, + 8, + 1 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [5, 2, 15], + "to": [6, 6, 16], + "faces": { + "south": { + "uv": [ + 5, + 10, + 6, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 15, + 10, + 16, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 5, + 15, + 6, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 5, + 0, + 6, + 1 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "corner", + "from": [2, 2, 13], + "to": [3, 6, 14], + "faces": { + "south": { + "uv": [ + 2, + 10, + 3, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 13, + 10, + 14, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 2, + 13, + 3, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 2, + 2, + 3, + 3 + ], + "texture": "#0", + "tintindex": 0 + } + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "thirdperson_lefthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson_righthand": { + "rotation": [0, 45, 0], + "scale": [0.4, 0.4, 0.4] + }, + "firstperson_lefthand": { + "rotation": [0, 225, 0], + "scale": [0.4, 0.4, 0.4] + }, + "ground": { + "translation": [0, 3, 0], + "scale": [0.25, 0.25, 0.25] + }, + "gui": { + "rotation": [30, 225, 0], + "scale": [0.625, 0.625, 0.625] + }, + "fixed": { + "scale": [0.5, 0.5, 0.5] + } + }, + "groups": [ + { + "name": "slice_1", + "children": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15] + }, + { + "name": "slice_2", + "children": [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/growthcraft_milk/models/block/cheese_wheel/cheese_slab_slices_bottom_3.json b/src/main/resources/assets/growthcraft_milk/models/block/cheese_wheel/cheese_slab_slices_bottom_3.json new file mode 100644 index 0000000..017ce85 --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/models/block/cheese_wheel/cheese_slab_slices_bottom_3.json @@ -0,0 +1,2391 @@ +{ + "textures": { + "0": "growthcraft_milk:block/cheese_slab/cheese_base", + "1": "growthcraft_milk:block/cheese_slab/cheese_side", + "missing": "growthcraft:block/missing", + "particle": "growthcraft_milk:block/cheese_slab/cheese_base" + }, + "elements": [ + { + "name": "middle", + "from": [8, 0, 8], + "to": [13, 8, 13], + "faces": { + "north": { + "uv": [ + 3, + 8, + 8, + 16 + ], + "texture": "#1", + "tintindex": 0 + }, + "east": { + "uv": [ + 3, + 8, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 8, + 8, + 13, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 8, + 8, + 13, + 13 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 8, + 3, + 13, + 8 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [8, 0, 13], + "to": [12, 8, 14], + "faces": { + "east": { + "uv": [ + 2, + 8, + 3, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 8, + 8, + 12, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 8, + 13, + 12, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 8, + 2, + 12, + 3 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [12, 1, 13], + "to": [13, 7, 14], + "faces": { + "east": { + "uv": [ + 2, + 9, + 3, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 12, + 9, + 13, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 12, + 13, + 13, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 12, + 2, + 13, + 3 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [13, 0, 8], + "to": [14, 8, 12], + "faces": { + "north": { + "uv": [ + 2, + 8, + 3, + 16 + ], + "texture": "#1", + "tintindex": 0 + }, + "east": { + "uv": [ + 4, + 8, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 13, + 8, + 14, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 13, + 8, + 14, + 12 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 13, + 4, + 14, + 8 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [13, 1, 12], + "to": [14, 7, 13], + "faces": { + "east": { + "uv": [ + 3, + 9, + 4, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 13, + 9, + 14, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 13, + 12, + 14, + 13 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 13, + 3, + 14, + 4 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [8, 0, 14], + "to": [10, 8, 15], + "faces": { + "east": { + "uv": [ + 1, + 8, + 2, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 8, + 8, + 10, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 8, + 14, + 10, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 8, + 1, + 10, + 2 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [10, 1, 14], + "to": [12, 7, 15], + "faces": { + "east": { + "uv": [ + 1, + 9, + 2, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 10, + 9, + 12, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 10, + 14, + 12, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 10, + 1, + 12, + 2 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [12, 2, 14], + "to": [13, 6, 15], + "faces": { + "east": { + "uv": [ + 1, + 10, + 2, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 12, + 10, + 13, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 12, + 14, + 13, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 12, + 1, + 13, + 2 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [14, 0, 8], + "to": [15, 8, 10], + "faces": { + "north": { + "uv": [ + 1, + 8, + 2, + 16 + ], + "texture": "#1", + "tintindex": 0 + }, + "east": { + "uv": [ + 6, + 8, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 14, + 8, + 15, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 14, + 8, + 15, + 10 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 14, + 6, + 15, + 8 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [14, 1, 10], + "to": [15, 7, 12], + "faces": { + "east": { + "uv": [ + 4, + 9, + 6, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 14, + 9, + 15, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 14, + 10, + 15, + 12 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 14, + 4, + 15, + 6 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [14, 2, 12], + "to": [15, 6, 13], + "faces": { + "east": { + "uv": [ + 3, + 10, + 4, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 14, + 10, + 15, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 14, + 12, + 15, + 13 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 14, + 3, + 15, + 4 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [8, 1, 15], + "to": [10, 7, 16], + "faces": { + "east": { + "uv": [ + 0, + 9, + 1, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 8, + 9, + 10, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 8, + 15, + 10, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 8, + 0, + 10, + 1 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [10, 2, 15], + "to": [11, 6, 16], + "faces": { + "east": { + "uv": [ + 0, + 10, + 1, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 10, + 10, + 11, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 10, + 15, + 11, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 10, + 0, + 11, + 1 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [15, 1, 8], + "to": [16, 7, 10], + "faces": { + "north": { + "uv": [ + 0, + 9, + 1, + 15 + ], + "texture": "#1", + "tintindex": 0 + }, + "east": { + "uv": [ + 6, + 9, + 8, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 15, + 9, + 16, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 15, + 8, + 16, + 10 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 15, + 6, + 16, + 8 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [15, 2, 10], + "to": [16, 6, 11], + "faces": { + "east": { + "uv": [ + 5, + 10, + 6, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 15, + 10, + 16, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 15, + 10, + 16, + 11 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 15, + 5, + 16, + 6 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "corner", + "from": [13, 2, 13], + "to": [14, 6, 14], + "faces": { + "east": { + "uv": [ + 2, + 10, + 3, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 13, + 10, + 14, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 13, + 13, + 14, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 13, + 2, + 14, + 3 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "middle", + "from": [3, 0, 8], + "to": [8, 8, 13], + "faces": { + "south": { + "uv": [ + 3, + 8, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 8, + 8, + 13, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 3, + 8, + 8, + 13 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 3, + 3, + 8, + 8 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [2, 0, 8], + "to": [3, 8, 12], + "faces": { + "south": { + "uv": [ + 2, + 8, + 3, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 8, + 8, + 12, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 2, + 8, + 3, + 12 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 2, + 4, + 3, + 8 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [2, 1, 12], + "to": [3, 7, 13], + "faces": { + "south": { + "uv": [ + 2, + 9, + 3, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 12, + 9, + 13, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 2, + 12, + 3, + 13 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 2, + 3, + 3, + 4 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [4, 0, 13], + "to": [8, 8, 14], + "faces": { + "south": { + "uv": [ + 4, + 8, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 13, + 8, + 14, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 4, + 13, + 8, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 4, + 2, + 8, + 3 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [3, 1, 13], + "to": [4, 7, 14], + "faces": { + "south": { + "uv": [ + 3, + 9, + 4, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 13, + 9, + 14, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 3, + 13, + 4, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 3, + 2, + 4, + 3 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [1, 0, 8], + "to": [2, 8, 10], + "faces": { + "south": { + "uv": [ + 1, + 8, + 2, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 8, + 8, + 10, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 1, + 8, + 2, + 10 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 1, + 6, + 2, + 8 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [1, 1, 10], + "to": [2, 7, 12], + "faces": { + "south": { + "uv": [ + 1, + 9, + 2, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 10, + 9, + 12, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 1, + 10, + 2, + 12 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 1, + 4, + 2, + 6 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [1, 2, 12], + "to": [2, 6, 13], + "faces": { + "south": { + "uv": [ + 1, + 10, + 2, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 12, + 10, + 13, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 1, + 12, + 2, + 13 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 1, + 3, + 2, + 4 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [6, 0, 14], + "to": [8, 8, 15], + "faces": { + "south": { + "uv": [ + 6, + 8, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 14, + 8, + 15, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 6, + 14, + 8, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 6, + 1, + 8, + 2 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [4, 1, 14], + "to": [6, 7, 15], + "faces": { + "south": { + "uv": [ + 4, + 9, + 6, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 14, + 9, + 15, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 4, + 14, + 6, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 4, + 1, + 6, + 2 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [3, 2, 14], + "to": [4, 6, 15], + "faces": { + "south": { + "uv": [ + 3, + 10, + 4, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 14, + 10, + 15, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 3, + 14, + 4, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 3, + 1, + 4, + 2 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [0, 1, 8], + "to": [1, 7, 10], + "faces": { + "south": { + "uv": [ + 0, + 9, + 1, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 8, + 9, + 10, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 0, + 8, + 1, + 10 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 0, + 6, + 1, + 8 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [0, 2, 10], + "to": [1, 6, 11], + "faces": { + "south": { + "uv": [ + 0, + 10, + 1, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 10, + 10, + 11, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 0, + 10, + 1, + 11 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 0, + 5, + 1, + 6 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [6, 1, 15], + "to": [8, 7, 16], + "faces": { + "south": { + "uv": [ + 6, + 9, + 8, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 15, + 9, + 16, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 6, + 15, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 6, + 0, + 8, + 1 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [5, 2, 15], + "to": [6, 6, 16], + "faces": { + "south": { + "uv": [ + 5, + 10, + 6, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 15, + 10, + 16, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 5, + 15, + 6, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 5, + 0, + 6, + 1 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "corner", + "from": [2, 2, 13], + "to": [3, 6, 14], + "faces": { + "south": { + "uv": [ + 2, + 10, + 3, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 13, + 10, + 14, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 2, + 13, + 3, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 2, + 2, + 3, + 3 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "middle", + "from": [3, 0, 3], + "to": [8, 8, 8], + "faces": { + "north": { + "uv": [ + 8, + 8, + 13, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "east": { + "uv": [ + 8, + 8, + 13, + 16 + ], + "texture": "#1", + "tintindex": 0 + }, + "west": { + "uv": [ + 3, + 8, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 3, + 3, + 8, + 8 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 3, + 8, + 8, + 13 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [4, 0, 2], + "to": [8, 8, 3], + "faces": { + "north": { + "uv": [ + 8, + 8, + 12, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "east": { + "uv": [ + 13, + 8, + 14, + 16 + ], + "texture": "#1", + "tintindex": 0 + }, + "west": { + "uv": [ + 2, + 8, + 3, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 4, + 2, + 8, + 3 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 4, + 13, + 8, + 14 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [3, 1, 2], + "to": [4, 7, 3], + "faces": { + "north": { + "uv": [ + 12, + 9, + 13, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 2, + 9, + 3, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 3, + 2, + 4, + 3 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 3, + 13, + 4, + 14 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [2, 0, 4], + "to": [3, 8, 8], + "faces": { + "north": { + "uv": [ + 13, + 8, + 14, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 4, + 8, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 2, + 4, + 3, + 8 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 2, + 8, + 3, + 12 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [2, 1, 3], + "to": [3, 7, 4], + "faces": { + "north": { + "uv": [ + 13, + 9, + 14, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 3, + 9, + 4, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 2, + 3, + 3, + 4 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 2, + 12, + 3, + 13 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [6, 0, 1], + "to": [8, 8, 2], + "faces": { + "north": { + "uv": [ + 8, + 8, + 10, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "east": { + "uv": [ + 14, + 8, + 15, + 16 + ], + "texture": "#1", + "tintindex": 0 + }, + "west": { + "uv": [ + 1, + 8, + 2, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 6, + 1, + 8, + 2 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 6, + 14, + 8, + 15 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [4, 1, 1], + "to": [6, 7, 2], + "faces": { + "north": { + "uv": [ + 10, + 9, + 12, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 1, + 9, + 2, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 4, + 1, + 6, + 2 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 4, + 14, + 6, + 15 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [3, 2, 1], + "to": [4, 6, 2], + "faces": { + "north": { + "uv": [ + 12, + 10, + 13, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 1, + 10, + 2, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 3, + 1, + 4, + 2 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 3, + 14, + 4, + 15 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [1, 0, 6], + "to": [2, 8, 8], + "faces": { + "north": { + "uv": [ + 14, + 8, + 15, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 6, + 8, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 1, + 6, + 2, + 8 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 1, + 8, + 2, + 10 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [1, 1, 4], + "to": [2, 7, 6], + "faces": { + "north": { + "uv": [ + 14, + 9, + 15, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 4, + 9, + 6, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 1, + 4, + 2, + 6 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 1, + 10, + 2, + 12 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [1, 2, 3], + "to": [2, 6, 4], + "faces": { + "north": { + "uv": [ + 14, + 10, + 15, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 3, + 10, + 4, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 1, + 3, + 2, + 4 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 1, + 12, + 2, + 13 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [6, 1, 0], + "to": [8, 7, 1], + "faces": { + "north": { + "uv": [ + 8, + 9, + 10, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "east": { + "uv": [ + 15, + 9, + 16, + 15 + ], + "texture": "#1", + "tintindex": 0 + }, + "west": { + "uv": [ + 0, + 9, + 1, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 6, + 0, + 8, + 1 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 6, + 15, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [5, 2, 0], + "to": [6, 6, 1], + "faces": { + "north": { + "uv": [ + 10, + 10, + 11, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 0, + 10, + 1, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 5, + 0, + 6, + 1 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 5, + 15, + 6, + 16 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [0, 1, 6], + "to": [1, 7, 8], + "faces": { + "north": { + "uv": [ + 15, + 9, + 16, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 6, + 9, + 8, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 0, + 6, + 1, + 8 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 0, + 8, + 1, + 10 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [0, 2, 5], + "to": [1, 6, 6], + "faces": { + "north": { + "uv": [ + 15, + 10, + 16, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 5, + 10, + 6, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 0, + 5, + 1, + 6 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 0, + 10, + 1, + 11 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "corner", + "from": [2, 2, 2], + "to": [3, 6, 3], + "faces": { + "north": { + "uv": [ + 13, + 10, + 14, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 2, + 10, + 3, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 2, + 2, + 3, + 3 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 2, + 13, + 3, + 14 + ], + "texture": "#0", + "tintindex": 0 + } + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "thirdperson_lefthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson_righthand": { + "rotation": [0, 45, 0], + "scale": [0.4, 0.4, 0.4] + }, + "firstperson_lefthand": { + "rotation": [0, 225, 0], + "scale": [0.4, 0.4, 0.4] + }, + "ground": { + "translation": [0, 3, 0], + "scale": [0.25, 0.25, 0.25] + }, + "gui": { + "rotation": [30, 225, 0], + "scale": [0.625, 0.625, 0.625] + }, + "fixed": { + "scale": [0.5, 0.5, 0.5] + } + }, + "groups": [ + { + "name": "slice_1", + "children": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15] + }, + { + "name": "slice_2", + "children": [16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31] + }, + { + "name": "slice_3", + "children": [32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/models/block/cheese_wheel/cheese_slab_slices_bottom_4.json b/src/main/resources/assets/growthcraft_milk/models/block/cheese_wheel/cheese_slab_slices_bottom_4.json new file mode 100644 index 0000000..060f105 --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/models/block/cheese_wheel/cheese_slab_slices_bottom_4.json @@ -0,0 +1,3066 @@ +{ + "textures": { + "0": "growthcraft_milk:block/cheese_slab/cheese_base", + "missing": "growthcraft:block/missing", + "particle": "growthcraft_milk:block/cheese_slab/cheese_base" + }, + "elements": [ + { + "name": "middle", + "from": [8, 0, 8], + "to": [13, 8, 13], + "faces": { + "east": { + "uv": [ + 3, + 8, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 8, + 8, + 13, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 8, + 8, + 13, + 13 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 8, + 3, + 13, + 8 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [8, 0, 13], + "to": [12, 8, 14], + "faces": { + "east": { + "uv": [ + 2, + 8, + 3, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 8, + 8, + 12, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 8, + 13, + 12, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 8, + 2, + 12, + 3 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [12, 1, 13], + "to": [13, 7, 14], + "faces": { + "east": { + "uv": [ + 2, + 9, + 3, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 12, + 9, + 13, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 12, + 13, + 13, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 12, + 2, + 13, + 3 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [13, 0, 8], + "to": [14, 8, 12], + "faces": { + "east": { + "uv": [ + 4, + 8, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 13, + 8, + 14, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 13, + 8, + 14, + 12 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 13, + 4, + 14, + 8 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [13, 1, 12], + "to": [14, 7, 13], + "faces": { + "east": { + "uv": [ + 3, + 9, + 4, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 13, + 9, + 14, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 13, + 12, + 14, + 13 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 13, + 3, + 14, + 4 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [8, 0, 14], + "to": [10, 8, 15], + "faces": { + "east": { + "uv": [ + 1, + 8, + 2, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 8, + 8, + 10, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 8, + 14, + 10, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 8, + 1, + 10, + 2 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [10, 1, 14], + "to": [12, 7, 15], + "faces": { + "east": { + "uv": [ + 1, + 9, + 2, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 10, + 9, + 12, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 10, + 14, + 12, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 10, + 1, + 12, + 2 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [12, 2, 14], + "to": [13, 6, 15], + "faces": { + "east": { + "uv": [ + 1, + 10, + 2, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 12, + 10, + 13, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 12, + 14, + 13, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 12, + 1, + 13, + 2 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [14, 0, 8], + "to": [15, 8, 10], + "faces": { + "east": { + "uv": [ + 6, + 8, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 14, + 8, + 15, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 14, + 8, + 15, + 10 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 14, + 6, + 15, + 8 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [14, 1, 10], + "to": [15, 7, 12], + "faces": { + "east": { + "uv": [ + 4, + 9, + 6, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 14, + 9, + 15, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 14, + 10, + 15, + 12 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 14, + 4, + 15, + 6 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [14, 2, 12], + "to": [15, 6, 13], + "faces": { + "east": { + "uv": [ + 3, + 10, + 4, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 14, + 10, + 15, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 14, + 12, + 15, + 13 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 14, + 3, + 15, + 4 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [8, 1, 15], + "to": [10, 7, 16], + "faces": { + "east": { + "uv": [ + 0, + 9, + 1, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 8, + 9, + 10, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 8, + 15, + 10, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 8, + 0, + 10, + 1 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [10, 2, 15], + "to": [11, 6, 16], + "faces": { + "east": { + "uv": [ + 0, + 10, + 1, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 10, + 10, + 11, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 10, + 15, + 11, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 10, + 0, + 11, + 1 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [15, 1, 8], + "to": [16, 7, 10], + "faces": { + "east": { + "uv": [ + 6, + 9, + 8, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 15, + 9, + 16, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 15, + 8, + 16, + 10 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 15, + 6, + 16, + 8 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [15, 2, 10], + "to": [16, 6, 11], + "faces": { + "east": { + "uv": [ + 5, + 10, + 6, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 15, + 10, + 16, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 15, + 10, + 16, + 11 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 15, + 5, + 16, + 6 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "corner", + "from": [13, 2, 13], + "to": [14, 6, 14], + "faces": { + "east": { + "uv": [ + 2, + 10, + 3, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 13, + 10, + 14, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 13, + 13, + 14, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 13, + 2, + 14, + 3 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "middle", + "from": [3, 0, 8], + "to": [8, 8, 13], + "faces": { + "south": { + "uv": [ + 3, + 8, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 8, + 8, + 13, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 3, + 8, + 8, + 13 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 3, + 3, + 8, + 8 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [2, 0, 8], + "to": [3, 8, 12], + "faces": { + "south": { + "uv": [ + 2, + 8, + 3, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 8, + 8, + 12, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 2, + 8, + 3, + 12 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 2, + 4, + 3, + 8 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [2, 1, 12], + "to": [3, 7, 13], + "faces": { + "south": { + "uv": [ + 2, + 9, + 3, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 12, + 9, + 13, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 2, + 12, + 3, + 13 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 2, + 3, + 3, + 4 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [4, 0, 13], + "to": [8, 8, 14], + "faces": { + "south": { + "uv": [ + 4, + 8, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 13, + 8, + 14, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 4, + 13, + 8, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 4, + 2, + 8, + 3 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [3, 1, 13], + "to": [4, 7, 14], + "faces": { + "south": { + "uv": [ + 3, + 9, + 4, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 13, + 9, + 14, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 3, + 13, + 4, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 3, + 2, + 4, + 3 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [1, 0, 8], + "to": [2, 8, 10], + "faces": { + "south": { + "uv": [ + 1, + 8, + 2, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 8, + 8, + 10, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 1, + 8, + 2, + 10 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 1, + 6, + 2, + 8 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [1, 1, 10], + "to": [2, 7, 12], + "faces": { + "south": { + "uv": [ + 1, + 9, + 2, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 10, + 9, + 12, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 1, + 10, + 2, + 12 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 1, + 4, + 2, + 6 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [1, 2, 12], + "to": [2, 6, 13], + "faces": { + "south": { + "uv": [ + 1, + 10, + 2, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 12, + 10, + 13, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 1, + 12, + 2, + 13 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 1, + 3, + 2, + 4 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [6, 0, 14], + "to": [8, 8, 15], + "faces": { + "south": { + "uv": [ + 6, + 8, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 14, + 8, + 15, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 6, + 14, + 8, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 6, + 1, + 8, + 2 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [4, 1, 14], + "to": [6, 7, 15], + "faces": { + "south": { + "uv": [ + 4, + 9, + 6, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 14, + 9, + 15, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 4, + 14, + 6, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 4, + 1, + 6, + 2 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [3, 2, 14], + "to": [4, 6, 15], + "faces": { + "south": { + "uv": [ + 3, + 10, + 4, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 14, + 10, + 15, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 3, + 14, + 4, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 3, + 1, + 4, + 2 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [0, 1, 8], + "to": [1, 7, 10], + "faces": { + "south": { + "uv": [ + 0, + 9, + 1, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 8, + 9, + 10, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 0, + 8, + 1, + 10 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 0, + 6, + 1, + 8 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [0, 2, 10], + "to": [1, 6, 11], + "faces": { + "south": { + "uv": [ + 0, + 10, + 1, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 10, + 10, + 11, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 0, + 10, + 1, + 11 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 0, + 5, + 1, + 6 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [6, 1, 15], + "to": [8, 7, 16], + "faces": { + "south": { + "uv": [ + 6, + 9, + 8, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 15, + 9, + 16, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 6, + 15, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 6, + 0, + 8, + 1 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [5, 2, 15], + "to": [6, 6, 16], + "faces": { + "south": { + "uv": [ + 5, + 10, + 6, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 15, + 10, + 16, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 5, + 15, + 6, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 5, + 0, + 6, + 1 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "corner", + "from": [2, 2, 13], + "to": [3, 6, 14], + "faces": { + "south": { + "uv": [ + 2, + 10, + 3, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 13, + 10, + 14, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 2, + 13, + 3, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 2, + 2, + 3, + 3 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "middle", + "from": [3, 0, 3], + "to": [8, 8, 8], + "faces": { + "north": { + "uv": [ + 8, + 8, + 13, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 3, + 8, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 3, + 3, + 8, + 8 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 3, + 8, + 8, + 13 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [4, 0, 2], + "to": [8, 8, 3], + "faces": { + "north": { + "uv": [ + 8, + 8, + 12, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 2, + 8, + 3, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 4, + 2, + 8, + 3 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 4, + 13, + 8, + 14 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [3, 1, 2], + "to": [4, 7, 3], + "faces": { + "north": { + "uv": [ + 12, + 9, + 13, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 2, + 9, + 3, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 3, + 2, + 4, + 3 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 3, + 13, + 4, + 14 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [2, 0, 4], + "to": [3, 8, 8], + "faces": { + "north": { + "uv": [ + 13, + 8, + 14, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 4, + 8, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 2, + 4, + 3, + 8 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 2, + 8, + 3, + 12 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [2, 1, 3], + "to": [3, 7, 4], + "faces": { + "north": { + "uv": [ + 13, + 9, + 14, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 3, + 9, + 4, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 2, + 3, + 3, + 4 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 2, + 12, + 3, + 13 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [6, 0, 1], + "to": [8, 8, 2], + "faces": { + "north": { + "uv": [ + 8, + 8, + 10, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 1, + 8, + 2, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 6, + 1, + 8, + 2 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 6, + 14, + 8, + 15 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [4, 1, 1], + "to": [6, 7, 2], + "faces": { + "north": { + "uv": [ + 10, + 9, + 12, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 1, + 9, + 2, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 4, + 1, + 6, + 2 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 4, + 14, + 6, + 15 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [3, 2, 1], + "to": [4, 6, 2], + "faces": { + "north": { + "uv": [ + 12, + 10, + 13, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 1, + 10, + 2, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 3, + 1, + 4, + 2 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 3, + 14, + 4, + 15 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [1, 0, 6], + "to": [2, 8, 8], + "faces": { + "north": { + "uv": [ + 14, + 8, + 15, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 6, + 8, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 1, + 6, + 2, + 8 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 1, + 8, + 2, + 10 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [1, 1, 4], + "to": [2, 7, 6], + "faces": { + "north": { + "uv": [ + 14, + 9, + 15, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 4, + 9, + 6, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 1, + 4, + 2, + 6 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 1, + 10, + 2, + 12 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [1, 2, 3], + "to": [2, 6, 4], + "faces": { + "north": { + "uv": [ + 14, + 10, + 15, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 3, + 10, + 4, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 1, + 3, + 2, + 4 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 1, + 12, + 2, + 13 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [6, 1, 0], + "to": [8, 7, 1], + "faces": { + "north": { + "uv": [ + 8, + 9, + 10, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 0, + 9, + 1, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 6, + 0, + 8, + 1 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 6, + 15, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [5, 2, 0], + "to": [6, 6, 1], + "faces": { + "north": { + "uv": [ + 10, + 10, + 11, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 0, + 10, + 1, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 5, + 0, + 6, + 1 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 5, + 15, + 6, + 16 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [0, 1, 6], + "to": [1, 7, 8], + "faces": { + "north": { + "uv": [ + 15, + 9, + 16, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 6, + 9, + 8, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 0, + 6, + 1, + 8 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 0, + 8, + 1, + 10 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [0, 2, 5], + "to": [1, 6, 6], + "faces": { + "north": { + "uv": [ + 15, + 10, + 16, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 5, + 10, + 6, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 0, + 5, + 1, + 6 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 0, + 10, + 1, + 11 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "corner", + "from": [2, 2, 2], + "to": [3, 6, 3], + "faces": { + "north": { + "uv": [ + 13, + 10, + 14, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 2, + 10, + 3, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 2, + 2, + 3, + 3 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 2, + 13, + 3, + 14 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "middle", + "from": [8, 0, 3], + "to": [13, 8, 8], + "faces": { + "north": { + "uv": [ + 3, + 8, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "east": { + "uv": [ + 8, + 8, + 13, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 8, + 3, + 13, + 8 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 8, + 8, + 13, + 13 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [13, 0, 4], + "to": [14, 8, 8], + "faces": { + "north": { + "uv": [ + 2, + 8, + 3, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "east": { + "uv": [ + 8, + 8, + 12, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 13, + 4, + 14, + 8 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 13, + 8, + 14, + 12 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [13, 1, 3], + "to": [14, 7, 4], + "faces": { + "north": { + "uv": [ + 2, + 9, + 3, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "east": { + "uv": [ + 12, + 9, + 13, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 13, + 3, + 14, + 4 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 13, + 12, + 14, + 13 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [8, 0, 2], + "to": [12, 8, 3], + "faces": { + "north": { + "uv": [ + 4, + 8, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "east": { + "uv": [ + 13, + 8, + 14, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 8, + 2, + 12, + 3 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 8, + 13, + 12, + 14 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [12, 1, 2], + "to": [13, 7, 3], + "faces": { + "north": { + "uv": [ + 3, + 9, + 4, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "east": { + "uv": [ + 13, + 9, + 14, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 12, + 2, + 13, + 3 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 12, + 13, + 13, + 14 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [14, 0, 6], + "to": [15, 8, 8], + "faces": { + "north": { + "uv": [ + 1, + 8, + 2, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "east": { + "uv": [ + 8, + 8, + 10, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 14, + 6, + 15, + 8 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 14, + 8, + 15, + 10 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [14, 1, 4], + "to": [15, 7, 6], + "faces": { + "north": { + "uv": [ + 1, + 9, + 2, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "east": { + "uv": [ + 10, + 9, + 12, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 14, + 4, + 15, + 6 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 14, + 10, + 15, + 12 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [14, 2, 3], + "to": [15, 6, 4], + "faces": { + "north": { + "uv": [ + 1, + 10, + 2, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "east": { + "uv": [ + 12, + 10, + 13, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 14, + 3, + 15, + 4 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 14, + 12, + 15, + 13 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [8, 0, 1], + "to": [10, 8, 2], + "faces": { + "north": { + "uv": [ + 6, + 8, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "east": { + "uv": [ + 14, + 8, + 15, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 8, + 1, + 10, + 2 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 8, + 14, + 10, + 15 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [10, 1, 1], + "to": [12, 7, 2], + "faces": { + "north": { + "uv": [ + 4, + 9, + 6, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "east": { + "uv": [ + 14, + 9, + 15, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 10, + 1, + 12, + 2 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 10, + 14, + 12, + 15 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [12, 2, 1], + "to": [13, 6, 2], + "faces": { + "north": { + "uv": [ + 3, + 10, + 4, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "east": { + "uv": [ + 14, + 10, + 15, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 12, + 1, + 13, + 2 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 12, + 14, + 13, + 15 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [15, 1, 6], + "to": [16, 7, 8], + "faces": { + "north": { + "uv": [ + 0, + 9, + 1, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "east": { + "uv": [ + 8, + 9, + 10, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 15, + 6, + 16, + 8 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 15, + 8, + 16, + 10 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [15, 2, 5], + "to": [16, 6, 6], + "faces": { + "north": { + "uv": [ + 0, + 10, + 1, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "east": { + "uv": [ + 10, + 10, + 11, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 15, + 5, + 16, + 6 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 15, + 10, + 16, + 11 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [8, 1, 0], + "to": [10, 7, 1], + "faces": { + "north": { + "uv": [ + 6, + 9, + 8, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "east": { + "uv": [ + 15, + 9, + 16, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 8, + 0, + 10, + 1 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 8, + 15, + 10, + 16 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [10, 2, 0], + "to": [11, 6, 1], + "faces": { + "north": { + "uv": [ + 5, + 10, + 6, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "east": { + "uv": [ + 15, + 10, + 16, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 10, + 0, + 11, + 1 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 10, + 15, + 11, + 16 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "corner", + "from": [13, 2, 2], + "to": [14, 6, 3], + "faces": { + "north": { + "uv": [ + 2, + 10, + 3, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "east": { + "uv": [ + 13, + 10, + 14, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 13, + 2, + 14, + 3 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 13, + 13, + 14, + 14 + ], + "texture": "#0", + "tintindex": 0 + } + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "thirdperson_lefthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson_righthand": { + "rotation": [0, 45, 0], + "scale": [0.4, 0.4, 0.4] + }, + "firstperson_lefthand": { + "rotation": [0, 225, 0], + "scale": [0.4, 0.4, 0.4] + }, + "ground": { + "translation": [0, 3, 0], + "scale": [0.25, 0.25, 0.25] + }, + "gui": { + "rotation": [30, 225, 0], + "scale": [0.625, 0.625, 0.625] + }, + "fixed": { + "scale": [0.5, 0.5, 0.5] + } + }, + "groups": [ + { + "name": "slice_1", + "children": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15] + }, + { + "name": "slice_2", + "children": [16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31] + }, + { + "name": "slice_3", + "children": [32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47] + }, + { + "name": "slice_4", + "children": [48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/models/block/cheese_wheel/cheese_slab_slices_top_1.json b/src/main/resources/assets/growthcraft_milk/models/block/cheese_wheel/cheese_slab_slices_top_1.json new file mode 100644 index 0000000..1fcc832 --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/models/block/cheese_wheel/cheese_slab_slices_top_1.json @@ -0,0 +1,3809 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "0": "growthcraft_milk:block/cheese_slab/cheese_base", + "1": "growthcraft_milk:block/cheese_slab/cheese_side", + "missing": "growthcraft:block/missing", + "particle": "growthcraft_milk:block/cheese_slab/cheese_base" + }, + "elements": [ + { + "name": "middle", + "from": [8, 8, 8], + "to": [13, 16, 13], + "faces": { + "north": { + "uv": [ + 3, + 8, + 8, + 16 + ], + "texture": "#1", + "tintindex": 0 + }, + "east": { + "uv": [ + 3, + 8, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 8, + 8, + 13, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 8, + 8, + 13, + 16 + ], + "texture": "#1", + "tintindex": 0 + }, + "up": { + "uv": [ + 8, + 8, + 13, + 13 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [8, 8, 13], + "to": [12, 16, 14], + "faces": { + "east": { + "uv": [ + 2, + 8, + 3, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 8, + 8, + 12, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 13, + 8, + 14, + 16 + ], + "texture": "#1", + "tintindex": 0 + }, + "up": { + "uv": [ + 8, + 13, + 12, + 14 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [12, 9, 13], + "to": [13, 15, 14], + "faces": { + "east": { + "uv": [ + 2, + 9, + 3, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 12, + 9, + 13, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 12, + 13, + 13, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 12, + 2, + 13, + 3 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [13, 8, 8], + "to": [14, 16, 12], + "faces": { + "north": { + "uv": [ + 2, + 8, + 3, + 16 + ], + "texture": "#1", + "tintindex": 0 + }, + "east": { + "uv": [ + 4, + 8, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 13, + 8, + 14, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 13, + 8, + 14, + 12 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [13, 9, 12], + "to": [14, 15, 13], + "faces": { + "east": { + "uv": [ + 3, + 9, + 4, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 13, + 9, + 14, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 13, + 12, + 14, + 13 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 13, + 3, + 14, + 4 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [8, 8, 14], + "to": [10, 16, 15], + "faces": { + "east": { + "uv": [ + 1, + 8, + 2, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 8, + 8, + 10, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 14, + 8, + 15, + 16 + ], + "texture": "#1", + "tintindex": 0 + }, + "up": { + "uv": [ + 8, + 14, + 10, + 15 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [10, 9, 14], + "to": [12, 15, 15], + "faces": { + "east": { + "uv": [ + 1, + 9, + 2, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 10, + 9, + 12, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 10, + 14, + 12, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 10, + 1, + 12, + 2 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [12, 10, 14], + "to": [13, 14, 15], + "faces": { + "east": { + "uv": [ + 1, + 10, + 2, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 12, + 10, + 13, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 12, + 14, + 13, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 12, + 1, + 13, + 2 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [14, 8, 8], + "to": [15, 16, 10], + "faces": { + "north": { + "uv": [ + 1, + 8, + 2, + 16 + ], + "texture": "#1", + "tintindex": 0 + }, + "east": { + "uv": [ + 6, + 8, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 14, + 8, + 15, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 14, + 8, + 15, + 10 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [14, 9, 10], + "to": [15, 15, 12], + "faces": { + "east": { + "uv": [ + 4, + 9, + 6, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 14, + 9, + 15, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 14, + 10, + 15, + 12 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 14, + 4, + 15, + 6 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [14, 10, 12], + "to": [15, 14, 13], + "faces": { + "east": { + "uv": [ + 3, + 10, + 4, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 14, + 10, + 15, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 14, + 12, + 15, + 13 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 14, + 3, + 15, + 4 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [8, 9, 15], + "to": [10, 15, 16], + "faces": { + "east": { + "uv": [ + 0, + 9, + 1, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 8, + 9, + 10, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 15, + 9, + 16, + 15 + ], + "texture": "#1", + "tintindex": 0 + }, + "up": { + "uv": [ + 8, + 15, + 10, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 8, + 0, + 10, + 1 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [10, 10, 15], + "to": [11, 14, 16], + "faces": { + "east": { + "uv": [ + 0, + 10, + 1, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 10, + 10, + 11, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 10, + 15, + 11, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 10, + 0, + 11, + 1 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [15, 9, 8], + "to": [16, 15, 10], + "faces": { + "north": { + "uv": [ + 0, + 9, + 1, + 15 + ], + "texture": "#1", + "tintindex": 0 + }, + "east": { + "uv": [ + 6, + 9, + 8, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 15, + 9, + 16, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 15, + 8, + 16, + 10 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 15, + 6, + 16, + 8 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [15, 10, 10], + "to": [16, 14, 11], + "faces": { + "east": { + "uv": [ + 5, + 10, + 6, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 15, + 10, + 16, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 15, + 10, + 16, + 11 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 15, + 5, + 16, + 6 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "corner", + "from": [13, 10, 13], + "to": [14, 14, 14], + "faces": { + "east": { + "uv": [ + 2, + 10, + 3, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 13, + 10, + 14, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 13, + 13, + 14, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 13, + 2, + 14, + 3 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "middle", + "from": [8, 0, 8], + "to": [13, 8, 13], + "faces": { + "east": { + "uv": [ + 3, + 8, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 8, + 8, + 13, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 8, + 3, + 13, + 8 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [8, 0, 13], + "to": [12, 8, 14], + "faces": { + "east": { + "uv": [ + 2, + 8, + 3, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 8, + 8, + 12, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 8, + 2, + 12, + 3 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [12, 1, 13], + "to": [13, 7, 14], + "faces": { + "east": { + "uv": [ + 2, + 9, + 3, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 12, + 9, + 13, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 12, + 13, + 13, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 12, + 2, + 13, + 3 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [13, 0, 8], + "to": [14, 8, 12], + "faces": { + "east": { + "uv": [ + 4, + 8, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 13, + 8, + 14, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 13, + 4, + 14, + 8 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [13, 1, 12], + "to": [14, 7, 13], + "faces": { + "east": { + "uv": [ + 3, + 9, + 4, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 13, + 9, + 14, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 13, + 12, + 14, + 13 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 13, + 3, + 14, + 4 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [8, 0, 14], + "to": [10, 8, 15], + "faces": { + "east": { + "uv": [ + 1, + 8, + 2, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 8, + 8, + 10, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 8, + 1, + 10, + 2 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [10, 1, 14], + "to": [12, 7, 15], + "faces": { + "east": { + "uv": [ + 1, + 9, + 2, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 10, + 9, + 12, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 10, + 14, + 12, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 10, + 1, + 12, + 2 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [12, 2, 14], + "to": [13, 6, 15], + "faces": { + "east": { + "uv": [ + 1, + 10, + 2, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 12, + 10, + 13, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 12, + 14, + 13, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 12, + 1, + 13, + 2 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [14, 0, 8], + "to": [15, 8, 10], + "faces": { + "east": { + "uv": [ + 6, + 8, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 14, + 8, + 15, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 14, + 6, + 15, + 8 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [14, 1, 10], + "to": [15, 7, 12], + "faces": { + "east": { + "uv": [ + 4, + 9, + 6, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 14, + 9, + 15, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 14, + 10, + 15, + 12 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 14, + 4, + 15, + 6 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [14, 2, 12], + "to": [15, 6, 13], + "faces": { + "east": { + "uv": [ + 3, + 10, + 4, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 14, + 10, + 15, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 14, + 12, + 15, + 13 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 14, + 3, + 15, + 4 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [8, 1, 15], + "to": [10, 7, 16], + "faces": { + "east": { + "uv": [ + 0, + 9, + 1, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 8, + 9, + 10, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 8, + 15, + 10, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 8, + 0, + 10, + 1 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [10, 2, 15], + "to": [11, 6, 16], + "faces": { + "east": { + "uv": [ + 0, + 10, + 1, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 10, + 10, + 11, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 10, + 15, + 11, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 10, + 0, + 11, + 1 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [15, 1, 8], + "to": [16, 7, 10], + "faces": { + "east": { + "uv": [ + 6, + 9, + 8, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 15, + 9, + 16, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 15, + 8, + 16, + 10 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 15, + 6, + 16, + 8 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [15, 2, 10], + "to": [16, 6, 11], + "faces": { + "east": { + "uv": [ + 5, + 10, + 6, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 15, + 10, + 16, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 15, + 10, + 16, + 11 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 15, + 5, + 16, + 6 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "corner", + "from": [13, 2, 13], + "to": [14, 6, 14], + "faces": { + "east": { + "uv": [ + 2, + 10, + 3, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 13, + 10, + 14, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 13, + 13, + 14, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 13, + 2, + 14, + 3 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "middle", + "from": [3, 0, 8], + "to": [8, 8, 13], + "faces": { + "south": { + "uv": [ + 3, + 8, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 8, + 8, + 13, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 3, + 8, + 8, + 13 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 3, + 3, + 8, + 8 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [2, 0, 8], + "to": [3, 8, 12], + "faces": { + "south": { + "uv": [ + 2, + 8, + 3, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 8, + 8, + 12, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 2, + 8, + 3, + 12 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 2, + 4, + 3, + 8 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [2, 1, 12], + "to": [3, 7, 13], + "faces": { + "south": { + "uv": [ + 2, + 9, + 3, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 12, + 9, + 13, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 2, + 12, + 3, + 13 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 2, + 3, + 3, + 4 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [4, 0, 13], + "to": [8, 8, 14], + "faces": { + "south": { + "uv": [ + 4, + 8, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 13, + 8, + 14, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 4, + 13, + 8, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 4, + 2, + 8, + 3 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [3, 1, 13], + "to": [4, 7, 14], + "faces": { + "south": { + "uv": [ + 3, + 9, + 4, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 13, + 9, + 14, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 3, + 13, + 4, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 3, + 2, + 4, + 3 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [1, 0, 8], + "to": [2, 8, 10], + "faces": { + "south": { + "uv": [ + 1, + 8, + 2, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 8, + 8, + 10, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 1, + 8, + 2, + 10 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 1, + 6, + 2, + 8 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [1, 1, 10], + "to": [2, 7, 12], + "faces": { + "south": { + "uv": [ + 1, + 9, + 2, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 10, + 9, + 12, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 1, + 10, + 2, + 12 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 1, + 4, + 2, + 6 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [1, 2, 12], + "to": [2, 6, 13], + "faces": { + "south": { + "uv": [ + 1, + 10, + 2, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 12, + 10, + 13, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 1, + 12, + 2, + 13 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 1, + 3, + 2, + 4 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [6, 0, 14], + "to": [8, 8, 15], + "faces": { + "south": { + "uv": [ + 6, + 8, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 14, + 8, + 15, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 6, + 14, + 8, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 6, + 1, + 8, + 2 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [4, 1, 14], + "to": [6, 7, 15], + "faces": { + "south": { + "uv": [ + 4, + 9, + 6, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 14, + 9, + 15, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 4, + 14, + 6, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 4, + 1, + 6, + 2 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [3, 2, 14], + "to": [4, 6, 15], + "faces": { + "south": { + "uv": [ + 3, + 10, + 4, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 14, + 10, + 15, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 3, + 14, + 4, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 3, + 1, + 4, + 2 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [0, 1, 8], + "to": [1, 7, 10], + "faces": { + "south": { + "uv": [ + 0, + 9, + 1, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 8, + 9, + 10, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 0, + 8, + 1, + 10 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 0, + 6, + 1, + 8 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [0, 2, 10], + "to": [1, 6, 11], + "faces": { + "south": { + "uv": [ + 0, + 10, + 1, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 10, + 10, + 11, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 0, + 10, + 1, + 11 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 0, + 5, + 1, + 6 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [6, 1, 15], + "to": [8, 7, 16], + "faces": { + "south": { + "uv": [ + 6, + 9, + 8, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 15, + 9, + 16, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 6, + 15, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 6, + 0, + 8, + 1 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [5, 2, 15], + "to": [6, 6, 16], + "faces": { + "south": { + "uv": [ + 5, + 10, + 6, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 15, + 10, + 16, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 5, + 15, + 6, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 5, + 0, + 6, + 1 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "corner", + "from": [2, 2, 13], + "to": [3, 6, 14], + "faces": { + "south": { + "uv": [ + 2, + 10, + 3, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 13, + 10, + 14, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 2, + 13, + 3, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 2, + 2, + 3, + 3 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "middle", + "from": [3, 0, 3], + "to": [8, 8, 8], + "faces": { + "north": { + "uv": [ + 8, + 8, + 13, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 3, + 8, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 3, + 3, + 8, + 8 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 3, + 8, + 8, + 13 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [4, 0, 2], + "to": [8, 8, 3], + "faces": { + "north": { + "uv": [ + 8, + 8, + 12, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 2, + 8, + 3, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 4, + 2, + 8, + 3 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 4, + 13, + 8, + 14 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [3, 1, 2], + "to": [4, 7, 3], + "faces": { + "north": { + "uv": [ + 12, + 9, + 13, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 2, + 9, + 3, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 3, + 2, + 4, + 3 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 3, + 13, + 4, + 14 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [2, 0, 4], + "to": [3, 8, 8], + "faces": { + "north": { + "uv": [ + 13, + 8, + 14, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 4, + 8, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 2, + 4, + 3, + 8 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 2, + 8, + 3, + 12 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [2, 1, 3], + "to": [3, 7, 4], + "faces": { + "north": { + "uv": [ + 13, + 9, + 14, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 3, + 9, + 4, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 2, + 3, + 3, + 4 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 2, + 12, + 3, + 13 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [6, 0, 1], + "to": [8, 8, 2], + "faces": { + "north": { + "uv": [ + 8, + 8, + 10, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 1, + 8, + 2, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 6, + 1, + 8, + 2 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 6, + 14, + 8, + 15 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [4, 1, 1], + "to": [6, 7, 2], + "faces": { + "north": { + "uv": [ + 10, + 9, + 12, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 1, + 9, + 2, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 4, + 1, + 6, + 2 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 4, + 14, + 6, + 15 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [3, 2, 1], + "to": [4, 6, 2], + "faces": { + "north": { + "uv": [ + 12, + 10, + 13, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 1, + 10, + 2, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 3, + 1, + 4, + 2 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 3, + 14, + 4, + 15 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [1, 0, 6], + "to": [2, 8, 8], + "faces": { + "north": { + "uv": [ + 14, + 8, + 15, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 6, + 8, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 1, + 6, + 2, + 8 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 1, + 8, + 2, + 10 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [1, 1, 4], + "to": [2, 7, 6], + "faces": { + "north": { + "uv": [ + 14, + 9, + 15, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 4, + 9, + 6, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 1, + 4, + 2, + 6 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 1, + 10, + 2, + 12 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [1, 2, 3], + "to": [2, 6, 4], + "faces": { + "north": { + "uv": [ + 14, + 10, + 15, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 3, + 10, + 4, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 1, + 3, + 2, + 4 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 1, + 12, + 2, + 13 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [6, 1, 0], + "to": [8, 7, 1], + "faces": { + "north": { + "uv": [ + 8, + 9, + 10, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 0, + 9, + 1, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 6, + 0, + 8, + 1 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 6, + 15, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [5, 2, 0], + "to": [6, 6, 1], + "faces": { + "north": { + "uv": [ + 10, + 10, + 11, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 0, + 10, + 1, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 5, + 0, + 6, + 1 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 5, + 15, + 6, + 16 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [0, 1, 6], + "to": [1, 7, 8], + "faces": { + "north": { + "uv": [ + 15, + 9, + 16, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 6, + 9, + 8, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 0, + 6, + 1, + 8 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 0, + 8, + 1, + 10 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [0, 2, 5], + "to": [1, 6, 6], + "faces": { + "north": { + "uv": [ + 15, + 10, + 16, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 5, + 10, + 6, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 0, + 5, + 1, + 6 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 0, + 10, + 1, + 11 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "corner", + "from": [2, 2, 2], + "to": [3, 6, 3], + "faces": { + "north": { + "uv": [ + 13, + 10, + 14, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 2, + 10, + 3, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 2, + 2, + 3, + 3 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 2, + 13, + 3, + 14 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "middle", + "from": [8, 0, 3], + "to": [13, 8, 8], + "faces": { + "north": { + "uv": [ + 3, + 8, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "east": { + "uv": [ + 8, + 8, + 13, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 8, + 3, + 13, + 8 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 8, + 8, + 13, + 13 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [13, 0, 4], + "to": [14, 8, 8], + "faces": { + "north": { + "uv": [ + 2, + 8, + 3, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "east": { + "uv": [ + 8, + 8, + 12, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 13, + 4, + 14, + 8 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 13, + 8, + 14, + 12 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [13, 1, 3], + "to": [14, 7, 4], + "faces": { + "north": { + "uv": [ + 2, + 9, + 3, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "east": { + "uv": [ + 12, + 9, + 13, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 13, + 3, + 14, + 4 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 13, + 12, + 14, + 13 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [8, 0, 2], + "to": [12, 8, 3], + "faces": { + "north": { + "uv": [ + 4, + 8, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "east": { + "uv": [ + 13, + 8, + 14, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 8, + 2, + 12, + 3 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 8, + 13, + 12, + 14 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [12, 1, 2], + "to": [13, 7, 3], + "faces": { + "north": { + "uv": [ + 3, + 9, + 4, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "east": { + "uv": [ + 13, + 9, + 14, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 12, + 2, + 13, + 3 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 12, + 13, + 13, + 14 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [14, 0, 6], + "to": [15, 8, 8], + "faces": { + "north": { + "uv": [ + 1, + 8, + 2, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "east": { + "uv": [ + 8, + 8, + 10, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 14, + 6, + 15, + 8 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 14, + 8, + 15, + 10 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [14, 1, 4], + "to": [15, 7, 6], + "faces": { + "north": { + "uv": [ + 1, + 9, + 2, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "east": { + "uv": [ + 10, + 9, + 12, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 14, + 4, + 15, + 6 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 14, + 10, + 15, + 12 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [14, 2, 3], + "to": [15, 6, 4], + "faces": { + "north": { + "uv": [ + 1, + 10, + 2, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "east": { + "uv": [ + 12, + 10, + 13, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 14, + 3, + 15, + 4 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 14, + 12, + 15, + 13 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [8, 0, 1], + "to": [10, 8, 2], + "faces": { + "north": { + "uv": [ + 6, + 8, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "east": { + "uv": [ + 14, + 8, + 15, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 8, + 1, + 10, + 2 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 8, + 14, + 10, + 15 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [10, 1, 1], + "to": [12, 7, 2], + "faces": { + "north": { + "uv": [ + 4, + 9, + 6, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "east": { + "uv": [ + 14, + 9, + 15, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 10, + 1, + 12, + 2 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 10, + 14, + 12, + 15 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [12, 2, 1], + "to": [13, 6, 2], + "faces": { + "north": { + "uv": [ + 3, + 10, + 4, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "east": { + "uv": [ + 14, + 10, + 15, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 12, + 1, + 13, + 2 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 12, + 14, + 13, + 15 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [15, 1, 6], + "to": [16, 7, 8], + "faces": { + "north": { + "uv": [ + 0, + 9, + 1, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "east": { + "uv": [ + 8, + 9, + 10, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 15, + 6, + 16, + 8 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 15, + 8, + 16, + 10 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [15, 2, 5], + "to": [16, 6, 6], + "faces": { + "north": { + "uv": [ + 0, + 10, + 1, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "east": { + "uv": [ + 10, + 10, + 11, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 15, + 5, + 16, + 6 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 15, + 10, + 16, + 11 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [8, 1, 0], + "to": [10, 7, 1], + "faces": { + "north": { + "uv": [ + 6, + 9, + 8, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "east": { + "uv": [ + 15, + 9, + 16, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 8, + 0, + 10, + 1 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 8, + 15, + 10, + 16 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [10, 2, 0], + "to": [11, 6, 1], + "faces": { + "north": { + "uv": [ + 5, + 10, + 6, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "east": { + "uv": [ + 15, + 10, + 16, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 10, + 0, + 11, + 1 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 10, + 15, + 11, + 16 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "corner", + "from": [13, 2, 2], + "to": [14, 6, 3], + "faces": { + "north": { + "uv": [ + 2, + 10, + 3, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "east": { + "uv": [ + 13, + 10, + 14, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 13, + 2, + 14, + 3 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 13, + 13, + 14, + 14 + ], + "texture": "#0", + "tintindex": 0 + } + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "thirdperson_lefthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson_righthand": { + "rotation": [0, 45, 0], + "scale": [0.4, 0.4, 0.4] + }, + "firstperson_lefthand": { + "rotation": [0, 225, 0], + "scale": [0.4, 0.4, 0.4] + }, + "ground": { + "translation": [0, 3, 0], + "scale": [0.25, 0.25, 0.25] + }, + "gui": { + "rotation": [30, 225, 0], + "scale": [0.625, 0.625, 0.625] + }, + "fixed": { + "scale": [0.5, 0.5, 0.5] + } + }, + "groups": [ + { + "name": "group", + "children": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15] + }, + { + "name": "cheese_block_slices4", + "children": [ + { + "name": "slice_1", + "children": [16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31] + }, + { + "name": "slice_2", + "children": [32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47] + }, + { + "name": "slice_3", + "children": [48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63] + }, + { + "name": "slice_4", + "children": [64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/models/block/cheese_wheel/cheese_slab_slices_top_2.json b/src/main/resources/assets/growthcraft_milk/models/block/cheese_wheel/cheese_slab_slices_top_2.json new file mode 100644 index 0000000..d735ea2 --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/models/block/cheese_wheel/cheese_slab_slices_top_2.json @@ -0,0 +1,4465 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "0": "growthcraft_milk:block/cheese_slab/cheese_base", + "1": "growthcraft_milk:block/cheese_slab/cheese_side", + "missing": "growthcraft:block/missing", + "particle": "growthcraft_milk:block/cheese_slab/cheese_base" + }, + "elements": [ + { + "name": "middle", + "from": [8, 8, 8], + "to": [13, 16, 13], + "faces": { + "north": { + "uv": [ + 3, + 8, + 8, + 16 + ], + "texture": "#1", + "tintindex": 0 + }, + "east": { + "uv": [ + 3, + 8, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 8, + 8, + 13, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 8, + 8, + 13, + 13 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [8, 8, 13], + "to": [12, 16, 14], + "faces": { + "east": { + "uv": [ + 2, + 8, + 3, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 8, + 8, + 12, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 8, + 13, + 12, + 14 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [12, 9, 13], + "to": [13, 15, 14], + "faces": { + "east": { + "uv": [ + 2, + 9, + 3, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 12, + 9, + 13, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 12, + 13, + 13, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 12, + 2, + 13, + 3 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [13, 8, 8], + "to": [14, 16, 12], + "faces": { + "north": { + "uv": [ + 2, + 8, + 3, + 16 + ], + "texture": "#1", + "tintindex": 0 + }, + "east": { + "uv": [ + 4, + 8, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 13, + 8, + 14, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 13, + 8, + 14, + 12 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [13, 9, 12], + "to": [14, 15, 13], + "faces": { + "east": { + "uv": [ + 3, + 9, + 4, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 13, + 9, + 14, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 13, + 12, + 14, + 13 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 13, + 3, + 14, + 4 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [8, 8, 14], + "to": [10, 16, 15], + "faces": { + "east": { + "uv": [ + 1, + 8, + 2, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 8, + 8, + 10, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 8, + 14, + 10, + 15 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [10, 9, 14], + "to": [12, 15, 15], + "faces": { + "east": { + "uv": [ + 1, + 9, + 2, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 10, + 9, + 12, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 10, + 14, + 12, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 10, + 1, + 12, + 2 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [12, 10, 14], + "to": [13, 14, 15], + "faces": { + "east": { + "uv": [ + 1, + 10, + 2, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 12, + 10, + 13, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 12, + 14, + 13, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 12, + 1, + 13, + 2 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [14, 8, 8], + "to": [15, 16, 10], + "faces": { + "north": { + "uv": [ + 1, + 8, + 2, + 16 + ], + "texture": "#1", + "tintindex": 0 + }, + "east": { + "uv": [ + 6, + 8, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 14, + 8, + 15, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 14, + 8, + 15, + 10 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [14, 9, 10], + "to": [15, 15, 12], + "faces": { + "east": { + "uv": [ + 4, + 9, + 6, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 14, + 9, + 15, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 14, + 10, + 15, + 12 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 14, + 4, + 15, + 6 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [14, 10, 12], + "to": [15, 14, 13], + "faces": { + "east": { + "uv": [ + 3, + 10, + 4, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 14, + 10, + 15, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 14, + 12, + 15, + 13 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 14, + 3, + 15, + 4 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [8, 9, 15], + "to": [10, 15, 16], + "faces": { + "east": { + "uv": [ + 0, + 9, + 1, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 8, + 9, + 10, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 8, + 15, + 10, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 8, + 0, + 10, + 1 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [10, 10, 15], + "to": [11, 14, 16], + "faces": { + "east": { + "uv": [ + 0, + 10, + 1, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 10, + 10, + 11, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 10, + 15, + 11, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 10, + 0, + 11, + 1 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [15, 9, 8], + "to": [16, 15, 10], + "faces": { + "north": { + "uv": [ + 0, + 9, + 1, + 15 + ], + "texture": "#1", + "tintindex": 0 + }, + "east": { + "uv": [ + 6, + 9, + 8, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 15, + 9, + 16, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 15, + 8, + 16, + 10 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 15, + 6, + 16, + 8 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [15, 10, 10], + "to": [16, 14, 11], + "faces": { + "east": { + "uv": [ + 5, + 10, + 6, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 15, + 10, + 16, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 15, + 10, + 16, + 11 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 15, + 5, + 16, + 6 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "corner", + "from": [13, 10, 13], + "to": [14, 14, 14], + "faces": { + "east": { + "uv": [ + 2, + 10, + 3, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 13, + 10, + 14, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 13, + 13, + 14, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 13, + 2, + 14, + 3 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "middle", + "from": [3, 8, 8], + "to": [8, 16, 13], + "faces": { + "north": { + "uv": [ + 8, + 8, + 13, + 16 + ], + "texture": "#1", + "tintindex": 0 + }, + "south": { + "uv": [ + 3, + 8, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 8, + 8, + 13, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 3, + 8, + 8, + 13 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [2, 8, 8], + "to": [3, 16, 12], + "faces": { + "north": { + "uv": [ + 13, + 8, + 14, + 16 + ], + "texture": "#1", + "tintindex": 0 + }, + "south": { + "uv": [ + 2, + 8, + 3, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 8, + 8, + 12, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 2, + 8, + 3, + 12 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [2, 9, 12], + "to": [3, 15, 13], + "faces": { + "south": { + "uv": [ + 2, + 9, + 3, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 12, + 9, + 13, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 2, + 12, + 3, + 13 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 2, + 3, + 3, + 4 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [4, 8, 13], + "to": [8, 16, 14], + "faces": { + "south": { + "uv": [ + 4, + 8, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 13, + 8, + 14, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 4, + 13, + 8, + 14 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [3, 9, 13], + "to": [4, 15, 14], + "faces": { + "south": { + "uv": [ + 3, + 9, + 4, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 13, + 9, + 14, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 3, + 13, + 4, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 3, + 2, + 4, + 3 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [1, 8, 8], + "to": [2, 16, 10], + "faces": { + "north": { + "uv": [ + 14, + 8, + 15, + 16 + ], + "texture": "#1", + "tintindex": 0 + }, + "south": { + "uv": [ + 1, + 8, + 2, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 8, + 8, + 10, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 1, + 8, + 2, + 10 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [1, 9, 10], + "to": [2, 15, 12], + "faces": { + "south": { + "uv": [ + 1, + 9, + 2, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 10, + 9, + 12, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 1, + 10, + 2, + 12 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 1, + 4, + 2, + 6 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [1, 10, 12], + "to": [2, 14, 13], + "faces": { + "south": { + "uv": [ + 1, + 10, + 2, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 12, + 10, + 13, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 1, + 12, + 2, + 13 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 1, + 3, + 2, + 4 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [6, 8, 14], + "to": [8, 16, 15], + "faces": { + "south": { + "uv": [ + 6, + 8, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 14, + 8, + 15, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 6, + 14, + 8, + 15 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [4, 9, 14], + "to": [6, 15, 15], + "faces": { + "south": { + "uv": [ + 4, + 9, + 6, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 14, + 9, + 15, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 4, + 14, + 6, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 4, + 1, + 6, + 2 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [3, 10, 14], + "to": [4, 14, 15], + "faces": { + "south": { + "uv": [ + 3, + 10, + 4, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 14, + 10, + 15, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 3, + 14, + 4, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 3, + 1, + 4, + 2 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [0, 9, 8], + "to": [1, 15, 10], + "faces": { + "north": { + "uv": [ + 15, + 9, + 16, + 15 + ], + "texture": "#1", + "tintindex": 0 + }, + "south": { + "uv": [ + 0, + 9, + 1, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 8, + 9, + 10, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 0, + 8, + 1, + 10 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 0, + 6, + 1, + 8 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [0, 10, 10], + "to": [1, 14, 11], + "faces": { + "south": { + "uv": [ + 0, + 10, + 1, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 10, + 10, + 11, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 0, + 10, + 1, + 11 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 0, + 5, + 1, + 6 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [6, 9, 15], + "to": [8, 15, 16], + "faces": { + "south": { + "uv": [ + 6, + 9, + 8, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 15, + 9, + 16, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 6, + 15, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 6, + 0, + 8, + 1 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [5, 10, 15], + "to": [6, 14, 16], + "faces": { + "south": { + "uv": [ + 5, + 10, + 6, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 15, + 10, + 16, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 5, + 15, + 6, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 5, + 0, + 6, + 1 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "corner", + "from": [2, 10, 13], + "to": [3, 14, 14], + "faces": { + "south": { + "uv": [ + 2, + 10, + 3, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 13, + 10, + 14, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 2, + 13, + 3, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 2, + 2, + 3, + 3 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "middle", + "from": [8, 0, 8], + "to": [13, 8, 13], + "faces": { + "east": { + "uv": [ + 3, + 8, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 8, + 8, + 13, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 8, + 3, + 13, + 8 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [8, 0, 13], + "to": [12, 8, 14], + "faces": { + "east": { + "uv": [ + 2, + 8, + 3, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 8, + 8, + 12, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 8, + 2, + 12, + 3 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [12, 1, 13], + "to": [13, 7, 14], + "faces": { + "east": { + "uv": [ + 2, + 9, + 3, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 12, + 9, + 13, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 12, + 13, + 13, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 12, + 2, + 13, + 3 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [13, 0, 8], + "to": [14, 8, 12], + "faces": { + "east": { + "uv": [ + 4, + 8, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 13, + 8, + 14, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 13, + 4, + 14, + 8 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [13, 1, 12], + "to": [14, 7, 13], + "faces": { + "east": { + "uv": [ + 3, + 9, + 4, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 13, + 9, + 14, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 13, + 12, + 14, + 13 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 13, + 3, + 14, + 4 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [8, 0, 14], + "to": [10, 8, 15], + "faces": { + "east": { + "uv": [ + 1, + 8, + 2, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 8, + 8, + 10, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 8, + 1, + 10, + 2 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [10, 1, 14], + "to": [12, 7, 15], + "faces": { + "east": { + "uv": [ + 1, + 9, + 2, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 10, + 9, + 12, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 10, + 14, + 12, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 10, + 1, + 12, + 2 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [12, 2, 14], + "to": [13, 6, 15], + "faces": { + "east": { + "uv": [ + 1, + 10, + 2, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 12, + 10, + 13, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 12, + 14, + 13, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 12, + 1, + 13, + 2 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [14, 0, 8], + "to": [15, 8, 10], + "faces": { + "east": { + "uv": [ + 6, + 8, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 14, + 8, + 15, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 14, + 6, + 15, + 8 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [14, 1, 10], + "to": [15, 7, 12], + "faces": { + "east": { + "uv": [ + 4, + 9, + 6, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 14, + 9, + 15, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 14, + 10, + 15, + 12 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 14, + 4, + 15, + 6 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [14, 2, 12], + "to": [15, 6, 13], + "faces": { + "east": { + "uv": [ + 3, + 10, + 4, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 14, + 10, + 15, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 14, + 12, + 15, + 13 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 14, + 3, + 15, + 4 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [8, 1, 15], + "to": [10, 7, 16], + "faces": { + "east": { + "uv": [ + 0, + 9, + 1, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 8, + 9, + 10, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 8, + 15, + 10, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 8, + 0, + 10, + 1 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [10, 2, 15], + "to": [11, 6, 16], + "faces": { + "east": { + "uv": [ + 0, + 10, + 1, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 10, + 10, + 11, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 10, + 15, + 11, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 10, + 0, + 11, + 1 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [15, 1, 8], + "to": [16, 7, 10], + "faces": { + "east": { + "uv": [ + 6, + 9, + 8, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 15, + 9, + 16, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 15, + 8, + 16, + 10 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 15, + 6, + 16, + 8 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [15, 2, 10], + "to": [16, 6, 11], + "faces": { + "east": { + "uv": [ + 5, + 10, + 6, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 15, + 10, + 16, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 15, + 10, + 16, + 11 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 15, + 5, + 16, + 6 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "corner", + "from": [13, 2, 13], + "to": [14, 6, 14], + "faces": { + "east": { + "uv": [ + 2, + 10, + 3, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 13, + 10, + 14, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 13, + 13, + 14, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 13, + 2, + 14, + 3 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "middle", + "from": [3, 0, 8], + "to": [8, 8, 13], + "faces": { + "south": { + "uv": [ + 3, + 8, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 8, + 8, + 13, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 3, + 3, + 8, + 8 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [2, 0, 8], + "to": [3, 8, 12], + "faces": { + "south": { + "uv": [ + 2, + 8, + 3, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 8, + 8, + 12, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 2, + 4, + 3, + 8 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [2, 1, 12], + "to": [3, 7, 13], + "faces": { + "south": { + "uv": [ + 2, + 9, + 3, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 12, + 9, + 13, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 2, + 12, + 3, + 13 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 2, + 3, + 3, + 4 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [4, 0, 13], + "to": [8, 8, 14], + "faces": { + "south": { + "uv": [ + 4, + 8, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 13, + 8, + 14, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 4, + 2, + 8, + 3 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [3, 1, 13], + "to": [4, 7, 14], + "faces": { + "south": { + "uv": [ + 3, + 9, + 4, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 13, + 9, + 14, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 3, + 13, + 4, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 3, + 2, + 4, + 3 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [1, 0, 8], + "to": [2, 8, 10], + "faces": { + "south": { + "uv": [ + 1, + 8, + 2, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 8, + 8, + 10, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 1, + 6, + 2, + 8 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [1, 1, 10], + "to": [2, 7, 12], + "faces": { + "south": { + "uv": [ + 1, + 9, + 2, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 10, + 9, + 12, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 1, + 10, + 2, + 12 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 1, + 4, + 2, + 6 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [1, 2, 12], + "to": [2, 6, 13], + "faces": { + "south": { + "uv": [ + 1, + 10, + 2, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 12, + 10, + 13, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 1, + 12, + 2, + 13 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 1, + 3, + 2, + 4 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [6, 0, 14], + "to": [8, 8, 15], + "faces": { + "south": { + "uv": [ + 6, + 8, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 14, + 8, + 15, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 6, + 1, + 8, + 2 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [4, 1, 14], + "to": [6, 7, 15], + "faces": { + "south": { + "uv": [ + 4, + 9, + 6, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 14, + 9, + 15, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 4, + 14, + 6, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 4, + 1, + 6, + 2 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [3, 2, 14], + "to": [4, 6, 15], + "faces": { + "south": { + "uv": [ + 3, + 10, + 4, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 14, + 10, + 15, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 3, + 14, + 4, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 3, + 1, + 4, + 2 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [0, 1, 8], + "to": [1, 7, 10], + "faces": { + "south": { + "uv": [ + 0, + 9, + 1, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 8, + 9, + 10, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 0, + 8, + 1, + 10 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 0, + 6, + 1, + 8 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [0, 2, 10], + "to": [1, 6, 11], + "faces": { + "south": { + "uv": [ + 0, + 10, + 1, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 10, + 10, + 11, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 0, + 10, + 1, + 11 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 0, + 5, + 1, + 6 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [6, 1, 15], + "to": [8, 7, 16], + "faces": { + "south": { + "uv": [ + 6, + 9, + 8, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 15, + 9, + 16, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 6, + 15, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 6, + 0, + 8, + 1 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [5, 2, 15], + "to": [6, 6, 16], + "faces": { + "south": { + "uv": [ + 5, + 10, + 6, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 15, + 10, + 16, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 5, + 15, + 6, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 5, + 0, + 6, + 1 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "corner", + "from": [2, 2, 13], + "to": [3, 6, 14], + "faces": { + "south": { + "uv": [ + 2, + 10, + 3, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 13, + 10, + 14, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 2, + 13, + 3, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 2, + 2, + 3, + 3 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "middle", + "from": [3, 0, 3], + "to": [8, 8, 8], + "faces": { + "north": { + "uv": [ + 8, + 8, + 13, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 3, + 8, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 3, + 3, + 8, + 8 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 3, + 8, + 8, + 13 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [4, 0, 2], + "to": [8, 8, 3], + "faces": { + "north": { + "uv": [ + 8, + 8, + 12, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 2, + 8, + 3, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 4, + 2, + 8, + 3 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 4, + 13, + 8, + 14 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [3, 1, 2], + "to": [4, 7, 3], + "faces": { + "north": { + "uv": [ + 12, + 9, + 13, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 2, + 9, + 3, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 3, + 2, + 4, + 3 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 3, + 13, + 4, + 14 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [2, 0, 4], + "to": [3, 8, 8], + "faces": { + "north": { + "uv": [ + 13, + 8, + 14, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 4, + 8, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 2, + 4, + 3, + 8 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 2, + 8, + 3, + 12 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [2, 1, 3], + "to": [3, 7, 4], + "faces": { + "north": { + "uv": [ + 13, + 9, + 14, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 3, + 9, + 4, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 2, + 3, + 3, + 4 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 2, + 12, + 3, + 13 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [6, 0, 1], + "to": [8, 8, 2], + "faces": { + "north": { + "uv": [ + 8, + 8, + 10, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 1, + 8, + 2, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 6, + 1, + 8, + 2 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 6, + 14, + 8, + 15 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [4, 1, 1], + "to": [6, 7, 2], + "faces": { + "north": { + "uv": [ + 10, + 9, + 12, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 1, + 9, + 2, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 4, + 1, + 6, + 2 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 4, + 14, + 6, + 15 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [3, 2, 1], + "to": [4, 6, 2], + "faces": { + "north": { + "uv": [ + 12, + 10, + 13, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 1, + 10, + 2, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 3, + 1, + 4, + 2 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 3, + 14, + 4, + 15 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [1, 0, 6], + "to": [2, 8, 8], + "faces": { + "north": { + "uv": [ + 14, + 8, + 15, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 6, + 8, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 1, + 6, + 2, + 8 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 1, + 8, + 2, + 10 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [1, 1, 4], + "to": [2, 7, 6], + "faces": { + "north": { + "uv": [ + 14, + 9, + 15, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 4, + 9, + 6, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 1, + 4, + 2, + 6 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 1, + 10, + 2, + 12 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [1, 2, 3], + "to": [2, 6, 4], + "faces": { + "north": { + "uv": [ + 14, + 10, + 15, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 3, + 10, + 4, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 1, + 3, + 2, + 4 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 1, + 12, + 2, + 13 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [6, 1, 0], + "to": [8, 7, 1], + "faces": { + "north": { + "uv": [ + 8, + 9, + 10, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 0, + 9, + 1, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 6, + 0, + 8, + 1 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 6, + 15, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [5, 2, 0], + "to": [6, 6, 1], + "faces": { + "north": { + "uv": [ + 10, + 10, + 11, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 0, + 10, + 1, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 5, + 0, + 6, + 1 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 5, + 15, + 6, + 16 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [0, 1, 6], + "to": [1, 7, 8], + "faces": { + "north": { + "uv": [ + 15, + 9, + 16, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 6, + 9, + 8, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 0, + 6, + 1, + 8 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 0, + 8, + 1, + 10 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [0, 2, 5], + "to": [1, 6, 6], + "faces": { + "north": { + "uv": [ + 15, + 10, + 16, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 5, + 10, + 6, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 0, + 5, + 1, + 6 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 0, + 10, + 1, + 11 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "corner", + "from": [2, 2, 2], + "to": [3, 6, 3], + "faces": { + "north": { + "uv": [ + 13, + 10, + 14, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 2, + 10, + 3, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 2, + 2, + 3, + 3 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 2, + 13, + 3, + 14 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "middle", + "from": [8, 0, 3], + "to": [13, 8, 8], + "faces": { + "north": { + "uv": [ + 3, + 8, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "east": { + "uv": [ + 8, + 8, + 13, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 8, + 3, + 13, + 8 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 8, + 8, + 13, + 13 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [13, 0, 4], + "to": [14, 8, 8], + "faces": { + "north": { + "uv": [ + 2, + 8, + 3, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "east": { + "uv": [ + 8, + 8, + 12, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 13, + 4, + 14, + 8 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 13, + 8, + 14, + 12 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [13, 1, 3], + "to": [14, 7, 4], + "faces": { + "north": { + "uv": [ + 2, + 9, + 3, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "east": { + "uv": [ + 12, + 9, + 13, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 13, + 3, + 14, + 4 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 13, + 12, + 14, + 13 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [8, 0, 2], + "to": [12, 8, 3], + "faces": { + "north": { + "uv": [ + 4, + 8, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "east": { + "uv": [ + 13, + 8, + 14, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 8, + 2, + 12, + 3 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 8, + 13, + 12, + 14 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [12, 1, 2], + "to": [13, 7, 3], + "faces": { + "north": { + "uv": [ + 3, + 9, + 4, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "east": { + "uv": [ + 13, + 9, + 14, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 12, + 2, + 13, + 3 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 12, + 13, + 13, + 14 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [14, 0, 6], + "to": [15, 8, 8], + "faces": { + "north": { + "uv": [ + 1, + 8, + 2, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "east": { + "uv": [ + 8, + 8, + 10, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 14, + 6, + 15, + 8 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 14, + 8, + 15, + 10 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [14, 1, 4], + "to": [15, 7, 6], + "faces": { + "north": { + "uv": [ + 1, + 9, + 2, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "east": { + "uv": [ + 10, + 9, + 12, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 14, + 4, + 15, + 6 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 14, + 10, + 15, + 12 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [14, 2, 3], + "to": [15, 6, 4], + "faces": { + "north": { + "uv": [ + 1, + 10, + 2, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "east": { + "uv": [ + 12, + 10, + 13, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 14, + 3, + 15, + 4 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 14, + 12, + 15, + 13 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [8, 0, 1], + "to": [10, 8, 2], + "faces": { + "north": { + "uv": [ + 6, + 8, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "east": { + "uv": [ + 14, + 8, + 15, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 8, + 1, + 10, + 2 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 8, + 14, + 10, + 15 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [10, 1, 1], + "to": [12, 7, 2], + "faces": { + "north": { + "uv": [ + 4, + 9, + 6, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "east": { + "uv": [ + 14, + 9, + 15, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 10, + 1, + 12, + 2 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 10, + 14, + 12, + 15 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [12, 2, 1], + "to": [13, 6, 2], + "faces": { + "north": { + "uv": [ + 3, + 10, + 4, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "east": { + "uv": [ + 14, + 10, + 15, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 12, + 1, + 13, + 2 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 12, + 14, + 13, + 15 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [15, 1, 6], + "to": [16, 7, 8], + "faces": { + "north": { + "uv": [ + 0, + 9, + 1, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "east": { + "uv": [ + 8, + 9, + 10, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 15, + 6, + 16, + 8 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 15, + 8, + 16, + 10 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [15, 2, 5], + "to": [16, 6, 6], + "faces": { + "north": { + "uv": [ + 0, + 10, + 1, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "east": { + "uv": [ + 10, + 10, + 11, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 15, + 5, + 16, + 6 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 15, + 10, + 16, + 11 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [8, 1, 0], + "to": [10, 7, 1], + "faces": { + "north": { + "uv": [ + 6, + 9, + 8, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "east": { + "uv": [ + 15, + 9, + 16, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 8, + 0, + 10, + 1 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 8, + 15, + 10, + 16 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [10, 2, 0], + "to": [11, 6, 1], + "faces": { + "north": { + "uv": [ + 5, + 10, + 6, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "east": { + "uv": [ + 15, + 10, + 16, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 10, + 0, + 11, + 1 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 10, + 15, + 11, + 16 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "corner", + "from": [13, 2, 2], + "to": [14, 6, 3], + "faces": { + "north": { + "uv": [ + 2, + 10, + 3, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "east": { + "uv": [ + 13, + 10, + 14, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 13, + 2, + 14, + 3 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 13, + 13, + 14, + 14 + ], + "texture": "#0", + "tintindex": 0 + } + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "thirdperson_lefthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson_righthand": { + "rotation": [0, 45, 0], + "scale": [0.4, 0.4, 0.4] + }, + "firstperson_lefthand": { + "rotation": [0, 225, 0], + "scale": [0.4, 0.4, 0.4] + }, + "ground": { + "translation": [0, 3, 0], + "scale": [0.25, 0.25, 0.25] + }, + "gui": { + "rotation": [30, 225, 0], + "scale": [0.625, 0.625, 0.625] + }, + "fixed": { + "scale": [0.5, 0.5, 0.5] + } + }, + "groups": [ + { + "name": "slice_1", + "children": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15] + }, + { + "name": "slice_2", + "children": [16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31] + }, + { + "name": "cheese_block_slices4", + "children": [ + { + "name": "slice_1", + "children": [32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47] + }, + { + "name": "slice_2", + "children": [48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63] + }, + { + "name": "slice_3", + "children": [64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79] + }, + { + "name": "slice_4", + "children": [80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/models/block/cheese_wheel/cheese_slab_slices_top_3.json b/src/main/resources/assets/growthcraft_milk/models/block/cheese_wheel/cheese_slab_slices_top_3.json new file mode 100644 index 0000000..18b90cd --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/models/block/cheese_wheel/cheese_slab_slices_top_3.json @@ -0,0 +1,5121 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "0": "growthcraft_milk:block/cheese_slab/cheese_base", + "1": "growthcraft_milk:block/cheese_slab/cheese_side", + "missing": "growthcraft:block/missing", + "particle": "growthcraft_milk:block/cheese_slab/cheese_base" + }, + "elements": [ + { + "name": "middle", + "from": [8, 8, 8], + "to": [13, 16, 13], + "faces": { + "north": { + "uv": [ + 3, + 8, + 8, + 16 + ], + "texture": "#1", + "tintindex": 0 + }, + "east": { + "uv": [ + 3, + 8, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 8, + 8, + 13, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 8, + 8, + 13, + 13 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [8, 8, 13], + "to": [12, 16, 14], + "faces": { + "east": { + "uv": [ + 2, + 8, + 3, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 8, + 8, + 12, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 8, + 13, + 12, + 14 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [12, 9, 13], + "to": [13, 15, 14], + "faces": { + "east": { + "uv": [ + 2, + 9, + 3, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 12, + 9, + 13, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 12, + 13, + 13, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 12, + 2, + 13, + 3 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [13, 8, 8], + "to": [14, 16, 12], + "faces": { + "north": { + "uv": [ + 2, + 8, + 3, + 16 + ], + "texture": "#1", + "tintindex": 0 + }, + "east": { + "uv": [ + 4, + 8, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 13, + 8, + 14, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 13, + 8, + 14, + 12 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [13, 9, 12], + "to": [14, 15, 13], + "faces": { + "east": { + "uv": [ + 3, + 9, + 4, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 13, + 9, + 14, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 13, + 12, + 14, + 13 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 13, + 3, + 14, + 4 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [8, 8, 14], + "to": [10, 16, 15], + "faces": { + "east": { + "uv": [ + 1, + 8, + 2, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 8, + 8, + 10, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 8, + 14, + 10, + 15 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [10, 9, 14], + "to": [12, 15, 15], + "faces": { + "east": { + "uv": [ + 1, + 9, + 2, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 10, + 9, + 12, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 10, + 14, + 12, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 10, + 1, + 12, + 2 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [12, 10, 14], + "to": [13, 14, 15], + "faces": { + "east": { + "uv": [ + 1, + 10, + 2, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 12, + 10, + 13, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 12, + 14, + 13, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 12, + 1, + 13, + 2 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [14, 8, 8], + "to": [15, 16, 10], + "faces": { + "north": { + "uv": [ + 1, + 8, + 2, + 16 + ], + "texture": "#1", + "tintindex": 0 + }, + "east": { + "uv": [ + 6, + 8, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 14, + 8, + 15, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 14, + 8, + 15, + 10 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [14, 9, 10], + "to": [15, 15, 12], + "faces": { + "east": { + "uv": [ + 4, + 9, + 6, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 14, + 9, + 15, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 14, + 10, + 15, + 12 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 14, + 4, + 15, + 6 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [14, 10, 12], + "to": [15, 14, 13], + "faces": { + "east": { + "uv": [ + 3, + 10, + 4, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 14, + 10, + 15, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 14, + 12, + 15, + 13 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 14, + 3, + 15, + 4 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [8, 9, 15], + "to": [10, 15, 16], + "faces": { + "east": { + "uv": [ + 0, + 9, + 1, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 8, + 9, + 10, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 8, + 15, + 10, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 8, + 0, + 10, + 1 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [10, 10, 15], + "to": [11, 14, 16], + "faces": { + "east": { + "uv": [ + 0, + 10, + 1, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 10, + 10, + 11, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 10, + 15, + 11, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 10, + 0, + 11, + 1 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [15, 9, 8], + "to": [16, 15, 10], + "faces": { + "north": { + "uv": [ + 0, + 9, + 1, + 15 + ], + "texture": "#1", + "tintindex": 0 + }, + "east": { + "uv": [ + 6, + 9, + 8, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 15, + 9, + 16, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 15, + 8, + 16, + 10 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 15, + 6, + 16, + 8 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [15, 10, 10], + "to": [16, 14, 11], + "faces": { + "east": { + "uv": [ + 5, + 10, + 6, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 15, + 10, + 16, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 15, + 10, + 16, + 11 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 15, + 5, + 16, + 6 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "corner", + "from": [13, 10, 13], + "to": [14, 14, 14], + "faces": { + "east": { + "uv": [ + 2, + 10, + 3, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 13, + 10, + 14, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 13, + 13, + 14, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 13, + 2, + 14, + 3 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "middle", + "from": [3, 8, 8], + "to": [8, 16, 13], + "faces": { + "south": { + "uv": [ + 3, + 8, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 8, + 8, + 13, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 3, + 8, + 8, + 13 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [2, 8, 8], + "to": [3, 16, 12], + "faces": { + "south": { + "uv": [ + 2, + 8, + 3, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 8, + 8, + 12, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 2, + 8, + 3, + 12 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [2, 9, 12], + "to": [3, 15, 13], + "faces": { + "south": { + "uv": [ + 2, + 9, + 3, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 12, + 9, + 13, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 2, + 12, + 3, + 13 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 2, + 3, + 3, + 4 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [4, 8, 13], + "to": [8, 16, 14], + "faces": { + "south": { + "uv": [ + 4, + 8, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 13, + 8, + 14, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 4, + 13, + 8, + 14 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [3, 9, 13], + "to": [4, 15, 14], + "faces": { + "south": { + "uv": [ + 3, + 9, + 4, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 13, + 9, + 14, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 3, + 13, + 4, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 3, + 2, + 4, + 3 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [1, 8, 8], + "to": [2, 16, 10], + "faces": { + "south": { + "uv": [ + 1, + 8, + 2, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 8, + 8, + 10, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 1, + 8, + 2, + 10 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [1, 9, 10], + "to": [2, 15, 12], + "faces": { + "south": { + "uv": [ + 1, + 9, + 2, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 10, + 9, + 12, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 1, + 10, + 2, + 12 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 1, + 4, + 2, + 6 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [1, 10, 12], + "to": [2, 14, 13], + "faces": { + "south": { + "uv": [ + 1, + 10, + 2, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 12, + 10, + 13, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 1, + 12, + 2, + 13 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 1, + 3, + 2, + 4 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [6, 8, 14], + "to": [8, 16, 15], + "faces": { + "south": { + "uv": [ + 6, + 8, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 14, + 8, + 15, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 6, + 14, + 8, + 15 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [4, 9, 14], + "to": [6, 15, 15], + "faces": { + "south": { + "uv": [ + 4, + 9, + 6, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 14, + 9, + 15, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 4, + 14, + 6, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 4, + 1, + 6, + 2 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [3, 10, 14], + "to": [4, 14, 15], + "faces": { + "south": { + "uv": [ + 3, + 10, + 4, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 14, + 10, + 15, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 3, + 14, + 4, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 3, + 1, + 4, + 2 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [0, 9, 8], + "to": [1, 15, 10], + "faces": { + "south": { + "uv": [ + 0, + 9, + 1, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 8, + 9, + 10, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 0, + 8, + 1, + 10 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 0, + 6, + 1, + 8 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [0, 10, 10], + "to": [1, 14, 11], + "faces": { + "south": { + "uv": [ + 0, + 10, + 1, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 10, + 10, + 11, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 0, + 10, + 1, + 11 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 0, + 5, + 1, + 6 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [6, 9, 15], + "to": [8, 15, 16], + "faces": { + "south": { + "uv": [ + 6, + 9, + 8, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 15, + 9, + 16, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 6, + 15, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 6, + 0, + 8, + 1 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [5, 10, 15], + "to": [6, 14, 16], + "faces": { + "south": { + "uv": [ + 5, + 10, + 6, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 15, + 10, + 16, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 5, + 15, + 6, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 5, + 0, + 6, + 1 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "corner", + "from": [2, 10, 13], + "to": [3, 14, 14], + "faces": { + "south": { + "uv": [ + 2, + 10, + 3, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 13, + 10, + 14, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 2, + 13, + 3, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 2, + 2, + 3, + 3 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "middle", + "from": [3, 8, 3], + "to": [8, 16, 8], + "faces": { + "north": { + "uv": [ + 8, + 8, + 13, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "east": { + "uv": [ + 8, + 8, + 13, + 16 + ], + "texture": "#1", + "tintindex": 0 + }, + "west": { + "uv": [ + 3, + 8, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 3, + 3, + 8, + 8 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [4, 8, 2], + "to": [8, 16, 3], + "faces": { + "north": { + "uv": [ + 8, + 8, + 12, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "east": { + "uv": [ + 13, + 8, + 14, + 16 + ], + "texture": "#1", + "tintindex": 0 + }, + "west": { + "uv": [ + 2, + 8, + 3, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 4, + 2, + 8, + 3 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [3, 9, 2], + "to": [4, 15, 3], + "faces": { + "north": { + "uv": [ + 12, + 9, + 13, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 2, + 9, + 3, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 3, + 2, + 4, + 3 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 3, + 13, + 4, + 14 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [2, 8, 4], + "to": [3, 16, 8], + "faces": { + "north": { + "uv": [ + 13, + 8, + 14, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 4, + 8, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 2, + 4, + 3, + 8 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [2, 9, 3], + "to": [3, 15, 4], + "faces": { + "north": { + "uv": [ + 13, + 9, + 14, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 3, + 9, + 4, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 2, + 3, + 3, + 4 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 2, + 12, + 3, + 13 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [6, 8, 1], + "to": [8, 16, 2], + "faces": { + "north": { + "uv": [ + 8, + 8, + 10, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "east": { + "uv": [ + 14, + 8, + 15, + 16 + ], + "texture": "#1", + "tintindex": 0 + }, + "west": { + "uv": [ + 1, + 8, + 2, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 6, + 1, + 8, + 2 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [4, 9, 1], + "to": [6, 15, 2], + "faces": { + "north": { + "uv": [ + 10, + 9, + 12, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 1, + 9, + 2, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 4, + 1, + 6, + 2 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 4, + 14, + 6, + 15 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [3, 10, 1], + "to": [4, 14, 2], + "faces": { + "north": { + "uv": [ + 12, + 10, + 13, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 1, + 10, + 2, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 3, + 1, + 4, + 2 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 3, + 14, + 4, + 15 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [1, 8, 6], + "to": [2, 16, 8], + "faces": { + "north": { + "uv": [ + 14, + 8, + 15, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 6, + 8, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 1, + 6, + 2, + 8 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [1, 9, 4], + "to": [2, 15, 6], + "faces": { + "north": { + "uv": [ + 14, + 9, + 15, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 4, + 9, + 6, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 1, + 4, + 2, + 6 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 1, + 10, + 2, + 12 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [1, 10, 3], + "to": [2, 14, 4], + "faces": { + "north": { + "uv": [ + 14, + 10, + 15, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 3, + 10, + 4, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 1, + 3, + 2, + 4 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 1, + 12, + 2, + 13 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [6, 9, 0], + "to": [8, 15, 1], + "faces": { + "north": { + "uv": [ + 8, + 9, + 10, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "east": { + "uv": [ + 15, + 9, + 16, + 15 + ], + "texture": "#1", + "tintindex": 0 + }, + "west": { + "uv": [ + 0, + 9, + 1, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 6, + 0, + 8, + 1 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 6, + 15, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [5, 10, 0], + "to": [6, 14, 1], + "faces": { + "north": { + "uv": [ + 10, + 10, + 11, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 0, + 10, + 1, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 5, + 0, + 6, + 1 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 5, + 15, + 6, + 16 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [0, 9, 6], + "to": [1, 15, 8], + "faces": { + "north": { + "uv": [ + 15, + 9, + 16, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 6, + 9, + 8, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 0, + 6, + 1, + 8 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 0, + 8, + 1, + 10 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [0, 10, 5], + "to": [1, 14, 6], + "faces": { + "north": { + "uv": [ + 15, + 10, + 16, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 5, + 10, + 6, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 0, + 5, + 1, + 6 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 0, + 10, + 1, + 11 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "corner", + "from": [2, 10, 2], + "to": [3, 14, 3], + "faces": { + "north": { + "uv": [ + 13, + 10, + 14, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 2, + 10, + 3, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 2, + 2, + 3, + 3 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 2, + 13, + 3, + 14 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "middle", + "from": [8, 0, 8], + "to": [13, 8, 13], + "faces": { + "east": { + "uv": [ + 3, + 8, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 8, + 8, + 13, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 8, + 3, + 13, + 8 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [8, 0, 13], + "to": [12, 8, 14], + "faces": { + "east": { + "uv": [ + 2, + 8, + 3, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 8, + 8, + 12, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 8, + 2, + 12, + 3 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [12, 1, 13], + "to": [13, 7, 14], + "faces": { + "east": { + "uv": [ + 2, + 9, + 3, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 12, + 9, + 13, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 12, + 13, + 13, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 12, + 2, + 13, + 3 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [13, 0, 8], + "to": [14, 8, 12], + "faces": { + "east": { + "uv": [ + 4, + 8, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 13, + 8, + 14, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 13, + 4, + 14, + 8 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [13, 1, 12], + "to": [14, 7, 13], + "faces": { + "east": { + "uv": [ + 3, + 9, + 4, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 13, + 9, + 14, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 13, + 12, + 14, + 13 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 13, + 3, + 14, + 4 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [8, 0, 14], + "to": [10, 8, 15], + "faces": { + "east": { + "uv": [ + 1, + 8, + 2, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 8, + 8, + 10, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 8, + 1, + 10, + 2 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [10, 1, 14], + "to": [12, 7, 15], + "faces": { + "east": { + "uv": [ + 1, + 9, + 2, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 10, + 9, + 12, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 10, + 14, + 12, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 10, + 1, + 12, + 2 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [12, 2, 14], + "to": [13, 6, 15], + "faces": { + "east": { + "uv": [ + 1, + 10, + 2, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 12, + 10, + 13, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 12, + 14, + 13, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 12, + 1, + 13, + 2 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [14, 0, 8], + "to": [15, 8, 10], + "faces": { + "east": { + "uv": [ + 6, + 8, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 14, + 8, + 15, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 14, + 6, + 15, + 8 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [14, 1, 10], + "to": [15, 7, 12], + "faces": { + "east": { + "uv": [ + 4, + 9, + 6, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 14, + 9, + 15, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 14, + 10, + 15, + 12 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 14, + 4, + 15, + 6 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [14, 2, 12], + "to": [15, 6, 13], + "faces": { + "east": { + "uv": [ + 3, + 10, + 4, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 14, + 10, + 15, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 14, + 12, + 15, + 13 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 14, + 3, + 15, + 4 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [8, 1, 15], + "to": [10, 7, 16], + "faces": { + "east": { + "uv": [ + 0, + 9, + 1, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 8, + 9, + 10, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 8, + 15, + 10, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 8, + 0, + 10, + 1 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [10, 2, 15], + "to": [11, 6, 16], + "faces": { + "east": { + "uv": [ + 0, + 10, + 1, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 10, + 10, + 11, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 10, + 15, + 11, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 10, + 0, + 11, + 1 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [15, 1, 8], + "to": [16, 7, 10], + "faces": { + "east": { + "uv": [ + 6, + 9, + 8, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 15, + 9, + 16, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 15, + 8, + 16, + 10 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 15, + 6, + 16, + 8 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [15, 2, 10], + "to": [16, 6, 11], + "faces": { + "east": { + "uv": [ + 5, + 10, + 6, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 15, + 10, + 16, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 15, + 10, + 16, + 11 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 15, + 5, + 16, + 6 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "corner", + "from": [13, 2, 13], + "to": [14, 6, 14], + "faces": { + "east": { + "uv": [ + 2, + 10, + 3, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 13, + 10, + 14, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 13, + 13, + 14, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 13, + 2, + 14, + 3 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "middle", + "from": [3, 0, 8], + "to": [8, 8, 13], + "faces": { + "south": { + "uv": [ + 3, + 8, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 8, + 8, + 13, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 3, + 3, + 8, + 8 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [2, 0, 8], + "to": [3, 8, 12], + "faces": { + "south": { + "uv": [ + 2, + 8, + 3, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 8, + 8, + 12, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 2, + 4, + 3, + 8 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [2, 1, 12], + "to": [3, 7, 13], + "faces": { + "south": { + "uv": [ + 2, + 9, + 3, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 12, + 9, + 13, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 2, + 12, + 3, + 13 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 2, + 3, + 3, + 4 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [4, 0, 13], + "to": [8, 8, 14], + "faces": { + "south": { + "uv": [ + 4, + 8, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 13, + 8, + 14, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 4, + 2, + 8, + 3 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [3, 1, 13], + "to": [4, 7, 14], + "faces": { + "south": { + "uv": [ + 3, + 9, + 4, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 13, + 9, + 14, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 3, + 13, + 4, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 3, + 2, + 4, + 3 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [1, 0, 8], + "to": [2, 8, 10], + "faces": { + "south": { + "uv": [ + 1, + 8, + 2, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 8, + 8, + 10, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 1, + 6, + 2, + 8 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [1, 1, 10], + "to": [2, 7, 12], + "faces": { + "south": { + "uv": [ + 1, + 9, + 2, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 10, + 9, + 12, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 1, + 10, + 2, + 12 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 1, + 4, + 2, + 6 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [1, 2, 12], + "to": [2, 6, 13], + "faces": { + "south": { + "uv": [ + 1, + 10, + 2, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 12, + 10, + 13, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 1, + 12, + 2, + 13 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 1, + 3, + 2, + 4 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [6, 0, 14], + "to": [8, 8, 15], + "faces": { + "south": { + "uv": [ + 6, + 8, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 14, + 8, + 15, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 6, + 1, + 8, + 2 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [4, 1, 14], + "to": [6, 7, 15], + "faces": { + "south": { + "uv": [ + 4, + 9, + 6, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 14, + 9, + 15, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 4, + 14, + 6, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 4, + 1, + 6, + 2 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [3, 2, 14], + "to": [4, 6, 15], + "faces": { + "south": { + "uv": [ + 3, + 10, + 4, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 14, + 10, + 15, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 3, + 14, + 4, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 3, + 1, + 4, + 2 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [0, 1, 8], + "to": [1, 7, 10], + "faces": { + "south": { + "uv": [ + 0, + 9, + 1, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 8, + 9, + 10, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 0, + 8, + 1, + 10 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 0, + 6, + 1, + 8 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [0, 2, 10], + "to": [1, 6, 11], + "faces": { + "south": { + "uv": [ + 0, + 10, + 1, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 10, + 10, + 11, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 0, + 10, + 1, + 11 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 0, + 5, + 1, + 6 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [6, 1, 15], + "to": [8, 7, 16], + "faces": { + "south": { + "uv": [ + 6, + 9, + 8, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 15, + 9, + 16, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 6, + 15, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 6, + 0, + 8, + 1 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [5, 2, 15], + "to": [6, 6, 16], + "faces": { + "south": { + "uv": [ + 5, + 10, + 6, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 15, + 10, + 16, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 5, + 15, + 6, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 5, + 0, + 6, + 1 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "corner", + "from": [2, 2, 13], + "to": [3, 6, 14], + "faces": { + "south": { + "uv": [ + 2, + 10, + 3, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 13, + 10, + 14, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 2, + 13, + 3, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 2, + 2, + 3, + 3 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "middle", + "from": [3, 0, 3], + "to": [8, 8, 8], + "faces": { + "north": { + "uv": [ + 8, + 8, + 13, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 3, + 8, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 3, + 8, + 8, + 13 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [4, 0, 2], + "to": [8, 8, 3], + "faces": { + "north": { + "uv": [ + 8, + 8, + 12, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 2, + 8, + 3, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 4, + 13, + 8, + 14 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [3, 1, 2], + "to": [4, 7, 3], + "faces": { + "north": { + "uv": [ + 12, + 9, + 13, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 2, + 9, + 3, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 3, + 2, + 4, + 3 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 3, + 13, + 4, + 14 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [2, 0, 4], + "to": [3, 8, 8], + "faces": { + "north": { + "uv": [ + 13, + 8, + 14, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 4, + 8, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 2, + 8, + 3, + 12 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [2, 1, 3], + "to": [3, 7, 4], + "faces": { + "north": { + "uv": [ + 13, + 9, + 14, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 3, + 9, + 4, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 2, + 3, + 3, + 4 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 2, + 12, + 3, + 13 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [6, 0, 1], + "to": [8, 8, 2], + "faces": { + "north": { + "uv": [ + 8, + 8, + 10, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 1, + 8, + 2, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 6, + 14, + 8, + 15 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [4, 1, 1], + "to": [6, 7, 2], + "faces": { + "north": { + "uv": [ + 10, + 9, + 12, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 1, + 9, + 2, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 4, + 1, + 6, + 2 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 4, + 14, + 6, + 15 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [3, 2, 1], + "to": [4, 6, 2], + "faces": { + "north": { + "uv": [ + 12, + 10, + 13, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 1, + 10, + 2, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 3, + 1, + 4, + 2 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 3, + 14, + 4, + 15 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [1, 0, 6], + "to": [2, 8, 8], + "faces": { + "north": { + "uv": [ + 14, + 8, + 15, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 6, + 8, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 1, + 8, + 2, + 10 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [1, 1, 4], + "to": [2, 7, 6], + "faces": { + "north": { + "uv": [ + 14, + 9, + 15, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 4, + 9, + 6, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 1, + 4, + 2, + 6 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 1, + 10, + 2, + 12 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [1, 2, 3], + "to": [2, 6, 4], + "faces": { + "north": { + "uv": [ + 14, + 10, + 15, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 3, + 10, + 4, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 1, + 3, + 2, + 4 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 1, + 12, + 2, + 13 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [6, 1, 0], + "to": [8, 7, 1], + "faces": { + "north": { + "uv": [ + 8, + 9, + 10, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 0, + 9, + 1, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 6, + 0, + 8, + 1 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 6, + 15, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [5, 2, 0], + "to": [6, 6, 1], + "faces": { + "north": { + "uv": [ + 10, + 10, + 11, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 0, + 10, + 1, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 5, + 0, + 6, + 1 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 5, + 15, + 6, + 16 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [0, 1, 6], + "to": [1, 7, 8], + "faces": { + "north": { + "uv": [ + 15, + 9, + 16, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 6, + 9, + 8, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 0, + 6, + 1, + 8 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 0, + 8, + 1, + 10 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [0, 2, 5], + "to": [1, 6, 6], + "faces": { + "north": { + "uv": [ + 15, + 10, + 16, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 5, + 10, + 6, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 0, + 5, + 1, + 6 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 0, + 10, + 1, + 11 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "corner", + "from": [2, 2, 2], + "to": [3, 6, 3], + "faces": { + "north": { + "uv": [ + 13, + 10, + 14, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 2, + 10, + 3, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 2, + 2, + 3, + 3 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 2, + 13, + 3, + 14 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "middle", + "from": [8, 0, 3], + "to": [13, 8, 8], + "faces": { + "north": { + "uv": [ + 3, + 8, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "east": { + "uv": [ + 8, + 8, + 13, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 8, + 3, + 13, + 8 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 8, + 8, + 13, + 13 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [13, 0, 4], + "to": [14, 8, 8], + "faces": { + "north": { + "uv": [ + 2, + 8, + 3, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "east": { + "uv": [ + 8, + 8, + 12, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 13, + 4, + 14, + 8 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 13, + 8, + 14, + 12 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [13, 1, 3], + "to": [14, 7, 4], + "faces": { + "north": { + "uv": [ + 2, + 9, + 3, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "east": { + "uv": [ + 12, + 9, + 13, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 13, + 3, + 14, + 4 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 13, + 12, + 14, + 13 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [8, 0, 2], + "to": [12, 8, 3], + "faces": { + "north": { + "uv": [ + 4, + 8, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "east": { + "uv": [ + 13, + 8, + 14, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 8, + 2, + 12, + 3 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 8, + 13, + 12, + 14 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [12, 1, 2], + "to": [13, 7, 3], + "faces": { + "north": { + "uv": [ + 3, + 9, + 4, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "east": { + "uv": [ + 13, + 9, + 14, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 12, + 2, + 13, + 3 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 12, + 13, + 13, + 14 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [14, 0, 6], + "to": [15, 8, 8], + "faces": { + "north": { + "uv": [ + 1, + 8, + 2, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "east": { + "uv": [ + 8, + 8, + 10, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 14, + 6, + 15, + 8 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 14, + 8, + 15, + 10 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [14, 1, 4], + "to": [15, 7, 6], + "faces": { + "north": { + "uv": [ + 1, + 9, + 2, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "east": { + "uv": [ + 10, + 9, + 12, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 14, + 4, + 15, + 6 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 14, + 10, + 15, + 12 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [14, 2, 3], + "to": [15, 6, 4], + "faces": { + "north": { + "uv": [ + 1, + 10, + 2, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "east": { + "uv": [ + 12, + 10, + 13, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 14, + 3, + 15, + 4 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 14, + 12, + 15, + 13 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [8, 0, 1], + "to": [10, 8, 2], + "faces": { + "north": { + "uv": [ + 6, + 8, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "east": { + "uv": [ + 14, + 8, + 15, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 8, + 1, + 10, + 2 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 8, + 14, + 10, + 15 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [10, 1, 1], + "to": [12, 7, 2], + "faces": { + "north": { + "uv": [ + 4, + 9, + 6, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "east": { + "uv": [ + 14, + 9, + 15, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 10, + 1, + 12, + 2 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 10, + 14, + 12, + 15 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [12, 2, 1], + "to": [13, 6, 2], + "faces": { + "north": { + "uv": [ + 3, + 10, + 4, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "east": { + "uv": [ + 14, + 10, + 15, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 12, + 1, + 13, + 2 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 12, + 14, + 13, + 15 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [15, 1, 6], + "to": [16, 7, 8], + "faces": { + "north": { + "uv": [ + 0, + 9, + 1, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "east": { + "uv": [ + 8, + 9, + 10, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 15, + 6, + 16, + 8 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 15, + 8, + 16, + 10 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [15, 2, 5], + "to": [16, 6, 6], + "faces": { + "north": { + "uv": [ + 0, + 10, + 1, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "east": { + "uv": [ + 10, + 10, + 11, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 15, + 5, + 16, + 6 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 15, + 10, + 16, + 11 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [8, 1, 0], + "to": [10, 7, 1], + "faces": { + "north": { + "uv": [ + 6, + 9, + 8, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "east": { + "uv": [ + 15, + 9, + 16, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 8, + 0, + 10, + 1 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 8, + 15, + 10, + 16 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [10, 2, 0], + "to": [11, 6, 1], + "faces": { + "north": { + "uv": [ + 5, + 10, + 6, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "east": { + "uv": [ + 15, + 10, + 16, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 10, + 0, + 11, + 1 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 10, + 15, + 11, + 16 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "corner", + "from": [13, 2, 2], + "to": [14, 6, 3], + "faces": { + "north": { + "uv": [ + 2, + 10, + 3, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "east": { + "uv": [ + 13, + 10, + 14, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 13, + 2, + 14, + 3 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 13, + 13, + 14, + 14 + ], + "texture": "#0", + "tintindex": 0 + } + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "thirdperson_lefthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson_righthand": { + "rotation": [0, 45, 0], + "scale": [0.4, 0.4, 0.4] + }, + "firstperson_lefthand": { + "rotation": [0, 225, 0], + "scale": [0.4, 0.4, 0.4] + }, + "ground": { + "translation": [0, 3, 0], + "scale": [0.25, 0.25, 0.25] + }, + "gui": { + "rotation": [30, 225, 0], + "scale": [0.625, 0.625, 0.625] + }, + "fixed": { + "scale": [0.5, 0.5, 0.5] + } + }, + "groups": [ + { + "name": "slice_1", + "children": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15] + }, + { + "name": "slice_2", + "children": [16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31] + }, + { + "name": "slice_3", + "children": [32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47] + }, + { + "name": "cheese_block_slices4", + "children": [ + { + "name": "slice_1", + "children": [48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63] + }, + { + "name": "slice_2", + "children": [64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79] + }, + { + "name": "slice_3", + "children": [80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95] + }, + { + "name": "slice_4", + "children": [96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/models/block/cheese_wheel/cheese_slab_slices_top_4.json b/src/main/resources/assets/growthcraft_milk/models/block/cheese_wheel/cheese_slab_slices_top_4.json new file mode 100644 index 0000000..3c19ad6 --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/models/block/cheese_wheel/cheese_slab_slices_top_4.json @@ -0,0 +1,5696 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "0": "growthcraft_milk:block/cheese_slab/cheese_base", + "missing": "growthcraft:block/missing", + "particle": "growthcraft_milk:block/cheese_slab/cheese_base" + }, + "elements": [ + { + "name": "middle", + "from": [8, 8, 8], + "to": [13, 16, 13], + "faces": { + "east": { + "uv": [ + 3, + 8, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 8, + 8, + 13, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 8, + 8, + 13, + 13 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [8, 8, 13], + "to": [12, 16, 14], + "faces": { + "east": { + "uv": [ + 2, + 8, + 3, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 8, + 8, + 12, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 8, + 13, + 12, + 14 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [12, 9, 13], + "to": [13, 15, 14], + "faces": { + "east": { + "uv": [ + 2, + 9, + 3, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 12, + 9, + 13, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 12, + 13, + 13, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 12, + 2, + 13, + 3 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [13, 8, 8], + "to": [14, 16, 12], + "faces": { + "east": { + "uv": [ + 4, + 8, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 13, + 8, + 14, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 13, + 8, + 14, + 12 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [13, 9, 12], + "to": [14, 15, 13], + "faces": { + "east": { + "uv": [ + 3, + 9, + 4, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 13, + 9, + 14, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 13, + 12, + 14, + 13 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 13, + 3, + 14, + 4 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [8, 8, 14], + "to": [10, 16, 15], + "faces": { + "east": { + "uv": [ + 1, + 8, + 2, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 8, + 8, + 10, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 8, + 14, + 10, + 15 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [10, 9, 14], + "to": [12, 15, 15], + "faces": { + "east": { + "uv": [ + 1, + 9, + 2, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 10, + 9, + 12, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 10, + 14, + 12, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 10, + 1, + 12, + 2 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [12, 10, 14], + "to": [13, 14, 15], + "faces": { + "east": { + "uv": [ + 1, + 10, + 2, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 12, + 10, + 13, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 12, + 14, + 13, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 12, + 1, + 13, + 2 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [14, 8, 8], + "to": [15, 16, 10], + "faces": { + "east": { + "uv": [ + 6, + 8, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 14, + 8, + 15, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 14, + 8, + 15, + 10 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [14, 9, 10], + "to": [15, 15, 12], + "faces": { + "east": { + "uv": [ + 4, + 9, + 6, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 14, + 9, + 15, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 14, + 10, + 15, + 12 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 14, + 4, + 15, + 6 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [14, 10, 12], + "to": [15, 14, 13], + "faces": { + "east": { + "uv": [ + 3, + 10, + 4, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 14, + 10, + 15, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 14, + 12, + 15, + 13 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 14, + 3, + 15, + 4 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [8, 9, 15], + "to": [10, 15, 16], + "faces": { + "east": { + "uv": [ + 0, + 9, + 1, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 8, + 9, + 10, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 8, + 15, + 10, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 8, + 0, + 10, + 1 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [10, 10, 15], + "to": [11, 14, 16], + "faces": { + "east": { + "uv": [ + 0, + 10, + 1, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 10, + 10, + 11, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 10, + 15, + 11, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 10, + 0, + 11, + 1 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [15, 9, 8], + "to": [16, 15, 10], + "faces": { + "east": { + "uv": [ + 6, + 9, + 8, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 15, + 9, + 16, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 15, + 8, + 16, + 10 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 15, + 6, + 16, + 8 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [15, 10, 10], + "to": [16, 14, 11], + "faces": { + "east": { + "uv": [ + 5, + 10, + 6, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 15, + 10, + 16, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 15, + 10, + 16, + 11 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 15, + 5, + 16, + 6 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "corner", + "from": [13, 10, 13], + "to": [14, 14, 14], + "faces": { + "east": { + "uv": [ + 2, + 10, + 3, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 13, + 10, + 14, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 13, + 13, + 14, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 13, + 2, + 14, + 3 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "middle", + "from": [3, 8, 8], + "to": [8, 16, 13], + "faces": { + "south": { + "uv": [ + 3, + 8, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 8, + 8, + 13, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 3, + 8, + 8, + 13 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [2, 8, 8], + "to": [3, 16, 12], + "faces": { + "south": { + "uv": [ + 2, + 8, + 3, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 8, + 8, + 12, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 2, + 8, + 3, + 12 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [2, 9, 12], + "to": [3, 15, 13], + "faces": { + "south": { + "uv": [ + 2, + 9, + 3, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 12, + 9, + 13, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 2, + 12, + 3, + 13 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 2, + 3, + 3, + 4 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [4, 8, 13], + "to": [8, 16, 14], + "faces": { + "south": { + "uv": [ + 4, + 8, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 13, + 8, + 14, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 4, + 13, + 8, + 14 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [3, 9, 13], + "to": [4, 15, 14], + "faces": { + "south": { + "uv": [ + 3, + 9, + 4, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 13, + 9, + 14, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 3, + 13, + 4, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 3, + 2, + 4, + 3 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [1, 8, 8], + "to": [2, 16, 10], + "faces": { + "south": { + "uv": [ + 1, + 8, + 2, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 8, + 8, + 10, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 1, + 8, + 2, + 10 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [1, 9, 10], + "to": [2, 15, 12], + "faces": { + "south": { + "uv": [ + 1, + 9, + 2, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 10, + 9, + 12, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 1, + 10, + 2, + 12 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 1, + 4, + 2, + 6 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [1, 10, 12], + "to": [2, 14, 13], + "faces": { + "south": { + "uv": [ + 1, + 10, + 2, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 12, + 10, + 13, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 1, + 12, + 2, + 13 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 1, + 3, + 2, + 4 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [6, 8, 14], + "to": [8, 16, 15], + "faces": { + "south": { + "uv": [ + 6, + 8, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 14, + 8, + 15, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 6, + 14, + 8, + 15 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [4, 9, 14], + "to": [6, 15, 15], + "faces": { + "south": { + "uv": [ + 4, + 9, + 6, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 14, + 9, + 15, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 4, + 14, + 6, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 4, + 1, + 6, + 2 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [3, 10, 14], + "to": [4, 14, 15], + "faces": { + "south": { + "uv": [ + 3, + 10, + 4, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 14, + 10, + 15, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 3, + 14, + 4, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 3, + 1, + 4, + 2 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [0, 9, 8], + "to": [1, 15, 10], + "faces": { + "south": { + "uv": [ + 0, + 9, + 1, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 8, + 9, + 10, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 0, + 8, + 1, + 10 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 0, + 6, + 1, + 8 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [0, 10, 10], + "to": [1, 14, 11], + "faces": { + "south": { + "uv": [ + 0, + 10, + 1, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 10, + 10, + 11, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 0, + 10, + 1, + 11 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 0, + 5, + 1, + 6 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [6, 9, 15], + "to": [8, 15, 16], + "faces": { + "south": { + "uv": [ + 6, + 9, + 8, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 15, + 9, + 16, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 6, + 15, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 6, + 0, + 8, + 1 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [5, 10, 15], + "to": [6, 14, 16], + "faces": { + "south": { + "uv": [ + 5, + 10, + 6, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 15, + 10, + 16, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 5, + 15, + 6, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 5, + 0, + 6, + 1 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "corner", + "from": [2, 10, 13], + "to": [3, 14, 14], + "faces": { + "south": { + "uv": [ + 2, + 10, + 3, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 13, + 10, + 14, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 2, + 13, + 3, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 2, + 2, + 3, + 3 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "middle", + "from": [3, 8, 3], + "to": [8, 16, 8], + "faces": { + "north": { + "uv": [ + 8, + 8, + 13, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 3, + 8, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 3, + 3, + 8, + 8 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [4, 8, 2], + "to": [8, 16, 3], + "faces": { + "north": { + "uv": [ + 8, + 8, + 12, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 2, + 8, + 3, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 4, + 2, + 8, + 3 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [3, 9, 2], + "to": [4, 15, 3], + "faces": { + "north": { + "uv": [ + 12, + 9, + 13, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 2, + 9, + 3, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 3, + 2, + 4, + 3 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 3, + 13, + 4, + 14 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [2, 8, 4], + "to": [3, 16, 8], + "faces": { + "north": { + "uv": [ + 13, + 8, + 14, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 4, + 8, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 2, + 4, + 3, + 8 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [2, 9, 3], + "to": [3, 15, 4], + "faces": { + "north": { + "uv": [ + 13, + 9, + 14, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 3, + 9, + 4, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 2, + 3, + 3, + 4 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 2, + 12, + 3, + 13 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [6, 8, 1], + "to": [8, 16, 2], + "faces": { + "north": { + "uv": [ + 8, + 8, + 10, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 1, + 8, + 2, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 6, + 1, + 8, + 2 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [4, 9, 1], + "to": [6, 15, 2], + "faces": { + "north": { + "uv": [ + 10, + 9, + 12, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 1, + 9, + 2, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 4, + 1, + 6, + 2 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 4, + 14, + 6, + 15 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [3, 10, 1], + "to": [4, 14, 2], + "faces": { + "north": { + "uv": [ + 12, + 10, + 13, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 1, + 10, + 2, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 3, + 1, + 4, + 2 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 3, + 14, + 4, + 15 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [1, 8, 6], + "to": [2, 16, 8], + "faces": { + "north": { + "uv": [ + 14, + 8, + 15, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 6, + 8, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 1, + 6, + 2, + 8 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [1, 9, 4], + "to": [2, 15, 6], + "faces": { + "north": { + "uv": [ + 14, + 9, + 15, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 4, + 9, + 6, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 1, + 4, + 2, + 6 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 1, + 10, + 2, + 12 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [1, 10, 3], + "to": [2, 14, 4], + "faces": { + "north": { + "uv": [ + 14, + 10, + 15, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 3, + 10, + 4, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 1, + 3, + 2, + 4 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 1, + 12, + 2, + 13 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [6, 9, 0], + "to": [8, 15, 1], + "faces": { + "north": { + "uv": [ + 8, + 9, + 10, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 0, + 9, + 1, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 6, + 0, + 8, + 1 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 6, + 15, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [5, 10, 0], + "to": [6, 14, 1], + "faces": { + "north": { + "uv": [ + 10, + 10, + 11, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 0, + 10, + 1, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 5, + 0, + 6, + 1 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 5, + 15, + 6, + 16 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [0, 9, 6], + "to": [1, 15, 8], + "faces": { + "north": { + "uv": [ + 15, + 9, + 16, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 6, + 9, + 8, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 0, + 6, + 1, + 8 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 0, + 8, + 1, + 10 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [0, 10, 5], + "to": [1, 14, 6], + "faces": { + "north": { + "uv": [ + 15, + 10, + 16, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 5, + 10, + 6, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 0, + 5, + 1, + 6 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 0, + 10, + 1, + 11 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "corner", + "from": [2, 10, 2], + "to": [3, 14, 3], + "faces": { + "north": { + "uv": [ + 13, + 10, + 14, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 2, + 10, + 3, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 2, + 2, + 3, + 3 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 2, + 13, + 3, + 14 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "middle", + "from": [8, 8, 3], + "to": [13, 16, 8], + "faces": { + "north": { + "uv": [ + 3, + 8, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "east": { + "uv": [ + 8, + 8, + 13, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 8, + 3, + 13, + 8 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [13, 8, 4], + "to": [14, 16, 8], + "faces": { + "north": { + "uv": [ + 2, + 8, + 3, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "east": { + "uv": [ + 8, + 8, + 12, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 13, + 4, + 14, + 8 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [13, 9, 3], + "to": [14, 15, 4], + "faces": { + "north": { + "uv": [ + 2, + 9, + 3, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "east": { + "uv": [ + 12, + 9, + 13, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 13, + 3, + 14, + 4 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 13, + 12, + 14, + 13 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [8, 8, 2], + "to": [12, 16, 3], + "faces": { + "north": { + "uv": [ + 4, + 8, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "east": { + "uv": [ + 13, + 8, + 14, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 8, + 2, + 12, + 3 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [12, 9, 2], + "to": [13, 15, 3], + "faces": { + "north": { + "uv": [ + 3, + 9, + 4, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "east": { + "uv": [ + 13, + 9, + 14, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 12, + 2, + 13, + 3 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 12, + 13, + 13, + 14 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [14, 8, 6], + "to": [15, 16, 8], + "faces": { + "north": { + "uv": [ + 1, + 8, + 2, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "east": { + "uv": [ + 8, + 8, + 10, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 14, + 6, + 15, + 8 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [14, 9, 4], + "to": [15, 15, 6], + "faces": { + "north": { + "uv": [ + 1, + 9, + 2, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "east": { + "uv": [ + 10, + 9, + 12, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 14, + 4, + 15, + 6 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 14, + 10, + 15, + 12 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [14, 10, 3], + "to": [15, 14, 4], + "faces": { + "north": { + "uv": [ + 1, + 10, + 2, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "east": { + "uv": [ + 12, + 10, + 13, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 14, + 3, + 15, + 4 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 14, + 12, + 15, + 13 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [8, 8, 1], + "to": [10, 16, 2], + "faces": { + "north": { + "uv": [ + 6, + 8, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "east": { + "uv": [ + 14, + 8, + 15, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 8, + 1, + 10, + 2 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [10, 9, 1], + "to": [12, 15, 2], + "faces": { + "north": { + "uv": [ + 4, + 9, + 6, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "east": { + "uv": [ + 14, + 9, + 15, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 10, + 1, + 12, + 2 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 10, + 14, + 12, + 15 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [12, 10, 1], + "to": [13, 14, 2], + "faces": { + "north": { + "uv": [ + 3, + 10, + 4, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "east": { + "uv": [ + 14, + 10, + 15, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 12, + 1, + 13, + 2 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 12, + 14, + 13, + 15 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [15, 9, 6], + "to": [16, 15, 8], + "faces": { + "north": { + "uv": [ + 0, + 9, + 1, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "east": { + "uv": [ + 8, + 9, + 10, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 15, + 6, + 16, + 8 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 15, + 8, + 16, + 10 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [15, 10, 5], + "to": [16, 14, 6], + "faces": { + "north": { + "uv": [ + 0, + 10, + 1, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "east": { + "uv": [ + 10, + 10, + 11, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 15, + 5, + 16, + 6 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 15, + 10, + 16, + 11 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [8, 9, 0], + "to": [10, 15, 1], + "faces": { + "north": { + "uv": [ + 6, + 9, + 8, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "east": { + "uv": [ + 15, + 9, + 16, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 8, + 0, + 10, + 1 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 8, + 15, + 10, + 16 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [10, 10, 0], + "to": [11, 14, 1], + "faces": { + "north": { + "uv": [ + 5, + 10, + 6, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "east": { + "uv": [ + 15, + 10, + 16, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 10, + 0, + 11, + 1 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 10, + 15, + 11, + 16 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "corner", + "from": [13, 10, 2], + "to": [14, 14, 3], + "faces": { + "north": { + "uv": [ + 2, + 10, + 3, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "east": { + "uv": [ + 13, + 10, + 14, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 13, + 2, + 14, + 3 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 13, + 13, + 14, + 14 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "middle", + "from": [8, 0, 8], + "to": [13, 8, 13], + "faces": { + "east": { + "uv": [ + 3, + 8, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 8, + 8, + 13, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 8, + 3, + 13, + 8 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [8, 0, 13], + "to": [12, 8, 14], + "faces": { + "east": { + "uv": [ + 2, + 8, + 3, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 8, + 8, + 12, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 8, + 2, + 12, + 3 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [12, 1, 13], + "to": [13, 7, 14], + "faces": { + "east": { + "uv": [ + 2, + 9, + 3, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 12, + 9, + 13, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 12, + 13, + 13, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 12, + 2, + 13, + 3 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [13, 0, 8], + "to": [14, 8, 12], + "faces": { + "east": { + "uv": [ + 4, + 8, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 13, + 8, + 14, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 13, + 4, + 14, + 8 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [13, 1, 12], + "to": [14, 7, 13], + "faces": { + "east": { + "uv": [ + 3, + 9, + 4, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 13, + 9, + 14, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 13, + 12, + 14, + 13 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 13, + 3, + 14, + 4 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [8, 0, 14], + "to": [10, 8, 15], + "faces": { + "east": { + "uv": [ + 1, + 8, + 2, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 8, + 8, + 10, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 8, + 1, + 10, + 2 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [10, 1, 14], + "to": [12, 7, 15], + "faces": { + "east": { + "uv": [ + 1, + 9, + 2, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 10, + 9, + 12, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 10, + 14, + 12, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 10, + 1, + 12, + 2 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [12, 2, 14], + "to": [13, 6, 15], + "faces": { + "east": { + "uv": [ + 1, + 10, + 2, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 12, + 10, + 13, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 12, + 14, + 13, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 12, + 1, + 13, + 2 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [14, 0, 8], + "to": [15, 8, 10], + "faces": { + "east": { + "uv": [ + 6, + 8, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 14, + 8, + 15, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 14, + 6, + 15, + 8 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [14, 1, 10], + "to": [15, 7, 12], + "faces": { + "east": { + "uv": [ + 4, + 9, + 6, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 14, + 9, + 15, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 14, + 10, + 15, + 12 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 14, + 4, + 15, + 6 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [14, 2, 12], + "to": [15, 6, 13], + "faces": { + "east": { + "uv": [ + 3, + 10, + 4, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 14, + 10, + 15, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 14, + 12, + 15, + 13 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 14, + 3, + 15, + 4 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [8, 1, 15], + "to": [10, 7, 16], + "faces": { + "east": { + "uv": [ + 0, + 9, + 1, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 8, + 9, + 10, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 8, + 15, + 10, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 8, + 0, + 10, + 1 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [10, 2, 15], + "to": [11, 6, 16], + "faces": { + "east": { + "uv": [ + 0, + 10, + 1, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 10, + 10, + 11, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 10, + 15, + 11, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 10, + 0, + 11, + 1 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [15, 1, 8], + "to": [16, 7, 10], + "faces": { + "east": { + "uv": [ + 6, + 9, + 8, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 15, + 9, + 16, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 15, + 8, + 16, + 10 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 15, + 6, + 16, + 8 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [15, 2, 10], + "to": [16, 6, 11], + "faces": { + "east": { + "uv": [ + 5, + 10, + 6, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 15, + 10, + 16, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 15, + 10, + 16, + 11 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 15, + 5, + 16, + 6 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "corner", + "from": [13, 2, 13], + "to": [14, 6, 14], + "faces": { + "east": { + "uv": [ + 2, + 10, + 3, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "south": { + "uv": [ + 13, + 10, + 14, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 13, + 13, + 14, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 13, + 2, + 14, + 3 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "middle", + "from": [3, 0, 8], + "to": [8, 8, 13], + "faces": { + "south": { + "uv": [ + 3, + 8, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 8, + 8, + 13, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 3, + 3, + 8, + 8 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [2, 0, 8], + "to": [3, 8, 12], + "faces": { + "south": { + "uv": [ + 2, + 8, + 3, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 8, + 8, + 12, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 2, + 4, + 3, + 8 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [2, 1, 12], + "to": [3, 7, 13], + "faces": { + "south": { + "uv": [ + 2, + 9, + 3, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 12, + 9, + 13, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 2, + 12, + 3, + 13 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 2, + 3, + 3, + 4 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [4, 0, 13], + "to": [8, 8, 14], + "faces": { + "south": { + "uv": [ + 4, + 8, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 13, + 8, + 14, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 4, + 2, + 8, + 3 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [3, 1, 13], + "to": [4, 7, 14], + "faces": { + "south": { + "uv": [ + 3, + 9, + 4, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 13, + 9, + 14, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 3, + 13, + 4, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 3, + 2, + 4, + 3 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [1, 0, 8], + "to": [2, 8, 10], + "faces": { + "south": { + "uv": [ + 1, + 8, + 2, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 8, + 8, + 10, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 1, + 6, + 2, + 8 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [1, 1, 10], + "to": [2, 7, 12], + "faces": { + "south": { + "uv": [ + 1, + 9, + 2, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 10, + 9, + 12, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 1, + 10, + 2, + 12 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 1, + 4, + 2, + 6 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [1, 2, 12], + "to": [2, 6, 13], + "faces": { + "south": { + "uv": [ + 1, + 10, + 2, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 12, + 10, + 13, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 1, + 12, + 2, + 13 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 1, + 3, + 2, + 4 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [6, 0, 14], + "to": [8, 8, 15], + "faces": { + "south": { + "uv": [ + 6, + 8, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 14, + 8, + 15, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 6, + 1, + 8, + 2 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [4, 1, 14], + "to": [6, 7, 15], + "faces": { + "south": { + "uv": [ + 4, + 9, + 6, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 14, + 9, + 15, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 4, + 14, + 6, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 4, + 1, + 6, + 2 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [3, 2, 14], + "to": [4, 6, 15], + "faces": { + "south": { + "uv": [ + 3, + 10, + 4, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 14, + 10, + 15, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 3, + 14, + 4, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 3, + 1, + 4, + 2 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [0, 1, 8], + "to": [1, 7, 10], + "faces": { + "south": { + "uv": [ + 0, + 9, + 1, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 8, + 9, + 10, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 0, + 8, + 1, + 10 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 0, + 6, + 1, + 8 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [0, 2, 10], + "to": [1, 6, 11], + "faces": { + "south": { + "uv": [ + 0, + 10, + 1, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 10, + 10, + 11, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 0, + 10, + 1, + 11 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 0, + 5, + 1, + 6 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [6, 1, 15], + "to": [8, 7, 16], + "faces": { + "south": { + "uv": [ + 6, + 9, + 8, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 15, + 9, + 16, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 6, + 15, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 6, + 0, + 8, + 1 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [5, 2, 15], + "to": [6, 6, 16], + "faces": { + "south": { + "uv": [ + 5, + 10, + 6, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 15, + 10, + 16, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 5, + 15, + 6, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 5, + 0, + 6, + 1 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "corner", + "from": [2, 2, 13], + "to": [3, 6, 14], + "faces": { + "south": { + "uv": [ + 2, + 10, + 3, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 13, + 10, + 14, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 2, + 13, + 3, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 2, + 2, + 3, + 3 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "middle", + "from": [3, 0, 3], + "to": [8, 8, 8], + "faces": { + "north": { + "uv": [ + 8, + 8, + 13, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 3, + 8, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 3, + 8, + 8, + 13 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [4, 0, 2], + "to": [8, 8, 3], + "faces": { + "north": { + "uv": [ + 8, + 8, + 12, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 2, + 8, + 3, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 4, + 13, + 8, + 14 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [3, 1, 2], + "to": [4, 7, 3], + "faces": { + "north": { + "uv": [ + 12, + 9, + 13, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 2, + 9, + 3, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 3, + 2, + 4, + 3 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 3, + 13, + 4, + 14 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [2, 0, 4], + "to": [3, 8, 8], + "faces": { + "north": { + "uv": [ + 13, + 8, + 14, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 4, + 8, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 2, + 8, + 3, + 12 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [2, 1, 3], + "to": [3, 7, 4], + "faces": { + "north": { + "uv": [ + 13, + 9, + 14, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 3, + 9, + 4, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 2, + 3, + 3, + 4 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 2, + 12, + 3, + 13 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [6, 0, 1], + "to": [8, 8, 2], + "faces": { + "north": { + "uv": [ + 8, + 8, + 10, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 1, + 8, + 2, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 6, + 14, + 8, + 15 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [4, 1, 1], + "to": [6, 7, 2], + "faces": { + "north": { + "uv": [ + 10, + 9, + 12, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 1, + 9, + 2, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 4, + 1, + 6, + 2 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 4, + 14, + 6, + 15 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [3, 2, 1], + "to": [4, 6, 2], + "faces": { + "north": { + "uv": [ + 12, + 10, + 13, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 1, + 10, + 2, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 3, + 1, + 4, + 2 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 3, + 14, + 4, + 15 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [1, 0, 6], + "to": [2, 8, 8], + "faces": { + "north": { + "uv": [ + 14, + 8, + 15, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 6, + 8, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 1, + 8, + 2, + 10 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [1, 1, 4], + "to": [2, 7, 6], + "faces": { + "north": { + "uv": [ + 14, + 9, + 15, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 4, + 9, + 6, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 1, + 4, + 2, + 6 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 1, + 10, + 2, + 12 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [1, 2, 3], + "to": [2, 6, 4], + "faces": { + "north": { + "uv": [ + 14, + 10, + 15, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 3, + 10, + 4, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 1, + 3, + 2, + 4 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 1, + 12, + 2, + 13 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [6, 1, 0], + "to": [8, 7, 1], + "faces": { + "north": { + "uv": [ + 8, + 9, + 10, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 0, + 9, + 1, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 6, + 0, + 8, + 1 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 6, + 15, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [5, 2, 0], + "to": [6, 6, 1], + "faces": { + "north": { + "uv": [ + 10, + 10, + 11, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 0, + 10, + 1, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 5, + 0, + 6, + 1 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 5, + 15, + 6, + 16 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [0, 1, 6], + "to": [1, 7, 8], + "faces": { + "north": { + "uv": [ + 15, + 9, + 16, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 6, + 9, + 8, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 0, + 6, + 1, + 8 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 0, + 8, + 1, + 10 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [0, 2, 5], + "to": [1, 6, 6], + "faces": { + "north": { + "uv": [ + 15, + 10, + 16, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 5, + 10, + 6, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 0, + 5, + 1, + 6 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 0, + 10, + 1, + 11 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "corner", + "from": [2, 2, 2], + "to": [3, 6, 3], + "faces": { + "north": { + "uv": [ + 13, + 10, + 14, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "west": { + "uv": [ + 2, + 10, + 3, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 2, + 2, + 3, + 3 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 2, + 13, + 3, + 14 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "middle", + "from": [8, 0, 3], + "to": [13, 8, 8], + "faces": { + "north": { + "uv": [ + 3, + 8, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "east": { + "uv": [ + 8, + 8, + 13, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 8, + 8, + 13, + 13 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [13, 0, 4], + "to": [14, 8, 8], + "faces": { + "north": { + "uv": [ + 2, + 8, + 3, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "east": { + "uv": [ + 8, + 8, + 12, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 13, + 8, + 14, + 12 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [13, 1, 3], + "to": [14, 7, 4], + "faces": { + "north": { + "uv": [ + 2, + 9, + 3, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "east": { + "uv": [ + 12, + 9, + 13, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 13, + 3, + 14, + 4 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 13, + 12, + 14, + 13 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [8, 0, 2], + "to": [12, 8, 3], + "faces": { + "north": { + "uv": [ + 4, + 8, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "east": { + "uv": [ + 13, + 8, + 14, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 8, + 13, + 12, + 14 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "first_layer", + "from": [12, 1, 2], + "to": [13, 7, 3], + "faces": { + "north": { + "uv": [ + 3, + 9, + 4, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "east": { + "uv": [ + 13, + 9, + 14, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 12, + 2, + 13, + 3 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 12, + 13, + 13, + 14 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [14, 0, 6], + "to": [15, 8, 8], + "faces": { + "north": { + "uv": [ + 1, + 8, + 2, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "east": { + "uv": [ + 8, + 8, + 10, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 14, + 8, + 15, + 10 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [14, 1, 4], + "to": [15, 7, 6], + "faces": { + "north": { + "uv": [ + 1, + 9, + 2, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "east": { + "uv": [ + 10, + 9, + 12, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 14, + 4, + 15, + 6 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 14, + 10, + 15, + 12 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [14, 2, 3], + "to": [15, 6, 4], + "faces": { + "north": { + "uv": [ + 1, + 10, + 2, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "east": { + "uv": [ + 12, + 10, + 13, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 14, + 3, + 15, + 4 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 14, + 12, + 15, + 13 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [8, 0, 1], + "to": [10, 8, 2], + "faces": { + "north": { + "uv": [ + 6, + 8, + 8, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "east": { + "uv": [ + 14, + 8, + 15, + 16 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 8, + 14, + 10, + 15 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [10, 1, 1], + "to": [12, 7, 2], + "faces": { + "north": { + "uv": [ + 4, + 9, + 6, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "east": { + "uv": [ + 14, + 9, + 15, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 10, + 1, + 12, + 2 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 10, + 14, + 12, + 15 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "second_layer", + "from": [12, 2, 1], + "to": [13, 6, 2], + "faces": { + "north": { + "uv": [ + 3, + 10, + 4, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "east": { + "uv": [ + 14, + 10, + 15, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 12, + 1, + 13, + 2 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 12, + 14, + 13, + 15 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [15, 1, 6], + "to": [16, 7, 8], + "faces": { + "north": { + "uv": [ + 0, + 9, + 1, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "east": { + "uv": [ + 8, + 9, + 10, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 15, + 6, + 16, + 8 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 15, + 8, + 16, + 10 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [15, 2, 5], + "to": [16, 6, 6], + "faces": { + "north": { + "uv": [ + 0, + 10, + 1, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "east": { + "uv": [ + 10, + 10, + 11, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 15, + 5, + 16, + 6 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 15, + 10, + 16, + 11 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [8, 1, 0], + "to": [10, 7, 1], + "faces": { + "north": { + "uv": [ + 6, + 9, + 8, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "east": { + "uv": [ + 15, + 9, + 16, + 15 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 8, + 0, + 10, + 1 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 8, + 15, + 10, + 16 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "third_layer", + "from": [10, 2, 0], + "to": [11, 6, 1], + "faces": { + "north": { + "uv": [ + 5, + 10, + 6, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "east": { + "uv": [ + 15, + 10, + 16, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 10, + 0, + 11, + 1 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 10, + 15, + 11, + 16 + ], + "texture": "#0", + "tintindex": 0 + } + } + }, + { + "name": "corner", + "from": [13, 2, 2], + "to": [14, 6, 3], + "faces": { + "north": { + "uv": [ + 2, + 10, + 3, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "east": { + "uv": [ + 13, + 10, + 14, + 14 + ], + "texture": "#0", + "tintindex": 0 + }, + "up": { + "uv": [ + 13, + 2, + 14, + 3 + ], + "texture": "#0", + "tintindex": 0 + }, + "down": { + "uv": [ + 13, + 13, + 14, + 14 + ], + "texture": "#0", + "tintindex": 0 + } + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "thirdperson_lefthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson_righthand": { + "rotation": [0, 45, 0], + "scale": [0.4, 0.4, 0.4] + }, + "firstperson_lefthand": { + "rotation": [0, 225, 0], + "scale": [0.4, 0.4, 0.4] + }, + "ground": { + "translation": [0, 3, 0], + "scale": [0.25, 0.25, 0.25] + }, + "gui": { + "rotation": [30, 225, 0], + "scale": [0.625, 0.625, 0.625] + }, + "fixed": { + "scale": [0.5, 0.5, 0.5] + } + }, + "groups": [ + { + "name": "slice_1", + "children": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15] + }, + { + "name": "slice_2", + "children": [16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31] + }, + { + "name": "slice_3", + "children": [32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47] + }, + { + "name": "slice_4", + "children": [48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63] + }, + { + "name": "cheese_block_slices4", + "children": [ + { + "name": "slice_1", + "children": [64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79] + }, + { + "name": "slice_2", + "children": [80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95] + }, + { + "name": "slice_3", + "children": [96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111] + }, + { + "name": "slice_4", + "children": [112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/models/block/churn_down.json b/src/main/resources/assets/growthcraft_milk/models/block/churn_down.json new file mode 100644 index 0000000..a2a0146 --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/models/block/churn_down.json @@ -0,0 +1,3839 @@ +{ + "credit": "Made with Blockbench", + "ambientocclusion": false, + "render_type": "cutout", + "textures": { + "5": "growthcraft_milk:block/oak_planks", + "particle": "growthcraft_milk:block/butter_churn/butter_churn", + "1_0": "growthcraft_milk:block/butter_churn/butter_churn", + "1_1": "growthcraft_milk:block/butter_churn/butter_churn_top", + "missing": "growthcraft:block/missing" + }, + "elements": [ + { + "from": [ + 3, + 0, + 5 + ], + "to": [ + 4, + 1, + 11 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#missing" + }, + "east": { + "uv": [ + 0, + 0, + 6, + 1 + ], + "texture": "#missing" + }, + "south": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#missing" + }, + "west": { + "uv": [ + 0, + 0, + 6, + 1 + ], + "texture": "#missing" + }, + "up": { + "uv": [ + 0, + 0, + 1, + 6 + ], + "texture": "#missing" + }, + "down": { + "uv": [ + 3, + 5, + 4, + 11 + ], + "texture": "#1_1" + } + } + }, + { + "from": [ + 12, + 0, + 5 + ], + "to": [ + 13, + 1, + 11 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#missing" + }, + "east": { + "uv": [ + 0, + 0, + 6, + 1 + ], + "texture": "#missing" + }, + "south": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#missing" + }, + "west": { + "uv": [ + 0, + 0, + 6, + 1 + ], + "texture": "#missing" + }, + "up": { + "uv": [ + 0, + 0, + 1, + 6 + ], + "texture": "#missing" + }, + "down": { + "uv": [ + 12, + 5, + 13, + 11 + ], + "texture": "#1_1" + } + } + }, + { + "from": [ + 5, + 0, + 12 + ], + "to": [ + 11, + 1, + 13 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 6, + 1 + ], + "texture": "#missing" + }, + "east": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#missing" + }, + "south": { + "uv": [ + 0, + 0, + 6, + 1 + ], + "texture": "#missing" + }, + "west": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#missing" + }, + "up": { + "uv": [ + 0, + 0, + 6, + 1 + ], + "texture": "#missing" + }, + "down": { + "uv": [ + 5, + 3, + 11, + 4 + ], + "texture": "#1_1" + } + } + }, + { + "from": [ + 5, + 0, + 3 + ], + "to": [ + 11, + 1, + 4 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 6, + 1 + ], + "texture": "#missing" + }, + "east": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#missing" + }, + "south": { + "uv": [ + 0, + 0, + 6, + 1 + ], + "texture": "#missing" + }, + "west": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#missing" + }, + "up": { + "uv": [ + 0, + 0, + 6, + 1 + ], + "texture": "#missing" + }, + "down": { + "uv": [ + 5, + 12, + 11, + 13 + ], + "texture": "#1_1" + } + } + }, + { + "from": [ + 4, + 0, + 4 + ], + "to": [ + 12, + 1, + 12 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 8, + 1 + ], + "texture": "#missing" + }, + "east": { + "uv": [ + 0, + 0, + 8, + 1 + ], + "texture": "#missing" + }, + "south": { + "uv": [ + 0, + 0, + 8, + 1 + ], + "texture": "#missing" + }, + "west": { + "uv": [ + 0, + 0, + 8, + 1 + ], + "texture": "#missing" + }, + "up": { + "uv": [ + 0, + 0, + 8, + 8 + ], + "texture": "#missing" + }, + "down": { + "uv": [ + 4, + 4, + 12, + 12 + ], + "texture": "#1_1" + } + } + }, + { + "from": [ + 3, + 0, + 4 + ], + "to": [ + 4, + 6, + 5 + ], + "faces": { + "north": { + "uv": [ + 12, + 10, + 13, + 16 + ], + "texture": "#1_0" + }, + "east": { + "uv": [ + 0, + 0, + 1, + 6 + ], + "texture": "#missing" + }, + "south": { + "uv": [ + 0, + 0, + 1, + 6 + ], + "texture": "#missing" + }, + "west": { + "uv": [ + 4, + 10, + 5, + 16 + ], + "texture": "#1_0" + }, + "up": { + "uv": [ + 0, + 3, + 1, + 4 + ], + "texture": "#1_1" + }, + "down": { + "uv": [ + 0, + 11, + 1, + 12 + ], + "texture": "#1_1" + } + } + }, + { + "from": [ + 4, + 0, + 3 + ], + "to": [ + 5, + 6, + 4 + ], + "faces": { + "north": { + "uv": [ + 11, + 10, + 12, + 16 + ], + "texture": "#1_0" + }, + "east": { + "uv": [ + 0, + 0, + 1, + 6 + ], + "texture": "#missing" + }, + "south": { + "uv": [ + 0, + 0, + 1, + 6 + ], + "texture": "#missing" + }, + "west": { + "uv": [ + 3, + 10, + 4, + 16 + ], + "texture": "#1_0" + }, + "up": { + "uv": [ + 4, + 0, + 5, + 1 + ], + "texture": "#1_1" + }, + "down": { + "uv": [ + 4, + 15, + 5, + 16 + ], + "texture": "#1_1" + } + } + }, + { + "from": [ + 5, + 0, + 2 + ], + "to": [ + 11, + 5, + 3 + ], + "faces": { + "north": { + "uv": [ + 5, + 11, + 11, + 16 + ], + "texture": "#1_0" + }, + "east": { + "uv": [ + 13, + 11, + 14, + 16 + ], + "texture": "#1_0" + }, + "south": { + "uv": [ + 0, + 0, + 6, + 5 + ], + "texture": "#missing" + }, + "west": { + "uv": [ + 2, + 11, + 3, + 16 + ], + "texture": "#1_0" + }, + "up": { + "uv": [ + 5, + 0, + 11, + 1 + ], + "texture": "#1_1" + }, + "down": { + "uv": [ + 5, + 15, + 11, + 16 + ], + "texture": "#1_1" + } + } + }, + { + "from": [ + 11, + 0, + 3 + ], + "to": [ + 12, + 6, + 4 + ], + "faces": { + "north": { + "uv": [ + 4, + 10, + 5, + 16 + ], + "texture": "#1_0" + }, + "east": { + "uv": [ + 12, + 10, + 13, + 16 + ], + "texture": "#1_0" + }, + "south": { + "uv": [ + 0, + 0, + 1, + 6 + ], + "texture": "#missing" + }, + "west": { + "uv": [ + 0, + 0, + 1, + 6 + ], + "texture": "#missing" + }, + "up": { + "uv": [ + 11, + 0, + 12, + 1 + ], + "texture": "#1_1" + }, + "down": { + "uv": [ + 11, + 15, + 12, + 16 + ], + "texture": "#1_1" + } + } + }, + { + "from": [ + 12, + 0, + 4 + ], + "to": [ + 13, + 6, + 5 + ], + "faces": { + "north": { + "uv": [ + 3, + 10, + 4, + 16 + ], + "texture": "#1_0" + }, + "east": { + "uv": [ + 11, + 10, + 12, + 16 + ], + "texture": "#1_0" + }, + "south": { + "uv": [ + 0, + 0, + 1, + 6 + ], + "texture": "#missing" + }, + "west": { + "uv": [ + 0, + 0, + 1, + 6 + ], + "texture": "#missing" + }, + "up": { + "uv": [ + 15, + 4, + 16, + 5 + ], + "texture": "#1_1" + }, + "down": { + "uv": [ + 15, + 11, + 16, + 12 + ], + "texture": "#1_1" + } + } + }, + { + "from": [ + 2, + 0, + 5 + ], + "to": [ + 3, + 5, + 11 + ], + "faces": { + "north": { + "uv": [ + 13, + 11, + 14, + 16 + ], + "texture": "#1_0" + }, + "east": { + "uv": [ + 0, + 0, + 6, + 5 + ], + "texture": "#missing" + }, + "south": { + "uv": [ + 2, + 11, + 3, + 16 + ], + "texture": "#1_0" + }, + "west": { + "uv": [ + 5, + 11, + 11, + 16 + ], + "texture": "#1_0" + }, + "up": { + "uv": [ + 0, + 4, + 1, + 10 + ], + "texture": "#1_1" + }, + "down": { + "uv": [ + 0, + 5, + 1, + 11 + ], + "texture": "#1_1" + } + } + }, + { + "from": [ + 12, + 0, + 11 + ], + "to": [ + 13, + 6, + 12 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 1, + 6 + ], + "texture": "#missing" + }, + "east": { + "uv": [ + 4, + 10, + 5, + 16 + ], + "texture": "#1_0" + }, + "south": { + "uv": [ + 12, + 10, + 13, + 16 + ], + "texture": "#1_0" + }, + "west": { + "uv": [ + 0, + 0, + 1, + 6 + ], + "texture": "#missing" + }, + "up": { + "uv": [ + 15, + 11, + 16, + 12 + ], + "texture": "#1_1" + }, + "down": { + "uv": [ + 15, + 4, + 16, + 5 + ], + "texture": "#1_1" + } + } + }, + { + "from": [ + 11, + 0, + 12 + ], + "to": [ + 12, + 6, + 13 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 1, + 6 + ], + "texture": "#missing" + }, + "east": { + "uv": [ + 3, + 10, + 4, + 16 + ], + "texture": "#1_0" + }, + "south": { + "uv": [ + 11, + 10, + 12, + 16 + ], + "texture": "#1_0" + }, + "west": { + "uv": [ + 0, + 0, + 1, + 6 + ], + "texture": "#missing" + }, + "up": { + "uv": [ + 10, + 15, + 11, + 16 + ], + "texture": "#1_1" + }, + "down": { + "uv": [ + 11, + 0, + 12, + 1 + ], + "texture": "#1_1" + } + } + }, + { + "from": [ + 5, + 0, + 13 + ], + "to": [ + 11, + 5, + 14 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 6, + 5 + ], + "texture": "#missing" + }, + "east": { + "uv": [ + 2, + 11, + 3, + 16 + ], + "texture": "#1_0" + }, + "south": { + "uv": [ + 5, + 11, + 11, + 16 + ], + "texture": "#1_0" + }, + "west": { + "uv": [ + 13, + 11, + 14, + 16 + ], + "texture": "#1_0" + }, + "up": { + "uv": [ + 4, + 15, + 10, + 16 + ], + "texture": "#1_1" + }, + "down": { + "uv": [ + 5, + 0, + 11, + 1 + ], + "texture": "#1_1" + } + } + }, + { + "from": [ + 4, + 0, + 12 + ], + "to": [ + 5, + 6, + 13 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 1, + 6 + ], + "texture": "#missing" + }, + "east": { + "uv": [ + 0, + 0, + 1, + 6 + ], + "texture": "#missing" + }, + "south": { + "uv": [ + 4, + 10, + 5, + 16 + ], + "texture": "#1_0" + }, + "west": { + "uv": [ + 12, + 10, + 13, + 16 + ], + "texture": "#1_0" + }, + "up": { + "uv": [ + 3, + 15, + 4, + 16 + ], + "texture": "#1_1" + }, + "down": { + "uv": [ + 4, + 0, + 5, + 1 + ], + "texture": "#1_1" + } + } + }, + { + "from": [ + 3, + 0, + 11 + ], + "to": [ + 4, + 6, + 12 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 1, + 6 + ], + "texture": "#missing" + }, + "east": { + "uv": [ + 0, + 0, + 1, + 6 + ], + "texture": "#missing" + }, + "south": { + "uv": [ + 3, + 10, + 4, + 16 + ], + "texture": "#1_0" + }, + "west": { + "uv": [ + 11, + 10, + 12, + 16 + ], + "texture": "#1_0" + }, + "up": { + "uv": [ + 0, + 10, + 1, + 11 + ], + "texture": "#1_1" + }, + "down": { + "uv": [ + 0, + 4, + 1, + 5 + ], + "texture": "#1_1" + } + } + }, + { + "from": [ + 13, + 0, + 5 + ], + "to": [ + 14, + 5, + 11 + ], + "faces": { + "north": { + "uv": [ + 2, + 11, + 3, + 16 + ], + "texture": "#1_0" + }, + "east": { + "uv": [ + 5, + 11, + 11, + 16 + ], + "texture": "#1_0" + }, + "south": { + "uv": [ + 13, + 11, + 14, + 16 + ], + "texture": "#1_0" + }, + "west": { + "uv": [ + 0, + 0, + 6, + 5 + ], + "texture": "#missing" + }, + "up": { + "uv": [ + 15, + 5, + 16, + 11 + ], + "texture": "#1_1" + }, + "down": { + "uv": [ + 15, + 5, + 16, + 11 + ], + "texture": "#1_1" + } + } + }, + { + "from": [ + 6, + 5, + 2 + ], + "to": [ + 10, + 6, + 3 + ], + "faces": { + "north": { + "uv": [ + 6, + 10, + 10, + 11 + ], + "texture": "#1_0" + }, + "east": { + "uv": [ + 13, + 10, + 14, + 11 + ], + "texture": "#1_0" + }, + "south": { + "uv": [ + 0, + 0, + 4, + 1 + ], + "texture": "#missing" + }, + "west": { + "uv": [ + 2, + 10, + 3, + 11 + ], + "texture": "#1_0" + }, + "up": { + "uv": [ + 6, + 0, + 10, + 1 + ], + "texture": "#1_1" + }, + "down": { + "uv": [ + 0, + 0, + 4, + 1 + ], + "texture": "#missing" + } + } + }, + { + "from": [ + 6, + 5, + 13 + ], + "to": [ + 10, + 6, + 14 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 4, + 1 + ], + "texture": "#missing" + }, + "east": { + "uv": [ + 2, + 10, + 3, + 11 + ], + "texture": "#1_0" + }, + "south": { + "uv": [ + 6, + 10, + 10, + 11 + ], + "texture": "#1_0" + }, + "west": { + "uv": [ + 13, + 10, + 14, + 11 + ], + "texture": "#1_0" + }, + "up": { + "uv": [ + 6, + 15, + 10, + 16 + ], + "texture": "#1_1" + }, + "down": { + "uv": [ + 0, + 0, + 4, + 1 + ], + "texture": "#missing" + } + } + }, + { + "from": [ + 2, + 5, + 6 + ], + "to": [ + 3, + 6, + 10 + ], + "faces": { + "north": { + "uv": [ + 13, + 10, + 14, + 11 + ], + "texture": "#1_0" + }, + "east": { + "uv": [ + 0, + 0, + 4, + 1 + ], + "texture": "#missing" + }, + "south": { + "uv": [ + 2, + 10, + 3, + 11 + ], + "texture": "#1_0" + }, + "west": { + "uv": [ + 6, + 10, + 10, + 11 + ], + "texture": "#1_0" + }, + "up": { + "uv": [ + 0, + 6, + 1, + 10 + ], + "texture": "#1_1" + }, + "down": { + "uv": [ + 0, + 0, + 1, + 4 + ], + "texture": "#missing" + } + } + }, + { + "from": [ + 13, + 5, + 6 + ], + "to": [ + 14, + 6, + 10 + ], + "faces": { + "north": { + "uv": [ + 2, + 10, + 3, + 11 + ], + "texture": "#1_0" + }, + "east": { + "uv": [ + 6, + 10, + 10, + 11 + ], + "texture": "#1_0" + }, + "south": { + "uv": [ + 13, + 10, + 14, + 11 + ], + "texture": "#1_0" + }, + "west": { + "uv": [ + 0, + 0, + 4, + 1 + ], + "texture": "#missing" + }, + "up": { + "uv": [ + 15, + 6, + 16, + 10 + ], + "texture": "#1_1" + }, + "down": { + "uv": [ + 0, + 0, + 1, + 4 + ], + "texture": "#missing" + } + } + }, + { + "from": [ + 5, + 5, + 3 + ], + "to": [ + 11, + 10, + 4 + ], + "faces": { + "north": { + "uv": [ + 5, + 6, + 11, + 11 + ], + "texture": "#1_0" + }, + "east": { + "uv": [ + 12, + 6, + 13, + 11 + ], + "texture": "#1_0" + }, + "south": { + "uv": [ + 0, + 0, + 6, + 5 + ], + "texture": "#missing" + }, + "west": { + "uv": [ + 3, + 6, + 4, + 11 + ], + "texture": "#1_0" + }, + "up": { + "uv": [ + 5, + 0, + 11, + 1 + ], + "texture": "#1_1" + }, + "down": { + "uv": [ + 0, + 0, + 6, + 1 + ], + "texture": "#missing" + } + } + }, + { + "from": [ + 5, + 5, + 12 + ], + "to": [ + 11, + 10, + 13 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 6, + 5 + ], + "texture": "#missing" + }, + "east": { + "uv": [ + 3, + 6, + 4, + 11 + ], + "texture": "#1_0" + }, + "south": { + "uv": [ + 5, + 6, + 11, + 11 + ], + "texture": "#1_0" + }, + "west": { + "uv": [ + 12, + 6, + 13, + 11 + ], + "texture": "#1_0" + }, + "up": { + "uv": [ + 4, + 15, + 10, + 16 + ], + "texture": "#1_1" + }, + "down": { + "uv": [ + 0, + 0, + 6, + 1 + ], + "texture": "#missing" + } + } + }, + { + "from": [ + 3, + 5, + 5 + ], + "to": [ + 4, + 10, + 11 + ], + "faces": { + "north": { + "uv": [ + 12, + 6, + 13, + 11 + ], + "texture": "#1_0" + }, + "east": { + "uv": [ + 0, + 0, + 6, + 5 + ], + "texture": "#missing" + }, + "south": { + "uv": [ + 3, + 6, + 4, + 11 + ], + "texture": "#1_0" + }, + "west": { + "uv": [ + 5, + 6, + 11, + 11 + ], + "texture": "#1_0" + }, + "up": { + "uv": [ + 0, + 4, + 1, + 10 + ], + "texture": "#1_1" + }, + "down": { + "uv": [ + 0, + 0, + 1, + 6 + ], + "texture": "#missing" + } + } + }, + { + "from": [ + 12, + 5, + 5 + ], + "to": [ + 13, + 10, + 11 + ], + "faces": { + "north": { + "uv": [ + 3, + 6, + 4, + 11 + ], + "texture": "#1_0" + }, + "east": { + "uv": [ + 5, + 6, + 11, + 11 + ], + "texture": "#1_0" + }, + "south": { + "uv": [ + 12, + 6, + 13, + 11 + ], + "texture": "#1_0" + }, + "west": { + "uv": [ + 0, + 0, + 6, + 5 + ], + "texture": "#missing" + }, + "up": { + "uv": [ + 15, + 5, + 16, + 11 + ], + "texture": "#1_1" + }, + "down": { + "uv": [ + 0, + 0, + 1, + 6 + ], + "texture": "#missing" + } + } + }, + { + "from": [ + 4, + 6, + 4 + ], + "to": [ + 5, + 11, + 5 + ], + "faces": { + "north": { + "uv": [ + 11, + 5, + 12, + 10 + ], + "texture": "#1_0" + }, + "east": { + "uv": [ + 0, + 0, + 1, + 5 + ], + "texture": "#missing" + }, + "south": { + "uv": [ + 0, + 0, + 1, + 5 + ], + "texture": "#missing" + }, + "west": { + "uv": [ + 4, + 5, + 5, + 10 + ], + "texture": "#1_0" + }, + "up": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#1_1" + }, + "down": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#missing" + } + } + }, + { + "from": [ + 11, + 6, + 4 + ], + "to": [ + 12, + 11, + 5 + ], + "faces": { + "north": { + "uv": [ + 4, + 5, + 5, + 10 + ], + "texture": "#1_0" + }, + "east": { + "uv": [ + 11, + 5, + 12, + 10 + ], + "texture": "#1_0" + }, + "south": { + "uv": [ + 0, + 0, + 1, + 5 + ], + "texture": "#missing" + }, + "west": { + "uv": [ + 0, + 0, + 1, + 5 + ], + "texture": "#missing" + }, + "up": { + "uv": [ + 15, + 0, + 16, + 1 + ], + "texture": "#1_1" + }, + "down": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#missing" + } + } + }, + { + "from": [ + 11, + 6, + 11 + ], + "to": [ + 12, + 11, + 12 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 1, + 5 + ], + "texture": "#missing" + }, + "east": { + "uv": [ + 4, + 5, + 5, + 10 + ], + "texture": "#1_0" + }, + "south": { + "uv": [ + 11, + 5, + 12, + 10 + ], + "texture": "#1_0" + }, + "west": { + "uv": [ + 0, + 0, + 1, + 5 + ], + "texture": "#missing" + }, + "up": { + "uv": [ + 15, + 15, + 16, + 16 + ], + "texture": "#1_1" + }, + "down": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#missing" + } + } + }, + { + "from": [ + 4, + 6, + 11 + ], + "to": [ + 5, + 11, + 12 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 1, + 5 + ], + "texture": "#missing" + }, + "east": { + "uv": [ + 0, + 0, + 1, + 5 + ], + "texture": "#missing" + }, + "south": { + "uv": [ + 4, + 5, + 5, + 10 + ], + "texture": "#1_0" + }, + "west": { + "uv": [ + 11, + 5, + 12, + 10 + ], + "texture": "#1_0" + }, + "up": { + "uv": [ + 0, + 15, + 1, + 16 + ], + "texture": "#1_1" + }, + "down": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#missing" + } + } + }, + { + "from": [ + 6, + 10, + 3 + ], + "to": [ + 10, + 11, + 4 + ], + "faces": { + "north": { + "uv": [ + 6, + 5, + 10, + 6 + ], + "texture": "#1_0" + }, + "east": { + "uv": [ + 12, + 5, + 13, + 6 + ], + "texture": "#1_0" + }, + "south": { + "uv": [ + 0, + 0, + 4, + 1 + ], + "texture": "#missing" + }, + "west": { + "uv": [ + 3, + 5, + 4, + 6 + ], + "texture": "#1_0" + }, + "up": { + "uv": [ + 6, + 0, + 10, + 1 + ], + "texture": "#1_1" + }, + "down": { + "uv": [ + 0, + 0, + 4, + 1 + ], + "texture": "#missing" + } + } + }, + { + "from": [ + 6, + 10, + 12 + ], + "to": [ + 10, + 11, + 13 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 4, + 1 + ], + "texture": "#missing" + }, + "east": { + "uv": [ + 3, + 5, + 4, + 6 + ], + "texture": "#1_0" + }, + "south": { + "uv": [ + 6, + 5, + 10, + 6 + ], + "texture": "#1_0" + }, + "west": { + "uv": [ + 12, + 5, + 13, + 6 + ], + "texture": "#1_0" + }, + "up": { + "uv": [ + 6, + 15, + 10, + 16 + ], + "texture": "#1_1" + }, + "down": { + "uv": [ + 0, + 0, + 4, + 1 + ], + "texture": "#missing" + } + } + }, + { + "from": [ + 3, + 10, + 6 + ], + "to": [ + 4, + 11, + 10 + ], + "faces": { + "north": { + "uv": [ + 12, + 5, + 13, + 6 + ], + "texture": "#1_0" + }, + "east": { + "uv": [ + 0, + 0, + 4, + 1 + ], + "texture": "#missing" + }, + "south": { + "uv": [ + 3, + 5, + 4, + 6 + ], + "texture": "#1_0" + }, + "west": { + "uv": [ + 6, + 5, + 10, + 6 + ], + "texture": "#1_0" + }, + "up": { + "uv": [ + 0, + 6, + 1, + 10 + ], + "texture": "#1_1" + }, + "down": { + "uv": [ + 0, + 0, + 1, + 4 + ], + "texture": "#missing" + } + } + }, + { + "from": [ + 12, + 10, + 6 + ], + "to": [ + 13, + 11, + 10 + ], + "faces": { + "north": { + "uv": [ + 3, + 5, + 4, + 6 + ], + "texture": "#1_0" + }, + "east": { + "uv": [ + 6, + 5, + 10, + 6 + ], + "texture": "#1_0" + }, + "south": { + "uv": [ + 12, + 5, + 13, + 6 + ], + "texture": "#1_0" + }, + "west": { + "uv": [ + 0, + 0, + 4, + 1 + ], + "texture": "#missing" + }, + "up": { + "uv": [ + 15, + 6, + 16, + 10 + ], + "texture": "#1_1" + }, + "down": { + "uv": [ + 0, + 0, + 1, + 4 + ], + "texture": "#missing" + } + } + }, + { + "from": [ + 4, + 10, + 5 + ], + "to": [ + 5, + 15, + 11 + ], + "faces": { + "north": { + "uv": [ + 11, + 1, + 12, + 6 + ], + "texture": "#1_0" + }, + "east": { + "uv": [ + 0, + 0, + 6, + 5 + ], + "texture": "#missing" + }, + "south": { + "uv": [ + 4, + 1, + 5, + 6 + ], + "texture": "#1_0" + }, + "west": { + "uv": [ + 5, + 1, + 11, + 6 + ], + "texture": "#1_0" + }, + "up": { + "uv": [ + 0, + 4, + 1, + 10 + ], + "texture": "#1_1" + }, + "down": { + "uv": [ + 0, + 0, + 1, + 6 + ], + "texture": "#missing" + } + } + }, + { + "from": [ + 11, + 10, + 5 + ], + "to": [ + 12, + 15, + 11 + ], + "faces": { + "north": { + "uv": [ + 4, + 1, + 5, + 6 + ], + "texture": "#1_0" + }, + "east": { + "uv": [ + 5, + 1, + 11, + 6 + ], + "texture": "#1_0" + }, + "south": { + "uv": [ + 11, + 1, + 12, + 6 + ], + "texture": "#1_0" + }, + "west": { + "uv": [ + 0, + 0, + 6, + 5 + ], + "texture": "#missing" + }, + "up": { + "uv": [ + 15, + 5, + 16, + 11 + ], + "texture": "#1_1" + }, + "down": { + "uv": [ + 0, + 0, + 1, + 6 + ], + "texture": "#missing" + } + } + }, + { + "from": [ + 5, + 10, + 4 + ], + "to": [ + 11, + 15, + 5 + ], + "faces": { + "north": { + "uv": [ + 5, + 1, + 11, + 6 + ], + "texture": "#1_0" + }, + "east": { + "uv": [ + 11, + 1, + 12, + 6 + ], + "texture": "#1_0" + }, + "south": { + "uv": [ + 0, + 0, + 6, + 5 + ], + "texture": "#missing" + }, + "west": { + "uv": [ + 4, + 1, + 5, + 6 + ], + "texture": "#1_0" + }, + "up": { + "uv": [ + 5, + 0, + 11, + 1 + ], + "texture": "#1_1" + }, + "down": { + "uv": [ + 0, + 0, + 6, + 1 + ], + "texture": "#missing" + } + } + }, + { + "from": [ + 5, + 10, + 11 + ], + "to": [ + 11, + 15, + 12 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 6, + 5 + ], + "texture": "#missing" + }, + "east": { + "uv": [ + 4, + 1, + 5, + 6 + ], + "texture": "#1_0" + }, + "south": { + "uv": [ + 5, + 1, + 11, + 6 + ], + "texture": "#1_0" + }, + "west": { + "uv": [ + 11, + 1, + 12, + 6 + ], + "texture": "#1_0" + }, + "up": { + "uv": [ + 4, + 15, + 10, + 16 + ], + "texture": "#1_1" + }, + "down": { + "uv": [ + 0, + 0, + 6, + 1 + ], + "texture": "#missing" + } + } + }, + { + "from": [ + 5, + 15, + 5 + ], + "to": [ + 6, + 16, + 6 + ], + "faces": { + "north": { + "uv": [ + 10, + 0, + 11, + 1 + ], + "texture": "#1_0" + }, + "east": { + "uv": [ + 2, + 1, + 3, + 2 + ], + "texture": "#1_1" + }, + "south": { + "uv": [ + 1, + 2, + 2, + 3 + ], + "texture": "#1_1" + }, + "west": { + "uv": [ + 5, + 0, + 6, + 1 + ], + "texture": "#1_0" + }, + "up": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#1_1" + }, + "down": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#missing" + } + } + }, + { + "from": [ + 10, + 15, + 5 + ], + "to": [ + 11, + 16, + 6 + ], + "faces": { + "north": { + "uv": [ + 5, + 0, + 6, + 1 + ], + "texture": "#1_0" + }, + "east": { + "uv": [ + 10, + 0, + 11, + 1 + ], + "texture": "#1_0" + }, + "south": { + "uv": [ + 14, + 2, + 15, + 3 + ], + "texture": "#1_1" + }, + "west": { + "uv": [ + 13, + 1, + 14, + 2 + ], + "texture": "#1_1" + }, + "up": { + "uv": [ + 15, + 0, + 16, + 1 + ], + "texture": "#1_1" + }, + "down": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#missing" + } + } + }, + { + "from": [ + 10, + 15, + 10 + ], + "to": [ + 11, + 16, + 11 + ], + "faces": { + "north": { + "uv": [ + 14, + 13, + 15, + 14 + ], + "texture": "#1_1" + }, + "east": { + "uv": [ + 5, + 0, + 6, + 1 + ], + "texture": "#1_0" + }, + "south": { + "uv": [ + 10, + 0, + 11, + 1 + ], + "texture": "#1_0" + }, + "west": { + "uv": [ + 13, + 14, + 14, + 15 + ], + "texture": "#1_1" + }, + "up": { + "uv": [ + 15, + 15, + 16, + 16 + ], + "texture": "#1_1" + }, + "down": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#missing" + } + } + }, + { + "from": [ + 5, + 15, + 10 + ], + "to": [ + 6, + 16, + 11 + ], + "faces": { + "north": { + "uv": [ + 1, + 13, + 2, + 14 + ], + "texture": "#1_1" + }, + "east": { + "uv": [ + 2, + 14, + 3, + 15 + ], + "texture": "#1_1" + }, + "south": { + "uv": [ + 5, + 0, + 6, + 1 + ], + "texture": "#1_0" + }, + "west": { + "uv": [ + 10, + 0, + 11, + 1 + ], + "texture": "#1_0" + }, + "up": { + "uv": [ + 0, + 15, + 1, + 16 + ], + "texture": "#1_1" + }, + "down": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#missing" + } + } + }, + { + "from": [ + 6, + 15, + 4 + ], + "to": [ + 10, + 16, + 5 + ], + "faces": { + "north": { + "uv": [ + 6, + 0, + 10, + 1 + ], + "texture": "#1_0" + }, + "east": { + "uv": [ + 11, + 0, + 12, + 1 + ], + "texture": "#1_0" + }, + "south": { + "uv": [ + 6, + 1, + 10, + 2 + ], + "texture": "#1_1" + }, + "west": { + "uv": [ + 4, + 0, + 5, + 1 + ], + "texture": "#1_0" + }, + "up": { + "uv": [ + 6, + 0, + 10, + 1 + ], + "texture": "#1_1" + }, + "down": { + "uv": [ + 0, + 0, + 4, + 1 + ], + "texture": "#missing" + } + } + }, + { + "from": [ + 6, + 15, + 11 + ], + "to": [ + 10, + 16, + 12 + ], + "faces": { + "north": { + "uv": [ + 6, + 14, + 10, + 15 + ], + "texture": "#1_1" + }, + "east": { + "uv": [ + 4, + 0, + 5, + 1 + ], + "texture": "#1_0" + }, + "south": { + "uv": [ + 6, + 0, + 10, + 1 + ], + "texture": "#1_0" + }, + "west": { + "uv": [ + 11, + 0, + 12, + 1 + ], + "texture": "#1_0" + }, + "up": { + "uv": [ + 6, + 15, + 10, + 16 + ], + "texture": "#1_1" + }, + "down": { + "uv": [ + 0, + 0, + 4, + 1 + ], + "texture": "#missing" + } + } + }, + { + "from": [ + 4, + 15, + 6 + ], + "to": [ + 5, + 16, + 10 + ], + "faces": { + "north": { + "uv": [ + 11, + 0, + 12, + 1 + ], + "texture": "#1_0" + }, + "east": { + "uv": [ + 1, + 6, + 2, + 10 + ], + "rotation": 90, + "texture": "#1_1" + }, + "south": { + "uv": [ + 4, + 0, + 5, + 1 + ], + "texture": "#1_0" + }, + "west": { + "uv": [ + 6, + 0, + 10, + 1 + ], + "texture": "#1_0" + }, + "up": { + "uv": [ + 0, + 6, + 1, + 10 + ], + "texture": "#1_1" + }, + "down": { + "uv": [ + 0, + 0, + 1, + 4 + ], + "texture": "#missing" + } + } + }, + { + "from": [ + 11, + 15, + 6 + ], + "to": [ + 12, + 16, + 10 + ], + "faces": { + "north": { + "uv": [ + 4, + 0, + 5, + 1 + ], + "texture": "#1_0" + }, + "east": { + "uv": [ + 6, + 0, + 10, + 1 + ], + "texture": "#1_0" + }, + "south": { + "uv": [ + 11, + 0, + 12, + 1 + ], + "texture": "#1_0" + }, + "west": { + "uv": [ + 14, + 6, + 15, + 10 + ], + "rotation": 270, + "texture": "#1_1" + }, + "up": { + "uv": [ + 15, + 6, + 16, + 10 + ], + "texture": "#1_1" + }, + "down": { + "uv": [ + 0, + 0, + 1, + 4 + ], + "texture": "#missing" + } + } + }, + { + "from": [ + 9, + 13, + 6 + ], + "to": [ + 10, + 14, + 10 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#missing" + }, + "east": { + "uv": [ + 0, + 0, + 4, + 1 + ], + "texture": "#missing" + }, + "south": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#missing" + }, + "west": { + "uv": [ + 6, + 8, + 10, + 9 + ], + "texture": "#1_1" + }, + "up": { + "uv": [ + 9, + 6, + 10, + 10 + ], + "texture": "#1_1" + }, + "down": { + "uv": [ + 0, + 0, + 1, + 4 + ], + "texture": "#missing" + } + } + }, + { + "from": [ + 10, + 14, + 6 + ], + "to": [ + 11, + 15, + 10 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#missing" + }, + "east": { + "uv": [ + 0, + 0, + 4, + 1 + ], + "texture": "#missing" + }, + "south": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#missing" + }, + "west": { + "uv": [ + 12, + 6, + 13, + 10 + ], + "rotation": 270, + "texture": "#1_1" + }, + "up": { + "uv": [ + 13, + 6, + 14, + 10 + ], + "texture": "#1_1" + }, + "down": { + "uv": [ + 0, + 0, + 1, + 4 + ], + "texture": "#missing" + } + } + }, + { + "from": [ + 5, + 14, + 6 + ], + "to": [ + 6, + 15, + 10 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#missing" + }, + "east": { + "uv": [ + 3, + 6, + 4, + 10 + ], + "rotation": 90, + "texture": "#1_1" + }, + "south": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#missing" + }, + "west": { + "uv": [ + 0, + 0, + 4, + 1 + ], + "texture": "#missing" + }, + "up": { + "uv": [ + 2, + 6, + 3, + 10 + ], + "texture": "#1_1" + }, + "down": { + "uv": [ + 0, + 0, + 1, + 4 + ], + "texture": "#missing" + } + } + }, + { + "from": [ + 6, + 14, + 10 + ], + "to": [ + 10, + 15, + 11 + ], + "faces": { + "north": { + "uv": [ + 6, + 12, + 10, + 13 + ], + "texture": "#1_1" + }, + "east": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#missing" + }, + "south": { + "uv": [ + 0, + 0, + 4, + 1 + ], + "texture": "#missing" + }, + "west": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#missing" + }, + "up": { + "uv": [ + 6, + 13, + 10, + 14 + ], + "texture": "#1_1" + }, + "down": { + "uv": [ + 0, + 0, + 4, + 1 + ], + "texture": "#missing" + } + } + }, + { + "from": [ + 6, + 14, + 5 + ], + "to": [ + 10, + 15, + 6 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 4, + 1 + ], + "texture": "#missing" + }, + "east": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#missing" + }, + "south": { + "uv": [ + 6, + 3, + 10, + 4 + ], + "texture": "#1_1" + }, + "west": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#missing" + }, + "up": { + "uv": [ + 6, + 2, + 10, + 3 + ], + "texture": "#1_1" + }, + "down": { + "uv": [ + 0, + 0, + 4, + 1 + ], + "texture": "#missing" + } + } + }, + { + "from": [ + 6, + 13, + 6 + ], + "to": [ + 7, + 14, + 10 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#missing" + }, + "east": { + "uv": [ + 6, + 7, + 10, + 8 + ], + "texture": "#1_1" + }, + "south": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#missing" + }, + "west": { + "uv": [ + 0, + 0, + 4, + 1 + ], + "texture": "#missing" + }, + "up": { + "uv": [ + 6, + 6, + 7, + 10 + ], + "texture": "#1_1" + }, + "down": { + "uv": [ + 0, + 0, + 1, + 4 + ], + "texture": "#missing" + } + } + }, + { + "from": [ + 7, + 13, + 9 + ], + "to": [ + 9, + 14, + 10 + ], + "faces": { + "north": { + "uv": [ + 7, + 8, + 9, + 9 + ], + "texture": "#1_1" + }, + "east": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#missing" + }, + "south": { + "uv": [ + 0, + 0, + 2, + 1 + ], + "texture": "#missing" + }, + "west": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#missing" + }, + "up": { + "uv": [ + 7, + 9, + 9, + 10 + ], + "texture": "#1_1" + }, + "down": { + "uv": [ + 0, + 0, + 2, + 1 + ], + "texture": "#missing" + } + } + }, + { + "from": [ + 7, + 13, + 6 + ], + "to": [ + 9, + 14, + 7 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 2, + 1 + ], + "texture": "#missing" + }, + "east": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#missing" + }, + "south": { + "uv": [ + 7, + 7, + 9, + 8 + ], + "texture": "#1_1" + }, + "west": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#missing" + }, + "up": { + "uv": [ + 7, + 6, + 9, + 7 + ], + "texture": "#1_1" + }, + "down": { + "uv": [ + 0, + 0, + 2, + 1 + ], + "texture": "#missing" + } + } + }, + { + "from": [ + 7, + 4, + 7 + ], + "to": [ + 9, + 20, + 9 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 15, + 23, + 15 + ] + }, + "faces": { + "north": { + "uv": [ + 0, + 0, + 2, + 16 + ], + "texture": "#5" + }, + "east": { + "uv": [ + 6, + 0, + 8, + 16 + ], + "texture": "#5" + }, + "south": { + "uv": [ + 3, + 0, + 5, + 16 + ], + "texture": "#5" + }, + "west": { + "uv": [ + 4, + 0, + 6, + 16 + ], + "texture": "#5" + }, + "up": { + "uv": [ + 5, + 5, + 7, + 7 + ], + "texture": "#5" + }, + "down": { + "uv": [ + 8, + 8, + 10, + 10 + ], + "texture": "#5" + } + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [ + 75, + 45, + 0 + ], + "translation": [ + 0, + 2.5, + 0 + ], + "scale": [ + 0.375, + 0.375, + 0.375 + ] + }, + "firstperson_righthand": { + "rotation": [ + 0, + 45, + 0 + ], + "scale": [ + 0.4, + 0.4, + 0.4 + ] + }, + "firstperson_lefthand": { + "rotation": [ + 0, + 225, + 0 + ], + "scale": [ + 0.4, + 0.4, + 0.4 + ] + }, + "ground": { + "translation": [ + 0, + 3, + 0 + ], + "scale": [ + 0.25, + 0.25, + 0.25 + ] + }, + "gui": { + "rotation": [ + 30, + 225, + 0 + ], + "scale": [ + 0.625, + 0.625, + 0.625 + ] + }, + "fixed": { + "scale": [ + 0.5, + 0.5, + 0.5 + ] + } + }, + "groups": [ + { + "name": "churn_up", + "origin": [ + 8, + 8, + 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, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52 + ] + }, + 53 + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/models/block/churn_up.json b/src/main/resources/assets/growthcraft_milk/models/block/churn_up.json new file mode 100644 index 0000000..f221d34 --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/models/block/churn_up.json @@ -0,0 +1,3839 @@ +{ + "credit": "Made with Blockbench", + "ambientocclusion": false, + "render_type": "cutout", + "textures": { + "5": "growthcraft_milk:block/oak_planks", + "particle": "growthcraft_milk:block/butter_churn/butter_churn", + "1_0": "growthcraft_milk:block/butter_churn/butter_churn", + "1_1": "growthcraft_milk:block/butter_churn/butter_churn_top", + "missing": "growthcraft:block/missing" + }, + "elements": [ + { + "from": [ + 3, + 0, + 5 + ], + "to": [ + 4, + 1, + 11 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#missing" + }, + "east": { + "uv": [ + 0, + 0, + 6, + 1 + ], + "texture": "#missing" + }, + "south": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#missing" + }, + "west": { + "uv": [ + 0, + 0, + 6, + 1 + ], + "texture": "#missing" + }, + "up": { + "uv": [ + 0, + 0, + 1, + 6 + ], + "texture": "#missing" + }, + "down": { + "uv": [ + 3, + 5, + 4, + 11 + ], + "texture": "#1_1" + } + } + }, + { + "from": [ + 12, + 0, + 5 + ], + "to": [ + 13, + 1, + 11 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#missing" + }, + "east": { + "uv": [ + 0, + 0, + 6, + 1 + ], + "texture": "#missing" + }, + "south": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#missing" + }, + "west": { + "uv": [ + 0, + 0, + 6, + 1 + ], + "texture": "#missing" + }, + "up": { + "uv": [ + 0, + 0, + 1, + 6 + ], + "texture": "#missing" + }, + "down": { + "uv": [ + 12, + 5, + 13, + 11 + ], + "texture": "#1_1" + } + } + }, + { + "from": [ + 5, + 0, + 12 + ], + "to": [ + 11, + 1, + 13 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 6, + 1 + ], + "texture": "#missing" + }, + "east": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#missing" + }, + "south": { + "uv": [ + 0, + 0, + 6, + 1 + ], + "texture": "#missing" + }, + "west": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#missing" + }, + "up": { + "uv": [ + 0, + 0, + 6, + 1 + ], + "texture": "#missing" + }, + "down": { + "uv": [ + 5, + 3, + 11, + 4 + ], + "texture": "#1_1" + } + } + }, + { + "from": [ + 5, + 0, + 3 + ], + "to": [ + 11, + 1, + 4 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 6, + 1 + ], + "texture": "#missing" + }, + "east": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#missing" + }, + "south": { + "uv": [ + 0, + 0, + 6, + 1 + ], + "texture": "#missing" + }, + "west": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#missing" + }, + "up": { + "uv": [ + 0, + 0, + 6, + 1 + ], + "texture": "#missing" + }, + "down": { + "uv": [ + 5, + 12, + 11, + 13 + ], + "texture": "#1_1" + } + } + }, + { + "from": [ + 4, + 0, + 4 + ], + "to": [ + 12, + 1, + 12 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 8, + 1 + ], + "texture": "#missing" + }, + "east": { + "uv": [ + 0, + 0, + 8, + 1 + ], + "texture": "#missing" + }, + "south": { + "uv": [ + 0, + 0, + 8, + 1 + ], + "texture": "#missing" + }, + "west": { + "uv": [ + 0, + 0, + 8, + 1 + ], + "texture": "#missing" + }, + "up": { + "uv": [ + 0, + 0, + 8, + 8 + ], + "texture": "#missing" + }, + "down": { + "uv": [ + 4, + 4, + 12, + 12 + ], + "texture": "#1_1" + } + } + }, + { + "from": [ + 3, + 0, + 4 + ], + "to": [ + 4, + 6, + 5 + ], + "faces": { + "north": { + "uv": [ + 12, + 10, + 13, + 16 + ], + "texture": "#1_0" + }, + "east": { + "uv": [ + 0, + 0, + 1, + 6 + ], + "texture": "#missing" + }, + "south": { + "uv": [ + 0, + 0, + 1, + 6 + ], + "texture": "#missing" + }, + "west": { + "uv": [ + 4, + 10, + 5, + 16 + ], + "texture": "#1_0" + }, + "up": { + "uv": [ + 0, + 3, + 1, + 4 + ], + "texture": "#1_1" + }, + "down": { + "uv": [ + 0, + 11, + 1, + 12 + ], + "texture": "#1_1" + } + } + }, + { + "from": [ + 4, + 0, + 3 + ], + "to": [ + 5, + 6, + 4 + ], + "faces": { + "north": { + "uv": [ + 11, + 10, + 12, + 16 + ], + "texture": "#1_0" + }, + "east": { + "uv": [ + 0, + 0, + 1, + 6 + ], + "texture": "#missing" + }, + "south": { + "uv": [ + 0, + 0, + 1, + 6 + ], + "texture": "#missing" + }, + "west": { + "uv": [ + 3, + 10, + 4, + 16 + ], + "texture": "#1_0" + }, + "up": { + "uv": [ + 4, + 0, + 5, + 1 + ], + "texture": "#1_1" + }, + "down": { + "uv": [ + 4, + 15, + 5, + 16 + ], + "texture": "#1_1" + } + } + }, + { + "from": [ + 5, + 0, + 2 + ], + "to": [ + 11, + 5, + 3 + ], + "faces": { + "north": { + "uv": [ + 5, + 11, + 11, + 16 + ], + "texture": "#1_0" + }, + "east": { + "uv": [ + 13, + 11, + 14, + 16 + ], + "texture": "#1_0" + }, + "south": { + "uv": [ + 0, + 0, + 6, + 5 + ], + "texture": "#missing" + }, + "west": { + "uv": [ + 2, + 11, + 3, + 16 + ], + "texture": "#1_0" + }, + "up": { + "uv": [ + 5, + 0, + 11, + 1 + ], + "texture": "#1_1" + }, + "down": { + "uv": [ + 5, + 15, + 11, + 16 + ], + "texture": "#1_1" + } + } + }, + { + "from": [ + 11, + 0, + 3 + ], + "to": [ + 12, + 6, + 4 + ], + "faces": { + "north": { + "uv": [ + 4, + 10, + 5, + 16 + ], + "texture": "#1_0" + }, + "east": { + "uv": [ + 12, + 10, + 13, + 16 + ], + "texture": "#1_0" + }, + "south": { + "uv": [ + 0, + 0, + 1, + 6 + ], + "texture": "#missing" + }, + "west": { + "uv": [ + 0, + 0, + 1, + 6 + ], + "texture": "#missing" + }, + "up": { + "uv": [ + 11, + 0, + 12, + 1 + ], + "texture": "#1_1" + }, + "down": { + "uv": [ + 11, + 15, + 12, + 16 + ], + "texture": "#1_1" + } + } + }, + { + "from": [ + 12, + 0, + 4 + ], + "to": [ + 13, + 6, + 5 + ], + "faces": { + "north": { + "uv": [ + 3, + 10, + 4, + 16 + ], + "texture": "#1_0" + }, + "east": { + "uv": [ + 11, + 10, + 12, + 16 + ], + "texture": "#1_0" + }, + "south": { + "uv": [ + 0, + 0, + 1, + 6 + ], + "texture": "#missing" + }, + "west": { + "uv": [ + 0, + 0, + 1, + 6 + ], + "texture": "#missing" + }, + "up": { + "uv": [ + 15, + 4, + 16, + 5 + ], + "texture": "#1_1" + }, + "down": { + "uv": [ + 15, + 11, + 16, + 12 + ], + "texture": "#1_1" + } + } + }, + { + "from": [ + 2, + 0, + 5 + ], + "to": [ + 3, + 5, + 11 + ], + "faces": { + "north": { + "uv": [ + 13, + 11, + 14, + 16 + ], + "texture": "#1_0" + }, + "east": { + "uv": [ + 0, + 0, + 6, + 5 + ], + "texture": "#missing" + }, + "south": { + "uv": [ + 2, + 11, + 3, + 16 + ], + "texture": "#1_0" + }, + "west": { + "uv": [ + 5, + 11, + 11, + 16 + ], + "texture": "#1_0" + }, + "up": { + "uv": [ + 0, + 4, + 1, + 10 + ], + "texture": "#1_1" + }, + "down": { + "uv": [ + 0, + 5, + 1, + 11 + ], + "texture": "#1_1" + } + } + }, + { + "from": [ + 12, + 0, + 11 + ], + "to": [ + 13, + 6, + 12 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 1, + 6 + ], + "texture": "#missing" + }, + "east": { + "uv": [ + 4, + 10, + 5, + 16 + ], + "texture": "#1_0" + }, + "south": { + "uv": [ + 12, + 10, + 13, + 16 + ], + "texture": "#1_0" + }, + "west": { + "uv": [ + 0, + 0, + 1, + 6 + ], + "texture": "#missing" + }, + "up": { + "uv": [ + 15, + 11, + 16, + 12 + ], + "texture": "#1_1" + }, + "down": { + "uv": [ + 15, + 4, + 16, + 5 + ], + "texture": "#1_1" + } + } + }, + { + "from": [ + 11, + 0, + 12 + ], + "to": [ + 12, + 6, + 13 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 1, + 6 + ], + "texture": "#missing" + }, + "east": { + "uv": [ + 3, + 10, + 4, + 16 + ], + "texture": "#1_0" + }, + "south": { + "uv": [ + 11, + 10, + 12, + 16 + ], + "texture": "#1_0" + }, + "west": { + "uv": [ + 0, + 0, + 1, + 6 + ], + "texture": "#missing" + }, + "up": { + "uv": [ + 10, + 15, + 11, + 16 + ], + "texture": "#1_1" + }, + "down": { + "uv": [ + 11, + 0, + 12, + 1 + ], + "texture": "#1_1" + } + } + }, + { + "from": [ + 5, + 0, + 13 + ], + "to": [ + 11, + 5, + 14 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 6, + 5 + ], + "texture": "#missing" + }, + "east": { + "uv": [ + 2, + 11, + 3, + 16 + ], + "texture": "#1_0" + }, + "south": { + "uv": [ + 5, + 11, + 11, + 16 + ], + "texture": "#1_0" + }, + "west": { + "uv": [ + 13, + 11, + 14, + 16 + ], + "texture": "#1_0" + }, + "up": { + "uv": [ + 4, + 15, + 10, + 16 + ], + "texture": "#1_1" + }, + "down": { + "uv": [ + 5, + 0, + 11, + 1 + ], + "texture": "#1_1" + } + } + }, + { + "from": [ + 4, + 0, + 12 + ], + "to": [ + 5, + 6, + 13 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 1, + 6 + ], + "texture": "#missing" + }, + "east": { + "uv": [ + 0, + 0, + 1, + 6 + ], + "texture": "#missing" + }, + "south": { + "uv": [ + 4, + 10, + 5, + 16 + ], + "texture": "#1_0" + }, + "west": { + "uv": [ + 12, + 10, + 13, + 16 + ], + "texture": "#1_0" + }, + "up": { + "uv": [ + 3, + 15, + 4, + 16 + ], + "texture": "#1_1" + }, + "down": { + "uv": [ + 4, + 0, + 5, + 1 + ], + "texture": "#1_1" + } + } + }, + { + "from": [ + 3, + 0, + 11 + ], + "to": [ + 4, + 6, + 12 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 1, + 6 + ], + "texture": "#missing" + }, + "east": { + "uv": [ + 0, + 0, + 1, + 6 + ], + "texture": "#missing" + }, + "south": { + "uv": [ + 3, + 10, + 4, + 16 + ], + "texture": "#1_0" + }, + "west": { + "uv": [ + 11, + 10, + 12, + 16 + ], + "texture": "#1_0" + }, + "up": { + "uv": [ + 0, + 10, + 1, + 11 + ], + "texture": "#1_1" + }, + "down": { + "uv": [ + 0, + 4, + 1, + 5 + ], + "texture": "#1_1" + } + } + }, + { + "from": [ + 13, + 0, + 5 + ], + "to": [ + 14, + 5, + 11 + ], + "faces": { + "north": { + "uv": [ + 2, + 11, + 3, + 16 + ], + "texture": "#1_0" + }, + "east": { + "uv": [ + 5, + 11, + 11, + 16 + ], + "texture": "#1_0" + }, + "south": { + "uv": [ + 13, + 11, + 14, + 16 + ], + "texture": "#1_0" + }, + "west": { + "uv": [ + 0, + 0, + 6, + 5 + ], + "texture": "#missing" + }, + "up": { + "uv": [ + 15, + 5, + 16, + 11 + ], + "texture": "#1_1" + }, + "down": { + "uv": [ + 15, + 5, + 16, + 11 + ], + "texture": "#1_1" + } + } + }, + { + "from": [ + 6, + 5, + 2 + ], + "to": [ + 10, + 6, + 3 + ], + "faces": { + "north": { + "uv": [ + 6, + 10, + 10, + 11 + ], + "texture": "#1_0" + }, + "east": { + "uv": [ + 13, + 10, + 14, + 11 + ], + "texture": "#1_0" + }, + "south": { + "uv": [ + 0, + 0, + 4, + 1 + ], + "texture": "#missing" + }, + "west": { + "uv": [ + 2, + 10, + 3, + 11 + ], + "texture": "#1_0" + }, + "up": { + "uv": [ + 6, + 0, + 10, + 1 + ], + "texture": "#1_1" + }, + "down": { + "uv": [ + 0, + 0, + 4, + 1 + ], + "texture": "#missing" + } + } + }, + { + "from": [ + 6, + 5, + 13 + ], + "to": [ + 10, + 6, + 14 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 4, + 1 + ], + "texture": "#missing" + }, + "east": { + "uv": [ + 2, + 10, + 3, + 11 + ], + "texture": "#1_0" + }, + "south": { + "uv": [ + 6, + 10, + 10, + 11 + ], + "texture": "#1_0" + }, + "west": { + "uv": [ + 13, + 10, + 14, + 11 + ], + "texture": "#1_0" + }, + "up": { + "uv": [ + 6, + 15, + 10, + 16 + ], + "texture": "#1_1" + }, + "down": { + "uv": [ + 0, + 0, + 4, + 1 + ], + "texture": "#missing" + } + } + }, + { + "from": [ + 2, + 5, + 6 + ], + "to": [ + 3, + 6, + 10 + ], + "faces": { + "north": { + "uv": [ + 13, + 10, + 14, + 11 + ], + "texture": "#1_0" + }, + "east": { + "uv": [ + 0, + 0, + 4, + 1 + ], + "texture": "#missing" + }, + "south": { + "uv": [ + 2, + 10, + 3, + 11 + ], + "texture": "#1_0" + }, + "west": { + "uv": [ + 6, + 10, + 10, + 11 + ], + "texture": "#1_0" + }, + "up": { + "uv": [ + 0, + 6, + 1, + 10 + ], + "texture": "#1_1" + }, + "down": { + "uv": [ + 0, + 0, + 1, + 4 + ], + "texture": "#missing" + } + } + }, + { + "from": [ + 13, + 5, + 6 + ], + "to": [ + 14, + 6, + 10 + ], + "faces": { + "north": { + "uv": [ + 2, + 10, + 3, + 11 + ], + "texture": "#1_0" + }, + "east": { + "uv": [ + 6, + 10, + 10, + 11 + ], + "texture": "#1_0" + }, + "south": { + "uv": [ + 13, + 10, + 14, + 11 + ], + "texture": "#1_0" + }, + "west": { + "uv": [ + 0, + 0, + 4, + 1 + ], + "texture": "#missing" + }, + "up": { + "uv": [ + 15, + 6, + 16, + 10 + ], + "texture": "#1_1" + }, + "down": { + "uv": [ + 0, + 0, + 1, + 4 + ], + "texture": "#missing" + } + } + }, + { + "from": [ + 5, + 5, + 3 + ], + "to": [ + 11, + 10, + 4 + ], + "faces": { + "north": { + "uv": [ + 5, + 6, + 11, + 11 + ], + "texture": "#1_0" + }, + "east": { + "uv": [ + 12, + 6, + 13, + 11 + ], + "texture": "#1_0" + }, + "south": { + "uv": [ + 0, + 0, + 6, + 5 + ], + "texture": "#missing" + }, + "west": { + "uv": [ + 3, + 6, + 4, + 11 + ], + "texture": "#1_0" + }, + "up": { + "uv": [ + 5, + 0, + 11, + 1 + ], + "texture": "#1_1" + }, + "down": { + "uv": [ + 0, + 0, + 6, + 1 + ], + "texture": "#missing" + } + } + }, + { + "from": [ + 5, + 5, + 12 + ], + "to": [ + 11, + 10, + 13 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 6, + 5 + ], + "texture": "#missing" + }, + "east": { + "uv": [ + 3, + 6, + 4, + 11 + ], + "texture": "#1_0" + }, + "south": { + "uv": [ + 5, + 6, + 11, + 11 + ], + "texture": "#1_0" + }, + "west": { + "uv": [ + 12, + 6, + 13, + 11 + ], + "texture": "#1_0" + }, + "up": { + "uv": [ + 4, + 15, + 10, + 16 + ], + "texture": "#1_1" + }, + "down": { + "uv": [ + 0, + 0, + 6, + 1 + ], + "texture": "#missing" + } + } + }, + { + "from": [ + 3, + 5, + 5 + ], + "to": [ + 4, + 10, + 11 + ], + "faces": { + "north": { + "uv": [ + 12, + 6, + 13, + 11 + ], + "texture": "#1_0" + }, + "east": { + "uv": [ + 0, + 0, + 6, + 5 + ], + "texture": "#missing" + }, + "south": { + "uv": [ + 3, + 6, + 4, + 11 + ], + "texture": "#1_0" + }, + "west": { + "uv": [ + 5, + 6, + 11, + 11 + ], + "texture": "#1_0" + }, + "up": { + "uv": [ + 0, + 4, + 1, + 10 + ], + "texture": "#1_1" + }, + "down": { + "uv": [ + 0, + 0, + 1, + 6 + ], + "texture": "#missing" + } + } + }, + { + "from": [ + 12, + 5, + 5 + ], + "to": [ + 13, + 10, + 11 + ], + "faces": { + "north": { + "uv": [ + 3, + 6, + 4, + 11 + ], + "texture": "#1_0" + }, + "east": { + "uv": [ + 5, + 6, + 11, + 11 + ], + "texture": "#1_0" + }, + "south": { + "uv": [ + 12, + 6, + 13, + 11 + ], + "texture": "#1_0" + }, + "west": { + "uv": [ + 0, + 0, + 6, + 5 + ], + "texture": "#missing" + }, + "up": { + "uv": [ + 15, + 5, + 16, + 11 + ], + "texture": "#1_1" + }, + "down": { + "uv": [ + 0, + 0, + 1, + 6 + ], + "texture": "#missing" + } + } + }, + { + "from": [ + 4, + 6, + 4 + ], + "to": [ + 5, + 11, + 5 + ], + "faces": { + "north": { + "uv": [ + 11, + 5, + 12, + 10 + ], + "texture": "#1_0" + }, + "east": { + "uv": [ + 0, + 0, + 1, + 5 + ], + "texture": "#missing" + }, + "south": { + "uv": [ + 0, + 0, + 1, + 5 + ], + "texture": "#missing" + }, + "west": { + "uv": [ + 4, + 5, + 5, + 10 + ], + "texture": "#1_0" + }, + "up": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#1_1" + }, + "down": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#missing" + } + } + }, + { + "from": [ + 11, + 6, + 4 + ], + "to": [ + 12, + 11, + 5 + ], + "faces": { + "north": { + "uv": [ + 4, + 5, + 5, + 10 + ], + "texture": "#1_0" + }, + "east": { + "uv": [ + 11, + 5, + 12, + 10 + ], + "texture": "#1_0" + }, + "south": { + "uv": [ + 0, + 0, + 1, + 5 + ], + "texture": "#missing" + }, + "west": { + "uv": [ + 0, + 0, + 1, + 5 + ], + "texture": "#missing" + }, + "up": { + "uv": [ + 15, + 0, + 16, + 1 + ], + "texture": "#1_1" + }, + "down": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#missing" + } + } + }, + { + "from": [ + 11, + 6, + 11 + ], + "to": [ + 12, + 11, + 12 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 1, + 5 + ], + "texture": "#missing" + }, + "east": { + "uv": [ + 4, + 5, + 5, + 10 + ], + "texture": "#1_0" + }, + "south": { + "uv": [ + 11, + 5, + 12, + 10 + ], + "texture": "#1_0" + }, + "west": { + "uv": [ + 0, + 0, + 1, + 5 + ], + "texture": "#missing" + }, + "up": { + "uv": [ + 15, + 15, + 16, + 16 + ], + "texture": "#1_1" + }, + "down": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#missing" + } + } + }, + { + "from": [ + 4, + 6, + 11 + ], + "to": [ + 5, + 11, + 12 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 1, + 5 + ], + "texture": "#missing" + }, + "east": { + "uv": [ + 0, + 0, + 1, + 5 + ], + "texture": "#missing" + }, + "south": { + "uv": [ + 4, + 5, + 5, + 10 + ], + "texture": "#1_0" + }, + "west": { + "uv": [ + 11, + 5, + 12, + 10 + ], + "texture": "#1_0" + }, + "up": { + "uv": [ + 0, + 15, + 1, + 16 + ], + "texture": "#1_1" + }, + "down": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#missing" + } + } + }, + { + "from": [ + 6, + 10, + 3 + ], + "to": [ + 10, + 11, + 4 + ], + "faces": { + "north": { + "uv": [ + 6, + 5, + 10, + 6 + ], + "texture": "#1_0" + }, + "east": { + "uv": [ + 12, + 5, + 13, + 6 + ], + "texture": "#1_0" + }, + "south": { + "uv": [ + 0, + 0, + 4, + 1 + ], + "texture": "#missing" + }, + "west": { + "uv": [ + 3, + 5, + 4, + 6 + ], + "texture": "#1_0" + }, + "up": { + "uv": [ + 6, + 0, + 10, + 1 + ], + "texture": "#1_1" + }, + "down": { + "uv": [ + 0, + 0, + 4, + 1 + ], + "texture": "#missing" + } + } + }, + { + "from": [ + 6, + 10, + 12 + ], + "to": [ + 10, + 11, + 13 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 4, + 1 + ], + "texture": "#missing" + }, + "east": { + "uv": [ + 3, + 5, + 4, + 6 + ], + "texture": "#1_0" + }, + "south": { + "uv": [ + 6, + 5, + 10, + 6 + ], + "texture": "#1_0" + }, + "west": { + "uv": [ + 12, + 5, + 13, + 6 + ], + "texture": "#1_0" + }, + "up": { + "uv": [ + 6, + 15, + 10, + 16 + ], + "texture": "#1_1" + }, + "down": { + "uv": [ + 0, + 0, + 4, + 1 + ], + "texture": "#missing" + } + } + }, + { + "from": [ + 3, + 10, + 6 + ], + "to": [ + 4, + 11, + 10 + ], + "faces": { + "north": { + "uv": [ + 12, + 5, + 13, + 6 + ], + "texture": "#1_0" + }, + "east": { + "uv": [ + 0, + 0, + 4, + 1 + ], + "texture": "#missing" + }, + "south": { + "uv": [ + 3, + 5, + 4, + 6 + ], + "texture": "#1_0" + }, + "west": { + "uv": [ + 6, + 5, + 10, + 6 + ], + "texture": "#1_0" + }, + "up": { + "uv": [ + 0, + 6, + 1, + 10 + ], + "texture": "#1_1" + }, + "down": { + "uv": [ + 0, + 0, + 1, + 4 + ], + "texture": "#missing" + } + } + }, + { + "from": [ + 12, + 10, + 6 + ], + "to": [ + 13, + 11, + 10 + ], + "faces": { + "north": { + "uv": [ + 3, + 5, + 4, + 6 + ], + "texture": "#1_0" + }, + "east": { + "uv": [ + 6, + 5, + 10, + 6 + ], + "texture": "#1_0" + }, + "south": { + "uv": [ + 12, + 5, + 13, + 6 + ], + "texture": "#1_0" + }, + "west": { + "uv": [ + 0, + 0, + 4, + 1 + ], + "texture": "#missing" + }, + "up": { + "uv": [ + 15, + 6, + 16, + 10 + ], + "texture": "#1_1" + }, + "down": { + "uv": [ + 0, + 0, + 1, + 4 + ], + "texture": "#missing" + } + } + }, + { + "from": [ + 4, + 10, + 5 + ], + "to": [ + 5, + 15, + 11 + ], + "faces": { + "north": { + "uv": [ + 11, + 1, + 12, + 6 + ], + "texture": "#1_0" + }, + "east": { + "uv": [ + 0, + 0, + 6, + 5 + ], + "texture": "#missing" + }, + "south": { + "uv": [ + 4, + 1, + 5, + 6 + ], + "texture": "#1_0" + }, + "west": { + "uv": [ + 5, + 1, + 11, + 6 + ], + "texture": "#1_0" + }, + "up": { + "uv": [ + 0, + 4, + 1, + 10 + ], + "texture": "#1_1" + }, + "down": { + "uv": [ + 0, + 0, + 1, + 6 + ], + "texture": "#missing" + } + } + }, + { + "from": [ + 11, + 10, + 5 + ], + "to": [ + 12, + 15, + 11 + ], + "faces": { + "north": { + "uv": [ + 4, + 1, + 5, + 6 + ], + "texture": "#1_0" + }, + "east": { + "uv": [ + 5, + 1, + 11, + 6 + ], + "texture": "#1_0" + }, + "south": { + "uv": [ + 11, + 1, + 12, + 6 + ], + "texture": "#1_0" + }, + "west": { + "uv": [ + 0, + 0, + 6, + 5 + ], + "texture": "#missing" + }, + "up": { + "uv": [ + 15, + 5, + 16, + 11 + ], + "texture": "#1_1" + }, + "down": { + "uv": [ + 0, + 0, + 1, + 6 + ], + "texture": "#missing" + } + } + }, + { + "from": [ + 5, + 10, + 4 + ], + "to": [ + 11, + 15, + 5 + ], + "faces": { + "north": { + "uv": [ + 5, + 1, + 11, + 6 + ], + "texture": "#1_0" + }, + "east": { + "uv": [ + 11, + 1, + 12, + 6 + ], + "texture": "#1_0" + }, + "south": { + "uv": [ + 0, + 0, + 6, + 5 + ], + "texture": "#missing" + }, + "west": { + "uv": [ + 4, + 1, + 5, + 6 + ], + "texture": "#1_0" + }, + "up": { + "uv": [ + 5, + 0, + 11, + 1 + ], + "texture": "#1_1" + }, + "down": { + "uv": [ + 0, + 0, + 6, + 1 + ], + "texture": "#missing" + } + } + }, + { + "from": [ + 5, + 10, + 11 + ], + "to": [ + 11, + 15, + 12 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 6, + 5 + ], + "texture": "#missing" + }, + "east": { + "uv": [ + 4, + 1, + 5, + 6 + ], + "texture": "#1_0" + }, + "south": { + "uv": [ + 5, + 1, + 11, + 6 + ], + "texture": "#1_0" + }, + "west": { + "uv": [ + 11, + 1, + 12, + 6 + ], + "texture": "#1_0" + }, + "up": { + "uv": [ + 4, + 15, + 10, + 16 + ], + "texture": "#1_1" + }, + "down": { + "uv": [ + 0, + 0, + 6, + 1 + ], + "texture": "#missing" + } + } + }, + { + "from": [ + 5, + 15, + 5 + ], + "to": [ + 6, + 16, + 6 + ], + "faces": { + "north": { + "uv": [ + 10, + 0, + 11, + 1 + ], + "texture": "#1_0" + }, + "east": { + "uv": [ + 2, + 1, + 3, + 2 + ], + "texture": "#1_1" + }, + "south": { + "uv": [ + 1, + 2, + 2, + 3 + ], + "texture": "#1_1" + }, + "west": { + "uv": [ + 5, + 0, + 6, + 1 + ], + "texture": "#1_0" + }, + "up": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#1_1" + }, + "down": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#missing" + } + } + }, + { + "from": [ + 10, + 15, + 5 + ], + "to": [ + 11, + 16, + 6 + ], + "faces": { + "north": { + "uv": [ + 5, + 0, + 6, + 1 + ], + "texture": "#1_0" + }, + "east": { + "uv": [ + 10, + 0, + 11, + 1 + ], + "texture": "#1_0" + }, + "south": { + "uv": [ + 14, + 2, + 15, + 3 + ], + "texture": "#1_1" + }, + "west": { + "uv": [ + 13, + 1, + 14, + 2 + ], + "texture": "#1_1" + }, + "up": { + "uv": [ + 15, + 0, + 16, + 1 + ], + "texture": "#1_1" + }, + "down": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#missing" + } + } + }, + { + "from": [ + 10, + 15, + 10 + ], + "to": [ + 11, + 16, + 11 + ], + "faces": { + "north": { + "uv": [ + 14, + 13, + 15, + 14 + ], + "texture": "#1_1" + }, + "east": { + "uv": [ + 5, + 0, + 6, + 1 + ], + "texture": "#1_0" + }, + "south": { + "uv": [ + 10, + 0, + 11, + 1 + ], + "texture": "#1_0" + }, + "west": { + "uv": [ + 13, + 14, + 14, + 15 + ], + "texture": "#1_1" + }, + "up": { + "uv": [ + 15, + 15, + 16, + 16 + ], + "texture": "#1_1" + }, + "down": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#missing" + } + } + }, + { + "from": [ + 5, + 15, + 10 + ], + "to": [ + 6, + 16, + 11 + ], + "faces": { + "north": { + "uv": [ + 1, + 13, + 2, + 14 + ], + "texture": "#1_1" + }, + "east": { + "uv": [ + 2, + 14, + 3, + 15 + ], + "texture": "#1_1" + }, + "south": { + "uv": [ + 5, + 0, + 6, + 1 + ], + "texture": "#1_0" + }, + "west": { + "uv": [ + 10, + 0, + 11, + 1 + ], + "texture": "#1_0" + }, + "up": { + "uv": [ + 0, + 15, + 1, + 16 + ], + "texture": "#1_1" + }, + "down": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#missing" + } + } + }, + { + "from": [ + 6, + 15, + 4 + ], + "to": [ + 10, + 16, + 5 + ], + "faces": { + "north": { + "uv": [ + 6, + 0, + 10, + 1 + ], + "texture": "#1_0" + }, + "east": { + "uv": [ + 11, + 0, + 12, + 1 + ], + "texture": "#1_0" + }, + "south": { + "uv": [ + 6, + 1, + 10, + 2 + ], + "texture": "#1_1" + }, + "west": { + "uv": [ + 4, + 0, + 5, + 1 + ], + "texture": "#1_0" + }, + "up": { + "uv": [ + 6, + 0, + 10, + 1 + ], + "texture": "#1_1" + }, + "down": { + "uv": [ + 0, + 0, + 4, + 1 + ], + "texture": "#missing" + } + } + }, + { + "from": [ + 6, + 15, + 11 + ], + "to": [ + 10, + 16, + 12 + ], + "faces": { + "north": { + "uv": [ + 6, + 14, + 10, + 15 + ], + "texture": "#1_1" + }, + "east": { + "uv": [ + 4, + 0, + 5, + 1 + ], + "texture": "#1_0" + }, + "south": { + "uv": [ + 6, + 0, + 10, + 1 + ], + "texture": "#1_0" + }, + "west": { + "uv": [ + 11, + 0, + 12, + 1 + ], + "texture": "#1_0" + }, + "up": { + "uv": [ + 6, + 15, + 10, + 16 + ], + "texture": "#1_1" + }, + "down": { + "uv": [ + 0, + 0, + 4, + 1 + ], + "texture": "#missing" + } + } + }, + { + "from": [ + 4, + 15, + 6 + ], + "to": [ + 5, + 16, + 10 + ], + "faces": { + "north": { + "uv": [ + 11, + 0, + 12, + 1 + ], + "texture": "#1_0" + }, + "east": { + "uv": [ + 1, + 6, + 2, + 10 + ], + "rotation": 90, + "texture": "#1_1" + }, + "south": { + "uv": [ + 4, + 0, + 5, + 1 + ], + "texture": "#1_0" + }, + "west": { + "uv": [ + 6, + 0, + 10, + 1 + ], + "texture": "#1_0" + }, + "up": { + "uv": [ + 0, + 6, + 1, + 10 + ], + "texture": "#1_1" + }, + "down": { + "uv": [ + 0, + 0, + 1, + 4 + ], + "texture": "#missing" + } + } + }, + { + "from": [ + 11, + 15, + 6 + ], + "to": [ + 12, + 16, + 10 + ], + "faces": { + "north": { + "uv": [ + 4, + 0, + 5, + 1 + ], + "texture": "#1_0" + }, + "east": { + "uv": [ + 6, + 0, + 10, + 1 + ], + "texture": "#1_0" + }, + "south": { + "uv": [ + 11, + 0, + 12, + 1 + ], + "texture": "#1_0" + }, + "west": { + "uv": [ + 14, + 6, + 15, + 10 + ], + "rotation": 270, + "texture": "#1_1" + }, + "up": { + "uv": [ + 15, + 6, + 16, + 10 + ], + "texture": "#1_1" + }, + "down": { + "uv": [ + 0, + 0, + 1, + 4 + ], + "texture": "#missing" + } + } + }, + { + "from": [ + 9, + 13, + 6 + ], + "to": [ + 10, + 14, + 10 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#missing" + }, + "east": { + "uv": [ + 0, + 0, + 4, + 1 + ], + "texture": "#missing" + }, + "south": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#missing" + }, + "west": { + "uv": [ + 6, + 8, + 10, + 9 + ], + "texture": "#1_1" + }, + "up": { + "uv": [ + 9, + 6, + 10, + 10 + ], + "texture": "#1_1" + }, + "down": { + "uv": [ + 0, + 0, + 1, + 4 + ], + "texture": "#missing" + } + } + }, + { + "from": [ + 10, + 14, + 6 + ], + "to": [ + 11, + 15, + 10 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#missing" + }, + "east": { + "uv": [ + 0, + 0, + 4, + 1 + ], + "texture": "#missing" + }, + "south": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#missing" + }, + "west": { + "uv": [ + 12, + 6, + 13, + 10 + ], + "rotation": 270, + "texture": "#1_1" + }, + "up": { + "uv": [ + 13, + 6, + 14, + 10 + ], + "texture": "#1_1" + }, + "down": { + "uv": [ + 0, + 0, + 1, + 4 + ], + "texture": "#missing" + } + } + }, + { + "from": [ + 5, + 14, + 6 + ], + "to": [ + 6, + 15, + 10 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#missing" + }, + "east": { + "uv": [ + 3, + 6, + 4, + 10 + ], + "rotation": 90, + "texture": "#1_1" + }, + "south": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#missing" + }, + "west": { + "uv": [ + 0, + 0, + 4, + 1 + ], + "texture": "#missing" + }, + "up": { + "uv": [ + 2, + 6, + 3, + 10 + ], + "texture": "#1_1" + }, + "down": { + "uv": [ + 0, + 0, + 1, + 4 + ], + "texture": "#missing" + } + } + }, + { + "from": [ + 6, + 14, + 10 + ], + "to": [ + 10, + 15, + 11 + ], + "faces": { + "north": { + "uv": [ + 6, + 12, + 10, + 13 + ], + "texture": "#1_1" + }, + "east": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#missing" + }, + "south": { + "uv": [ + 0, + 0, + 4, + 1 + ], + "texture": "#missing" + }, + "west": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#missing" + }, + "up": { + "uv": [ + 6, + 13, + 10, + 14 + ], + "texture": "#1_1" + }, + "down": { + "uv": [ + 0, + 0, + 4, + 1 + ], + "texture": "#missing" + } + } + }, + { + "from": [ + 6, + 14, + 5 + ], + "to": [ + 10, + 15, + 6 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 4, + 1 + ], + "texture": "#missing" + }, + "east": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#missing" + }, + "south": { + "uv": [ + 6, + 3, + 10, + 4 + ], + "texture": "#1_1" + }, + "west": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#missing" + }, + "up": { + "uv": [ + 6, + 2, + 10, + 3 + ], + "texture": "#1_1" + }, + "down": { + "uv": [ + 0, + 0, + 4, + 1 + ], + "texture": "#missing" + } + } + }, + { + "from": [ + 6, + 13, + 6 + ], + "to": [ + 7, + 14, + 10 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#missing" + }, + "east": { + "uv": [ + 6, + 7, + 10, + 8 + ], + "texture": "#1_1" + }, + "south": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#missing" + }, + "west": { + "uv": [ + 0, + 0, + 4, + 1 + ], + "texture": "#missing" + }, + "up": { + "uv": [ + 6, + 6, + 7, + 10 + ], + "texture": "#1_1" + }, + "down": { + "uv": [ + 0, + 0, + 1, + 4 + ], + "texture": "#missing" + } + } + }, + { + "from": [ + 7, + 13, + 9 + ], + "to": [ + 9, + 14, + 10 + ], + "faces": { + "north": { + "uv": [ + 7, + 8, + 9, + 9 + ], + "texture": "#1_1" + }, + "east": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#missing" + }, + "south": { + "uv": [ + 0, + 0, + 2, + 1 + ], + "texture": "#missing" + }, + "west": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#missing" + }, + "up": { + "uv": [ + 7, + 9, + 9, + 10 + ], + "texture": "#1_1" + }, + "down": { + "uv": [ + 0, + 0, + 2, + 1 + ], + "texture": "#missing" + } + } + }, + { + "from": [ + 7, + 13, + 6 + ], + "to": [ + 9, + 14, + 7 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 2, + 1 + ], + "texture": "#missing" + }, + "east": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#missing" + }, + "south": { + "uv": [ + 7, + 7, + 9, + 8 + ], + "texture": "#1_1" + }, + "west": { + "uv": [ + 0, + 0, + 1, + 1 + ], + "texture": "#missing" + }, + "up": { + "uv": [ + 7, + 6, + 9, + 7 + ], + "texture": "#1_1" + }, + "down": { + "uv": [ + 0, + 0, + 2, + 1 + ], + "texture": "#missing" + } + } + }, + { + "from": [ + 7, + 12, + 7 + ], + "to": [ + 9, + 28, + 9 + ], + "rotation": { + "angle": 0, + "axis": "y", + "origin": [ + 15, + 23, + 15 + ] + }, + "faces": { + "north": { + "uv": [ + 0, + 0, + 2, + 16 + ], + "texture": "#5" + }, + "east": { + "uv": [ + 6, + 0, + 8, + 16 + ], + "texture": "#5" + }, + "south": { + "uv": [ + 3, + 0, + 5, + 16 + ], + "texture": "#5" + }, + "west": { + "uv": [ + 4, + 0, + 6, + 16 + ], + "texture": "#5" + }, + "up": { + "uv": [ + 5, + 5, + 7, + 7 + ], + "texture": "#5" + }, + "down": { + "uv": [ + 8, + 8, + 10, + 10 + ], + "texture": "#5" + } + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [ + 75, + 45, + 0 + ], + "translation": [ + 0, + 2.5, + 0 + ], + "scale": [ + 0.375, + 0.375, + 0.375 + ] + }, + "firstperson_righthand": { + "rotation": [ + 0, + 45, + 0 + ], + "scale": [ + 0.4, + 0.4, + 0.4 + ] + }, + "firstperson_lefthand": { + "rotation": [ + 0, + 225, + 0 + ], + "scale": [ + 0.4, + 0.4, + 0.4 + ] + }, + "ground": { + "translation": [ + 0, + 3, + 0 + ], + "scale": [ + 0.25, + 0.25, + 0.25 + ] + }, + "gui": { + "rotation": [ + 30, + 225, + 0 + ], + "scale": [ + 0.625, + 0.625, + 0.625 + ] + }, + "fixed": { + "scale": [ + 0.5, + 0.5, + 0.5 + ] + } + }, + "groups": [ + { + "name": "churn_up", + "origin": [ + 8, + 8, + 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, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52 + ] + }, + 53 + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/models/block/mixing_vat.json b/src/main/resources/assets/growthcraft_milk/models/block/mixing_vat.json new file mode 100644 index 0000000..56fed30 --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/models/block/mixing_vat.json @@ -0,0 +1,1013 @@ +{ + "credit": "Made with Blockbench", + "ambientocclusion": false, + "render_type": "cutout", + "textures": { + "0": "growthcraft_milk:block/mixing_vat/mixing_vat", + "2": "growthcraft_milk:block/mixing_vat/stonecutter_bottom", + "particle": "growthcraft_milk:block/mixing_vat/mixing_vat" + }, + "elements": [ + { + "name": "north_wall", + "from": [ + 1, + 0, + 1 + ], + "to": [ + 15, + 15, + 2 + ], + "faces": { + "north": { + "uv": [ + 1, + 1, + 15, + 16 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 15, + 1, + 16, + 16 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 1, + 1, + 15, + 16 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 0, + 1, + 1, + 16 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 1, + 0, + 15, + 1 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 1, + 0, + 15, + 1 + ], + "texture": "#0" + } + } + }, + { + "name": "west_wall", + "from": [ + 1, + 0, + 2 + ], + "to": [ + 2, + 15, + 14 + ], + "faces": { + "north": { + "uv": [ + 14, + 1, + 15, + 16 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 2, + 1, + 14, + 16 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 1, + 1, + 2, + 16 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 2, + 1, + 14, + 16 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 0, + 0, + 1, + 12 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 2, + 15, + 14, + 16 + ], + "texture": "#0" + } + } + }, + { + "name": "south_wall", + "from": [ + 1, + 0, + 14 + ], + "to": [ + 15, + 15, + 15 + ], + "faces": { + "north": { + "uv": [ + 1, + 1, + 15, + 16 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 0, + 1, + 1, + 16 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 1, + 1, + 15, + 16 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 15, + 1, + 16, + 16 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 1, + 0, + 15, + 1 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 1, + 15, + 15, + 16 + ], + "texture": "#0" + } + } + }, + { + "name": "east_wall", + "from": [ + 14, + 0, + 2 + ], + "to": [ + 15, + 15, + 14 + ], + "faces": { + "north": { + "uv": [ + 1, + 1, + 2, + 16 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 2, + 1, + 14, + 16 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 14, + 1, + 15, + 16 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 2, + 1, + 14, + 16 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 16, + 0, + 15, + 12 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 2, + 15, + 14, + 16 + ], + "texture": "#0" + } + } + }, + { + "name": "bottom", + "from": [ + 2, + 0, + 2 + ], + "to": [ + 14, + 1, + 14 + ], + "faces": { + "north": { + "uv": [ + 2, + 15, + 14, + 16 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 2, + 1, + 14, + 2 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 2, + 0, + 14, + 1 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 2, + 14, + 14, + 15 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 2, + 2, + 14, + 14 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 2, + 2, + 14, + 14 + ], + "texture": "#0" + } + } + }, + { + "name": "north_foot1", + "from": [ + 11, + 0, + 0 + ], + "to": [ + 13, + 3, + 1 + ], + "faces": { + "north": { + "uv": [ + 4, + 8, + 6, + 11 + ], + "texture": "#2" + }, + "east": { + "uv": [ + 13, + 3, + 14, + 6 + ], + "texture": "#2" + }, + "south": { + "uv": [ + 10, + 4, + 12, + 7 + ], + "texture": "#2" + }, + "west": { + "uv": [ + 6, + 2, + 7, + 5 + ], + "texture": "#2" + }, + "up": { + "uv": [ + 10, + 10, + 12, + 11 + ], + "texture": "#2" + }, + "down": { + "uv": [ + 8, + 12, + 10, + 13 + ], + "texture": "#2" + } + } + }, + { + "name": "north_foot2", + "from": [ + 3, + 0, + 0 + ], + "to": [ + 5, + 3, + 1 + ], + "faces": { + "north": { + "uv": [ + 10, + 8, + 12, + 11 + ], + "texture": "#2" + }, + "east": { + "uv": [ + 5, + 3, + 6, + 6 + ], + "texture": "#2" + }, + "south": { + "uv": [ + 8, + 10, + 10, + 13 + ], + "texture": "#2" + }, + "west": { + "uv": [ + 3, + 2, + 4, + 5 + ], + "texture": "#2" + }, + "up": { + "uv": [ + 9, + 5, + 11, + 6 + ], + "texture": "#2" + }, + "down": { + "uv": [ + 4, + 9, + 6, + 10 + ], + "texture": "#2" + } + } + }, + { + "name": "west_foot1", + "from": [ + 0, + 0, + 11 + ], + "to": [ + 1, + 3, + 13 + ], + "faces": { + "north": { + "uv": [ + 2, + 3, + 3, + 6 + ], + "texture": "#2" + }, + "east": { + "uv": [ + 13, + 12, + 15, + 15 + ], + "texture": "#2" + }, + "south": { + "uv": [ + 7, + 5, + 8, + 8 + ], + "texture": "#2" + }, + "west": { + "uv": [ + 9, + 9, + 11, + 12 + ], + "texture": "#2" + }, + "up": { + "uv": [ + 12, + 5, + 13, + 7 + ], + "texture": "#2" + }, + "down": { + "uv": [ + 3, + 10, + 4, + 12 + ], + "texture": "#2" + } + } + }, + { + "name": "west_foot2", + "from": [ + 0, + 0, + 3 + ], + "to": [ + 1, + 3, + 5 + ], + "faces": { + "north": { + "uv": [ + 2, + 8, + 3, + 11 + ], + "texture": "#2" + }, + "east": { + "uv": [ + 13, + 4, + 15, + 7 + ], + "texture": "#2" + }, + "south": { + "uv": [ + 10, + 8, + 11, + 11 + ], + "texture": "#2" + }, + "west": { + "uv": [ + 2, + 2, + 4, + 5 + ], + "texture": "#2" + }, + "up": { + "uv": [ + 11, + 13, + 12, + 15 + ], + "texture": "#2" + }, + "down": { + "uv": [ + 4, + 13, + 5, + 15 + ], + "texture": "#2" + } + } + }, + { + "name": "south_foot2", + "from": [ + 11, + 0, + 15 + ], + "to": [ + 13, + 3, + 16 + ], + "faces": { + "north": { + "uv": [ + 6, + 6, + 8, + 9 + ], + "texture": "#2" + }, + "east": { + "uv": [ + 3, + 3, + 4, + 6 + ], + "texture": "#2" + }, + "south": { + "uv": [ + 9, + 10, + 11, + 13 + ], + "texture": "#2" + }, + "west": { + "uv": [ + 2, + 11, + 3, + 14 + ], + "texture": "#2" + }, + "up": { + "uv": [ + 13, + 6, + 15, + 7 + ], + "texture": "#2" + }, + "down": { + "uv": [ + 10, + 3, + 12, + 4 + ], + "texture": "#2" + } + } + }, + { + "name": "south_foot1", + "from": [ + 3, + 0, + 15 + ], + "to": [ + 5, + 3, + 16 + ], + "faces": { + "north": { + "uv": [ + 11, + 2, + 13, + 5 + ], + "texture": "#2" + }, + "east": { + "uv": [ + 2, + 8, + 3, + 11 + ], + "texture": "#2" + }, + "south": { + "uv": [ + 4, + 2, + 6, + 5 + ], + "texture": "#2" + }, + "west": { + "uv": [ + 6, + 9, + 7, + 12 + ], + "texture": "#2" + }, + "up": { + "uv": [ + 5, + 7, + 7, + 8 + ], + "texture": "#2" + }, + "down": { + "uv": [ + 11, + 6, + 13, + 7 + ], + "texture": "#2" + } + } + }, + { + "name": "east_foot1", + "from": [ + 15, + 0, + 3 + ], + "to": [ + 16, + 3, + 5 + ], + "faces": { + "north": { + "uv": [ + 4, + 2, + 5, + 5 + ], + "texture": "#2" + }, + "east": { + "uv": [ + 11, + 7, + 13, + 10 + ], + "texture": "#2" + }, + "south": { + "uv": [ + 2, + 3, + 3, + 6 + ], + "texture": "#2" + }, + "west": { + "uv": [ + 10, + 10, + 12, + 11 + ], + "texture": "#2" + }, + "up": { + "uv": [ + 7, + 5, + 8, + 7 + ], + "texture": "#2" + }, + "down": { + "uv": [ + 4, + 11, + 5, + 13 + ], + "texture": "#2" + } + } + }, + { + "name": "east_foot2", + "from": [ + 15, + 0, + 11 + ], + "to": [ + 16, + 3, + 13 + ], + "faces": { + "north": { + "uv": [ + 9, + 6, + 10, + 9 + ], + "texture": "#2" + }, + "east": { + "uv": [ + 3, + 7, + 5, + 10 + ], + "texture": "#2" + }, + "south": { + "uv": [ + 9, + 11, + 10, + 14 + ], + "texture": "#2" + }, + "west": { + "uv": [ + 5, + 2, + 7, + 5 + ], + "texture": "#2" + }, + "up": { + "uv": [ + 12, + 6, + 13, + 8 + ], + "texture": "#2" + }, + "down": { + "uv": [ + 6, + 9, + 7, + 11 + ], + "texture": "#2" + } + } + } + ], + "display": { + "gui": { + "rotation": [ + 30, + 225, + 0 + ], + "translation": [ + 0, + 0, + 0 + ], + "scale": [ + 0.625, + 0.625, + 0.625 + ] + }, + "ground": { + "rotation": [ + 0, + 0, + 0 + ], + "translation": [ + 0, + 3, + 0 + ], + "scale": [ + 0.25, + 0.25, + 0.25 + ] + }, + "fixed": { + "rotation": [ + 0, + 0, + 0 + ], + "translation": [ + 0, + 0, + 0 + ], + "scale": [ + 0.5, + 0.5, + 0.5 + ] + }, + "thirdperson_righthand": { + "rotation": [ + 75, + 45, + 0 + ], + "translation": [ + 0, + 2.5, + 0 + ], + "scale": [ + 0.375, + 0.375, + 0.375 + ] + }, + "firstperson_righthand": { + "rotation": [ + 0, + 45, + 0 + ], + "translation": [ + 0, + 0, + 0 + ], + "scale": [ + 0.40, + 0.40, + 0.40 + ] + }, + "firstperson_lefthand": { + "rotation": [ + 0, + 225, + 0 + ], + "translation": [ + 0, + 0, + 0 + ], + "scale": [ + 0.40, + 0.40, + 0.40 + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/models/block/pancheon.json b/src/main/resources/assets/growthcraft_milk/models/block/pancheon.json new file mode 100644 index 0000000..44781b2 --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/models/block/pancheon.json @@ -0,0 +1,462 @@ +{ + "credit": "Made with Blockbench, a free, modern block model editor by JannisX11", + "ambientocclusion": false, + "render_type": "cutout", + "textures": { + "0": "growthcraft_milk:block/pancheon", + "particle": "growthcraft_milk:block/pancheon", + "missing": "growthcraft:block/missing" + }, + "elements": [ + { + "name": "bottom", + "from": [1, 0, 1], + "to": [15, 1, 15], + "faces": { + "north": { + "uv": [7.75, 4, 11.25, 4.25], + "texture": "#0" + }, + "east": { + "uv": [ + 7.75, + 4, + 11.25, + 4.25 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 7.75, + 4, + 11.25, + 4.25 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 7.75, + 4, + 11.25, + 4.25 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 4.25, + 0.5, + 7.75, + 4 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 7.75, + 0.5, + 11.25, + 4 + ], + "texture": "#0" + } + }, + "rotation": { + "origin": [ + 9, + 8, + 9 + ], + "axis": "y", + "angle": 0 + }, + "type": "cube" + }, + { + "name": "north_edge", + "from": [ + 1, + 1, + 0 + ], + "to": [ + 15, + 5, + 1 + ], + "faces": { + "north": { + "uv": [ + 8, + 11.5, + 11.5, + 12.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 0, + 0, + 1, + 4 + ], + "texture": "#missing" + }, + "south": { + "uv": [ + 8, + 11.5, + 11.5, + 12.5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 0, + 0, + 1, + 4 + ], + "texture": "#missing" + }, + "up": { + "uv": [ + 0.25, + 13.5, + 2.75, + 13.75 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 0.25, + 13.5, + 7.25, + 13.75 + ], + "texture": "#0" + } + }, + "type": "cube" + }, + { + "name": "south_edge", + "from": [ + 1, + 1, + 15 + ], + "to": [ + 15, + 5, + 16 + ], + "faces": { + "north": { + "uv": [ + 8, + 11.5, + 11.5, + 12.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 0, + 0, + 1, + 4 + ], + "texture": "#missing" + }, + "south": { + "uv": [ + 8, + 11.5, + 11.5, + 12.5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 0, + 0, + 1, + 4 + ], + "texture": "#missing" + }, + "up": { + "uv": [ + 0.25, + 13.5, + 2.75, + 13.75 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 0.25, + 13.5, + 7.25, + 13.75 + ], + "texture": "#0" + } + }, + "type": "cube" + }, + { + "name": "west_edge", + "from": [ + 0, + 1, + 0 + ], + "to": [ + 1, + 5, + 16 + ], + "faces": { + "north": { + "uv": [ + 8, + 11.5, + 8.5, + 12.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 8, + 11.5, + 11.5, + 12.5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 8, + 11.5, + 8.5, + 12.5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 8, + 11.5, + 11.5, + 12.5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 11.5, + 7.5, + 12, + 11.5 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 11.5, + 7.5, + 12, + 11.5 + ], + "texture": "#0" + } + }, + "type": "cube" + }, + { + "name": "east_edge", + "from": [ + 15, + 1, + 0 + ], + "to": [ + 16, + 5, + 16 + ], + "faces": { + "north": { + "uv": [ + 8, + 11.5, + 8.5, + 12.5 + ], + "texture": "#0" + }, + "east": { + "uv": [ + 8, + 11.5, + 11.5, + 12.5 + ], + "texture": "#0" + }, + "south": { + "uv": [ + 8, + 11.5, + 8.5, + 12.5 + ], + "texture": "#0" + }, + "west": { + "uv": [ + 8, + 11.5, + 11.5, + 12.5 + ], + "texture": "#0" + }, + "up": { + "uv": [ + 11.5, + 7.5, + 12, + 11.5 + ], + "texture": "#0" + }, + "down": { + "uv": [ + 11.5, + 7.5, + 12, + 11.5 + ], + "texture": "#0" + } + }, + "type": "cube" + } + ], + "display": { + "gui": { + "rotation": [ + 30, + 225, + 0 + ], + "translation": [ + 0, + 0, + 0 + ], + "scale": [ + 0.625, + 0.625, + 0.625 + ] + }, + "ground": { + "rotation": [ + 0, + 0, + 0 + ], + "translation": [ + 0, + 3, + 0 + ], + "scale": [ + 0.25, + 0.25, + 0.25 + ] + }, + "fixed": { + "rotation": [ + 0, + 0, + 0 + ], + "translation": [ + 0, + 0, + 0 + ], + "scale": [ + 0.5, + 0.5, + 0.5 + ] + }, + "thirdperson_righthand": { + "rotation": [ + 75, + 45, + 0 + ], + "translation": [ + 0, + 2.5, + 0 + ], + "scale": [ + 0.375, + 0.375, + 0.375 + ] + }, + "firstperson_righthand": { + "rotation": [ + 0, + 45, + 0 + ], + "translation": [ + 0, + 0, + 0 + ], + "scale": [ + 0.40, + 0.40, + 0.40 + ] + }, + "firstperson_lefthand": { + "rotation": [ + 0, + 225, + 0 + ], + "translation": [ + 0, + 0, + 0 + ], + "scale": [ + 0.40, + 0.40, + 0.40 + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/models/block/thistle_crop_stage0.json b/src/main/resources/assets/growthcraft_milk/models/block/thistle_crop_stage0.json new file mode 100644 index 0000000..d4a877f --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/models/block/thistle_crop_stage0.json @@ -0,0 +1,8 @@ +{ + "parent": "block/cross", + "ambientocclusion": false, + "render_type": "cutout", + "textures": { + "cross": "growthcraft_milk:block/thistle_crop_stage0" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/models/block/thistle_crop_stage1.json b/src/main/resources/assets/growthcraft_milk/models/block/thistle_crop_stage1.json new file mode 100644 index 0000000..7fa288b --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/models/block/thistle_crop_stage1.json @@ -0,0 +1,8 @@ +{ + "parent": "block/cross", + "ambientocclusion": false, + "render_type": "cutout", + "textures": { + "cross": "growthcraft_milk:block/thistle_crop_stage1" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/models/block/thistle_crop_stage2.json b/src/main/resources/assets/growthcraft_milk/models/block/thistle_crop_stage2.json new file mode 100644 index 0000000..2e21ce2 --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/models/block/thistle_crop_stage2.json @@ -0,0 +1,8 @@ +{ + "parent": "block/cross", + "ambientocclusion": false, + "render_type": "cutout", + "textures": { + "cross": "growthcraft_milk:block/thistle_crop_stage2" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/models/block/thistle_crop_stage3.json b/src/main/resources/assets/growthcraft_milk/models/block/thistle_crop_stage3.json new file mode 100644 index 0000000..729cef9 --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/models/block/thistle_crop_stage3.json @@ -0,0 +1,8 @@ +{ + "parent": "block/cross", + "ambientocclusion": false, + "render_type": "cutout", + "textures": { + "cross": "growthcraft_milk:block/thistle_crop_stage3" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/models/item/appenzeller_cheese.json b/src/main/resources/assets/growthcraft_milk/models/item/appenzeller_cheese.json new file mode 100644 index 0000000..0b93b4a --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/models/item/appenzeller_cheese.json @@ -0,0 +1,3 @@ +{ + "parent": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_4" +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/models/item/appenzeller_cheese_aged.json b/src/main/resources/assets/growthcraft_milk/models/item/appenzeller_cheese_aged.json new file mode 100644 index 0000000..0b93b4a --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/models/item/appenzeller_cheese_aged.json @@ -0,0 +1,3 @@ +{ + "parent": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_4" +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/models/item/appenzeller_cheese_curds.json b/src/main/resources/assets/growthcraft_milk/models/item/appenzeller_cheese_curds.json new file mode 100644 index 0000000..c578471 --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/models/item/appenzeller_cheese_curds.json @@ -0,0 +1,3 @@ +{ + "parent": "growthcraft_milk:block/cheese_curd/cheese_curd_cloth" +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/models/item/appenzeller_cheese_curds_drained.json b/src/main/resources/assets/growthcraft_milk/models/item/appenzeller_cheese_curds_drained.json new file mode 100644 index 0000000..c1fd107 --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/models/item/appenzeller_cheese_curds_drained.json @@ -0,0 +1,3 @@ +{ + "parent": "growthcraft_milk:item/cheese_curds_drained" +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/models/item/appenzeller_cheese_slice.json b/src/main/resources/assets/growthcraft_milk/models/item/appenzeller_cheese_slice.json new file mode 100644 index 0000000..cd4c5dd --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/models/item/appenzeller_cheese_slice.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_milk:item/cheese/appenzeller_cheese_slice" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/models/item/asiago_cheese.json b/src/main/resources/assets/growthcraft_milk/models/item/asiago_cheese.json new file mode 100644 index 0000000..0b93b4a --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/models/item/asiago_cheese.json @@ -0,0 +1,3 @@ +{ + "parent": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_4" +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/models/item/asiago_cheese_curds.json b/src/main/resources/assets/growthcraft_milk/models/item/asiago_cheese_curds.json new file mode 100644 index 0000000..c578471 --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/models/item/asiago_cheese_curds.json @@ -0,0 +1,3 @@ +{ + "parent": "growthcraft_milk:block/cheese_curd/cheese_curd_cloth" +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/models/item/asiago_cheese_curds_drained.json b/src/main/resources/assets/growthcraft_milk/models/item/asiago_cheese_curds_drained.json new file mode 100644 index 0000000..c1fd107 --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/models/item/asiago_cheese_curds_drained.json @@ -0,0 +1,3 @@ +{ + "parent": "growthcraft_milk:item/cheese_curds_drained" +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/models/item/asiago_cheese_slice.json b/src/main/resources/assets/growthcraft_milk/models/item/asiago_cheese_slice.json new file mode 100644 index 0000000..3ee5ef3 --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/models/item/asiago_cheese_slice.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_milk:item/cheese/asiago_cheese_slice" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/models/item/butter.json b/src/main/resources/assets/growthcraft_milk/models/item/butter.json new file mode 100644 index 0000000..d79e637 --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/models/item/butter.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_milk:item/butter/butter" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/models/item/butter_milk_fluid_bucket.json b/src/main/resources/assets/growthcraft_milk/models/item/butter_milk_fluid_bucket.json new file mode 100644 index 0000000..ccfeb65 --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/models/item/butter_milk_fluid_bucket.json @@ -0,0 +1,7 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_milk:item/milking_bucket_contents", + "layer1": "growthcraft_milk:item/milking_bucket_base" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/models/item/butter_salted.json b/src/main/resources/assets/growthcraft_milk/models/item/butter_salted.json new file mode 100644 index 0000000..972c31c --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/models/item/butter_salted.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_milk:item/butter/butter_salted" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/models/item/casu_marzu_cheese.json b/src/main/resources/assets/growthcraft_milk/models/item/casu_marzu_cheese.json new file mode 100644 index 0000000..0b93b4a --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/models/item/casu_marzu_cheese.json @@ -0,0 +1,3 @@ +{ + "parent": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_4" +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/models/item/casu_marzu_cheese_curds.json b/src/main/resources/assets/growthcraft_milk/models/item/casu_marzu_cheese_curds.json new file mode 100644 index 0000000..c578471 --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/models/item/casu_marzu_cheese_curds.json @@ -0,0 +1,3 @@ +{ + "parent": "growthcraft_milk:block/cheese_curd/cheese_curd_cloth" +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/models/item/casu_marzu_cheese_curds_drained.json b/src/main/resources/assets/growthcraft_milk/models/item/casu_marzu_cheese_curds_drained.json new file mode 100644 index 0000000..c1fd107 --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/models/item/casu_marzu_cheese_curds_drained.json @@ -0,0 +1,3 @@ +{ + "parent": "growthcraft_milk:item/cheese_curds_drained" +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/models/item/casu_marzu_cheese_slice.json b/src/main/resources/assets/growthcraft_milk/models/item/casu_marzu_cheese_slice.json new file mode 100644 index 0000000..b7739f5 --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/models/item/casu_marzu_cheese_slice.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_milk:item/cheese/casu_marzu_cheese_slice" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/models/item/cheddar_cheese.json b/src/main/resources/assets/growthcraft_milk/models/item/cheddar_cheese.json new file mode 100644 index 0000000..0b93b4a --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/models/item/cheddar_cheese.json @@ -0,0 +1,3 @@ +{ + "parent": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_4" +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/models/item/cheddar_cheese_curds.json b/src/main/resources/assets/growthcraft_milk/models/item/cheddar_cheese_curds.json new file mode 100644 index 0000000..c578471 --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/models/item/cheddar_cheese_curds.json @@ -0,0 +1,3 @@ +{ + "parent": "growthcraft_milk:block/cheese_curd/cheese_curd_cloth" +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/models/item/cheddar_cheese_curds_drained.json b/src/main/resources/assets/growthcraft_milk/models/item/cheddar_cheese_curds_drained.json new file mode 100644 index 0000000..c1fd107 --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/models/item/cheddar_cheese_curds_drained.json @@ -0,0 +1,3 @@ +{ + "parent": "growthcraft_milk:item/cheese_curds_drained" +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/models/item/cheddar_cheese_slice.json b/src/main/resources/assets/growthcraft_milk/models/item/cheddar_cheese_slice.json new file mode 100644 index 0000000..6d5c0e4 --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/models/item/cheddar_cheese_slice.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_milk:item/cheese/cheddar_cheese_slice" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/models/item/cheese_base_fluid_bucket.json b/src/main/resources/assets/growthcraft_milk/models/item/cheese_base_fluid_bucket.json new file mode 100644 index 0000000..f5fba3f --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/models/item/cheese_base_fluid_bucket.json @@ -0,0 +1,7 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft:item/bucket/bucket_fluid", + "layer1": "growthcraft:item/bucket/bucket_base" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/models/item/cheese_cloth.json b/src/main/resources/assets/growthcraft_milk/models/item/cheese_cloth.json new file mode 100644 index 0000000..5ef6454 --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/models/item/cheese_cloth.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_milk:item/cheese_cloth" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/models/item/cheese_curds_drained.json b/src/main/resources/assets/growthcraft_milk/models/item/cheese_curds_drained.json new file mode 100644 index 0000000..8a1dc0c --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/models/item/cheese_curds_drained.json @@ -0,0 +1,7 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_milk:item/cheese/cheese_curds_drained_layer0", + "layer1": "growthcraft_milk:item/cheese/cheese_curds_drained_layer1" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/models/item/cheese_press.json b/src/main/resources/assets/growthcraft_milk/models/item/cheese_press.json new file mode 100644 index 0000000..708d7e6 --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/models/item/cheese_press.json @@ -0,0 +1,3 @@ +{ + "parent": "growthcraft_milk:block/cheese_press_base" +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/models/item/churn.json b/src/main/resources/assets/growthcraft_milk/models/item/churn.json new file mode 100644 index 0000000..8431223 --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/models/item/churn.json @@ -0,0 +1,3 @@ +{ + "parent": "growthcraft_milk:block/churn_down" +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/models/item/condensed_milk_fluid_bucket.json b/src/main/resources/assets/growthcraft_milk/models/item/condensed_milk_fluid_bucket.json new file mode 100644 index 0000000..ccfeb65 --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/models/item/condensed_milk_fluid_bucket.json @@ -0,0 +1,7 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_milk:item/milking_bucket_contents", + "layer1": "growthcraft_milk:item/milking_bucket_base" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/models/item/cream_fluid_bucket.json b/src/main/resources/assets/growthcraft_milk/models/item/cream_fluid_bucket.json new file mode 100644 index 0000000..ccfeb65 --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/models/item/cream_fluid_bucket.json @@ -0,0 +1,7 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_milk:item/milking_bucket_contents", + "layer1": "growthcraft_milk:item/milking_bucket_base" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/models/item/cultured_milk_fluid_bucket.json b/src/main/resources/assets/growthcraft_milk/models/item/cultured_milk_fluid_bucket.json new file mode 100644 index 0000000..ccfeb65 --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/models/item/cultured_milk_fluid_bucket.json @@ -0,0 +1,7 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_milk:item/milking_bucket_contents", + "layer1": "growthcraft_milk:item/milking_bucket_base" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/models/item/emmentaler_cheese.json b/src/main/resources/assets/growthcraft_milk/models/item/emmentaler_cheese.json new file mode 100644 index 0000000..0b93b4a --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/models/item/emmentaler_cheese.json @@ -0,0 +1,3 @@ +{ + "parent": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_4" +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/models/item/emmentaler_cheese_curds.json b/src/main/resources/assets/growthcraft_milk/models/item/emmentaler_cheese_curds.json new file mode 100644 index 0000000..c578471 --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/models/item/emmentaler_cheese_curds.json @@ -0,0 +1,3 @@ +{ + "parent": "growthcraft_milk:block/cheese_curd/cheese_curd_cloth" +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/models/item/emmentaler_cheese_curds_drained.json b/src/main/resources/assets/growthcraft_milk/models/item/emmentaler_cheese_curds_drained.json new file mode 100644 index 0000000..c1fd107 --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/models/item/emmentaler_cheese_curds_drained.json @@ -0,0 +1,3 @@ +{ + "parent": "growthcraft_milk:item/cheese_curds_drained" +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/models/item/emmentaler_cheese_slice.json b/src/main/resources/assets/growthcraft_milk/models/item/emmentaler_cheese_slice.json new file mode 100644 index 0000000..21cd1e3 --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/models/item/emmentaler_cheese_slice.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_milk:item/cheese/emmentaler_cheese_slice" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/models/item/gorgonzola_cheese.json b/src/main/resources/assets/growthcraft_milk/models/item/gorgonzola_cheese.json new file mode 100644 index 0000000..0b93b4a --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/models/item/gorgonzola_cheese.json @@ -0,0 +1,3 @@ +{ + "parent": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_4" +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/models/item/gorgonzola_cheese_curds.json b/src/main/resources/assets/growthcraft_milk/models/item/gorgonzola_cheese_curds.json new file mode 100644 index 0000000..c578471 --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/models/item/gorgonzola_cheese_curds.json @@ -0,0 +1,3 @@ +{ + "parent": "growthcraft_milk:block/cheese_curd/cheese_curd_cloth" +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/models/item/gorgonzola_cheese_curds_drained.json b/src/main/resources/assets/growthcraft_milk/models/item/gorgonzola_cheese_curds_drained.json new file mode 100644 index 0000000..c1fd107 --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/models/item/gorgonzola_cheese_curds_drained.json @@ -0,0 +1,3 @@ +{ + "parent": "growthcraft_milk:item/cheese_curds_drained" +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/models/item/gorgonzola_cheese_slice.json b/src/main/resources/assets/growthcraft_milk/models/item/gorgonzola_cheese_slice.json new file mode 100644 index 0000000..b44b755 --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/models/item/gorgonzola_cheese_slice.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_milk:item/cheese/gorgonzola_cheese_slice" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/models/item/gouda_cheese.json b/src/main/resources/assets/growthcraft_milk/models/item/gouda_cheese.json new file mode 100644 index 0000000..0b93b4a --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/models/item/gouda_cheese.json @@ -0,0 +1,3 @@ +{ + "parent": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_4" +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/models/item/gouda_cheese_curds.json b/src/main/resources/assets/growthcraft_milk/models/item/gouda_cheese_curds.json new file mode 100644 index 0000000..c578471 --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/models/item/gouda_cheese_curds.json @@ -0,0 +1,3 @@ +{ + "parent": "growthcraft_milk:block/cheese_curd/cheese_curd_cloth" +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/models/item/gouda_cheese_curds_drained.json b/src/main/resources/assets/growthcraft_milk/models/item/gouda_cheese_curds_drained.json new file mode 100644 index 0000000..c1fd107 --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/models/item/gouda_cheese_curds_drained.json @@ -0,0 +1,3 @@ +{ + "parent": "growthcraft_milk:item/cheese_curds_drained" +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/models/item/gouda_cheese_slice.json b/src/main/resources/assets/growthcraft_milk/models/item/gouda_cheese_slice.json new file mode 100644 index 0000000..c40f721 --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/models/item/gouda_cheese_slice.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_milk:item/cheese/gouda_cheese_slice" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/models/item/ice_cream_apple.json b/src/main/resources/assets/growthcraft_milk/models/item/ice_cream_apple.json new file mode 100644 index 0000000..1ac9b9b --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/models/item/ice_cream_apple.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_milk:item/ice_cream/ice_cream_apple" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/models/item/ice_cream_chocolate.json b/src/main/resources/assets/growthcraft_milk/models/item/ice_cream_chocolate.json new file mode 100644 index 0000000..11dc9cc --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/models/item/ice_cream_chocolate.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_milk:item/ice_cream/ice_cream_chocolate" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/models/item/ice_cream_grape_purple.json b/src/main/resources/assets/growthcraft_milk/models/item/ice_cream_grape_purple.json new file mode 100644 index 0000000..f4c096c --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/models/item/ice_cream_grape_purple.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_milk:item/ice_cream/ice_cream_grape_purple" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/models/item/ice_cream_grape_red.json b/src/main/resources/assets/growthcraft_milk/models/item/ice_cream_grape_red.json new file mode 100644 index 0000000..b93433d --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/models/item/ice_cream_grape_red.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_milk:item/ice_cream/ice_cream_grape_red" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/models/item/ice_cream_grape_white.json b/src/main/resources/assets/growthcraft_milk/models/item/ice_cream_grape_white.json new file mode 100644 index 0000000..8dbd0f0 --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/models/item/ice_cream_grape_white.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_milk:item/ice_cream/ice_cream_grape_white" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/models/item/ice_cream_honey.json b/src/main/resources/assets/growthcraft_milk/models/item/ice_cream_honey.json new file mode 100644 index 0000000..a4a64de --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/models/item/ice_cream_honey.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_milk:item/ice_cream/ice_cream_honey" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/models/item/ice_cream_pumpkin.json b/src/main/resources/assets/growthcraft_milk/models/item/ice_cream_pumpkin.json new file mode 100644 index 0000000..899a329 --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/models/item/ice_cream_pumpkin.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_milk:item/ice_cream/ice_cream_pumpkin" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/models/item/ice_cream_watermelon.json b/src/main/resources/assets/growthcraft_milk/models/item/ice_cream_watermelon.json new file mode 100644 index 0000000..c98ee36 --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/models/item/ice_cream_watermelon.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_milk:item/ice_cream/ice_cream_watermelon" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/models/item/kumis_fluid_bucket.json b/src/main/resources/assets/growthcraft_milk/models/item/kumis_fluid_bucket.json new file mode 100644 index 0000000..f5fba3f --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/models/item/kumis_fluid_bucket.json @@ -0,0 +1,7 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft:item/bucket/bucket_fluid", + "layer1": "growthcraft:item/bucket/bucket_base" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/models/item/milk_fluid_bucket.json b/src/main/resources/assets/growthcraft_milk/models/item/milk_fluid_bucket.json new file mode 100644 index 0000000..ccfeb65 --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/models/item/milk_fluid_bucket.json @@ -0,0 +1,7 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_milk:item/milking_bucket_contents", + "layer1": "growthcraft_milk:item/milking_bucket_base" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/models/item/milking_bucket_iron.json b/src/main/resources/assets/growthcraft_milk/models/item/milking_bucket_iron.json new file mode 100644 index 0000000..9496c2c --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/models/item/milking_bucket_iron.json @@ -0,0 +1,7 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_milk:item/milking_bucket_contents_default", + "layer1": "growthcraft_milk:item/milking_bucket_base" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/models/item/mixing_vat.json b/src/main/resources/assets/growthcraft_milk/models/item/mixing_vat.json new file mode 100644 index 0000000..b8d01df --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/models/item/mixing_vat.json @@ -0,0 +1,3 @@ +{ + "parent": "growthcraft_milk:block/mixing_vat" +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/models/item/monterey_cheese.json b/src/main/resources/assets/growthcraft_milk/models/item/monterey_cheese.json new file mode 100644 index 0000000..0b93b4a --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/models/item/monterey_cheese.json @@ -0,0 +1,3 @@ +{ + "parent": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_4" +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/models/item/monterey_cheese_curds.json b/src/main/resources/assets/growthcraft_milk/models/item/monterey_cheese_curds.json new file mode 100644 index 0000000..c578471 --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/models/item/monterey_cheese_curds.json @@ -0,0 +1,3 @@ +{ + "parent": "growthcraft_milk:block/cheese_curd/cheese_curd_cloth" +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/models/item/monterey_cheese_curds_drained.json b/src/main/resources/assets/growthcraft_milk/models/item/monterey_cheese_curds_drained.json new file mode 100644 index 0000000..c1fd107 --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/models/item/monterey_cheese_curds_drained.json @@ -0,0 +1,3 @@ +{ + "parent": "growthcraft_milk:item/cheese_curds_drained" +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/models/item/monterey_cheese_slice.json b/src/main/resources/assets/growthcraft_milk/models/item/monterey_cheese_slice.json new file mode 100644 index 0000000..0e14cf1 --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/models/item/monterey_cheese_slice.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_milk:item/cheese/monterey_cheese_slice" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/models/item/pancheon.json b/src/main/resources/assets/growthcraft_milk/models/item/pancheon.json new file mode 100644 index 0000000..3b80720 --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/models/item/pancheon.json @@ -0,0 +1,3 @@ +{ + "parent": "growthcraft_milk:block/pancheon" +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/models/item/parmesan_cheese.json b/src/main/resources/assets/growthcraft_milk/models/item/parmesan_cheese.json new file mode 100644 index 0000000..0b93b4a --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/models/item/parmesan_cheese.json @@ -0,0 +1,3 @@ +{ + "parent": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_4" +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/models/item/parmesan_cheese_curds.json b/src/main/resources/assets/growthcraft_milk/models/item/parmesan_cheese_curds.json new file mode 100644 index 0000000..c578471 --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/models/item/parmesan_cheese_curds.json @@ -0,0 +1,3 @@ +{ + "parent": "growthcraft_milk:block/cheese_curd/cheese_curd_cloth" +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/models/item/parmesan_cheese_curds_drained.json b/src/main/resources/assets/growthcraft_milk/models/item/parmesan_cheese_curds_drained.json new file mode 100644 index 0000000..c1fd107 --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/models/item/parmesan_cheese_curds_drained.json @@ -0,0 +1,3 @@ +{ + "parent": "growthcraft_milk:item/cheese_curds_drained" +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/models/item/parmesan_cheese_slice.json b/src/main/resources/assets/growthcraft_milk/models/item/parmesan_cheese_slice.json new file mode 100644 index 0000000..1a194be --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/models/item/parmesan_cheese_slice.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_milk:item/cheese/parmesan_cheese_slice" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/models/item/provolone_cheese.json b/src/main/resources/assets/growthcraft_milk/models/item/provolone_cheese.json new file mode 100644 index 0000000..0b93b4a --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/models/item/provolone_cheese.json @@ -0,0 +1,3 @@ +{ + "parent": "growthcraft_milk:block/cheese_wheel/cheese_slab_slices_bottom_4" +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/models/item/provolone_cheese_curds.json b/src/main/resources/assets/growthcraft_milk/models/item/provolone_cheese_curds.json new file mode 100644 index 0000000..c578471 --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/models/item/provolone_cheese_curds.json @@ -0,0 +1,3 @@ +{ + "parent": "growthcraft_milk:block/cheese_curd/cheese_curd_cloth" +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/models/item/provolone_cheese_curds_drained.json b/src/main/resources/assets/growthcraft_milk/models/item/provolone_cheese_curds_drained.json new file mode 100644 index 0000000..c1fd107 --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/models/item/provolone_cheese_curds_drained.json @@ -0,0 +1,3 @@ +{ + "parent": "growthcraft_milk:item/cheese_curds_drained" +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/models/item/provolone_cheese_slice.json b/src/main/resources/assets/growthcraft_milk/models/item/provolone_cheese_slice.json new file mode 100644 index 0000000..3ee5ef3 --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/models/item/provolone_cheese_slice.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_milk:item/cheese/asiago_cheese_slice" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/models/item/rennet_fluid_bucket.json b/src/main/resources/assets/growthcraft_milk/models/item/rennet_fluid_bucket.json new file mode 100644 index 0000000..f5fba3f --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/models/item/rennet_fluid_bucket.json @@ -0,0 +1,7 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft:item/bucket/bucket_fluid", + "layer1": "growthcraft:item/bucket/bucket_base" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/models/item/ricotta_cheese_curds.json b/src/main/resources/assets/growthcraft_milk/models/item/ricotta_cheese_curds.json new file mode 100644 index 0000000..c578471 --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/models/item/ricotta_cheese_curds.json @@ -0,0 +1,3 @@ +{ + "parent": "growthcraft_milk:block/cheese_curd/cheese_curd_cloth" +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/models/item/ricotta_cheese_curds_drained.json b/src/main/resources/assets/growthcraft_milk/models/item/ricotta_cheese_curds_drained.json new file mode 100644 index 0000000..c1fd107 --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/models/item/ricotta_cheese_curds_drained.json @@ -0,0 +1,3 @@ +{ + "parent": "growthcraft_milk:item/cheese_curds_drained" +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/models/item/ricotta_cheese_slice.json b/src/main/resources/assets/growthcraft_milk/models/item/ricotta_cheese_slice.json new file mode 100644 index 0000000..3af3f0a --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/models/item/ricotta_cheese_slice.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_milk:item/cheese/ricotta_cheese_slice" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/models/item/skim_milk_fluid_bucket.json b/src/main/resources/assets/growthcraft_milk/models/item/skim_milk_fluid_bucket.json new file mode 100644 index 0000000..ccfeb65 --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/models/item/skim_milk_fluid_bucket.json @@ -0,0 +1,7 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_milk:item/milking_bucket_contents", + "layer1": "growthcraft_milk:item/milking_bucket_base" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/models/item/starter_culture.json b/src/main/resources/assets/growthcraft_milk/models/item/starter_culture.json new file mode 100644 index 0000000..8f51ada --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/models/item/starter_culture.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_milk:item/starter_culture" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/models/item/stomach.json b/src/main/resources/assets/growthcraft_milk/models/item/stomach.json new file mode 100644 index 0000000..6dd1573 --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/models/item/stomach.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_milk:item/stomach" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/models/item/thistle.json b/src/main/resources/assets/growthcraft_milk/models/item/thistle.json new file mode 100644 index 0000000..ddf5b4d --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/models/item/thistle.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_milk:item/thistle" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/models/item/thistle_seed.json b/src/main/resources/assets/growthcraft_milk/models/item/thistle_seed.json new file mode 100644 index 0000000..eb96378 --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/models/item/thistle_seed.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_milk:item/thistle_seeds" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/models/item/whey_fluid_bucket.json b/src/main/resources/assets/growthcraft_milk/models/item/whey_fluid_bucket.json new file mode 100644 index 0000000..f5fba3f --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/models/item/whey_fluid_bucket.json @@ -0,0 +1,7 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft:item/bucket/bucket_fluid", + "layer1": "growthcraft:item/bucket/bucket_base" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/models/item/yogurt_apple.json b/src/main/resources/assets/growthcraft_milk/models/item/yogurt_apple.json new file mode 100644 index 0000000..6c4b590 --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/models/item/yogurt_apple.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_milk:item/yogurt/yogurt_apple" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/models/item/yogurt_chocolate.json b/src/main/resources/assets/growthcraft_milk/models/item/yogurt_chocolate.json new file mode 100644 index 0000000..08008f4 --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/models/item/yogurt_chocolate.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_milk:item/yogurt/yogurt_chocolate" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/models/item/yogurt_grape_purple.json b/src/main/resources/assets/growthcraft_milk/models/item/yogurt_grape_purple.json new file mode 100644 index 0000000..8ce6520 --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/models/item/yogurt_grape_purple.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_milk:item/yogurt/yogurt_grape_purple" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/models/item/yogurt_grape_red.json b/src/main/resources/assets/growthcraft_milk/models/item/yogurt_grape_red.json new file mode 100644 index 0000000..aadefe3 --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/models/item/yogurt_grape_red.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_milk:item/yogurt/yogurt_grape_red" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/models/item/yogurt_grape_white.json b/src/main/resources/assets/growthcraft_milk/models/item/yogurt_grape_white.json new file mode 100644 index 0000000..d33b74e --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/models/item/yogurt_grape_white.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_milk:item/yogurt/yogurt_grape_white" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/models/item/yogurt_honey.json b/src/main/resources/assets/growthcraft_milk/models/item/yogurt_honey.json new file mode 100644 index 0000000..caa4727 --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/models/item/yogurt_honey.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_milk:item/yogurt/yogurt_honey" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/models/item/yogurt_plain.json b/src/main/resources/assets/growthcraft_milk/models/item/yogurt_plain.json new file mode 100644 index 0000000..619aee7 --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/models/item/yogurt_plain.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_milk:item/yogurt/yogurt_plain" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/models/item/yogurt_pumpkin.json b/src/main/resources/assets/growthcraft_milk/models/item/yogurt_pumpkin.json new file mode 100644 index 0000000..41e8fe5 --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/models/item/yogurt_pumpkin.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_milk:item/yogurt/yogurt_pumpkin" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/models/item/yogurt_watermelon.json b/src/main/resources/assets/growthcraft_milk/models/item/yogurt_watermelon.json new file mode 100644 index 0000000..f4d0a60 --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/models/item/yogurt_watermelon.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_milk:item/yogurt/yogurt_watermelon" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/butter_churn/butter_churn.png b/src/main/resources/assets/growthcraft_milk/textures/block/butter_churn/butter_churn.png new file mode 100644 index 0000000..23f87c0 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/butter_churn/butter_churn.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/butter_churn/butter_churn_plunge.png b/src/main/resources/assets/growthcraft_milk/textures/block/butter_churn/butter_churn_plunge.png new file mode 100644 index 0000000..f385fa0 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/butter_churn/butter_churn_plunge.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/butter_churn/butter_churn_top.png b/src/main/resources/assets/growthcraft_milk/textures/block/butter_churn/butter_churn_top.png new file mode 100644 index 0000000..916a4ea Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/butter_churn/butter_churn_top.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/cheese/appenzeller_aged_side.png b/src/main/resources/assets/growthcraft_milk/textures/block/cheese/appenzeller_aged_side.png new file mode 100644 index 0000000..99f87fa Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/cheese/appenzeller_aged_side.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/cheese/appenzeller_aged_top.png b/src/main/resources/assets/growthcraft_milk/textures/block/cheese/appenzeller_aged_top.png new file mode 100644 index 0000000..90de96b Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/cheese/appenzeller_aged_top.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/cheese/appenzeller_curds.png b/src/main/resources/assets/growthcraft_milk/textures/block/cheese/appenzeller_curds.png new file mode 100644 index 0000000..85c22a1 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/cheese/appenzeller_curds.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/cheese/appenzeller_unaged_side.png b/src/main/resources/assets/growthcraft_milk/textures/block/cheese/appenzeller_unaged_side.png new file mode 100644 index 0000000..c4c02e7 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/cheese/appenzeller_unaged_side.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/cheese/appenzeller_unaged_top.png b/src/main/resources/assets/growthcraft_milk/textures/block/cheese/appenzeller_unaged_top.png new file mode 100644 index 0000000..bb4f919 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/cheese/appenzeller_unaged_top.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/cheese/asiago_aged_side.png b/src/main/resources/assets/growthcraft_milk/textures/block/cheese/asiago_aged_side.png new file mode 100644 index 0000000..cbb34ca Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/cheese/asiago_aged_side.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/cheese/asiago_aged_top.png b/src/main/resources/assets/growthcraft_milk/textures/block/cheese/asiago_aged_top.png new file mode 100644 index 0000000..b7c199d Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/cheese/asiago_aged_top.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/cheese/asiago_curds.png b/src/main/resources/assets/growthcraft_milk/textures/block/cheese/asiago_curds.png new file mode 100644 index 0000000..c983b30 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/cheese/asiago_curds.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/cheese/asiago_unaged_side.png b/src/main/resources/assets/growthcraft_milk/textures/block/cheese/asiago_unaged_side.png new file mode 100644 index 0000000..aed046c Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/cheese/asiago_unaged_side.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/cheese/asiago_unaged_top.png b/src/main/resources/assets/growthcraft_milk/textures/block/cheese/asiago_unaged_top.png new file mode 100644 index 0000000..c73df74 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/cheese/asiago_unaged_top.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/cheese/casu_marzu_aged_side.png b/src/main/resources/assets/growthcraft_milk/textures/block/cheese/casu_marzu_aged_side.png new file mode 100644 index 0000000..13df3eb Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/cheese/casu_marzu_aged_side.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/cheese/casu_marzu_aged_top.png b/src/main/resources/assets/growthcraft_milk/textures/block/cheese/casu_marzu_aged_top.png new file mode 100644 index 0000000..819e751 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/cheese/casu_marzu_aged_top.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/cheese/casu_marzu_curds.png b/src/main/resources/assets/growthcraft_milk/textures/block/cheese/casu_marzu_curds.png new file mode 100644 index 0000000..8630250 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/cheese/casu_marzu_curds.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/cheese/casu_marzu_unaged_side.png b/src/main/resources/assets/growthcraft_milk/textures/block/cheese/casu_marzu_unaged_side.png new file mode 100644 index 0000000..d971c3b Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/cheese/casu_marzu_unaged_side.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/cheese/casu_marzu_unaged_top.png b/src/main/resources/assets/growthcraft_milk/textures/block/cheese/casu_marzu_unaged_top.png new file mode 100644 index 0000000..f1093cf Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/cheese/casu_marzu_unaged_top.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/cheese/cheddar_curds.png b/src/main/resources/assets/growthcraft_milk/textures/block/cheese/cheddar_curds.png new file mode 100644 index 0000000..42b6fe6 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/cheese/cheddar_curds.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/cheese/cheddar_unwaxed_side.png b/src/main/resources/assets/growthcraft_milk/textures/block/cheese/cheddar_unwaxed_side.png new file mode 100644 index 0000000..912f4cc Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/cheese/cheddar_unwaxed_side.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/cheese/cheddar_unwaxed_top.png b/src/main/resources/assets/growthcraft_milk/textures/block/cheese/cheddar_unwaxed_top.png new file mode 100644 index 0000000..bdc8137 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/cheese/cheddar_unwaxed_top.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/cheese/cheddar_waxed_side.png b/src/main/resources/assets/growthcraft_milk/textures/block/cheese/cheddar_waxed_side.png new file mode 100644 index 0000000..7b8467f Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/cheese/cheddar_waxed_side.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/cheese/cheddar_waxed_top.png b/src/main/resources/assets/growthcraft_milk/textures/block/cheese/cheddar_waxed_top.png new file mode 100644 index 0000000..e7a98c3 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/cheese/cheddar_waxed_top.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/cheese/emmentaler_aged_side.png b/src/main/resources/assets/growthcraft_milk/textures/block/cheese/emmentaler_aged_side.png new file mode 100644 index 0000000..5aacd09 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/cheese/emmentaler_aged_side.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/cheese/emmentaler_aged_top.png b/src/main/resources/assets/growthcraft_milk/textures/block/cheese/emmentaler_aged_top.png new file mode 100644 index 0000000..bb9ea82 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/cheese/emmentaler_aged_top.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/cheese/emmentaler_curds.png b/src/main/resources/assets/growthcraft_milk/textures/block/cheese/emmentaler_curds.png new file mode 100644 index 0000000..eeac00b Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/cheese/emmentaler_curds.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/cheese/emmentaler_unaged_side.png b/src/main/resources/assets/growthcraft_milk/textures/block/cheese/emmentaler_unaged_side.png new file mode 100644 index 0000000..36a971c Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/cheese/emmentaler_unaged_side.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/cheese/emmentaler_unaged_top.png b/src/main/resources/assets/growthcraft_milk/textures/block/cheese/emmentaler_unaged_top.png new file mode 100644 index 0000000..09d73c6 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/cheese/emmentaler_unaged_top.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/cheese/gorgonzola_aged_side.png b/src/main/resources/assets/growthcraft_milk/textures/block/cheese/gorgonzola_aged_side.png new file mode 100644 index 0000000..6f73eb1 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/cheese/gorgonzola_aged_side.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/cheese/gorgonzola_aged_top.png b/src/main/resources/assets/growthcraft_milk/textures/block/cheese/gorgonzola_aged_top.png new file mode 100644 index 0000000..609aabd Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/cheese/gorgonzola_aged_top.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/cheese/gorgonzola_curds.png b/src/main/resources/assets/growthcraft_milk/textures/block/cheese/gorgonzola_curds.png new file mode 100644 index 0000000..20bc2a8 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/cheese/gorgonzola_curds.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/cheese/gorgonzola_unaged_side.png b/src/main/resources/assets/growthcraft_milk/textures/block/cheese/gorgonzola_unaged_side.png new file mode 100644 index 0000000..90dfa2a Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/cheese/gorgonzola_unaged_side.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/cheese/gorgonzola_unaged_top.png b/src/main/resources/assets/growthcraft_milk/textures/block/cheese/gorgonzola_unaged_top.png new file mode 100644 index 0000000..2f79951 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/cheese/gorgonzola_unaged_top.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/cheese/gouda_curds.png b/src/main/resources/assets/growthcraft_milk/textures/block/cheese/gouda_curds.png new file mode 100644 index 0000000..e8244c7 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/cheese/gouda_curds.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/cheese/gouda_unwaxed_side.png b/src/main/resources/assets/growthcraft_milk/textures/block/cheese/gouda_unwaxed_side.png new file mode 100644 index 0000000..01c3db5 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/cheese/gouda_unwaxed_side.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/cheese/gouda_unwaxed_top.png b/src/main/resources/assets/growthcraft_milk/textures/block/cheese/gouda_unwaxed_top.png new file mode 100644 index 0000000..ab3ff27 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/cheese/gouda_unwaxed_top.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/cheese/gouda_waxed_side.png b/src/main/resources/assets/growthcraft_milk/textures/block/cheese/gouda_waxed_side.png new file mode 100644 index 0000000..a6b99c2 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/cheese/gouda_waxed_side.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/cheese/gouda_waxed_top.png b/src/main/resources/assets/growthcraft_milk/textures/block/cheese/gouda_waxed_top.png new file mode 100644 index 0000000..4b8a554 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/cheese/gouda_waxed_top.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/cheese/monterey_curds.png b/src/main/resources/assets/growthcraft_milk/textures/block/cheese/monterey_curds.png new file mode 100644 index 0000000..f8baed0 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/cheese/monterey_curds.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/cheese/monterey_unwaxed_side.png b/src/main/resources/assets/growthcraft_milk/textures/block/cheese/monterey_unwaxed_side.png new file mode 100644 index 0000000..7990dc2 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/cheese/monterey_unwaxed_side.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/cheese/monterey_unwaxed_top.png b/src/main/resources/assets/growthcraft_milk/textures/block/cheese/monterey_unwaxed_top.png new file mode 100644 index 0000000..6a767e8 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/cheese/monterey_unwaxed_top.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/cheese/monterey_waxed_side.png b/src/main/resources/assets/growthcraft_milk/textures/block/cheese/monterey_waxed_side.png new file mode 100644 index 0000000..802a0b3 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/cheese/monterey_waxed_side.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/cheese/monterey_waxed_top.png b/src/main/resources/assets/growthcraft_milk/textures/block/cheese/monterey_waxed_top.png new file mode 100644 index 0000000..1955ad9 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/cheese/monterey_waxed_top.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/cheese/parmesan_aged_side.png b/src/main/resources/assets/growthcraft_milk/textures/block/cheese/parmesan_aged_side.png new file mode 100644 index 0000000..e63f76a Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/cheese/parmesan_aged_side.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/cheese/parmesan_aged_top.png b/src/main/resources/assets/growthcraft_milk/textures/block/cheese/parmesan_aged_top.png new file mode 100644 index 0000000..40989ee Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/cheese/parmesan_aged_top.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/cheese/parmesan_curds.png b/src/main/resources/assets/growthcraft_milk/textures/block/cheese/parmesan_curds.png new file mode 100644 index 0000000..72b73e5 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/cheese/parmesan_curds.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/cheese/parmesan_unaged_side.png b/src/main/resources/assets/growthcraft_milk/textures/block/cheese/parmesan_unaged_side.png new file mode 100644 index 0000000..99c013c Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/cheese/parmesan_unaged_side.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/cheese/parmesan_unaged_top.png b/src/main/resources/assets/growthcraft_milk/textures/block/cheese/parmesan_unaged_top.png new file mode 100644 index 0000000..31e1863 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/cheese/parmesan_unaged_top.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/cheese/prev_gouda_unwaxed_side.png b/src/main/resources/assets/growthcraft_milk/textures/block/cheese/prev_gouda_unwaxed_side.png new file mode 100644 index 0000000..845c471 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/cheese/prev_gouda_unwaxed_side.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/cheese/prev_gouda_unwaxed_top.png b/src/main/resources/assets/growthcraft_milk/textures/block/cheese/prev_gouda_unwaxed_top.png new file mode 100644 index 0000000..845c471 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/cheese/prev_gouda_unwaxed_top.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/cheese/provolone_curds.png b/src/main/resources/assets/growthcraft_milk/textures/block/cheese/provolone_curds.png new file mode 100644 index 0000000..96ad249 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/cheese/provolone_curds.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/cheese/provolone_unwaxed_side.png b/src/main/resources/assets/growthcraft_milk/textures/block/cheese/provolone_unwaxed_side.png new file mode 100644 index 0000000..be4cc63 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/cheese/provolone_unwaxed_side.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/cheese/provolone_unwaxed_top.png b/src/main/resources/assets/growthcraft_milk/textures/block/cheese/provolone_unwaxed_top.png new file mode 100644 index 0000000..cdf6b1e Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/cheese/provolone_unwaxed_top.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/cheese/provolone_waxed_side.png b/src/main/resources/assets/growthcraft_milk/textures/block/cheese/provolone_waxed_side.png new file mode 100644 index 0000000..bf652e8 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/cheese/provolone_waxed_side.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/cheese/provolone_waxed_top.png b/src/main/resources/assets/growthcraft_milk/textures/block/cheese/provolone_waxed_top.png new file mode 100644 index 0000000..f6e0eac Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/cheese/provolone_waxed_top.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/cheese/ricotta_curds.png b/src/main/resources/assets/growthcraft_milk/textures/block/cheese/ricotta_curds.png new file mode 100644 index 0000000..2449c56 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/cheese/ricotta_curds.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/cheese_base.png b/src/main/resources/assets/growthcraft_milk/textures/block/cheese_base.png new file mode 100644 index 0000000..b7c199d Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/cheese_base.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/cheese_curd/cheese_curds.png b/src/main/resources/assets/growthcraft_milk/textures/block/cheese_curd/cheese_curds.png new file mode 100644 index 0000000..6cc8003 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/cheese_curd/cheese_curds.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/cheese_curd/cheese_curds_cloth.png b/src/main/resources/assets/growthcraft_milk/textures/block/cheese_curd/cheese_curds_cloth.png new file mode 100644 index 0000000..6650305 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/cheese_curd/cheese_curds_cloth.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/cheese_curd/cheese_curds_cloth_string.png b/src/main/resources/assets/growthcraft_milk/textures/block/cheese_curd/cheese_curds_cloth_string.png new file mode 100644 index 0000000..75afc75 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/cheese_curd/cheese_curds_cloth_string.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/cheese_curds.png b/src/main/resources/assets/growthcraft_milk/textures/block/cheese_curds.png new file mode 100644 index 0000000..6cc8003 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/cheese_curds.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/cheese_curds_cloth.png b/src/main/resources/assets/growthcraft_milk/textures/block/cheese_curds_cloth.png new file mode 100644 index 0000000..6650305 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/cheese_curds_cloth.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/cheese_curds_cloth_string.png b/src/main/resources/assets/growthcraft_milk/textures/block/cheese_curds_cloth_string.png new file mode 100644 index 0000000..75afc75 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/cheese_curds_cloth_string.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/cheese_press/barrel_side.png b/src/main/resources/assets/growthcraft_milk/textures/block/cheese_press/barrel_side.png new file mode 100644 index 0000000..769fc80 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/cheese_press/barrel_side.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/cheese_press/base.png b/src/main/resources/assets/growthcraft_milk/textures/block/cheese_press/base.png new file mode 100644 index 0000000..dfb1770 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/cheese_press/base.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/cheese_press/iron_frame.png b/src/main/resources/assets/growthcraft_milk/textures/block/cheese_press/iron_frame.png new file mode 100644 index 0000000..4e2791f Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/cheese_press/iron_frame.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/cheese_press/vice_top.png b/src/main/resources/assets/growthcraft_milk/textures/block/cheese_press/vice_top.png new file mode 100644 index 0000000..c586389 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/cheese_press/vice_top.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/cheese_side.png b/src/main/resources/assets/growthcraft_milk/textures/block/cheese_side.png new file mode 100644 index 0000000..cbb34ca Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/cheese_side.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/cheese_slab/cheese_base.copy.png b/src/main/resources/assets/growthcraft_milk/textures/block/cheese_slab/cheese_base.copy.png new file mode 100644 index 0000000..b7c199d Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/cheese_slab/cheese_base.copy.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/cheese_slab/cheese_base.png b/src/main/resources/assets/growthcraft_milk/textures/block/cheese_slab/cheese_base.png new file mode 100644 index 0000000..527c9b9 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/cheese_slab/cheese_base.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/cheese_slab/cheese_side.copy.png b/src/main/resources/assets/growthcraft_milk/textures/block/cheese_slab/cheese_side.copy.png new file mode 100644 index 0000000..cbb34ca Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/cheese_slab/cheese_side.copy.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/cheese_slab/cheese_side.png b/src/main/resources/assets/growthcraft_milk/textures/block/cheese_slab/cheese_side.png new file mode 100644 index 0000000..00a043d Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/cheese_slab/cheese_side.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/cheese_vat.png b/src/main/resources/assets/growthcraft_milk/textures/block/cheese_vat.png new file mode 100644 index 0000000..d5a30dd Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/cheese_vat.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/fluid/butter_milk_fluid.png b/src/main/resources/assets/growthcraft_milk/textures/block/fluid/butter_milk_fluid.png new file mode 100644 index 0000000..c6f2fa9 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/fluid/butter_milk_fluid.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/fluid/butter_milk_fluid_flowing.png b/src/main/resources/assets/growthcraft_milk/textures/block/fluid/butter_milk_fluid_flowing.png new file mode 100644 index 0000000..5b12070 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/fluid/butter_milk_fluid_flowing.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/fluid/butter_milk_fluid_flowing.png.mcmeta b/src/main/resources/assets/growthcraft_milk/textures/block/fluid/butter_milk_fluid_flowing.png.mcmeta new file mode 100644 index 0000000..4f0718a --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/textures/block/fluid/butter_milk_fluid_flowing.png.mcmeta @@ -0,0 +1,3 @@ +{ + "animation": {} +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/fluid/butter_milk_fluid_overlay.png b/src/main/resources/assets/growthcraft_milk/textures/block/fluid/butter_milk_fluid_overlay.png new file mode 100644 index 0000000..d5d4b02 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/fluid/butter_milk_fluid_overlay.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/fluid/butter_milk_fluid_still.png b/src/main/resources/assets/growthcraft_milk/textures/block/fluid/butter_milk_fluid_still.png new file mode 100644 index 0000000..fe5c394 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/fluid/butter_milk_fluid_still.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/fluid/butter_milk_fluid_still.png.mcmeta b/src/main/resources/assets/growthcraft_milk/textures/block/fluid/butter_milk_fluid_still.png.mcmeta new file mode 100644 index 0000000..0645f48 --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/textures/block/fluid/butter_milk_fluid_still.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 2 + } +} diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/fluid/cheese_base_fluid.png b/src/main/resources/assets/growthcraft_milk/textures/block/fluid/cheese_base_fluid.png new file mode 100644 index 0000000..c6f2fa9 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/fluid/cheese_base_fluid.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/fluid/cheese_base_fluid_flowing.png b/src/main/resources/assets/growthcraft_milk/textures/block/fluid/cheese_base_fluid_flowing.png new file mode 100644 index 0000000..5b12070 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/fluid/cheese_base_fluid_flowing.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/fluid/cheese_base_fluid_flowing.png.mcmeta b/src/main/resources/assets/growthcraft_milk/textures/block/fluid/cheese_base_fluid_flowing.png.mcmeta new file mode 100644 index 0000000..4f0718a --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/textures/block/fluid/cheese_base_fluid_flowing.png.mcmeta @@ -0,0 +1,3 @@ +{ + "animation": {} +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/fluid/cheese_base_fluid_overlay.png b/src/main/resources/assets/growthcraft_milk/textures/block/fluid/cheese_base_fluid_overlay.png new file mode 100644 index 0000000..d5d4b02 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/fluid/cheese_base_fluid_overlay.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/fluid/cheese_base_fluid_still.png b/src/main/resources/assets/growthcraft_milk/textures/block/fluid/cheese_base_fluid_still.png new file mode 100644 index 0000000..fe5c394 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/fluid/cheese_base_fluid_still.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/fluid/cheese_base_fluid_still.png.mcmeta b/src/main/resources/assets/growthcraft_milk/textures/block/fluid/cheese_base_fluid_still.png.mcmeta new file mode 100644 index 0000000..0645f48 --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/textures/block/fluid/cheese_base_fluid_still.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 2 + } +} diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/fluid/condensed_milk_fluid.png b/src/main/resources/assets/growthcraft_milk/textures/block/fluid/condensed_milk_fluid.png new file mode 100644 index 0000000..c6f2fa9 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/fluid/condensed_milk_fluid.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/fluid/condensed_milk_fluid_flowing.png b/src/main/resources/assets/growthcraft_milk/textures/block/fluid/condensed_milk_fluid_flowing.png new file mode 100644 index 0000000..5b12070 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/fluid/condensed_milk_fluid_flowing.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/fluid/condensed_milk_fluid_flowing.png.mcmeta b/src/main/resources/assets/growthcraft_milk/textures/block/fluid/condensed_milk_fluid_flowing.png.mcmeta new file mode 100644 index 0000000..4f0718a --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/textures/block/fluid/condensed_milk_fluid_flowing.png.mcmeta @@ -0,0 +1,3 @@ +{ + "animation": {} +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/fluid/condensed_milk_fluid_overlay.png b/src/main/resources/assets/growthcraft_milk/textures/block/fluid/condensed_milk_fluid_overlay.png new file mode 100644 index 0000000..d5d4b02 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/fluid/condensed_milk_fluid_overlay.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/fluid/condensed_milk_fluid_still.png b/src/main/resources/assets/growthcraft_milk/textures/block/fluid/condensed_milk_fluid_still.png new file mode 100644 index 0000000..fe5c394 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/fluid/condensed_milk_fluid_still.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/fluid/condensed_milk_fluid_still.png.mcmeta b/src/main/resources/assets/growthcraft_milk/textures/block/fluid/condensed_milk_fluid_still.png.mcmeta new file mode 100644 index 0000000..0645f48 --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/textures/block/fluid/condensed_milk_fluid_still.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 2 + } +} diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/fluid/cream_fluid.png b/src/main/resources/assets/growthcraft_milk/textures/block/fluid/cream_fluid.png new file mode 100644 index 0000000..c6f2fa9 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/fluid/cream_fluid.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/fluid/cream_fluid_flowing.png b/src/main/resources/assets/growthcraft_milk/textures/block/fluid/cream_fluid_flowing.png new file mode 100644 index 0000000..5b12070 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/fluid/cream_fluid_flowing.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/fluid/cream_fluid_flowing.png.mcmeta b/src/main/resources/assets/growthcraft_milk/textures/block/fluid/cream_fluid_flowing.png.mcmeta new file mode 100644 index 0000000..4f0718a --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/textures/block/fluid/cream_fluid_flowing.png.mcmeta @@ -0,0 +1,3 @@ +{ + "animation": {} +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/fluid/cream_fluid_overlay.png b/src/main/resources/assets/growthcraft_milk/textures/block/fluid/cream_fluid_overlay.png new file mode 100644 index 0000000..d5d4b02 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/fluid/cream_fluid_overlay.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/fluid/cream_fluid_still.png b/src/main/resources/assets/growthcraft_milk/textures/block/fluid/cream_fluid_still.png new file mode 100644 index 0000000..fe5c394 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/fluid/cream_fluid_still.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/fluid/cream_fluid_still.png.mcmeta b/src/main/resources/assets/growthcraft_milk/textures/block/fluid/cream_fluid_still.png.mcmeta new file mode 100644 index 0000000..0645f48 --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/textures/block/fluid/cream_fluid_still.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 2 + } +} diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/fluid/cultured_milk_fluid.png b/src/main/resources/assets/growthcraft_milk/textures/block/fluid/cultured_milk_fluid.png new file mode 100644 index 0000000..c6f2fa9 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/fluid/cultured_milk_fluid.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/fluid/cultured_milk_fluid_flowing.png b/src/main/resources/assets/growthcraft_milk/textures/block/fluid/cultured_milk_fluid_flowing.png new file mode 100644 index 0000000..5b12070 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/fluid/cultured_milk_fluid_flowing.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/fluid/cultured_milk_fluid_flowing.png.mcmeta b/src/main/resources/assets/growthcraft_milk/textures/block/fluid/cultured_milk_fluid_flowing.png.mcmeta new file mode 100644 index 0000000..4f0718a --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/textures/block/fluid/cultured_milk_fluid_flowing.png.mcmeta @@ -0,0 +1,3 @@ +{ + "animation": {} +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/fluid/cultured_milk_fluid_overlay.png b/src/main/resources/assets/growthcraft_milk/textures/block/fluid/cultured_milk_fluid_overlay.png new file mode 100644 index 0000000..d5d4b02 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/fluid/cultured_milk_fluid_overlay.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/fluid/cultured_milk_fluid_still.png b/src/main/resources/assets/growthcraft_milk/textures/block/fluid/cultured_milk_fluid_still.png new file mode 100644 index 0000000..fe5c394 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/fluid/cultured_milk_fluid_still.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/fluid/cultured_milk_fluid_still.png.mcmeta b/src/main/resources/assets/growthcraft_milk/textures/block/fluid/cultured_milk_fluid_still.png.mcmeta new file mode 100644 index 0000000..0645f48 --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/textures/block/fluid/cultured_milk_fluid_still.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 2 + } +} diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/fluid/kumis_fluid.png b/src/main/resources/assets/growthcraft_milk/textures/block/fluid/kumis_fluid.png new file mode 100644 index 0000000..c6f2fa9 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/fluid/kumis_fluid.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/fluid/kumis_fluid_flowing.png b/src/main/resources/assets/growthcraft_milk/textures/block/fluid/kumis_fluid_flowing.png new file mode 100644 index 0000000..5b12070 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/fluid/kumis_fluid_flowing.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/fluid/kumis_fluid_flowing.png.mcmeta b/src/main/resources/assets/growthcraft_milk/textures/block/fluid/kumis_fluid_flowing.png.mcmeta new file mode 100644 index 0000000..4f0718a --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/textures/block/fluid/kumis_fluid_flowing.png.mcmeta @@ -0,0 +1,3 @@ +{ + "animation": {} +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/fluid/kumis_fluid_overlay.png b/src/main/resources/assets/growthcraft_milk/textures/block/fluid/kumis_fluid_overlay.png new file mode 100644 index 0000000..d5d4b02 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/fluid/kumis_fluid_overlay.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/fluid/kumis_fluid_still.png b/src/main/resources/assets/growthcraft_milk/textures/block/fluid/kumis_fluid_still.png new file mode 100644 index 0000000..fe5c394 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/fluid/kumis_fluid_still.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/fluid/kumis_fluid_still.png.mcmeta b/src/main/resources/assets/growthcraft_milk/textures/block/fluid/kumis_fluid_still.png.mcmeta new file mode 100644 index 0000000..0645f48 --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/textures/block/fluid/kumis_fluid_still.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 2 + } +} diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/fluid/milk_fluid.png b/src/main/resources/assets/growthcraft_milk/textures/block/fluid/milk_fluid.png new file mode 100644 index 0000000..c6f2fa9 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/fluid/milk_fluid.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/fluid/milk_fluid_flowing.png b/src/main/resources/assets/growthcraft_milk/textures/block/fluid/milk_fluid_flowing.png new file mode 100644 index 0000000..5b12070 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/fluid/milk_fluid_flowing.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/fluid/milk_fluid_flowing.png.mcmeta b/src/main/resources/assets/growthcraft_milk/textures/block/fluid/milk_fluid_flowing.png.mcmeta new file mode 100644 index 0000000..4f0718a --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/textures/block/fluid/milk_fluid_flowing.png.mcmeta @@ -0,0 +1,3 @@ +{ + "animation": {} +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/fluid/milk_fluid_overlay.png b/src/main/resources/assets/growthcraft_milk/textures/block/fluid/milk_fluid_overlay.png new file mode 100644 index 0000000..d5d4b02 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/fluid/milk_fluid_overlay.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/fluid/milk_fluid_still.png b/src/main/resources/assets/growthcraft_milk/textures/block/fluid/milk_fluid_still.png new file mode 100644 index 0000000..fe5c394 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/fluid/milk_fluid_still.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/fluid/milk_fluid_still.png.mcmeta b/src/main/resources/assets/growthcraft_milk/textures/block/fluid/milk_fluid_still.png.mcmeta new file mode 100644 index 0000000..0645f48 --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/textures/block/fluid/milk_fluid_still.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 2 + } +} diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/fluid/rennet_fluid.png b/src/main/resources/assets/growthcraft_milk/textures/block/fluid/rennet_fluid.png new file mode 100644 index 0000000..c6f2fa9 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/fluid/rennet_fluid.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/fluid/rennet_fluid_flowing.png b/src/main/resources/assets/growthcraft_milk/textures/block/fluid/rennet_fluid_flowing.png new file mode 100644 index 0000000..5b12070 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/fluid/rennet_fluid_flowing.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/fluid/rennet_fluid_flowing.png.mcmeta b/src/main/resources/assets/growthcraft_milk/textures/block/fluid/rennet_fluid_flowing.png.mcmeta new file mode 100644 index 0000000..4f0718a --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/textures/block/fluid/rennet_fluid_flowing.png.mcmeta @@ -0,0 +1,3 @@ +{ + "animation": {} +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/fluid/rennet_fluid_overlay.png b/src/main/resources/assets/growthcraft_milk/textures/block/fluid/rennet_fluid_overlay.png new file mode 100644 index 0000000..d5d4b02 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/fluid/rennet_fluid_overlay.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/fluid/rennet_fluid_still.png b/src/main/resources/assets/growthcraft_milk/textures/block/fluid/rennet_fluid_still.png new file mode 100644 index 0000000..fe5c394 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/fluid/rennet_fluid_still.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/fluid/rennet_fluid_still.png.mcmeta b/src/main/resources/assets/growthcraft_milk/textures/block/fluid/rennet_fluid_still.png.mcmeta new file mode 100644 index 0000000..0645f48 --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/textures/block/fluid/rennet_fluid_still.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 2 + } +} diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/fluid/skim_milk_fluid.png b/src/main/resources/assets/growthcraft_milk/textures/block/fluid/skim_milk_fluid.png new file mode 100644 index 0000000..c6f2fa9 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/fluid/skim_milk_fluid.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/fluid/skim_milk_fluid_flowing.png b/src/main/resources/assets/growthcraft_milk/textures/block/fluid/skim_milk_fluid_flowing.png new file mode 100644 index 0000000..5b12070 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/fluid/skim_milk_fluid_flowing.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/fluid/skim_milk_fluid_flowing.png.mcmeta b/src/main/resources/assets/growthcraft_milk/textures/block/fluid/skim_milk_fluid_flowing.png.mcmeta new file mode 100644 index 0000000..4f0718a --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/textures/block/fluid/skim_milk_fluid_flowing.png.mcmeta @@ -0,0 +1,3 @@ +{ + "animation": {} +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/fluid/skim_milk_fluid_overlay.png b/src/main/resources/assets/growthcraft_milk/textures/block/fluid/skim_milk_fluid_overlay.png new file mode 100644 index 0000000..d5d4b02 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/fluid/skim_milk_fluid_overlay.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/fluid/skim_milk_fluid_still.png b/src/main/resources/assets/growthcraft_milk/textures/block/fluid/skim_milk_fluid_still.png new file mode 100644 index 0000000..fe5c394 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/fluid/skim_milk_fluid_still.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/fluid/skim_milk_fluid_still.png.mcmeta b/src/main/resources/assets/growthcraft_milk/textures/block/fluid/skim_milk_fluid_still.png.mcmeta new file mode 100644 index 0000000..0645f48 --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/textures/block/fluid/skim_milk_fluid_still.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 2 + } +} diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/fluid/whey_fluid.png b/src/main/resources/assets/growthcraft_milk/textures/block/fluid/whey_fluid.png new file mode 100644 index 0000000..c6f2fa9 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/fluid/whey_fluid.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/fluid/whey_fluid_flowing.png b/src/main/resources/assets/growthcraft_milk/textures/block/fluid/whey_fluid_flowing.png new file mode 100644 index 0000000..5b12070 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/fluid/whey_fluid_flowing.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/fluid/whey_fluid_flowing.png.mcmeta b/src/main/resources/assets/growthcraft_milk/textures/block/fluid/whey_fluid_flowing.png.mcmeta new file mode 100644 index 0000000..4f0718a --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/textures/block/fluid/whey_fluid_flowing.png.mcmeta @@ -0,0 +1,3 @@ +{ + "animation": {} +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/fluid/whey_fluid_overlay.png b/src/main/resources/assets/growthcraft_milk/textures/block/fluid/whey_fluid_overlay.png new file mode 100644 index 0000000..d5d4b02 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/fluid/whey_fluid_overlay.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/fluid/whey_fluid_still.png b/src/main/resources/assets/growthcraft_milk/textures/block/fluid/whey_fluid_still.png new file mode 100644 index 0000000..fe5c394 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/fluid/whey_fluid_still.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/fluid/whey_fluid_still.png.mcmeta b/src/main/resources/assets/growthcraft_milk/textures/block/fluid/whey_fluid_still.png.mcmeta new file mode 100644 index 0000000..0645f48 --- /dev/null +++ b/src/main/resources/assets/growthcraft_milk/textures/block/fluid/whey_fluid_still.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 2 + } +} diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/mixing_vat/mixing_vat.png b/src/main/resources/assets/growthcraft_milk/textures/block/mixing_vat/mixing_vat.png new file mode 100644 index 0000000..d5a30dd Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/mixing_vat/mixing_vat.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/mixing_vat/stonecutter_bottom.png b/src/main/resources/assets/growthcraft_milk/textures/block/mixing_vat/stonecutter_bottom.png new file mode 100644 index 0000000..a9af82d Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/mixing_vat/stonecutter_bottom.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/oak_planks.png b/src/main/resources/assets/growthcraft_milk/textures/block/oak_planks.png new file mode 100644 index 0000000..5de3861 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/oak_planks.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/pancheon.png b/src/main/resources/assets/growthcraft_milk/textures/block/pancheon.png new file mode 100644 index 0000000..b95bea3 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/pancheon.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/thistle_crop_stage0.png b/src/main/resources/assets/growthcraft_milk/textures/block/thistle_crop_stage0.png new file mode 100644 index 0000000..5420697 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/thistle_crop_stage0.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/thistle_crop_stage1.png b/src/main/resources/assets/growthcraft_milk/textures/block/thistle_crop_stage1.png new file mode 100644 index 0000000..19c4216 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/thistle_crop_stage1.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/thistle_crop_stage2.png b/src/main/resources/assets/growthcraft_milk/textures/block/thistle_crop_stage2.png new file mode 100644 index 0000000..9b7677a Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/thistle_crop_stage2.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/block/thistle_crop_stage3.png b/src/main/resources/assets/growthcraft_milk/textures/block/thistle_crop_stage3.png new file mode 100644 index 0000000..accfe45 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/block/thistle_crop_stage3.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/gui/cheese_press_screen.png b/src/main/resources/assets/growthcraft_milk/textures/gui/cheese_press_screen.png new file mode 100644 index 0000000..b41d795 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/gui/cheese_press_screen.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/gui/churn_screen.png b/src/main/resources/assets/growthcraft_milk/textures/gui/churn_screen.png new file mode 100644 index 0000000..e48fd0f Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/gui/churn_screen.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/gui/mixing_vat_screen.png b/src/main/resources/assets/growthcraft_milk/textures/gui/mixing_vat_screen.png new file mode 100644 index 0000000..7ed9350 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/gui/mixing_vat_screen.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/gui/pancheon_screen.png b/src/main/resources/assets/growthcraft_milk/textures/gui/pancheon_screen.png new file mode 100644 index 0000000..d9aed26 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/gui/pancheon_screen.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/item/butter/butter.png b/src/main/resources/assets/growthcraft_milk/textures/item/butter/butter.png new file mode 100644 index 0000000..b16cf8d Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/item/butter/butter.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/item/butter/butter_salted.png b/src/main/resources/assets/growthcraft_milk/textures/item/butter/butter_salted.png new file mode 100644 index 0000000..b16cf8d Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/item/butter/butter_salted.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/item/cheese/appenzeller_aged.png b/src/main/resources/assets/growthcraft_milk/textures/item/cheese/appenzeller_aged.png new file mode 100644 index 0000000..db9e8d4 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/item/cheese/appenzeller_aged.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/item/cheese/appenzeller_cheese_slice.png b/src/main/resources/assets/growthcraft_milk/textures/item/cheese/appenzeller_cheese_slice.png new file mode 100644 index 0000000..a941931 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/item/cheese/appenzeller_cheese_slice.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/item/cheese/appenzeller_curds.png b/src/main/resources/assets/growthcraft_milk/textures/item/cheese/appenzeller_curds.png new file mode 100644 index 0000000..10f9d2f Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/item/cheese/appenzeller_curds.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/item/cheese/appenzeller_cut.png b/src/main/resources/assets/growthcraft_milk/textures/item/cheese/appenzeller_cut.png new file mode 100644 index 0000000..099448e Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/item/cheese/appenzeller_cut.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/item/cheese/appenzeller_unaged.png b/src/main/resources/assets/growthcraft_milk/textures/item/cheese/appenzeller_unaged.png new file mode 100644 index 0000000..2761fa1 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/item/cheese/appenzeller_unaged.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/item/cheese/asiago_aged.png b/src/main/resources/assets/growthcraft_milk/textures/item/cheese/asiago_aged.png new file mode 100644 index 0000000..cd68730 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/item/cheese/asiago_aged.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/item/cheese/asiago_cheese_slice.png b/src/main/resources/assets/growthcraft_milk/textures/item/cheese/asiago_cheese_slice.png new file mode 100644 index 0000000..d42d102 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/item/cheese/asiago_cheese_slice.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/item/cheese/asiago_curds.png b/src/main/resources/assets/growthcraft_milk/textures/item/cheese/asiago_curds.png new file mode 100644 index 0000000..6755519 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/item/cheese/asiago_curds.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/item/cheese/asiago_cut.png b/src/main/resources/assets/growthcraft_milk/textures/item/cheese/asiago_cut.png new file mode 100644 index 0000000..8712dc4 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/item/cheese/asiago_cut.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/item/cheese/asiago_unaged.png b/src/main/resources/assets/growthcraft_milk/textures/item/cheese/asiago_unaged.png new file mode 100644 index 0000000..42ee88e Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/item/cheese/asiago_unaged.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/item/cheese/casu_marzu_aged.png b/src/main/resources/assets/growthcraft_milk/textures/item/cheese/casu_marzu_aged.png new file mode 100644 index 0000000..183ca4d Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/item/cheese/casu_marzu_aged.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/item/cheese/casu_marzu_cheese_slice.png b/src/main/resources/assets/growthcraft_milk/textures/item/cheese/casu_marzu_cheese_slice.png new file mode 100644 index 0000000..d5ac1a6 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/item/cheese/casu_marzu_cheese_slice.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/item/cheese/casu_marzu_curds.png b/src/main/resources/assets/growthcraft_milk/textures/item/cheese/casu_marzu_curds.png new file mode 100644 index 0000000..6f4001a Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/item/cheese/casu_marzu_curds.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/item/cheese/casu_marzu_cut.png b/src/main/resources/assets/growthcraft_milk/textures/item/cheese/casu_marzu_cut.png new file mode 100644 index 0000000..b7efab9 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/item/cheese/casu_marzu_cut.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/item/cheese/casu_marzu_unaged.png b/src/main/resources/assets/growthcraft_milk/textures/item/cheese/casu_marzu_unaged.png new file mode 100644 index 0000000..0b4b020 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/item/cheese/casu_marzu_unaged.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/item/cheese/cheddar_cheese_slice.png b/src/main/resources/assets/growthcraft_milk/textures/item/cheese/cheddar_cheese_slice.png new file mode 100644 index 0000000..d25bc93 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/item/cheese/cheddar_cheese_slice.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/item/cheese/cheddar_curds.png b/src/main/resources/assets/growthcraft_milk/textures/item/cheese/cheddar_curds.png new file mode 100644 index 0000000..8262ec3 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/item/cheese/cheddar_curds.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/item/cheese/cheddar_cut.png b/src/main/resources/assets/growthcraft_milk/textures/item/cheese/cheddar_cut.png new file mode 100644 index 0000000..2d1b1cd Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/item/cheese/cheddar_cut.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/item/cheese/cheddar_unwaxed.png b/src/main/resources/assets/growthcraft_milk/textures/item/cheese/cheddar_unwaxed.png new file mode 100644 index 0000000..81cce36 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/item/cheese/cheddar_unwaxed.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/item/cheese/cheddar_waxed.png b/src/main/resources/assets/growthcraft_milk/textures/item/cheese/cheddar_waxed.png new file mode 100644 index 0000000..75c5d8a Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/item/cheese/cheddar_waxed.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/item/cheese/cheese_curds_color_base.png b/src/main/resources/assets/growthcraft_milk/textures/item/cheese/cheese_curds_color_base.png new file mode 100644 index 0000000..a97b230 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/item/cheese/cheese_curds_color_base.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/item/cheese/cheese_curds_drained_layer0.png b/src/main/resources/assets/growthcraft_milk/textures/item/cheese/cheese_curds_drained_layer0.png new file mode 100644 index 0000000..5f28ae3 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/item/cheese/cheese_curds_drained_layer0.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/item/cheese/cheese_curds_drained_layer1.png b/src/main/resources/assets/growthcraft_milk/textures/item/cheese/cheese_curds_drained_layer1.png new file mode 100644 index 0000000..085fdef Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/item/cheese/cheese_curds_drained_layer1.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/item/cheese/emmentaler_aged.png b/src/main/resources/assets/growthcraft_milk/textures/item/cheese/emmentaler_aged.png new file mode 100644 index 0000000..72f5b12 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/item/cheese/emmentaler_aged.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/item/cheese/emmentaler_cheese_slice.png b/src/main/resources/assets/growthcraft_milk/textures/item/cheese/emmentaler_cheese_slice.png new file mode 100644 index 0000000..da8a0ad Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/item/cheese/emmentaler_cheese_slice.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/item/cheese/emmentaler_curds.png b/src/main/resources/assets/growthcraft_milk/textures/item/cheese/emmentaler_curds.png new file mode 100644 index 0000000..708ca45 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/item/cheese/emmentaler_curds.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/item/cheese/emmentaler_cut.png b/src/main/resources/assets/growthcraft_milk/textures/item/cheese/emmentaler_cut.png new file mode 100644 index 0000000..64d5216 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/item/cheese/emmentaler_cut.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/item/cheese/emmentaler_unaged.png b/src/main/resources/assets/growthcraft_milk/textures/item/cheese/emmentaler_unaged.png new file mode 100644 index 0000000..92c531f Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/item/cheese/emmentaler_unaged.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/item/cheese/gorgonzola_aged.png b/src/main/resources/assets/growthcraft_milk/textures/item/cheese/gorgonzola_aged.png new file mode 100644 index 0000000..8469f11 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/item/cheese/gorgonzola_aged.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/item/cheese/gorgonzola_cheese_slice.png b/src/main/resources/assets/growthcraft_milk/textures/item/cheese/gorgonzola_cheese_slice.png new file mode 100644 index 0000000..2d29447 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/item/cheese/gorgonzola_cheese_slice.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/item/cheese/gorgonzola_curds.png b/src/main/resources/assets/growthcraft_milk/textures/item/cheese/gorgonzola_curds.png new file mode 100644 index 0000000..c0a7c0c Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/item/cheese/gorgonzola_curds.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/item/cheese/gorgonzola_cut.png b/src/main/resources/assets/growthcraft_milk/textures/item/cheese/gorgonzola_cut.png new file mode 100644 index 0000000..06e3875 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/item/cheese/gorgonzola_cut.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/item/cheese/gorgonzola_unaged.png b/src/main/resources/assets/growthcraft_milk/textures/item/cheese/gorgonzola_unaged.png new file mode 100644 index 0000000..68ddd3e Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/item/cheese/gorgonzola_unaged.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/item/cheese/gouda_cheese_slice.png b/src/main/resources/assets/growthcraft_milk/textures/item/cheese/gouda_cheese_slice.png new file mode 100644 index 0000000..dadf6ae Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/item/cheese/gouda_cheese_slice.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/item/cheese/gouda_curds.png b/src/main/resources/assets/growthcraft_milk/textures/item/cheese/gouda_curds.png new file mode 100644 index 0000000..0a3f696 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/item/cheese/gouda_curds.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/item/cheese/gouda_cut.png b/src/main/resources/assets/growthcraft_milk/textures/item/cheese/gouda_cut.png new file mode 100644 index 0000000..895764b Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/item/cheese/gouda_cut.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/item/cheese/gouda_unwaxed.png b/src/main/resources/assets/growthcraft_milk/textures/item/cheese/gouda_unwaxed.png new file mode 100644 index 0000000..36ba691 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/item/cheese/gouda_unwaxed.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/item/cheese/gouda_waxed.png b/src/main/resources/assets/growthcraft_milk/textures/item/cheese/gouda_waxed.png new file mode 100644 index 0000000..5c130da Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/item/cheese/gouda_waxed.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/item/cheese/monterey_cheese_slice.png b/src/main/resources/assets/growthcraft_milk/textures/item/cheese/monterey_cheese_slice.png new file mode 100644 index 0000000..02218af Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/item/cheese/monterey_cheese_slice.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/item/cheese/monterey_curds.png b/src/main/resources/assets/growthcraft_milk/textures/item/cheese/monterey_curds.png new file mode 100644 index 0000000..644ab0d Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/item/cheese/monterey_curds.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/item/cheese/monterey_cut.png b/src/main/resources/assets/growthcraft_milk/textures/item/cheese/monterey_cut.png new file mode 100644 index 0000000..2f1d18b Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/item/cheese/monterey_cut.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/item/cheese/monterey_unwaxed.png b/src/main/resources/assets/growthcraft_milk/textures/item/cheese/monterey_unwaxed.png new file mode 100644 index 0000000..7b7e27a Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/item/cheese/monterey_unwaxed.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/item/cheese/monterey_waxed.png b/src/main/resources/assets/growthcraft_milk/textures/item/cheese/monterey_waxed.png new file mode 100644 index 0000000..8a4e61f Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/item/cheese/monterey_waxed.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/item/cheese/parmesan_aged.png b/src/main/resources/assets/growthcraft_milk/textures/item/cheese/parmesan_aged.png new file mode 100644 index 0000000..4b69a42 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/item/cheese/parmesan_aged.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/item/cheese/parmesan_cheese_slice.png b/src/main/resources/assets/growthcraft_milk/textures/item/cheese/parmesan_cheese_slice.png new file mode 100644 index 0000000..3bda3fc Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/item/cheese/parmesan_cheese_slice.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/item/cheese/parmesan_curds.png b/src/main/resources/assets/growthcraft_milk/textures/item/cheese/parmesan_curds.png new file mode 100644 index 0000000..744e42c Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/item/cheese/parmesan_curds.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/item/cheese/parmesan_cut.png b/src/main/resources/assets/growthcraft_milk/textures/item/cheese/parmesan_cut.png new file mode 100644 index 0000000..55c66e5 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/item/cheese/parmesan_cut.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/item/cheese/parmesan_unaged.png b/src/main/resources/assets/growthcraft_milk/textures/item/cheese/parmesan_unaged.png new file mode 100644 index 0000000..c4022f8 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/item/cheese/parmesan_unaged.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/item/cheese/prev_gouda_cut.png b/src/main/resources/assets/growthcraft_milk/textures/item/cheese/prev_gouda_cut.png new file mode 100644 index 0000000..a1b49a0 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/item/cheese/prev_gouda_cut.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/item/cheese/prev_gouda_unwaxed.png b/src/main/resources/assets/growthcraft_milk/textures/item/cheese/prev_gouda_unwaxed.png new file mode 100644 index 0000000..e21c909 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/item/cheese/prev_gouda_unwaxed.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/item/cheese/prev_gouda_waxed.png b/src/main/resources/assets/growthcraft_milk/textures/item/cheese/prev_gouda_waxed.png new file mode 100644 index 0000000..1c8830c Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/item/cheese/prev_gouda_waxed.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/item/cheese/prev_slice_gouda.png b/src/main/resources/assets/growthcraft_milk/textures/item/cheese/prev_slice_gouda.png new file mode 100644 index 0000000..22da338 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/item/cheese/prev_slice_gouda.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/item/cheese/provolone_cheese_slice.png b/src/main/resources/assets/growthcraft_milk/textures/item/cheese/provolone_cheese_slice.png new file mode 100644 index 0000000..a82ec48 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/item/cheese/provolone_cheese_slice.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/item/cheese/provolone_curds.png b/src/main/resources/assets/growthcraft_milk/textures/item/cheese/provolone_curds.png new file mode 100644 index 0000000..892ebac Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/item/cheese/provolone_curds.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/item/cheese/provolone_cut.png b/src/main/resources/assets/growthcraft_milk/textures/item/cheese/provolone_cut.png new file mode 100644 index 0000000..5f25b51 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/item/cheese/provolone_cut.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/item/cheese/provolone_unwaxed.png b/src/main/resources/assets/growthcraft_milk/textures/item/cheese/provolone_unwaxed.png new file mode 100644 index 0000000..371e1f7 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/item/cheese/provolone_unwaxed.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/item/cheese/provolone_waxed.png b/src/main/resources/assets/growthcraft_milk/textures/item/cheese/provolone_waxed.png new file mode 100644 index 0000000..cf183f8 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/item/cheese/provolone_waxed.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/item/cheese/ricotta_cheese_slice.png b/src/main/resources/assets/growthcraft_milk/textures/item/cheese/ricotta_cheese_slice.png new file mode 100644 index 0000000..5ce9755 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/item/cheese/ricotta_cheese_slice.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/item/cheese/ricotta_curds.png b/src/main/resources/assets/growthcraft_milk/textures/item/cheese/ricotta_curds.png new file mode 100644 index 0000000..a97b230 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/item/cheese/ricotta_curds.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/item/cheese_cloth.png b/src/main/resources/assets/growthcraft_milk/textures/item/cheese_cloth.png new file mode 100644 index 0000000..fe85a95 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/item/cheese_cloth.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/item/cheese_curds.png b/src/main/resources/assets/growthcraft_milk/textures/item/cheese_curds.png new file mode 100644 index 0000000..70166f2 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/item/cheese_curds.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/item/ice_cream/ice_cream_apple.png b/src/main/resources/assets/growthcraft_milk/textures/item/ice_cream/ice_cream_apple.png new file mode 100644 index 0000000..be336f5 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/item/ice_cream/ice_cream_apple.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/item/ice_cream/ice_cream_chocolate.png b/src/main/resources/assets/growthcraft_milk/textures/item/ice_cream/ice_cream_chocolate.png new file mode 100644 index 0000000..4c63a1d Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/item/ice_cream/ice_cream_chocolate.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/item/ice_cream/ice_cream_grape_purple.png b/src/main/resources/assets/growthcraft_milk/textures/item/ice_cream/ice_cream_grape_purple.png new file mode 100644 index 0000000..4bf29f2 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/item/ice_cream/ice_cream_grape_purple.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/item/ice_cream/ice_cream_grape_red.png b/src/main/resources/assets/growthcraft_milk/textures/item/ice_cream/ice_cream_grape_red.png new file mode 100644 index 0000000..99728c8 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/item/ice_cream/ice_cream_grape_red.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/item/ice_cream/ice_cream_grape_white.png b/src/main/resources/assets/growthcraft_milk/textures/item/ice_cream/ice_cream_grape_white.png new file mode 100644 index 0000000..88253fa Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/item/ice_cream/ice_cream_grape_white.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/item/ice_cream/ice_cream_honey.png b/src/main/resources/assets/growthcraft_milk/textures/item/ice_cream/ice_cream_honey.png new file mode 100644 index 0000000..2fcc678 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/item/ice_cream/ice_cream_honey.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/item/ice_cream/ice_cream_plain.png b/src/main/resources/assets/growthcraft_milk/textures/item/ice_cream/ice_cream_plain.png new file mode 100644 index 0000000..4b75641 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/item/ice_cream/ice_cream_plain.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/item/ice_cream/ice_cream_pumpkin.png b/src/main/resources/assets/growthcraft_milk/textures/item/ice_cream/ice_cream_pumpkin.png new file mode 100644 index 0000000..f9b4424 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/item/ice_cream/ice_cream_pumpkin.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/item/ice_cream/ice_cream_watermelon.png b/src/main/resources/assets/growthcraft_milk/textures/item/ice_cream/ice_cream_watermelon.png new file mode 100644 index 0000000..1f026eb Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/item/ice_cream/ice_cream_watermelon.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/item/milking_bucket_base.png b/src/main/resources/assets/growthcraft_milk/textures/item/milking_bucket_base.png new file mode 100644 index 0000000..bda38c3 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/item/milking_bucket_base.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/item/milking_bucket_contents.png b/src/main/resources/assets/growthcraft_milk/textures/item/milking_bucket_contents.png new file mode 100644 index 0000000..48dd725 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/item/milking_bucket_contents.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/item/milking_bucket_contents_default.png b/src/main/resources/assets/growthcraft_milk/textures/item/milking_bucket_contents_default.png new file mode 100644 index 0000000..68ada0a Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/item/milking_bucket_contents_default.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/item/starter_culture.png b/src/main/resources/assets/growthcraft_milk/textures/item/starter_culture.png new file mode 100644 index 0000000..d371d72 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/item/starter_culture.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/item/stomach.png b/src/main/resources/assets/growthcraft_milk/textures/item/stomach.png new file mode 100644 index 0000000..29f1b78 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/item/stomach.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/item/thistle.png b/src/main/resources/assets/growthcraft_milk/textures/item/thistle.png new file mode 100644 index 0000000..accfe45 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/item/thistle.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/item/thistle_seeds.png b/src/main/resources/assets/growthcraft_milk/textures/item/thistle_seeds.png new file mode 100644 index 0000000..a22b225 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/item/thistle_seeds.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/item/yogurt/yogurt_apple.png b/src/main/resources/assets/growthcraft_milk/textures/item/yogurt/yogurt_apple.png new file mode 100644 index 0000000..c8aece9 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/item/yogurt/yogurt_apple.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/item/yogurt/yogurt_chocolate.png b/src/main/resources/assets/growthcraft_milk/textures/item/yogurt/yogurt_chocolate.png new file mode 100644 index 0000000..c2bc8e9 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/item/yogurt/yogurt_chocolate.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/item/yogurt/yogurt_grape_purple.png b/src/main/resources/assets/growthcraft_milk/textures/item/yogurt/yogurt_grape_purple.png new file mode 100644 index 0000000..1d0c18b Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/item/yogurt/yogurt_grape_purple.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/item/yogurt/yogurt_grape_red.png b/src/main/resources/assets/growthcraft_milk/textures/item/yogurt/yogurt_grape_red.png new file mode 100644 index 0000000..9977a23 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/item/yogurt/yogurt_grape_red.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/item/yogurt/yogurt_grape_white.png b/src/main/resources/assets/growthcraft_milk/textures/item/yogurt/yogurt_grape_white.png new file mode 100644 index 0000000..c1cce28 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/item/yogurt/yogurt_grape_white.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/item/yogurt/yogurt_honey.png b/src/main/resources/assets/growthcraft_milk/textures/item/yogurt/yogurt_honey.png new file mode 100644 index 0000000..f04e6db Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/item/yogurt/yogurt_honey.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/item/yogurt/yogurt_plain.png b/src/main/resources/assets/growthcraft_milk/textures/item/yogurt/yogurt_plain.png new file mode 100644 index 0000000..276df98 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/item/yogurt/yogurt_plain.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/item/yogurt/yogurt_pumpkin.png b/src/main/resources/assets/growthcraft_milk/textures/item/yogurt/yogurt_pumpkin.png new file mode 100644 index 0000000..592321f Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/item/yogurt/yogurt_pumpkin.png differ diff --git a/src/main/resources/assets/growthcraft_milk/textures/item/yogurt/yogurt_watermelon.png b/src/main/resources/assets/growthcraft_milk/textures/item/yogurt/yogurt_watermelon.png new file mode 100644 index 0000000..2a070f7 Binary files /dev/null and b/src/main/resources/assets/growthcraft_milk/textures/item/yogurt/yogurt_watermelon.png differ diff --git a/src/main/resources/assets/growthcraft_rice/blockstates/cultivated_farmland.json b/src/main/resources/assets/growthcraft_rice/blockstates/cultivated_farmland.json new file mode 100644 index 0000000..43d3db1 --- /dev/null +++ b/src/main/resources/assets/growthcraft_rice/blockstates/cultivated_farmland.json @@ -0,0 +1,28 @@ +{ + "variants": { + "moisture=0": { + "model": "growthcraft_rice:block/cultivated_farmland" + }, + "moisture=1": { + "model": "growthcraft_rice:block/cultivated_farmland" + }, + "moisture=2": { + "model": "growthcraft_rice:block/cultivated_farmland" + }, + "moisture=3": { + "model": "growthcraft_rice:block/cultivated_farmland" + }, + "moisture=4": { + "model": "growthcraft_rice:block/cultivated_farmland" + }, + "moisture=5": { + "model": "growthcraft_rice:block/cultivated_farmland" + }, + "moisture=6": { + "model": "growthcraft_rice:block/cultivated_farmland" + }, + "moisture=7": { + "model": "growthcraft_rice:block/cultivated_farmland_moist" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_rice/blockstates/rice_crop.json b/src/main/resources/assets/growthcraft_rice/blockstates/rice_crop.json new file mode 100644 index 0000000..233abca --- /dev/null +++ b/src/main/resources/assets/growthcraft_rice/blockstates/rice_crop.json @@ -0,0 +1,68 @@ +{ + "multipart": [ + { + "when": { + "age": "0" + }, + "apply": { + "model": "growthcraft_rice:block/rice_crop_stage0" + } + }, + { + "when": { + "age": "1" + }, + "apply": { + "model": "growthcraft_rice:block/rice_crop_stage1" + } + }, + { + "when": { + "age": "2" + }, + "apply": { + "model": "growthcraft_rice:block/rice_crop_stage1" + } + }, + { + "when": { + "age": "3" + }, + "apply": { + "model": "growthcraft_rice:block/rice_crop_stage2" + } + }, + { + "when": { + "age": "4" + }, + "apply": { + "model": "growthcraft_rice:block/rice_crop_stage2" + } + }, + { + "when": { + "age": "5" + }, + "apply": { + "model": "growthcraft_rice:block/rice_crop_stage3" + } + }, + { + "when": { + "age": "6" + }, + "apply": { + "model": "growthcraft_rice:block/rice_crop_stage3" + } + }, + { + "when": { + "age": "7" + }, + "apply": { + "model": "growthcraft_rice:block/rice_crop_stage4" + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_rice/blockstates/rice_water_fluid.json b/src/main/resources/assets/growthcraft_rice/blockstates/rice_water_fluid.json new file mode 100644 index 0000000..31dc5fa --- /dev/null +++ b/src/main/resources/assets/growthcraft_rice/blockstates/rice_water_fluid.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "growthcraft:block/fluid" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_rice/blockstates/rice_wine_fluid.json b/src/main/resources/assets/growthcraft_rice/blockstates/rice_wine_fluid.json new file mode 100644 index 0000000..31dc5fa --- /dev/null +++ b/src/main/resources/assets/growthcraft_rice/blockstates/rice_wine_fluid.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "growthcraft:block/fluid" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_rice/blockstates/sake_fluid.json b/src/main/resources/assets/growthcraft_rice/blockstates/sake_fluid.json new file mode 100644 index 0000000..31dc5fa --- /dev/null +++ b/src/main/resources/assets/growthcraft_rice/blockstates/sake_fluid.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "growthcraft:block/fluid" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_rice/lang/en_us.json b/src/main/resources/assets/growthcraft_rice/lang/en_us.json new file mode 100644 index 0000000..fb45ae8 --- /dev/null +++ b/src/main/resources/assets/growthcraft_rice/lang/en_us.json @@ -0,0 +1,17 @@ +{ + "block.growthcraft_rice.cultivated_farmland": "Cultivated Farmland", + "block.growthcraft_rice.rice_crop": "Rice Crop", + "fluid.growthcraft_rice.rice_water_fluid": "Rice Water", + "fluid.growthcraft_rice.rice_wine_fluid": "Rice Wine", + "fluid.growthcraft_rice.sake_fluid": "Sake", + "item.growthcraft_rice.cultivator": "Cultivator", + "item.growthcraft_rice.knife": "Knife", + "item.growthcraft_rice.rice": "Rice", + "item.growthcraft_rice.rice_cooked": "Cooked Rice", + "item.growthcraft_rice.rice_stalk": "Rice Stalk", + "item.growthcraft_rice.rice_water_fluid_bucket": "Rice Water Bucket", + "item.growthcraft_rice.rice_wine_fluid_bucket": "Rice Wine Bucket", + "item.growthcraft_rice.sake_fluid_bucket": "Sake Bucket", + "item.growthcraft_rice.sushi_roll": "Sushi Roll", + "item.growthcraft_rice.yeast_seishu": "Seishu Yeast" +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_rice/lang/ko_kr.lang b/src/main/resources/assets/growthcraft_rice/lang/ko_kr.lang new file mode 100644 index 0000000..b8e57e3 --- /dev/null +++ b/src/main/resources/assets/growthcraft_rice/lang/ko_kr.lang @@ -0,0 +1,20 @@ +fluid.fluid_booze_sake_water=쌀 끓인 물 +fluid.fluid_booze_sake_mash=숙성되지 않은 청주 +fluid.fluid_booze_sake_fermented=청주 +fluid.fluid_booze_sake_potent=청주 +fluid.fluid_booze_sake_potent_extended=청주 +fluid.fluid_booze_sake_potent_hyperextended=청주 +fluid.fluid_booze_sake_extended=청주 +fluid.fluid_booze_sake_hyperextended=청주 +fluid.fluid_booze_sake_intoxicated=청주 +fluid.fluid_booze_sake_poisoned=청주 + +grc.tooltip.detailed_information= + +item.rice_cooked.name=익힌 쌀 +item.rice.name=쌀 +item.rice_ball.name=주먹밥 +item.cultivator.name=경작기 + +tile.ricepaddy.name=논 +tile.ricecrop.name=쌀 diff --git a/src/main/resources/assets/growthcraft_rice/lang/ru_ru.json b/src/main/resources/assets/growthcraft_rice/lang/ru_ru.json new file mode 100644 index 0000000..1db764f --- /dev/null +++ b/src/main/resources/assets/growthcraft_rice/lang/ru_ru.json @@ -0,0 +1,16 @@ +{ + "block.growthcraft_rice.cultivated_farmland": "Возделанная почва", + "block.growthcraft_rice.rice_crop": "Побеги риса", + "fluid_type.growthcraft_rice.rice_water_fluid": "Рисовая вода", + "fluid_type.growthcraft_rice.rice_wine_fluid": "Рисовое вино", + "fluid_type.growthcraft_rice.sake_fluid": "Саке", + "item.growthcraft_rice.cultivator": "Культиватор", + "item.growthcraft_rice.knife": "Нож", + "item.growthcraft_rice.rice": "Рис", + "item.growthcraft_rice.rice_cooked": "Приготовленный рис", + "item.growthcraft_rice.rice_stalk": "Стебель риса", + "item.growthcraft_rice.rice_water_fluid_bucket": "Ведро рисовой воды", + "item.growthcraft_rice.rice_wine_fluid_bucket": "Ведро рисового вина", + "item.growthcraft_rice.sake_fluid_bucket": "Ведро саке", + "item.growthcraft_rice.sushi_roll": "Суши ролл" +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_rice/lang/tr_tr.lang b/src/main/resources/assets/growthcraft_rice/lang/tr_tr.lang new file mode 100644 index 0000000..4f6c7ae --- /dev/null +++ b/src/main/resources/assets/growthcraft_rice/lang/tr_tr.lang @@ -0,0 +1,20 @@ +fluid.fluid_booze_sake_water=Pirinç Suyu +fluid.fluid_booze_sake_mash=Sake Püresi +fluid.fluid_booze_sake_fermented=Sake +fluid.fluid_booze_sake_potent=Sake +fluid.fluid_booze_sake_potent_extended=Sake +fluid.fluid_booze_sake_potent_hyperextended=Sake +fluid.fluid_booze_sake_extended=Sake +fluid.fluid_booze_sake_hyperextended=Sake +fluid.fluid_booze_sake_intoxicated=Sake +fluid.fluid_booze_sake_poisoned=Sake + +grc.tooltip.detailed_information= + +item.rice_cooked.name=Pirinç Püresi +item.rice.name=Pirinç +item.rice_ball.name=Pirinç Topları +item.cultivator.name=Ekici + +tile.ricepaddy.name=Pirinç Tarlası +tile.ricecrop.name=Pirinç diff --git a/src/main/resources/assets/growthcraft_rice/models/block/cultivated_farmland.json b/src/main/resources/assets/growthcraft_rice/models/block/cultivated_farmland.json new file mode 100644 index 0000000..f2178d6 --- /dev/null +++ b/src/main/resources/assets/growthcraft_rice/models/block/cultivated_farmland.json @@ -0,0 +1,83 @@ +{ + "parent": "block/block", + "textures": { + "dirt": "minecraft:block/dirt", + "top": "growthcraft_rice:block/cultivated_farmland", + "particle": "#top" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [ + 16, + 14.0, + 16 + ], + "faces": { + "down": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#dirt", + "cullface": "down" + }, + "up": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#top" + }, + "north": { + "uv": [ + 0, + 1, + 16, + 16 + ], + "texture": "#dirt", + "cullface": "north" + }, + "south": { + "uv": [ + 0, + 1, + 16, + 16 + ], + "texture": "#dirt", + "cullface": "south" + }, + "west": { + "uv": [ + 0, + 1, + 16, + 16 + ], + "texture": "#dirt", + "cullface": "west" + }, + "east": { + "uv": [ + 0, + 1, + 16, + 16 + ], + "texture": "#dirt", + "cullface": "east" + } + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_rice/models/block/cultivated_farmland_moist.json b/src/main/resources/assets/growthcraft_rice/models/block/cultivated_farmland_moist.json new file mode 100644 index 0000000..ce90e55 --- /dev/null +++ b/src/main/resources/assets/growthcraft_rice/models/block/cultivated_farmland_moist.json @@ -0,0 +1,83 @@ +{ + "parent": "block/block", + "textures": { + "dirt": "minecraft:block/dirt", + "top": "growthcraft_rice:block/cultivated_farmland_moist", + "particle": "#top" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [ + 16, + 14.0, + 16 + ], + "faces": { + "down": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#dirt", + "cullface": "down" + }, + "up": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#top" + }, + "north": { + "uv": [ + 0, + 1, + 16, + 16 + ], + "texture": "#dirt", + "cullface": "north" + }, + "south": { + "uv": [ + 0, + 1, + 16, + 16 + ], + "texture": "#dirt", + "cullface": "south" + }, + "west": { + "uv": [ + 0, + 1, + 16, + 16 + ], + "texture": "#dirt", + "cullface": "west" + }, + "east": { + "uv": [ + 0, + 1, + 16, + 16 + ], + "texture": "#dirt", + "cullface": "east" + } + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_rice/models/block/rice_crop_stage0.json b/src/main/resources/assets/growthcraft_rice/models/block/rice_crop_stage0.json new file mode 100644 index 0000000..6f56e7e --- /dev/null +++ b/src/main/resources/assets/growthcraft_rice/models/block/rice_crop_stage0.json @@ -0,0 +1,95 @@ +{ + "ambientocclusion": false, + "textures": { + "cross": "growthcraft_rice:block/rice_crop_stage0", + "particle": "#cross" + }, + "elements": [ + { + "from": [ + 0.8, + -1, + 8 + ], + "to": [ + 15.2, + 16, + 8 + ], + "rotation": { + "origin": [ + 8, + 8, + 8 + ], + "axis": "y", + "angle": 45, + "rescale": true + }, + "shade": false, + "faces": { + "north": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#cross" + }, + "south": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#cross" + } + } + }, + { + "from": [ + 8, + -1, + 0.8 + ], + "to": [ + 8, + 16, + 15.2 + ], + "rotation": { + "origin": [ + 8, + 8, + 8 + ], + "axis": "y", + "angle": 45, + "rescale": true + }, + "shade": false, + "faces": { + "west": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#cross" + }, + "east": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#cross" + } + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_rice/models/block/rice_crop_stage1.json b/src/main/resources/assets/growthcraft_rice/models/block/rice_crop_stage1.json new file mode 100644 index 0000000..1b9d92f --- /dev/null +++ b/src/main/resources/assets/growthcraft_rice/models/block/rice_crop_stage1.json @@ -0,0 +1,95 @@ +{ + "ambientocclusion": false, + "textures": { + "cross": "growthcraft_rice:block/rice_crop_stage1", + "particle": "#cross" + }, + "elements": [ + { + "from": [ + 0.8, + -1, + 8 + ], + "to": [ + 15.2, + 16, + 8 + ], + "rotation": { + "origin": [ + 8, + 8, + 8 + ], + "axis": "y", + "angle": 45, + "rescale": true + }, + "shade": false, + "faces": { + "north": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#cross" + }, + "south": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#cross" + } + } + }, + { + "from": [ + 8, + -1, + 0.8 + ], + "to": [ + 8, + 16, + 15.2 + ], + "rotation": { + "origin": [ + 8, + 8, + 8 + ], + "axis": "y", + "angle": 45, + "rescale": true + }, + "shade": false, + "faces": { + "west": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#cross" + }, + "east": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#cross" + } + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_rice/models/block/rice_crop_stage2.json b/src/main/resources/assets/growthcraft_rice/models/block/rice_crop_stage2.json new file mode 100644 index 0000000..0dd2d28 --- /dev/null +++ b/src/main/resources/assets/growthcraft_rice/models/block/rice_crop_stage2.json @@ -0,0 +1,96 @@ +{ + "ambientocclusion": false, + "render_type": "cutout", + "textures": { + "cross": "growthcraft_rice:block/rice_crop_stage2", + "particle": "#cross" + }, + "elements": [ + { + "from": [ + 0.8, + -1, + 8 + ], + "to": [ + 15.2, + 16, + 8 + ], + "rotation": { + "origin": [ + 8, + 8, + 8 + ], + "axis": "y", + "angle": 45, + "rescale": true + }, + "shade": false, + "faces": { + "north": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#cross" + }, + "south": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#cross" + } + } + }, + { + "from": [ + 8, + -1, + 0.8 + ], + "to": [ + 8, + 16, + 15.2 + ], + "rotation": { + "origin": [ + 8, + 8, + 8 + ], + "axis": "y", + "angle": 45, + "rescale": true + }, + "shade": false, + "faces": { + "west": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#cross" + }, + "east": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#cross" + } + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_rice/models/block/rice_crop_stage3.json b/src/main/resources/assets/growthcraft_rice/models/block/rice_crop_stage3.json new file mode 100644 index 0000000..ceb836c --- /dev/null +++ b/src/main/resources/assets/growthcraft_rice/models/block/rice_crop_stage3.json @@ -0,0 +1,96 @@ +{ + "ambientocclusion": false, + "render_type": "cutout", + "textures": { + "cross": "growthcraft_rice:block/rice_crop_stage3", + "particle": "#cross" + }, + "elements": [ + { + "from": [ + 0.8, + -1, + 8 + ], + "to": [ + 15.2, + 16, + 8 + ], + "rotation": { + "origin": [ + 8, + 8, + 8 + ], + "axis": "y", + "angle": 45, + "rescale": true + }, + "shade": false, + "faces": { + "north": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#cross" + }, + "south": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#cross" + } + } + }, + { + "from": [ + 8, + -1, + 0.8 + ], + "to": [ + 8, + 16, + 15.2 + ], + "rotation": { + "origin": [ + 8, + 8, + 8 + ], + "axis": "y", + "angle": 45, + "rescale": true + }, + "shade": false, + "faces": { + "west": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#cross" + }, + "east": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#cross" + } + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_rice/models/block/rice_crop_stage4.json b/src/main/resources/assets/growthcraft_rice/models/block/rice_crop_stage4.json new file mode 100644 index 0000000..34956a7 --- /dev/null +++ b/src/main/resources/assets/growthcraft_rice/models/block/rice_crop_stage4.json @@ -0,0 +1,96 @@ +{ + "ambientocclusion": false, + "render_type": "cutout", + "textures": { + "cross": "growthcraft_rice:block/rice_crop_stage4", + "particle": "#cross" + }, + "elements": [ + { + "from": [ + 0.8, + -1, + 8 + ], + "to": [ + 15.2, + 16, + 8 + ], + "rotation": { + "origin": [ + 8, + 8, + 8 + ], + "axis": "y", + "angle": 45, + "rescale": true + }, + "shade": false, + "faces": { + "north": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#cross" + }, + "south": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#cross" + } + } + }, + { + "from": [ + 8, + -1, + 0.8 + ], + "to": [ + 8, + 16, + 15.2 + ], + "rotation": { + "origin": [ + 8, + 8, + 8 + ], + "axis": "y", + "angle": 45, + "rescale": true + }, + "shade": false, + "faces": { + "west": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#cross" + }, + "east": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#cross" + } + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_rice/models/item/cultivated_farmland.json b/src/main/resources/assets/growthcraft_rice/models/item/cultivated_farmland.json new file mode 100644 index 0000000..3ef81c9 --- /dev/null +++ b/src/main/resources/assets/growthcraft_rice/models/item/cultivated_farmland.json @@ -0,0 +1,3 @@ +{ + "parent": "growthcraft_rice:block/cultivated_farmland" +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_rice/models/item/cultivator.json b/src/main/resources/assets/growthcraft_rice/models/item/cultivator.json new file mode 100644 index 0000000..f74bb3f --- /dev/null +++ b/src/main/resources/assets/growthcraft_rice/models/item/cultivator.json @@ -0,0 +1,76 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "growthcraft_rice:item/cultivator" + }, + "display": { + "thirdperson_righthand": { + "rotation": [ + 180, + -90, + 55 + ], + "translation": [ + 0, + 4.0, + 0.5 + ], + "scale": [ + 0.85, + 0.85, + 0.85 + ] + }, + "thirdperson_lefthand": { + "rotation": [ + 180, + 90, + -55 + ], + "translation": [ + 0, + 4.0, + 0.5 + ], + "scale": [ + 0.85, + 0.85, + 0.85 + ] + }, + "firstperson_righthand": { + "rotation": [ + 180, + -90, + 25 + ], + "translation": [ + 1.13, + 3.2, + 1.13 + ], + "scale": [ + 0.68, + 0.68, + 0.68 + ] + }, + "firstperson_lefthand": { + "rotation": [ + 180, + 90, + -25 + ], + "translation": [ + 1.13, + 3.2, + 1.13 + ], + "scale": [ + 0.68, + 0.68, + 0.68 + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_rice/models/item/knife.json b/src/main/resources/assets/growthcraft_rice/models/item/knife.json new file mode 100644 index 0000000..7043147 --- /dev/null +++ b/src/main/resources/assets/growthcraft_rice/models/item/knife.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "growthcraft_rice:item/knife" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_rice/models/item/rice.json b/src/main/resources/assets/growthcraft_rice/models/item/rice.json new file mode 100644 index 0000000..adbfc32 --- /dev/null +++ b/src/main/resources/assets/growthcraft_rice/models/item/rice.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_rice:item/onigiri" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_rice/models/item/rice_cooked.json b/src/main/resources/assets/growthcraft_rice/models/item/rice_cooked.json new file mode 100644 index 0000000..784b405 --- /dev/null +++ b/src/main/resources/assets/growthcraft_rice/models/item/rice_cooked.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_rice:item/rice_cooked" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_rice/models/item/rice_crop.json b/src/main/resources/assets/growthcraft_rice/models/item/rice_crop.json new file mode 100644 index 0000000..ca3ddd9 --- /dev/null +++ b/src/main/resources/assets/growthcraft_rice/models/item/rice_crop.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_rice:block/rice_crop_stage3" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_rice/models/item/rice_stalk.json b/src/main/resources/assets/growthcraft_rice/models/item/rice_stalk.json new file mode 100644 index 0000000..905645f --- /dev/null +++ b/src/main/resources/assets/growthcraft_rice/models/item/rice_stalk.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_rice:item/rice_stalk" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_rice/models/item/rice_water_fluid_bucket.json b/src/main/resources/assets/growthcraft_rice/models/item/rice_water_fluid_bucket.json new file mode 100644 index 0000000..f5fba3f --- /dev/null +++ b/src/main/resources/assets/growthcraft_rice/models/item/rice_water_fluid_bucket.json @@ -0,0 +1,7 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft:item/bucket/bucket_fluid", + "layer1": "growthcraft:item/bucket/bucket_base" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_rice/models/item/rice_wine_fluid_bucket.json b/src/main/resources/assets/growthcraft_rice/models/item/rice_wine_fluid_bucket.json new file mode 100644 index 0000000..f5fba3f --- /dev/null +++ b/src/main/resources/assets/growthcraft_rice/models/item/rice_wine_fluid_bucket.json @@ -0,0 +1,7 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft:item/bucket/bucket_fluid", + "layer1": "growthcraft:item/bucket/bucket_base" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_rice/models/item/sake_fluid_bucket.json b/src/main/resources/assets/growthcraft_rice/models/item/sake_fluid_bucket.json new file mode 100644 index 0000000..f5fba3f --- /dev/null +++ b/src/main/resources/assets/growthcraft_rice/models/item/sake_fluid_bucket.json @@ -0,0 +1,7 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft:item/bucket/bucket_fluid", + "layer1": "growthcraft:item/bucket/bucket_base" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_rice/models/item/sushi_roll.json b/src/main/resources/assets/growthcraft_rice/models/item/sushi_roll.json new file mode 100644 index 0000000..7152d0e --- /dev/null +++ b/src/main/resources/assets/growthcraft_rice/models/item/sushi_roll.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_rice:item/sushi_roll" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_rice/models/item/yeast_seishu.json b/src/main/resources/assets/growthcraft_rice/models/item/yeast_seishu.json new file mode 100644 index 0000000..31de78d --- /dev/null +++ b/src/main/resources/assets/growthcraft_rice/models/item/yeast_seishu.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "growthcraft_rice:item/yeast_seishu" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_rice/textures/block/cultivated_farmland.png b/src/main/resources/assets/growthcraft_rice/textures/block/cultivated_farmland.png new file mode 100644 index 0000000..68f56ea Binary files /dev/null and b/src/main/resources/assets/growthcraft_rice/textures/block/cultivated_farmland.png differ diff --git a/src/main/resources/assets/growthcraft_rice/textures/block/cultivated_farmland_moist.png b/src/main/resources/assets/growthcraft_rice/textures/block/cultivated_farmland_moist.png new file mode 100644 index 0000000..669a32e Binary files /dev/null and b/src/main/resources/assets/growthcraft_rice/textures/block/cultivated_farmland_moist.png differ diff --git a/src/main/resources/assets/growthcraft_rice/textures/block/fluid/rice_water_fluid.png b/src/main/resources/assets/growthcraft_rice/textures/block/fluid/rice_water_fluid.png new file mode 100644 index 0000000..c6f2fa9 Binary files /dev/null and b/src/main/resources/assets/growthcraft_rice/textures/block/fluid/rice_water_fluid.png differ diff --git a/src/main/resources/assets/growthcraft_rice/textures/block/fluid/rice_water_fluid_flowing.png b/src/main/resources/assets/growthcraft_rice/textures/block/fluid/rice_water_fluid_flowing.png new file mode 100644 index 0000000..5b12070 Binary files /dev/null and b/src/main/resources/assets/growthcraft_rice/textures/block/fluid/rice_water_fluid_flowing.png differ diff --git a/src/main/resources/assets/growthcraft_rice/textures/block/fluid/rice_water_fluid_flowing.png.mcmeta b/src/main/resources/assets/growthcraft_rice/textures/block/fluid/rice_water_fluid_flowing.png.mcmeta new file mode 100644 index 0000000..4f0718a --- /dev/null +++ b/src/main/resources/assets/growthcraft_rice/textures/block/fluid/rice_water_fluid_flowing.png.mcmeta @@ -0,0 +1,3 @@ +{ + "animation": {} +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_rice/textures/block/fluid/rice_water_fluid_overlay.png b/src/main/resources/assets/growthcraft_rice/textures/block/fluid/rice_water_fluid_overlay.png new file mode 100644 index 0000000..d5d4b02 Binary files /dev/null and b/src/main/resources/assets/growthcraft_rice/textures/block/fluid/rice_water_fluid_overlay.png differ diff --git a/src/main/resources/assets/growthcraft_rice/textures/block/fluid/rice_water_fluid_still.png b/src/main/resources/assets/growthcraft_rice/textures/block/fluid/rice_water_fluid_still.png new file mode 100644 index 0000000..fe5c394 Binary files /dev/null and b/src/main/resources/assets/growthcraft_rice/textures/block/fluid/rice_water_fluid_still.png differ diff --git a/src/main/resources/assets/growthcraft_rice/textures/block/fluid/rice_water_fluid_still.png.mcmeta b/src/main/resources/assets/growthcraft_rice/textures/block/fluid/rice_water_fluid_still.png.mcmeta new file mode 100644 index 0000000..0645f48 --- /dev/null +++ b/src/main/resources/assets/growthcraft_rice/textures/block/fluid/rice_water_fluid_still.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 2 + } +} diff --git a/src/main/resources/assets/growthcraft_rice/textures/block/fluid/rice_wine_fluid.png b/src/main/resources/assets/growthcraft_rice/textures/block/fluid/rice_wine_fluid.png new file mode 100644 index 0000000..c6f2fa9 Binary files /dev/null and b/src/main/resources/assets/growthcraft_rice/textures/block/fluid/rice_wine_fluid.png differ diff --git a/src/main/resources/assets/growthcraft_rice/textures/block/fluid/rice_wine_fluid_flowing.png b/src/main/resources/assets/growthcraft_rice/textures/block/fluid/rice_wine_fluid_flowing.png new file mode 100644 index 0000000..5b12070 Binary files /dev/null and b/src/main/resources/assets/growthcraft_rice/textures/block/fluid/rice_wine_fluid_flowing.png differ diff --git a/src/main/resources/assets/growthcraft_rice/textures/block/fluid/rice_wine_fluid_flowing.png.mcmeta b/src/main/resources/assets/growthcraft_rice/textures/block/fluid/rice_wine_fluid_flowing.png.mcmeta new file mode 100644 index 0000000..4f0718a --- /dev/null +++ b/src/main/resources/assets/growthcraft_rice/textures/block/fluid/rice_wine_fluid_flowing.png.mcmeta @@ -0,0 +1,3 @@ +{ + "animation": {} +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_rice/textures/block/fluid/rice_wine_fluid_overlay.png b/src/main/resources/assets/growthcraft_rice/textures/block/fluid/rice_wine_fluid_overlay.png new file mode 100644 index 0000000..d5d4b02 Binary files /dev/null and b/src/main/resources/assets/growthcraft_rice/textures/block/fluid/rice_wine_fluid_overlay.png differ diff --git a/src/main/resources/assets/growthcraft_rice/textures/block/fluid/rice_wine_fluid_still.png b/src/main/resources/assets/growthcraft_rice/textures/block/fluid/rice_wine_fluid_still.png new file mode 100644 index 0000000..fe5c394 Binary files /dev/null and b/src/main/resources/assets/growthcraft_rice/textures/block/fluid/rice_wine_fluid_still.png differ diff --git a/src/main/resources/assets/growthcraft_rice/textures/block/fluid/rice_wine_fluid_still.png.mcmeta b/src/main/resources/assets/growthcraft_rice/textures/block/fluid/rice_wine_fluid_still.png.mcmeta new file mode 100644 index 0000000..0645f48 --- /dev/null +++ b/src/main/resources/assets/growthcraft_rice/textures/block/fluid/rice_wine_fluid_still.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 2 + } +} diff --git a/src/main/resources/assets/growthcraft_rice/textures/block/fluid/sake_fluid.png b/src/main/resources/assets/growthcraft_rice/textures/block/fluid/sake_fluid.png new file mode 100644 index 0000000..c6f2fa9 Binary files /dev/null and b/src/main/resources/assets/growthcraft_rice/textures/block/fluid/sake_fluid.png differ diff --git a/src/main/resources/assets/growthcraft_rice/textures/block/fluid/sake_fluid_flowing.png b/src/main/resources/assets/growthcraft_rice/textures/block/fluid/sake_fluid_flowing.png new file mode 100644 index 0000000..5b12070 Binary files /dev/null and b/src/main/resources/assets/growthcraft_rice/textures/block/fluid/sake_fluid_flowing.png differ diff --git a/src/main/resources/assets/growthcraft_rice/textures/block/fluid/sake_fluid_flowing.png.mcmeta b/src/main/resources/assets/growthcraft_rice/textures/block/fluid/sake_fluid_flowing.png.mcmeta new file mode 100644 index 0000000..4f0718a --- /dev/null +++ b/src/main/resources/assets/growthcraft_rice/textures/block/fluid/sake_fluid_flowing.png.mcmeta @@ -0,0 +1,3 @@ +{ + "animation": {} +} \ No newline at end of file diff --git a/src/main/resources/assets/growthcraft_rice/textures/block/fluid/sake_fluid_overlay.png b/src/main/resources/assets/growthcraft_rice/textures/block/fluid/sake_fluid_overlay.png new file mode 100644 index 0000000..d5d4b02 Binary files /dev/null and b/src/main/resources/assets/growthcraft_rice/textures/block/fluid/sake_fluid_overlay.png differ diff --git a/src/main/resources/assets/growthcraft_rice/textures/block/fluid/sake_fluid_still.png b/src/main/resources/assets/growthcraft_rice/textures/block/fluid/sake_fluid_still.png new file mode 100644 index 0000000..fe5c394 Binary files /dev/null and b/src/main/resources/assets/growthcraft_rice/textures/block/fluid/sake_fluid_still.png differ diff --git a/src/main/resources/assets/growthcraft_rice/textures/block/fluid/sake_fluid_still.png.mcmeta b/src/main/resources/assets/growthcraft_rice/textures/block/fluid/sake_fluid_still.png.mcmeta new file mode 100644 index 0000000..0645f48 --- /dev/null +++ b/src/main/resources/assets/growthcraft_rice/textures/block/fluid/sake_fluid_still.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 2 + } +} diff --git a/src/main/resources/assets/growthcraft_rice/textures/block/rice_crop_stage0.png b/src/main/resources/assets/growthcraft_rice/textures/block/rice_crop_stage0.png new file mode 100644 index 0000000..67588c1 Binary files /dev/null and b/src/main/resources/assets/growthcraft_rice/textures/block/rice_crop_stage0.png differ diff --git a/src/main/resources/assets/growthcraft_rice/textures/block/rice_crop_stage1.png b/src/main/resources/assets/growthcraft_rice/textures/block/rice_crop_stage1.png new file mode 100644 index 0000000..4649f78 Binary files /dev/null and b/src/main/resources/assets/growthcraft_rice/textures/block/rice_crop_stage1.png differ diff --git a/src/main/resources/assets/growthcraft_rice/textures/block/rice_crop_stage2.png b/src/main/resources/assets/growthcraft_rice/textures/block/rice_crop_stage2.png new file mode 100644 index 0000000..1ea81ac Binary files /dev/null and b/src/main/resources/assets/growthcraft_rice/textures/block/rice_crop_stage2.png differ diff --git a/src/main/resources/assets/growthcraft_rice/textures/block/rice_crop_stage3.png b/src/main/resources/assets/growthcraft_rice/textures/block/rice_crop_stage3.png new file mode 100644 index 0000000..356d43f Binary files /dev/null and b/src/main/resources/assets/growthcraft_rice/textures/block/rice_crop_stage3.png differ diff --git a/src/main/resources/assets/growthcraft_rice/textures/block/rice_crop_stage4.png b/src/main/resources/assets/growthcraft_rice/textures/block/rice_crop_stage4.png new file mode 100644 index 0000000..7cc6436 Binary files /dev/null and b/src/main/resources/assets/growthcraft_rice/textures/block/rice_crop_stage4.png differ diff --git a/src/main/resources/assets/growthcraft_rice/textures/item/cultivator.png b/src/main/resources/assets/growthcraft_rice/textures/item/cultivator.png new file mode 100644 index 0000000..05cf96d Binary files /dev/null and b/src/main/resources/assets/growthcraft_rice/textures/item/cultivator.png differ diff --git a/src/main/resources/assets/growthcraft_rice/textures/item/knife.png b/src/main/resources/assets/growthcraft_rice/textures/item/knife.png new file mode 100644 index 0000000..198004e Binary files /dev/null and b/src/main/resources/assets/growthcraft_rice/textures/item/knife.png differ diff --git a/src/main/resources/assets/growthcraft_rice/textures/item/onigiri.png b/src/main/resources/assets/growthcraft_rice/textures/item/onigiri.png new file mode 100644 index 0000000..a983175 Binary files /dev/null and b/src/main/resources/assets/growthcraft_rice/textures/item/onigiri.png differ diff --git a/src/main/resources/assets/growthcraft_rice/textures/item/rice_cooked.png b/src/main/resources/assets/growthcraft_rice/textures/item/rice_cooked.png new file mode 100644 index 0000000..091ee71 Binary files /dev/null and b/src/main/resources/assets/growthcraft_rice/textures/item/rice_cooked.png differ diff --git a/src/main/resources/assets/growthcraft_rice/textures/item/rice_stalk.png b/src/main/resources/assets/growthcraft_rice/textures/item/rice_stalk.png new file mode 100644 index 0000000..abacd3a Binary files /dev/null and b/src/main/resources/assets/growthcraft_rice/textures/item/rice_stalk.png differ diff --git a/src/main/resources/assets/growthcraft_rice/textures/item/sushi_roll.png b/src/main/resources/assets/growthcraft_rice/textures/item/sushi_roll.png new file mode 100644 index 0000000..803b063 Binary files /dev/null and b/src/main/resources/assets/growthcraft_rice/textures/item/sushi_roll.png differ diff --git a/src/main/resources/assets/growthcraft_rice/textures/item/sushi_roll_open_art.png b/src/main/resources/assets/growthcraft_rice/textures/item/sushi_roll_open_art.png new file mode 100644 index 0000000..e5514b9 Binary files /dev/null and b/src/main/resources/assets/growthcraft_rice/textures/item/sushi_roll_open_art.png differ diff --git a/src/main/resources/assets/growthcraft_rice/textures/item/yeast_seishu.png b/src/main/resources/assets/growthcraft_rice/textures/item/yeast_seishu.png new file mode 100644 index 0000000..18e0f82 Binary files /dev/null and b/src/main/resources/assets/growthcraft_rice/textures/item/yeast_seishu.png differ diff --git a/src/main/resources/data/forge/loot_modifiers/global_loot_modifiers.json b/src/main/resources/data/forge/loot_modifiers/global_loot_modifiers.json new file mode 100644 index 0000000..77aa80d --- /dev/null +++ b/src/main/resources/data/forge/loot_modifiers/global_loot_modifiers.json @@ -0,0 +1,15 @@ +{ + "replace": false, + "entries": [ + "growthcraft_apiary:bee_from_vanilla_bee_nest", + "growthcraft_cellar:grape_seeds_purple_from_grass", + "growthcraft_cellar:grape_seeds_red_from_grass", + "growthcraft_cellar:grape_seeds_white_from_grass", + "growthcraft_cellar:hops_seeds_from_grass", + "growthcraft_cellar:yeast_bayanus_from_grass", + "growthcraft_cellar:yeast_brewers_from_grass", + "growthcraft_cellar:yeast_ethereal_from_chorus_flower", + "growthcraft_cellar:yeast_lager_from_snow", + "growthcraft_milk:thistle_seeds_from_grass" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/forge/tags/blocks/needs_netherite_tool.json b/src/main/resources/data/forge/tags/blocks/needs_netherite_tool.json new file mode 100644 index 0000000..a22514f --- /dev/null +++ b/src/main/resources/data/forge/tags/blocks/needs_netherite_tool.json @@ -0,0 +1,5 @@ +{ + "replace": false, + "values": [ + ] +} \ No newline at end of file diff --git a/src/main/resources/data/forge/tags/fluids/milk.json b/src/main/resources/data/forge/tags/fluids/milk.json new file mode 100644 index 0000000..bf9e021 --- /dev/null +++ b/src/main/resources/data/forge/tags/fluids/milk.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "growthcraft_milk:milk_fluid_source" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/forge/tags/items/rods/wooden.json b/src/main/resources/data/forge/tags/items/rods/wooden.json new file mode 100644 index 0000000..a22514f --- /dev/null +++ b/src/main/resources/data/forge/tags/items/rods/wooden.json @@ -0,0 +1,5 @@ +{ + "replace": false, + "values": [ + ] +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft/advancements/recipes/misc/salt.json b/src/main/resources/data/growthcraft/advancements/recipes/misc/salt.json new file mode 100644 index 0000000..7ac14ab --- /dev/null +++ b/src/main/resources/data/growthcraft/advancements/recipes/misc/salt.json @@ -0,0 +1,34 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_salt_block": { + "conditions": { + "items": [ + { + "items": [ + "growthcraft:salt_block" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "growthcraft:salt" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_salt_block", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "growthcraft:salt" + ] + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft/advancements/recipes/misc/salt_block.json b/src/main/resources/data/growthcraft/advancements/recipes/misc/salt_block.json new file mode 100644 index 0000000..6249a53 --- /dev/null +++ b/src/main/resources/data/growthcraft/advancements/recipes/misc/salt_block.json @@ -0,0 +1,34 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_salt": { + "conditions": { + "items": [ + { + "items": [ + "growthcraft:salt" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "growthcraft:salt_block" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_salt", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "growthcraft:salt_block" + ] + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft/advancements/recipes/tools/crowbar_black.json b/src/main/resources/data/growthcraft/advancements/recipes/tools/crowbar_black.json new file mode 100644 index 0000000..6dfd3f2 --- /dev/null +++ b/src/main/resources/data/growthcraft/advancements/recipes/tools/crowbar_black.json @@ -0,0 +1,34 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": [ + "minecraft:black_carpet" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "growthcraft:crowbar_black" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "growthcraft:crowbar_black" + ] + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft/advancements/recipes/tools/crowbar_blue.json b/src/main/resources/data/growthcraft/advancements/recipes/tools/crowbar_blue.json new file mode 100644 index 0000000..1a57af6 --- /dev/null +++ b/src/main/resources/data/growthcraft/advancements/recipes/tools/crowbar_blue.json @@ -0,0 +1,34 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": [ + "minecraft:blue_carpet" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "growthcraft:crowbar_blue" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "growthcraft:crowbar_blue" + ] + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft/advancements/recipes/tools/crowbar_brown.json b/src/main/resources/data/growthcraft/advancements/recipes/tools/crowbar_brown.json new file mode 100644 index 0000000..8e4cf5a --- /dev/null +++ b/src/main/resources/data/growthcraft/advancements/recipes/tools/crowbar_brown.json @@ -0,0 +1,34 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": [ + "minecraft:brown_carpet" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "growthcraft:crowbar_brown" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "growthcraft:crowbar_brown" + ] + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft/advancements/recipes/tools/crowbar_cyan.json b/src/main/resources/data/growthcraft/advancements/recipes/tools/crowbar_cyan.json new file mode 100644 index 0000000..32eaf8f --- /dev/null +++ b/src/main/resources/data/growthcraft/advancements/recipes/tools/crowbar_cyan.json @@ -0,0 +1,34 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": [ + "minecraft:cyan_carpet" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "growthcraft:crowbar_cyan" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "growthcraft:crowbar_cyan" + ] + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft/advancements/recipes/tools/crowbar_gray.json b/src/main/resources/data/growthcraft/advancements/recipes/tools/crowbar_gray.json new file mode 100644 index 0000000..2ae1370 --- /dev/null +++ b/src/main/resources/data/growthcraft/advancements/recipes/tools/crowbar_gray.json @@ -0,0 +1,34 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": [ + "minecraft:gray_carpet" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "growthcraft:crowbar_gray" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "growthcraft:crowbar_gray" + ] + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft/advancements/recipes/tools/crowbar_green.json b/src/main/resources/data/growthcraft/advancements/recipes/tools/crowbar_green.json new file mode 100644 index 0000000..b2870cc --- /dev/null +++ b/src/main/resources/data/growthcraft/advancements/recipes/tools/crowbar_green.json @@ -0,0 +1,34 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": [ + "minecraft:green_carpet" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "growthcraft:crowbar_green" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "growthcraft:crowbar_green" + ] + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft/advancements/recipes/tools/crowbar_light_blue.json b/src/main/resources/data/growthcraft/advancements/recipes/tools/crowbar_light_blue.json new file mode 100644 index 0000000..4527a7e --- /dev/null +++ b/src/main/resources/data/growthcraft/advancements/recipes/tools/crowbar_light_blue.json @@ -0,0 +1,34 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": [ + "minecraft:light_blue_carpet" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "growthcraft:crowbar_light_blue" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "growthcraft:crowbar_light_blue" + ] + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft/advancements/recipes/tools/crowbar_light_gray.json b/src/main/resources/data/growthcraft/advancements/recipes/tools/crowbar_light_gray.json new file mode 100644 index 0000000..0d25c3e --- /dev/null +++ b/src/main/resources/data/growthcraft/advancements/recipes/tools/crowbar_light_gray.json @@ -0,0 +1,34 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": [ + "minecraft:light_gray_carpet" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "growthcraft:crowbar_light_gray" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "growthcraft:crowbar_light_gray" + ] + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft/advancements/recipes/tools/crowbar_lime.json b/src/main/resources/data/growthcraft/advancements/recipes/tools/crowbar_lime.json new file mode 100644 index 0000000..2d97bdb --- /dev/null +++ b/src/main/resources/data/growthcraft/advancements/recipes/tools/crowbar_lime.json @@ -0,0 +1,34 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": [ + "minecraft:lime_carpet" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "growthcraft:crowbar_lime" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "growthcraft:crowbar_lime" + ] + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft/advancements/recipes/tools/crowbar_magenta.json b/src/main/resources/data/growthcraft/advancements/recipes/tools/crowbar_magenta.json new file mode 100644 index 0000000..a23f2ab --- /dev/null +++ b/src/main/resources/data/growthcraft/advancements/recipes/tools/crowbar_magenta.json @@ -0,0 +1,34 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": [ + "minecraft:magenta_carpet" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "growthcraft:crowbar_magenta" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "growthcraft:crowbar_magenta" + ] + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft/advancements/recipes/tools/crowbar_orange.json b/src/main/resources/data/growthcraft/advancements/recipes/tools/crowbar_orange.json new file mode 100644 index 0000000..40669cf --- /dev/null +++ b/src/main/resources/data/growthcraft/advancements/recipes/tools/crowbar_orange.json @@ -0,0 +1,34 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": [ + "minecraft:orange_carpet" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "growthcraft:crowbar_orange" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "growthcraft:crowbar_orange" + ] + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft/advancements/recipes/tools/crowbar_pink.json b/src/main/resources/data/growthcraft/advancements/recipes/tools/crowbar_pink.json new file mode 100644 index 0000000..de37fc9 --- /dev/null +++ b/src/main/resources/data/growthcraft/advancements/recipes/tools/crowbar_pink.json @@ -0,0 +1,34 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": [ + "minecraft:pink_carpet" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "growthcraft:crowbar_pink" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "growthcraft:crowbar_pink" + ] + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft/advancements/recipes/tools/crowbar_purple.json b/src/main/resources/data/growthcraft/advancements/recipes/tools/crowbar_purple.json new file mode 100644 index 0000000..9acfaf9 --- /dev/null +++ b/src/main/resources/data/growthcraft/advancements/recipes/tools/crowbar_purple.json @@ -0,0 +1,34 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": [ + "minecraft:purple_carpet" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "growthcraft:crowbar_purple" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "growthcraft:crowbar_purple" + ] + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft/advancements/recipes/tools/crowbar_red.json b/src/main/resources/data/growthcraft/advancements/recipes/tools/crowbar_red.json new file mode 100644 index 0000000..9e05a80 --- /dev/null +++ b/src/main/resources/data/growthcraft/advancements/recipes/tools/crowbar_red.json @@ -0,0 +1,34 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": [ + "minecraft:red_carpet" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "growthcraft:crowbar_red" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "growthcraft:crowbar_red" + ] + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft/advancements/recipes/tools/crowbar_white.json b/src/main/resources/data/growthcraft/advancements/recipes/tools/crowbar_white.json new file mode 100644 index 0000000..77e97b2 --- /dev/null +++ b/src/main/resources/data/growthcraft/advancements/recipes/tools/crowbar_white.json @@ -0,0 +1,34 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": [ + "minecraft:white_carpet" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "growthcraft:crowbar_white" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "growthcraft:crowbar_white" + ] + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft/advancements/recipes/tools/crowbar_yellow.json b/src/main/resources/data/growthcraft/advancements/recipes/tools/crowbar_yellow.json new file mode 100644 index 0000000..1719cc6 --- /dev/null +++ b/src/main/resources/data/growthcraft/advancements/recipes/tools/crowbar_yellow.json @@ -0,0 +1,34 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": [ + "minecraft:yellow_carpet" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "growthcraft:crowbar_yellow" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "growthcraft:crowbar_yellow" + ] + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft/forge/biome_modifier/salt_ore.json b/src/main/resources/data/growthcraft/forge/biome_modifier/salt_ore.json new file mode 100644 index 0000000..2f9f09a --- /dev/null +++ b/src/main/resources/data/growthcraft/forge/biome_modifier/salt_ore.json @@ -0,0 +1,6 @@ +{ + "type": "forge:add_features", + "biomes": "#is_overworld", + "features": "growthcraft:salt_ore_placed", + "step": "underground_ores" +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft/loot_tables/blocks/rope_linen.json b/src/main/resources/data/growthcraft/loot_tables/blocks/rope_linen.json new file mode 100644 index 0000000..a9cf5be --- /dev/null +++ b/src/main/resources/data/growthcraft/loot_tables/blocks/rope_linen.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "growthcraft:rope_linen" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft/loot_tables/blocks/rope_linen_acacia_fence.json b/src/main/resources/data/growthcraft/loot_tables/blocks/rope_linen_acacia_fence.json new file mode 100644 index 0000000..a9cf5be --- /dev/null +++ b/src/main/resources/data/growthcraft/loot_tables/blocks/rope_linen_acacia_fence.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "growthcraft:rope_linen" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft/loot_tables/blocks/rope_linen_birch_fence.json b/src/main/resources/data/growthcraft/loot_tables/blocks/rope_linen_birch_fence.json new file mode 100644 index 0000000..a9cf5be --- /dev/null +++ b/src/main/resources/data/growthcraft/loot_tables/blocks/rope_linen_birch_fence.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "growthcraft:rope_linen" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft/loot_tables/blocks/rope_linen_crimson_fence.json b/src/main/resources/data/growthcraft/loot_tables/blocks/rope_linen_crimson_fence.json new file mode 100644 index 0000000..a9cf5be --- /dev/null +++ b/src/main/resources/data/growthcraft/loot_tables/blocks/rope_linen_crimson_fence.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "growthcraft:rope_linen" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft/loot_tables/blocks/rope_linen_dark_oak_fence.json b/src/main/resources/data/growthcraft/loot_tables/blocks/rope_linen_dark_oak_fence.json new file mode 100644 index 0000000..a9cf5be --- /dev/null +++ b/src/main/resources/data/growthcraft/loot_tables/blocks/rope_linen_dark_oak_fence.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "growthcraft:rope_linen" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft/loot_tables/blocks/rope_linen_jungle_fence.json b/src/main/resources/data/growthcraft/loot_tables/blocks/rope_linen_jungle_fence.json new file mode 100644 index 0000000..a9cf5be --- /dev/null +++ b/src/main/resources/data/growthcraft/loot_tables/blocks/rope_linen_jungle_fence.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "growthcraft:rope_linen" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft/loot_tables/blocks/rope_linen_nether_brick_fence.json b/src/main/resources/data/growthcraft/loot_tables/blocks/rope_linen_nether_brick_fence.json new file mode 100644 index 0000000..a9cf5be --- /dev/null +++ b/src/main/resources/data/growthcraft/loot_tables/blocks/rope_linen_nether_brick_fence.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "growthcraft:rope_linen" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft/loot_tables/blocks/rope_linen_oak_fence.json b/src/main/resources/data/growthcraft/loot_tables/blocks/rope_linen_oak_fence.json new file mode 100644 index 0000000..a9cf5be --- /dev/null +++ b/src/main/resources/data/growthcraft/loot_tables/blocks/rope_linen_oak_fence.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "growthcraft:rope_linen" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft/loot_tables/blocks/rope_linen_spruce_fence.json b/src/main/resources/data/growthcraft/loot_tables/blocks/rope_linen_spruce_fence.json new file mode 100644 index 0000000..a9cf5be --- /dev/null +++ b/src/main/resources/data/growthcraft/loot_tables/blocks/rope_linen_spruce_fence.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "growthcraft:rope_linen" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft/loot_tables/blocks/rope_linen_warped_fence.json b/src/main/resources/data/growthcraft/loot_tables/blocks/rope_linen_warped_fence.json new file mode 100644 index 0000000..a9cf5be --- /dev/null +++ b/src/main/resources/data/growthcraft/loot_tables/blocks/rope_linen_warped_fence.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "growthcraft:rope_linen" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft/loot_tables/blocks/salt_block.json b/src/main/resources/data/growthcraft/loot_tables/blocks/salt_block.json new file mode 100644 index 0000000..605a00b --- /dev/null +++ b/src/main/resources/data/growthcraft/loot_tables/blocks/salt_block.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "growthcraft:salt_block" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft/loot_tables/blocks/salt_ore.json b/src/main/resources/data/growthcraft/loot_tables/blocks/salt_ore.json new file mode 100644 index 0000000..54a1d83 --- /dev/null +++ b/src/main/resources/data/growthcraft/loot_tables/blocks/salt_ore.json @@ -0,0 +1,49 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ], + "name": "growthcraft:salt_ore" + }, + { + "type": "minecraft:item", + "functions": [ + { + "enchantment": "minecraft:fortune", + "formula": "minecraft:ore_drops", + "function": "minecraft:apply_bonus" + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "growthcraft:salt" + } + ] + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft/patchouli_books/growthcraft/book.json b/src/main/resources/data/growthcraft/patchouli_books/growthcraft/book.json new file mode 100644 index 0000000..aa4757d --- /dev/null +++ b/src/main/resources/data/growthcraft/patchouli_books/growthcraft/book.json @@ -0,0 +1,10 @@ +{ + "name": "Growthcraft", + "landing_text": "Growthcraft enriches the farming and brewing aspects with Minecraft.$(br2)With an array of new crops like grapes, hops, and rice, you can cultivate your own vineyards and create beverages such as wine, beer, and sake.", + "book_texture": "patchouli:textures/gui/book_green.png", + "creative_tab": "growthcraft:tab", + "show_progress": false, + "i18n": true, + "use_resource_pack": true, + "version": 7 +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft/recipes/crowbar_black.json b/src/main/resources/data/growthcraft/recipes/crowbar_black.json new file mode 100644 index 0000000..262cd4b --- /dev/null +++ b/src/main/resources/data/growthcraft/recipes/crowbar_black.json @@ -0,0 +1,24 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "key": { + "A": { + "item": "minecraft:iron_nugget" + }, + "B": { + "item": "minecraft:iron_ingot" + }, + "C": { + "item": "minecraft:black_carpet" + } + }, + "pattern": [ + " A", + "CBC", + "A " + ], + "result": { + "item": "growthcraft:crowbar_black" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft/recipes/crowbar_blue.json b/src/main/resources/data/growthcraft/recipes/crowbar_blue.json new file mode 100644 index 0000000..c7dddfe --- /dev/null +++ b/src/main/resources/data/growthcraft/recipes/crowbar_blue.json @@ -0,0 +1,24 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "key": { + "A": { + "item": "minecraft:iron_nugget" + }, + "B": { + "item": "minecraft:iron_ingot" + }, + "C": { + "item": "minecraft:blue_carpet" + } + }, + "pattern": [ + " A", + "CBC", + "A " + ], + "result": { + "item": "growthcraft:crowbar_blue" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft/recipes/crowbar_brown.json b/src/main/resources/data/growthcraft/recipes/crowbar_brown.json new file mode 100644 index 0000000..6ef0cf5 --- /dev/null +++ b/src/main/resources/data/growthcraft/recipes/crowbar_brown.json @@ -0,0 +1,24 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "key": { + "A": { + "item": "minecraft:iron_nugget" + }, + "B": { + "item": "minecraft:iron_ingot" + }, + "C": { + "item": "minecraft:brown_carpet" + } + }, + "pattern": [ + " A", + "CBC", + "A " + ], + "result": { + "item": "growthcraft:crowbar_brown" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft/recipes/crowbar_cyan.json b/src/main/resources/data/growthcraft/recipes/crowbar_cyan.json new file mode 100644 index 0000000..1cfb6a8 --- /dev/null +++ b/src/main/resources/data/growthcraft/recipes/crowbar_cyan.json @@ -0,0 +1,24 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "key": { + "A": { + "item": "minecraft:iron_nugget" + }, + "B": { + "item": "minecraft:iron_ingot" + }, + "C": { + "item": "minecraft:cyan_carpet" + } + }, + "pattern": [ + " A", + "CBC", + "A " + ], + "result": { + "item": "growthcraft:crowbar_cyan" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft/recipes/crowbar_gray.json b/src/main/resources/data/growthcraft/recipes/crowbar_gray.json new file mode 100644 index 0000000..acc4628 --- /dev/null +++ b/src/main/resources/data/growthcraft/recipes/crowbar_gray.json @@ -0,0 +1,24 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "key": { + "A": { + "item": "minecraft:iron_nugget" + }, + "B": { + "item": "minecraft:iron_ingot" + }, + "C": { + "item": "minecraft:gray_carpet" + } + }, + "pattern": [ + " A", + "CBC", + "A " + ], + "result": { + "item": "growthcraft:crowbar_gray" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft/recipes/crowbar_green.json b/src/main/resources/data/growthcraft/recipes/crowbar_green.json new file mode 100644 index 0000000..eb05cf1 --- /dev/null +++ b/src/main/resources/data/growthcraft/recipes/crowbar_green.json @@ -0,0 +1,24 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "key": { + "A": { + "item": "minecraft:iron_nugget" + }, + "B": { + "item": "minecraft:iron_ingot" + }, + "C": { + "item": "minecraft:green_carpet" + } + }, + "pattern": [ + " A", + "CBC", + "A " + ], + "result": { + "item": "growthcraft:crowbar_green" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft/recipes/crowbar_light_blue.json b/src/main/resources/data/growthcraft/recipes/crowbar_light_blue.json new file mode 100644 index 0000000..0d1ee43 --- /dev/null +++ b/src/main/resources/data/growthcraft/recipes/crowbar_light_blue.json @@ -0,0 +1,24 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "key": { + "A": { + "item": "minecraft:iron_nugget" + }, + "B": { + "item": "minecraft:iron_ingot" + }, + "C": { + "item": "minecraft:light_blue_carpet" + } + }, + "pattern": [ + " A", + "CBC", + "A " + ], + "result": { + "item": "growthcraft:crowbar_light_blue" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft/recipes/crowbar_light_gray.json b/src/main/resources/data/growthcraft/recipes/crowbar_light_gray.json new file mode 100644 index 0000000..b807eb0 --- /dev/null +++ b/src/main/resources/data/growthcraft/recipes/crowbar_light_gray.json @@ -0,0 +1,24 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "key": { + "A": { + "item": "minecraft:iron_nugget" + }, + "B": { + "item": "minecraft:iron_ingot" + }, + "C": { + "item": "minecraft:light_gray_carpet" + } + }, + "pattern": [ + " A", + "CBC", + "A " + ], + "result": { + "item": "growthcraft:crowbar_light_gray" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft/recipes/crowbar_lime.json b/src/main/resources/data/growthcraft/recipes/crowbar_lime.json new file mode 100644 index 0000000..30d4670 --- /dev/null +++ b/src/main/resources/data/growthcraft/recipes/crowbar_lime.json @@ -0,0 +1,24 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "key": { + "A": { + "item": "minecraft:iron_nugget" + }, + "B": { + "item": "minecraft:iron_ingot" + }, + "C": { + "item": "minecraft:lime_carpet" + } + }, + "pattern": [ + " A", + "CBC", + "A " + ], + "result": { + "item": "growthcraft:crowbar_lime" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft/recipes/crowbar_magenta.json b/src/main/resources/data/growthcraft/recipes/crowbar_magenta.json new file mode 100644 index 0000000..43049d1 --- /dev/null +++ b/src/main/resources/data/growthcraft/recipes/crowbar_magenta.json @@ -0,0 +1,24 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "key": { + "A": { + "item": "minecraft:iron_nugget" + }, + "B": { + "item": "minecraft:iron_ingot" + }, + "C": { + "item": "minecraft:magenta_carpet" + } + }, + "pattern": [ + " A", + "CBC", + "A " + ], + "result": { + "item": "growthcraft:crowbar_magenta" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft/recipes/crowbar_orange.json b/src/main/resources/data/growthcraft/recipes/crowbar_orange.json new file mode 100644 index 0000000..b725aa1 --- /dev/null +++ b/src/main/resources/data/growthcraft/recipes/crowbar_orange.json @@ -0,0 +1,24 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "key": { + "A": { + "item": "minecraft:iron_nugget" + }, + "B": { + "item": "minecraft:iron_ingot" + }, + "C": { + "item": "minecraft:orange_carpet" + } + }, + "pattern": [ + " A", + "CBC", + "A " + ], + "result": { + "item": "growthcraft:crowbar_orange" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft/recipes/crowbar_pink.json b/src/main/resources/data/growthcraft/recipes/crowbar_pink.json new file mode 100644 index 0000000..e64b091 --- /dev/null +++ b/src/main/resources/data/growthcraft/recipes/crowbar_pink.json @@ -0,0 +1,24 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "key": { + "A": { + "item": "minecraft:iron_nugget" + }, + "B": { + "item": "minecraft:iron_ingot" + }, + "C": { + "item": "minecraft:pink_carpet" + } + }, + "pattern": [ + " A", + "CBC", + "A " + ], + "result": { + "item": "growthcraft:crowbar_pink" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft/recipes/crowbar_purple.json b/src/main/resources/data/growthcraft/recipes/crowbar_purple.json new file mode 100644 index 0000000..4292cbd --- /dev/null +++ b/src/main/resources/data/growthcraft/recipes/crowbar_purple.json @@ -0,0 +1,24 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "key": { + "A": { + "item": "minecraft:iron_nugget" + }, + "B": { + "item": "minecraft:iron_ingot" + }, + "C": { + "item": "minecraft:purple_carpet" + } + }, + "pattern": [ + " A", + "CBC", + "A " + ], + "result": { + "item": "growthcraft:crowbar_purple" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft/recipes/crowbar_red.json b/src/main/resources/data/growthcraft/recipes/crowbar_red.json new file mode 100644 index 0000000..a8b9874 --- /dev/null +++ b/src/main/resources/data/growthcraft/recipes/crowbar_red.json @@ -0,0 +1,24 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "key": { + "A": { + "item": "minecraft:iron_nugget" + }, + "B": { + "item": "minecraft:iron_ingot" + }, + "C": { + "item": "minecraft:red_carpet" + } + }, + "pattern": [ + " A", + "CBC", + "A " + ], + "result": { + "item": "growthcraft:crowbar_red" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft/recipes/crowbar_white.json b/src/main/resources/data/growthcraft/recipes/crowbar_white.json new file mode 100644 index 0000000..bf68d69 --- /dev/null +++ b/src/main/resources/data/growthcraft/recipes/crowbar_white.json @@ -0,0 +1,24 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "key": { + "A": { + "item": "minecraft:iron_nugget" + }, + "B": { + "item": "minecraft:iron_ingot" + }, + "C": { + "item": "minecraft:white_carpet" + } + }, + "pattern": [ + " A", + "CBC", + "A " + ], + "result": { + "item": "growthcraft:crowbar_white" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft/recipes/crowbar_yellow.json b/src/main/resources/data/growthcraft/recipes/crowbar_yellow.json new file mode 100644 index 0000000..71f5e92 --- /dev/null +++ b/src/main/resources/data/growthcraft/recipes/crowbar_yellow.json @@ -0,0 +1,24 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "key": { + "A": { + "item": "minecraft:iron_nugget" + }, + "B": { + "item": "minecraft:iron_ingot" + }, + "C": { + "item": "minecraft:yellow_carpet" + } + }, + "pattern": [ + " A", + "CBC", + "A " + ], + "result": { + "item": "growthcraft:crowbar_yellow" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft/recipes/rope_linen_base.json b/src/main/resources/data/growthcraft/recipes/rope_linen_base.json new file mode 100644 index 0000000..1b7f5ee --- /dev/null +++ b/src/main/resources/data/growthcraft/recipes/rope_linen_base.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "AAA", + "ABA", + "AAA" + ], + "key": { + "A": { + "item": "minecraft:string" + }, + "B": { + "item": "minecraft:lead" + } + }, + "result": { + "item": "growthcraft:rope_linen", + "count": 8 + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft/recipes/rope_linen_lengthen.json b/src/main/resources/data/growthcraft/recipes/rope_linen_lengthen.json new file mode 100644 index 0000000..1002ae2 --- /dev/null +++ b/src/main/resources/data/growthcraft/recipes/rope_linen_lengthen.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "AAA", + "ABA", + "AAA" + ], + "key": { + "A": { + "item": "minecraft:string" + }, + "B": { + "item": "growthcraft:rope_linen" + } + }, + "result": { + "item": "growthcraft:rope_linen", + "count": 8 + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft/recipes/salt.json b/src/main/resources/data/growthcraft/recipes/salt.json new file mode 100644 index 0000000..23293d2 --- /dev/null +++ b/src/main/resources/data/growthcraft/recipes/salt.json @@ -0,0 +1,13 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "item": "growthcraft:salt_block" + } + ], + "result": { + "count": 9, + "item": "growthcraft:salt" + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft/recipes/salt_block.json b/src/main/resources/data/growthcraft/recipes/salt_block.json new file mode 100644 index 0000000..d3ee912 --- /dev/null +++ b/src/main/resources/data/growthcraft/recipes/salt_block.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "#": { + "item": "growthcraft:salt" + } + }, + "pattern": [ + "###", + "###", + "###" + ], + "result": { + "item": "growthcraft:salt_block" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft/recipes/wrench.json b/src/main/resources/data/growthcraft/recipes/wrench.json new file mode 100644 index 0000000..f3aad23 --- /dev/null +++ b/src/main/resources/data/growthcraft/recipes/wrench.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "key": { + "B": { + "item": "minecraft:iron_nugget" + }, + "A": { + "item": "minecraft:iron_ingot" + } + }, + "pattern": [ + " BB", + " AB", + "A " + ], + "result": { + "item": "growthcraft:wrench" + }, + "show_notification": true +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft/tags/blocks/heatsources.json b/src/main/resources/data/growthcraft/tags/blocks/heatsources.json new file mode 100644 index 0000000..ec0bd54 --- /dev/null +++ b/src/main/resources/data/growthcraft/tags/blocks/heatsources.json @@ -0,0 +1,9 @@ +{ + "replace": false, + "values": [ + "minecraft:lava", + "minecraft:fire", + "minecraft:magma_block", + "minecraft:campfire" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft/tags/blocks/rope.json b/src/main/resources/data/growthcraft/tags/blocks/rope.json new file mode 100644 index 0000000..9e93d41 --- /dev/null +++ b/src/main/resources/data/growthcraft/tags/blocks/rope.json @@ -0,0 +1,24 @@ +{ + "replace": false, + "values": [ + "growthcraft:rope_linen", + "growthcraft:rope_linen_acacia_fence", + "growthcraft:rope_linen_birch_fence", + "growthcraft:rope_linen_crimson_fence", + "growthcraft:rope_linen_dark_oak_fence", + "growthcraft:rope_linen_jungle_fence", + "growthcraft:rope_linen_nether_brick_fence", + "growthcraft:rope_linen_oak_fence", + "growthcraft:rope_linen_spruce_fence", + "growthcraft:rope_linen_warped_fence", + "growthcraft_cellar:hops_vine", + "growthcraft_cellar:red_grape_vine", + "growthcraft_cellar:red_grape_vine_leaves", + "growthcraft_cellar:purple_grape_vine", + "growthcraft_cellar:purple_grape_vine_leaves", + "growthcraft_cellar:white_grape_vine", + "growthcraft_cellar:white_grape_vine_leaves", + "growthcraft_apples:apple_plank_fence_rope_linen", + "growthcraft_bamboo:bamboo_plank_fence_rope_linen" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft/tags/blocks/salt.json b/src/main/resources/data/growthcraft/tags/blocks/salt.json new file mode 100644 index 0000000..d3127e0 --- /dev/null +++ b/src/main/resources/data/growthcraft/tags/blocks/salt.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "growthcraft:salt_block" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft/tags/items/roaster_wrench.json b/src/main/resources/data/growthcraft/tags/items/roaster_wrench.json new file mode 100644 index 0000000..855dc9b --- /dev/null +++ b/src/main/resources/data/growthcraft/tags/items/roaster_wrench.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "growthcraft:wrench" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft/tags/items/salt.json b/src/main/resources/data/growthcraft/tags/items/salt.json new file mode 100644 index 0000000..7fda798 --- /dev/null +++ b/src/main/resources/data/growthcraft/tags/items/salt.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "growthcraft:salt" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft/worldgen/configured_feature/salt_ore.json b/src/main/resources/data/growthcraft/worldgen/configured_feature/salt_ore.json new file mode 100644 index 0000000..f78c78d --- /dev/null +++ b/src/main/resources/data/growthcraft/worldgen/configured_feature/salt_ore.json @@ -0,0 +1,27 @@ +{ + "type": "minecraft:ore", + "config": { + "discard_chance_on_air_exposure": 0.0, + "size": 5, + "targets": [ + { + "state": { + "Name": "growthcraft:salt_ore" + }, + "target": { + "predicate_type": "minecraft:tag_match", + "tag": "minecraft:stone_ore_replaceables" + } + }, + { + "state": { + "Name": "growthcraft:salt_ore" + }, + "target": { + "predicate_type": "minecraft:tag_match", + "tag": "minecraft:deepslate_ore_replaceables" + } + } + ] + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft/worldgen/configured_feature/salt_ore_end.json b/src/main/resources/data/growthcraft/worldgen/configured_feature/salt_ore_end.json new file mode 100644 index 0000000..101b659 --- /dev/null +++ b/src/main/resources/data/growthcraft/worldgen/configured_feature/salt_ore_end.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:ore", + "config": { + "discard_chance_on_air_exposure": 0.0, + "size": 9, + "targets": [ + { + "state": { + "Name": "growthcraft:salt_ore" + }, + "target": { + "block": "minecraft:end_stone", + "predicate_type": "minecraft:block_match" + } + } + ] + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft/worldgen/configured_feature/salt_ore_nether.json b/src/main/resources/data/growthcraft/worldgen/configured_feature/salt_ore_nether.json new file mode 100644 index 0000000..fe695b2 --- /dev/null +++ b/src/main/resources/data/growthcraft/worldgen/configured_feature/salt_ore_nether.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:ore", + "config": { + "discard_chance_on_air_exposure": 0.0, + "size": 9, + "targets": [ + { + "state": { + "Name": "growthcraft:salt_ore" + }, + "target": { + "block": "minecraft:netherrack", + "predicate_type": "minecraft:block_match" + } + } + ] + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft/worldgen/placed_feature/salt_ore_placed.json b/src/main/resources/data/growthcraft/worldgen/placed_feature/salt_ore_placed.json new file mode 100644 index 0000000..868c5f6 --- /dev/null +++ b/src/main/resources/data/growthcraft/worldgen/placed_feature/salt_ore_placed.json @@ -0,0 +1,27 @@ +{ + "feature": "growthcraft:salt_ore", + "placement": [ + { + "type": "minecraft:count", + "count": 10 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "minecraft:uniform", + "max_inclusive": { + "absolute": 64 + }, + "min_inclusive": { + "absolute": -64 + } + } + }, + { + "type": "minecraft:biome" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_apiary/loot_modifiers/bee_from_vanilla_bee_nest.json b/src/main/resources/data/growthcraft_apiary/loot_modifiers/bee_from_vanilla_bee_nest.json new file mode 100644 index 0000000..5edfeb2 --- /dev/null +++ b/src/main/resources/data/growthcraft_apiary/loot_modifiers/bee_from_vanilla_bee_nest.json @@ -0,0 +1,14 @@ +{ + "type": "growthcraft:global_block_loot_modifier", + "conditions": [ + { + "condition": "minecraft:random_chance", + "chance": 0.50 + }, + { + "condition": "block_state_property", + "block": "minecraft:bee_nest" + } + ], + "item": "growthcraft_apiary:bee" +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_apiary/loot_tables/blocks/bee_box_acacia.json b/src/main/resources/data/growthcraft_apiary/loot_tables/blocks/bee_box_acacia.json new file mode 100644 index 0000000..ab3811c --- /dev/null +++ b/src/main/resources/data/growthcraft_apiary/loot_tables/blocks/bee_box_acacia.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "growthcraft_apiary:bee_box_acacia" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_apiary/loot_tables/blocks/bee_box_birch.json b/src/main/resources/data/growthcraft_apiary/loot_tables/blocks/bee_box_birch.json new file mode 100644 index 0000000..6485771 --- /dev/null +++ b/src/main/resources/data/growthcraft_apiary/loot_tables/blocks/bee_box_birch.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "growthcraft_apiary:bee_box_birch" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_apiary/loot_tables/blocks/bee_box_crimson.json b/src/main/resources/data/growthcraft_apiary/loot_tables/blocks/bee_box_crimson.json new file mode 100644 index 0000000..ba2b4c4 --- /dev/null +++ b/src/main/resources/data/growthcraft_apiary/loot_tables/blocks/bee_box_crimson.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "growthcraft_apiary:bee_box_crimson" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_apiary/loot_tables/blocks/bee_box_dark_oak.json b/src/main/resources/data/growthcraft_apiary/loot_tables/blocks/bee_box_dark_oak.json new file mode 100644 index 0000000..ce2044b --- /dev/null +++ b/src/main/resources/data/growthcraft_apiary/loot_tables/blocks/bee_box_dark_oak.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "growthcraft_apiary:bee_box_dark_oak" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_apiary/loot_tables/blocks/bee_box_jungle.json b/src/main/resources/data/growthcraft_apiary/loot_tables/blocks/bee_box_jungle.json new file mode 100644 index 0000000..a96f1d2 --- /dev/null +++ b/src/main/resources/data/growthcraft_apiary/loot_tables/blocks/bee_box_jungle.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "growthcraft_apiary:bee_box_jungle" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_apiary/loot_tables/blocks/bee_box_oak.json b/src/main/resources/data/growthcraft_apiary/loot_tables/blocks/bee_box_oak.json new file mode 100644 index 0000000..8bb843b --- /dev/null +++ b/src/main/resources/data/growthcraft_apiary/loot_tables/blocks/bee_box_oak.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "growthcraft_apiary:bee_box_oak" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_apiary/loot_tables/blocks/bee_box_spruce.json b/src/main/resources/data/growthcraft_apiary/loot_tables/blocks/bee_box_spruce.json new file mode 100644 index 0000000..44e61f4 --- /dev/null +++ b/src/main/resources/data/growthcraft_apiary/loot_tables/blocks/bee_box_spruce.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "growthcraft_apiary:bee_box_spruce" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_apiary/loot_tables/blocks/bee_box_warped.json b/src/main/resources/data/growthcraft_apiary/loot_tables/blocks/bee_box_warped.json new file mode 100644 index 0000000..af266c5 --- /dev/null +++ b/src/main/resources/data/growthcraft_apiary/loot_tables/blocks/bee_box_warped.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "growthcraft_apiary:bee_box_warped" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_apiary/recipes/bee_box_acacia.json b/src/main/resources/data/growthcraft_apiary/recipes/bee_box_acacia.json new file mode 100644 index 0000000..cb6e537 --- /dev/null +++ b/src/main/resources/data/growthcraft_apiary/recipes/bee_box_acacia.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "SPS", + "PBP", + "SPS" + ], + "key": { + "B": { + "item": "minecraft:acacia_slab" + }, + "P": { + "item": "minecraft:acacia_planks" + }, + "S": { + "tag": "forge:rods/wooden" + } + }, + "result": { + "item": "growthcraft_apiary:bee_box_acacia" + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_apiary/recipes/bee_box_birch.json b/src/main/resources/data/growthcraft_apiary/recipes/bee_box_birch.json new file mode 100644 index 0000000..feaf50b --- /dev/null +++ b/src/main/resources/data/growthcraft_apiary/recipes/bee_box_birch.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "SPS", + "PBP", + "SPS" + ], + "key": { + "B": { + "item": "minecraft:birch_slab" + }, + "P": { + "item": "minecraft:birch_planks" + }, + "S": { + "tag": "forge:rods/wooden" + } + }, + "result": { + "item": "growthcraft_apiary:bee_box_birch" + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_apiary/recipes/bee_box_crimson.json b/src/main/resources/data/growthcraft_apiary/recipes/bee_box_crimson.json new file mode 100644 index 0000000..2f32aae --- /dev/null +++ b/src/main/resources/data/growthcraft_apiary/recipes/bee_box_crimson.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "SPS", + "PBP", + "SPS" + ], + "key": { + "B": { + "item": "minecraft:crimson_slab" + }, + "P": { + "item": "minecraft:crimson_planks" + }, + "S": { + "tag": "forge:rods/wooden" + } + }, + "result": { + "item": "growthcraft_apiary:bee_box_crimson" + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_apiary/recipes/bee_box_dark_oak.json b/src/main/resources/data/growthcraft_apiary/recipes/bee_box_dark_oak.json new file mode 100644 index 0000000..62c198e --- /dev/null +++ b/src/main/resources/data/growthcraft_apiary/recipes/bee_box_dark_oak.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "SPS", + "PBP", + "SPS" + ], + "key": { + "B": { + "item": "minecraft:dark_oak_slab" + }, + "P": { + "item": "minecraft:dark_oak_planks" + }, + "S": { + "tag": "forge:rods/wooden" + } + }, + "result": { + "item": "growthcraft_apiary:bee_box_dark_oak" + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_apiary/recipes/bee_box_jungle.json b/src/main/resources/data/growthcraft_apiary/recipes/bee_box_jungle.json new file mode 100644 index 0000000..77ddc75 --- /dev/null +++ b/src/main/resources/data/growthcraft_apiary/recipes/bee_box_jungle.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "SPS", + "PBP", + "SPS" + ], + "key": { + "B": { + "item": "minecraft:jungle_slab" + }, + "P": { + "item": "minecraft:jungle_planks" + }, + "S": { + "tag": "forge:rods/wooden" + } + }, + "result": { + "item": "growthcraft_apiary:bee_box_jungle" + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_apiary/recipes/bee_box_oak.json b/src/main/resources/data/growthcraft_apiary/recipes/bee_box_oak.json new file mode 100644 index 0000000..4a3753a --- /dev/null +++ b/src/main/resources/data/growthcraft_apiary/recipes/bee_box_oak.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "SPS", + "PBP", + "SPS" + ], + "key": { + "B": { + "item": "minecraft:oak_slab" + }, + "P": { + "item": "minecraft:oak_planks" + }, + "S": { + "tag": "forge:rods/wooden" + } + }, + "result": { + "item": "growthcraft_apiary:bee_box_oak" + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_apiary/recipes/bee_box_spruce.json b/src/main/resources/data/growthcraft_apiary/recipes/bee_box_spruce.json new file mode 100644 index 0000000..f08c68a --- /dev/null +++ b/src/main/resources/data/growthcraft_apiary/recipes/bee_box_spruce.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "SPS", + "PBP", + "SPS" + ], + "key": { + "B": { + "item": "minecraft:spruce_slab" + }, + "P": { + "item": "minecraft:spruce_planks" + }, + "S": { + "tag": "forge:rods/wooden" + } + }, + "result": { + "item": "growthcraft_apiary:bee_box_spruce" + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_apiary/recipes/bee_box_warped.json b/src/main/resources/data/growthcraft_apiary/recipes/bee_box_warped.json new file mode 100644 index 0000000..6cfcd91 --- /dev/null +++ b/src/main/resources/data/growthcraft_apiary/recipes/bee_box_warped.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "SPS", + "PBP", + "SPS" + ], + "key": { + "B": { + "item": "minecraft:warped_slab" + }, + "P": { + "item": "minecraft:warped_planks" + }, + "S": { + "tag": "forge:rods/wooden" + } + }, + "result": { + "item": "growthcraft_apiary:bee_box_warped" + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_apiary/recipes/bees_wax_black.json b/src/main/resources/data/growthcraft_apiary/recipes/bees_wax_black.json new file mode 100644 index 0000000..be91d4b --- /dev/null +++ b/src/main/resources/data/growthcraft_apiary/recipes/bees_wax_black.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "AAA", + "ABA", + "AAA" + ], + "key": { + "A": { + "item": "growthcraft_apiary:bees_wax" + }, + "B": { + "tag": "forge:dyes/black" + } + }, + "result": { + "item": "growthcraft_apiary:bees_wax_black", + "count": 8 + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_apiary/recipes/bees_wax_blue.json b/src/main/resources/data/growthcraft_apiary/recipes/bees_wax_blue.json new file mode 100644 index 0000000..024e4bb --- /dev/null +++ b/src/main/resources/data/growthcraft_apiary/recipes/bees_wax_blue.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "AAA", + "ABA", + "AAA" + ], + "key": { + "A": { + "item": "growthcraft_apiary:bees_wax" + }, + "B": { + "tag": "forge:dyes/blue" + } + }, + "result": { + "item": "growthcraft_apiary:bees_wax_blue", + "count": 8 + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_apiary/recipes/bees_wax_brown.json b/src/main/resources/data/growthcraft_apiary/recipes/bees_wax_brown.json new file mode 100644 index 0000000..f16b4bb --- /dev/null +++ b/src/main/resources/data/growthcraft_apiary/recipes/bees_wax_brown.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "AAA", + "ABA", + "AAA" + ], + "key": { + "A": { + "item": "growthcraft_apiary:bees_wax" + }, + "B": { + "tag": "forge:dyes/brown" + } + }, + "result": { + "item": "growthcraft_apiary:bees_wax_brown", + "count": 8 + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_apiary/recipes/bees_wax_cyan.json b/src/main/resources/data/growthcraft_apiary/recipes/bees_wax_cyan.json new file mode 100644 index 0000000..a928ff5 --- /dev/null +++ b/src/main/resources/data/growthcraft_apiary/recipes/bees_wax_cyan.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "AAA", + "ABA", + "AAA" + ], + "key": { + "A": { + "item": "growthcraft_apiary:bees_wax" + }, + "B": { + "tag": "forge:dyes/cyan" + } + }, + "result": { + "item": "growthcraft_apiary:bees_wax_cyan", + "count": 8 + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_apiary/recipes/bees_wax_gray.json b/src/main/resources/data/growthcraft_apiary/recipes/bees_wax_gray.json new file mode 100644 index 0000000..1f827d6 --- /dev/null +++ b/src/main/resources/data/growthcraft_apiary/recipes/bees_wax_gray.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "AAA", + "ABA", + "AAA" + ], + "key": { + "A": { + "item": "growthcraft_apiary:bees_wax" + }, + "B": { + "tag": "forge:dyes/gray" + } + }, + "result": { + "item": "growthcraft_apiary:bees_wax_gray", + "count": 8 + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_apiary/recipes/bees_wax_green.json b/src/main/resources/data/growthcraft_apiary/recipes/bees_wax_green.json new file mode 100644 index 0000000..8df5194 --- /dev/null +++ b/src/main/resources/data/growthcraft_apiary/recipes/bees_wax_green.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "AAA", + "ABA", + "AAA" + ], + "key": { + "A": { + "item": "growthcraft_apiary:bees_wax" + }, + "B": { + "tag": "forge:dyes/green" + } + }, + "result": { + "item": "growthcraft_apiary:bees_wax_green", + "count": 8 + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_apiary/recipes/bees_wax_light_blue.json b/src/main/resources/data/growthcraft_apiary/recipes/bees_wax_light_blue.json new file mode 100644 index 0000000..61e8b01 --- /dev/null +++ b/src/main/resources/data/growthcraft_apiary/recipes/bees_wax_light_blue.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "AAA", + "ABA", + "AAA" + ], + "key": { + "A": { + "item": "growthcraft_apiary:bees_wax" + }, + "B": { + "tag": "forge:dyes/light_blue" + } + }, + "result": { + "item": "growthcraft_apiary:bees_wax_light_blue", + "count": 8 + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_apiary/recipes/bees_wax_light_gray.json b/src/main/resources/data/growthcraft_apiary/recipes/bees_wax_light_gray.json new file mode 100644 index 0000000..82e4246 --- /dev/null +++ b/src/main/resources/data/growthcraft_apiary/recipes/bees_wax_light_gray.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "AAA", + "ABA", + "AAA" + ], + "key": { + "A": { + "item": "growthcraft_apiary:bees_wax" + }, + "B": { + "tag": "forge:dyes/light_gray" + } + }, + "result": { + "item": "growthcraft_apiary:bees_wax_light_gray", + "count": 8 + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_apiary/recipes/bees_wax_lime.json b/src/main/resources/data/growthcraft_apiary/recipes/bees_wax_lime.json new file mode 100644 index 0000000..e52c095 --- /dev/null +++ b/src/main/resources/data/growthcraft_apiary/recipes/bees_wax_lime.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "AAA", + "ABA", + "AAA" + ], + "key": { + "A": { + "item": "growthcraft_apiary:bees_wax" + }, + "B": { + "tag": "forge:dyes/lime" + } + }, + "result": { + "item": "growthcraft_apiary:bees_wax_lime", + "count": 8 + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_apiary/recipes/bees_wax_magenta.json b/src/main/resources/data/growthcraft_apiary/recipes/bees_wax_magenta.json new file mode 100644 index 0000000..ed7645d --- /dev/null +++ b/src/main/resources/data/growthcraft_apiary/recipes/bees_wax_magenta.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "AAA", + "ABA", + "AAA" + ], + "key": { + "A": { + "item": "growthcraft_apiary:bees_wax" + }, + "B": { + "tag": "forge:dyes/magenta" + } + }, + "result": { + "item": "growthcraft_apiary:bees_wax_magenta", + "count": 8 + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_apiary/recipes/bees_wax_orange.json b/src/main/resources/data/growthcraft_apiary/recipes/bees_wax_orange.json new file mode 100644 index 0000000..c28252a --- /dev/null +++ b/src/main/resources/data/growthcraft_apiary/recipes/bees_wax_orange.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "AAA", + "ABA", + "AAA" + ], + "key": { + "A": { + "item": "growthcraft_apiary:bees_wax" + }, + "B": { + "tag": "forge:dyes/orange" + } + }, + "result": { + "item": "growthcraft_apiary:bees_wax_orange", + "count": 8 + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_apiary/recipes/bees_wax_pink.json b/src/main/resources/data/growthcraft_apiary/recipes/bees_wax_pink.json new file mode 100644 index 0000000..bb3cde2 --- /dev/null +++ b/src/main/resources/data/growthcraft_apiary/recipes/bees_wax_pink.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "AAA", + "ABA", + "AAA" + ], + "key": { + "A": { + "item": "growthcraft_apiary:bees_wax" + }, + "B": { + "tag": "forge:dyes/pink" + } + }, + "result": { + "item": "growthcraft_apiary:bees_wax_pink", + "count": 8 + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_apiary/recipes/bees_wax_purple.json b/src/main/resources/data/growthcraft_apiary/recipes/bees_wax_purple.json new file mode 100644 index 0000000..3798f61 --- /dev/null +++ b/src/main/resources/data/growthcraft_apiary/recipes/bees_wax_purple.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "AAA", + "ABA", + "AAA" + ], + "key": { + "A": { + "item": "growthcraft_apiary:bees_wax" + }, + "B": { + "tag": "forge:dyes/purple" + } + }, + "result": { + "item": "growthcraft_apiary:bees_wax_purple", + "count": 8 + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_apiary/recipes/bees_wax_red.json b/src/main/resources/data/growthcraft_apiary/recipes/bees_wax_red.json new file mode 100644 index 0000000..de5d782 --- /dev/null +++ b/src/main/resources/data/growthcraft_apiary/recipes/bees_wax_red.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "AAA", + "ABA", + "AAA" + ], + "key": { + "A": { + "item": "growthcraft_apiary:bees_wax" + }, + "B": { + "tag": "forge:dyes/red" + } + }, + "result": { + "item": "growthcraft_apiary:bees_wax_red", + "count": 8 + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_apiary/recipes/bees_wax_white.json b/src/main/resources/data/growthcraft_apiary/recipes/bees_wax_white.json new file mode 100644 index 0000000..8a7458a --- /dev/null +++ b/src/main/resources/data/growthcraft_apiary/recipes/bees_wax_white.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "AAA", + "ABA", + "AAA" + ], + "key": { + "A": { + "item": "growthcraft_apiary:bees_wax" + }, + "B": { + "tag": "forge:dyes/white" + } + }, + "result": { + "item": "growthcraft_apiary:bees_wax_white", + "count": 8 + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_apiary/recipes/bees_wax_yellow.json b/src/main/resources/data/growthcraft_apiary/recipes/bees_wax_yellow.json new file mode 100644 index 0000000..1268b04 --- /dev/null +++ b/src/main/resources/data/growthcraft_apiary/recipes/bees_wax_yellow.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "AAA", + "ABA", + "AAA" + ], + "key": { + "A": { + "item": "growthcraft_apiary:bees_wax" + }, + "B": { + "tag": "forge:dyes/yellow" + } + }, + "result": { + "item": "growthcraft_apiary:bees_wax_yellow", + "count": 8 + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_apiary/recipes/brew_kettle_mead_must_honey_comb_full.json b/src/main/resources/data/growthcraft_apiary/recipes/brew_kettle_mead_must_honey_comb_full.json new file mode 100644 index 0000000..1dfc295 --- /dev/null +++ b/src/main/resources/data/growthcraft_apiary/recipes/brew_kettle_mead_must_honey_comb_full.json @@ -0,0 +1,23 @@ +{ + "type": "growthcraft_cellar:brew_kettle_recipe", + "requires_heat": true, + "requires_lid": "false", + "processing_time": 600, + "by_product_chance": 100, + "input_fluid": { + "fluid": "minecraft:water", + "amount": 250 + }, + "input_item": { + "item": "growthcraft_apiary:honey_comb_full", + "count": 1 + }, + "output_fluid": { + "fluid": "growthcraft_apiary:honey_mead_must_fluid", + "amount": 250 + }, + "by_product": { + "item": "growthcraft_apiary:honey_comb_empty", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_apiary/recipes/brew_kettle_mead_must_vanilla_honeycomb.json b/src/main/resources/data/growthcraft_apiary/recipes/brew_kettle_mead_must_vanilla_honeycomb.json new file mode 100644 index 0000000..ef35b28 --- /dev/null +++ b/src/main/resources/data/growthcraft_apiary/recipes/brew_kettle_mead_must_vanilla_honeycomb.json @@ -0,0 +1,23 @@ +{ + "type": "growthcraft_cellar:brew_kettle_recipe", + "requires_heat": true, + "requires_lid": "false", + "processing_time": 600, + "by_product_chance": 100, + "input_fluid": { + "fluid": "minecraft:water", + "amount": 500 + }, + "input_item": { + "item": "minecraft:honeycomb", + "count": 1 + }, + "output_fluid": { + "fluid": "growthcraft_apiary:honey_mead_must_fluid", + "amount": 500 + }, + "by_product": { + "item": "growthcraft_apiary:honey_comb_empty", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_apiary/recipes/brew_kettle_wax_item.json b/src/main/resources/data/growthcraft_apiary/recipes/brew_kettle_wax_item.json new file mode 100644 index 0000000..f48a11e --- /dev/null +++ b/src/main/resources/data/growthcraft_apiary/recipes/brew_kettle_wax_item.json @@ -0,0 +1,23 @@ +{ + "type": "growthcraft_cellar:brew_kettle_recipe", + "requires_heat": true, + "requires_lid": "false", + "processing_time": 100, + "by_product_chance": 100, + "input_fluid": { + "fluid": "minecraft:water", + "amount": 100 + }, + "input_item": { + "item": "growthcraft_apiary:honey_comb_empty", + "count": 1 + }, + "output_fluid": { + "fluid": "minecraft:air", + "amount": 100 + }, + "by_product": { + "item": "growthcraft_apiary:bees_wax", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_apiary/recipes/fermentation_barrel_honey_mead.json b/src/main/resources/data/growthcraft_apiary/recipes/fermentation_barrel_honey_mead.json new file mode 100644 index 0000000..47a880e --- /dev/null +++ b/src/main/resources/data/growthcraft_apiary/recipes/fermentation_barrel_honey_mead.json @@ -0,0 +1,27 @@ +{ + "type": "growthcraft_cellar:fermentation_barrel_recipe", + "processing_time": 3600, + "ingredient_item": { + "item": "growthcraft_cellar:yeast_bayanus", + "count": 1 + }, + "ingredient_fluid": { + "fluid": "growthcraft_apiary:honey_mead_must_fluid", + "amount": 1000 + }, + "result": { + "fluid": "growthcraft_apiary:honey_mead_fluid", + "amount": 1000 + }, + "effects": [ + { + "effect": "minecraft:health_boost", + "duration": 3600, + "amplifier": 1 + } + ], + "bottle": { + "item": "growthcraft_cellar:potion_wine" + }, + "color": "0xE5C7A2" +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_apiary/recipes/fruit_press_honey.json b/src/main/resources/data/growthcraft_apiary/recipes/fruit_press_honey.json new file mode 100644 index 0000000..5367bd0 --- /dev/null +++ b/src/main/resources/data/growthcraft_apiary/recipes/fruit_press_honey.json @@ -0,0 +1,16 @@ +{ + "type": "growthcraft_cellar:fruit_press_recipe", + "processing_time": 600, + "input_item": { + "item": "growthcraft_apiary:honey_comb_full", + "count": 1 + }, + "output_fluid": { + "fluid": "growthcraft_apiary:honey_fluid", + "amount": 250 + }, + "by_product": { + "item": "minecraft:bone_meal", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_apiary/tags/items/bee.json b/src/main/resources/data/growthcraft_apiary/tags/items/bee.json new file mode 100644 index 0000000..86d8a36 --- /dev/null +++ b/src/main/resources/data/growthcraft_apiary/tags/items/bee.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "growthcraft_apiary:bee" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_apiary/tags/items/bees_wax.json b/src/main/resources/data/growthcraft_apiary/tags/items/bees_wax.json new file mode 100644 index 0000000..fe6b39e --- /dev/null +++ b/src/main/resources/data/growthcraft_apiary/tags/items/bees_wax.json @@ -0,0 +1,22 @@ +{ + "replace": false, + "values": [ + "growthcraft_apiary:bees_wax", + "growthcraft_apiary:bees_wax_black", + "growthcraft_apiary:bees_wax_blue", + "growthcraft_apiary:bees_wax_brown", + "growthcraft_apiary:bees_wax_cyan", + "growthcraft_apiary:bees_wax_gray", + "growthcraft_apiary:bees_wax_green", + "growthcraft_apiary:bees_wax_light_blue", + "growthcraft_apiary:bees_wax_light_gray", + "growthcraft_apiary:bees_wax_lime", + "growthcraft_apiary:bees_wax_magenta", + "growthcraft_apiary:bees_wax_orange", + "growthcraft_apiary:bees_wax_pink", + "growthcraft_apiary:bees_wax_purple", + "growthcraft_apiary:bees_wax_red", + "growthcraft_apiary:bees_wax_white", + "growthcraft_apiary:bees_wax_yellow" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_apiary/tags/items/honey_comb.json b/src/main/resources/data/growthcraft_apiary/tags/items/honey_comb.json new file mode 100644 index 0000000..c3f2cbd --- /dev/null +++ b/src/main/resources/data/growthcraft_apiary/tags/items/honey_comb.json @@ -0,0 +1,8 @@ +{ + "replace": false, + "values": [ + "growthcraft_apiary:honey_comb_empty", + "growthcraft_apiary:honey_comb_full", + "minecraft:honeycomb" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_apples/loot_tables/blocks/apple.json b/src/main/resources/data/growthcraft_apples/loot_tables/blocks/apple.json new file mode 100644 index 0000000..2079b45 --- /dev/null +++ b/src/main/resources/data/growthcraft_apples/loot_tables/blocks/apple.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:apple" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_apples/loot_tables/blocks/apple_plank.json b/src/main/resources/data/growthcraft_apples/loot_tables/blocks/apple_plank.json new file mode 100644 index 0000000..ec72d68 --- /dev/null +++ b/src/main/resources/data/growthcraft_apples/loot_tables/blocks/apple_plank.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "growthcraft_apples:apple_plank" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_apples/loot_tables/blocks/apple_plank_button.json b/src/main/resources/data/growthcraft_apples/loot_tables/blocks/apple_plank_button.json new file mode 100644 index 0000000..07199f8 --- /dev/null +++ b/src/main/resources/data/growthcraft_apples/loot_tables/blocks/apple_plank_button.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "growthcraft_apples:apple_plank_button" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_apples/loot_tables/blocks/apple_plank_door.json b/src/main/resources/data/growthcraft_apples/loot_tables/blocks/apple_plank_door.json new file mode 100644 index 0000000..11833da --- /dev/null +++ b/src/main/resources/data/growthcraft_apples/loot_tables/blocks/apple_plank_door.json @@ -0,0 +1,29 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "conditions": [ + { + "block": "growthcraft_apples:apple_plank_door", + "condition": "minecraft:block_state_property", + "properties": { + "half": "lower" + } + } + ], + "name": "growthcraft_apples:apple_plank_door" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_apples/loot_tables/blocks/apple_plank_fence.json b/src/main/resources/data/growthcraft_apples/loot_tables/blocks/apple_plank_fence.json new file mode 100644 index 0000000..79b4c8e --- /dev/null +++ b/src/main/resources/data/growthcraft_apples/loot_tables/blocks/apple_plank_fence.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "growthcraft_apples:apple_plank_fence" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_apples/loot_tables/blocks/apple_plank_fence_gate.json b/src/main/resources/data/growthcraft_apples/loot_tables/blocks/apple_plank_fence_gate.json new file mode 100644 index 0000000..64ee4a2 --- /dev/null +++ b/src/main/resources/data/growthcraft_apples/loot_tables/blocks/apple_plank_fence_gate.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "growthcraft_apples:apple_plank_fence_gate" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_apples/loot_tables/blocks/apple_plank_pressure_plate.json b/src/main/resources/data/growthcraft_apples/loot_tables/blocks/apple_plank_pressure_plate.json new file mode 100644 index 0000000..8f51cbc --- /dev/null +++ b/src/main/resources/data/growthcraft_apples/loot_tables/blocks/apple_plank_pressure_plate.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "growthcraft_apples:apple_plank_pressure_plate" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_apples/loot_tables/blocks/apple_plank_slab.json b/src/main/resources/data/growthcraft_apples/loot_tables/blocks/apple_plank_slab.json new file mode 100644 index 0000000..a67674d --- /dev/null +++ b/src/main/resources/data/growthcraft_apples/loot_tables/blocks/apple_plank_slab.json @@ -0,0 +1,32 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "growthcraft_apples:apple_plank_slab", + "properties": { + "type": "double" + } + } + ], + "count": 2 + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "growthcraft_apples:apple_plank_slab" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_apples/loot_tables/blocks/apple_plank_stairs.json b/src/main/resources/data/growthcraft_apples/loot_tables/blocks/apple_plank_stairs.json new file mode 100644 index 0000000..d832f83 --- /dev/null +++ b/src/main/resources/data/growthcraft_apples/loot_tables/blocks/apple_plank_stairs.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "growthcraft_apples:apple_plank_stairs" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_apples/loot_tables/blocks/apple_plank_trapdoor.json b/src/main/resources/data/growthcraft_apples/loot_tables/blocks/apple_plank_trapdoor.json new file mode 100644 index 0000000..3d7014a --- /dev/null +++ b/src/main/resources/data/growthcraft_apples/loot_tables/blocks/apple_plank_trapdoor.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "growthcraft_apples:apple_plank_trapdoor" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_apples/loot_tables/blocks/apple_tree_leaves.json b/src/main/resources/data/growthcraft_apples/loot_tables/blocks/apple_tree_leaves.json new file mode 100644 index 0000000..7ef4427 --- /dev/null +++ b/src/main/resources/data/growthcraft_apples/loot_tables/blocks/apple_tree_leaves.json @@ -0,0 +1,108 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1.0, + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:alternative", + "terms": [ + { + "condition": "forge:can_tool_perform_action", + "action": "shears_dig" + }, + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ] + } + ], + "name": "growthcraft_apples:apple_tree_leaves" + } + ] + } + ] + }, + { + "rolls": 1.0, + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:table_bonus", + "enchantment": "minecraft:fortune", + "chances": [ + 0.02, + 0.022222223, + 0.025, + 0.033333335, + 0.1 + ] + } + ], + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1.0, + "max": 2.0 + }, + "add": false + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "minecraft:stick" + } + ], + "conditions": [ + { + "condition": "minecraft:inverted", + "term": { + "condition": "minecraft:alternative", + "terms": [ + { + "condition": "forge:can_tool_perform_action", + "action": "shears_dig" + }, + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ] + } + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_apples/loot_tables/blocks/apple_tree_sapling.json b/src/main/resources/data/growthcraft_apples/loot_tables/blocks/apple_tree_sapling.json new file mode 100644 index 0000000..2ef6af2 --- /dev/null +++ b/src/main/resources/data/growthcraft_apples/loot_tables/blocks/apple_tree_sapling.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "growthcraft_apples:apple_tree_sapling" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_apples/loot_tables/blocks/apple_wood.json b/src/main/resources/data/growthcraft_apples/loot_tables/blocks/apple_wood.json new file mode 100644 index 0000000..f8140d8 --- /dev/null +++ b/src/main/resources/data/growthcraft_apples/loot_tables/blocks/apple_wood.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "growthcraft_apples:apple_wood" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_apples/loot_tables/blocks/apple_wood_log.json b/src/main/resources/data/growthcraft_apples/loot_tables/blocks/apple_wood_log.json new file mode 100644 index 0000000..5ea5ed8 --- /dev/null +++ b/src/main/resources/data/growthcraft_apples/loot_tables/blocks/apple_wood_log.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "growthcraft_apples:apple_wood_log" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_apples/loot_tables/blocks/apple_wood_log_stripped.json b/src/main/resources/data/growthcraft_apples/loot_tables/blocks/apple_wood_log_stripped.json new file mode 100644 index 0000000..bcd2976 --- /dev/null +++ b/src/main/resources/data/growthcraft_apples/loot_tables/blocks/apple_wood_log_stripped.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "growthcraft_apples:apple_wood_log_stripped" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_apples/loot_tables/blocks/apple_wood_stripped.json b/src/main/resources/data/growthcraft_apples/loot_tables/blocks/apple_wood_stripped.json new file mode 100644 index 0000000..2bc859c --- /dev/null +++ b/src/main/resources/data/growthcraft_apples/loot_tables/blocks/apple_wood_stripped.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "growthcraft_apples:apple_wood_stripped" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_apples/loot_tables/blocks/bee_box_apple.json b/src/main/resources/data/growthcraft_apples/loot_tables/blocks/bee_box_apple.json new file mode 100644 index 0000000..14e7fe2 --- /dev/null +++ b/src/main/resources/data/growthcraft_apples/loot_tables/blocks/bee_box_apple.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "growthcraft_apples:bee_box_apple" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_apples/recipes/apple_plank.json b/src/main/resources/data/growthcraft_apples/recipes/apple_plank.json new file mode 100644 index 0000000..540019c --- /dev/null +++ b/src/main/resources/data/growthcraft_apples/recipes/apple_plank.json @@ -0,0 +1,13 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "planks", + "ingredients": [ + { + "tag": "growthcraft_apples:apple_wood_logs" + } + ], + "result": { + "item": "growthcraft_apples:apple_plank", + "count": 4 + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_apples/recipes/apple_plank_button.json b/src/main/resources/data/growthcraft_apples/recipes/apple_plank_button.json new file mode 100644 index 0000000..0d0f65b --- /dev/null +++ b/src/main/resources/data/growthcraft_apples/recipes/apple_plank_button.json @@ -0,0 +1,12 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "wooden_button", + "ingredients": [ + { + "item": "growthcraft_apples:apple_plank" + } + ], + "result": { + "item": "growthcraft_apples:apple_plank_button" + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_apples/recipes/apple_plank_door.json b/src/main/resources/data/growthcraft_apples/recipes/apple_plank_door.json new file mode 100644 index 0000000..f097eef --- /dev/null +++ b/src/main/resources/data/growthcraft_apples/recipes/apple_plank_door.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "wooden_door", + "pattern": [ + "##", + "##", + "##" + ], + "key": { + "#": { + "item": "growthcraft_apples:apple_plank" + } + }, + "result": { + "item": "growthcraft_apples:apple_plank_door", + "count": 3 + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_apples/recipes/apple_plank_fence.json b/src/main/resources/data/growthcraft_apples/recipes/apple_plank_fence.json new file mode 100644 index 0000000..e316529 --- /dev/null +++ b/src/main/resources/data/growthcraft_apples/recipes/apple_plank_fence.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "wooden_fence", + "pattern": [ + "212", + "212" + ], + "key": { + "1": { + "item": "minecraft:stick" + }, + "2": { + "item": "growthcraft_apples:apple_plank" + } + }, + "result": { + "item": "growthcraft_apples:apple_plank_fence", + "count": 3 + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_apples/recipes/apple_plank_fence_gate.json b/src/main/resources/data/growthcraft_apples/recipes/apple_plank_fence_gate.json new file mode 100644 index 0000000..b1e64b4 --- /dev/null +++ b/src/main/resources/data/growthcraft_apples/recipes/apple_plank_fence_gate.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "wooden_fence", + "pattern": [ + "121", + "121" + ], + "key": { + "1": { + "item": "minecraft:stick" + }, + "2": { + "item": "growthcraft_apples:apple_plank" + } + }, + "result": { + "item": "growthcraft_apples:apple_plank_fence_gate", + "count": 3 + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_apples/recipes/apple_plank_pressure_plate.json b/src/main/resources/data/growthcraft_apples/recipes/apple_plank_pressure_plate.json new file mode 100644 index 0000000..d01198d --- /dev/null +++ b/src/main/resources/data/growthcraft_apples/recipes/apple_plank_pressure_plate.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "wooden_pressure_plate", + "pattern": [ + "##" + ], + "key": { + "#": { + "item": "growthcraft_apples:apple_plank" + } + }, + "result": { + "item": "growthcraft_apples:apple_plank_pressure_plate" + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_apples/recipes/apple_plank_slab.json b/src/main/resources/data/growthcraft_apples/recipes/apple_plank_slab.json new file mode 100644 index 0000000..46c628c --- /dev/null +++ b/src/main/resources/data/growthcraft_apples/recipes/apple_plank_slab.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "wooden_slab", + "pattern": [ + "###" + ], + "key": { + "#": { + "item": "growthcraft_apples:apple_plank" + } + }, + "result": { + "item": "growthcraft_apples:apple_plank_slab", + "count": 6 + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_apples/recipes/apple_plank_stairs.json b/src/main/resources/data/growthcraft_apples/recipes/apple_plank_stairs.json new file mode 100644 index 0000000..49e8ee4 --- /dev/null +++ b/src/main/resources/data/growthcraft_apples/recipes/apple_plank_stairs.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "wooden_stairs", + "pattern": [ + "# ", + "## ", + "###" + ], + "key": { + "#": { + "item": "growthcraft_apples:apple_plank" + } + }, + "result": { + "item": "growthcraft_apples:apple_plank_stairs", + "count": 4 + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_apples/recipes/apple_plank_trapdoor.json b/src/main/resources/data/growthcraft_apples/recipes/apple_plank_trapdoor.json new file mode 100644 index 0000000..b469e5f --- /dev/null +++ b/src/main/resources/data/growthcraft_apples/recipes/apple_plank_trapdoor.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "wooden_pressure_plate", + "pattern": [ + "###", + "###" + ], + "key": { + "#": { + "item": "growthcraft_apples:apple_plank" + } + }, + "result": { + "item": "growthcraft_apples:apple_plank_trapdoor" + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_apples/recipes/apple_seeds.json b/src/main/resources/data/growthcraft_apples/recipes/apple_seeds.json new file mode 100644 index 0000000..4607406 --- /dev/null +++ b/src/main/resources/data/growthcraft_apples/recipes/apple_seeds.json @@ -0,0 +1,12 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "seeds", + "ingredients": [ + { + "item": "minecraft:apple" + } + ], + "result": { + "item": "growthcraft_apples:apple_seeds" + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_apples/recipes/apple_wood.json b/src/main/resources/data/growthcraft_apples/recipes/apple_wood.json new file mode 100644 index 0000000..0452d7c --- /dev/null +++ b/src/main/resources/data/growthcraft_apples/recipes/apple_wood.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "bark", + "pattern": [ + "##", + "##" + ], + "key": { + "#": { + "item": "growthcraft_apples:apple_wood_log" + } + }, + "result": { + "item": "growthcraft_apples:apple_wood", + "count": 3 + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_apples/recipes/bee_box_apple_plank.json b/src/main/resources/data/growthcraft_apples/recipes/bee_box_apple_plank.json new file mode 100644 index 0000000..10ece1c --- /dev/null +++ b/src/main/resources/data/growthcraft_apples/recipes/bee_box_apple_plank.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "SPS", + "PBP", + "SPS" + ], + "key": { + "B": { + "item": "growthcraft_apples:apple_plank_slab" + }, + "P": { + "item": "growthcraft_apples:apple_plank" + }, + "S": { + "tag": "forge:rods/wooden" + } + }, + "result": { + "item": "growthcraft_apples:bee_box_apple" + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_apples/recipes/fermentation_barrel_apple_cider.json b/src/main/resources/data/growthcraft_apples/recipes/fermentation_barrel_apple_cider.json new file mode 100644 index 0000000..77b42cd --- /dev/null +++ b/src/main/resources/data/growthcraft_apples/recipes/fermentation_barrel_apple_cider.json @@ -0,0 +1,27 @@ +{ + "type": "growthcraft_cellar:fermentation_barrel_recipe", + "processing_time": 1200, + "ingredient_item": { + "item": "growthcraft_cellar:yeast_bayanus", + "count": 1 + }, + "ingredient_fluid": { + "fluid": "growthcraft_apples:apple_juice_fluid", + "amount": 1000 + }, + "result": { + "fluid": "growthcraft_apples:apple_cider_fluid", + "amount": 1000 + }, + "effects": [ + { + "effect": "minecraft:saturation", + "duration": 1200, + "amplifier": 1 + } + ], + "bottle": { + "item": "growthcraft_cellar:potion_wine" + }, + "color": "0x805C2F" +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_apples/recipes/fruit_press_apple_juice.json b/src/main/resources/data/growthcraft_apples/recipes/fruit_press_apple_juice.json new file mode 100644 index 0000000..968a344 --- /dev/null +++ b/src/main/resources/data/growthcraft_apples/recipes/fruit_press_apple_juice.json @@ -0,0 +1,16 @@ +{ + "type": "growthcraft_cellar:fruit_press_recipe", + "processing_time": 600, + "input_item": { + "item": "minecraft:apple", + "count": 1 + }, + "output_fluid": { + "fluid": "growthcraft_apples:apple_juice_fluid", + "amount": 250 + }, + "by_product": { + "item": "minecraft:bone_meal", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_apples/tags/blocks/apple_wood_logs.json b/src/main/resources/data/growthcraft_apples/tags/blocks/apple_wood_logs.json new file mode 100644 index 0000000..77b675f --- /dev/null +++ b/src/main/resources/data/growthcraft_apples/tags/blocks/apple_wood_logs.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "growthcraft_apples:apple_wood_log", + "growthcraft_apples:apple_wood" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_apples/tags/items/apple_wood_logs.json b/src/main/resources/data/growthcraft_apples/tags/items/apple_wood_logs.json new file mode 100644 index 0000000..77b675f --- /dev/null +++ b/src/main/resources/data/growthcraft_apples/tags/items/apple_wood_logs.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "growthcraft_apples:apple_wood_log", + "growthcraft_apples:apple_wood" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_apples/worldgen/configured_feature/apple_tree.json b/src/main/resources/data/growthcraft_apples/worldgen/configured_feature/apple_tree.json new file mode 100644 index 0000000..62d7b06 --- /dev/null +++ b/src/main/resources/data/growthcraft_apples/worldgen/configured_feature/apple_tree.json @@ -0,0 +1,52 @@ +{ + "type": "minecraft:tree", + "config": { + "decorators": [], + "dirt_provider": { + "type": "minecraft:simple_state_provider", + "state": { + "Name": "minecraft:dirt" + } + }, + "foliage_placer": { + "type": "minecraft:blob_foliage_placer", + "height": 3, + "offset": 0, + "radius": 2 + }, + "foliage_provider": { + "type": "minecraft:simple_state_provider", + "state": { + "Name": "growthcraft_apples:apple_tree_leaves", + "Properties": { + "distance": "7", + "persistent": "false", + "waterlogged": "false" + } + } + }, + "force_dirt": false, + "ignore_vines": false, + "minimum_size": { + "type": "minecraft:two_layers_feature_size", + "limit": 1, + "lower_size": 0, + "upper_size": 2 + }, + "trunk_placer": { + "type": "minecraft:straight_trunk_placer", + "base_height": 5, + "height_rand_a": 2, + "height_rand_b": 0 + }, + "trunk_provider": { + "type": "minecraft:simple_state_provider", + "state": { + "Name": "growthcraft_apples:apple_wood_log", + "Properties": { + "axis": "y" + } + } + } + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_apples/worldgen/placed_feature/apple_tree_placed.json b/src/main/resources/data/growthcraft_apples/worldgen/placed_feature/apple_tree_placed.json new file mode 100644 index 0000000..baa0f55 --- /dev/null +++ b/src/main/resources/data/growthcraft_apples/worldgen/placed_feature/apple_tree_placed.json @@ -0,0 +1,47 @@ +{ + "feature": "growthcraft_apples:apple_tree", + "placement": [ + { + "type": "minecraft:count", + "count": { + "type": "minecraft:weighted_list", + "distribution": [ + { + "data": 3, + "weight": 9 + }, + { + "data": 5, + "weight": 1 + } + ] + } + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:surface_water_depth_filter", + "max_water_depth": 0 + }, + { + "type": "minecraft:heightmap", + "heightmap": "OCEAN_FLOOR" + }, + { + "type": "minecraft:biome" + }, + { + "type": "minecraft:block_predicate_filter", + "predicate": { + "type": "minecraft:would_survive", + "state": { + "Name": "growthcraft_apples:apple_tree_sapling", + "Properties": { + "stage": "0" + } + } + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_bamboo/loot_tables/blocks/bamboo_plank.json b/src/main/resources/data/growthcraft_bamboo/loot_tables/blocks/bamboo_plank.json new file mode 100644 index 0000000..5f93ae7 --- /dev/null +++ b/src/main/resources/data/growthcraft_bamboo/loot_tables/blocks/bamboo_plank.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "growthcraft_bamboo:bamboo_plank" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_bamboo/loot_tables/blocks/bamboo_plank_button.json b/src/main/resources/data/growthcraft_bamboo/loot_tables/blocks/bamboo_plank_button.json new file mode 100644 index 0000000..2d77821 --- /dev/null +++ b/src/main/resources/data/growthcraft_bamboo/loot_tables/blocks/bamboo_plank_button.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "growthcraft_bamboo:bamboo_plank_button" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_bamboo/loot_tables/blocks/bamboo_plank_door.json b/src/main/resources/data/growthcraft_bamboo/loot_tables/blocks/bamboo_plank_door.json new file mode 100644 index 0000000..c3439bf --- /dev/null +++ b/src/main/resources/data/growthcraft_bamboo/loot_tables/blocks/bamboo_plank_door.json @@ -0,0 +1,29 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "conditions": [ + { + "block": "growthcraft_bamboo:bamboo_plank_door", + "condition": "minecraft:block_state_property", + "properties": { + "half": "lower" + } + } + ], + "name": "growthcraft_bamboo:bamboo_plank_door" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_bamboo/loot_tables/blocks/bamboo_plank_fence.json b/src/main/resources/data/growthcraft_bamboo/loot_tables/blocks/bamboo_plank_fence.json new file mode 100644 index 0000000..4dd85c8 --- /dev/null +++ b/src/main/resources/data/growthcraft_bamboo/loot_tables/blocks/bamboo_plank_fence.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "growthcraft_bamboo:bamboo_plank_fence" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_bamboo/loot_tables/blocks/bamboo_plank_fence_gate.json b/src/main/resources/data/growthcraft_bamboo/loot_tables/blocks/bamboo_plank_fence_gate.json new file mode 100644 index 0000000..71e1019 --- /dev/null +++ b/src/main/resources/data/growthcraft_bamboo/loot_tables/blocks/bamboo_plank_fence_gate.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "growthcraft_bamboo:bamboo_plank_fence_gate" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_bamboo/loot_tables/blocks/bamboo_plank_pressure_plate.json b/src/main/resources/data/growthcraft_bamboo/loot_tables/blocks/bamboo_plank_pressure_plate.json new file mode 100644 index 0000000..d525f1e --- /dev/null +++ b/src/main/resources/data/growthcraft_bamboo/loot_tables/blocks/bamboo_plank_pressure_plate.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "growthcraft_bamboo:bamboo_plank_pressure_plate" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_bamboo/loot_tables/blocks/bamboo_plank_slab.json b/src/main/resources/data/growthcraft_bamboo/loot_tables/blocks/bamboo_plank_slab.json new file mode 100644 index 0000000..cba84ff --- /dev/null +++ b/src/main/resources/data/growthcraft_bamboo/loot_tables/blocks/bamboo_plank_slab.json @@ -0,0 +1,32 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "growthcraft_bamboo:bamboo_plank_slab", + "properties": { + "type": "double" + } + } + ], + "count": 2 + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "growthcraft_bamboo:bamboo_plank_slab" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_bamboo/loot_tables/blocks/bamboo_plank_stairs.json b/src/main/resources/data/growthcraft_bamboo/loot_tables/blocks/bamboo_plank_stairs.json new file mode 100644 index 0000000..30dc53e --- /dev/null +++ b/src/main/resources/data/growthcraft_bamboo/loot_tables/blocks/bamboo_plank_stairs.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "growthcraft_bamboo:bamboo_plank_stairs" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_bamboo/loot_tables/blocks/bamboo_plank_trapdoor.json b/src/main/resources/data/growthcraft_bamboo/loot_tables/blocks/bamboo_plank_trapdoor.json new file mode 100644 index 0000000..805c2b7 --- /dev/null +++ b/src/main/resources/data/growthcraft_bamboo/loot_tables/blocks/bamboo_plank_trapdoor.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "growthcraft_bamboo:bamboo_plank_trapdoor" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_bamboo/loot_tables/blocks/bamboo_wood.json b/src/main/resources/data/growthcraft_bamboo/loot_tables/blocks/bamboo_wood.json new file mode 100644 index 0000000..fa58fde --- /dev/null +++ b/src/main/resources/data/growthcraft_bamboo/loot_tables/blocks/bamboo_wood.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "growthcraft_bamboo:bamboo_wood" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_bamboo/loot_tables/blocks/bamboo_wood_log.json b/src/main/resources/data/growthcraft_bamboo/loot_tables/blocks/bamboo_wood_log.json new file mode 100644 index 0000000..b74115c --- /dev/null +++ b/src/main/resources/data/growthcraft_bamboo/loot_tables/blocks/bamboo_wood_log.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "growthcraft_bamboo:bamboo_wood_log" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_bamboo/loot_tables/blocks/bamboo_wood_log_stripped.json b/src/main/resources/data/growthcraft_bamboo/loot_tables/blocks/bamboo_wood_log_stripped.json new file mode 100644 index 0000000..07e6afb --- /dev/null +++ b/src/main/resources/data/growthcraft_bamboo/loot_tables/blocks/bamboo_wood_log_stripped.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "growthcraft_bamboo:bamboo_wood_log_stripped" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_bamboo/loot_tables/blocks/bamboo_wood_stripped.json b/src/main/resources/data/growthcraft_bamboo/loot_tables/blocks/bamboo_wood_stripped.json new file mode 100644 index 0000000..dd6ff8b --- /dev/null +++ b/src/main/resources/data/growthcraft_bamboo/loot_tables/blocks/bamboo_wood_stripped.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "growthcraft_bamboo:bamboo_wood_stripped" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_bamboo/loot_tables/blocks/bee_box_bamboo.json b/src/main/resources/data/growthcraft_bamboo/loot_tables/blocks/bee_box_bamboo.json new file mode 100644 index 0000000..6d9e3e7 --- /dev/null +++ b/src/main/resources/data/growthcraft_bamboo/loot_tables/blocks/bee_box_bamboo.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "growthcraft_bamboo:bee_box_bamboo" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_bamboo/recipes/bamboo_plank.json b/src/main/resources/data/growthcraft_bamboo/recipes/bamboo_plank.json new file mode 100644 index 0000000..f23c5ab --- /dev/null +++ b/src/main/resources/data/growthcraft_bamboo/recipes/bamboo_plank.json @@ -0,0 +1,13 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "planks", + "ingredients": [ + { + "tag": "growthcraft_bamboo:bamboo_wood" + } + ], + "result": { + "item": "growthcraft_bamboo:bamboo_plank", + "count": 4 + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_bamboo/recipes/bamboo_plank_button.json b/src/main/resources/data/growthcraft_bamboo/recipes/bamboo_plank_button.json new file mode 100644 index 0000000..b0b7ca2 --- /dev/null +++ b/src/main/resources/data/growthcraft_bamboo/recipes/bamboo_plank_button.json @@ -0,0 +1,12 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "wooden_button", + "ingredients": [ + { + "item": "growthcraft_bamboo:bamboo_plank" + } + ], + "result": { + "item": "growthcraft_bamboo:bamboo_plank_button" + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_bamboo/recipes/bamboo_plank_door.json b/src/main/resources/data/growthcraft_bamboo/recipes/bamboo_plank_door.json new file mode 100644 index 0000000..d116212 --- /dev/null +++ b/src/main/resources/data/growthcraft_bamboo/recipes/bamboo_plank_door.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "wooden_door", + "pattern": [ + "##", + "##", + "##" + ], + "key": { + "#": { + "item": "growthcraft_bamboo:bamboo_plank" + } + }, + "result": { + "item": "growthcraft_bamboo:bamboo_plank_door", + "count": 3 + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_bamboo/recipes/bamboo_plank_fence.json b/src/main/resources/data/growthcraft_bamboo/recipes/bamboo_plank_fence.json new file mode 100644 index 0000000..5fd3c90 --- /dev/null +++ b/src/main/resources/data/growthcraft_bamboo/recipes/bamboo_plank_fence.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "wooden_fence", + "pattern": [ + "212", + "212" + ], + "key": { + "1": { + "item": "minecraft:stick" + }, + "2": { + "item": "growthcraft_bamboo:bamboo_plank" + } + }, + "result": { + "item": "growthcraft_bamboo:bamboo_plank_fence", + "count": 3 + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_bamboo/recipes/bamboo_plank_fence_gate.json b/src/main/resources/data/growthcraft_bamboo/recipes/bamboo_plank_fence_gate.json new file mode 100644 index 0000000..b48a47f --- /dev/null +++ b/src/main/resources/data/growthcraft_bamboo/recipes/bamboo_plank_fence_gate.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "wooden_fence", + "pattern": [ + "121", + "121" + ], + "key": { + "1": { + "item": "minecraft:stick" + }, + "2": { + "item": "growthcraft_bamboo:bamboo_plank" + } + }, + "result": { + "item": "growthcraft_bamboo:bamboo_plank_fence_gate", + "count": 3 + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_bamboo/recipes/bamboo_plank_pressure_plate.json b/src/main/resources/data/growthcraft_bamboo/recipes/bamboo_plank_pressure_plate.json new file mode 100644 index 0000000..afddeed --- /dev/null +++ b/src/main/resources/data/growthcraft_bamboo/recipes/bamboo_plank_pressure_plate.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "wooden_pressure_plate", + "pattern": [ + "##" + ], + "key": { + "#": { + "item": "growthcraft_bamboo:bamboo_plank" + } + }, + "result": { + "item": "growthcraft_bamboo:bamboo_plank_pressure_plate" + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_bamboo/recipes/bamboo_plank_slab.json b/src/main/resources/data/growthcraft_bamboo/recipes/bamboo_plank_slab.json new file mode 100644 index 0000000..1420ac9 --- /dev/null +++ b/src/main/resources/data/growthcraft_bamboo/recipes/bamboo_plank_slab.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "wooden_slab", + "pattern": [ + "###" + ], + "key": { + "#": { + "item": "growthcraft_bamboo:bamboo_plank" + } + }, + "result": { + "item": "growthcraft_bamboo:bamboo_plank_slab", + "count": 6 + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_bamboo/recipes/bamboo_plank_stairs.json b/src/main/resources/data/growthcraft_bamboo/recipes/bamboo_plank_stairs.json new file mode 100644 index 0000000..ac48b8c --- /dev/null +++ b/src/main/resources/data/growthcraft_bamboo/recipes/bamboo_plank_stairs.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "wooden_stairs", + "pattern": [ + "# ", + "## ", + "###" + ], + "key": { + "#": { + "item": "growthcraft_bamboo:bamboo_plank" + } + }, + "result": { + "item": "growthcraft_bamboo:bamboo_plank_stairs", + "count": 4 + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_bamboo/recipes/bamboo_plank_trapdoor.json b/src/main/resources/data/growthcraft_bamboo/recipes/bamboo_plank_trapdoor.json new file mode 100644 index 0000000..0dd11dd --- /dev/null +++ b/src/main/resources/data/growthcraft_bamboo/recipes/bamboo_plank_trapdoor.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "wooden_pressure_plate", + "pattern": [ + "###", + "###" + ], + "key": { + "#": { + "item": "growthcraft_bamboo:bamboo_plank" + } + }, + "result": { + "item": "growthcraft_bamboo:bamboo_plank_trapdoor" + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_bamboo/recipes/bamboo_wood.json b/src/main/resources/data/growthcraft_bamboo/recipes/bamboo_wood.json new file mode 100644 index 0000000..7481e8f --- /dev/null +++ b/src/main/resources/data/growthcraft_bamboo/recipes/bamboo_wood.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "bark", + "pattern": [ + "##", + "##" + ], + "key": { + "#": { + "item": "growthcraft_bamboo:bamboo_wood_log" + } + }, + "result": { + "item": "growthcraft_bamboo:bamboo_wood", + "count": 3 + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_bamboo/recipes/bamboo_wood_log.json b/src/main/resources/data/growthcraft_bamboo/recipes/bamboo_wood_log.json new file mode 100644 index 0000000..40424cd --- /dev/null +++ b/src/main/resources/data/growthcraft_bamboo/recipes/bamboo_wood_log.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:bamboo" + }, + "result": "growthcraft_bamboo:bamboo_wood_log", + "count": 1 +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_bamboo/recipes/bee_box_bamboo.json b/src/main/resources/data/growthcraft_bamboo/recipes/bee_box_bamboo.json new file mode 100644 index 0000000..5539d7c --- /dev/null +++ b/src/main/resources/data/growthcraft_bamboo/recipes/bee_box_bamboo.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "SPS", + "PBP", + "SPS" + ], + "key": { + "B": { + "item": "growthcraft_bamboo:bamboo_plank_slab" + }, + "P": { + "item": "growthcraft_bamboo:bamboo_plank" + }, + "S": { + "tag": "forge:rods/wooden" + } + }, + "result": { + "item": "growthcraft_bamboo:bee_box_bamboo" + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_bamboo/tags/blocks/bamboo_wood.json b/src/main/resources/data/growthcraft_bamboo/tags/blocks/bamboo_wood.json new file mode 100644 index 0000000..fc6d27d --- /dev/null +++ b/src/main/resources/data/growthcraft_bamboo/tags/blocks/bamboo_wood.json @@ -0,0 +1,9 @@ +{ + "replace": false, + "values": [ + "growthcraft_bamboo:bamboo_wood_log", + "growthcraft_bamboo:bamboo_wood", + "growthcraft_bamboo:bamboo_wood_log_stripped", + "growthcraft_bamboo:bamboo_wood_stripped" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_bamboo/tags/blocks/bamboo_wood_logs.json b/src/main/resources/data/growthcraft_bamboo/tags/blocks/bamboo_wood_logs.json new file mode 100644 index 0000000..559e8ce --- /dev/null +++ b/src/main/resources/data/growthcraft_bamboo/tags/blocks/bamboo_wood_logs.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "growthcraft_bamboo:bamboo_wood_log", + "growthcraft_bamboo:bamboo_wood" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_bamboo/tags/items/bamboo_wood.json b/src/main/resources/data/growthcraft_bamboo/tags/items/bamboo_wood.json new file mode 100644 index 0000000..fc6d27d --- /dev/null +++ b/src/main/resources/data/growthcraft_bamboo/tags/items/bamboo_wood.json @@ -0,0 +1,9 @@ +{ + "replace": false, + "values": [ + "growthcraft_bamboo:bamboo_wood_log", + "growthcraft_bamboo:bamboo_wood", + "growthcraft_bamboo:bamboo_wood_log_stripped", + "growthcraft_bamboo:bamboo_wood_stripped" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_bamboo/tags/items/bamboo_wood_logs.json b/src/main/resources/data/growthcraft_bamboo/tags/items/bamboo_wood_logs.json new file mode 100644 index 0000000..559e8ce --- /dev/null +++ b/src/main/resources/data/growthcraft_bamboo/tags/items/bamboo_wood_logs.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "growthcraft_bamboo:bamboo_wood_log", + "growthcraft_bamboo:bamboo_wood" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_cellar/loot_modifiers/grape_seeds_purple_from_grass.json b/src/main/resources/data/growthcraft_cellar/loot_modifiers/grape_seeds_purple_from_grass.json new file mode 100644 index 0000000..c9ce813 --- /dev/null +++ b/src/main/resources/data/growthcraft_cellar/loot_modifiers/grape_seeds_purple_from_grass.json @@ -0,0 +1,14 @@ +{ + "type": "growthcraft:global_block_loot_modifier", + "conditions": [ + { + "condition": "minecraft:random_chance", + "chance": 0.01 + }, + { + "condition": "block_state_property", + "block": "minecraft:grass" + } + ], + "item": "growthcraft_cellar:grape_seeds_purple" +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_cellar/loot_modifiers/grape_seeds_red_from_grass.json b/src/main/resources/data/growthcraft_cellar/loot_modifiers/grape_seeds_red_from_grass.json new file mode 100644 index 0000000..cefbb61 --- /dev/null +++ b/src/main/resources/data/growthcraft_cellar/loot_modifiers/grape_seeds_red_from_grass.json @@ -0,0 +1,14 @@ +{ + "type": "growthcraft:global_block_loot_modifier", + "conditions": [ + { + "condition": "minecraft:random_chance", + "chance": 0.01 + }, + { + "condition": "block_state_property", + "block": "minecraft:grass" + } + ], + "item": "growthcraft_cellar:grape_seeds_red" +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_cellar/loot_modifiers/grape_seeds_white_from_grass.json b/src/main/resources/data/growthcraft_cellar/loot_modifiers/grape_seeds_white_from_grass.json new file mode 100644 index 0000000..fc1a8cb --- /dev/null +++ b/src/main/resources/data/growthcraft_cellar/loot_modifiers/grape_seeds_white_from_grass.json @@ -0,0 +1,14 @@ +{ + "type": "growthcraft:global_block_loot_modifier", + "conditions": [ + { + "condition": "minecraft:random_chance", + "chance": 0.01 + }, + { + "condition": "block_state_property", + "block": "minecraft:grass" + } + ], + "item": "growthcraft_cellar:grape_seeds_white" +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_cellar/loot_modifiers/hops_seeds_from_grass.json b/src/main/resources/data/growthcraft_cellar/loot_modifiers/hops_seeds_from_grass.json new file mode 100644 index 0000000..74f6726 --- /dev/null +++ b/src/main/resources/data/growthcraft_cellar/loot_modifiers/hops_seeds_from_grass.json @@ -0,0 +1,14 @@ +{ + "type": "growthcraft:global_block_loot_modifier", + "conditions": [ + { + "condition": "minecraft:random_chance", + "chance": 0.01 + }, + { + "condition": "block_state_property", + "block": "minecraft:grass" + } + ], + "item": "growthcraft_cellar:hops_seeds" +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_cellar/loot_modifiers/thistle_seeds_from_grass.json b/src/main/resources/data/growthcraft_cellar/loot_modifiers/thistle_seeds_from_grass.json new file mode 100644 index 0000000..61c22b5 --- /dev/null +++ b/src/main/resources/data/growthcraft_cellar/loot_modifiers/thistle_seeds_from_grass.json @@ -0,0 +1,14 @@ +{ + "type": "growthcraft:global_block_loot_modifier", + "conditions": [ + { + "condition": "minecraft:random_chance", + "chance": 0.01 + }, + { + "condition": "block_state_property", + "block": "minecraft:grass" + } + ], + "item": "growthcraft_cellar:thistle_seeds" +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_cellar/loot_modifiers/yeast_bayanus_from_grass.json b/src/main/resources/data/growthcraft_cellar/loot_modifiers/yeast_bayanus_from_grass.json new file mode 100644 index 0000000..d53da21 --- /dev/null +++ b/src/main/resources/data/growthcraft_cellar/loot_modifiers/yeast_bayanus_from_grass.json @@ -0,0 +1,14 @@ +{ + "type": "growthcraft:global_block_loot_modifier", + "conditions": [ + { + "condition": "minecraft:random_chance", + "chance": 0.01 + }, + { + "condition": "block_state_property", + "block": "minecraft:grass" + } + ], + "item": "growthcraft_cellar:yeast_bayanus" +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_cellar/loot_modifiers/yeast_brewers_from_grass.json b/src/main/resources/data/growthcraft_cellar/loot_modifiers/yeast_brewers_from_grass.json new file mode 100644 index 0000000..64933cd --- /dev/null +++ b/src/main/resources/data/growthcraft_cellar/loot_modifiers/yeast_brewers_from_grass.json @@ -0,0 +1,14 @@ +{ + "type": "growthcraft:global_block_loot_modifier", + "conditions": [ + { + "condition": "minecraft:random_chance", + "chance": 0.01 + }, + { + "condition": "block_state_property", + "block": "minecraft:grass" + } + ], + "item": "growthcraft_cellar:yeast_brewers" +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_cellar/loot_modifiers/yeast_ethereal_from_chorus_flower.json b/src/main/resources/data/growthcraft_cellar/loot_modifiers/yeast_ethereal_from_chorus_flower.json new file mode 100644 index 0000000..8e4a877 --- /dev/null +++ b/src/main/resources/data/growthcraft_cellar/loot_modifiers/yeast_ethereal_from_chorus_flower.json @@ -0,0 +1,14 @@ +{ + "type": "growthcraft:global_block_loot_modifier", + "conditions": [ + { + "condition": "minecraft:random_chance", + "chance": 0.05 + }, + { + "condition": "block_state_property", + "block": "minecraft:chorus_flower" + } + ], + "item": "growthcraft_cellar:yeast_ethereal" +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_cellar/loot_modifiers/yeast_lager_from_snow.json b/src/main/resources/data/growthcraft_cellar/loot_modifiers/yeast_lager_from_snow.json new file mode 100644 index 0000000..91a51b8 --- /dev/null +++ b/src/main/resources/data/growthcraft_cellar/loot_modifiers/yeast_lager_from_snow.json @@ -0,0 +1,14 @@ +{ + "type": "growthcraft:global_block_loot_modifier", + "conditions": [ + { + "condition": "minecraft:random_chance", + "chance": 0.02 + }, + { + "condition": "block_state_property", + "block": "minecraft:snow" + } + ], + "item": "growthcraft_cellar:yeast_lager" +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_cellar/loot_tables/blocks/brew_kettle.json b/src/main/resources/data/growthcraft_cellar/loot_tables/blocks/brew_kettle.json new file mode 100644 index 0000000..907a0d9 --- /dev/null +++ b/src/main/resources/data/growthcraft_cellar/loot_tables/blocks/brew_kettle.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "growthcraft_cellar:brew_kettle" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_cellar/loot_tables/blocks/culture_jar.json b/src/main/resources/data/growthcraft_cellar/loot_tables/blocks/culture_jar.json new file mode 100644 index 0000000..f84ae41 --- /dev/null +++ b/src/main/resources/data/growthcraft_cellar/loot_tables/blocks/culture_jar.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "growthcraft_cellar:culture_jar" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_cellar/loot_tables/blocks/fermentation_barrel_oak.json b/src/main/resources/data/growthcraft_cellar/loot_tables/blocks/fermentation_barrel_oak.json new file mode 100644 index 0000000..c3b041d --- /dev/null +++ b/src/main/resources/data/growthcraft_cellar/loot_tables/blocks/fermentation_barrel_oak.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "growthcraft_cellar:fermentation_barrel_oak" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_cellar/loot_tables/blocks/fruit_press.json b/src/main/resources/data/growthcraft_cellar/loot_tables/blocks/fruit_press.json new file mode 100644 index 0000000..0374989 --- /dev/null +++ b/src/main/resources/data/growthcraft_cellar/loot_tables/blocks/fruit_press.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "growthcraft_cellar:fruit_press" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_cellar/loot_tables/blocks/fruit_press_piston.json b/src/main/resources/data/growthcraft_cellar/loot_tables/blocks/fruit_press_piston.json new file mode 100644 index 0000000..0374989 --- /dev/null +++ b/src/main/resources/data/growthcraft_cellar/loot_tables/blocks/fruit_press_piston.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "growthcraft_cellar:fruit_press" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_cellar/loot_tables/blocks/purple_grape_vine_crop.json b/src/main/resources/data/growthcraft_cellar/loot_tables/blocks/purple_grape_vine_crop.json new file mode 100644 index 0000000..9e091a6 --- /dev/null +++ b/src/main/resources/data/growthcraft_cellar/loot_tables/blocks/purple_grape_vine_crop.json @@ -0,0 +1,68 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1.0, + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "growthcraft_cellar:purple_grape_vine_crop", + "properties": { + "age": "7" + } + } + ], + "name": "growthcraft_cellar:grape_purple" + }, + { + "type": "minecraft:item", + "name": "growthcraft_cellar:grape_purple" + } + ] + } + ] + }, + { + "rolls": 1.0, + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:apply_bonus", + "enchantment": "minecraft:fortune", + "formula": "minecraft:binomial_with_bonus_count", + "parameters": { + "extra": 3, + "probability": 0.5714286 + } + } + ], + "name": "growthcraft_cellar:grape_purple" + } + ], + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "growthcraft_cellar:purple_grape_vine_crop", + "properties": { + "age": "7" + } + } + ] + } + ], + "functions": [ + { + "function": "minecraft:explosion_decay" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_cellar/loot_tables/blocks/red_grape_vine_crop.json b/src/main/resources/data/growthcraft_cellar/loot_tables/blocks/red_grape_vine_crop.json new file mode 100644 index 0000000..c1b9df0 --- /dev/null +++ b/src/main/resources/data/growthcraft_cellar/loot_tables/blocks/red_grape_vine_crop.json @@ -0,0 +1,68 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1.0, + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "growthcraft_cellar:red_grape_vine_crop", + "properties": { + "age": "7" + } + } + ], + "name": "growthcraft_cellar:grape_red" + }, + { + "type": "minecraft:item", + "name": "growthcraft_cellar:grape_red" + } + ] + } + ] + }, + { + "rolls": 1.0, + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:apply_bonus", + "enchantment": "minecraft:fortune", + "formula": "minecraft:binomial_with_bonus_count", + "parameters": { + "extra": 3, + "probability": 0.5714286 + } + } + ], + "name": "growthcraft_cellar:grape_red" + } + ], + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "growthcraft_cellar:red_grape_vine_crop", + "properties": { + "age": "7" + } + } + ] + } + ], + "functions": [ + { + "function": "minecraft:explosion_decay" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_cellar/loot_tables/blocks/roaster.json b/src/main/resources/data/growthcraft_cellar/loot_tables/blocks/roaster.json new file mode 100644 index 0000000..6b930f4 --- /dev/null +++ b/src/main/resources/data/growthcraft_cellar/loot_tables/blocks/roaster.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "growthcraft_cellar:roaster" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_cellar/loot_tables/blocks/white_grape_vine_crop.json b/src/main/resources/data/growthcraft_cellar/loot_tables/blocks/white_grape_vine_crop.json new file mode 100644 index 0000000..8a5261d --- /dev/null +++ b/src/main/resources/data/growthcraft_cellar/loot_tables/blocks/white_grape_vine_crop.json @@ -0,0 +1,68 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1.0, + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "growthcraft_cellar:white_grape_vine_crop", + "properties": { + "age": "7" + } + } + ], + "name": "growthcraft_cellar:grape_white" + }, + { + "type": "minecraft:item", + "name": "growthcraft_cellar:grape_white" + } + ] + } + ] + }, + { + "rolls": 1.0, + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:apply_bonus", + "enchantment": "minecraft:fortune", + "formula": "minecraft:binomial_with_bonus_count", + "parameters": { + "extra": 3, + "probability": 0.5714286 + } + } + ], + "name": "growthcraft_cellar:grape_white" + } + ], + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "growthcraft_cellar:white_grape_vine_crop", + "properties": { + "age": "7" + } + } + ] + } + ], + "functions": [ + { + "function": "minecraft:explosion_decay" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_cellar/recipes/brew_kettle.json b/src/main/resources/data/growthcraft_cellar/recipes/brew_kettle.json new file mode 100644 index 0000000..916e056 --- /dev/null +++ b/src/main/resources/data/growthcraft_cellar/recipes/brew_kettle.json @@ -0,0 +1,11 @@ +{ + "type": "minecraft:crafting_shapeless", + "ingredients": [ + { + "item": "minecraft:cauldron" + } + ], + "result": { + "item": "growthcraft_cellar:brew_kettle" + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_cellar/recipes/brew_kettle_amber_wort.json b/src/main/resources/data/growthcraft_cellar/recipes/brew_kettle_amber_wort.json new file mode 100644 index 0000000..30a77e8 --- /dev/null +++ b/src/main/resources/data/growthcraft_cellar/recipes/brew_kettle_amber_wort.json @@ -0,0 +1,23 @@ +{ + "type": "growthcraft_cellar:brew_kettle_recipe", + "requires_heat": true, + "requires_lid": "false", + "processing_time": 600, + "by_product_chance": 10, + "input_fluid": { + "fluid": "minecraft:water", + "amount": 250 + }, + "input_item": { + "item": "growthcraft_cellar:grain_amber", + "count": 1 + }, + "output_fluid": { + "fluid": "growthcraft_cellar:amber_wort_fluid", + "amount": 250 + }, + "by_product": { + "item": "minecraft:bone_meal", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_cellar/recipes/brew_kettle_brown_wort.json b/src/main/resources/data/growthcraft_cellar/recipes/brew_kettle_brown_wort.json new file mode 100644 index 0000000..9ca01ad --- /dev/null +++ b/src/main/resources/data/growthcraft_cellar/recipes/brew_kettle_brown_wort.json @@ -0,0 +1,23 @@ +{ + "type": "growthcraft_cellar:brew_kettle_recipe", + "requires_heat": true, + "requires_lid": "false", + "processing_time": 600, + "by_product_chance": 10, + "input_fluid": { + "fluid": "minecraft:water", + "amount": 250 + }, + "input_item": { + "item": "growthcraft_cellar:grain_brown", + "count": 1 + }, + "output_fluid": { + "fluid": "growthcraft_cellar:brown_wort_fluid", + "amount": 250 + }, + "by_product": { + "item": "minecraft:bone_meal", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_cellar/recipes/brew_kettle_copper_wort.json b/src/main/resources/data/growthcraft_cellar/recipes/brew_kettle_copper_wort.json new file mode 100644 index 0000000..962088e --- /dev/null +++ b/src/main/resources/data/growthcraft_cellar/recipes/brew_kettle_copper_wort.json @@ -0,0 +1,23 @@ +{ + "type": "growthcraft_cellar:brew_kettle_recipe", + "requires_heat": true, + "requires_lid": "false", + "processing_time": 600, + "by_product_chance": 10, + "input_fluid": { + "fluid": "minecraft:water", + "amount": 250 + }, + "input_item": { + "item": "growthcraft_cellar:grain_copper", + "count": 1 + }, + "output_fluid": { + "fluid": "growthcraft_cellar:copper_wort_fluid", + "amount": 250 + }, + "by_product": { + "item": "minecraft:bone_meal", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_cellar/recipes/brew_kettle_dark_wort.json b/src/main/resources/data/growthcraft_cellar/recipes/brew_kettle_dark_wort.json new file mode 100644 index 0000000..be06b87 --- /dev/null +++ b/src/main/resources/data/growthcraft_cellar/recipes/brew_kettle_dark_wort.json @@ -0,0 +1,23 @@ +{ + "type": "growthcraft_cellar:brew_kettle_recipe", + "requires_heat": true, + "requires_lid": "false", + "processing_time": 600, + "by_product_chance": 10, + "input_fluid": { + "fluid": "minecraft:water", + "amount": 250 + }, + "input_item": { + "item": "growthcraft_cellar:grain_dark", + "count": 1 + }, + "output_fluid": { + "fluid": "growthcraft_cellar:dark_wort_fluid", + "amount": 250 + }, + "by_product": { + "item": "minecraft:bone_meal", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_cellar/recipes/brew_kettle_deep_amber_wort.json b/src/main/resources/data/growthcraft_cellar/recipes/brew_kettle_deep_amber_wort.json new file mode 100644 index 0000000..e93f14d --- /dev/null +++ b/src/main/resources/data/growthcraft_cellar/recipes/brew_kettle_deep_amber_wort.json @@ -0,0 +1,23 @@ +{ + "type": "growthcraft_cellar:brew_kettle_recipe", + "requires_heat": true, + "requires_lid": "false", + "processing_time": 600, + "by_product_chance": 10, + "input_fluid": { + "fluid": "minecraft:water", + "amount": 250 + }, + "input_item": { + "item": "growthcraft_cellar:grain_deep_amber", + "count": 1 + }, + "output_fluid": { + "fluid": "growthcraft_cellar:deep_amber_wort_fluid", + "amount": 250 + }, + "by_product": { + "item": "minecraft:bone_meal", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_cellar/recipes/brew_kettle_deep_copper_wort.json b/src/main/resources/data/growthcraft_cellar/recipes/brew_kettle_deep_copper_wort.json new file mode 100644 index 0000000..5f4d77b --- /dev/null +++ b/src/main/resources/data/growthcraft_cellar/recipes/brew_kettle_deep_copper_wort.json @@ -0,0 +1,23 @@ +{ + "type": "growthcraft_cellar:brew_kettle_recipe", + "requires_heat": true, + "requires_lid": "false", + "processing_time": 600, + "by_product_chance": 10, + "input_fluid": { + "fluid": "minecraft:water", + "amount": 250 + }, + "input_item": { + "item": "growthcraft_cellar:grain_deep_copper", + "count": 1 + }, + "output_fluid": { + "fluid": "growthcraft_cellar:deep_copper_wort_fluid", + "amount": 250 + }, + "by_product": { + "item": "minecraft:bone_meal", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_cellar/recipes/brew_kettle_golden_wort.json b/src/main/resources/data/growthcraft_cellar/recipes/brew_kettle_golden_wort.json new file mode 100644 index 0000000..db11492 --- /dev/null +++ b/src/main/resources/data/growthcraft_cellar/recipes/brew_kettle_golden_wort.json @@ -0,0 +1,23 @@ +{ + "type": "growthcraft_cellar:brew_kettle_recipe", + "requires_heat": true, + "requires_lid": "false", + "processing_time": 600, + "by_product_chance": 10, + "input_fluid": { + "fluid": "minecraft:water", + "amount": 250 + }, + "input_item": { + "item": "growthcraft_cellar:grain_golden", + "count": 1 + }, + "output_fluid": { + "fluid": "growthcraft_cellar:golden_wort_fluid", + "amount": 250 + }, + "by_product": { + "item": "minecraft:bone_meal", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_cellar/recipes/brew_kettle_hopped_golden_wort.json b/src/main/resources/data/growthcraft_cellar/recipes/brew_kettle_hopped_golden_wort.json new file mode 100644 index 0000000..51b5284 --- /dev/null +++ b/src/main/resources/data/growthcraft_cellar/recipes/brew_kettle_hopped_golden_wort.json @@ -0,0 +1,23 @@ +{ + "type": "growthcraft_cellar:brew_kettle_recipe", + "requires_heat": true, + "requires_lid": "false", + "processing_time": 600, + "by_product_chance": 10, + "input_fluid": { + "fluid": "growthcraft_cellar:golden_wort_fluid", + "amount": 250 + }, + "input_item": { + "item": "growthcraft_cellar:hops", + "count": 1 + }, + "output_fluid": { + "fluid": "growthcraft_cellar:hopped_golden_wort_fluid", + "amount": 250 + }, + "by_product": { + "item": "minecraft:bone_meal", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_cellar/recipes/brew_kettle_lid.json b/src/main/resources/data/growthcraft_cellar/recipes/brew_kettle_lid.json new file mode 100644 index 0000000..ddda860 --- /dev/null +++ b/src/main/resources/data/growthcraft_cellar/recipes/brew_kettle_lid.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + " i ", + "III" + ], + "key": { + "I": { + "tag": "forge:ingots/iron" + }, + "i": { + "tag": "forge:nuggets/iron" + } + }, + "result": { + "item": "growthcraft_cellar:brew_kettle_lid" + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_cellar/recipes/brew_kettle_pale_golden_wort.json b/src/main/resources/data/growthcraft_cellar/recipes/brew_kettle_pale_golden_wort.json new file mode 100644 index 0000000..bfda517 --- /dev/null +++ b/src/main/resources/data/growthcraft_cellar/recipes/brew_kettle_pale_golden_wort.json @@ -0,0 +1,23 @@ +{ + "type": "growthcraft_cellar:brew_kettle_recipe", + "requires_heat": true, + "requires_lid": "false", + "processing_time": 600, + "by_product_chance": 10, + "input_fluid": { + "fluid": "minecraft:water", + "amount": 250 + }, + "input_item": { + "item": "growthcraft_cellar:grain_pale_golden", + "count": 1 + }, + "output_fluid": { + "fluid": "growthcraft_cellar:pale_golden_wort_fluid", + "amount": 250 + }, + "by_product": { + "item": "minecraft:bone_meal", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_cellar/recipes/brew_kettle_wort.json b/src/main/resources/data/growthcraft_cellar/recipes/brew_kettle_wort.json new file mode 100644 index 0000000..58c2547 --- /dev/null +++ b/src/main/resources/data/growthcraft_cellar/recipes/brew_kettle_wort.json @@ -0,0 +1,23 @@ +{ + "type": "growthcraft_cellar:brew_kettle_recipe", + "requires_heat": true, + "requires_lid": "false", + "processing_time": 600, + "by_product_chance": 10, + "input_fluid": { + "fluid": "minecraft:water", + "amount": 250 + }, + "input_item": { + "item": "minecraft:wheat", + "count": 1 + }, + "output_fluid": { + "fluid": "growthcraft_cellar:wort_fluid", + "amount": 250 + }, + "by_product": { + "item": "minecraft:bone_meal", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_cellar/recipes/brown_ale_fermentation.json b/src/main/resources/data/growthcraft_cellar/recipes/brown_ale_fermentation.json new file mode 100644 index 0000000..51a086e --- /dev/null +++ b/src/main/resources/data/growthcraft_cellar/recipes/brown_ale_fermentation.json @@ -0,0 +1,27 @@ +{ + "type": "growthcraft_cellar:fermentation_barrel_recipe", + "processing_time": 7200, + "ingredient_item": { + "item": "growthcraft_cellar:yeast_brewers", + "count": 1 + }, + "ingredient_fluid": { + "fluid": "growthcraft_cellar:brown_wort_fluid", + "amount": 1000 + }, + "result": { + "fluid": "growthcraft_cellar:brown_ale_fluid", + "amount": 1000 + }, + "effects": [ + { + "effect": "minecraft:haste", + "duration": 7200, + "amplifier": 3 + } + ], + "bottle": { + "item": "growthcraft_cellar:potion_ale" + }, + "color": "0x594732" +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_cellar/recipes/brown_lager_fermentation.json b/src/main/resources/data/growthcraft_cellar/recipes/brown_lager_fermentation.json new file mode 100644 index 0000000..fdfd931 --- /dev/null +++ b/src/main/resources/data/growthcraft_cellar/recipes/brown_lager_fermentation.json @@ -0,0 +1,27 @@ +{ + "type": "growthcraft_cellar:fermentation_barrel_recipe", + "processing_time": 6000, + "ingredient_item": { + "item": "growthcraft_cellar:yeast_lager", + "count": 1 + }, + "ingredient_fluid": { + "fluid": "growthcraft_cellar:brown_wort_fluid", + "amount": 1000 + }, + "result": { + "fluid": "growthcraft_cellar:brown_lager_fluid", + "amount": 1000 + }, + "effects": [ + { + "effect": "minecraft:speed", + "duration": 6000, + "amplifier": 3 + } + ], + "bottle": { + "item": "growthcraft_cellar:potion_lager" + }, + "color": "0x401F1C" +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_cellar/recipes/copper_ale_fermentation.json b/src/main/resources/data/growthcraft_cellar/recipes/copper_ale_fermentation.json new file mode 100644 index 0000000..6a39ad8 --- /dev/null +++ b/src/main/resources/data/growthcraft_cellar/recipes/copper_ale_fermentation.json @@ -0,0 +1,27 @@ +{ + "type": "growthcraft_cellar:fermentation_barrel_recipe", + "processing_time": 3600, + "ingredient_item": { + "item": "growthcraft_cellar:yeast_brewers", + "count": 1 + }, + "ingredient_fluid": { + "fluid": "growthcraft_cellar:copper_wort_fluid", + "amount": 1000 + }, + "result": { + "fluid": "growthcraft_cellar:copper_ale_fluid", + "amount": 1000 + }, + "effects": [ + { + "effect": "minecraft:regeneration", + "duration": 3600, + "amplifier": 2 + } + ], + "bottle": { + "item": "growthcraft_cellar:potion_ale" + }, + "color": "0x936B53" +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_cellar/recipes/copper_lager_fermentation.json b/src/main/resources/data/growthcraft_cellar/recipes/copper_lager_fermentation.json new file mode 100644 index 0000000..617dc72 --- /dev/null +++ b/src/main/resources/data/growthcraft_cellar/recipes/copper_lager_fermentation.json @@ -0,0 +1,27 @@ +{ + "type": "growthcraft_cellar:fermentation_barrel_recipe", + "processing_time": 3600, + "ingredient_item": { + "item": "growthcraft_cellar:yeast_lager", + "count": 1 + }, + "ingredient_fluid": { + "fluid": "growthcraft_cellar:copper_wort_fluid", + "amount": 1000 + }, + "result": { + "fluid": "growthcraft_cellar:copper_lager_fluid", + "amount": 1000 + }, + "effects": [ + { + "effect": "minecraft:resistance", + "duration": 3600, + "amplifier": 2 + } + ], + "bottle": { + "item": "growthcraft_cellar:potion_lager" + }, + "color": "0x936B53" +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_cellar/recipes/culture_jar.json b/src/main/resources/data/growthcraft_cellar/recipes/culture_jar.json new file mode 100644 index 0000000..17ec841 --- /dev/null +++ b/src/main/resources/data/growthcraft_cellar/recipes/culture_jar.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "BAB", + "B B", + "BBB" + ], + "key": { + "A": { + "tag": "minecraft:planks" + }, + "B": { + "tag": "forge:glass_panes" + } + }, + "result": { + "item": "growthcraft_cellar:culture_jar" + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_cellar/recipes/culture_jar_yeast_bayanus_from_purple_grape_juice.json b/src/main/resources/data/growthcraft_cellar/recipes/culture_jar_yeast_bayanus_from_purple_grape_juice.json new file mode 100644 index 0000000..6b80e90 --- /dev/null +++ b/src/main/resources/data/growthcraft_cellar/recipes/culture_jar_yeast_bayanus_from_purple_grape_juice.json @@ -0,0 +1,13 @@ +{ + "type": "growthcraft_cellar:culture_jar_recipe", + "processing_time": 1200, + "requires_heat_source": true, + "input_fluid": { + "fluid": "growthcraft_cellar:purple_grape_juice_fluid", + "amount": 250 + }, + "input_item": { + "item": "growthcraft_cellar:yeast_bayanus", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_cellar/recipes/culture_jar_yeast_bayanus_from_red_grape_juice.json b/src/main/resources/data/growthcraft_cellar/recipes/culture_jar_yeast_bayanus_from_red_grape_juice.json new file mode 100644 index 0000000..b50c5b2 --- /dev/null +++ b/src/main/resources/data/growthcraft_cellar/recipes/culture_jar_yeast_bayanus_from_red_grape_juice.json @@ -0,0 +1,13 @@ +{ + "type": "growthcraft_cellar:culture_jar_recipe", + "processing_time": 1200, + "requires_heat_source": true, + "input_fluid": { + "fluid": "growthcraft_cellar:red_grape_juice_fluid", + "amount": 250 + }, + "input_item": { + "item": "growthcraft_cellar:yeast_bayanus", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_cellar/recipes/culture_jar_yeast_bayanus_from_white_grape_juice.json b/src/main/resources/data/growthcraft_cellar/recipes/culture_jar_yeast_bayanus_from_white_grape_juice.json new file mode 100644 index 0000000..0fc6676 --- /dev/null +++ b/src/main/resources/data/growthcraft_cellar/recipes/culture_jar_yeast_bayanus_from_white_grape_juice.json @@ -0,0 +1,13 @@ +{ + "type": "growthcraft_cellar:culture_jar_recipe", + "processing_time": 1200, + "requires_heat_source": true, + "input_fluid": { + "fluid": "growthcraft_cellar:white_grape_juice_fluid", + "amount": 250 + }, + "input_item": { + "item": "growthcraft_cellar:yeast_bayanus", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_cellar/recipes/culture_jar_yeast_brewers_from_wort.json b/src/main/resources/data/growthcraft_cellar/recipes/culture_jar_yeast_brewers_from_wort.json new file mode 100644 index 0000000..8958f0d --- /dev/null +++ b/src/main/resources/data/growthcraft_cellar/recipes/culture_jar_yeast_brewers_from_wort.json @@ -0,0 +1,13 @@ +{ + "type": "growthcraft_cellar:culture_jar_recipe", + "processing_time": 1200, + "requires_heat_source": true, + "input_fluid": { + "fluid": "growthcraft_cellar:wort_fluid", + "amount": 250 + }, + "input_item": { + "item": "growthcraft_cellar:yeast_brewers", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_cellar/recipes/culture_jar_yeast_ethereal_from_wort.json b/src/main/resources/data/growthcraft_cellar/recipes/culture_jar_yeast_ethereal_from_wort.json new file mode 100644 index 0000000..456bfd0 --- /dev/null +++ b/src/main/resources/data/growthcraft_cellar/recipes/culture_jar_yeast_ethereal_from_wort.json @@ -0,0 +1,13 @@ +{ + "type": "growthcraft_cellar:culture_jar_recipe", + "processing_time": 1200, + "requires_heat_source": true, + "input_fluid": { + "fluid": "growthcraft_cellar:wort_fluid", + "amount": 250 + }, + "input_item": { + "item": "growthcraft_cellar:yeast_ethereal", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_cellar/recipes/culture_jar_yeast_lager_from_wort.json b/src/main/resources/data/growthcraft_cellar/recipes/culture_jar_yeast_lager_from_wort.json new file mode 100644 index 0000000..d72d6c4 --- /dev/null +++ b/src/main/resources/data/growthcraft_cellar/recipes/culture_jar_yeast_lager_from_wort.json @@ -0,0 +1,13 @@ +{ + "type": "growthcraft_cellar:culture_jar_recipe", + "processing_time": 1200, + "requires_heat_source": true, + "input_fluid": { + "fluid": "growthcraft_cellar:wort_fluid", + "amount": 250 + }, + "input_item": { + "item": "growthcraft_cellar:yeast_lager", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_cellar/recipes/fermentation_barrel_amber_ale.json b/src/main/resources/data/growthcraft_cellar/recipes/fermentation_barrel_amber_ale.json new file mode 100644 index 0000000..41b274b --- /dev/null +++ b/src/main/resources/data/growthcraft_cellar/recipes/fermentation_barrel_amber_ale.json @@ -0,0 +1,27 @@ +{ + "type": "growthcraft_cellar:fermentation_barrel_recipe", + "processing_time": 3600, + "ingredient_item": { + "item": "growthcraft_cellar:yeast_brewers", + "count": 1 + }, + "ingredient_fluid": { + "fluid": "growthcraft_cellar:amber_wort_fluid", + "amount": 1000 + }, + "result": { + "fluid": "growthcraft_cellar:amber_ale_fluid", + "amount": 1000 + }, + "effects": [ + { + "effect": "minecraft:haste", + "duration": 3600, + "amplifier": 2 + } + ], + "bottle": { + "item": "growthcraft_cellar:potion_ale" + }, + "color": "0xE5C7A2" +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_cellar/recipes/fermentation_barrel_amber_lager.json b/src/main/resources/data/growthcraft_cellar/recipes/fermentation_barrel_amber_lager.json new file mode 100644 index 0000000..84284ea --- /dev/null +++ b/src/main/resources/data/growthcraft_cellar/recipes/fermentation_barrel_amber_lager.json @@ -0,0 +1,27 @@ +{ + "type": "growthcraft_cellar:fermentation_barrel_recipe", + "processing_time": 3600, + "ingredient_item": { + "item": "growthcraft_cellar:yeast_lager", + "count": 1 + }, + "ingredient_fluid": { + "fluid": "growthcraft_cellar:amber_wort_fluid", + "amount": 1000 + }, + "result": { + "fluid": "growthcraft_cellar:amber_lager_fluid", + "amount": 1000 + }, + "effects": [ + { + "effect": "minecraft:speed", + "duration": 3600, + "amplifier": 2 + } + ], + "bottle": { + "item": "growthcraft_cellar:potion_lager" + }, + "color": "0xE5C7A2" +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_cellar/recipes/fermentation_barrel_black_lager.json b/src/main/resources/data/growthcraft_cellar/recipes/fermentation_barrel_black_lager.json new file mode 100644 index 0000000..2436099 --- /dev/null +++ b/src/main/resources/data/growthcraft_cellar/recipes/fermentation_barrel_black_lager.json @@ -0,0 +1,27 @@ +{ + "type": "growthcraft_cellar:fermentation_barrel_recipe", + "processing_time": 6000, + "ingredient_item": { + "item": "growthcraft_cellar:yeast_lager", + "count": 1 + }, + "ingredient_fluid": { + "fluid": "growthcraft_cellar:dark_wort_fluid", + "amount": 1000 + }, + "result": { + "fluid": "growthcraft_cellar:dark_lager_fluid", + "amount": 1000 + }, + "effects": [ + { + "effect": "minecraft:resistance", + "duration": 6000, + "amplifier": 1 + } + ], + "bottle": { + "item": "growthcraft_cellar:potion_lager" + }, + "color": "0x211515" +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_cellar/recipes/fermentation_barrel_oak.json b/src/main/resources/data/growthcraft_cellar/recipes/fermentation_barrel_oak.json new file mode 100644 index 0000000..b370340 --- /dev/null +++ b/src/main/resources/data/growthcraft_cellar/recipes/fermentation_barrel_oak.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "AAA", + "BBB", + "AAA" + ], + "key": { + "B": { + "tag": "minecraft:planks" + }, + "A": { + "tag": "forge:ingots/iron" + } + }, + "result": { + "item": "growthcraft_cellar:fermentation_barrel_oak" + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_cellar/recipes/fruit_press.json b/src/main/resources/data/growthcraft_cellar/recipes/fruit_press.json new file mode 100644 index 0000000..87580c0 --- /dev/null +++ b/src/main/resources/data/growthcraft_cellar/recipes/fruit_press.json @@ -0,0 +1,25 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "ABA", + "CCC", + "DDD" + ], + "key": { + "A": { + "tag": "minecraft:fences" + }, + "B": { + "item": "minecraft:piston" + }, + "C": { + "tag": "forge:ingots/iron" + }, + "D": { + "tag": "minecraft:planks" + } + }, + "result": { + "item": "growthcraft_cellar:fruit_press" + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_cellar/recipes/fruit_press_purple_grape_juice.json b/src/main/resources/data/growthcraft_cellar/recipes/fruit_press_purple_grape_juice.json new file mode 100644 index 0000000..4923e91 --- /dev/null +++ b/src/main/resources/data/growthcraft_cellar/recipes/fruit_press_purple_grape_juice.json @@ -0,0 +1,16 @@ +{ + "type": "growthcraft_cellar:fruit_press_recipe", + "processing_time": 600, + "input_item": { + "item": "growthcraft_cellar:grape_purple", + "count": 1 + }, + "output_fluid": { + "fluid": "growthcraft_cellar:purple_grape_juice_fluid", + "amount": 250 + }, + "by_product": { + "item": "minecraft:bone_meal", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_cellar/recipes/fruit_press_red_grape_juice.json b/src/main/resources/data/growthcraft_cellar/recipes/fruit_press_red_grape_juice.json new file mode 100644 index 0000000..194707e --- /dev/null +++ b/src/main/resources/data/growthcraft_cellar/recipes/fruit_press_red_grape_juice.json @@ -0,0 +1,16 @@ +{ + "type": "growthcraft_cellar:fruit_press_recipe", + "processing_time": 600, + "input_item": { + "item": "growthcraft_cellar:grape_red", + "count": 1 + }, + "output_fluid": { + "fluid": "growthcraft_cellar:red_grape_juice_fluid", + "amount": 250 + }, + "by_product": { + "item": "minecraft:bone_meal", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_cellar/recipes/fruit_press_white_grape_juice.json b/src/main/resources/data/growthcraft_cellar/recipes/fruit_press_white_grape_juice.json new file mode 100644 index 0000000..12576ee --- /dev/null +++ b/src/main/resources/data/growthcraft_cellar/recipes/fruit_press_white_grape_juice.json @@ -0,0 +1,16 @@ +{ + "type": "growthcraft_cellar:fruit_press_recipe", + "processing_time": 600, + "input_item": { + "item": "growthcraft_cellar:grape_white", + "count": 1 + }, + "output_fluid": { + "fluid": "growthcraft_cellar:white_grape_juice_fluid", + "amount": 250 + }, + "by_product": { + "item": "minecraft:bone_meal", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_cellar/recipes/grain.json b/src/main/resources/data/growthcraft_cellar/recipes/grain.json new file mode 100644 index 0000000..9685477 --- /dev/null +++ b/src/main/resources/data/growthcraft_cellar/recipes/grain.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:wheat" + }, + "result": "growthcraft_cellar:grain", + "count": 1 +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_cellar/recipes/grain_amber.json b/src/main/resources/data/growthcraft_cellar/recipes/grain_amber.json new file mode 100644 index 0000000..f20c211 --- /dev/null +++ b/src/main/resources/data/growthcraft_cellar/recipes/grain_amber.json @@ -0,0 +1,12 @@ +{ + "type": "growthcraft_cellar:roaster_recipe", + "roasting_level": 3, + "input_item": { + "item": "growthcraft_cellar:grain", + "count": 1 + }, + "result": { + "item": "growthcraft_cellar:grain_amber", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_cellar/recipes/grain_brown.json b/src/main/resources/data/growthcraft_cellar/recipes/grain_brown.json new file mode 100644 index 0000000..57e63dd --- /dev/null +++ b/src/main/resources/data/growthcraft_cellar/recipes/grain_brown.json @@ -0,0 +1,12 @@ +{ + "type": "growthcraft_cellar:roaster_recipe", + "roasting_level": 7, + "input_item": { + "item": "growthcraft_cellar:grain", + "count": 1 + }, + "result": { + "item": "growthcraft_cellar:grain_brown", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_cellar/recipes/grain_copper.json b/src/main/resources/data/growthcraft_cellar/recipes/grain_copper.json new file mode 100644 index 0000000..2c9feb2 --- /dev/null +++ b/src/main/resources/data/growthcraft_cellar/recipes/grain_copper.json @@ -0,0 +1,12 @@ +{ + "type": "growthcraft_cellar:roaster_recipe", + "roasting_level": 5, + "input_item": { + "item": "growthcraft_cellar:grain", + "count": 1 + }, + "result": { + "item": "growthcraft_cellar:grain_copper", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_cellar/recipes/grain_dark.json b/src/main/resources/data/growthcraft_cellar/recipes/grain_dark.json new file mode 100644 index 0000000..2bd6ac0 --- /dev/null +++ b/src/main/resources/data/growthcraft_cellar/recipes/grain_dark.json @@ -0,0 +1,12 @@ +{ + "type": "growthcraft_cellar:roaster_recipe", + "roasting_level": 8, + "input_item": { + "item": "growthcraft_cellar:grain", + "count": 1 + }, + "result": { + "item": "growthcraft_cellar:grain_dark", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_cellar/recipes/grain_deep_amber.json b/src/main/resources/data/growthcraft_cellar/recipes/grain_deep_amber.json new file mode 100644 index 0000000..70d5287 --- /dev/null +++ b/src/main/resources/data/growthcraft_cellar/recipes/grain_deep_amber.json @@ -0,0 +1,12 @@ +{ + "type": "growthcraft_cellar:roaster_recipe", + "roasting_level": 4, + "input_item": { + "item": "growthcraft_cellar:grain", + "count": 1 + }, + "result": { + "item": "growthcraft_cellar:grain_deep_amber", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_cellar/recipes/grain_deep_copper.json b/src/main/resources/data/growthcraft_cellar/recipes/grain_deep_copper.json new file mode 100644 index 0000000..b7a3924 --- /dev/null +++ b/src/main/resources/data/growthcraft_cellar/recipes/grain_deep_copper.json @@ -0,0 +1,12 @@ +{ + "type": "growthcraft_cellar:roaster_recipe", + "roasting_level": 6, + "input_item": { + "item": "growthcraft_cellar:grain", + "count": 1 + }, + "result": { + "item": "growthcraft_cellar:grain_deep_copper", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_cellar/recipes/grain_golden.json b/src/main/resources/data/growthcraft_cellar/recipes/grain_golden.json new file mode 100644 index 0000000..3a1365f --- /dev/null +++ b/src/main/resources/data/growthcraft_cellar/recipes/grain_golden.json @@ -0,0 +1,12 @@ +{ + "type": "growthcraft_cellar:roaster_recipe", + "roasting_level": 2, + "input_item": { + "item": "growthcraft_cellar:grain", + "count": 1 + }, + "result": { + "item": "growthcraft_cellar:grain_golden", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_cellar/recipes/grain_pale_golden.json b/src/main/resources/data/growthcraft_cellar/recipes/grain_pale_golden.json new file mode 100644 index 0000000..1ea1cd7 --- /dev/null +++ b/src/main/resources/data/growthcraft_cellar/recipes/grain_pale_golden.json @@ -0,0 +1,12 @@ +{ + "type": "growthcraft_cellar:roaster_recipe", + "roasting_level": 1, + "input_item": { + "item": "growthcraft_cellar:grain", + "count": 1 + }, + "result": { + "item": "growthcraft_cellar:grain_pale_golden", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_cellar/recipes/ipa_ale_fermentation.json b/src/main/resources/data/growthcraft_cellar/recipes/ipa_ale_fermentation.json new file mode 100644 index 0000000..bb5f0c7 --- /dev/null +++ b/src/main/resources/data/growthcraft_cellar/recipes/ipa_ale_fermentation.json @@ -0,0 +1,27 @@ +{ + "type": "growthcraft_cellar:fermentation_barrel_recipe", + "processing_time": 3600, + "ingredient_item": { + "item": "growthcraft_cellar:yeast_brewers", + "count": 1 + }, + "ingredient_fluid": { + "fluid": "growthcraft_cellar:hopped_golden_wort_fluid", + "amount": 1000 + }, + "result": { + "fluid": "growthcraft_cellar:ipa_ale_fluid", + "amount": 1000 + }, + "effects": [ + { + "effect": "minecraft:regeneration", + "duration": 3600, + "amplifier": 1 + } + ], + "bottle": { + "item": "growthcraft_cellar:potion_ale" + }, + "color": "0xF6D02E" +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_cellar/recipes/kindling_stonecutter.json b/src/main/resources/data/growthcraft_cellar/recipes/kindling_stonecutter.json new file mode 100644 index 0000000..f086590 --- /dev/null +++ b/src/main/resources/data/growthcraft_cellar/recipes/kindling_stonecutter.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "count": 4, + "ingredient": { + "item": "minecraft:oak_planks" + }, + "result": "growthcraft_cellar:kindling" +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_cellar/recipes/old_port_ale_fermentation.json b/src/main/resources/data/growthcraft_cellar/recipes/old_port_ale_fermentation.json new file mode 100644 index 0000000..8c31693 --- /dev/null +++ b/src/main/resources/data/growthcraft_cellar/recipes/old_port_ale_fermentation.json @@ -0,0 +1,27 @@ +{ + "type": "growthcraft_cellar:fermentation_barrel_recipe", + "processing_time": 400, + "ingredient_item": { + "item": "growthcraft_cellar:yeast_brewers", + "count": 1 + }, + "ingredient_fluid": { + "fluid": "growthcraft_cellar:deep_copper_wort_fluid", + "amount": 1000 + }, + "result": { + "fluid": "growthcraft_cellar:old_port_ale_fluid", + "amount": 1000 + }, + "effects": [ + { + "effect": "minecraft:haste", + "duration": 400, + "amplifier": 1 + } + ], + "bottle": { + "item": "growthcraft_cellar:potion_ale" + }, + "color": "0x805C2F" +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_cellar/recipes/pale_ale_fermentation.json b/src/main/resources/data/growthcraft_cellar/recipes/pale_ale_fermentation.json new file mode 100644 index 0000000..21ba5b0 --- /dev/null +++ b/src/main/resources/data/growthcraft_cellar/recipes/pale_ale_fermentation.json @@ -0,0 +1,27 @@ +{ + "type": "growthcraft_cellar:fermentation_barrel_recipe", + "processing_time": 600, + "ingredient_item": { + "item": "growthcraft_cellar:yeast_brewers", + "count": 1 + }, + "ingredient_fluid": { + "fluid": "growthcraft_cellar:pale_golden_wort_fluid", + "amount": 1000 + }, + "result": { + "fluid": "growthcraft_cellar:pale_ale_fluid", + "amount": 1000 + }, + "effects": [ + { + "effect": "minecraft:haste", + "duration": 600, + "amplifier": 1 + } + ], + "bottle": { + "item": "growthcraft_cellar:potion_ale" + }, + "color": "0xFBF855" +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_cellar/recipes/pale_lager_fermentation.json b/src/main/resources/data/growthcraft_cellar/recipes/pale_lager_fermentation.json new file mode 100644 index 0000000..0172fbb --- /dev/null +++ b/src/main/resources/data/growthcraft_cellar/recipes/pale_lager_fermentation.json @@ -0,0 +1,27 @@ +{ + "type": "growthcraft_cellar:fermentation_barrel_recipe", + "processing_time": 600, + "ingredient_item": { + "item": "growthcraft_cellar:yeast_lager", + "count": 1 + }, + "ingredient_fluid": { + "fluid": "growthcraft_cellar:pale_golden_wort_fluid", + "amount": 1000 + }, + "result": { + "fluid": "growthcraft_cellar:pale_lager_fluid", + "amount": 1000 + }, + "effects": [ + { + "effect": "minecraft:speed", + "duration": 600, + "amplifier": 1 + } + ], + "bottle": { + "item": "growthcraft_cellar:potion_lager" + }, + "color": "0xFBF855" +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_cellar/recipes/pilsner_lager_fermentation.json b/src/main/resources/data/growthcraft_cellar/recipes/pilsner_lager_fermentation.json new file mode 100644 index 0000000..0b13ff6 --- /dev/null +++ b/src/main/resources/data/growthcraft_cellar/recipes/pilsner_lager_fermentation.json @@ -0,0 +1,27 @@ +{ + "type": "growthcraft_cellar:fermentation_barrel_recipe", + "processing_time": 600, + "ingredient_item": { + "item": "growthcraft_cellar:yeast_lager", + "count": 1 + }, + "ingredient_fluid": { + "fluid": "growthcraft_cellar:golden_wort_fluid", + "amount": 1000 + }, + "result": { + "fluid": "growthcraft_cellar:pilsner_lager_fluid", + "amount": 1000 + }, + "effects": [ + { + "effect": "minecraft:resistance", + "duration": 600, + "amplifier": 1 + } + ], + "bottle": { + "item": "growthcraft_cellar:potion_lager" + }, + "color": "0xF6D02E" +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_cellar/recipes/purple_wine_fermentation.json b/src/main/resources/data/growthcraft_cellar/recipes/purple_wine_fermentation.json new file mode 100644 index 0000000..5a8095c --- /dev/null +++ b/src/main/resources/data/growthcraft_cellar/recipes/purple_wine_fermentation.json @@ -0,0 +1,27 @@ +{ + "type": "growthcraft_cellar:fermentation_barrel_recipe", + "processing_time": 1200, + "ingredient_item": { + "item": "growthcraft_cellar:yeast_bayanus", + "count": 1 + }, + "ingredient_fluid": { + "fluid": "growthcraft_cellar:purple_grape_juice_fluid", + "amount": 1000 + }, + "result": { + "fluid": "growthcraft_cellar:purple_grape_wine_fluid", + "amount": 1000 + }, + "effects": [ + { + "effect": "minecraft:absorption", + "duration": 1200, + "amplifier": 1 + } + ], + "bottle": { + "item": "growthcraft_cellar:potion_wine" + }, + "color": "0x805C2F" +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_cellar/recipes/red_wine_fermentation.json b/src/main/resources/data/growthcraft_cellar/recipes/red_wine_fermentation.json new file mode 100644 index 0000000..b0e7a73 --- /dev/null +++ b/src/main/resources/data/growthcraft_cellar/recipes/red_wine_fermentation.json @@ -0,0 +1,27 @@ +{ + "type": "growthcraft_cellar:fermentation_barrel_recipe", + "processing_time": 1200, + "ingredient_item": { + "item": "growthcraft_cellar:yeast_bayanus", + "count": 1 + }, + "ingredient_fluid": { + "fluid": "growthcraft_cellar:red_grape_juice_fluid", + "amount": 1000 + }, + "result": { + "fluid": "growthcraft_cellar:red_grape_wine_fluid", + "amount": 1000 + }, + "effects": [ + { + "effect": "minecraft:health_boost", + "duration": 1200, + "amplifier": 1 + } + ], + "bottle": { + "item": "growthcraft_cellar:potion_wine" + }, + "color": "0x805C2F" +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_cellar/recipes/roaster.json b/src/main/resources/data/growthcraft_cellar/recipes/roaster.json new file mode 100644 index 0000000..f8836d1 --- /dev/null +++ b/src/main/resources/data/growthcraft_cellar/recipes/roaster.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + " I ", + " B ", + "I I" + ], + "key": { + "B": { + "item": "growthcraft_cellar:brew_kettle" + }, + "I": { + "tag": "forge:ingots/iron" + } + }, + "result": { + "item": "growthcraft_cellar:roaster" + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_cellar/recipes/roaster_cooked_beef.json b/src/main/resources/data/growthcraft_cellar/recipes/roaster_cooked_beef.json new file mode 100644 index 0000000..37c9782 --- /dev/null +++ b/src/main/resources/data/growthcraft_cellar/recipes/roaster_cooked_beef.json @@ -0,0 +1,12 @@ +{ + "type": "growthcraft_cellar:roaster_recipe", + "roasting_level": 1, + "input_item": { + "item": "minecraft:beef", + "count": 1 + }, + "result": { + "item": "minecraft:cooked_beef", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_cellar/recipes/roaster_cooked_chicken.json b/src/main/resources/data/growthcraft_cellar/recipes/roaster_cooked_chicken.json new file mode 100644 index 0000000..bbb99bd --- /dev/null +++ b/src/main/resources/data/growthcraft_cellar/recipes/roaster_cooked_chicken.json @@ -0,0 +1,12 @@ +{ + "type": "growthcraft_cellar:roaster_recipe", + "roasting_level": 1, + "input_item": { + "item": "minecraft:chicken", + "count": 1 + }, + "result": { + "item": "minecraft:cooked_chicken", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_cellar/recipes/stout_ale_fermentation.json b/src/main/resources/data/growthcraft_cellar/recipes/stout_ale_fermentation.json new file mode 100644 index 0000000..8ad7074 --- /dev/null +++ b/src/main/resources/data/growthcraft_cellar/recipes/stout_ale_fermentation.json @@ -0,0 +1,27 @@ +{ + "type": "growthcraft_cellar:fermentation_barrel_recipe", + "processing_time": 6000, + "ingredient_item": { + "item": "growthcraft_cellar:yeast_brewers", + "count": 1 + }, + "ingredient_fluid": { + "fluid": "growthcraft_cellar:dark_wort_fluid", + "amount": 1000 + }, + "result": { + "fluid": "growthcraft_cellar:stout_ale_fluid", + "amount": 1000 + }, + "effects": [ + { + "effect": "minecraft:regeneration", + "duration": 6000, + "amplifier": 3 + } + ], + "bottle": { + "item": "growthcraft_cellar:potion_ale" + }, + "color": "0x0E0A07" +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_cellar/recipes/viena_lager_fermentation.json b/src/main/resources/data/growthcraft_cellar/recipes/viena_lager_fermentation.json new file mode 100644 index 0000000..0d5e52c --- /dev/null +++ b/src/main/resources/data/growthcraft_cellar/recipes/viena_lager_fermentation.json @@ -0,0 +1,27 @@ +{ + "type": "growthcraft_cellar:fermentation_barrel_recipe", + "processing_time": 1200, + "ingredient_item": { + "item": "growthcraft_cellar:yeast_lager", + "count": 1 + }, + "ingredient_fluid": { + "fluid": "growthcraft_cellar:deep_amber_wort_fluid", + "amount": 1000 + }, + "result": { + "fluid": "growthcraft_cellar:vienna_lager_fluid", + "amount": 1000 + }, + "effects": [ + { + "effect": "minecraft:luck", + "duration": 1200, + "amplifier": 1 + } + ], + "bottle": { + "item": "growthcraft_cellar:potion_lager" + }, + "color": "0xCFA26F" +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_cellar/recipes/white_wine_fermentation.json b/src/main/resources/data/growthcraft_cellar/recipes/white_wine_fermentation.json new file mode 100644 index 0000000..d3242c4 --- /dev/null +++ b/src/main/resources/data/growthcraft_cellar/recipes/white_wine_fermentation.json @@ -0,0 +1,27 @@ +{ + "type": "growthcraft_cellar:fermentation_barrel_recipe", + "processing_time": 1200, + "ingredient_item": { + "item": "growthcraft_cellar:yeast_bayanus", + "count": 1 + }, + "ingredient_fluid": { + "fluid": "growthcraft_cellar:white_grape_juice_fluid", + "amount": 1000 + }, + "result": { + "fluid": "growthcraft_cellar:white_grape_wine_fluid", + "amount": 1000 + }, + "effects": [ + { + "effect": "minecraft:saturation", + "duration": 1200, + "amplifier": 1 + } + ], + "bottle": { + "item": "growthcraft_cellar:potion_wine" + }, + "color": "0x805C2F" +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_milk/loot_modifiers/thistle_seeds_from_grass.json b/src/main/resources/data/growthcraft_milk/loot_modifiers/thistle_seeds_from_grass.json new file mode 100644 index 0000000..12cc2da --- /dev/null +++ b/src/main/resources/data/growthcraft_milk/loot_modifiers/thistle_seeds_from_grass.json @@ -0,0 +1,14 @@ +{ + "type": "growthcraft:global_block_loot_modifier", + "conditions": [ + { + "condition": "minecraft:random_chance", + "chance": 0.01 + }, + { + "condition": "block_state_property", + "block": "minecraft:grass" + } + ], + "item": "growthcraft_milk:thistle_seed" +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_milk/loot_tables/blocks/appenzeller_cheese_curds.json b/src/main/resources/data/growthcraft_milk/loot_tables/blocks/appenzeller_cheese_curds.json new file mode 100644 index 0000000..89fd285 --- /dev/null +++ b/src/main/resources/data/growthcraft_milk/loot_tables/blocks/appenzeller_cheese_curds.json @@ -0,0 +1,119 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1.0, + "entries": [ + { + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "growthcraft_milk:appenzeller_cheese_curds", + "properties": { + "age": "7" + } + } + ], + "name": "growthcraft_milk:appenzeller_cheese_curds_drained" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "growthcraft_milk:appenzeller_cheese_curds", + "properties": { + "age": "6" + } + } + ], + "name": "growthcraft_milk:appenzeller_cheese_curds" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "growthcraft_milk:appenzeller_cheese_curds", + "properties": { + "age": "5" + } + } + ], + "name": "growthcraft_milk:appenzeller_cheese_curds" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "growthcraft_milk:appenzeller_cheese_curds", + "properties": { + "age": "4" + } + } + ], + "name": "growthcraft_milk:appenzeller_cheese_curds" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "growthcraft_milk:appenzeller_cheese_curds", + "properties": { + "age": "3" + } + } + ], + "name": "growthcraft_milk:appenzeller_cheese_curds" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "growthcraft_milk:appenzeller_cheese_curds", + "properties": { + "age": "2" + } + } + ], + "name": "growthcraft_milk:appenzeller_cheese_curds" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "growthcraft_milk:appenzeller_cheese_curds", + "properties": { + "age": "1" + } + } + ], + "name": "growthcraft_milk:appenzeller_cheese_curds" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "growthcraft_milk:appenzeller_cheese_curds", + "properties": { + "age": "0" + } + } + ], + "name": "growthcraft_milk:appenzeller_cheese_curds" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_milk/loot_tables/blocks/asiago_cheese_curds.json b/src/main/resources/data/growthcraft_milk/loot_tables/blocks/asiago_cheese_curds.json new file mode 100644 index 0000000..439aa75 --- /dev/null +++ b/src/main/resources/data/growthcraft_milk/loot_tables/blocks/asiago_cheese_curds.json @@ -0,0 +1,119 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1.0, + "entries": [ + { + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "growthcraft_milk:asiago_cheese_curds", + "properties": { + "age": "7" + } + } + ], + "name": "growthcraft_milk:asiago_cheese_curds_drained" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "growthcraft_milk:asiago_cheese_curds", + "properties": { + "age": "6" + } + } + ], + "name": "growthcraft_milk:asiago_cheese_curds" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "growthcraft_milk:asiago_cheese_curds", + "properties": { + "age": "5" + } + } + ], + "name": "growthcraft_milk:asiago_cheese_curds" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "growthcraft_milk:asiago_cheese_curds", + "properties": { + "age": "4" + } + } + ], + "name": "growthcraft_milk:asiago_cheese_curds" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "growthcraft_milk:asiago_cheese_curds", + "properties": { + "age": "3" + } + } + ], + "name": "growthcraft_milk:asiago_cheese_curds" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "growthcraft_milk:asiago_cheese_curds", + "properties": { + "age": "2" + } + } + ], + "name": "growthcraft_milk:asiago_cheese_curds" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "growthcraft_milk:asiago_cheese_curds", + "properties": { + "age": "1" + } + } + ], + "name": "growthcraft_milk:asiago_cheese_curds" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "growthcraft_milk:asiago_cheese_curds", + "properties": { + "age": "0" + } + } + ], + "name": "growthcraft_milk:asiago_cheese_curds" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_milk/loot_tables/blocks/cazu_marzu_cheese_curds.json b/src/main/resources/data/growthcraft_milk/loot_tables/blocks/cazu_marzu_cheese_curds.json new file mode 100644 index 0000000..9b1f3c0 --- /dev/null +++ b/src/main/resources/data/growthcraft_milk/loot_tables/blocks/cazu_marzu_cheese_curds.json @@ -0,0 +1,119 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1.0, + "entries": [ + { + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "growthcraft_milk:casu_marzu_cheese_curds", + "properties": { + "age": "7" + } + } + ], + "name": "growthcraft_milk:casu_marzu_cheese_curds_drained" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "growthcraft_milk:casu_marzu_cheese_curds", + "properties": { + "age": "6" + } + } + ], + "name": "growthcraft_milk:casu_marzu_cheese_curds" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "growthcraft_milk:casu_marzu_cheese_curds", + "properties": { + "age": "5" + } + } + ], + "name": "growthcraft_milk:casu_marzu_cheese_curds" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "growthcraft_milk:casu_marzu_cheese_curds", + "properties": { + "age": "4" + } + } + ], + "name": "growthcraft_milk:casu_marzu_cheese_curds" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "growthcraft_milk:casu_marzu_cheese_curds", + "properties": { + "age": "3" + } + } + ], + "name": "growthcraft_milk:casu_marzu_cheese_curds" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "growthcraft_milk:casu_marzu_cheese_curds", + "properties": { + "age": "2" + } + } + ], + "name": "growthcraft_milk:casu_marzu_cheese_curds" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "growthcraft_milk:casu_marzu_cheese_curds", + "properties": { + "age": "1" + } + } + ], + "name": "growthcraft_milk:casu_marzu_cheese_curds" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "growthcraft_milk:casu_marzu_cheese_curds", + "properties": { + "age": "0" + } + } + ], + "name": "growthcraft_milk:casu_marzu_cheese_curds" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_milk/loot_tables/blocks/cheddar_cheese_curds.json b/src/main/resources/data/growthcraft_milk/loot_tables/blocks/cheddar_cheese_curds.json new file mode 100644 index 0000000..291e988 --- /dev/null +++ b/src/main/resources/data/growthcraft_milk/loot_tables/blocks/cheddar_cheese_curds.json @@ -0,0 +1,119 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1.0, + "entries": [ + { + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "growthcraft_milk:cheddar_cheese_curds", + "properties": { + "age": "7" + } + } + ], + "name": "growthcraft_milk:cheddar_cheese_curds_drained" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "growthcraft_milk:cheddar_cheese_curds", + "properties": { + "age": "6" + } + } + ], + "name": "growthcraft_milk:cheddar_cheese_curds" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "growthcraft_milk:cheddar_cheese_curds", + "properties": { + "age": "5" + } + } + ], + "name": "growthcraft_milk:cheddar_cheese_curds" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "growthcraft_milk:cheddar_cheese_curds", + "properties": { + "age": "4" + } + } + ], + "name": "growthcraft_milk:cheddar_cheese_curds" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "growthcraft_milk:cheddar_cheese_curds", + "properties": { + "age": "3" + } + } + ], + "name": "growthcraft_milk:cheddar_cheese_curds" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "growthcraft_milk:cheddar_cheese_curds", + "properties": { + "age": "2" + } + } + ], + "name": "growthcraft_milk:cheddar_cheese_curds" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "growthcraft_milk:cheddar_cheese_curds", + "properties": { + "age": "1" + } + } + ], + "name": "growthcraft_milk:cheddar_cheese_curds" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "growthcraft_milk:cheddar_cheese_curds", + "properties": { + "age": "0" + } + } + ], + "name": "growthcraft_milk:cheddar_cheese_curds" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_milk/loot_tables/blocks/cheese_press.json b/src/main/resources/data/growthcraft_milk/loot_tables/blocks/cheese_press.json new file mode 100644 index 0000000..6a552ec --- /dev/null +++ b/src/main/resources/data/growthcraft_milk/loot_tables/blocks/cheese_press.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "growthcraft_milk:cheese_press" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_milk/loot_tables/blocks/churn.json b/src/main/resources/data/growthcraft_milk/loot_tables/blocks/churn.json new file mode 100644 index 0000000..fe94c8f --- /dev/null +++ b/src/main/resources/data/growthcraft_milk/loot_tables/blocks/churn.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "growthcraft_milk:churn" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_milk/loot_tables/blocks/emmentaler_cheese_curds.json b/src/main/resources/data/growthcraft_milk/loot_tables/blocks/emmentaler_cheese_curds.json new file mode 100644 index 0000000..4175dc0 --- /dev/null +++ b/src/main/resources/data/growthcraft_milk/loot_tables/blocks/emmentaler_cheese_curds.json @@ -0,0 +1,119 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1.0, + "entries": [ + { + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "growthcraft_milk:emmentaler_cheese_curds", + "properties": { + "age": "7" + } + } + ], + "name": "growthcraft_milk:emmentaler_cheese_curds_drained" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "growthcraft_milk:emmentaler_cheese_curds", + "properties": { + "age": "6" + } + } + ], + "name": "growthcraft_milk:emmentaler_cheese_curds" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "growthcraft_milk:emmentaler_cheese_curds", + "properties": { + "age": "5" + } + } + ], + "name": "growthcraft_milk:emmentaler_cheese_curds" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "growthcraft_milk:emmentaler_cheese_curds", + "properties": { + "age": "4" + } + } + ], + "name": "growthcraft_milk:emmentaler_cheese_curds" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "growthcraft_milk:emmentaler_cheese_curds", + "properties": { + "age": "3" + } + } + ], + "name": "growthcraft_milk:emmentaler_cheese_curds" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "growthcraft_milk:emmentaler_cheese_curds", + "properties": { + "age": "2" + } + } + ], + "name": "growthcraft_milk:emmentaler_cheese_curds" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "growthcraft_milk:emmentaler_cheese_curds", + "properties": { + "age": "1" + } + } + ], + "name": "growthcraft_milk:emmentaler_cheese_curds" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "growthcraft_milk:emmentaler_cheese_curds", + "properties": { + "age": "0" + } + } + ], + "name": "growthcraft_milk:emmentaler_cheese_curds" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_milk/loot_tables/blocks/gorgonzola_cheese_curds.json b/src/main/resources/data/growthcraft_milk/loot_tables/blocks/gorgonzola_cheese_curds.json new file mode 100644 index 0000000..d698d59 --- /dev/null +++ b/src/main/resources/data/growthcraft_milk/loot_tables/blocks/gorgonzola_cheese_curds.json @@ -0,0 +1,119 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1.0, + "entries": [ + { + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "growthcraft_milk:gorgonzola_cheese_curds", + "properties": { + "age": "7" + } + } + ], + "name": "growthcraft_milk:gorgonzola_cheese_curds_drained" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "growthcraft_milk:gorgonzola_cheese_curds", + "properties": { + "age": "6" + } + } + ], + "name": "growthcraft_milk:gorgonzola_cheese_curds" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "growthcraft_milk:gorgonzola_cheese_curds", + "properties": { + "age": "5" + } + } + ], + "name": "growthcraft_milk:gorgonzola_cheese_curds" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "growthcraft_milk:gorgonzola_cheese_curds", + "properties": { + "age": "4" + } + } + ], + "name": "growthcraft_milk:gorgonzola_cheese_curds" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "growthcraft_milk:gorgonzola_cheese_curds", + "properties": { + "age": "3" + } + } + ], + "name": "growthcraft_milk:gorgonzola_cheese_curds" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "growthcraft_milk:gorgonzola_cheese_curds", + "properties": { + "age": "2" + } + } + ], + "name": "growthcraft_milk:gorgonzola_cheese_curds" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "growthcraft_milk:gorgonzola_cheese_curds", + "properties": { + "age": "1" + } + } + ], + "name": "growthcraft_milk:gorgonzola_cheese_curds" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "growthcraft_milk:gorgonzola_cheese_curds", + "properties": { + "age": "0" + } + } + ], + "name": "growthcraft_milk:gorgonzola_cheese_curds" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_milk/loot_tables/blocks/gouda_cheese_curds.json b/src/main/resources/data/growthcraft_milk/loot_tables/blocks/gouda_cheese_curds.json new file mode 100644 index 0000000..5f43bac --- /dev/null +++ b/src/main/resources/data/growthcraft_milk/loot_tables/blocks/gouda_cheese_curds.json @@ -0,0 +1,119 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1.0, + "entries": [ + { + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "growthcraft_milk:gouda_cheese_curds", + "properties": { + "age": "7" + } + } + ], + "name": "growthcraft_milk:gouda_cheese_curds_drained" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "growthcraft_milk:gouda_cheese_curds", + "properties": { + "age": "6" + } + } + ], + "name": "growthcraft_milk:gouda_cheese_curds" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "growthcraft_milk:gouda_cheese_curds", + "properties": { + "age": "5" + } + } + ], + "name": "growthcraft_milk:gouda_cheese_curds" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "growthcraft_milk:gouda_cheese_curds", + "properties": { + "age": "4" + } + } + ], + "name": "growthcraft_milk:gouda_cheese_curds" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "growthcraft_milk:gouda_cheese_curds", + "properties": { + "age": "3" + } + } + ], + "name": "growthcraft_milk:gouda_cheese_curds" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "growthcraft_milk:gouda_cheese_curds", + "properties": { + "age": "2" + } + } + ], + "name": "growthcraft_milk:gouda_cheese_curds" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "growthcraft_milk:gouda_cheese_curds", + "properties": { + "age": "1" + } + } + ], + "name": "growthcraft_milk:gouda_cheese_curds" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "growthcraft_milk:gouda_cheese_curds", + "properties": { + "age": "0" + } + } + ], + "name": "growthcraft_milk:gouda_cheese_curds" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_milk/loot_tables/blocks/mixing_vat.json b/src/main/resources/data/growthcraft_milk/loot_tables/blocks/mixing_vat.json new file mode 100644 index 0000000..68dcc72 --- /dev/null +++ b/src/main/resources/data/growthcraft_milk/loot_tables/blocks/mixing_vat.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "growthcraft_milk:mixing_vat" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_milk/loot_tables/blocks/monterey_cheese_curds.json b/src/main/resources/data/growthcraft_milk/loot_tables/blocks/monterey_cheese_curds.json new file mode 100644 index 0000000..e43ac8b --- /dev/null +++ b/src/main/resources/data/growthcraft_milk/loot_tables/blocks/monterey_cheese_curds.json @@ -0,0 +1,119 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1.0, + "entries": [ + { + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "growthcraft_milk:monterey_cheese_curds", + "properties": { + "age": "7" + } + } + ], + "name": "growthcraft_milk:monterey_cheese_curds_drained" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "growthcraft_milk:monterey_cheese_curds", + "properties": { + "age": "6" + } + } + ], + "name": "growthcraft_milk:monterey_cheese_curds" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "growthcraft_milk:monterey_cheese_curds", + "properties": { + "age": "5" + } + } + ], + "name": "growthcraft_milk:monterey_cheese_curds" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "growthcraft_milk:monterey_cheese_curds", + "properties": { + "age": "4" + } + } + ], + "name": "growthcraft_milk:monterey_cheese_curds" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "growthcraft_milk:monterey_cheese_curds", + "properties": { + "age": "3" + } + } + ], + "name": "growthcraft_milk:monterey_cheese_curds" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "growthcraft_milk:monterey_cheese_curds", + "properties": { + "age": "2" + } + } + ], + "name": "growthcraft_milk:monterey_cheese_curds" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "growthcraft_milk:monterey_cheese_curds", + "properties": { + "age": "1" + } + } + ], + "name": "growthcraft_milk:monterey_cheese_curds" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "growthcraft_milk:monterey_cheese_curds", + "properties": { + "age": "0" + } + } + ], + "name": "growthcraft_milk:monterey_cheese_curds" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_milk/loot_tables/blocks/pancheon.json b/src/main/resources/data/growthcraft_milk/loot_tables/blocks/pancheon.json new file mode 100644 index 0000000..23e6c7b --- /dev/null +++ b/src/main/resources/data/growthcraft_milk/loot_tables/blocks/pancheon.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "growthcraft_milk:pancheon" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_milk/loot_tables/blocks/parmesan_cheese_curds.json b/src/main/resources/data/growthcraft_milk/loot_tables/blocks/parmesan_cheese_curds.json new file mode 100644 index 0000000..66dfb1d --- /dev/null +++ b/src/main/resources/data/growthcraft_milk/loot_tables/blocks/parmesan_cheese_curds.json @@ -0,0 +1,119 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1.0, + "entries": [ + { + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "growthcraft_milk:parmesan_cheese_curds", + "properties": { + "age": "7" + } + } + ], + "name": "growthcraft_milk:parmesan_cheese_curds_drained" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "growthcraft_milk:parmesan_cheese_curds", + "properties": { + "age": "6" + } + } + ], + "name": "growthcraft_milk:parmesan_cheese_curds" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "growthcraft_milk:parmesan_cheese_curds", + "properties": { + "age": "5" + } + } + ], + "name": "growthcraft_milk:parmesan_cheese_curds" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "growthcraft_milk:parmesan_cheese_curds", + "properties": { + "age": "4" + } + } + ], + "name": "growthcraft_milk:parmesan_cheese_curds" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "growthcraft_milk:parmesan_cheese_curds", + "properties": { + "age": "3" + } + } + ], + "name": "growthcraft_milk:parmesan_cheese_curds" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "growthcraft_milk:parmesan_cheese_curds", + "properties": { + "age": "2" + } + } + ], + "name": "growthcraft_milk:parmesan_cheese_curds" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "growthcraft_milk:parmesan_cheese_curds", + "properties": { + "age": "1" + } + } + ], + "name": "growthcraft_milk:parmesan_cheese_curds" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "growthcraft_milk:parmesan_cheese_curds", + "properties": { + "age": "0" + } + } + ], + "name": "growthcraft_milk:parmesan_cheese_curds" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_milk/loot_tables/blocks/provolone_cheese_curds.json b/src/main/resources/data/growthcraft_milk/loot_tables/blocks/provolone_cheese_curds.json new file mode 100644 index 0000000..834134e --- /dev/null +++ b/src/main/resources/data/growthcraft_milk/loot_tables/blocks/provolone_cheese_curds.json @@ -0,0 +1,119 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1.0, + "entries": [ + { + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "growthcraft_milk:provolone_cheese_curds", + "properties": { + "age": "7" + } + } + ], + "name": "growthcraft_milk:provolone_cheese_curds_drained" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "growthcraft_milk:provolone_cheese_curds", + "properties": { + "age": "6" + } + } + ], + "name": "growthcraft_milk:provolone_cheese_curds" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "growthcraft_milk:provolone_cheese_curds", + "properties": { + "age": "5" + } + } + ], + "name": "growthcraft_milk:provolone_cheese_curds" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "growthcraft_milk:provolone_cheese_curds", + "properties": { + "age": "4" + } + } + ], + "name": "growthcraft_milk:provolone_cheese_curds" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "growthcraft_milk:provolone_cheese_curds", + "properties": { + "age": "3" + } + } + ], + "name": "growthcraft_milk:provolone_cheese_curds" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "growthcraft_milk:provolone_cheese_curds", + "properties": { + "age": "2" + } + } + ], + "name": "growthcraft_milk:provolone_cheese_curds" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "growthcraft_milk:provolone_cheese_curds", + "properties": { + "age": "1" + } + } + ], + "name": "growthcraft_milk:provolone_cheese_curds" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "growthcraft_milk:provolone_cheese_curds", + "properties": { + "age": "0" + } + } + ], + "name": "growthcraft_milk:provolone_cheese_curds" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_milk/loot_tables/blocks/ricotta_cheese_curds.json b/src/main/resources/data/growthcraft_milk/loot_tables/blocks/ricotta_cheese_curds.json new file mode 100644 index 0000000..c38ada5 --- /dev/null +++ b/src/main/resources/data/growthcraft_milk/loot_tables/blocks/ricotta_cheese_curds.json @@ -0,0 +1,119 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1.0, + "entries": [ + { + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "growthcraft_milk:ricotta_cheese_curds", + "properties": { + "age": "7" + } + } + ], + "name": "growthcraft_milk:ricotta_cheese_curds_drained" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "growthcraft_milk:ricotta_cheese_curds", + "properties": { + "age": "6" + } + } + ], + "name": "growthcraft_milk:ricotta_cheese_curds" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "growthcraft_milk:ricotta_cheese_curds", + "properties": { + "age": "5" + } + } + ], + "name": "growthcraft_milk:ricotta_cheese_curds" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "growthcraft_milk:ricotta_cheese_curds", + "properties": { + "age": "4" + } + } + ], + "name": "growthcraft_milk:ricotta_cheese_curds" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "growthcraft_milk:ricotta_cheese_curds", + "properties": { + "age": "3" + } + } + ], + "name": "growthcraft_milk:ricotta_cheese_curds" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "growthcraft_milk:ricotta_cheese_curds", + "properties": { + "age": "2" + } + } + ], + "name": "growthcraft_milk:ricotta_cheese_curds" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "growthcraft_milk:ricotta_cheese_curds", + "properties": { + "age": "1" + } + } + ], + "name": "growthcraft_milk:ricotta_cheese_curds" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "growthcraft_milk:ricotta_cheese_curds", + "properties": { + "age": "0" + } + } + ], + "name": "growthcraft_milk:ricotta_cheese_curds" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_milk/loot_tables/blocks/thistle_crop.json b/src/main/resources/data/growthcraft_milk/loot_tables/blocks/thistle_crop.json new file mode 100644 index 0000000..a10ba51 --- /dev/null +++ b/src/main/resources/data/growthcraft_milk/loot_tables/blocks/thistle_crop.json @@ -0,0 +1,66 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "growthcraft_milk:thistle_crop", + "properties": { + "age": "7" + } + } + ], + "name": "growthcraft_milk:thistle" + }, + { + "type": "minecraft:item", + "name": "growthcraft_milk:thistle_seed" + } + ] + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:apply_bonus", + "enchantment": "minecraft:fortune", + "formula": "minecraft:binomial_with_bonus_count", + "parameters": { + "extra": 3, + "probability": 0.5714286 + } + } + ], + "name": "growthcraft_milk:thistle_seed" + } + ], + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "growthcraft_milk:thistle_crop", + "properties": { + "age": "7" + } + } + ] + } + ], + "functions": [ + { + "function": "minecraft:explosion_decay" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_milk/recipes/brew_kettle_rennet_from_brown_mushroom.json b/src/main/resources/data/growthcraft_milk/recipes/brew_kettle_rennet_from_brown_mushroom.json new file mode 100644 index 0000000..cfc37d8 --- /dev/null +++ b/src/main/resources/data/growthcraft_milk/recipes/brew_kettle_rennet_from_brown_mushroom.json @@ -0,0 +1,23 @@ +{ + "type": "growthcraft_cellar:brew_kettle_recipe", + "requires_heat": true, + "requires_lid": "false", + "processing_time": 600, + "by_product_chance": 1, + "input_fluid": { + "fluid": "minecraft:water", + "amount": 250 + }, + "input_item": { + "item": "minecraft:brown_mushroom", + "count": 1 + }, + "output_fluid": { + "fluid": "growthcraft_milk:rennet_fluid", + "amount": 250 + }, + "by_product": { + "item": "minecraft:bone_meal", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_milk/recipes/brew_kettle_rennet_from_cow_stomach.json b/src/main/resources/data/growthcraft_milk/recipes/brew_kettle_rennet_from_cow_stomach.json new file mode 100644 index 0000000..3147c7b --- /dev/null +++ b/src/main/resources/data/growthcraft_milk/recipes/brew_kettle_rennet_from_cow_stomach.json @@ -0,0 +1,23 @@ +{ + "type": "growthcraft_cellar:brew_kettle_recipe", + "requires_heat": true, + "requires_lid": "false", + "processing_time": 600, + "by_product_chance": 1, + "input_fluid": { + "fluid": "minecraft:water", + "amount": 1000 + }, + "input_item": { + "item": "growthcraft_milk:stomach", + "count": 1 + }, + "output_fluid": { + "fluid": "growthcraft_milk:rennet_fluid", + "amount": 1000 + }, + "by_product": { + "item": "minecraft:bone_meal", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_milk/recipes/brew_kettle_rennet_from_red_mushroom.json b/src/main/resources/data/growthcraft_milk/recipes/brew_kettle_rennet_from_red_mushroom.json new file mode 100644 index 0000000..b005e6a --- /dev/null +++ b/src/main/resources/data/growthcraft_milk/recipes/brew_kettle_rennet_from_red_mushroom.json @@ -0,0 +1,23 @@ +{ + "type": "growthcraft_cellar:brew_kettle_recipe", + "requires_heat": true, + "requires_lid": "false", + "processing_time": 600, + "by_product_chance": 1, + "input_fluid": { + "fluid": "minecraft:water", + "amount": 250 + }, + "input_item": { + "item": "minecraft:red_mushroom", + "count": 1 + }, + "output_fluid": { + "fluid": "growthcraft_milk:rennet_fluid", + "amount": 250 + }, + "by_product": { + "item": "minecraft:bone_meal", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_milk/recipes/brew_kettle_rennet_from_stomach.json b/src/main/resources/data/growthcraft_milk/recipes/brew_kettle_rennet_from_stomach.json new file mode 100644 index 0000000..3147c7b --- /dev/null +++ b/src/main/resources/data/growthcraft_milk/recipes/brew_kettle_rennet_from_stomach.json @@ -0,0 +1,23 @@ +{ + "type": "growthcraft_cellar:brew_kettle_recipe", + "requires_heat": true, + "requires_lid": "false", + "processing_time": 600, + "by_product_chance": 1, + "input_fluid": { + "fluid": "minecraft:water", + "amount": 1000 + }, + "input_item": { + "item": "growthcraft_milk:stomach", + "count": 1 + }, + "output_fluid": { + "fluid": "growthcraft_milk:rennet_fluid", + "amount": 1000 + }, + "by_product": { + "item": "minecraft:bone_meal", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_milk/recipes/brew_kettle_rennet_from_thistle.json b/src/main/resources/data/growthcraft_milk/recipes/brew_kettle_rennet_from_thistle.json new file mode 100644 index 0000000..fae6a73 --- /dev/null +++ b/src/main/resources/data/growthcraft_milk/recipes/brew_kettle_rennet_from_thistle.json @@ -0,0 +1,23 @@ +{ + "type": "growthcraft_cellar:brew_kettle_recipe", + "requires_heat": true, + "requires_lid": "false", + "processing_time": 300, + "by_product_chance": 1, + "input_fluid": { + "fluid": "minecraft:water", + "amount": 125 + }, + "input_item": { + "item": "growthcraft_milk:thistle", + "count": 1 + }, + "output_fluid": { + "fluid": "growthcraft_milk:rennet_fluid", + "amount": 125 + }, + "by_product": { + "item": "minecraft:bone_meal", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_milk/recipes/cheese_cloth.json b/src/main/resources/data/growthcraft_milk/recipes/cheese_cloth.json new file mode 100644 index 0000000..a7dc4a1 --- /dev/null +++ b/src/main/resources/data/growthcraft_milk/recipes/cheese_cloth.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "sss", + "s s", + "sss" + ], + "key": { + "s": { + "item": "minecraft:string" + } + }, + "result": { + "item": "growthcraft_milk:cheese_cloth", + "count": 4 + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_milk/recipes/cheese_press.json b/src/main/resources/data/growthcraft_milk/recipes/cheese_press.json new file mode 100644 index 0000000..3ddaaf0 --- /dev/null +++ b/src/main/resources/data/growthcraft_milk/recipes/cheese_press.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "III", + "ICI", + "SSS" + ], + "key": { + "I": { + "tag": "forge:ingots/iron" + }, + "S": { + "tag": "minecraft:wooden_slabs" + }, + "C": { + "tag": "forge:chests/wooden" + } + }, + "result": { + "item": "growthcraft_milk:cheese_press" + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_milk/recipes/cheese_press_appenzeller_cheese.json b/src/main/resources/data/growthcraft_milk/recipes/cheese_press_appenzeller_cheese.json new file mode 100644 index 0000000..c34ba8d --- /dev/null +++ b/src/main/resources/data/growthcraft_milk/recipes/cheese_press_appenzeller_cheese.json @@ -0,0 +1,15 @@ +{ + "type": "growthcraft_milk:cheese_press_recipe", + "processing_time": 6000, + "ingredient": { + "item": "growthcraft_milk:appenzeller_cheese_curds_drained", + "count": 1 + }, + "result_item": { + "item": "growthcraft_milk:appenzeller_cheese", + "count": 1 + }, + "slice": { + "item": "growthcraft_milk:appenzeller_cheese_slice" + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_milk/recipes/cheese_press_asiago_cheese.json b/src/main/resources/data/growthcraft_milk/recipes/cheese_press_asiago_cheese.json new file mode 100644 index 0000000..c924a92 --- /dev/null +++ b/src/main/resources/data/growthcraft_milk/recipes/cheese_press_asiago_cheese.json @@ -0,0 +1,15 @@ +{ + "type": "growthcraft_milk:cheese_press_recipe", + "processing_time": 6000, + "ingredient": { + "item": "growthcraft_milk:asiago_cheese_curds_drained", + "count": 1 + }, + "result_item": { + "item": "growthcraft_milk:asiago_cheese", + "count": 1 + }, + "slice": { + "item": "growthcraft_milk:asiago_cheese_slice" + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_milk/recipes/cheese_press_casu_marzu_cheese.json b/src/main/resources/data/growthcraft_milk/recipes/cheese_press_casu_marzu_cheese.json new file mode 100644 index 0000000..b3b8347 --- /dev/null +++ b/src/main/resources/data/growthcraft_milk/recipes/cheese_press_casu_marzu_cheese.json @@ -0,0 +1,15 @@ +{ + "type": "growthcraft_milk:cheese_press_recipe", + "processing_time": 6000, + "ingredient": { + "item": "growthcraft_milk:casu_marzu_cheese_curds_drained", + "count": 1 + }, + "result_item": { + "item": "growthcraft_milk:casu_marzu_cheese", + "count": 1 + }, + "slice": { + "item": "growthcraft_milk:casu_marzu_cheese_slice" + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_milk/recipes/cheese_press_cheddar_cheese.json b/src/main/resources/data/growthcraft_milk/recipes/cheese_press_cheddar_cheese.json new file mode 100644 index 0000000..d3aeeb5 --- /dev/null +++ b/src/main/resources/data/growthcraft_milk/recipes/cheese_press_cheddar_cheese.json @@ -0,0 +1,15 @@ +{ + "type": "growthcraft_milk:cheese_press_recipe", + "processing_time": 6000, + "ingredient": { + "item": "growthcraft_milk:cheddar_cheese_curds_drained", + "count": 1 + }, + "result_item": { + "item": "growthcraft_milk:cheddar_cheese", + "count": 1 + }, + "slice": { + "item": "growthcraft_milk:cheddar_cheese_slice" + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_milk/recipes/cheese_press_emmentaler_cheese.json b/src/main/resources/data/growthcraft_milk/recipes/cheese_press_emmentaler_cheese.json new file mode 100644 index 0000000..746735a --- /dev/null +++ b/src/main/resources/data/growthcraft_milk/recipes/cheese_press_emmentaler_cheese.json @@ -0,0 +1,15 @@ +{ + "type": "growthcraft_milk:cheese_press_recipe", + "processing_time": 6000, + "ingredient": { + "item": "growthcraft_milk:emmentaler_cheese_curds_drained", + "count": 1 + }, + "result_item": { + "item": "growthcraft_milk:emmentaler_cheese", + "count": 1 + }, + "slice": { + "item": "growthcraft_milk:emmentaler_cheese_slice" + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_milk/recipes/cheese_press_gorgonzola_cheese.json b/src/main/resources/data/growthcraft_milk/recipes/cheese_press_gorgonzola_cheese.json new file mode 100644 index 0000000..fe3c312 --- /dev/null +++ b/src/main/resources/data/growthcraft_milk/recipes/cheese_press_gorgonzola_cheese.json @@ -0,0 +1,15 @@ +{ + "type": "growthcraft_milk:cheese_press_recipe", + "processing_time": 6000, + "ingredient": { + "item": "growthcraft_milk:gorgonzola_cheese_curds_drained", + "count": 1 + }, + "result_item": { + "item": "growthcraft_milk:gorgonzola_cheese", + "count": 1 + }, + "slice": { + "item": "growthcraft_milk:gorgonzola_cheese_slice" + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_milk/recipes/cheese_press_gouda_cheese.json b/src/main/resources/data/growthcraft_milk/recipes/cheese_press_gouda_cheese.json new file mode 100644 index 0000000..9f009f9 --- /dev/null +++ b/src/main/resources/data/growthcraft_milk/recipes/cheese_press_gouda_cheese.json @@ -0,0 +1,15 @@ +{ + "type": "growthcraft_milk:cheese_press_recipe", + "processing_time": 6000, + "ingredient": { + "item": "growthcraft_milk:gouda_cheese_curds_drained", + "count": 1 + }, + "result_item": { + "item": "growthcraft_milk:gouda_cheese", + "count": 1 + }, + "slice": { + "item": "growthcraft_milk:gouda_cheese_slice" + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_milk/recipes/cheese_press_monterey_cheese.json b/src/main/resources/data/growthcraft_milk/recipes/cheese_press_monterey_cheese.json new file mode 100644 index 0000000..6ee28e9 --- /dev/null +++ b/src/main/resources/data/growthcraft_milk/recipes/cheese_press_monterey_cheese.json @@ -0,0 +1,15 @@ +{ + "type": "growthcraft_milk:cheese_press_recipe", + "processing_time": 6000, + "ingredient": { + "item": "growthcraft_milk:monterey_cheese_curds_drained", + "count": 1 + }, + "result_item": { + "item": "growthcraft_milk:monterey_cheese", + "count": 1 + }, + "slice": { + "item": "growthcraft_milk:monterey_cheese_slice" + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_milk/recipes/cheese_press_parmesan_cheese.json b/src/main/resources/data/growthcraft_milk/recipes/cheese_press_parmesan_cheese.json new file mode 100644 index 0000000..99e397f --- /dev/null +++ b/src/main/resources/data/growthcraft_milk/recipes/cheese_press_parmesan_cheese.json @@ -0,0 +1,15 @@ +{ + "type": "growthcraft_milk:cheese_press_recipe", + "processing_time": 6000, + "ingredient": { + "item": "growthcraft_milk:parmesan_cheese_curds_drained", + "count": 1 + }, + "result_item": { + "item": "growthcraft_milk:parmesan_cheese", + "count": 1 + }, + "slice": { + "item": "growthcraft_milk:parmesan_cheese_slice" + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_milk/recipes/cheese_press_provolone_cheese.json b/src/main/resources/data/growthcraft_milk/recipes/cheese_press_provolone_cheese.json new file mode 100644 index 0000000..62d5b26 --- /dev/null +++ b/src/main/resources/data/growthcraft_milk/recipes/cheese_press_provolone_cheese.json @@ -0,0 +1,15 @@ +{ + "type": "growthcraft_milk:cheese_press_recipe", + "processing_time": 6000, + "ingredient": { + "item": "growthcraft_milk:provolone_cheese_curds_drained", + "count": 1 + }, + "result_item": { + "item": "growthcraft_milk:provolone_cheese", + "count": 1 + }, + "slice": { + "item": "growthcraft_milk:provolone_cheese_slice" + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_milk/recipes/churn.json b/src/main/resources/data/growthcraft_milk/recipes/churn.json new file mode 100644 index 0000000..f5e546d --- /dev/null +++ b/src/main/resources/data/growthcraft_milk/recipes/churn.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + " S ", + "P P", + "PPP" + ], + "key": { + "P": { + "tag": "minecraft:planks" + }, + "S": { + "tag": "forge:rods/wooden" + } + }, + "result": { + "item": "growthcraft_milk:churn" + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_milk/recipes/churn_butter_milk_from_cream.json b/src/main/resources/data/growthcraft_milk/recipes/churn_butter_milk_from_cream.json new file mode 100644 index 0000000..2ae3549 --- /dev/null +++ b/src/main/resources/data/growthcraft_milk/recipes/churn_butter_milk_from_cream.json @@ -0,0 +1,17 @@ +{ + "type": "growthcraft_milk:churn_recipe", + "plunges": 7, + "input_fluid": { + "fluid": "growthcraft_milk:cream_fluid", + "amount": 1000 + }, + "output_fluid": { + "fluid": "growthcraft_milk:butter_milk_fluid", + "amount": 1000 + }, + "by_product": { + "item": "growthcraft_milk:butter", + "count": 1 + }, + "by_product_chance": 100 +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_milk/recipes/culture_jar_starter_culture_from_milk.json b/src/main/resources/data/growthcraft_milk/recipes/culture_jar_starter_culture_from_milk.json new file mode 100644 index 0000000..27f3b1f --- /dev/null +++ b/src/main/resources/data/growthcraft_milk/recipes/culture_jar_starter_culture_from_milk.json @@ -0,0 +1,13 @@ +{ + "type": "growthcraft_cellar:culture_jar_starter_recipe", + "processing_time": 4800, + "requires_heat_source": true, + "input_fluid": { + "fluid": "growthcraft_milk:milk_fluid", + "amount": 1000 + }, + "output_item": { + "item": "growthcraft_milk:starter_culture", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_milk/recipes/culture_jar_starter_culture_from_skim_milk.json b/src/main/resources/data/growthcraft_milk/recipes/culture_jar_starter_culture_from_skim_milk.json new file mode 100644 index 0000000..66f15ac --- /dev/null +++ b/src/main/resources/data/growthcraft_milk/recipes/culture_jar_starter_culture_from_skim_milk.json @@ -0,0 +1,13 @@ +{ + "type": "growthcraft_cellar:culture_jar_recipe", + "processing_time": 1200, + "requires_heat_source": true, + "input_fluid": { + "fluid": "growthcraft_milk:skim_milk_fluid", + "amount": 250 + }, + "input_item": { + "item": "growthcraft_milk:starter_culture", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_milk/recipes/ice_cream_apple.json b/src/main/resources/data/growthcraft_milk/recipes/ice_cream_apple.json new file mode 100644 index 0000000..0c69ae3 --- /dev/null +++ b/src/main/resources/data/growthcraft_milk/recipes/ice_cream_apple.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "planks", + "ingredients": [ + { + "tag": "growthcraft_milk:milk_buckets" + }, + { + "item": "minecraft:apple" + }, + { + "item": "minecraft:sugar" + }, + { + "item": "minecraft:bowl" + } + ], + "result": { + "item": "growthcraft_milk:ice_cream_apple", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_milk/recipes/ice_cream_chocolate.json b/src/main/resources/data/growthcraft_milk/recipes/ice_cream_chocolate.json new file mode 100644 index 0000000..8dd9283 --- /dev/null +++ b/src/main/resources/data/growthcraft_milk/recipes/ice_cream_chocolate.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "planks", + "ingredients": [ + { + "tag": "growthcraft_milk:milk_buckets" + }, + { + "item": "minecraft:cocoa_beans" + }, + { + "item": "minecraft:sugar" + }, + { + "item": "minecraft:bowl" + } + ], + "result": { + "item": "growthcraft_milk:ice_cream_chocolate", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_milk/recipes/ice_cream_grape_purple.json b/src/main/resources/data/growthcraft_milk/recipes/ice_cream_grape_purple.json new file mode 100644 index 0000000..69ffd17 --- /dev/null +++ b/src/main/resources/data/growthcraft_milk/recipes/ice_cream_grape_purple.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "planks", + "ingredients": [ + { + "tag": "growthcraft_milk:milk_buckets" + }, + { + "item": "growthcraft_cellar:grape_purple" + }, + { + "item": "minecraft:sugar" + }, + { + "item": "minecraft:bowl" + } + ], + "result": { + "item": "growthcraft_milk:ice_cream_grape_purple", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_milk/recipes/ice_cream_grape_red.json b/src/main/resources/data/growthcraft_milk/recipes/ice_cream_grape_red.json new file mode 100644 index 0000000..daf4210 --- /dev/null +++ b/src/main/resources/data/growthcraft_milk/recipes/ice_cream_grape_red.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "planks", + "ingredients": [ + { + "tag": "growthcraft_milk:milk_buckets" + }, + { + "item": "growthcraft_cellar:grape_red" + }, + { + "item": "minecraft:sugar" + }, + { + "item": "minecraft:bowl" + } + ], + "result": { + "item": "growthcraft_milk:ice_cream_grape_red", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_milk/recipes/ice_cream_grape_white.json b/src/main/resources/data/growthcraft_milk/recipes/ice_cream_grape_white.json new file mode 100644 index 0000000..56645ab --- /dev/null +++ b/src/main/resources/data/growthcraft_milk/recipes/ice_cream_grape_white.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "planks", + "ingredients": [ + { + "tag": "growthcraft_milk:milk_buckets" + }, + { + "item": "growthcraft_cellar:grape_white" + }, + { + "item": "minecraft:sugar" + }, + { + "item": "minecraft:bowl" + } + ], + "result": { + "item": "growthcraft_milk:ice_cream_grape_white", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_milk/recipes/ice_cream_honey.json b/src/main/resources/data/growthcraft_milk/recipes/ice_cream_honey.json new file mode 100644 index 0000000..43c1386 --- /dev/null +++ b/src/main/resources/data/growthcraft_milk/recipes/ice_cream_honey.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "planks", + "ingredients": [ + { + "tag": "growthcraft_milk:milk_buckets" + }, + { + "item": "growthcraft_apiary:honey_comb_full" + }, + { + "item": "minecraft:sugar" + }, + { + "item": "minecraft:bowl" + } + ], + "result": { + "item": "growthcraft_milk:ice_cream_honey", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_milk/recipes/ice_cream_pumpkin.json b/src/main/resources/data/growthcraft_milk/recipes/ice_cream_pumpkin.json new file mode 100644 index 0000000..ee698d8 --- /dev/null +++ b/src/main/resources/data/growthcraft_milk/recipes/ice_cream_pumpkin.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "planks", + "ingredients": [ + { + "tag": "growthcraft_milk:milk_buckets" + }, + { + "item": "minecraft:pumpkin" + }, + { + "item": "minecraft:sugar" + }, + { + "item": "minecraft:bowl" + } + ], + "result": { + "item": "growthcraft_milk:ice_cream_pumpkin", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_milk/recipes/ice_cream_watermelon.json b/src/main/resources/data/growthcraft_milk/recipes/ice_cream_watermelon.json new file mode 100644 index 0000000..2e65fd4 --- /dev/null +++ b/src/main/resources/data/growthcraft_milk/recipes/ice_cream_watermelon.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "planks", + "ingredients": [ + { + "tag": "growthcraft_milk:milk_buckets" + }, + { + "item": "minecraft:melon_slice" + }, + { + "item": "minecraft:sugar" + }, + { + "item": "minecraft:bowl" + } + ], + "result": { + "item": "growthcraft_milk:ice_cream_watermelon", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_milk/recipes/milking_bucket_iron.json b/src/main/resources/data/growthcraft_milk/recipes/milking_bucket_iron.json new file mode 100644 index 0000000..d632d80 --- /dev/null +++ b/src/main/resources/data/growthcraft_milk/recipes/milking_bucket_iron.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "NNN", + "I I", + " I " + ], + "key": { + "N": { + "tag": "forge:nuggets/iron" + }, + "I": { + "tag": "forge:ingots/iron" + } + }, + "result": { + "item": "growthcraft_milk:milking_bucket_iron" + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_milk/recipes/mixing_vat.json b/src/main/resources/data/growthcraft_milk/recipes/mixing_vat.json new file mode 100644 index 0000000..8b09d92 --- /dev/null +++ b/src/main/resources/data/growthcraft_milk/recipes/mixing_vat.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + " ", + " B ", + "I I" + ], + "key": { + "B": { + "item": "growthcraft_cellar:brew_kettle" + }, + "I": { + "tag": "forge:ingots/iron" + } + }, + "result": { + "item": "growthcraft_milk:mixing_vat" + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_milk/recipes/mixing_vat_fluid_cultured_milk.json b/src/main/resources/data/growthcraft_milk/recipes/mixing_vat_fluid_cultured_milk.json new file mode 100644 index 0000000..a2afe2b --- /dev/null +++ b/src/main/resources/data/growthcraft_milk/recipes/mixing_vat_fluid_cultured_milk.json @@ -0,0 +1,30 @@ +{ + "type": "growthcraft_milk:mixing_vat_fluid_recipe", + "processing_time": 1200, + "result_type": "fluid", + "input_fluid": { + "fluid": "growthcraft_milk:milk_fluid", + "amount": 4000 + }, + "reagent_fluid": { + "fluid": "growthcraft_milk:rennet_fluid", + "amount": 1000 + }, + "ingredients": [ + { + "item": "growthcraft_milk:starter_culture", + "count": 1 + } + ], + "result_fluid": { + "fluid": "growthcraft_milk:cultured_milk_fluid", + "amount": 4000 + }, + "result_fluid_waste": { + "fluid": "growthcraft_milk:whey_fluid", + "amount": 1000 + }, + "activation_tool": { + "item": "minecraft:stick" + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_milk/recipes/mixing_vat_item_appenzeller_cheese_curds_from_purple_grapes.json b/src/main/resources/data/growthcraft_milk/recipes/mixing_vat_item_appenzeller_cheese_curds_from_purple_grapes.json new file mode 100644 index 0000000..6faa174 --- /dev/null +++ b/src/main/resources/data/growthcraft_milk/recipes/mixing_vat_item_appenzeller_cheese_curds_from_purple_grapes.json @@ -0,0 +1,32 @@ +{ + "type": "growthcraft_milk:mixing_vat_item_recipe", + "processing_time": 1200, + "result_type": "item", + "input_fluid": { + "fluid": "growthcraft_milk:cultured_milk_fluid", + "amount": 4000 + }, + "ingredients": [ + { + "item": "growthcraft:salt", + "count": 1 + }, + { + "item": "growthcraft_cellar:grape_purple", + "count": 1 + }, + { + "item": "growthcraft_cellar:yeast_bayanus", + "count": 1 + } + ], + "result_item": { + "item": "growthcraft_milk:appenzeller_cheese_curds" + }, + "activation_tool": { + "item": "minecraft:wooden_sword" + }, + "result_activation_tool": { + "item": "growthcraft_milk:cheese_cloth" + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_milk/recipes/mixing_vat_item_appenzeller_cheese_curds_from_red_grapes.json b/src/main/resources/data/growthcraft_milk/recipes/mixing_vat_item_appenzeller_cheese_curds_from_red_grapes.json new file mode 100644 index 0000000..9cc6a34 --- /dev/null +++ b/src/main/resources/data/growthcraft_milk/recipes/mixing_vat_item_appenzeller_cheese_curds_from_red_grapes.json @@ -0,0 +1,32 @@ +{ + "type": "growthcraft_milk:mixing_vat_item_recipe", + "processing_time": 1200, + "result_type": "item", + "input_fluid": { + "fluid": "growthcraft_milk:cultured_milk_fluid", + "amount": 4000 + }, + "ingredients": [ + { + "item": "growthcraft:salt", + "count": 1 + }, + { + "item": "growthcraft_cellar:grape_red", + "count": 1 + }, + { + "item": "growthcraft_cellar:yeast_bayanus", + "count": 1 + } + ], + "result_item": { + "item": "growthcraft_milk:appenzeller_cheese_curds" + }, + "activation_tool": { + "item": "minecraft:wooden_sword" + }, + "result_activation_tool": { + "item": "growthcraft_milk:cheese_cloth" + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_milk/recipes/mixing_vat_item_appenzeller_cheese_curds_from_white_grapes.json b/src/main/resources/data/growthcraft_milk/recipes/mixing_vat_item_appenzeller_cheese_curds_from_white_grapes.json new file mode 100644 index 0000000..cc46a48 --- /dev/null +++ b/src/main/resources/data/growthcraft_milk/recipes/mixing_vat_item_appenzeller_cheese_curds_from_white_grapes.json @@ -0,0 +1,32 @@ +{ + "type": "growthcraft_milk:mixing_vat_item_recipe", + "processing_time": 1200, + "result_type": "item", + "input_fluid": { + "fluid": "growthcraft_milk:cultured_milk_fluid", + "amount": 4000 + }, + "ingredients": [ + { + "item": "growthcraft:salt", + "count": 1 + }, + { + "item": "growthcraft_cellar:grape_white", + "count": 1 + }, + { + "item": "growthcraft_cellar:yeast_bayanus", + "count": 1 + } + ], + "result_item": { + "item": "growthcraft_milk:appenzeller_cheese_curds" + }, + "activation_tool": { + "item": "minecraft:wooden_sword" + }, + "result_activation_tool": { + "item": "growthcraft_milk:cheese_cloth" + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_milk/recipes/mixing_vat_item_asiago_cheese_curds.json b/src/main/resources/data/growthcraft_milk/recipes/mixing_vat_item_asiago_cheese_curds.json new file mode 100644 index 0000000..5805587 --- /dev/null +++ b/src/main/resources/data/growthcraft_milk/recipes/mixing_vat_item_asiago_cheese_curds.json @@ -0,0 +1,32 @@ +{ + "type": "growthcraft_milk:mixing_vat_item_recipe", + "processing_time": 1200, + "result_type": "item", + "input_fluid": { + "fluid": "growthcraft_milk:cultured_milk_fluid", + "amount": 4000 + }, + "ingredients": [ + { + "item": "growthcraft:salt", + "count": 1 + }, + { + "item": "growthcraft:salt", + "count": 1 + }, + { + "item": "minecraft:yellow_dye", + "count": 1 + } + ], + "result_item": { + "item": "growthcraft_milk:asiago_cheese_curds" + }, + "activation_tool": { + "item": "minecraft:wooden_sword" + }, + "result_activation_tool": { + "item": "growthcraft_milk:cheese_cloth" + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_milk/recipes/mixing_vat_item_casu_marzu_cheese_curds.json b/src/main/resources/data/growthcraft_milk/recipes/mixing_vat_item_casu_marzu_cheese_curds.json new file mode 100644 index 0000000..5a946f7 --- /dev/null +++ b/src/main/resources/data/growthcraft_milk/recipes/mixing_vat_item_casu_marzu_cheese_curds.json @@ -0,0 +1,28 @@ +{ + "type": "growthcraft_milk:mixing_vat_item_recipe", + "processing_time": 1200, + "result_type": "item", + "input_fluid": { + "fluid": "growthcraft_milk:cultured_milk_fluid", + "amount": 4000 + }, + "ingredients": [ + { + "item": "growthcraft:salt", + "count": 1 + }, + { + "item": "minecraft:rotten_flesh", + "count": 1 + } + ], + "result_item": { + "item": "growthcraft_milk:casu_marzu_cheese_curds" + }, + "activation_tool": { + "item": "minecraft:wooden_sword" + }, + "result_activation_tool": { + "item": "growthcraft_milk:cheese_cloth" + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_milk/recipes/mixing_vat_item_cheddar_cheese_curds.json b/src/main/resources/data/growthcraft_milk/recipes/mixing_vat_item_cheddar_cheese_curds.json new file mode 100644 index 0000000..bd148d3 --- /dev/null +++ b/src/main/resources/data/growthcraft_milk/recipes/mixing_vat_item_cheddar_cheese_curds.json @@ -0,0 +1,28 @@ +{ + "type": "growthcraft_milk:mixing_vat_item_recipe", + "processing_time": 1200, + "result_type": "item", + "input_fluid": { + "fluid": "growthcraft_milk:cultured_milk_fluid", + "amount": 4000 + }, + "ingredients": [ + { + "item": "growthcraft:salt", + "count": 1 + }, + { + "item": "minecraft:orange_dye", + "count": 1 + } + ], + "result_item": { + "item": "growthcraft_milk:cheddar_cheese_curds" + }, + "activation_tool": { + "item": "minecraft:wooden_sword" + }, + "result_activation_tool": { + "item": "growthcraft_milk:cheese_cloth" + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_milk/recipes/mixing_vat_item_emmentaler_cheese_curds.json b/src/main/resources/data/growthcraft_milk/recipes/mixing_vat_item_emmentaler_cheese_curds.json new file mode 100644 index 0000000..d3603af --- /dev/null +++ b/src/main/resources/data/growthcraft_milk/recipes/mixing_vat_item_emmentaler_cheese_curds.json @@ -0,0 +1,28 @@ +{ + "type": "growthcraft_milk:mixing_vat_item_recipe", + "processing_time": 1200, + "result_type": "item", + "input_fluid": { + "fluid": "growthcraft_milk:cultured_milk_fluid", + "amount": 4000 + }, + "ingredients": [ + { + "item": "growthcraft:salt", + "count": 1 + }, + { + "item": "minecraft:wheat", + "count": 1 + } + ], + "result_item": { + "item": "growthcraft_milk:emmentaler_cheese_curds" + }, + "activation_tool": { + "item": "minecraft:wooden_sword" + }, + "result_activation_tool": { + "item": "growthcraft_milk:cheese_cloth" + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_milk/recipes/mixing_vat_item_gorgonzola_cheese_curds_from_purple_grapes.json b/src/main/resources/data/growthcraft_milk/recipes/mixing_vat_item_gorgonzola_cheese_curds_from_purple_grapes.json new file mode 100644 index 0000000..5d492f7 --- /dev/null +++ b/src/main/resources/data/growthcraft_milk/recipes/mixing_vat_item_gorgonzola_cheese_curds_from_purple_grapes.json @@ -0,0 +1,28 @@ +{ + "type": "growthcraft_milk:mixing_vat_item_recipe", + "processing_time": 1200, + "result_type": "item", + "input_fluid": { + "fluid": "growthcraft_milk:cultured_milk_fluid", + "amount": 4000 + }, + "ingredients": [ + { + "item": "growthcraft:salt", + "count": 1 + }, + { + "item": "growthcraft_cellar:grape_purple", + "count": 1 + } + ], + "result_item": { + "item": "growthcraft_milk:gorgonzola_cheese_curds" + }, + "activation_tool": { + "item": "minecraft:wooden_sword" + }, + "result_activation_tool": { + "item": "growthcraft_milk:cheese_cloth" + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_milk/recipes/mixing_vat_item_gorgonzola_cheese_curds_from_red_grapes.json b/src/main/resources/data/growthcraft_milk/recipes/mixing_vat_item_gorgonzola_cheese_curds_from_red_grapes.json new file mode 100644 index 0000000..4b47c05 --- /dev/null +++ b/src/main/resources/data/growthcraft_milk/recipes/mixing_vat_item_gorgonzola_cheese_curds_from_red_grapes.json @@ -0,0 +1,28 @@ +{ + "type": "growthcraft_milk:mixing_vat_item_recipe", + "processing_time": 1200, + "result_type": "item", + "input_fluid": { + "fluid": "growthcraft_milk:cultured_milk_fluid", + "amount": 4000 + }, + "ingredients": [ + { + "item": "growthcraft:salt", + "count": 1 + }, + { + "item": "growthcraft_cellar:grape_red", + "count": 1 + } + ], + "result_item": { + "item": "growthcraft_milk:gorgonzola_cheese_curds" + }, + "activation_tool": { + "item": "minecraft:wooden_sword" + }, + "result_activation_tool": { + "item": "growthcraft_milk:cheese_cloth" + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_milk/recipes/mixing_vat_item_gorgonzola_cheese_curds_from_white_grapes.json b/src/main/resources/data/growthcraft_milk/recipes/mixing_vat_item_gorgonzola_cheese_curds_from_white_grapes.json new file mode 100644 index 0000000..f49dbcc --- /dev/null +++ b/src/main/resources/data/growthcraft_milk/recipes/mixing_vat_item_gorgonzola_cheese_curds_from_white_grapes.json @@ -0,0 +1,28 @@ +{ + "type": "growthcraft_milk:mixing_vat_item_recipe", + "processing_time": 1200, + "result_type": "item", + "input_fluid": { + "fluid": "growthcraft_milk:cultured_milk_fluid", + "amount": 4000 + }, + "ingredients": [ + { + "item": "growthcraft:salt", + "count": 1 + }, + { + "item": "growthcraft_cellar:grape_white", + "count": 1 + } + ], + "result_item": { + "item": "growthcraft_milk:gorgonzola_cheese_curds" + }, + "activation_tool": { + "item": "minecraft:wooden_sword" + }, + "result_activation_tool": { + "item": "growthcraft_milk:cheese_cloth" + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_milk/recipes/mixing_vat_item_gouda_cheese_curds.json b/src/main/resources/data/growthcraft_milk/recipes/mixing_vat_item_gouda_cheese_curds.json new file mode 100644 index 0000000..5c976c9 --- /dev/null +++ b/src/main/resources/data/growthcraft_milk/recipes/mixing_vat_item_gouda_cheese_curds.json @@ -0,0 +1,28 @@ +{ + "type": "growthcraft_milk:mixing_vat_item_recipe", + "processing_time": 1200, + "result_type": "item", + "input_fluid": { + "fluid": "growthcraft_milk:cultured_milk_fluid", + "amount": 4000 + }, + "ingredients": [ + { + "item": "growthcraft:salt", + "count": 1 + }, + { + "item": "minecraft:gray_dye", + "count": 1 + } + ], + "result_item": { + "item": "growthcraft_milk:gouda_cheese_curds" + }, + "activation_tool": { + "item": "minecraft:wooden_sword" + }, + "result_activation_tool": { + "item": "growthcraft_milk:cheese_cloth" + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_milk/recipes/mixing_vat_item_monterey_cheese_curds.json b/src/main/resources/data/growthcraft_milk/recipes/mixing_vat_item_monterey_cheese_curds.json new file mode 100644 index 0000000..8b2fafe --- /dev/null +++ b/src/main/resources/data/growthcraft_milk/recipes/mixing_vat_item_monterey_cheese_curds.json @@ -0,0 +1,28 @@ +{ + "type": "growthcraft_milk:mixing_vat_item_recipe", + "processing_time": 1200, + "result_type": "item", + "input_fluid": { + "fluid": "growthcraft_milk:cultured_milk_fluid", + "amount": 4000 + }, + "ingredients": [ + { + "item": "growthcraft:salt", + "count": 1 + }, + { + "item": "minecraft:red_dye", + "count": 1 + } + ], + "result_item": { + "item": "growthcraft_milk:monterey_cheese_curds" + }, + "activation_tool": { + "item": "minecraft:wooden_sword" + }, + "result_activation_tool": { + "item": "growthcraft_milk:cheese_cloth" + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_milk/recipes/mixing_vat_item_parmesan_cheese_curds.json b/src/main/resources/data/growthcraft_milk/recipes/mixing_vat_item_parmesan_cheese_curds.json new file mode 100644 index 0000000..a378bfc --- /dev/null +++ b/src/main/resources/data/growthcraft_milk/recipes/mixing_vat_item_parmesan_cheese_curds.json @@ -0,0 +1,28 @@ +{ + "type": "growthcraft_milk:mixing_vat_item_recipe", + "processing_time": 1200, + "result_type": "item", + "input_fluid": { + "fluid": "growthcraft_milk:cultured_milk_fluid", + "amount": 4000 + }, + "ingredients": [ + { + "item": "growthcraft:salt", + "count": 1 + }, + { + "item": "minecraft:white_dye", + "count": 1 + } + ], + "result_item": { + "item": "growthcraft_milk:parmesan_cheese_curds" + }, + "activation_tool": { + "item": "minecraft:wooden_sword" + }, + "result_activation_tool": { + "item": "growthcraft_milk:cheese_cloth" + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_milk/recipes/mixing_vat_item_provolone_cheese_curds.json b/src/main/resources/data/growthcraft_milk/recipes/mixing_vat_item_provolone_cheese_curds.json new file mode 100644 index 0000000..62e672b --- /dev/null +++ b/src/main/resources/data/growthcraft_milk/recipes/mixing_vat_item_provolone_cheese_curds.json @@ -0,0 +1,28 @@ +{ + "type": "growthcraft_milk:mixing_vat_item_recipe", + "processing_time": 1200, + "result_type": "item", + "input_fluid": { + "fluid": "growthcraft_milk:cultured_milk_fluid", + "amount": 4000 + }, + "ingredients": [ + { + "item": "growthcraft:salt", + "count": 1 + }, + { + "item": "minecraft:yellow_dye", + "count": 1 + } + ], + "result_item": { + "item": "growthcraft_milk:provolone_cheese_curds" + }, + "activation_tool": { + "item": "minecraft:wooden_sword" + }, + "result_activation_tool": { + "item": "growthcraft_milk:cheese_cloth" + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_milk/recipes/mixing_vat_item_ricotta_cheese_curds.json b/src/main/resources/data/growthcraft_milk/recipes/mixing_vat_item_ricotta_cheese_curds.json new file mode 100644 index 0000000..94f76f6 --- /dev/null +++ b/src/main/resources/data/growthcraft_milk/recipes/mixing_vat_item_ricotta_cheese_curds.json @@ -0,0 +1,24 @@ +{ + "type": "growthcraft_milk:mixing_vat_item_recipe", + "processing_time": 1200, + "result_type": "item", + "input_fluid": { + "fluid": "growthcraft_milk:whey_fluid", + "amount": 4000 + }, + "ingredients": [ + { + "item": "growthcraft_milk:starter_culture", + "count": 1 + } + ], + "result_item": { + "item": "growthcraft_milk:ricotta_cheese_curds" + }, + "activation_tool": { + "item": "minecraft:wooden_sword" + }, + "result_activation_tool": { + "item": "growthcraft_milk:cheese_cloth" + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_milk/recipes/pancheon.json b/src/main/resources/data/growthcraft_milk/recipes/pancheon.json new file mode 100644 index 0000000..af4681e --- /dev/null +++ b/src/main/resources/data/growthcraft_milk/recipes/pancheon.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "C C", + "CCC" + ], + "key": { + "C": { + "item": "minecraft:clay_ball" + } + }, + "result": { + "item": "growthcraft_milk:pancheon" + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_milk/recipes/pancheon_skim_cream_from_milk_growthcraft.json b/src/main/resources/data/growthcraft_milk/recipes/pancheon_skim_cream_from_milk_growthcraft.json new file mode 100644 index 0000000..1576331 --- /dev/null +++ b/src/main/resources/data/growthcraft_milk/recipes/pancheon_skim_cream_from_milk_growthcraft.json @@ -0,0 +1,18 @@ +{ + "type": "growthcraft_milk:pancheon_recipe", + "processing_time": 1200, + "input_fluid": { + "fluid": "growthcraft_milk:milk_fluid", + "amount": 2000 + }, + "output_fluids": [ + { + "fluid": "growthcraft_milk:skim_milk_fluid", + "amount": 1000 + }, + { + "fluid": "growthcraft_milk:cream_fluid", + "amount": 1000 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_milk/recipes/pancheon_skim_cream_from_milk_minecraft.json b/src/main/resources/data/growthcraft_milk/recipes/pancheon_skim_cream_from_milk_minecraft.json new file mode 100644 index 0000000..c881625 --- /dev/null +++ b/src/main/resources/data/growthcraft_milk/recipes/pancheon_skim_cream_from_milk_minecraft.json @@ -0,0 +1,18 @@ +{ + "type": "growthcraft_milk:pancheon_recipe", + "processing_time": 1200, + "input_fluid": { + "fluid": "minecraft:milk", + "amount": 2000 + }, + "output_fluids": [ + { + "fluid": "growthcraft_milk:skim_milk_fluid", + "amount": 1000 + }, + { + "fluid": "growthcraft_milk:cream_fluid", + "amount": 1000 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_milk/recipes/salted_butter.json b/src/main/resources/data/growthcraft_milk/recipes/salted_butter.json new file mode 100644 index 0000000..9e6f0a4 --- /dev/null +++ b/src/main/resources/data/growthcraft_milk/recipes/salted_butter.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shapeless", + "ingredients": [ + { + "item": "growthcraft_milk:butter" + }, + { + "item": "growthcraft:salt" + } + ], + "result": { + "count": 1, + "item": "growthcraft_milk:butter_salted" + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_milk/recipes/stonecutter_thistle_seed.json b/src/main/resources/data/growthcraft_milk/recipes/stonecutter_thistle_seed.json new file mode 100644 index 0000000..70f324e --- /dev/null +++ b/src/main/resources/data/growthcraft_milk/recipes/stonecutter_thistle_seed.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "growthcraft_milk:thistle" + }, + "result": "growthcraft_milk:thistle_seed", + "count": 2 +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_milk/recipes/yogurt_apple.json b/src/main/resources/data/growthcraft_milk/recipes/yogurt_apple.json new file mode 100644 index 0000000..5857786 --- /dev/null +++ b/src/main/resources/data/growthcraft_milk/recipes/yogurt_apple.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "planks", + "ingredients": [ + { + "tag": "growthcraft_milk:milk_buckets" + }, + { + "item": "minecraft:apple" + }, + { + "item": "growthcraft_milk:starter_culture" + }, + { + "item": "minecraft:bowl" + } + ], + "result": { + "item": "growthcraft_milk:yogurt_apple", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_milk/recipes/yogurt_chocolate.json b/src/main/resources/data/growthcraft_milk/recipes/yogurt_chocolate.json new file mode 100644 index 0000000..34b3f21 --- /dev/null +++ b/src/main/resources/data/growthcraft_milk/recipes/yogurt_chocolate.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "planks", + "ingredients": [ + { + "tag": "growthcraft_milk:milk_buckets" + }, + { + "item": "minecraft:cocoa_beans" + }, + { + "item": "growthcraft_milk:starter_culture" + }, + { + "item": "minecraft:bowl" + } + ], + "result": { + "item": "growthcraft_milk:yogurt_chocolate", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_milk/recipes/yogurt_grape_purple.json b/src/main/resources/data/growthcraft_milk/recipes/yogurt_grape_purple.json new file mode 100644 index 0000000..c656d8a --- /dev/null +++ b/src/main/resources/data/growthcraft_milk/recipes/yogurt_grape_purple.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "planks", + "ingredients": [ + { + "tag": "growthcraft_milk:milk_buckets" + }, + { + "item": "growthcraft_cellar:grape_purple" + }, + { + "item": "growthcraft_milk:starter_culture" + }, + { + "item": "minecraft:bowl" + } + ], + "result": { + "item": "growthcraft_milk:yogurt_grape_purple", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_milk/recipes/yogurt_grape_red.json b/src/main/resources/data/growthcraft_milk/recipes/yogurt_grape_red.json new file mode 100644 index 0000000..c6447a7 --- /dev/null +++ b/src/main/resources/data/growthcraft_milk/recipes/yogurt_grape_red.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "planks", + "ingredients": [ + { + "tag": "growthcraft_milk:milk_buckets" + }, + { + "item": "growthcraft_cellar:grape_red" + }, + { + "item": "growthcraft_milk:starter_culture" + }, + { + "item": "minecraft:bowl" + } + ], + "result": { + "item": "growthcraft_milk:yogurt_grape_red", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_milk/recipes/yogurt_grape_white.json b/src/main/resources/data/growthcraft_milk/recipes/yogurt_grape_white.json new file mode 100644 index 0000000..ba6fa91 --- /dev/null +++ b/src/main/resources/data/growthcraft_milk/recipes/yogurt_grape_white.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "planks", + "ingredients": [ + { + "tag": "growthcraft_milk:milk_buckets" + }, + { + "item": "growthcraft_cellar:grape_white" + }, + { + "item": "growthcraft_milk:starter_culture" + }, + { + "item": "minecraft:bowl" + } + ], + "result": { + "item": "growthcraft_milk:yogurt_grape_white", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_milk/recipes/yogurt_honey.json b/src/main/resources/data/growthcraft_milk/recipes/yogurt_honey.json new file mode 100644 index 0000000..264269c --- /dev/null +++ b/src/main/resources/data/growthcraft_milk/recipes/yogurt_honey.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "planks", + "ingredients": [ + { + "tag": "growthcraft_milk:milk_buckets" + }, + { + "item": "growthcraft_apiary:honey_comb_full" + }, + { + "item": "growthcraft_milk:starter_culture" + }, + { + "item": "minecraft:bowl" + } + ], + "result": { + "item": "growthcraft_milk:yogurt_honey", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_milk/recipes/yogurt_plain.json b/src/main/resources/data/growthcraft_milk/recipes/yogurt_plain.json new file mode 100644 index 0000000..10c4c67 --- /dev/null +++ b/src/main/resources/data/growthcraft_milk/recipes/yogurt_plain.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "planks", + "ingredients": [ + { + "tag": "growthcraft_milk:milk_buckets" + }, + { + "item": "growthcraft_milk:starter_culture" + }, + { + "item": "minecraft:bowl" + } + ], + "result": { + "item": "growthcraft_milk:yogurt_plain", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_milk/recipes/yogurt_pumpkin.json b/src/main/resources/data/growthcraft_milk/recipes/yogurt_pumpkin.json new file mode 100644 index 0000000..7016cd2 --- /dev/null +++ b/src/main/resources/data/growthcraft_milk/recipes/yogurt_pumpkin.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "planks", + "ingredients": [ + { + "tag": "growthcraft_milk:milk_buckets" + }, + { + "item": "minecraft:pumpkin" + }, + { + "item": "growthcraft_milk:starter_culture" + }, + { + "item": "minecraft:bowl" + } + ], + "result": { + "item": "growthcraft_milk:yogurt_pumpkin", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_milk/recipes/yogurt_watermelon.json b/src/main/resources/data/growthcraft_milk/recipes/yogurt_watermelon.json new file mode 100644 index 0000000..1f39448 --- /dev/null +++ b/src/main/resources/data/growthcraft_milk/recipes/yogurt_watermelon.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "planks", + "ingredients": [ + { + "tag": "growthcraft_milk:milk_buckets" + }, + { + "item": "minecraft:melon_slice" + }, + { + "item": "growthcraft_milk:starter_culture" + }, + { + "item": "minecraft:bowl" + } + ], + "result": { + "item": "growthcraft_milk:yogurt_watermelon", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_milk/tags/entity_types/milkable.json b/src/main/resources/data/growthcraft_milk/tags/entity_types/milkable.json new file mode 100644 index 0000000..96f6df6 --- /dev/null +++ b/src/main/resources/data/growthcraft_milk/tags/entity_types/milkable.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "minecraft:cow", + "minecraft:sheep" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_milk/tags/items/milk_buckets.json b/src/main/resources/data/growthcraft_milk/tags/items/milk_buckets.json new file mode 100644 index 0000000..13f48c6 --- /dev/null +++ b/src/main/resources/data/growthcraft_milk/tags/items/milk_buckets.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "growthcraft_milk:milk_fluid_bucket", + "growthcraft_milk:butter_milk_fluid_bucket" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_milk/tags/items/mixing_vat_tools.json b/src/main/resources/data/growthcraft_milk/tags/items/mixing_vat_tools.json new file mode 100644 index 0000000..9573f50 --- /dev/null +++ b/src/main/resources/data/growthcraft_milk/tags/items/mixing_vat_tools.json @@ -0,0 +1,8 @@ +{ + "replace": false, + "values": [ + "#forge:tools/swords", + "#forge:rods/wooden", + "growthcraft_milk:cheese_cloth" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_rice/loot_tables/blocks/cultivated_farmland.json b/src/main/resources/data/growthcraft_rice/loot_tables/blocks/cultivated_farmland.json new file mode 100644 index 0000000..6ee2d52 --- /dev/null +++ b/src/main/resources/data/growthcraft_rice/loot_tables/blocks/cultivated_farmland.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:dirt" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_rice/loot_tables/blocks/rice_crop.json b/src/main/resources/data/growthcraft_rice/loot_tables/blocks/rice_crop.json new file mode 100644 index 0000000..7c2e580 --- /dev/null +++ b/src/main/resources/data/growthcraft_rice/loot_tables/blocks/rice_crop.json @@ -0,0 +1,62 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1.0, + "entries": [ + { + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "growthcraft_rice:rice_crop", + "properties": { + "age": "7" + } + } + ], + "name": "growthcraft_rice:rice_stalk" + } + ] + } + ] + }, + { + "rolls": 1.0, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:apply_bonus", + "enchantment": "minecraft:fortune", + "formula": "minecraft:binomial_with_bonus_count", + "parameters": { + "extra": 3, + "probability": 0.5714286 + } + } + ], + "name": "growthcraft_rice:rice_stalk" + } + ], + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "growthcraft_rice:rice_crop", + "properties": { + "age": "7" + } + } + ] + } + ], + "functions": [ + { + "function": "minecraft:explosion_decay" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_rice/recipes/brew_kettle_rice_water_from_growthcraft_rice.json b/src/main/resources/data/growthcraft_rice/recipes/brew_kettle_rice_water_from_growthcraft_rice.json new file mode 100644 index 0000000..d732c1f --- /dev/null +++ b/src/main/resources/data/growthcraft_rice/recipes/brew_kettle_rice_water_from_growthcraft_rice.json @@ -0,0 +1,23 @@ +{ + "type": "growthcraft_cellar:brew_kettle_recipe", + "requires_heat": true, + "requires_lid": "false", + "processing_time": 300, + "by_product_chance": 1, + "input_fluid": { + "fluid": "minecraft:water", + "amount": 125 + }, + "input_item": { + "item": "growthcraft_rice:rice", + "count": 1 + }, + "output_fluid": { + "fluid": "growthcraft_rice:rice_water_fluid", + "amount": 125 + }, + "by_product": { + "item": "minecraft:bone_meal", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_rice/recipes/cultivator.json b/src/main/resources/data/growthcraft_rice/recipes/cultivator.json new file mode 100644 index 0000000..4a13bd0 --- /dev/null +++ b/src/main/resources/data/growthcraft_rice/recipes/cultivator.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "iIi", + "iSi", + " S " + ], + "key": { + "I": { + "tag": "forge:ingots/iron" + }, + "i": { + "tag": "forge:nuggets/iron" + }, + "S": { + "tag": "forge:rods/wooden" + } + }, + "result": { + "item": "growthcraft_rice:cultivator" + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_rice/recipes/culture_jar_starter_yeast_seishu_from_rice_water.json b/src/main/resources/data/growthcraft_rice/recipes/culture_jar_starter_yeast_seishu_from_rice_water.json new file mode 100644 index 0000000..b225b50 --- /dev/null +++ b/src/main/resources/data/growthcraft_rice/recipes/culture_jar_starter_yeast_seishu_from_rice_water.json @@ -0,0 +1,13 @@ +{ + "type": "growthcraft_cellar:culture_jar_starter_recipe", + "processing_time": 4800, + "requires_heat_source": true, + "input_fluid": { + "fluid": "growthcraft_rice:rice_water_fluid", + "amount": 1000 + }, + "output_item": { + "item": "growthcraft_rice:yeast_seishu", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_rice/recipes/culture_jar_yeast_seishu_from_rice_water.json b/src/main/resources/data/growthcraft_rice/recipes/culture_jar_yeast_seishu_from_rice_water.json new file mode 100644 index 0000000..ebb0754 --- /dev/null +++ b/src/main/resources/data/growthcraft_rice/recipes/culture_jar_yeast_seishu_from_rice_water.json @@ -0,0 +1,13 @@ +{ + "type": "growthcraft_cellar:culture_jar_recipe", + "processing_time": 1200, + "requires_heat_source": true, + "input_fluid": { + "fluid": "growthcraft_rice:rice_water_fluid", + "amount": 250 + }, + "input_item": { + "item": "growthcraft_rice:yeast_seishu", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_rice/recipes/fermentation_barrel_rice_wine.json b/src/main/resources/data/growthcraft_rice/recipes/fermentation_barrel_rice_wine.json new file mode 100644 index 0000000..cc27874 --- /dev/null +++ b/src/main/resources/data/growthcraft_rice/recipes/fermentation_barrel_rice_wine.json @@ -0,0 +1,27 @@ +{ + "type": "growthcraft_cellar:fermentation_barrel_recipe", + "processing_time": 1200, + "ingredient_item": { + "item": "growthcraft_cellar:yeast_bayanus", + "count": 1 + }, + "ingredient_fluid": { + "fluid": "growthcraft_rice:rice_water_fluid", + "amount": 1000 + }, + "result": { + "fluid": "growthcraft_rice:rice_wine_fluid", + "amount": 1000 + }, + "effects": [ + { + "effect": "minecraft:strength", + "duration": 2400, + "amplifier": 1 + } + ], + "bottle": { + "item": "growthcraft_cellar:potion_wine" + }, + "color": "0xEAA6D2" +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_rice/recipes/fermentation_barrel_sake.json b/src/main/resources/data/growthcraft_rice/recipes/fermentation_barrel_sake.json new file mode 100644 index 0000000..587ea1b --- /dev/null +++ b/src/main/resources/data/growthcraft_rice/recipes/fermentation_barrel_sake.json @@ -0,0 +1,27 @@ +{ + "type": "growthcraft_cellar:fermentation_barrel_recipe", + "processing_time": 1800, + "ingredient_item": { + "item": "growthcraft_rice:yeast_seishu", + "count": 1 + }, + "ingredient_fluid": { + "fluid": "growthcraft_rice:rice_water_fluid", + "amount": 1000 + }, + "result": { + "fluid": "growthcraft_rice:sake_fluid", + "amount": 1000 + }, + "effects": [ + { + "effect": "minecraft:strength", + "duration": 6000, + "amplifier": 2 + } + ], + "bottle": { + "item": "growthcraft_cellar:potion_wine" + }, + "color": "0xE0E2DC" +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_rice/recipes/knife.json b/src/main/resources/data/growthcraft_rice/recipes/knife.json new file mode 100644 index 0000000..ec9e1e0 --- /dev/null +++ b/src/main/resources/data/growthcraft_rice/recipes/knife.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + " I", + " I ", + "S " + ], + "key": { + "I": { + "tag": "forge:ingots/iron" + }, + "S": { + "tag": "forge:rods/wooden" + } + }, + "result": { + "item": "growthcraft_rice:knife" + } +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_rice/recipes/rice.json b/src/main/resources/data/growthcraft_rice/recipes/rice.json new file mode 100644 index 0000000..3df6ae3 --- /dev/null +++ b/src/main/resources/data/growthcraft_rice/recipes/rice.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "growthcraft_rice:rice_stalk" + }, + "result": "growthcraft_rice:rice", + "count": 1 +} \ No newline at end of file diff --git a/src/main/resources/data/growthcraft_rice/recipes/sushi_roll.json b/src/main/resources/data/growthcraft_rice/recipes/sushi_roll.json new file mode 100644 index 0000000..80a6b1d --- /dev/null +++ b/src/main/resources/data/growthcraft_rice/recipes/sushi_roll.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "F", + "R", + "K" + ], + "key": { + "K": { + "item": "minecraft:dried_kelp" + }, + "R": { + "item": "growthcraft_rice:rice_cooked" + }, + "F": { + "tag": "minecraft:fishes" + } + }, + "result": { + "item": "growthcraft_rice:sushi_roll" + } +} \ No newline at end of file diff --git a/src/main/resources/data/minecraft/tags/blocks/buttons.json b/src/main/resources/data/minecraft/tags/blocks/buttons.json new file mode 100644 index 0000000..1344304 --- /dev/null +++ b/src/main/resources/data/minecraft/tags/blocks/buttons.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "growthcraft_apples:apple_plank_button", + "growthcraft_bamboo:bamboo_plank_button" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/minecraft/tags/blocks/doors.json b/src/main/resources/data/minecraft/tags/blocks/doors.json new file mode 100644 index 0000000..033a211 --- /dev/null +++ b/src/main/resources/data/minecraft/tags/blocks/doors.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "growthcraft_apples:apple_plank_door", + "growthcraft_bamboo:bamboo_plank_door" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/minecraft/tags/blocks/fence_gates.json b/src/main/resources/data/minecraft/tags/blocks/fence_gates.json new file mode 100644 index 0000000..910efb2 --- /dev/null +++ b/src/main/resources/data/minecraft/tags/blocks/fence_gates.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "growthcraft_apples:apple_plank_fence_gate", + "growthcraft_bamboo:bamboo_plank_fence_gate" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/minecraft/tags/blocks/fences.json b/src/main/resources/data/minecraft/tags/blocks/fences.json new file mode 100644 index 0000000..bc6f3f2 --- /dev/null +++ b/src/main/resources/data/minecraft/tags/blocks/fences.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "growthcraft_apples:apple_plank_fence", + "growthcraft_bamboo:bamboo_plank_fence" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/minecraft/tags/blocks/leaves.json b/src/main/resources/data/minecraft/tags/blocks/leaves.json new file mode 100644 index 0000000..e2bc50d --- /dev/null +++ b/src/main/resources/data/minecraft/tags/blocks/leaves.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "growthcraft_apples:apple_tree_leaves" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/minecraft/tags/blocks/logs.json b/src/main/resources/data/minecraft/tags/blocks/logs.json new file mode 100644 index 0000000..b343959 --- /dev/null +++ b/src/main/resources/data/minecraft/tags/blocks/logs.json @@ -0,0 +1,11 @@ +{ + "replace": false, + "values": [ + "growthcraft_bamboo:bamboo_wood", + "growthcraft_bamboo:bamboo_wood_log", + "growthcraft_bamboo:bamboo_wood_log_stripped", + "growthcraft_apples:apple_wood", + "growthcraft_apples:apple_wood_log", + "growthcraft_apples:apple_wood_log_stripped" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/minecraft/tags/blocks/logs_that_burn.json b/src/main/resources/data/minecraft/tags/blocks/logs_that_burn.json new file mode 100644 index 0000000..d5b1a71 --- /dev/null +++ b/src/main/resources/data/minecraft/tags/blocks/logs_that_burn.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "#growthcraft_bamboo:bamboo_wood" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/minecraft/tags/blocks/mineable/axe.json b/src/main/resources/data/minecraft/tags/blocks/mineable/axe.json new file mode 100644 index 0000000..0bf66ef --- /dev/null +++ b/src/main/resources/data/minecraft/tags/blocks/mineable/axe.json @@ -0,0 +1,26 @@ +{ + "replace": false, + "values": [ + "growthcraft_apiary:bee_box_acacia", + "growthcraft_apiary:bee_box_birch", + "growthcraft_apiary:bee_box_crimson", + "growthcraft_apiary:bee_box_dark_oak", + "growthcraft_apiary:bee_box_jungle", + "growthcraft_apiary:bee_box_oak", + "growthcraft_apiary:bee_box_spruce", + "growthcraft_apiary:bee_box_warped", + "growthcraft_apples:bee_box_apple", + "growthcraft_bamboo:bee_box_bamboo", + "growthcraft_milk:churn", + "growthcraft_cellar:fermentation_barrel_oak", + "growthcraft:rope_linen_acacia_fence", + "growthcraft:rope_linen_birch_fence", + "growthcraft:rope_linen_crimson_fence", + "growthcraft:rope_linen_dark_oak_fence", + "growthcraft:rope_linen_jungle_fence", + "growthcraft:rope_linen_nether_brick_fence", + "growthcraft:rope_linen_oak_fence", + "growthcraft:rope_linen_spruce_fence", + "growthcraft:rope_linen_warped_fence" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/minecraft/tags/blocks/mineable/hoe.json b/src/main/resources/data/minecraft/tags/blocks/mineable/hoe.json new file mode 100644 index 0000000..e14f1ee --- /dev/null +++ b/src/main/resources/data/minecraft/tags/blocks/mineable/hoe.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + + ] +} \ No newline at end of file diff --git a/src/main/resources/data/minecraft/tags/blocks/mineable/pickaxe.json b/src/main/resources/data/minecraft/tags/blocks/mineable/pickaxe.json new file mode 100644 index 0000000..80c3c9b --- /dev/null +++ b/src/main/resources/data/minecraft/tags/blocks/mineable/pickaxe.json @@ -0,0 +1,13 @@ +{ + "replace": false, + "values": [ + "growthcraft:salt_ore", + "growthcraft_milk:pancheon", + "growthcraft_milk:cheese_press", + "growthcraft_cellar:fruit_press", + "growthcraft_cellar:fruit_press_piston", + "growthcraft_cellar:brew_kettle", + "growthcraft_milk:mixing_vat", + "growthcraft_cellar:roaster" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/minecraft/tags/blocks/mineable/shovel.json b/src/main/resources/data/minecraft/tags/blocks/mineable/shovel.json new file mode 100644 index 0000000..e14f1ee --- /dev/null +++ b/src/main/resources/data/minecraft/tags/blocks/mineable/shovel.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + + ] +} \ No newline at end of file diff --git a/src/main/resources/data/minecraft/tags/blocks/needs_diamond_tool.json b/src/main/resources/data/minecraft/tags/blocks/needs_diamond_tool.json new file mode 100644 index 0000000..a22514f --- /dev/null +++ b/src/main/resources/data/minecraft/tags/blocks/needs_diamond_tool.json @@ -0,0 +1,5 @@ +{ + "replace": false, + "values": [ + ] +} \ No newline at end of file diff --git a/src/main/resources/data/minecraft/tags/blocks/needs_iron_tool.json b/src/main/resources/data/minecraft/tags/blocks/needs_iron_tool.json new file mode 100644 index 0000000..a22514f --- /dev/null +++ b/src/main/resources/data/minecraft/tags/blocks/needs_iron_tool.json @@ -0,0 +1,5 @@ +{ + "replace": false, + "values": [ + ] +} \ No newline at end of file diff --git a/src/main/resources/data/minecraft/tags/blocks/needs_stone_tool.json b/src/main/resources/data/minecraft/tags/blocks/needs_stone_tool.json new file mode 100644 index 0000000..82a832d --- /dev/null +++ b/src/main/resources/data/minecraft/tags/blocks/needs_stone_tool.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "growthcraft:salt_ore" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/minecraft/tags/blocks/planks.json b/src/main/resources/data/minecraft/tags/blocks/planks.json new file mode 100644 index 0000000..94c6476 --- /dev/null +++ b/src/main/resources/data/minecraft/tags/blocks/planks.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "growthcraft_apples:apple_plank", + "growthcraft_bamboo:bamboo_plank" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/minecraft/tags/blocks/pressure_plates.json b/src/main/resources/data/minecraft/tags/blocks/pressure_plates.json new file mode 100644 index 0000000..7a98cb0 --- /dev/null +++ b/src/main/resources/data/minecraft/tags/blocks/pressure_plates.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "growthcraft_apples:apple_plank_pressure_plate", + "growthcraft_bamboo:bamboo_plank_pressure_plate" + ] +} \ 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 0000000..51eebb9 --- /dev/null +++ b/src/main/resources/data/minecraft/tags/blocks/slabs.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "growthcraft_apples:apple_plank_slab", + "growthcraft_bamboo:bamboo_plank_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 0000000..6bc005b --- /dev/null +++ b/src/main/resources/data/minecraft/tags/blocks/stairs.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "growthcraft_apples:apple_plank_stairs", + "growthcraft_bamboo:bamboo_plank_stairs" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/minecraft/tags/blocks/trapdoors.json b/src/main/resources/data/minecraft/tags/blocks/trapdoors.json new file mode 100644 index 0000000..6dcf52f --- /dev/null +++ b/src/main/resources/data/minecraft/tags/blocks/trapdoors.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "growthcraft_bamboo:bamboo_plank_trapdoor", + "growthcraft_apples:apple_plank_trapdoor" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/minecraft/tags/blocks/wooden_buttons.json b/src/main/resources/data/minecraft/tags/blocks/wooden_buttons.json new file mode 100644 index 0000000..1344304 --- /dev/null +++ b/src/main/resources/data/minecraft/tags/blocks/wooden_buttons.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "growthcraft_apples:apple_plank_button", + "growthcraft_bamboo:bamboo_plank_button" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/minecraft/tags/blocks/wooden_doors.json b/src/main/resources/data/minecraft/tags/blocks/wooden_doors.json new file mode 100644 index 0000000..033a211 --- /dev/null +++ b/src/main/resources/data/minecraft/tags/blocks/wooden_doors.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "growthcraft_apples:apple_plank_door", + "growthcraft_bamboo:bamboo_plank_door" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/minecraft/tags/blocks/wooden_fences.json b/src/main/resources/data/minecraft/tags/blocks/wooden_fences.json new file mode 100644 index 0000000..bc6f3f2 --- /dev/null +++ b/src/main/resources/data/minecraft/tags/blocks/wooden_fences.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "growthcraft_apples:apple_plank_fence", + "growthcraft_bamboo:bamboo_plank_fence" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/minecraft/tags/blocks/wooden_pressure_plates.json b/src/main/resources/data/minecraft/tags/blocks/wooden_pressure_plates.json new file mode 100644 index 0000000..7a98cb0 --- /dev/null +++ b/src/main/resources/data/minecraft/tags/blocks/wooden_pressure_plates.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "growthcraft_apples:apple_plank_pressure_plate", + "growthcraft_bamboo:bamboo_plank_pressure_plate" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/minecraft/tags/blocks/wooden_slabs.json b/src/main/resources/data/minecraft/tags/blocks/wooden_slabs.json new file mode 100644 index 0000000..51eebb9 --- /dev/null +++ b/src/main/resources/data/minecraft/tags/blocks/wooden_slabs.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "growthcraft_apples:apple_plank_slab", + "growthcraft_bamboo:bamboo_plank_slab" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/minecraft/tags/blocks/wooden_stairs.json b/src/main/resources/data/minecraft/tags/blocks/wooden_stairs.json new file mode 100644 index 0000000..6bc005b --- /dev/null +++ b/src/main/resources/data/minecraft/tags/blocks/wooden_stairs.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "growthcraft_apples:apple_plank_stairs", + "growthcraft_bamboo:bamboo_plank_stairs" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/minecraft/tags/blocks/wooden_trapdoors.json b/src/main/resources/data/minecraft/tags/blocks/wooden_trapdoors.json new file mode 100644 index 0000000..2a0dd50 --- /dev/null +++ b/src/main/resources/data/minecraft/tags/blocks/wooden_trapdoors.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "growthcraft_apples:apple_plank_trapdoor", + "growthcraft_bamboo:bamboo_plank_trapdoor" + ] +} \ 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 0000000..e14f1ee --- /dev/null +++ b/src/main/resources/data/minecraft/tags/fluids/water.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + + ] +} \ No newline at end of file diff --git a/src/main/resources/data/minecraft/tags/items/buttons.json b/src/main/resources/data/minecraft/tags/items/buttons.json new file mode 100644 index 0000000..1344304 --- /dev/null +++ b/src/main/resources/data/minecraft/tags/items/buttons.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "growthcraft_apples:apple_plank_button", + "growthcraft_bamboo:bamboo_plank_button" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/minecraft/tags/items/doors.json b/src/main/resources/data/minecraft/tags/items/doors.json new file mode 100644 index 0000000..033a211 --- /dev/null +++ b/src/main/resources/data/minecraft/tags/items/doors.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "growthcraft_apples:apple_plank_door", + "growthcraft_bamboo:bamboo_plank_door" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/minecraft/tags/items/leaves.json b/src/main/resources/data/minecraft/tags/items/leaves.json new file mode 100644 index 0000000..e2bc50d --- /dev/null +++ b/src/main/resources/data/minecraft/tags/items/leaves.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "growthcraft_apples:apple_tree_leaves" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/minecraft/tags/items/logs.json b/src/main/resources/data/minecraft/tags/items/logs.json new file mode 100644 index 0000000..8ecbbdb --- /dev/null +++ b/src/main/resources/data/minecraft/tags/items/logs.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "growthcraft_apples:apple_wood_log", + "growthcraft_bamboo:bamboo_wood_log" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/minecraft/tags/items/planks.json b/src/main/resources/data/minecraft/tags/items/planks.json new file mode 100644 index 0000000..94c6476 --- /dev/null +++ b/src/main/resources/data/minecraft/tags/items/planks.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "growthcraft_apples:apple_plank", + "growthcraft_bamboo:bamboo_plank" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/minecraft/tags/items/trapdoors.json b/src/main/resources/data/minecraft/tags/items/trapdoors.json new file mode 100644 index 0000000..6dcf52f --- /dev/null +++ b/src/main/resources/data/minecraft/tags/items/trapdoors.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "growthcraft_bamboo:bamboo_plank_trapdoor", + "growthcraft_apples:apple_plank_trapdoor" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/minecraft/tags/items/wooden_buttons.json b/src/main/resources/data/minecraft/tags/items/wooden_buttons.json new file mode 100644 index 0000000..1344304 --- /dev/null +++ b/src/main/resources/data/minecraft/tags/items/wooden_buttons.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "growthcraft_apples:apple_plank_button", + "growthcraft_bamboo:bamboo_plank_button" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/minecraft/tags/items/wooden_doors.json b/src/main/resources/data/minecraft/tags/items/wooden_doors.json new file mode 100644 index 0000000..033a211 --- /dev/null +++ b/src/main/resources/data/minecraft/tags/items/wooden_doors.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "growthcraft_apples:apple_plank_door", + "growthcraft_bamboo:bamboo_plank_door" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/minecraft/tags/items/wooden_fences.json b/src/main/resources/data/minecraft/tags/items/wooden_fences.json new file mode 100644 index 0000000..bc6f3f2 --- /dev/null +++ b/src/main/resources/data/minecraft/tags/items/wooden_fences.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "growthcraft_apples:apple_plank_fence", + "growthcraft_bamboo:bamboo_plank_fence" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/minecraft/tags/items/wooden_pressure_plates.json b/src/main/resources/data/minecraft/tags/items/wooden_pressure_plates.json new file mode 100644 index 0000000..7a98cb0 --- /dev/null +++ b/src/main/resources/data/minecraft/tags/items/wooden_pressure_plates.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "growthcraft_apples:apple_plank_pressure_plate", + "growthcraft_bamboo:bamboo_plank_pressure_plate" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/minecraft/tags/items/wooden_stairs.json b/src/main/resources/data/minecraft/tags/items/wooden_stairs.json new file mode 100644 index 0000000..6bc005b --- /dev/null +++ b/src/main/resources/data/minecraft/tags/items/wooden_stairs.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "growthcraft_apples:apple_plank_stairs", + "growthcraft_bamboo:bamboo_plank_stairs" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/minecraft/tags/items/wooden_trapdoors.json b/src/main/resources/data/minecraft/tags/items/wooden_trapdoors.json new file mode 100644 index 0000000..2a0dd50 --- /dev/null +++ b/src/main/resources/data/minecraft/tags/items/wooden_trapdoors.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "growthcraft_apples:apple_plank_trapdoor", + "growthcraft_bamboo:bamboo_plank_trapdoor" + ] +} \ No newline at end of file diff --git a/src/main/resources/growthcraft_apples_logo.png b/src/main/resources/growthcraft_apples_logo.png new file mode 100644 index 0000000..7f7b4e4 Binary files /dev/null and b/src/main/resources/growthcraft_apples_logo.png differ diff --git a/src/main/resources/growthcraft_bamboo_logo.png b/src/main/resources/growthcraft_bamboo_logo.png new file mode 100644 index 0000000..0ffbc77 Binary files /dev/null and b/src/main/resources/growthcraft_bamboo_logo.png differ diff --git a/src/main/resources/growthcraft_bees_logo.png b/src/main/resources/growthcraft_bees_logo.png new file mode 100644 index 0000000..a395596 Binary files /dev/null and b/src/main/resources/growthcraft_bees_logo.png differ diff --git a/src/main/resources/growthcraft_cellar_logo.png b/src/main/resources/growthcraft_cellar_logo.png new file mode 100644 index 0000000..cd89d73 Binary files /dev/null and b/src/main/resources/growthcraft_cellar_logo.png differ diff --git a/src/main/resources/growthcraft_core_logo.png b/src/main/resources/growthcraft_core_logo.png new file mode 100644 index 0000000..828927a Binary files /dev/null and b/src/main/resources/growthcraft_core_logo.png differ diff --git a/src/main/resources/growthcraft_fishtrap_logo.png b/src/main/resources/growthcraft_fishtrap_logo.png new file mode 100644 index 0000000..41d6298 Binary files /dev/null and b/src/main/resources/growthcraft_fishtrap_logo.png differ diff --git a/src/main/resources/growthcraft_grapes_logo.png b/src/main/resources/growthcraft_grapes_logo.png new file mode 100644 index 0000000..a603fef Binary files /dev/null and b/src/main/resources/growthcraft_grapes_logo.png differ diff --git a/src/main/resources/growthcraft_hops_logo.png b/src/main/resources/growthcraft_hops_logo.png new file mode 100644 index 0000000..d0c99d4 Binary files /dev/null and b/src/main/resources/growthcraft_hops_logo.png differ diff --git a/src/main/resources/growthcraft_logo.png b/src/main/resources/growthcraft_logo.png new file mode 100644 index 0000000..828927a Binary files /dev/null and b/src/main/resources/growthcraft_logo.png differ diff --git a/src/main/resources/growthcraft_milk_logo.png b/src/main/resources/growthcraft_milk_logo.png new file mode 100644 index 0000000..377beae Binary files /dev/null and b/src/main/resources/growthcraft_milk_logo.png differ diff --git a/src/main/resources/growthcraft_rice_logo.png b/src/main/resources/growthcraft_rice_logo.png new file mode 100644 index 0000000..7d3c2f7 Binary files /dev/null and b/src/main/resources/growthcraft_rice_logo.png differ diff --git a/src/main/resources/utils/utilDuplicateResourceFiles.py b/src/main/resources/utils/utilDuplicateResourceFiles.py new file mode 100644 index 0000000..347c324 --- /dev/null +++ b/src/main/resources/utils/utilDuplicateResourceFiles.py @@ -0,0 +1,34 @@ +import shutil + +templateBaseString = "honey" + +baseStrings = [ + "cheese_base" +] + +for baseString in baseStrings: + if baseString == templateBaseString: + continue + sourceFiles = [ + "../assets/growthcraft_apiary/textures/block/fluid/%s_fluid.png" % templateBaseString, + "../assets/growthcraft_apiary/textures/block/fluid/%s_fluid_flowing.png" % templateBaseString, + "../assets/growthcraft_apiary/textures/block/fluid/%s_fluid_flowing.png.mcmeta" % templateBaseString, + "../assets/growthcraft_apiary/textures/block/fluid/%s_fluid_overlay.png" % templateBaseString, + "../assets/growthcraft_apiary/textures/block/fluid/%s_fluid_still.png" % templateBaseString, + "../assets/growthcraft_apiary/textures/block/fluid/%s_fluid_still.png.mcmeta" % templateBaseString + ] + targetFiles = [ + "../assets/growthcraft_milk/textures/block/fluid/%s_fluid.png" % baseString, + "../assets/growthcraft_milk/textures/block/fluid/%s_fluid_flowing.png" % baseString, + "../assets/growthcraft_milk/textures/block/fluid/%s_fluid_flowing.png.mcmeta" % baseString, + "../assets/growthcraft_milk/textures/block/fluid/%s_fluid_overlay.png" % baseString, + "../assets/growthcraft_milk/textures/block/fluid/%s_fluid_still.png" % baseString, + "../assets/growthcraft_milk/textures/block/fluid/%s_fluid_still.png.mcmeta" % baseString + ] + for x in range(0, len(sourceFiles)): + shutil.copy(sourceFiles[x], targetFiles[x]) + #with open(targetFiles[x], 'r') as file: + # contents = file.read() + # contents = contents.replace(templateBaseString, baseString) + #with open(targetFiles[x], 'w') as file: + # file.write(contents)