diff --git a/psd/end_stone_smelter.psd b/psd/end_stone_smelter.psd index a3f2b7c0..884266ae 100644 Binary files a/psd/end_stone_smelter.psd and b/psd/end_stone_smelter.psd differ diff --git a/psd/end_stone_smelter_on.psd b/psd/end_stone_smelter_on.psd index abf5ff60..8bec3355 100644 Binary files a/psd/end_stone_smelter_on.psd and b/psd/end_stone_smelter_on.psd differ diff --git a/src/main/java/ru/betterend/blocks/BaseBlockWithEntity.java b/src/main/java/ru/betterend/blocks/BaseBlockWithEntity.java new file mode 100644 index 00000000..91d28e11 --- /dev/null +++ b/src/main/java/ru/betterend/blocks/BaseBlockWithEntity.java @@ -0,0 +1,28 @@ +package ru.betterend.blocks; + +import java.util.Collections; +import java.util.List; + +import net.minecraft.block.BlockState; +import net.minecraft.block.BlockWithEntity; +import net.minecraft.block.entity.BlockEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.loot.context.LootContext; +import net.minecraft.world.BlockView; + +public class BaseBlockWithEntity extends BlockWithEntity { + + public BaseBlockWithEntity(Settings settings) { + super(settings); + } + + @Override + public BlockEntity createBlockEntity(BlockView world) { + return null; + } + + @Override + public List getDroppedStacks(BlockState state, LootContext.Builder builder) { + return Collections.singletonList(new ItemStack(this)); + } +} diff --git a/src/main/java/ru/betterend/blocks/EndStoneSmelter.java b/src/main/java/ru/betterend/blocks/EndStoneSmelter.java new file mode 100644 index 00000000..f42dbb0b --- /dev/null +++ b/src/main/java/ru/betterend/blocks/EndStoneSmelter.java @@ -0,0 +1,104 @@ +package ru.betterend.blocks; + +import java.util.Collections; +import java.util.List; + +import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; +import net.minecraft.block.Block; +import net.minecraft.block.BlockRenderType; +import net.minecraft.block.BlockState; +import net.minecraft.block.HorizontalFacingBlock; +import net.minecraft.block.Material; +import net.minecraft.block.MaterialColor; +import net.minecraft.block.entity.BlockEntity; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.ItemPlacementContext; +import net.minecraft.item.ItemStack; +import net.minecraft.loot.context.LootContext; +import net.minecraft.screen.ScreenHandler; +import net.minecraft.sound.BlockSoundGroup; +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.util.ActionResult; +import net.minecraft.util.BlockMirror; +import net.minecraft.util.BlockRotation; +import net.minecraft.util.Hand; +import net.minecraft.util.hit.BlockHitResult; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Direction; +import net.minecraft.world.BlockView; +import net.minecraft.world.World; + +public class EndStoneSmelter extends BaseBlockWithEntity { + public static final DirectionProperty FACING = HorizontalFacingBlock.FACING; + public static final BooleanProperty LIT = Properties.LIT; + + public EndStoneSmelter() { + super(FabricBlockSettings.of(Material.STONE, MaterialColor.GRAY) + .hardness(4F) + .resistance(100F) + .requiresTool() + .sounds(BlockSoundGroup.STONE)); + this.setDefaultState(this.stateManager.getDefaultState() + .with(FACING, Direction.NORTH) + .with(LIT, false)); + } + + public ActionResult onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockHitResult hit) { + if (world.isClient) { + return ActionResult.SUCCESS; + } else { + this.openScreen(world, pos, player); + return ActionResult.CONSUME; + } + } + + private void openScreen(World world, BlockPos pos, PlayerEntity player) {} + + @Override + public BlockState getPlacementState(ItemPlacementContext ctx) { + return this.getDefaultState().with(FACING, ctx.getPlayerFacing().getOpposite()); + } + + @Override + public BlockEntity createBlockEntity(BlockView world) { + return null; + } + + @Override + public List getDroppedStacks(BlockState state, LootContext.Builder builder) { + return Collections.singletonList(new ItemStack(this)); + } + + @Override + public boolean hasComparatorOutput(BlockState state) { + return true; + } + + @Override + public int getComparatorOutput(BlockState state, World world, BlockPos pos) { + return ScreenHandler.calculateComparatorOutput(world.getBlockEntity(pos)); + } + + @Override + public BlockRenderType getRenderType(BlockState state) { + return BlockRenderType.MODEL; + } + + @Override + public BlockState rotate(BlockState state, BlockRotation rotation) { + return (BlockState)state.with(FACING, rotation.rotate((Direction)state.get(FACING))); + } + + @Override + public BlockState mirror(BlockState state, BlockMirror mirror) { + return state.rotate(mirror.getRotation((Direction)state.get(FACING))); + } + + @Override + protected void appendProperties(StateManager.Builder builder) { + builder.add(FACING, LIT); + } +} diff --git a/src/main/java/ru/betterend/recipe/CraftingRecipes.java b/src/main/java/ru/betterend/recipe/CraftingRecipes.java index eefe84e0..6d0adad9 100644 --- a/src/main/java/ru/betterend/recipe/CraftingRecipes.java +++ b/src/main/java/ru/betterend/recipe/CraftingRecipes.java @@ -9,11 +9,11 @@ import ru.betterend.registry.BlockRegistry; public class CraftingRecipes { public static void register() { if (blockExists(BlockRegistry.ENDER_BLOCK)) { - RecipeBuilder.make("be_ender_pearl_to_block", BlockRegistry.ENDER_BLOCK) + RecipeBuilder.make("ender_pearl_to_block", BlockRegistry.ENDER_BLOCK) .setShape(new String[] { "OO", "OO" }) .addMaterial('O', Items.ENDER_PEARL) .build(); - RecipeBuilder.make("be_ender_block_to_pearl", Items.ENDER_PEARL) + RecipeBuilder.make("ender_block_to_pearl", Items.ENDER_PEARL) .addMaterial('#', BlockRegistry.ENDER_BLOCK) .setOutputCount(4) .setList("#") diff --git a/src/main/java/ru/betterend/registry/BlockRegistry.java b/src/main/java/ru/betterend/registry/BlockRegistry.java index 24afbe84..20ff706e 100644 --- a/src/main/java/ru/betterend/registry/BlockRegistry.java +++ b/src/main/java/ru/betterend/registry/BlockRegistry.java @@ -11,6 +11,7 @@ import ru.betterend.blocks.AeterniumBlock; import ru.betterend.blocks.BlockEndstoneDust; import ru.betterend.blocks.BlockOre; import ru.betterend.blocks.BlockTerrain; +import ru.betterend.blocks.EndStoneSmelter; import ru.betterend.blocks.EnderBlock; import ru.betterend.blocks.TerminiteBlock; import ru.betterend.tab.CreativeTab; @@ -29,6 +30,9 @@ public class BlockRegistry { public static final Block AETERNIUM_BLOCK = registerBlock("aeternium_block", new AeterniumBlock()); public static final Block ENDER_BLOCK = registerBlock("ender_block", new EnderBlock()); + // BlockEntities // + public static final Block END_STONE_SMELTER = registerBlock("end_stone_smelter", new EndStoneSmelter()); + public static void register() {} private static Block registerBlock(String name, Block block) { diff --git a/src/main/resources/assets/betterend/blockstates/end_stone_smelter.json b/src/main/resources/assets/betterend/blockstates/end_stone_smelter.json new file mode 100644 index 00000000..a2b1b3fa --- /dev/null +++ b/src/main/resources/assets/betterend/blockstates/end_stone_smelter.json @@ -0,0 +1,34 @@ +{ + "variants": { + "facing=east,lit=false": { + "model": "betterend:block/end_stone_smelter", + "y": 90 + }, + "facing=east,lit=true": { + "model": "betterend:block/end_stone_smelter_on", + "y": 90 + }, + "facing=north,lit=false": { + "model": "betterend:block/end_stone_smelter" + }, + "facing=north,lit=true": { + "model": "betterend:block/end_stone_smelter_on" + }, + "facing=south,lit=false": { + "model": "betterend:block/end_stone_smelter", + "y": 180 + }, + "facing=south,lit=true": { + "model": "betterend:block/end_stone_smelter_on", + "y": 180 + }, + "facing=west,lit=false": { + "model": "betterend:block/end_stone_smelter", + "y": 270 + }, + "facing=west,lit=true": { + "model": "betterend:block/end_stone_smelter_on", + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/betterend/lang/en_us.json b/src/main/resources/assets/betterend/lang/en_us.json index 0fff745c..ad6c5824 100644 --- a/src/main/resources/assets/betterend/lang/en_us.json +++ b/src/main/resources/assets/betterend/lang/en_us.json @@ -8,6 +8,7 @@ "block.betterend.terminite_block": "Terminite Block", "block.betterend.aeternium_block": "Aeternium Block", "block.betterend.ender_block": "Ender Block", + "block.betterend.end_stone_smelter": "End Stone Smelter", "item.betterend.ender_dust": "Ender Dust", "item.betterend.terminite_ingot": "Terminite Ingot", diff --git a/src/main/resources/assets/betterend/lang/ru_ru.json b/src/main/resources/assets/betterend/lang/ru_ru.json index 7014b297..8a1ab3be 100644 --- a/src/main/resources/assets/betterend/lang/ru_ru.json +++ b/src/main/resources/assets/betterend/lang/ru_ru.json @@ -8,6 +8,7 @@ "block.betterend.terminite_block": "Блок Терминита", "block.betterend.aeternium_block": "Блок Этерия", "block.betterend.ender_block": "Блок Края", + "block.betterend.end_stone_smelter": "Плавильня из камня Края", "item.betterend.ender_dust": "Пыль Края", "item.betterend.terminite_ingot": "Терминитовый слиток", diff --git a/src/main/resources/assets/betterend/models/block/end_stone_smelter.json b/src/main/resources/assets/betterend/models/block/end_stone_smelter.json new file mode 100644 index 00000000..6451115a --- /dev/null +++ b/src/main/resources/assets/betterend/models/block/end_stone_smelter.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/orientable", + "textures": { + "top": "betterend:block/end_stone_smelter_top", + "front": "betterend:block/end_stone_smelter_front", + "side": "betterend:block/end_stone_smelter_side" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/betterend/models/block/end_stone_smelter_on.json b/src/main/resources/assets/betterend/models/block/end_stone_smelter_on.json new file mode 100644 index 00000000..e7d3e22a --- /dev/null +++ b/src/main/resources/assets/betterend/models/block/end_stone_smelter_on.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/orientable", + "textures": { + "top": "betterend:block/end_stone_smelter_top", + "front": "betterend:block/end_stone_smelter_front_on", + "side": "betterend:block/end_stone_smelter_side" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/betterend/models/item/end_stone_smelter.json b/src/main/resources/assets/betterend/models/item/end_stone_smelter.json new file mode 100644 index 00000000..daaa1227 --- /dev/null +++ b/src/main/resources/assets/betterend/models/item/end_stone_smelter.json @@ -0,0 +1,3 @@ +{ + "parent": "betterend:block/end_stone_smelter" +} \ No newline at end of file diff --git a/src/main/resources/assets/betterend/textures/block/end_stone_smelter_front.png b/src/main/resources/assets/betterend/textures/block/end_stone_smelter_front.png index 55fc6082..b2f29f5d 100644 Binary files a/src/main/resources/assets/betterend/textures/block/end_stone_smelter_front.png and b/src/main/resources/assets/betterend/textures/block/end_stone_smelter_front.png differ diff --git a/src/main/resources/assets/betterend/textures/block/end_stone_smelter_front_on.png b/src/main/resources/assets/betterend/textures/block/end_stone_smelter_front_on.png index 63ae2cef..4e949f6a 100644 Binary files a/src/main/resources/assets/betterend/textures/block/end_stone_smelter_front_on.png and b/src/main/resources/assets/betterend/textures/block/end_stone_smelter_front_on.png differ diff --git a/src/main/resources/assets/betterend/textures/block/end_stone_smelter_front_on.png.mcmeta b/src/main/resources/assets/betterend/textures/block/end_stone_smelter_front_on.png.mcmeta index 4894b537..1c2798b6 100644 --- a/src/main/resources/assets/betterend/textures/block/end_stone_smelter_front_on.png.mcmeta +++ b/src/main/resources/assets/betterend/textures/block/end_stone_smelter_front_on.png.mcmeta @@ -1,6 +1,12 @@ { "animation": { "interpolate": true, - "frametime": 10 + "frametime": 8, + "frames": [ + 0, + 1, + 2, + 3 + ] } } diff --git a/src/main/resources/assets/betterend/textures/block/end_stone_smelter_side.png b/src/main/resources/assets/betterend/textures/block/end_stone_smelter_side.png index 61f664db..17bb8985 100644 Binary files a/src/main/resources/assets/betterend/textures/block/end_stone_smelter_side.png and b/src/main/resources/assets/betterend/textures/block/end_stone_smelter_side.png differ diff --git a/src/main/resources/assets/betterend/textures/block/end_stone_smelter_top.png b/src/main/resources/assets/betterend/textures/block/end_stone_smelter_top.png index dd613ebc..2543dcdc 100644 Binary files a/src/main/resources/assets/betterend/textures/block/end_stone_smelter_top.png and b/src/main/resources/assets/betterend/textures/block/end_stone_smelter_top.png differ