From 24bf7b8041ffda66266e13c7c3f19d3d5c489e23 Mon Sep 17 00:00:00 2001 From: TechnoVisionDev Date: Mon, 13 Jul 2020 01:15:45 -0700 Subject: [PATCH] Advanced block models --- .../technovision/tutorial/blocks/Oven.java | 118 ++++++++ .../tutorial/blocks/RubyBlock.java | 3 +- .../technovision/tutorial/blocks/RubyOre.java | 3 +- .../tutorial/util/RegistryHandler.java | 3 + src/main/resources/META-INF/mods.toml | 4 +- .../assets/tutorial/blockstates/oven.json | 8 + .../resources/assets/tutorial/lang/en_us.json | 1 + .../assets/tutorial/models/block/oven.json | 255 ++++++++++++++++++ .../assets/tutorial/models/item/oven.json | 3 + .../assets/tutorial/textures/blocks/oven.png | Bin 0 -> 1747 bytes src/main/resources/logo.png | Bin 0 -> 18565 bytes 11 files changed, 394 insertions(+), 4 deletions(-) create mode 100644 src/main/java/com/technovision/tutorial/blocks/Oven.java create mode 100644 src/main/resources/assets/tutorial/blockstates/oven.json create mode 100644 src/main/resources/assets/tutorial/models/block/oven.json create mode 100644 src/main/resources/assets/tutorial/models/item/oven.json create mode 100644 src/main/resources/assets/tutorial/textures/blocks/oven.png create mode 100644 src/main/resources/logo.png diff --git a/src/main/java/com/technovision/tutorial/blocks/Oven.java b/src/main/java/com/technovision/tutorial/blocks/Oven.java new file mode 100644 index 0000000..3b8ddb9 --- /dev/null +++ b/src/main/java/com/technovision/tutorial/blocks/Oven.java @@ -0,0 +1,118 @@ +package com.technovision.tutorial.blocks; + +import net.minecraft.block.*; +import net.minecraft.block.material.Material; +import net.minecraft.item.BlockItemUseContext; +import net.minecraft.state.DirectionProperty; +import net.minecraft.state.StateContainer; +import net.minecraft.util.Mirror; +import net.minecraft.util.Rotation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.shapes.IBooleanFunction; +import net.minecraft.util.math.shapes.ISelectionContext; +import net.minecraft.util.math.shapes.VoxelShape; +import net.minecraft.util.math.shapes.VoxelShapes; +import net.minecraft.world.IBlockReader; +import net.minecraftforge.common.ToolType; + +import java.util.stream.Stream; + +public class Oven extends Block { + + private static final DirectionProperty FACING = HorizontalBlock.HORIZONTAL_FACING; + + private static final VoxelShape SHAPE_N = Stream.of( + Block.makeCuboidShape(2, 1, 2, 14, 9, 14), Block.makeCuboidShape(1, 9, 1, 15, 10, 15), + Block.makeCuboidShape(3, 10, 3, 13, 11, 13), Block.makeCuboidShape(13, 2, 1, 16, 3, 2), + Block.makeCuboidShape(15, 0, 1, 16, 2, 2), Block.makeCuboidShape(13, 2, 14, 16, 3, 15), + Block.makeCuboidShape(15, 0, 14, 16, 2, 15), Block.makeCuboidShape(0, 2, 14, 3, 3, 15), + Block.makeCuboidShape(0, 0, 14, 1, 2, 15), Block.makeCuboidShape(0, 2, 1, 3, 3, 2), + Block.makeCuboidShape(0, 0, 1, 1, 2, 2), Block.makeCuboidShape(6, 11, 12, 10, 16, 13), + Block.makeCuboidShape(6, 3, 14, 10, 16, 15), Block.makeCuboidShape(6, 10, 13, 10, 16, 14), + Block.makeCuboidShape(6, 12, 15, 10, 16, 16)).reduce((v1, v2) -> { + return VoxelShapes.combineAndSimplify(v1, v2, IBooleanFunction.OR);}).get(); + + private static final VoxelShape SHAPE_E = Stream.of( + Block.makeCuboidShape(2, 1, 2, 14, 9, 14), Block.makeCuboidShape(1, 9, 1, 15, 10, 15), + Block.makeCuboidShape(3, 10, 3, 13, 11, 13), Block.makeCuboidShape(14, 2, 13, 15, 3, 16), + Block.makeCuboidShape(14, 0, 15, 15, 2, 16), Block.makeCuboidShape(1, 2, 13, 2, 3, 16), + Block.makeCuboidShape(1, 0, 15, 2, 2, 16), Block.makeCuboidShape(1, 2, 0, 2, 3, 3), + Block.makeCuboidShape(1, 0, 0, 2, 2, 1), Block.makeCuboidShape(14, 2, 0, 15, 3, 3), + Block.makeCuboidShape(14, 0, 0, 15, 2, 1), Block.makeCuboidShape(3, 11, 6, 4, 16, 10), + Block.makeCuboidShape(1, 3, 6, 2, 16, 10), Block.makeCuboidShape(2, 10, 6, 3, 16, 10), + Block.makeCuboidShape(0, 12, 6, 1, 16, 10)).reduce((v1, v2) -> { + return VoxelShapes.combineAndSimplify(v1, v2, IBooleanFunction.OR);}).get(); + + private static final VoxelShape SHAPE_S = Stream.of( + Block.makeCuboidShape(2, 1, 2, 14, 9, 14), Block.makeCuboidShape(1, 9, 1, 15, 10, 15), + Block.makeCuboidShape(3, 10, 3, 13, 11, 13), Block.makeCuboidShape(0, 2, 14, 3, 3, 15), + Block.makeCuboidShape(0, 0, 14, 1, 2, 15), Block.makeCuboidShape(0, 2, 1, 3, 3, 2), + Block.makeCuboidShape(0, 0, 1, 1, 2, 2), Block.makeCuboidShape(13, 2, 1, 16, 3, 2), + Block.makeCuboidShape(15, 0, 1, 16, 2, 2), Block.makeCuboidShape(13, 2, 14, 16, 3, 15), + Block.makeCuboidShape(15, 0, 14, 16, 2, 15), Block.makeCuboidShape(6, 11, 3, 10, 16, 4), + Block.makeCuboidShape(6, 3, 1, 10, 16, 2), Block.makeCuboidShape(6, 10, 2, 10, 16, 3), + Block.makeCuboidShape(6, 12, 0, 10, 16, 1)).reduce((v1, v2) -> { + return VoxelShapes.combineAndSimplify(v1, v2, IBooleanFunction.OR);}).get(); + + private static final VoxelShape SHAPE_W = Stream.of( + Block.makeCuboidShape(2, 1, 2, 14, 9, 14), Block.makeCuboidShape(1, 9, 1, 15, 10, 15), + Block.makeCuboidShape(3, 10, 3, 13, 11, 13), Block.makeCuboidShape(1, 2, 0, 2, 3, 3), + Block.makeCuboidShape(1, 0, 0, 2, 2, 1), Block.makeCuboidShape(14, 2, 0, 15, 3, 3), + Block.makeCuboidShape(14, 0, 0, 15, 2, 1), Block.makeCuboidShape(14, 2, 13, 15, 3, 16), + Block.makeCuboidShape(14, 0, 15, 15, 2, 16), Block.makeCuboidShape(1, 2, 13, 2, 3, 16), + Block.makeCuboidShape(1, 0, 15, 2, 2, 16), Block.makeCuboidShape(12, 11, 6, 13, 16, 10), + Block.makeCuboidShape(14, 3, 6, 15, 16, 10), Block.makeCuboidShape(13, 10, 6, 14, 16, 10), + Block.makeCuboidShape(15, 12, 6, 16, 16, 10)).reduce((v1, v2) -> { + return VoxelShapes.combineAndSimplify(v1, v2, IBooleanFunction.OR);}).get(); + + public Oven() { + super(Block.Properties.create(Material.IRON) + .hardnessAndResistance(3.5F, 4.0F) + .sound(SoundType.ANVIL) + .harvestLevel(0) + .harvestTool(ToolType.PICKAXE) + .setRequiresTool()); + } + + @Override + public BlockState getStateForPlacement(BlockItemUseContext context) { + return this.getDefaultState().with(FACING, context.getPlacementHorizontalFacing().getOpposite()); + } + + @Override + public VoxelShape getShape(BlockState state, IBlockReader worldIn, BlockPos pos, ISelectionContext context) { + switch (state.get(FACING)) { + case NORTH: + return SHAPE_N; + case SOUTH: + return SHAPE_S; + case EAST: + return SHAPE_E; + case WEST: + return SHAPE_W; + default: + return SHAPE_N; + } + } + + @Override + public BlockState rotate(BlockState state, Rotation rot) { + return state.with(FACING, rot.rotate(state.get(FACING))); + } + + @Override + public BlockState mirror(BlockState state, Mirror mirrorIn) { + return state.rotate(mirrorIn.toRotation(state.get(FACING))); + } + + @Override + protected void fillStateContainer(StateContainer.Builder builder) { + builder.add(FACING); + } + + /**Change the block shadow -- Lower return values = more shadow*/ + @Override + public float getAmbientOcclusionLightValue(BlockState state, IBlockReader worldIn, BlockPos pos) { + return 0.6F; + } +} diff --git a/src/main/java/com/technovision/tutorial/blocks/RubyBlock.java b/src/main/java/com/technovision/tutorial/blocks/RubyBlock.java index d02ccd2..ee20e85 100644 --- a/src/main/java/com/technovision/tutorial/blocks/RubyBlock.java +++ b/src/main/java/com/technovision/tutorial/blocks/RubyBlock.java @@ -11,6 +11,7 @@ public class RubyBlock extends Block { .hardnessAndResistance(5.0f, 6.0f) .sound(SoundType.METAL) .harvestLevel(2) - .harvestTool(ToolType.PICKAXE)); + .harvestTool(ToolType.PICKAXE) + .setRequiresTool()); } } diff --git a/src/main/java/com/technovision/tutorial/blocks/RubyOre.java b/src/main/java/com/technovision/tutorial/blocks/RubyOre.java index 151745e..40c692b 100644 --- a/src/main/java/com/technovision/tutorial/blocks/RubyOre.java +++ b/src/main/java/com/technovision/tutorial/blocks/RubyOre.java @@ -16,7 +16,8 @@ public class RubyOre extends OreBlock { .hardnessAndResistance(3.0f, 4.0f) .sound(SoundType.STONE) .harvestLevel(2) - .harvestTool(ToolType.PICKAXE)); + .harvestTool(ToolType.PICKAXE) + .setRequiresTool()); } @Override diff --git a/src/main/java/com/technovision/tutorial/util/RegistryHandler.java b/src/main/java/com/technovision/tutorial/util/RegistryHandler.java index d2ea2d2..1925465 100644 --- a/src/main/java/com/technovision/tutorial/util/RegistryHandler.java +++ b/src/main/java/com/technovision/tutorial/util/RegistryHandler.java @@ -2,6 +2,7 @@ package com.technovision.tutorial.util; import com.technovision.tutorial.Tutorial; import com.technovision.tutorial.armor.ModArmorMaterial; +import com.technovision.tutorial.blocks.Oven; import com.technovision.tutorial.blocks.RubyBlock; import com.technovision.tutorial.blocks.RubyOre; import com.technovision.tutorial.items.PoisonApple; @@ -53,8 +54,10 @@ public class RegistryHandler { // Blocks public static final RegistryObject RUBY_BLOCK = BLOCKS.register("ruby_block", RubyBlock::new); public static final RegistryObject RUBY_ORE = BLOCKS.register("ruby_ore", RubyOre::new); + public static final RegistryObject OVEN = BLOCKS.register("oven", Oven::new); // Block Items public static final RegistryObject RUBY_BLOCK_ITEM = ITEMS.register("ruby_block", () -> new BlockItem(RUBY_BLOCK.get(), new Item.Properties().group(Tutorial.TAB))); public static final RegistryObject RUBY_ORE_ITEM = ITEMS.register("ruby_ore", () -> new BlockItem(RUBY_ORE.get(), new Item.Properties().group(Tutorial.TAB))); + public static final RegistryObject OVEN_ITEM = ITEMS.register("oven", () -> new BlockItem(OVEN.get(), new Item.Properties().group(Tutorial.TAB))); } diff --git a/src/main/resources/META-INF/mods.toml b/src/main/resources/META-INF/mods.toml index 9c724b0..a18da59 100644 --- a/src/main/resources/META-INF/mods.toml +++ b/src/main/resources/META-INF/mods.toml @@ -8,7 +8,7 @@ issueTrackerURL="http://my.issue.tracker/" #optional modId="tutorial" #mandatory -version="1.15.2-1.0.0" #mandatory +version="1.16.1-1.0.0" #mandatory displayName="Tutorial Mod" #mandatory @@ -16,7 +16,7 @@ updateJSONURL="http://myurl.me/" #optional displayURL="http://example.com/" #optional -logoFile="examplemod.png" #optional +logoFile="logo.png" #optional credits="Thanks to my incredible subscribers!" #optional diff --git a/src/main/resources/assets/tutorial/blockstates/oven.json b/src/main/resources/assets/tutorial/blockstates/oven.json new file mode 100644 index 0000000..5e1d07d --- /dev/null +++ b/src/main/resources/assets/tutorial/blockstates/oven.json @@ -0,0 +1,8 @@ +{ + "variants": { + "facing=north": { "model": "tutorial:block/oven" }, + "facing=south": { "model": "tutorial:block/oven", "y": 180}, + "facing=west": { "model": "tutorial:block/oven", "y": 270}, + "facing=east": { "model": "tutorial:block/oven", "y": 90} + } +} diff --git a/src/main/resources/assets/tutorial/lang/en_us.json b/src/main/resources/assets/tutorial/lang/en_us.json index e67ea43..5b68be7 100644 --- a/src/main/resources/assets/tutorial/lang/en_us.json +++ b/src/main/resources/assets/tutorial/lang/en_us.json @@ -3,6 +3,7 @@ "item.tutorial.poison_apple": "Poison Apple", "block.tutorial.ruby_block": "Block of Ruby", "block.tutorial.ruby_ore": "Ruby Ore", + "block.tutorial.oven": "Oven", "itemGroup.tutorialTab": "Tutorial", "item.tutorial.ruby_sword": "Ruby Sword", "item.tutorial.ruby_pickaxe": "Ruby Pickaxe", diff --git a/src/main/resources/assets/tutorial/models/block/oven.json b/src/main/resources/assets/tutorial/models/block/oven.json new file mode 100644 index 0000000..0b9cf48 --- /dev/null +++ b/src/main/resources/assets/tutorial/models/block/oven.json @@ -0,0 +1,255 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "0": "tutorial:blocks/oven", + "particle": "tutorial:blocks/oven" + }, + "elements": [ + { + "from": [0, 2, 1], + "to": [3, 3, 2], + "faces": { + "north": {"uv": [9, 4, 12, 5], "texture": "#0"}, + "east": {"uv": [9, 4, 12, 5], "texture": "#0"}, + "south": {"uv": [9, 4, 12, 5], "texture": "#0"}, + "west": {"uv": [9, 4, 12, 5], "texture": "#0"}, + "up": {"uv": [9, 4, 12, 5], "texture": "#0"}, + "down": {"uv": [9, 4, 12, 5], "texture": "#0"} + } + }, + { + "from": [0, 0, 1], + "to": [1, 2, 2], + "faces": { + "north": {"uv": [9, 4, 12, 5], "texture": "#0"}, + "east": {"uv": [9, 4, 12, 5], "texture": "#0"}, + "south": {"uv": [9, 4, 12, 5], "texture": "#0"}, + "west": {"uv": [9, 4, 12, 5], "texture": "#0"}, + "up": {"uv": [9, 4, 12, 5], "texture": "#0"}, + "down": {"uv": [9, 4, 12, 5], "texture": "#0"} + } + }, + { + "from": [0, 2, 14], + "to": [3, 3, 15], + "faces": { + "north": {"uv": [9, 4, 12, 5], "texture": "#0"}, + "east": {"uv": [9, 4, 12, 5], "texture": "#0"}, + "south": {"uv": [9, 4, 12, 5], "texture": "#0"}, + "west": {"uv": [9, 4, 12, 5], "texture": "#0"}, + "up": {"uv": [9, 4, 12, 5], "texture": "#0"}, + "down": {"uv": [9, 4, 12, 5], "texture": "#0"} + } + }, + { + "from": [0, 0, 14], + "to": [1, 2, 15], + "faces": { + "north": {"uv": [9, 4, 12, 5], "texture": "#0"}, + "east": {"uv": [9, 4, 12, 5], "texture": "#0"}, + "south": {"uv": [9, 4, 12, 5], "texture": "#0"}, + "west": {"uv": [9, 4, 12, 5], "texture": "#0"}, + "up": {"uv": [9, 4, 12, 5], "texture": "#0"}, + "down": {"uv": [9, 4, 12, 5], "texture": "#0"} + } + }, + { + "from": [13, 2, 14], + "to": [16, 3, 15], + "faces": { + "north": {"uv": [9, 4, 12, 5], "texture": "#0"}, + "east": {"uv": [9, 4, 12, 5], "texture": "#0"}, + "south": {"uv": [9, 4, 12, 5], "texture": "#0"}, + "west": {"uv": [9, 4, 12, 5], "texture": "#0"}, + "up": {"uv": [9, 4, 12, 5], "rotation": 180, "texture": "#0"}, + "down": {"uv": [9, 4, 12, 5], "rotation": 180, "texture": "#0"} + } + }, + { + "from": [15, 0, 14], + "to": [16, 2, 15], + "faces": { + "north": {"uv": [9, 4, 12, 5], "texture": "#0"}, + "east": {"uv": [9, 4, 12, 5], "texture": "#0"}, + "south": {"uv": [9, 4, 12, 5], "texture": "#0"}, + "west": {"uv": [9, 4, 12, 5], "texture": "#0"}, + "up": {"uv": [9, 4, 12, 5], "rotation": 180, "texture": "#0"}, + "down": {"uv": [9, 4, 12, 5], "rotation": 180, "texture": "#0"} + } + }, + { + "from": [13, 2, 1], + "to": [16, 3, 2], + "faces": { + "north": {"uv": [9, 4, 12, 5], "texture": "#0"}, + "east": {"uv": [9, 4, 12, 5], "texture": "#0"}, + "south": {"uv": [9, 4, 12, 5], "texture": "#0"}, + "west": {"uv": [9, 4, 12, 5], "texture": "#0"}, + "up": {"uv": [9, 4, 12, 5], "rotation": 180, "texture": "#0"}, + "down": {"uv": [9, 4, 12, 5], "rotation": 180, "texture": "#0"} + } + }, + { + "from": [15, 0, 1], + "to": [16, 2, 2], + "faces": { + "north": {"uv": [9, 4, 12, 5], "texture": "#0"}, + "east": {"uv": [9, 4, 12, 5], "texture": "#0"}, + "south": {"uv": [9, 4, 12, 5], "texture": "#0"}, + "west": {"uv": [9, 4, 12, 5], "texture": "#0"}, + "up": {"uv": [9, 4, 12, 5], "rotation": 180, "texture": "#0"}, + "down": {"uv": [9, 4, 12, 5], "rotation": 180, "texture": "#0"} + } + }, + { + "name": "Base", + "from": [2, 1, 2], + "to": [14, 9, 14], + "faces": { + "north": {"uv": [3, 3, 6, 5], "texture": "#0"}, + "east": {"uv": [0, 3, 3, 5], "texture": "#0"}, + "south": {"uv": [0, 3, 3, 5], "texture": "#0"}, + "west": {"uv": [0, 3, 3, 5], "texture": "#0"}, + "up": {"uv": [0, 3, 3, 5], "texture": "#0"}, + "down": {"uv": [0, 3, 3, 5], "texture": "#0"} + } + }, + { + "name": "semi-top", + "from": [1, 9, 1], + "to": [15, 10, 15], + "faces": { + "north": {"uv": [0, 3, 3, 5], "texture": "#0"}, + "east": {"uv": [0, 3, 3, 5], "texture": "#0"}, + "south": {"uv": [0, 3, 3, 5], "texture": "#0"}, + "west": {"uv": [0, 3, 3, 5], "texture": "#0"}, + "up": {"uv": [0, 3, 3, 5], "texture": "#0"}, + "down": {"uv": [0, 3, 3, 5], "texture": "#0"} + } + }, + { + "name": "top", + "from": [3, 10, 3], + "to": [13, 11, 13], + "faces": { + "north": {"uv": [0, 3, 2, 5], "texture": "#0"}, + "east": {"uv": [0, 3, 2, 5], "texture": "#0"}, + "south": {"uv": [0, 3, 2, 5], "texture": "#0"}, + "west": {"uv": [0, 3, 2, 5], "texture": "#0"}, + "up": {"uv": [0, 3, 2, 5], "texture": "#0"}, + "down": {"uv": [0, 3, 2, 5], "texture": "#0"} + } + }, + { + "name": "fume pipe", + "from": [6, 11, 12], + "to": [10, 16, 13], + "faces": { + "north": {"uv": [0, 3, 3, 5], "texture": "#0"}, + "east": {"uv": [0, 3, 3, 5], "texture": "#0"}, + "south": {"uv": [0, 3, 3, 5], "texture": "#0"}, + "west": {"uv": [0, 3, 3, 5], "texture": "#0"}, + "up": {"uv": [0, 3, 3, 5], "texture": "#0"}, + "down": {"uv": [0, 3, 3, 5], "texture": "#0"} + } + }, + { + "name": "fume pipe", + "from": [6, 3, 14], + "to": [10, 16, 15], + "faces": { + "north": {"uv": [0, 3, 3, 5], "texture": "#0"}, + "east": {"uv": [0, 3, 3, 5], "texture": "#0"}, + "south": {"uv": [0, 3, 3, 5], "texture": "#0"}, + "west": {"uv": [0, 3, 3, 5], "texture": "#0"}, + "up": {"uv": [0, 3, 3, 5], "texture": "#0"}, + "down": {"uv": [0, 3, 3, 5], "texture": "#0"} + } + }, + { + "name": "fume pipe", + "from": [6, 10, 13], + "to": [10, 16, 14], + "faces": { + "north": {"uv": [0, 3, 3, 5], "texture": "#0"}, + "east": {"uv": [0, 3, 3, 5], "texture": "#0"}, + "south": {"uv": [0, 3, 3, 5], "texture": "#0"}, + "west": {"uv": [0, 3, 3, 5], "texture": "#0"}, + "up": {"uv": [0, 3, 3, 5], "texture": "#0"}, + "down": {"uv": [0, 3, 3, 5], "texture": "#0"} + } + }, + { + "name": "fume pipe", + "from": [6, 12, 15], + "to": [10, 16, 16], + "faces": { + "north": {"uv": [0, 3, 3, 5], "texture": "#0"}, + "east": {"uv": [0, 3, 3, 5], "texture": "#0"}, + "south": {"uv": [0, 3, 3, 5], "texture": "#0"}, + "west": {"uv": [0, 3, 3, 5], "texture": "#0"}, + "up": {"uv": [0, 3, 3, 5], "texture": "#0"}, + "down": {"uv": [0, 3, 3, 5], "texture": "#0"} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [41, 0, 0], + "translation": [0, 1, 0], + "scale": [0.3, 0.3, 0.3] + }, + "thirdperson_lefthand": { + "rotation": [41, 0, 0], + "translation": [0, 1, 0], + "scale": [0.3, 0.3, 0.3] + }, + "firstperson_righthand": { + "scale": [0.3, 0.3, 0.3] + }, + "firstperson_lefthand": { + "scale": [0.3, 0.3, 0.3] + }, + "ground": { + "translation": [0, 2.5, 0], + "scale": [0.3, 0.3, 0.3] + }, + "gui": { + "rotation": [13, 19, 0], + "scale": [0.7, 0.7, 0.7] + }, + "head": { + "translation": [0, 12.75, 0] + }, + "fixed": { + "translation": [0, 1.75, 2.75] + } + }, + "groups": [ + { + "name": "Leg1", + "origin": [8, 8, 8], + "children": [0, 1] + }, + { + "name": "leg2", + "origin": [8, 8, 8], + "children": [2, 3] + }, + { + "name": "leg3", + "origin": [8, 8, 8], + "children": [4, 5] + }, + { + "name": "leg 4", + "origin": [8, 8, 8], + "children": [6, 7] + }, 8, 9, 10, + { + "name": "group", + "origin": [8, 8, 8], + "children": [11, 12, 13, 14] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/tutorial/models/item/oven.json b/src/main/resources/assets/tutorial/models/item/oven.json new file mode 100644 index 0000000..5b69a98 --- /dev/null +++ b/src/main/resources/assets/tutorial/models/item/oven.json @@ -0,0 +1,3 @@ +{ + "parent": "tutorial:block/oven" +} \ No newline at end of file diff --git a/src/main/resources/assets/tutorial/textures/blocks/oven.png b/src/main/resources/assets/tutorial/textures/blocks/oven.png new file mode 100644 index 0000000000000000000000000000000000000000..ee0c4359250d9ea243be4e4f535eba97d7b8a108 GIT binary patch literal 1747 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 PQILX+vUKqalYsvNKqS8J literal 0 HcmV?d00001