diff --git a/src/main/java/ru/betterend/blocks/EndStoneSmelter.java b/src/main/java/ru/betterend/blocks/EndStoneSmelter.java index f42dbb0b..d00f2e56 100644 --- a/src/main/java/ru/betterend/blocks/EndStoneSmelter.java +++ b/src/main/java/ru/betterend/blocks/EndStoneSmelter.java @@ -2,8 +2,12 @@ package ru.betterend.blocks; import java.util.Collections; import java.util.List; +import java.util.Random; +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; 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; @@ -15,8 +19,11 @@ 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.particle.ParticleTypes; import net.minecraft.screen.ScreenHandler; import net.minecraft.sound.BlockSoundGroup; +import net.minecraft.sound.SoundCategory; +import net.minecraft.sound.SoundEvents; import net.minecraft.state.StateManager; import net.minecraft.state.property.BooleanProperty; import net.minecraft.state.property.DirectionProperty; @@ -55,7 +62,9 @@ public class EndStoneSmelter extends BaseBlockWithEntity { } } - private void openScreen(World world, BlockPos pos, PlayerEntity player) {} + private void openScreen(World world, BlockPos pos, PlayerEntity player) { + + } @Override public BlockState getPlacementState(ItemPlacementContext ctx) { @@ -101,4 +110,24 @@ public class EndStoneSmelter extends BaseBlockWithEntity { protected void appendProperties(StateManager.Builder builder) { builder.add(FACING, LIT); } + + @Environment(EnvType.CLIENT) + public void randomDisplayTick(BlockState state, World world, BlockPos pos, Random random) { + if (state.get(LIT)) { + double x = pos.getX() + 0.5D; + double y = pos.getY(); + double z = pos.getZ() + 0.5D; + if (random.nextDouble() < 0.1D) { + world.playSound(x, y, z, SoundEvents.BLOCK_BLASTFURNACE_FIRE_CRACKLE, SoundCategory.BLOCKS, 1.0F, 1.0F, false); + } + + Direction direction = (Direction)state.get(FACING); + Direction.Axis axis = direction.getAxis(); + double defOffset = random.nextDouble() * 0.6D - 0.3D; + double offX = axis == Direction.Axis.X ? direction.getOffsetX() * 0.52D : defOffset; + double offY = random.nextDouble() * 9.0D / 16.0D; + double offZ = axis == Direction.Axis.Z ? direction.getOffsetZ() * 0.52D : defOffset; + world.addParticle(ParticleTypes.SMOKE, x + offX, y + offY, z + offZ, 0.0D, 0.0D, 0.0D); + } + } } diff --git a/src/main/java/ru/betterend/blocks/entities/EndStoneSmelterBlockEntity.java b/src/main/java/ru/betterend/blocks/entities/EndStoneSmelterBlockEntity.java new file mode 100644 index 00000000..279fbb01 --- /dev/null +++ b/src/main/java/ru/betterend/blocks/entities/EndStoneSmelterBlockEntity.java @@ -0,0 +1,126 @@ +package ru.betterend.blocks.entities; + +import net.minecraft.block.entity.BlockEntityType; +import net.minecraft.block.entity.LockableContainerBlockEntity; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.inventory.SidedInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.recipe.Recipe; +import net.minecraft.recipe.RecipeFinder; +import net.minecraft.recipe.RecipeInputProvider; +import net.minecraft.recipe.RecipeUnlocker; +import net.minecraft.screen.ScreenHandler; +import net.minecraft.text.Text; +import net.minecraft.util.Tickable; +import net.minecraft.util.math.Direction; + +public class EndStoneSmelterBlockEntity extends LockableContainerBlockEntity implements SidedInventory, RecipeUnlocker, RecipeInputProvider, Tickable { + + protected EndStoneSmelterBlockEntity(BlockEntityType blockEntityType) { + super(blockEntityType); + } + + @Override + public int size() { + // TODO Auto-generated method stub + return 0; + } + + @Override + public boolean isEmpty() { + // TODO Auto-generated method stub + return false; + } + + @Override + public ItemStack getStack(int slot) { + // TODO Auto-generated method stub + return null; + } + + @Override + public ItemStack removeStack(int slot, int amount) { + // TODO Auto-generated method stub + return null; + } + + @Override + public ItemStack removeStack(int slot) { + // TODO Auto-generated method stub + return null; + } + + @Override + public void setStack(int slot, ItemStack stack) { + // TODO Auto-generated method stub + + } + + @Override + public boolean canPlayerUse(PlayerEntity player) { + // TODO Auto-generated method stub + return false; + } + + @Override + public void clear() { + // TODO Auto-generated method stub + + } + + @Override + protected Text getContainerName() { + // TODO Auto-generated method stub + return null; + } + + @Override + protected ScreenHandler createScreenHandler(int syncId, PlayerInventory playerInventory) { + // TODO Auto-generated method stub + return null; + } + + @Override + public void tick() { + // TODO Auto-generated method stub + + } + + @Override + public void provideRecipeInputs(RecipeFinder finder) { + // TODO Auto-generated method stub + + } + + @Override + public void setLastRecipe(Recipe recipe) { + // TODO Auto-generated method stub + + } + + @Override + public Recipe getLastRecipe() { + // TODO Auto-generated method stub + return null; + } + + @Override + public int[] getAvailableSlots(Direction side) { + // TODO Auto-generated method stub + return null; + } + + @Override + public boolean canInsert(int slot, ItemStack stack, Direction dir) { + // TODO Auto-generated method stub + return false; + } + + @Override + public boolean canExtract(int slot, ItemStack stack, Direction dir) { + // TODO Auto-generated method stub + return false; + } + +} diff --git a/src/main/java/ru/betterend/recipe/CraftingRecipes.java b/src/main/java/ru/betterend/recipe/CraftingRecipes.java index 6d0adad9..18c4efe7 100644 --- a/src/main/java/ru/betterend/recipe/CraftingRecipes.java +++ b/src/main/java/ru/betterend/recipe/CraftingRecipes.java @@ -1,6 +1,7 @@ package ru.betterend.recipe; import net.minecraft.block.Block; +import net.minecraft.block.Blocks; import net.minecraft.item.Item; import net.minecraft.item.Items; import net.minecraft.util.registry.Registry; @@ -19,6 +20,14 @@ public class CraftingRecipes { .setList("#") .build(); } + if (blockExists(BlockRegistry.END_STONE_SMELTER)) { + RecipeBuilder.make("end_stone_smelter", BlockRegistry.END_STONE_SMELTER) + .setShape(new String[] { "###", "V#V", "###" }) + .addMaterial('#', Blocks.END_STONE_BRICKS) + .addMaterial('V', Items.BUCKET) + .build(); + + } } protected static boolean itemExists(Item item) {