From 5475e514dcf0198d9593e8d36c81c27b4328dc42 Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Sun, 31 Jan 2021 17:29:56 +0300 Subject: [PATCH] Furnaces prototypes --- .../blocks/basis/EndFurnaceBlock.java | 65 +++++++++++++++++++ .../blocks/complex/StoneMaterial.java | 4 ++ .../blocks/entities/EFurnaceBlockEntity.java | 24 +++++++ .../java/ru/betterend/patterns/Patterns.java | 2 + .../ru/betterend/recipe/CraftingRecipes.java | 7 +- .../betterend/registry/EndBlockEntities.java | 17 +++++ .../java/ru/betterend/registry/EndBlocks.java | 2 + .../betterend/patterns/block/furnace.json | 9 +++ .../patterns/blockstate/furnace.json | 34 ++++++++++ 9 files changed, 161 insertions(+), 3 deletions(-) create mode 100644 src/main/java/ru/betterend/blocks/basis/EndFurnaceBlock.java create mode 100644 src/main/java/ru/betterend/blocks/entities/EFurnaceBlockEntity.java create mode 100644 src/main/resources/assets/betterend/patterns/block/furnace.json create mode 100644 src/main/resources/assets/betterend/patterns/blockstate/furnace.json diff --git a/src/main/java/ru/betterend/blocks/basis/EndFurnaceBlock.java b/src/main/java/ru/betterend/blocks/basis/EndFurnaceBlock.java new file mode 100644 index 00000000..c75e50dd --- /dev/null +++ b/src/main/java/ru/betterend/blocks/basis/EndFurnaceBlock.java @@ -0,0 +1,65 @@ +package ru.betterend.blocks.basis; + +import java.io.Reader; +import java.util.Map; + +import com.google.common.collect.Maps; + +import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; +import net.minecraft.block.Block; +import net.minecraft.block.FurnaceBlock; +import net.minecraft.block.entity.BlockEntity; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.screen.NamedScreenHandlerFactory; +import net.minecraft.stat.Stats; +import net.minecraft.util.Identifier; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.registry.Registry; +import net.minecraft.world.BlockView; +import net.minecraft.world.World; +import ru.betterend.blocks.entities.EFurnaceBlockEntity; +import ru.betterend.patterns.BlockPatterned; +import ru.betterend.patterns.Patterns; + +public class EndFurnaceBlock extends FurnaceBlock implements BlockPatterned { + public EndFurnaceBlock(Block source) { + super(FabricBlockSettings.copyOf(source)); + } + + @Override + public BlockEntity createBlockEntity(BlockView world) { + return new EFurnaceBlockEntity(); + } + + @Override + protected void openScreen(World world, BlockPos pos, PlayerEntity player) { + BlockEntity blockEntity = world.getBlockEntity(pos); + if (blockEntity instanceof EFurnaceBlockEntity) { + player.openHandledScreen((NamedScreenHandlerFactory) blockEntity); + player.incrementStat(Stats.INTERACT_WITH_FURNACE); + } + } + + @Override + public String getStatesPattern(Reader data) { + Identifier blockId = Registry.BLOCK.getId(this); + return Patterns.createJson(data, blockId.getPath(), blockId.getPath()); + } + + @Override + public String getModelPattern(String block) { + String add = block.contains("_on") ? "_on" : ""; + Identifier blockId = Registry.BLOCK.getId(this); + Map map = Maps.newHashMap(); + map.put("%top%", blockId.getPath() + "_top"); + map.put("%front%", blockId.getPath() + "_front" + add); + map.put("%side%", blockId.getPath() + "_side"); + map.put("%bottom%", blockId.getPath() + "_bottom"); + return Patterns.createJson(Patterns.BLOCK_FURNACE, map); + } + + @Override + public Identifier statePatternId() { + return Patterns.STATE_FURNACE; + } +} diff --git a/src/main/java/ru/betterend/blocks/complex/StoneMaterial.java b/src/main/java/ru/betterend/blocks/complex/StoneMaterial.java index d4b4cefe..b98fcd97 100644 --- a/src/main/java/ru/betterend/blocks/complex/StoneMaterial.java +++ b/src/main/java/ru/betterend/blocks/complex/StoneMaterial.java @@ -8,6 +8,7 @@ import net.minecraft.tag.BlockTags; import net.minecraft.tag.ItemTags; import ru.betterend.blocks.EndPedestal; import ru.betterend.blocks.basis.BlockBase; +import ru.betterend.blocks.basis.EndFurnaceBlock; import ru.betterend.blocks.basis.EndPillarBlock; import ru.betterend.blocks.basis.EndSlabBlock; import ru.betterend.blocks.basis.EndStairsBlock; @@ -40,6 +41,7 @@ public class StoneMaterial { public final Block brick_stairs; public final Block brick_slab; public final Block brick_wall; + public final Block furnace; public StoneMaterial(String name, MaterialColor color) { FabricBlockSettings material = FabricBlockSettings.copyOf(Blocks.END_STONE).materialColor(color); @@ -60,6 +62,7 @@ public class StoneMaterial { brick_stairs = EndBlocks.registerBlock(name + "_bricks_stairs", new EndStairsBlock(bricks)); brick_slab = EndBlocks.registerBlock(name + "_bricks_slab", new EndSlabBlock(bricks)); brick_wall = EndBlocks.registerBlock(name + "_bricks_wall", new EndWallBlock(bricks)); + furnace = EndBlocks.registerBlock(name + "_furnace", new EndFurnaceBlock(bricks)); // Recipes // GridRecipe.make(name + "_bricks", bricks).setOutputCount(4).setShape("##", "##").addMaterial('#', stone).setGroup("end_bricks").build(); @@ -78,6 +81,7 @@ public class StoneMaterial { GridRecipe.make(name + "_button", button).setList("#").addMaterial('#', stone).setGroup("end_stone_buttons").build(); GridRecipe.make(name + "_pressure_plate", pressure_plate).setShape("##").addMaterial('#', stone).setGroup("end_stone_plates").build(); GridRecipe.make(name + "_lantern", lantern).setShape("S", "#", "S").addMaterial('#', EndItems.CRYSTAL_SHARDS).addMaterial('S', slab, brick_slab).setGroup("end_stone_lanterns").build(); + GridRecipe.make(name + "_furnace", furnace).setShape("###", "# #", "###").addMaterial('#', stone).setGroup("end_stone_furnaces").build(); CraftingRecipes.registerPedestal(name + "_pedestal", pedestal, slab, pillar); diff --git a/src/main/java/ru/betterend/blocks/entities/EFurnaceBlockEntity.java b/src/main/java/ru/betterend/blocks/entities/EFurnaceBlockEntity.java new file mode 100644 index 00000000..8537ae9d --- /dev/null +++ b/src/main/java/ru/betterend/blocks/entities/EFurnaceBlockEntity.java @@ -0,0 +1,24 @@ +package ru.betterend.blocks.entities; + +import net.minecraft.block.entity.AbstractFurnaceBlockEntity; +import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.recipe.RecipeType; +import net.minecraft.screen.FurnaceScreenHandler; +import net.minecraft.screen.ScreenHandler; +import net.minecraft.text.Text; +import net.minecraft.text.TranslatableText; +import ru.betterend.registry.EndBlockEntities; + +public class EFurnaceBlockEntity extends AbstractFurnaceBlockEntity { + public EFurnaceBlockEntity() { + super(EndBlockEntities.FURNACE, RecipeType.SMELTING); + } + + protected Text getContainerName() { + return new TranslatableText("container.furnace"); + } + + protected ScreenHandler createScreenHandler(int syncId, PlayerInventory playerInventory) { + return new FurnaceScreenHandler(syncId, playerInventory, this, this.propertyDelegate); + } +} diff --git a/src/main/java/ru/betterend/patterns/Patterns.java b/src/main/java/ru/betterend/patterns/Patterns.java index daf238d2..6c4cfbcb 100644 --- a/src/main/java/ru/betterend/patterns/Patterns.java +++ b/src/main/java/ru/betterend/patterns/Patterns.java @@ -43,6 +43,7 @@ public class Patterns { public final static Identifier STATE_ANVIL = BetterEnd.makeID("patterns/blockstate/anvil.json"); public final static Identifier STATE_CHAIN = BetterEnd.makeID("patterns/blockstate/chain.json"); public final static Identifier STATE_CHANDELIER = BetterEnd.makeID("patterns/blockstate/chandelier.json"); + public final static Identifier STATE_FURNACE = BetterEnd.makeID("patterns/blockstate/furnace.json"); //Models Block public final static Identifier BLOCK_EMPTY = BetterEnd.makeID("patterns/block/empty.json"); @@ -96,6 +97,7 @@ public class Patterns { public final static Identifier BLOCK_CHANDELIER_FLOOR = BetterEnd.makeID("patterns/block/chandelier_floor.json"); public final static Identifier BLOCK_CHANDELIER_WALL = BetterEnd.makeID("patterns/block/chandelier_wall.json"); public final static Identifier BLOCK_CHANDELIER_CEIL = BetterEnd.makeID("patterns/block/chandelier_ceil.json"); + public final static Identifier BLOCK_FURNACE = BetterEnd.makeID("patterns/block/furnace.json"); //Models Item public final static Identifier ITEM_WALL = BetterEnd.makeID("patterns/item/pattern_wall.json"); diff --git a/src/main/java/ru/betterend/recipe/CraftingRecipes.java b/src/main/java/ru/betterend/recipe/CraftingRecipes.java index 735c04cb..5719d280 100644 --- a/src/main/java/ru/betterend/recipe/CraftingRecipes.java +++ b/src/main/java/ru/betterend/recipe/CraftingRecipes.java @@ -25,11 +25,11 @@ public class CraftingRecipes { .build(); } - GridRecipe.make("ender_pearl_to_block", EndBlocks.ENDER_BLOCK) + GridRecipe.make("ender_shards_to_block", EndBlocks.ENDER_BLOCK) .setShape("OO", "OO") - .addMaterial('O', Items.ENDER_PEARL) + .addMaterial('O', EndItems.ENDER_SHARD) .build(); - GridRecipe.make("ender_block_to_pearl", Items.ENDER_PEARL) + GridRecipe.make("ender_block_to_shards", EndItems.ENDER_SHARD) .addMaterial('#', EndBlocks.ENDER_BLOCK) .setOutputCount(4) .setList("#") @@ -180,6 +180,7 @@ public class CraftingRecipes { .build(); GridRecipe.make("charcoal_block", EndBlocks.CHARCOAL_BLOCK).setShape("###", "###", "###").addMaterial('#', Items.CHARCOAL).build(); + GridRecipe.make("end_stone_furnace", EndBlocks.END_STONE_FURNACE).setShape("###", "# #", "###").addMaterial('#', Blocks.END_STONE).build(); } private static void registerLantern(String name, Block lantern, Block slab) { diff --git a/src/main/java/ru/betterend/registry/EndBlockEntities.java b/src/main/java/ru/betterend/registry/EndBlockEntities.java index c3e6d87b..6b74d82c 100644 --- a/src/main/java/ru/betterend/registry/EndBlockEntities.java +++ b/src/main/java/ru/betterend/registry/EndBlockEntities.java @@ -15,11 +15,13 @@ import ru.betterend.blocks.EternalPedestal; import ru.betterend.blocks.InfusionPedestal; import ru.betterend.blocks.basis.EndBarrelBlock; import ru.betterend.blocks.basis.EndChestBlock; +import ru.betterend.blocks.basis.EndFurnaceBlock; import ru.betterend.blocks.basis.EndSignBlock; import ru.betterend.blocks.basis.PedestalBlock; import ru.betterend.blocks.entities.BlockEntityHydrothermalVent; import ru.betterend.blocks.entities.EBarrelBlockEntity; import ru.betterend.blocks.entities.EChestBlockEntity; +import ru.betterend.blocks.entities.EFurnaceBlockEntity; import ru.betterend.blocks.entities.ESignBlockEntity; import ru.betterend.blocks.entities.EndStoneSmelterBlockEntity; import ru.betterend.blocks.entities.EternalPedestalEntity; @@ -43,6 +45,8 @@ public class EndBlockEntities { BlockEntityType.Builder.create(ESignBlockEntity::new, getSigns())); public final static BlockEntityType HYDROTHERMAL_VENT = registerBlockEntity("hydrother_malvent", BlockEntityType.Builder.create(BlockEntityHydrothermalVent::new, EndBlocks.HYDROTHERMAL_VENT)); + public static final BlockEntityType FURNACE = registerBlockEntity("furnace", + BlockEntityType.Builder.create(EFurnaceBlockEntity::new, getFurnaces())); public static BlockEntityType registerBlockEntity(String id, BlockEntityType.Builder builder) { return Registry.register(Registry.BLOCK_ENTITY_TYPE, BetterEnd.makeID(id), builder.build(null)); @@ -103,4 +107,17 @@ public class EndBlockEntities { }); return result.toArray(new Block[] {}); } + + static Block[] getFurnaces() { + List result = Lists.newArrayList(); + EndItems.getModBlocks().forEach((item) -> { + if (item instanceof BlockItem) { + Block block = ((BlockItem) item).getBlock(); + if (block instanceof EndFurnaceBlock) { + result.add(block); + } + } + }); + return result.toArray(new Block[] {}); + } } diff --git a/src/main/java/ru/betterend/registry/EndBlocks.java b/src/main/java/ru/betterend/registry/EndBlocks.java index ab9f2e6c..58dbc930 100644 --- a/src/main/java/ru/betterend/registry/EndBlocks.java +++ b/src/main/java/ru/betterend/registry/EndBlocks.java @@ -90,6 +90,7 @@ import ru.betterend.blocks.UmbrellaTreeMembraneBlock; import ru.betterend.blocks.UmbrellaTreeSaplingBlock; import ru.betterend.blocks.VentBubbleColumnBlock; import ru.betterend.blocks.basis.EndCropBlock; +import ru.betterend.blocks.basis.EndFurnaceBlock; import ru.betterend.blocks.basis.EndLeavesBlock; import ru.betterend.blocks.basis.EndOreBlock; import ru.betterend.blocks.basis.EndUnderwaterWallPlantBlock; @@ -317,6 +318,7 @@ public class EndBlocks { public static final Block GOLD_CHANDELIER = EndBlocks.registerBlock("gold_chandelier", new ChandelierBlock(Blocks.GOLD_BLOCK)); // Blocks With Entity // + public static final Block END_STONE_FURNACE = registerBlock("end_stone_furnace", new EndFurnaceBlock(Blocks.END_STONE)); public static final Block END_STONE_SMELTER = registerBlock("end_stone_smelter", new EndStoneSmelter()); public static final Block ETERNAL_PEDESTAL = registerBlock("eternal_pedestal", new EternalPedestal()); public static final Block INFUSION_PEDESTAL = registerBlock("infusion_pedestal", new InfusionPedestal()); diff --git a/src/main/resources/assets/betterend/patterns/block/furnace.json b/src/main/resources/assets/betterend/patterns/block/furnace.json new file mode 100644 index 00000000..3824c3a0 --- /dev/null +++ b/src/main/resources/assets/betterend/patterns/block/furnace.json @@ -0,0 +1,9 @@ +{ + "parent": "minecraft:block/orientable_with_bottom", + "textures": { + "top": "minecraft:block/%top%", + "front": "minecraft:block/%front%", + "side": "minecraft:block/%side%" + "bottom": "minecraft:block/%bottom%" + } +} diff --git a/src/main/resources/assets/betterend/patterns/blockstate/furnace.json b/src/main/resources/assets/betterend/patterns/blockstate/furnace.json new file mode 100644 index 00000000..84d508df --- /dev/null +++ b/src/main/resources/assets/betterend/patterns/blockstate/furnace.json @@ -0,0 +1,34 @@ +{ + "variants": { + "facing=east,lit=false": { + "model": "betterend:pattern/%block%/%block%", + "y": 90 + }, + "facing=east,lit=true": { + "model": "betterend:pattern/%block%/%block%_on", + "y": 90 + }, + "facing=north,lit=false": { + "model": "betterend:pattern/%block%/%block%" + }, + "facing=north,lit=true": { + "model": "betterend:pattern/%block%/%block%_on" + }, + "facing=south,lit=false": { + "model": "betterend:pattern/%block%/%block%", + "y": 180 + }, + "facing=south,lit=true": { + "model": "betterend:pattern/%block%/%block%_on", + "y": 180 + }, + "facing=west,lit=false": { + "model": "betterend:pattern/%block%/%block%", + "y": 270 + }, + "facing=west,lit=true": { + "model": "betterend:pattern/%block%/%block%_on", + "y": 270 + } + } +}