diff --git a/src/main/java/techreborn/TechRebornClient.java b/src/main/java/techreborn/TechRebornClient.java index 5a4906e4d..fe6909151 100644 --- a/src/main/java/techreborn/TechRebornClient.java +++ b/src/main/java/techreborn/TechRebornClient.java @@ -151,6 +151,7 @@ public class TechRebornClient implements ClientModInitializer { BlockRenderLayerMap.INSTANCE.putBlock(TRContent.Machine.ALARM.block, RenderLayer.getCutout()); BlockRenderLayerMap.INSTANCE.putBlock(TRContent.RUBBER_SAPLING, RenderLayer.getCutout()); BlockRenderLayerMap.INSTANCE.putBlock(TRContent.REINFORCED_GLASS, RenderLayer.getCutout()); + BlockRenderLayerMap.INSTANCE.putBlock(TRContent.Machine.RESIN_BASIN.block, RenderLayer.getCutout()); BlockRenderLayerMap.INSTANCE.putBlock(TRContent.RUBBER_LEAVES, RenderLayer.getCutoutMipped()); diff --git a/src/main/java/techreborn/blockentity/machine/tier1/ResinBasinBlockEntity.java b/src/main/java/techreborn/blockentity/machine/tier1/ResinBasinBlockEntity.java new file mode 100644 index 000000000..bfc2fc008 --- /dev/null +++ b/src/main/java/techreborn/blockentity/machine/tier1/ResinBasinBlockEntity.java @@ -0,0 +1,247 @@ +/* + * This file is part of TechReborn, licensed under the MIT License (MIT). + * + * Copyright (c) 2020 TechReborn + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package techreborn.blockentity.machine.tier1; + +import net.minecraft.block.BlockState; +import net.minecraft.block.Blocks; +import net.minecraft.block.entity.HopperBlockEntity; +import net.minecraft.entity.ItemEntity; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.inventory.Inventory; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.sound.SoundCategory; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Direction; +import net.minecraft.world.World; +import reborncore.common.blockentity.MachineBaseBlockEntity; +import reborncore.common.util.WorldUtils; +import techreborn.blocks.machine.tier1.ResinBasinBlock; +import techreborn.blocks.misc.BlockRubberLog; +import techreborn.config.TechRebornConfig; +import techreborn.init.ModSounds; +import techreborn.init.TRBlockEntities; +import techreborn.init.TRContent; + +import static reborncore.api.items.InventoryUtils.getInventoryAt; + +public class ResinBasinBlockEntity extends MachineBaseBlockEntity { + private Direction direction = Direction.NORTH; + + // State + private boolean isPouring = false; + private boolean isFull = false; + + private int pouringTimer = 0; + + public ResinBasinBlockEntity() { + super(TRBlockEntities.RESIN_BASIN); + } + + @Override + public void tick() { + super.tick(); + if (world == null || world.isClient) return; + + boolean shouldUpdateState = false; + + if (isPouring) { + pouringTimer--; + + // Play pouring audio + if (world.getTime() % 20 == 0) { + world.playSound(null, pos, ModSounds.SAP_EXTRACT, SoundCategory.BLOCKS, 1F, 1F); + } + + if (pouringTimer == 0) { + isPouring = false; + isFull = true; + shouldUpdateState = true; + } + } + + // Try and deposit + if (isFull) { + // Find a rubber log + Inventory invBelow = getInventoryBelow(); + if (invBelow != null) { + + ItemStack out = new ItemStack(TRContent.Parts.SAP, 1); + out = HopperBlockEntity.transfer(null, invBelow, out, Direction.UP); + + if (out.isEmpty()) { + // Successfully deposited + isFull = false; + shouldUpdateState = true; + } + } + } + + boolean readyToHarvest = !isFull && !isPouring; + + // Ensuring it's placed on a log + if ((readyToHarvest || world.getTime() % 20 == 0) && !validPlacement()) { + // Not placed on log, drop on ground + world.setBlockState(pos, Blocks.AIR.getDefaultState()); + WorldUtils.dropItem(TRContent.Machine.RESIN_BASIN.asItem(), world, pos); + return; + } + + if (readyToHarvest) { + // Check for rubber + if (world.getTime() % TechRebornConfig.checkForSapTime == 0) { + BlockPos targetRubber = getLogWithSap(); + + if (targetRubber != null) { + // We have a valid sap log, harvest it + world.setBlockState(targetRubber, world.getBlockState(targetRubber).with(BlockRubberLog.HAS_SAP, false).with(BlockRubberLog.SAP_SIDE, Direction.fromHorizontal(0))); + isPouring = true; + pouringTimer = TechRebornConfig.sapTimeTicks; + shouldUpdateState = true; + } + } + } + + if (shouldUpdateState) { + setPouringState(isPouring); + setFullState(isFull); + } + } + + @Override + public void onBreak(World world, PlayerEntity playerEntity, BlockPos blockPos, BlockState blockState) { + super.onBreak(world, playerEntity, blockPos, blockState); + + // Drop a sap if full + if(this.isFull){ + WorldUtils.dropItem(TRContent.Parts.SAP.asItem(), world, pos); + } + } + + @Override + public CompoundTag toTag(CompoundTag tagCompound) { + super.toTag(tagCompound); + tagCompound.putBoolean("isFull", isFull); + + return tagCompound; + } + + @Override + public void fromTag(BlockState blockState, CompoundTag tagCompound) { + super.fromTag(blockState, tagCompound); + + if (tagCompound.contains("isFull")) { + this.isFull = tagCompound.getBoolean("isFull"); + } + } + + @Override + public void onLoad() { + super.onLoad(); + + if (world == null || world.isClient) return; + + // Set facing + direction = world.getBlockState(pos).get(ResinBasinBlock.FACING).getOpposite(); + } + + private Inventory getInventoryBelow() { + return getInventoryAt(this.getWorld(), this.pos.offset(Direction.DOWN)); + } + + private boolean validPlacement() { + return world.getBlockState(this.pos.offset(direction)).getBlock() == TRContent.RUBBER_LOG; + } + + + private BlockPos getLogWithSap() { + // Checking origin block + BlockPos originPos = this.pos.offset(direction); + BlockState originState = world.getBlockState(originPos); + + if (originState.get(BlockRubberLog.HAS_SAP)) { + return originPos; + } + + boolean shouldExit = false; + BlockPos current = originPos; + + // Progress Up + while (!shouldExit) { + current = current.offset(Direction.UP); + + BlockState state = world.getBlockState(current); + if (state.getBlock() == TRContent.RUBBER_LOG) { + if (state.get(BlockRubberLog.HAS_SAP)) { + return current; + } + } else { + shouldExit = true; + } + } + + current = originPos; + shouldExit = false; + // Progress Down + while (!shouldExit) { + current = current.offset(Direction.DOWN); + + BlockState state = world.getBlockState(current); + if (state.getBlock() == TRContent.RUBBER_LOG) { + if (state.get(BlockRubberLog.HAS_SAP)) { + return current; + } + } else { + shouldExit = true; + } + } + + // Could not find a rubber log with sap + return null; + } + + private void setPouringState(boolean value) { + if (world != null) { + world.setBlockState(pos, world.getBlockState(pos).with(ResinBasinBlock.POURING, value)); + } + } + + private void setFullState(boolean value) { + if (world != null) { + world.setBlockState(pos, world.getBlockState(pos).with(ResinBasinBlock.FULL, value)); + } + } + + @Override + public boolean hasSlotConfig() { + return false; + } + + @Override + public boolean canBeUpgraded() { + return false; + } +} diff --git a/src/main/java/techreborn/blocks/machine/tier1/ResinBasinBlock.java b/src/main/java/techreborn/blocks/machine/tier1/ResinBasinBlock.java new file mode 100644 index 000000000..ee91d537c --- /dev/null +++ b/src/main/java/techreborn/blocks/machine/tier1/ResinBasinBlock.java @@ -0,0 +1,99 @@ +package techreborn.blocks.machine.tier1; + +import net.minecraft.block.*; +import net.minecraft.block.entity.BlockEntity; +import net.minecraft.entity.ItemEntity; +import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.state.StateManager; +import net.minecraft.state.property.BooleanProperty; +import net.minecraft.state.property.DirectionProperty; +import net.minecraft.state.property.Properties; +import net.minecraft.text.LiteralText; +import net.minecraft.text.TranslatableText; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Direction; +import net.minecraft.util.shape.VoxelShape; +import net.minecraft.util.shape.VoxelShapes; +import net.minecraft.world.BlockView; +import net.minecraft.world.World; +import reborncore.common.BaseBlockEntityProvider; +import reborncore.common.blockentity.MachineBaseBlockEntity; +import reborncore.common.util.WorldUtils; +import techreborn.init.TRContent; + +import java.util.UUID; +import java.util.function.Supplier; + +public class ResinBasinBlock extends BaseBlockEntityProvider { + + public static DirectionProperty FACING = Properties.HORIZONTAL_FACING; + public static BooleanProperty POURING = BooleanProperty.of("pouring"); + public static BooleanProperty FULL = BooleanProperty.of("full"); + Supplier blockEntityClass; + + public ResinBasinBlock(Supplier blockEntityClass) { + super(Block.Settings.of(Material.WOOD).strength(2F, 2F)); + this.blockEntityClass = blockEntityClass; + + this.setDefaultState( + this.getStateManager().getDefaultState().with(FACING, Direction.NORTH).with(POURING, false).with(FULL, false)); + } + + @Override + public VoxelShape getOutlineShape(BlockState state, BlockView world, BlockPos pos, ShapeContext context) { + return VoxelShapes.cuboid(0, 0, 0, 1, 15 / 16f, 1); + } + + public void setFacing(Direction facing, World world, BlockPos pos) { + world.setBlockState(pos, world.getBlockState(pos).with(FACING, facing)); + } + + // Block + @Override + protected void appendProperties(StateManager.Builder builder) { + FACING = DirectionProperty.of("facing", Direction.Type.HORIZONTAL); + POURING = BooleanProperty.of("pouring"); + FULL = BooleanProperty.of("full"); + builder.add(FACING, POURING, FULL); + } + + public Direction getFacing(BlockState state) { + return state.get(FACING); + } + + @Override + public void onPlaced(World worldIn, BlockPos pos, BlockState state, LivingEntity placer, ItemStack stack) { + super.onPlaced(worldIn, pos, state, placer, stack); + if (worldIn.isClient) return; + + Direction facing = placer.getHorizontalFacing().getOpposite(); + setFacing(facing, worldIn, pos); + + // Drop item if not next to log and yell at user + if (worldIn.getBlockState(pos.offset(facing.getOpposite())).getBlock() != TRContent.RUBBER_LOG) { + worldIn.setBlockState(pos, Blocks.AIR.getDefaultState()); + WorldUtils.dropItem(this.asItem(), worldIn,pos); + placer.sendSystemMessage(new TranslatableText("techreborn.tooltip.invalid_basin_placement"), UUID.randomUUID()); + } + } + + @Override + public BlockEntity createBlockEntity(BlockView worldIn) { + if (blockEntityClass == null) { + return null; + } + return blockEntityClass.get(); + } + + @Override + public void onBreak(World world, BlockPos pos, BlockState state, PlayerEntity player) { + BlockEntity blockEntity = world.getBlockEntity(pos); + if(blockEntity instanceof MachineBaseBlockEntity){ + ((MachineBaseBlockEntity) blockEntity).onBreak(world, player, pos, state); + } + + super.onBreak(world, pos, state, player); + } +} diff --git a/src/main/java/techreborn/config/TechRebornConfig.java b/src/main/java/techreborn/config/TechRebornConfig.java index 0ce6c59b7..2af8b416d 100644 --- a/src/main/java/techreborn/config/TechRebornConfig.java +++ b/src/main/java/techreborn/config/TechRebornConfig.java @@ -565,6 +565,12 @@ public class TechRebornConfig { @Config(config = "misc", category = "nuke", key = "enabled", comment = "Should the nuke explode, set to false to prevent block damage") public static boolean nukeEnabled = true; + @Config(config = "misc", category = "resin_basin", key = "saptime", comment = "How long it takes to harvest one sap (ticks)") + public static int sapTimeTicks = 80; + + @Config(config = "misc", category = "resin_basin", key = "SapCheckTime", comment = "How often to check for sap (will check if world time % this number is zero)") + public static int checkForSapTime = 50; + @Config(config = "misc", category = "general", key = "DispenserScrapbox", comment = "Dispensers will open scrapboxes") public static boolean dispenseScrapboxes = true; diff --git a/src/main/java/techreborn/init/TRBlockEntities.java b/src/main/java/techreborn/init/TRBlockEntities.java index 87bb17d62..e433c1311 100644 --- a/src/main/java/techreborn/init/TRBlockEntities.java +++ b/src/main/java/techreborn/init/TRBlockEntities.java @@ -111,6 +111,7 @@ public class TRBlockEntities { public static final BlockEntityType INDUSTRIAL_SAWMILL = register(IndustrialSawmillBlockEntity::new, "industrial_sawmill", TRContent.Machine.INDUSTRIAL_SAWMILL); public static final BlockEntityType SOLID_FUEL_GENEREATOR = register(SolidFuelGeneratorBlockEntity::new, "solid_fuel_generator", TRContent.Machine.SOLID_FUEL_GENERATOR); public static final BlockEntityType EXTRACTOR = register(ExtractorBlockEntity::new, "extractor", TRContent.Machine.EXTRACTOR); + public static final BlockEntityType RESIN_BASIN = register(ResinBasinBlockEntity::new, "resin_basin", TRContent.Machine.RESIN_BASIN); public static final BlockEntityType COMPRESSOR = register(CompressorBlockEntity::new, "compressor", TRContent.Machine.COMPRESSOR); public static final BlockEntityType ELECTRIC_FURNACE = register(ElectricFurnaceBlockEntity::new, "electric_furnace", TRContent.Machine.ELECTRIC_FURNACE); public static final BlockEntityType SOLAR_PANEL = register(SolarPanelBlockEntity::new, "solar_panel", TRContent.SolarPanels.values()); diff --git a/src/main/java/techreborn/init/TRContent.java b/src/main/java/techreborn/init/TRContent.java index 3810bb527..536141232 100644 --- a/src/main/java/techreborn/init/TRContent.java +++ b/src/main/java/techreborn/init/TRContent.java @@ -66,6 +66,7 @@ import techreborn.blocks.lighting.BlockLamp; import techreborn.blocks.machine.tier0.IronAlloyFurnaceBlock; import techreborn.blocks.machine.tier0.IronFurnaceBlock; import techreborn.blocks.machine.tier1.BlockPlayerDetector; +import techreborn.blocks.machine.tier1.ResinBasinBlock; import techreborn.blocks.misc.BlockAlarm; import techreborn.blocks.misc.BlockMachineCasing; import techreborn.blocks.misc.BlockMachineFrame; @@ -520,6 +521,7 @@ public class TRContent { COMPRESSOR(new GenericMachineBlock(GuiType.COMPRESSOR, CompressorBlockEntity::new)), DISTILLATION_TOWER(new GenericMachineBlock(GuiType.DISTILLATION_TOWER, DistillationTowerBlockEntity::new)), EXTRACTOR(new GenericMachineBlock(GuiType.EXTRACTOR, ExtractorBlockEntity::new)), + RESIN_BASIN(new ResinBasinBlock(ResinBasinBlockEntity::new)), FLUID_REPLICATOR(new GenericMachineBlock(GuiType.FLUID_REPLICATOR, FluidReplicatorBlockEntity::new)), GRINDER(new DataDrivenMachineBlock("techreborn:grinder")), ELECTRIC_FURNACE(new GenericMachineBlock(GuiType.ELECTRIC_FURNACE, ElectricFurnaceBlockEntity::new)), diff --git a/src/main/resources/assets/techreborn/blockstates/resin_basin.json b/src/main/resources/assets/techreborn/blockstates/resin_basin.json new file mode 100644 index 000000000..51da5fc68 --- /dev/null +++ b/src/main/resources/assets/techreborn/blockstates/resin_basin.json @@ -0,0 +1,20 @@ +{ + "variants": { + "facing=north,pouring=false,full=false": { "model": "techreborn:block/machines/tier0_machines/resin_basin_empty" }, + "facing=south,pouring=false,full=false": { "model": "techreborn:block/machines/tier0_machines/resin_basin_empty", "y": 180 }, + "facing=west,pouring=false,full=false": { "model": "techreborn:block/machines/tier0_machines/resin_basin_empty", "y": 270 }, + "facing=east,pouring=false,full=false": { "model": "techreborn:block/machines/tier0_machines/resin_basin_empty", "y": 90 }, + "facing=north,pouring=true,full=false": { "model": "techreborn:block/machines/tier0_machines/resin_basin_empty_flowing" }, + "facing=south,pouring=true,full=false": { "model": "techreborn:block/machines/tier0_machines/resin_basin_empty_flowing", "y": 180 }, + "facing=west,pouring=true,full=false": { "model": "techreborn:block/machines/tier0_machines/resin_basin_empty_flowing", "y": 270 }, + "facing=east,pouring=true,full=false": { "model": "techreborn:block/machines/tier0_machines/resin_basin_empty_flowing", "y": 90 }, + "facing=north,pouring=false,full=true": { "model": "techreborn:block/machines/tier0_machines/resin_basin_full" }, + "facing=south,pouring=false,full=true": { "model": "techreborn:block/machines/tier0_machines/resin_basin_full", "y": 180 }, + "facing=west,pouring=false,full=true": { "model": "techreborn:block/machines/tier0_machines/resin_basin_full", "y": 270 }, + "facing=east,pouring=false,full=true": { "model": "techreborn:block/machines/tier0_machines/resin_basin_full", "y": 90 }, + "facing=north,pouring=true,full=true": { "model": "techreborn:block/machines/tier0_machines/resin_basin_full" }, + "facing=south,pouring=true,full=true": { "model": "techreborn:block/machines/tier0_machines/resin_basin_full", "y": 180 }, + "facing=west,pouring=true,full=true": { "model": "techreborn:block/machines/tier0_machines/resin_basin_full", "y": 270 }, + "facing=east,pouring=true,full=true": { "model": "techreborn:block/machines/tier0_machines/resin_basin_full", "y": 90 } + } +} diff --git a/src/main/resources/assets/techreborn/lang/en_us.json b/src/main/resources/assets/techreborn/lang/en_us.json index 937104dd1..bf6878530 100644 --- a/src/main/resources/assets/techreborn/lang/en_us.json +++ b/src/main/resources/assets/techreborn/lang/en_us.json @@ -57,6 +57,7 @@ "block.techreborn.solid_fuel_generator": "Generator", "block.techreborn.extractor": "Extractor", "block.techreborn.grinder": "Grinder", + "block.techreborn.resin_basin": "Resin Basin", "block.techreborn.compressor": "Compressor", "block.techreborn.electric_furnace": "Electric Furnace", "block.techreborn.industrial_machine_frame": "Industrial Machine Frame", @@ -643,6 +644,7 @@ "techreborn.message.info.block.techreborn.lamp_led": "Provides luminance, when given power", "techreborn.message.info.block.techreborn.player_detector": "Redstone emitting block used to detect players, configurable", "techreborn.message.info.block.techreborn.alloy_smelter": "Make alloys from ingots or dusts", + "techreborn.message.info.block.techreborn.resin_basin": "Automatically gather sap from trees\nPlace directly on a rubber tree\nDeposits sap underneath itself", "techreborn.message.info.block.techreborn.assembly_machine": "Assemble components more efficiently", "techreborn.message.info.block.techreborn.auto_crafting_table": "Automatically craft recipes given power and resources", "techreborn.message.info.block.techreborn.chemical_reactor": "Reacts two chemicals together to form a product", @@ -717,6 +719,7 @@ "techreborn.tooltip.inventory": "Inventory", "techreborn.tooltip.upgrades": "Upgrades", "techreborn.tooltip.alarm": "Shift right-click to change sound", + "techreborn.tooltip.invalid_basin_placement": "Resin basin must be placed on a valid rubber tree.", "techreborn.tooltip.generationRate.day": "Generation Rate Day", "techreborn.tooltip.generationRate.night": "Generation Rate Night", "techreborn.tooltip.greenhouse.upgrade_available": "Can be upgraded with powered lamps\nCheck multiblock hologram for details", diff --git a/src/main/resources/assets/techreborn/models/block/machines/tier0_machines/resin_basin_empty.json b/src/main/resources/assets/techreborn/models/block/machines/tier0_machines/resin_basin_empty.json new file mode 100644 index 000000000..ebb98fde0 --- /dev/null +++ b/src/main/resources/assets/techreborn/models/block/machines/tier0_machines/resin_basin_empty.json @@ -0,0 +1,189 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "0": "techreborn:block/machines/tier0_machines/resin_basin/resin_bucket_top", + "1": "techreborn:block/machines/tier0_machines/resin_basin/resin_bucket_side", + "2": "techreborn:block/machines/tier0_machines/resin_basin/resin_bucket_bottom", + "4": "techreborn:block/machines/tier0_machines/resin_basin/resin_bucket_inner", + "particle": "techreborn:block/machines/tier0_machines/resin_basin/sap_flowing" + }, + "elements": [ + { + "from": [0, 0, 0], + "to": [16, 8, 16], + "faces": { + "north": {"uv": [0, 8, 16, 16], "texture": "#1"}, + "east": {"uv": [0, 8, 16, 16], "texture": "#1"}, + "south": {"uv": [0, 8, 16, 16], "texture": "#1"}, + "west": {"uv": [0, 8, 16, 16], "texture": "#1"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#0"}, + "down": {"uv": [0, 0, 16, 16], "texture": "#2"} + } + }, + { + "from": [1, 2, 1], + "to": [15, 3, 15], + "rotation": {"angle": 0, "axis": "y", "origin": [9, 10, 9]}, + "faces": { + "north": {"uv": [0, 0, 14, 1], "texture": "#2"}, + "east": {"uv": [0, 0, 14, 1], "texture": "#2"}, + "south": {"uv": [0, 0, 14, 1], "texture": "#2"}, + "west": {"uv": [0, 0, 14, 1], "texture": "#2"}, + "up": {"uv": [1, 1, 15, 15], "texture": "#2"}, + "down": {"uv": [0, 0, 14, 14], "texture": "#2"} + } + }, + { + "from": [2, 2, 1], + "to": [3, 8, 15], + "rotation": {"angle": 22.5, "axis": "z", "origin": [2.5, 5, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 6], "texture": "#4"}, + "east": {"uv": [1, 9, 15, 15], "texture": "#4"}, + "south": {"uv": [0, 0, 1, 6], "texture": "#4"}, + "west": {"uv": [0, 0, 14, 6], "texture": "#4"}, + "up": {"uv": [0, 0, 1, 14], "texture": "#4"}, + "down": {"uv": [0, 0, 1, 14], "texture": "#4"} + } + }, + { + "from": [13, 2, 1], + "to": [14, 8, 15], + "rotation": {"angle": -22.5, "axis": "z", "origin": [13.5, 5, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 6], "texture": "#4"}, + "east": {"uv": [1, 9, 15, 15], "texture": "#4"}, + "south": {"uv": [0, 0, 1, 6], "texture": "#4"}, + "west": {"uv": [1, 9, 15, 15], "texture": "#4"}, + "up": {"uv": [0, 0, 1, 14], "texture": "#4"}, + "down": {"uv": [0, 0, 1, 14], "texture": "#4"} + } + }, + { + "from": [1, 2, 2], + "to": [15, 8, 3], + "rotation": {"angle": -22.5, "axis": "x", "origin": [8, 5, 2.5]}, + "faces": { + "north": {"uv": [0, 0, 14, 6], "texture": "#4"}, + "east": {"uv": [0, 0, 1, 6], "texture": "#4"}, + "south": {"uv": [1, 9, 15, 15], "texture": "#4"}, + "west": {"uv": [0, 0, 1, 6], "texture": "#4"}, + "up": {"uv": [0, 0, 14, 1], "texture": "#4"}, + "down": {"uv": [0, 0, 14, 1], "texture": "#4"} + } + }, + { + "from": [1, 2, 13], + "to": [15, 8, 14], + "rotation": {"angle": 22.5, "axis": "x", "origin": [8, 5, 13.5]}, + "faces": { + "north": {"uv": [1, 8, 15, 14], "texture": "#4"}, + "east": {"uv": [0, 0, 1, 6], "texture": "#4"}, + "south": {"uv": [1, 9, 15, 15], "texture": "#4"}, + "west": {"uv": [0, 0, 1, 6], "texture": "#4"}, + "up": {"uv": [0, 0, 14, 1], "texture": "#4"}, + "down": {"uv": [0, 0, 14, 1], "texture": "#4"} + } + }, + { + "from": [5.5, 11, 9], + "to": [6.5, 14, 19], + "rotation": {"angle": -22.5, "axis": "x", "origin": [8, 12.25, 14]}, + "faces": { + "north": {"uv": [0, 0, 1, 3], "texture": "#4"}, + "east": {"uv": [0, 0, 10, 3], "texture": "#4"}, + "south": {"uv": [0, 0, 1, 3], "texture": "#4"}, + "west": {"uv": [0, 0, 10, 3], "texture": "#4"}, + "up": {"uv": [0, 0, 1, 10], "texture": "#4"}, + "down": {"uv": [0, 0, 1, 10], "texture": "#4"} + } + }, + { + "from": [9.5, 11, 9], + "to": [10.5, 14, 19], + "rotation": {"angle": -22.5, "axis": "x", "origin": [8, 12.25, 14]}, + "faces": { + "north": {"uv": [0, 0, 1, 3], "texture": "#4"}, + "east": {"uv": [0, 0, 10, 3], "texture": "#4"}, + "south": {"uv": [0, 0, 1, 3], "texture": "#4"}, + "west": {"uv": [0, 0, 10, 3], "texture": "#4"}, + "up": {"uv": [0, 0, 1, 10], "texture": "#4"}, + "down": {"uv": [0, 0, 1, 10], "texture": "#4"} + } + }, + { + "from": [6.5, 11, 9], + "to": [9.5, 12, 19], + "rotation": {"angle": -22.5, "axis": "x", "origin": [8, 12.25, 14]}, + "faces": { + "north": {"uv": [0, 0, 3, 1], "texture": "#4"}, + "east": {"uv": [0, 0, 10, 1], "texture": "#4"}, + "south": {"uv": [0, 0, 3, 1], "texture": "#4"}, + "west": {"uv": [0, 0, 10, 1], "texture": "#4"}, + "up": {"uv": [0, 0, 3, 10], "texture": "#4"}, + "down": {"uv": [0, 0, 3, 10], "texture": "#4"} + } + }, + { + "from": [6, 11, 15.99], + "to": [10, 15, 16.99], + "rotation": {"angle": 0, "axis": "y", "origin": [14, 9, 24]}, + "faces": { + "north": {"uv": [6, 6, 10, 10], "texture": "#2"}, + "east": {"uv": [0, 0, 1, 4], "texture": "#2"}, + "south": {"uv": [0, 0, 4, 4], "texture": "#2"}, + "west": {"uv": [0, 0, 1, 4], "texture": "#2"}, + "up": {"uv": [6, 6, 10, 7], "texture": "#2"}, + "down": {"uv": [0, 0, 4, 1], "texture": "#2"} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [48.75, -180, 0], + "translation": [0, 3.25, 0.75], + "scale": [0.5, 0.5, 0.5] + }, + "thirdperson_lefthand": { + "rotation": [48.75, 0, 0], + "translation": [0.5, -1.25, -1], + "scale": [0.5, 0.5, 0.5] + }, + "firstperson_righthand": { + "rotation": [0, 167.5, 0], + "translation": [0.75, 3.5, -2.75], + "scale": [0.7, 0.7, 0.7] + }, + "firstperson_lefthand": { + "rotation": [0, 167.5, 0], + "translation": [0.75, 3.5, -2.75], + "scale": [0.7, 0.7, 0.7] + }, + "ground": { + "translation": [0, 1, 0], + "scale": [0.5, 0.5, 0.5] + }, + "gui": { + "rotation": [21, 158, 0], + "scale": [0.7, 0.7, 0.7] + }, + "head": { + "translation": [0, 11.75, 0] + }, + "fixed": { + "rotation": [0, 90, 90] + } + }, + "groups": [ + { + "name": "basin", + "origin": [8, 8, 8], + "children": [0, 1, 2, 3, 4, 5] + }, + { + "name": "channel", + "origin": [8, 8, 8], + "children": [6, 7, 8, 9] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/techreborn/models/block/machines/tier0_machines/resin_basin_empty_flowing.json b/src/main/resources/assets/techreborn/models/block/machines/tier0_machines/resin_basin_empty_flowing.json new file mode 100644 index 000000000..7c3a947d3 --- /dev/null +++ b/src/main/resources/assets/techreborn/models/block/machines/tier0_machines/resin_basin_empty_flowing.json @@ -0,0 +1,184 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "0": "techreborn:block/machines/tier0_machines/resin_basin/resin_bucket_top", + "1": "techreborn:block/machines/tier0_machines/resin_basin/resin_bucket_side", + "2": "techreborn:block/machines/tier0_machines/resin_basin/resin_bucket_bottom", + "4": "techreborn:block/machines/tier0_machines/resin_basin/resin_bucket_inner", + "particle": "techreborn:block/machines/tier0_machines/resin_basin/sap_flowing" + }, + "elements": [ + { + "from": [0, 0, 0], + "to": [16, 8, 16], + "faces": { + "north": {"uv": [0, 8, 16, 16], "texture": "#1"}, + "east": {"uv": [0, 8, 16, 16], "texture": "#1"}, + "south": {"uv": [0, 8, 16, 16], "texture": "#1"}, + "west": {"uv": [0, 8, 16, 16], "texture": "#1"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#0"}, + "down": {"uv": [0, 0, 16, 16], "texture": "#2"} + } + }, + { + "from": [1, 2, 1], + "to": [15, 3, 15], + "rotation": {"angle": 0, "axis": "y", "origin": [9, 10, 9]}, + "faces": { + "north": {"uv": [0, 0, 14, 1], "texture": "#2"}, + "east": {"uv": [0, 0, 14, 1], "texture": "#2"}, + "south": {"uv": [0, 0, 14, 1], "texture": "#2"}, + "west": {"uv": [0, 0, 14, 1], "texture": "#2"}, + "up": {"uv": [1, 1, 15, 15], "texture": "#2"}, + "down": {"uv": [0, 0, 14, 14], "texture": "#2"} + } + }, + { + "from": [2, 2, 1], + "to": [3, 8, 15], + "rotation": {"angle": 22.5, "axis": "z", "origin": [2.5, 5, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 6], "texture": "#4"}, + "east": {"uv": [1, 9, 15, 15], "texture": "#4"}, + "south": {"uv": [0, 0, 1, 6], "texture": "#4"}, + "west": {"uv": [0, 0, 14, 6], "texture": "#4"}, + "up": {"uv": [0, 0, 1, 14], "texture": "#4"}, + "down": {"uv": [0, 0, 1, 14], "texture": "#4"} + } + }, + { + "from": [13, 2, 1], + "to": [14, 8, 15], + "rotation": {"angle": -22.5, "axis": "z", "origin": [13.5, 5, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 6], "texture": "#4"}, + "east": {"uv": [1, 9, 15, 15], "texture": "#4"}, + "south": {"uv": [0, 0, 1, 6], "texture": "#4"}, + "west": {"uv": [1, 9, 15, 15], "texture": "#4"}, + "up": {"uv": [0, 0, 1, 14], "texture": "#4"}, + "down": {"uv": [0, 0, 1, 14], "texture": "#4"} + } + }, + { + "from": [1, 2, 2], + "to": [15, 8, 3], + "rotation": {"angle": -22.5, "axis": "x", "origin": [8, 5, 2.5]}, + "faces": { + "north": {"uv": [0, 0, 14, 6], "texture": "#4"}, + "east": {"uv": [0, 0, 1, 6], "texture": "#4"}, + "south": {"uv": [1, 9, 15, 15], "texture": "#4"}, + "west": {"uv": [0, 0, 1, 6], "texture": "#4"}, + "up": {"uv": [0, 0, 14, 1], "texture": "#4"}, + "down": {"uv": [0, 0, 14, 1], "texture": "#4"} + } + }, + { + "from": [1, 2, 13], + "to": [15, 8, 14], + "rotation": {"angle": 22.5, "axis": "x", "origin": [8, 5, 13.5]}, + "faces": { + "north": {"uv": [1, 8, 15, 14], "texture": "#4"}, + "east": {"uv": [0, 0, 1, 6], "texture": "#4"}, + "south": {"uv": [1, 9, 15, 15], "texture": "#4"}, + "west": {"uv": [0, 0, 1, 6], "texture": "#4"}, + "up": {"uv": [0, 0, 14, 1], "texture": "#4"}, + "down": {"uv": [0, 0, 14, 1], "texture": "#4"} + } + }, + { + "from": [5.5, 11, 9], + "to": [6.5, 14, 19], + "rotation": {"angle": -22.5, "axis": "x", "origin": [8, 12.25, 14]}, + "faces": { + "north": {"uv": [0, 0, 1, 3], "texture": "#4"}, + "east": {"uv": [0, 0, 10, 3], "texture": "#4"}, + "south": {"uv": [0, 0, 1, 3], "texture": "#4"}, + "west": {"uv": [0, 0, 10, 3], "texture": "#4"}, + "up": {"uv": [0, 0, 1, 10], "texture": "#4"}, + "down": {"uv": [0, 0, 1, 10], "texture": "#4"} + } + }, + { + "from": [9.5, 11, 9], + "to": [10.5, 14, 19], + "rotation": {"angle": -22.5, "axis": "x", "origin": [8, 12.25, 14]}, + "faces": { + "north": {"uv": [0, 0, 1, 3], "texture": "#4"}, + "east": {"uv": [0, 0, 10, 3], "texture": "#4"}, + "south": {"uv": [0, 0, 1, 3], "texture": "#4"}, + "west": {"uv": [0, 0, 10, 3], "texture": "#4"}, + "up": {"uv": [0, 0, 1, 10], "texture": "#4"}, + "down": {"uv": [0, 0, 1, 10], "texture": "#4"} + } + }, + { + "from": [6.5, 11, 9], + "to": [9.5, 12, 19], + "rotation": {"angle": -22.5, "axis": "x", "origin": [8, 12.25, 14]}, + "faces": { + "north": {"uv": [0, 0, 3, 1], "texture": "#4"}, + "east": {"uv": [0, 0, 10, 1], "texture": "#4"}, + "south": {"uv": [0, 0, 3, 1], "texture": "#4"}, + "west": {"uv": [0, 0, 10, 1], "texture": "#4"}, + "up": {"uv": [0, 0, 3, 10], "texture": "#4"}, + "down": {"uv": [0, 0, 3, 10], "texture": "#4"} + } + }, + { + "from": [6, 11, 15.99], + "to": [10, 15, 16.99], + "rotation": {"angle": 0, "axis": "y", "origin": [14, 9, 24]}, + "faces": { + "north": {"uv": [6, 6, 10, 10], "texture": "#2"}, + "east": {"uv": [0, 0, 1, 4], "texture": "#2"}, + "south": {"uv": [0, 0, 4, 4], "texture": "#2"}, + "west": {"uv": [0, 0, 1, 4], "texture": "#2"}, + "up": {"uv": [6, 6, 10, 7], "texture": "#2"}, + "down": {"uv": [0, 0, 4, 1], "texture": "#2"} + } + }, + { + "from": [6.5, 11, 9], + "to": [9.5, 12, 19], + "rotation": {"angle": -22.5, "axis": "x", "origin": [8, 11.25, 14]}, + "faces": { + "north": {"uv": [0, 0, 3, 1], "texture": "#particle"}, + "east": {"uv": [0, 0, 10, 1], "texture": "#particle"}, + "south": {"uv": [0, 0, 3, 1], "texture": "#particle"}, + "west": {"uv": [0, 0, 10, 1], "texture": "#particle"}, + "up": {"uv": [0, 6, 3, 16], "rotation": 180, "texture": "#particle"}, + "down": {"uv": [0, 0, 3, 10], "texture": "#particle"} + } + }, + { + "from": [6.5, 3, 9.1], + "to": [9.5, 10, 9.6], + "rotation": {"angle": 0, "axis": "x", "origin": [13, 11, 17]}, + "faces": { + "north": {"uv": [0, 0, 3, 7], "texture": "#particle"}, + "east": {"uv": [0, 0, 0.5, 7], "texture": "#particle"}, + "south": {"uv": [0, 0, 3, 7], "texture": "#particle"}, + "west": {"uv": [0, 0, 0.5, 7], "texture": "#particle"}, + "up": {"uv": [0, 0, 3, 0.5], "texture": "#particle"}, + "down": {"uv": [0, 0, 3, 0.5], "texture": "#particle"} + } + } + ], + "groups": [ + { + "name": "basin", + "origin": [8, 8, 8], + "children": [0, 1, 2, 3, 4, 5] + }, + { + "name": "channel", + "origin": [8, 8, 8], + "children": [6, 7, 8, 9] + }, + { + "name": "pouring fluid", + "origin": [8, 8, 8], + "children": [10, 11] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/techreborn/models/block/machines/tier0_machines/resin_basin_full.json b/src/main/resources/assets/techreborn/models/block/machines/tier0_machines/resin_basin_full.json new file mode 100644 index 000000000..3127db4c2 --- /dev/null +++ b/src/main/resources/assets/techreborn/models/block/machines/tier0_machines/resin_basin_full.json @@ -0,0 +1,172 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "0": "techreborn:block/machines/tier0_machines/resin_basin/resin_bucket_top", + "1": "techreborn:block/machines/tier0_machines/resin_basin/resin_bucket_side", + "2": "techreborn:block/machines/tier0_machines/resin_basin/resin_bucket_bottom", + "4": "techreborn:block/machines/tier0_machines/resin_basin/resin_bucket_inner", + "8": "techreborn:block/machines/tier0_machines/resin_basin/sap_still", + "particle": "techreborn:block/machines/tier0_machines/resin_basin/sap_flowing" + }, + "elements": [ + { + "from": [0, 0, 0], + "to": [16, 8, 16], + "faces": { + "north": {"uv": [0, 8, 16, 16], "texture": "#1"}, + "east": {"uv": [0, 8, 16, 16], "texture": "#1"}, + "south": {"uv": [0, 8, 16, 16], "texture": "#1"}, + "west": {"uv": [0, 8, 16, 16], "texture": "#1"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#0"}, + "down": {"uv": [0, 0, 16, 16], "texture": "#2"} + } + }, + { + "from": [1, 2, 1], + "to": [15, 3, 15], + "rotation": {"angle": 0, "axis": "y", "origin": [9, 10, 9]}, + "faces": { + "north": {"uv": [0, 0, 14, 1], "texture": "#2"}, + "east": {"uv": [0, 0, 14, 1], "texture": "#2"}, + "south": {"uv": [0, 0, 14, 1], "texture": "#2"}, + "west": {"uv": [0, 0, 14, 1], "texture": "#2"}, + "up": {"uv": [1, 1, 15, 15], "texture": "#2"}, + "down": {"uv": [0, 0, 14, 14], "texture": "#2"} + } + }, + { + "from": [2, 2, 1], + "to": [3, 8, 15], + "rotation": {"angle": 22.5, "axis": "z", "origin": [2.5, 5, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 6], "texture": "#4"}, + "east": {"uv": [1, 9, 15, 15], "texture": "#4"}, + "south": {"uv": [0, 0, 1, 6], "texture": "#4"}, + "west": {"uv": [0, 0, 14, 6], "texture": "#4"}, + "up": {"uv": [0, 0, 1, 14], "texture": "#4"}, + "down": {"uv": [0, 0, 1, 14], "texture": "#4"} + } + }, + { + "from": [13, 2, 1], + "to": [14, 8, 15], + "rotation": {"angle": -22.5, "axis": "z", "origin": [13.5, 5, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 6], "texture": "#4"}, + "east": {"uv": [1, 9, 15, 15], "texture": "#4"}, + "south": {"uv": [0, 0, 1, 6], "texture": "#4"}, + "west": {"uv": [1, 9, 15, 15], "texture": "#4"}, + "up": {"uv": [0, 0, 1, 14], "texture": "#4"}, + "down": {"uv": [0, 0, 1, 14], "texture": "#4"} + } + }, + { + "from": [1, 2, 2], + "to": [15, 8, 3], + "rotation": {"angle": -22.5, "axis": "x", "origin": [8, 5, 2.5]}, + "faces": { + "north": {"uv": [0, 0, 14, 6], "texture": "#4"}, + "east": {"uv": [0, 0, 1, 6], "texture": "#4"}, + "south": {"uv": [1, 9, 15, 15], "texture": "#4"}, + "west": {"uv": [0, 0, 1, 6], "texture": "#4"}, + "up": {"uv": [0, 0, 14, 1], "texture": "#4"}, + "down": {"uv": [0, 0, 14, 1], "texture": "#4"} + } + }, + { + "from": [1, 2, 13], + "to": [15, 8, 14], + "rotation": {"angle": 22.5, "axis": "x", "origin": [8, 5, 13.5]}, + "faces": { + "north": {"uv": [1, 8, 15, 14], "texture": "#4"}, + "east": {"uv": [0, 0, 1, 6], "texture": "#4"}, + "south": {"uv": [1, 9, 15, 15], "texture": "#4"}, + "west": {"uv": [0, 0, 1, 6], "texture": "#4"}, + "up": {"uv": [0, 0, 14, 1], "texture": "#4"}, + "down": {"uv": [0, 0, 14, 1], "texture": "#4"} + } + }, + { + "from": [5.5, 11, 9], + "to": [6.5, 14, 19], + "rotation": {"angle": -22.5, "axis": "x", "origin": [8, 12.25, 14]}, + "faces": { + "north": {"uv": [0, 0, 1, 3], "texture": "#4"}, + "east": {"uv": [0, 0, 10, 3], "texture": "#4"}, + "south": {"uv": [0, 0, 1, 3], "texture": "#4"}, + "west": {"uv": [0, 0, 10, 3], "texture": "#4"}, + "up": {"uv": [0, 0, 1, 10], "texture": "#4"}, + "down": {"uv": [0, 0, 1, 10], "texture": "#4"} + } + }, + { + "from": [9.5, 11, 9], + "to": [10.5, 14, 19], + "rotation": {"angle": -22.5, "axis": "x", "origin": [8, 12.25, 14]}, + "faces": { + "north": {"uv": [0, 0, 1, 3], "texture": "#4"}, + "east": {"uv": [0, 0, 10, 3], "texture": "#4"}, + "south": {"uv": [0, 0, 1, 3], "texture": "#4"}, + "west": {"uv": [0, 0, 10, 3], "texture": "#4"}, + "up": {"uv": [0, 0, 1, 10], "texture": "#4"}, + "down": {"uv": [0, 0, 1, 10], "texture": "#4"} + } + }, + { + "from": [6.5, 11, 9], + "to": [9.5, 12, 19], + "rotation": {"angle": -22.5, "axis": "x", "origin": [8, 12.25, 14]}, + "faces": { + "north": {"uv": [0, 0, 3, 1], "texture": "#4"}, + "east": {"uv": [0, 0, 10, 1], "texture": "#4"}, + "south": {"uv": [0, 0, 3, 1], "texture": "#4"}, + "west": {"uv": [0, 0, 10, 1], "texture": "#4"}, + "up": {"uv": [0, 0, 3, 10], "texture": "#4"}, + "down": {"uv": [0, 0, 3, 10], "texture": "#4"} + } + }, + { + "from": [6, 11, 15.99], + "to": [10, 15, 16.99], + "rotation": {"angle": 0, "axis": "y", "origin": [14, 9, 24]}, + "faces": { + "north": {"uv": [6, 6, 10, 10], "texture": "#2"}, + "east": {"uv": [0, 0, 1, 4], "texture": "#2"}, + "south": {"uv": [0, 0, 4, 4], "texture": "#2"}, + "west": {"uv": [0, 0, 1, 4], "texture": "#2"}, + "up": {"uv": [6, 6, 10, 7], "texture": "#2"}, + "down": {"uv": [0, 0, 4, 1], "texture": "#2"} + } + }, + { + "from": [1, 1, 1], + "to": [15, 6, 15], + "rotation": {"angle": 0, "axis": "y", "origin": [9, 13, 9]}, + "faces": { + "north": {"uv": [0, 0, 14, 5], "texture": "#8"}, + "east": {"uv": [0, 0, 14, 1], "texture": "#8"}, + "south": {"uv": [0, 0, 14, 1], "texture": "#8"}, + "west": {"uv": [0, 0, 14, 5], "texture": "#8"}, + "up": {"uv": [1, 1, 15, 15], "texture": "#8"}, + "down": {"uv": [0, 0, 14, 14], "texture": "#8"} + } + } + ], + "groups": [ + { + "name": "basin", + "origin": [8, 8, 8], + "children": [0, 1, 2, 3, 4, 5] + }, + { + "name": "channel", + "origin": [8, 8, 8], + "children": [6, 7, 8, 9] + }, + { + "name": "filled", + "origin": [8, 8, 8], + "children": [10] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/techreborn/models/item/resin_basin.json b/src/main/resources/assets/techreborn/models/item/resin_basin.json new file mode 100644 index 000000000..7c08628bb --- /dev/null +++ b/src/main/resources/assets/techreborn/models/item/resin_basin.json @@ -0,0 +1,3 @@ +{ + "parent": "techreborn:block/machines/tier0_machines/resin_basin_empty" +} \ No newline at end of file diff --git a/src/main/resources/assets/techreborn/textures/block/machines/tier0_machines/resin_basin/resin_bucket_base.png b/src/main/resources/assets/techreborn/textures/block/machines/tier0_machines/resin_basin/resin_bucket_base.png new file mode 100644 index 000000000..3f262a196 Binary files /dev/null and b/src/main/resources/assets/techreborn/textures/block/machines/tier0_machines/resin_basin/resin_bucket_base.png differ diff --git a/src/main/resources/assets/techreborn/textures/block/machines/tier0_machines/resin_basin/resin_bucket_bottom.png b/src/main/resources/assets/techreborn/textures/block/machines/tier0_machines/resin_basin/resin_bucket_bottom.png new file mode 100644 index 000000000..4f95d0efd Binary files /dev/null and b/src/main/resources/assets/techreborn/textures/block/machines/tier0_machines/resin_basin/resin_bucket_bottom.png differ diff --git a/src/main/resources/assets/techreborn/textures/block/machines/tier0_machines/resin_basin/resin_bucket_inner.png b/src/main/resources/assets/techreborn/textures/block/machines/tier0_machines/resin_basin/resin_bucket_inner.png new file mode 100644 index 000000000..f17cc9b83 Binary files /dev/null and b/src/main/resources/assets/techreborn/textures/block/machines/tier0_machines/resin_basin/resin_bucket_inner.png differ diff --git a/src/main/resources/assets/techreborn/textures/block/machines/tier0_machines/resin_basin/resin_bucket_side.png b/src/main/resources/assets/techreborn/textures/block/machines/tier0_machines/resin_basin/resin_bucket_side.png new file mode 100644 index 000000000..8a7143767 Binary files /dev/null and b/src/main/resources/assets/techreborn/textures/block/machines/tier0_machines/resin_basin/resin_bucket_side.png differ diff --git a/src/main/resources/assets/techreborn/textures/block/machines/tier0_machines/resin_basin/resin_bucket_top.png b/src/main/resources/assets/techreborn/textures/block/machines/tier0_machines/resin_basin/resin_bucket_top.png new file mode 100644 index 000000000..b1a026434 Binary files /dev/null and b/src/main/resources/assets/techreborn/textures/block/machines/tier0_machines/resin_basin/resin_bucket_top.png differ diff --git a/src/main/resources/assets/techreborn/textures/block/machines/tier0_machines/resin_basin/sap_flowing.png b/src/main/resources/assets/techreborn/textures/block/machines/tier0_machines/resin_basin/sap_flowing.png new file mode 100644 index 000000000..88951d384 Binary files /dev/null and b/src/main/resources/assets/techreborn/textures/block/machines/tier0_machines/resin_basin/sap_flowing.png differ diff --git a/src/main/resources/assets/techreborn/textures/block/machines/tier0_machines/resin_basin/sap_flowing.png.mcmeta b/src/main/resources/assets/techreborn/textures/block/machines/tier0_machines/resin_basin/sap_flowing.png.mcmeta new file mode 100644 index 000000000..70c46a5c6 --- /dev/null +++ b/src/main/resources/assets/techreborn/textures/block/machines/tier0_machines/resin_basin/sap_flowing.png.mcmeta @@ -0,0 +1,6 @@ +{ + "animation": { + "frametime": 8, + "interpolate": true + } +} diff --git a/src/main/resources/assets/techreborn/textures/block/machines/tier0_machines/resin_basin/sap_still.png b/src/main/resources/assets/techreborn/textures/block/machines/tier0_machines/resin_basin/sap_still.png new file mode 100644 index 000000000..a14d02eb7 Binary files /dev/null and b/src/main/resources/assets/techreborn/textures/block/machines/tier0_machines/resin_basin/sap_still.png differ diff --git a/src/main/resources/assets/techreborn/textures/block/machines/tier0_machines/resin_basin/sap_still.png.mcmeta b/src/main/resources/assets/techreborn/textures/block/machines/tier0_machines/resin_basin/sap_still.png.mcmeta new file mode 100644 index 000000000..70c46a5c6 --- /dev/null +++ b/src/main/resources/assets/techreborn/textures/block/machines/tier0_machines/resin_basin/sap_still.png.mcmeta @@ -0,0 +1,6 @@ +{ + "animation": { + "frametime": 8, + "interpolate": true + } +} diff --git a/src/main/resources/data/techreborn/loot_tables/blocks/resin_basin.json b/src/main/resources/data/techreborn/loot_tables/blocks/resin_basin.json new file mode 100644 index 000000000..33f41903b --- /dev/null +++ b/src/main/resources/data/techreborn/loot_tables/blocks/resin_basin.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "techreborn:resin_basin" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/techreborn/recipes/crafting_table/machine/resin_basin.json b/src/main/resources/data/techreborn/recipes/crafting_table/machine/resin_basin.json new file mode 100644 index 000000000..45112173e --- /dev/null +++ b/src/main/resources/data/techreborn/recipes/crafting_table/machine/resin_basin.json @@ -0,0 +1,25 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "WTW", + "WDW", + "WBW" + ], + "key": { + "T": { + "item": "techreborn:treetap" + }, + "W": { + "item": "techreborn:rubber_planks" + }, + "D": { + "item": "techreborn:drain" + }, + "B": { + "item": "techreborn:rubber_trapdoor" + } + }, + "result": { + "item": "techreborn:resin_basin" + } +} \ No newline at end of file