From 5396cefbb3865970305de4f4d400fe6a2a66a6c3 Mon Sep 17 00:00:00 2001 From: Jottyfan Date: Mon, 11 Dec 2023 22:46:05 +0100 Subject: [PATCH] place sulfor on lava --- .../quickiefabric/blocks/BlockSulforpad.java | 26 +++++++-- .../quickiefabric/items/ItemSulphor.java | 54 ++++++++++++++----- .../configured_feature/sulforpad.json | 38 ++++++++----- .../worldgen/placed_feature/sulforpad.json | 16 +++--- 4 files changed, 96 insertions(+), 38 deletions(-) diff --git a/src/main/java/de/jottyfan/minecraft/quickiefabric/blocks/BlockSulforpad.java b/src/main/java/de/jottyfan/minecraft/quickiefabric/blocks/BlockSulforpad.java index 1786dd4..d2c4c86 100644 --- a/src/main/java/de/jottyfan/minecraft/quickiefabric/blocks/BlockSulforpad.java +++ b/src/main/java/de/jottyfan/minecraft/quickiefabric/blocks/BlockSulforpad.java @@ -12,15 +12,13 @@ import net.minecraft.block.Block; import net.minecraft.block.BlockState; import net.minecraft.block.Blocks; import net.minecraft.block.CropBlock; -import net.minecraft.block.IceBlock; import net.minecraft.block.ShapeContext; +import net.minecraft.entity.Entity; +import net.minecraft.entity.ai.pathing.NavigationType; import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.fluid.FluidState; -import net.minecraft.fluid.Fluids; import net.minecraft.item.ItemConvertible; import net.minecraft.item.ItemStack; import net.minecraft.loot.context.LootContextParameterSet.Builder; -import net.minecraft.server.world.ServerWorld; import net.minecraft.util.ActionResult; import net.minecraft.util.Hand; import net.minecraft.util.ItemScatterer; @@ -31,6 +29,7 @@ import net.minecraft.util.math.random.Random; import net.minecraft.util.shape.VoxelShape; import net.minecraft.world.BlockView; import net.minecraft.world.World; +import net.minecraft.world.WorldView; /** * @@ -41,12 +40,18 @@ public class BlockSulforpad extends CropBlock { public BlockSulforpad(AbstractBlock.Settings settings) { super(settings.nonOpaque().blockVision(Blocks::never).solidBlock(Blocks::never)); + setDefaultState(getDefaultState().with(this.getAgeProperty(), 0)); } protected BlockSulforpad() { super(FabricBlockSettings.create()); } + @Override + public boolean canPathfindThrough(BlockState state, BlockView world, BlockPos pos, NavigationType type) { + return true; + } + @Override public List getDroppedStacks(BlockState state, Builder builder) { Integer age = this.getAge(state); @@ -83,11 +88,22 @@ public class BlockSulforpad extends CropBlock { BlockHitResult hitResult) { if (!world.isClient && isMature(state)) { spawnHarvested(world, pos, state); - world.setBlockState(pos, state.with(AGE, 0)); + Random random = world.getRandom(); + world.setBlockState(pos, state.with(AGE, random.nextInt(6))); } return ActionResult.PASS; } + @Override + public void onEntityCollision(BlockState state, World world, BlockPos pos, Entity entity) { + // do nothing here + } + + @Override + public ItemStack getPickStack(WorldView world, BlockPos pos, BlockState state) { + return new ItemStack(QuickieItems.SULPHOR, 1); + } + @Override public MapCodec getCodec() { return BlockSulforpad.createCodec(BlockSulforpad::new); diff --git a/src/main/java/de/jottyfan/minecraft/quickiefabric/items/ItemSulphor.java b/src/main/java/de/jottyfan/minecraft/quickiefabric/items/ItemSulphor.java index 07ab369..e99801f 100644 --- a/src/main/java/de/jottyfan/minecraft/quickiefabric/items/ItemSulphor.java +++ b/src/main/java/de/jottyfan/minecraft/quickiefabric/items/ItemSulphor.java @@ -4,10 +4,18 @@ import de.jottyfan.minecraft.quickiefabric.blocks.QuickieBlocks; import net.fabricmc.fabric.api.item.v1.FabricItemSettings; import net.minecraft.block.Block; import net.minecraft.block.Blocks; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.BoatItem; import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; import net.minecraft.item.ItemUsageContext; import net.minecraft.util.ActionResult; +import net.minecraft.util.Hand; +import net.minecraft.util.TypedActionResult; +import net.minecraft.util.hit.BlockHitResult; +import net.minecraft.util.hit.HitResult; import net.minecraft.util.math.BlockPos; +import net.minecraft.world.RaycastContext; import net.minecraft.world.World; /** @@ -21,17 +29,37 @@ public class ItemSulphor extends Item { super(new FabricItemSettings()); } - @Override - public ActionResult useOnBlock(ItemUsageContext context) { - World world = context.getWorld(); - BlockPos pos = context.getBlockPos(); - Block block = world.getBlockState(pos).getBlock(); - if (Blocks.LAVA_CAULDRON.equals(block)) { - if (world.getBlockState(pos.up()).isAir()) { - world.setBlockState(pos.up(), QuickieBlocks.SULFORPAD.getDefaultState()); - context.getStack().decrement(1); - } - } - return ActionResult.PASS; - } + @Override + public ActionResult useOnBlock(ItemUsageContext context) { + World world = context.getWorld(); + BlockPos pos = context.getBlockPos(); + Block block = world.getBlockState(pos).getBlock(); + if (Blocks.LAVA_CAULDRON.equals(block)) { + if (world.getBlockState(pos.up()).isAir()) { + world.setBlockState(pos.up(), QuickieBlocks.SULFORPAD.getDefaultState()); + context.getStack().decrement(1); + } + } + return ActionResult.PASS; + } + + @Override + public TypedActionResult use(World world, PlayerEntity user, Hand hand) { + ItemStack itemStack = user.getStackInHand(hand); + BlockHitResult hitResult = BoatItem.raycast(world, user, RaycastContext.FluidHandling.SOURCE_ONLY); + if (((HitResult) hitResult).getType() == HitResult.Type.MISS) { + return TypedActionResult.pass(itemStack); + } + if (((HitResult) hitResult).getType() == HitResult.Type.BLOCK) { + if (!world.isClient) { + BlockPos pos = hitResult.getBlockPos(); + if (world.getBlockState(pos).getBlock().equals(Blocks.LAVA) && world.getBlockState(pos.up()).isAir()) { + world.setBlockState(pos.up(), QuickieBlocks.SULFORPAD.getDefaultState()); + itemStack.decrement(1); + } + } + return TypedActionResult.success(itemStack, world.isClient()); + } + return TypedActionResult.pass(itemStack); + } } diff --git a/src/main/resources/data/quickiefabric/worldgen/configured_feature/sulforpad.json b/src/main/resources/data/quickiefabric/worldgen/configured_feature/sulforpad.json index eff6a30..5219f45 100644 --- a/src/main/resources/data/quickiefabric/worldgen/configured_feature/sulforpad.json +++ b/src/main/resources/data/quickiefabric/worldgen/configured_feature/sulforpad.json @@ -1,18 +1,30 @@ { - "type": "minecraft:ore", + "type": "minecraft:random_patch", "config": { - "discard_chance_on_air_exposure": 0.0, - "size": 3, - "targets": [ - { - "state": { - "Name": "quickiefabric:sulforpad" - }, - "target": { - "predicate_type": "minecraft:block_match", - "block": "minecraft:lava" + "feature": { + "feature": { + "type": "minecraft:simple_block", + "config": { + "to_place": { + "type": "minecraft:simple_state_provider", + "state": { + "Name": "quickiefabric:sulforpad" + } + } } - } - ] + }, + "placement": [ + { + "type": "minecraft:block_predicate_filter", + "predicate": { + "type": "minecraft:matching_blocks", + "blocks": "minecraft:air" + } + } + ] + }, + "tries": 10, + "xz_spread": 7, + "y_spread": 1 } } \ No newline at end of file diff --git a/src/main/resources/data/quickiefabric/worldgen/placed_feature/sulforpad.json b/src/main/resources/data/quickiefabric/worldgen/placed_feature/sulforpad.json index c226464..097ffa6 100644 --- a/src/main/resources/data/quickiefabric/worldgen/placed_feature/sulforpad.json +++ b/src/main/resources/data/quickiefabric/worldgen/placed_feature/sulforpad.json @@ -1,18 +1,20 @@ { "feature": "quickiefabric:sulforpad", "placement": [ + { + "type": "minecraft:count", + "count": 4 + }, { "type": "minecraft:environment_scan", - "direction_of_search": "up", + "direction_of_search": "down", "max_steps": 1, "target_condition": { + "type": "minecraft:true" + }, + "allowed_search_condition": { "type": "minecraft:matching_blocks", - "offset": [ - 0, - 1, - 0 - ], - "blocks": "minecraft:air" + "blocks": "minecraft:lava" } } ]