experiments with lava hoarder block entity

This commit is contained in:
Jörg Henke 2020-10-29 21:52:10 +01:00
parent 8a54061dc4
commit be634de3ce
4 changed files with 90 additions and 10 deletions

View File

@ -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());
}
}
}

View File

@ -10,4 +10,5 @@ import net.minecraft.block.entity.BlockEntityType;
public class QuickieFabricBlockEntity { public class QuickieFabricBlockEntity {
public static BlockEntityType<ItemHoarderBlockEntity> ITEMHOARDER; public static BlockEntityType<ItemHoarderBlockEntity> ITEMHOARDER;
public static BlockEntityType<MonsterHoarderBlockEntity> MONSTERHOARDER; public static BlockEntityType<MonsterHoarderBlockEntity> MONSTERHOARDER;
public static BlockEntityType<EmptyLavaHoarderBlockEntity> EMPTYLAVAHOARDER;
} }

View File

@ -6,12 +6,16 @@ import java.util.List;
import java.util.Random; import java.util.Random;
import java.util.Set; 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 de.jottyfan.minecraft.quickiefabric.items.QuickieItems;
import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings;
import net.minecraft.block.Block; import net.minecraft.block.Block;
import net.minecraft.block.BlockEntityProvider;
import net.minecraft.block.BlockState; import net.minecraft.block.BlockState;
import net.minecraft.block.Blocks; import net.minecraft.block.Blocks;
import net.minecraft.block.Material; import net.minecraft.block.Material;
import net.minecraft.block.entity.BlockEntity;
import net.minecraft.entity.ExperienceOrbEntity; import net.minecraft.entity.ExperienceOrbEntity;
import net.minecraft.entity.ItemEntity; import net.minecraft.entity.ItemEntity;
import net.minecraft.entity.LivingEntity; import net.minecraft.entity.LivingEntity;
@ -19,6 +23,7 @@ import net.minecraft.item.ItemStack;
import net.minecraft.item.Items; import net.minecraft.item.Items;
import net.minecraft.loot.context.LootContext.Builder; import net.minecraft.loot.context.LootContext.Builder;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraft.world.BlockView;
import net.minecraft.world.World; import net.minecraft.world.World;
/** /**
@ -26,12 +31,17 @@ import net.minecraft.world.World;
* @author jotty * @author jotty
* *
*/ */
public class BlockEmptyLavahoarder extends Block { public class BlockEmptyLavahoarder extends Block implements BlockEntityProvider {
public BlockEmptyLavahoarder() { public BlockEmptyLavahoarder() {
super(FabricBlockSettings.of(Material.STONE).hardness(2.5f)); super(FabricBlockSettings.of(Material.STONE).hardness(2.5f));
} }
@Override
public BlockEntity createBlockEntity(BlockView blockView) {
return new EmptyLavaHoarderBlockEntity();
}
@Override @Override
public List<ItemStack> getDroppedStacks(BlockState state, Builder builder) { public List<ItemStack> getDroppedStacks(BlockState state, Builder builder) {
List<ItemStack> list = new ArrayList<>(); List<ItemStack> list = new ArrayList<>();

View File

@ -2,10 +2,14 @@ package de.jottyfan.minecraft.quickiefabric.init;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.function.Supplier;
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger; 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.ItemHoarderBlockEntity;
import de.jottyfan.minecraft.quickiefabric.blockentity.MonsterHoarderBlockEntity; import de.jottyfan.minecraft.quickiefabric.blockentity.MonsterHoarderBlockEntity;
import de.jottyfan.minecraft.quickiefabric.blockentity.QuickieFabricBlockEntity; 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.fabricmc.fabric.api.screenhandler.v1.ScreenHandlerRegistry;
import net.minecraft.block.Block; import net.minecraft.block.Block;
import net.minecraft.block.Blocks; import net.minecraft.block.Blocks;
import net.minecraft.block.entity.BlockEntity;
import net.minecraft.block.entity.BlockEntityType; import net.minecraft.block.entity.BlockEntityType;
import net.minecraft.item.BlockItem; import net.minecraft.item.BlockItem;
import net.minecraft.item.Item; import net.minecraft.item.Item;
@ -68,17 +73,20 @@ public class RegistryManager {
public static final ConfiguredFeature<?, ?> FEATURE_DIRTSALPETER = Feature.ORE public static final ConfiguredFeature<?, ?> FEATURE_DIRTSALPETER = Feature.ORE
.configure(new OreFeatureConfig(new BlockMatchRuleTest(Blocks.DIRT), .configure(new OreFeatureConfig(new BlockMatchRuleTest(Blocks.DIRT),
QuickieBlocks.DIRT_SALPETER.getDefaultState(), 3)) 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 public static final ConfiguredFeature<?, ?> FEATURE_SANDSALPETER = Feature.ORE
.configure(new OreFeatureConfig(new BlockMatchRuleTest(Blocks.SAND), .configure(new OreFeatureConfig(new BlockMatchRuleTest(Blocks.SAND),
QuickieBlocks.SAND_SALPETER.getDefaultState(), 3)) 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 public static final ConfiguredFeature<?, ?> FEATURE_ORESANDSALPETER = Feature.ORE
.configure(new OreFeatureConfig(new BlockMatchRuleTest(Blocks.SANDSTONE), .configure(new OreFeatureConfig(new BlockMatchRuleTest(Blocks.SANDSTONE),
QuickieBlocks.ORE_SAND_SALPETER.getDefaultState(), 3)) 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<ConfiguredFeature<?, ?>> FEATURE_UNDERGROUND_ORES = Arrays.asList(FEATURE_ORESALPETER, public static final List<ConfiguredFeature<?, ?>> FEATURE_UNDERGROUND_ORES = Arrays.asList(FEATURE_ORESALPETER,
FEATURE_ORESULPHOR, FEATURE_DIRTSALPETER, FEATURE_SANDSALPETER, FEATURE_ORESANDSALPETER); FEATURE_ORESULPHOR, FEATURE_DIRTSALPETER, FEATURE_SANDSALPETER, FEATURE_ORESANDSALPETER);
@ -137,13 +145,21 @@ public class RegistryManager {
Registry.register(Registry.ITEM, new Identifier(QUICKIEFABRIC, name), item); Registry.register(Registry.ITEM, new Identifier(QUICKIEFABRIC, name), item);
} }
public static final <T extends BlockEntity> BlockEntityType<? extends T> registerBlockEntity(String name,
Supplier<? extends T> 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() { public static final void registerBlockEntities() {
QuickieFabricBlockEntity.ITEMHOARDER = Registry.register(Registry.BLOCK_ENTITY_TYPE, QuickieFabricBlockEntity.ITEMHOARDER = (BlockEntityType<ItemHoarderBlockEntity>) registerBlockEntity(
QUICKIEFABRIC + ":itemhoarderblockentity", "itemhoarderblockentity", ItemHoarderBlockEntity::new, QuickieBlocks.ITEMHOARDER);
BlockEntityType.Builder.create(ItemHoarderBlockEntity::new, QuickieBlocks.ITEMHOARDER).build(null)); QuickieFabricBlockEntity.MONSTERHOARDER = (BlockEntityType<MonsterHoarderBlockEntity>) registerBlockEntity(
QuickieFabricBlockEntity.MONSTERHOARDER = Registry.register(Registry.BLOCK_ENTITY_TYPE, "monsterhoarderblockentity", MonsterHoarderBlockEntity::new, QuickieBlocks.MONSTERHOARDER);
QUICKIEFABRIC + ":monsterhoarderblockentity", QuickieFabricBlockEntity.EMPTYLAVAHOARDER = (BlockEntityType<EmptyLavaHoarderBlockEntity>) registerBlockEntity(
BlockEntityType.Builder.create(MonsterHoarderBlockEntity::new, QuickieBlocks.MONSTERHOARDER).build(null)); "emptylavahoarderblockentity", EmptyLavaHoarderBlockEntity::new, QuickieBlocks.EMPTYLAVAHOARDER);
} }
public static final void registerBlocks() { public static final void registerBlocks() {