From be634de3cef2d30838bfd205231706b8b6d2aefc Mon Sep 17 00:00:00 2001 From: jotty Date: Thu, 29 Oct 2020 21:52:10 +0100 Subject: [PATCH] experiments with lava hoarder block entity --- .../EmptyLavaHoarderBlockEntity.java | 53 +++++++++++++++++++ .../blockentity/QuickieFabricBlockEntity.java | 1 + .../blocks/BlockEmptyLavahoarder.java | 12 ++++- .../quickiefabric/init/RegistryManager.java | 34 ++++++++---- 4 files changed, 90 insertions(+), 10 deletions(-) create mode 100644 src/main/java/de/jottyfan/minecraft/quickiefabric/blockentity/EmptyLavaHoarderBlockEntity.java diff --git a/src/main/java/de/jottyfan/minecraft/quickiefabric/blockentity/EmptyLavaHoarderBlockEntity.java b/src/main/java/de/jottyfan/minecraft/quickiefabric/blockentity/EmptyLavaHoarderBlockEntity.java new file mode 100644 index 0000000..5ad9205 --- /dev/null +++ b/src/main/java/de/jottyfan/minecraft/quickiefabric/blockentity/EmptyLavaHoarderBlockEntity.java @@ -0,0 +1,53 @@ +package de.jottyfan.minecraft.quickiefabric.blockentity; + +import org.apache.logging.log4j.LogManager; + +import de.jottyfan.minecraft.quickiefabric.blocks.QuickieBlocks; +import net.minecraft.block.Blocks; +import net.minecraft.block.entity.BlockEntity; +import net.minecraft.util.Tickable; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +/** + * + * @author jotty + * + */ +public class EmptyLavaHoarderBlockEntity extends BlockEntity implements Tickable { + + public EmptyLavaHoarderBlockEntity() { + super(QuickieFabricBlockEntity.EMPTYLAVAHOARDER); + } + + /** + * sucks the lava that touches the block + * + * @param world the world + * @param pos the pos + * @return true if lava was found + */ + private boolean suckLava(World world, BlockPos pos) { + if (Blocks.LAVA.getName().equals(world.getBlockState(pos).getBlock().getName())) { + world.setBlockState(pos, Blocks.AIR.getDefaultState()); + return true; + } + return false; + } + + @Override + public void tick() { + BlockPos pos = getPos(); + World world = getWorld(); + boolean found = suckLava(world, pos.north()); + found = found || suckLava(world, pos.south()); + found = found || suckLava(world, pos.east()); + found = found || suckLava(world, pos.west()); + found = found || suckLava(world, pos.up()); + found = found || suckLava(world, pos.down()); + if (found) { + world.getBlockEntity(pos).markRemoved(); + world.setBlockState(pos, QuickieBlocks.LAVAHOARDER.getDefaultState()); + } + } +} diff --git a/src/main/java/de/jottyfan/minecraft/quickiefabric/blockentity/QuickieFabricBlockEntity.java b/src/main/java/de/jottyfan/minecraft/quickiefabric/blockentity/QuickieFabricBlockEntity.java index 46bf626..3251b13 100644 --- a/src/main/java/de/jottyfan/minecraft/quickiefabric/blockentity/QuickieFabricBlockEntity.java +++ b/src/main/java/de/jottyfan/minecraft/quickiefabric/blockentity/QuickieFabricBlockEntity.java @@ -10,4 +10,5 @@ import net.minecraft.block.entity.BlockEntityType; public class QuickieFabricBlockEntity { public static BlockEntityType ITEMHOARDER; public static BlockEntityType MONSTERHOARDER; + public static BlockEntityType EMPTYLAVAHOARDER; } diff --git a/src/main/java/de/jottyfan/minecraft/quickiefabric/blocks/BlockEmptyLavahoarder.java b/src/main/java/de/jottyfan/minecraft/quickiefabric/blocks/BlockEmptyLavahoarder.java index cbffe64..8f9744a 100644 --- a/src/main/java/de/jottyfan/minecraft/quickiefabric/blocks/BlockEmptyLavahoarder.java +++ b/src/main/java/de/jottyfan/minecraft/quickiefabric/blocks/BlockEmptyLavahoarder.java @@ -6,12 +6,16 @@ import java.util.List; import java.util.Random; import java.util.Set; +import de.jottyfan.minecraft.quickiefabric.blockentity.EmptyLavaHoarderBlockEntity; +import de.jottyfan.minecraft.quickiefabric.blockentity.MonsterHoarderBlockEntity; import de.jottyfan.minecraft.quickiefabric.items.QuickieItems; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.block.Block; +import net.minecraft.block.BlockEntityProvider; import net.minecraft.block.BlockState; import net.minecraft.block.Blocks; import net.minecraft.block.Material; +import net.minecraft.block.entity.BlockEntity; import net.minecraft.entity.ExperienceOrbEntity; import net.minecraft.entity.ItemEntity; import net.minecraft.entity.LivingEntity; @@ -19,6 +23,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.item.Items; import net.minecraft.loot.context.LootContext.Builder; import net.minecraft.util.math.BlockPos; +import net.minecraft.world.BlockView; import net.minecraft.world.World; /** @@ -26,12 +31,17 @@ import net.minecraft.world.World; * @author jotty * */ -public class BlockEmptyLavahoarder extends Block { +public class BlockEmptyLavahoarder extends Block implements BlockEntityProvider { public BlockEmptyLavahoarder() { super(FabricBlockSettings.of(Material.STONE).hardness(2.5f)); } + @Override + public BlockEntity createBlockEntity(BlockView blockView) { + return new EmptyLavaHoarderBlockEntity(); + } + @Override public List getDroppedStacks(BlockState state, Builder builder) { List list = new ArrayList<>(); diff --git a/src/main/java/de/jottyfan/minecraft/quickiefabric/init/RegistryManager.java b/src/main/java/de/jottyfan/minecraft/quickiefabric/init/RegistryManager.java index 3dbec65..5acb3d4 100644 --- a/src/main/java/de/jottyfan/minecraft/quickiefabric/init/RegistryManager.java +++ b/src/main/java/de/jottyfan/minecraft/quickiefabric/init/RegistryManager.java @@ -2,10 +2,14 @@ package de.jottyfan.minecraft.quickiefabric.init; import java.util.Arrays; import java.util.List; +import java.util.function.Supplier; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import com.google.common.collect.ImmutableSet; + +import de.jottyfan.minecraft.quickiefabric.blockentity.EmptyLavaHoarderBlockEntity; import de.jottyfan.minecraft.quickiefabric.blockentity.ItemHoarderBlockEntity; import de.jottyfan.minecraft.quickiefabric.blockentity.MonsterHoarderBlockEntity; import de.jottyfan.minecraft.quickiefabric.blockentity.QuickieFabricBlockEntity; @@ -19,6 +23,7 @@ import net.fabricmc.fabric.api.client.itemgroup.FabricItemGroupBuilder; import net.fabricmc.fabric.api.screenhandler.v1.ScreenHandlerRegistry; import net.minecraft.block.Block; import net.minecraft.block.Blocks; +import net.minecraft.block.entity.BlockEntity; import net.minecraft.block.entity.BlockEntityType; import net.minecraft.item.BlockItem; import net.minecraft.item.Item; @@ -68,17 +73,20 @@ public class RegistryManager { public static final ConfiguredFeature FEATURE_DIRTSALPETER = Feature.ORE .configure(new OreFeatureConfig(new BlockMatchRuleTest(Blocks.DIRT), QuickieBlocks.DIRT_SALPETER.getDefaultState(), 3)) - .decorate(Decorator.RANGE.configure(new RangeDecoratorConfig(4, 0, 255))).spreadHorizontally().repeatRandomly(4); + .decorate(Decorator.RANGE.configure(new RangeDecoratorConfig(4, 0, 255))).spreadHorizontally() + .repeatRandomly(4); public static final ConfiguredFeature FEATURE_SANDSALPETER = Feature.ORE .configure(new OreFeatureConfig(new BlockMatchRuleTest(Blocks.SAND), QuickieBlocks.SAND_SALPETER.getDefaultState(), 3)) - .decorate(Decorator.RANGE.configure(new RangeDecoratorConfig(4, 0, 255))).spreadHorizontally().repeatRandomly(4); + .decorate(Decorator.RANGE.configure(new RangeDecoratorConfig(4, 0, 255))).spreadHorizontally() + .repeatRandomly(4); public static final ConfiguredFeature FEATURE_ORESANDSALPETER = Feature.ORE .configure(new OreFeatureConfig(new BlockMatchRuleTest(Blocks.SANDSTONE), QuickieBlocks.ORE_SAND_SALPETER.getDefaultState(), 3)) - .decorate(Decorator.RANGE.configure(new RangeDecoratorConfig(4, 0, 255))).spreadHorizontally().repeatRandomly(4); + .decorate(Decorator.RANGE.configure(new RangeDecoratorConfig(4, 0, 255))).spreadHorizontally() + .repeatRandomly(4); public static final List> FEATURE_UNDERGROUND_ORES = Arrays.asList(FEATURE_ORESALPETER, FEATURE_ORESULPHOR, FEATURE_DIRTSALPETER, FEATURE_SANDSALPETER, FEATURE_ORESANDSALPETER); @@ -137,13 +145,21 @@ public class RegistryManager { Registry.register(Registry.ITEM, new Identifier(QUICKIEFABRIC, name), item); } + public static final BlockEntityType registerBlockEntity(String name, + Supplier supplier, Block... blocks) { + return Registry.register(Registry.BLOCK_ENTITY_TYPE, QUICKIEFABRIC + ":" + name, + BlockEntityType.Builder.create(supplier, blocks).build(null)); + + } + + @SuppressWarnings("unchecked") public static final void registerBlockEntities() { - QuickieFabricBlockEntity.ITEMHOARDER = Registry.register(Registry.BLOCK_ENTITY_TYPE, - QUICKIEFABRIC + ":itemhoarderblockentity", - BlockEntityType.Builder.create(ItemHoarderBlockEntity::new, QuickieBlocks.ITEMHOARDER).build(null)); - QuickieFabricBlockEntity.MONSTERHOARDER = Registry.register(Registry.BLOCK_ENTITY_TYPE, - QUICKIEFABRIC + ":monsterhoarderblockentity", - BlockEntityType.Builder.create(MonsterHoarderBlockEntity::new, QuickieBlocks.MONSTERHOARDER).build(null)); + QuickieFabricBlockEntity.ITEMHOARDER = (BlockEntityType) registerBlockEntity( + "itemhoarderblockentity", ItemHoarderBlockEntity::new, QuickieBlocks.ITEMHOARDER); + QuickieFabricBlockEntity.MONSTERHOARDER = (BlockEntityType) registerBlockEntity( + "monsterhoarderblockentity", MonsterHoarderBlockEntity::new, QuickieBlocks.MONSTERHOARDER); + QuickieFabricBlockEntity.EMPTYLAVAHOARDER = (BlockEntityType) registerBlockEntity( + "emptylavahoarderblockentity", EmptyLavaHoarderBlockEntity::new, QuickieBlocks.EMPTYLAVAHOARDER); } public static final void registerBlocks() {