From b51722e1818e4785c773245645ababa3802860b1 Mon Sep 17 00:00:00 2001 From: Michael Date: Wed, 9 Sep 2020 16:32:40 +0100 Subject: [PATCH] Extended Baseblock for BlockItems, auto register blockItems --- .../blocks/BlockAtomicReconstructor.java | 22 +++------------ .../common/blocks/BlockBatteryBox.java | 18 ++----------- .../common/blocks/InitBlocks.java | 23 ++++++++++++++-- .../common/blocks/base/ActuallyBlockBase.java | 27 ++++++++++++++++--- .../common/items/InitItems.java | 4 +++ 5 files changed, 54 insertions(+), 40 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/common/blocks/BlockAtomicReconstructor.java b/src/main/java/de/ellpeck/actuallyadditions/common/blocks/BlockAtomicReconstructor.java index 85cb92041..0a28c1109 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/common/blocks/BlockAtomicReconstructor.java +++ b/src/main/java/de/ellpeck/actuallyadditions/common/blocks/BlockAtomicReconstructor.java @@ -10,13 +10,13 @@ import de.ellpeck.actuallyadditions.common.util.StackUtil; import de.ellpeck.actuallyadditions.common.util.StringUtil; import net.minecraft.block.Block; import net.minecraft.block.BlockState; -import net.minecraft.block.SoundType; -import net.minecraft.block.material.Material; import net.minecraft.client.MainWindow; import net.minecraft.client.Minecraft; import net.minecraft.client.util.ITooltipFlag; import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.item.*; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.item.Items; import net.minecraft.state.StateContainer; import net.minecraft.state.properties.BlockStateProperties; import net.minecraft.tileentity.TileEntity; @@ -34,7 +34,6 @@ import net.minecraft.world.IBlockReader; import net.minecraft.world.World; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; -import net.minecraftforge.common.ToolType; import java.util.List; @@ -44,10 +43,7 @@ public class BlockAtomicReconstructor extends BlockContainerBase implements IHud public static final int NAME_FLAVOR_AMOUNTS_2 = 14; public BlockAtomicReconstructor() { - super(Properties.create(Material.ROCK) - .hardnessAndResistance(10f, 80f) - .harvestTool(ToolType.PICKAXE) - .sound(SoundType.STONE)); + super(STONE_PROPS.hardnessAndResistance(10f, 80f)); } @Override @@ -107,16 +103,6 @@ public class BlockAtomicReconstructor extends BlockContainerBase implements IHud } } - @Override - protected BlockItemBase getItemBlock() { - return new BlockItem(); - } - - @Override - public Rarity getRarity(){ - return Rarity.EPIC; - } - @Override protected void fillStateContainer(StateContainer.Builder builder){ builder.add(BlockStateProperties.FACING); diff --git a/src/main/java/de/ellpeck/actuallyadditions/common/blocks/BlockBatteryBox.java b/src/main/java/de/ellpeck/actuallyadditions/common/blocks/BlockBatteryBox.java index bb52dc305..2bf3c6766 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/common/blocks/BlockBatteryBox.java +++ b/src/main/java/de/ellpeck/actuallyadditions/common/blocks/BlockBatteryBox.java @@ -6,11 +6,8 @@ import de.ellpeck.actuallyadditions.common.tile.TileEntityBatteryBox; import de.ellpeck.actuallyadditions.common.util.StackUtil; import net.minecraft.block.Block; import net.minecraft.block.BlockState; -import net.minecraft.block.SoundType; -import net.minecraft.block.material.Material; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; -import net.minecraft.item.Rarity; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.ActionResultType; import net.minecraft.util.Hand; @@ -20,26 +17,15 @@ import net.minecraft.util.math.shapes.ISelectionContext; import net.minecraft.util.math.shapes.VoxelShape; import net.minecraft.world.IBlockReader; import net.minecraft.world.World; -import net.minecraftforge.common.ToolType; -// todo add rarity RARE public class BlockBatteryBox extends BlockContainerBase { public static final VoxelShape SHAPE = Block.makeCuboidShape(0.0D, 0.0D, 0.0D, 16.0D, 8.0D, 16.0D); public BlockBatteryBox() { - super(Properties.create(Material.ROCK) - .hardnessAndResistance(1.5f, 10.0f) - .harvestLevel(0) - .harvestTool(ToolType.PICKAXE) - .sound(SoundType.STONE)); + super(STONE_PROPS_WITH_HARDNESS.harvestLevel(0)); } - - @Override - public Rarity getRarity(){ - return Rarity.RARE; - } - + @Override public VoxelShape getShape(BlockState state, IBlockReader worldIn, BlockPos pos, ISelectionContext context){ return SHAPE; diff --git a/src/main/java/de/ellpeck/actuallyadditions/common/blocks/InitBlocks.java b/src/main/java/de/ellpeck/actuallyadditions/common/blocks/InitBlocks.java index 78010b4f0..6d77ef18d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/common/blocks/InitBlocks.java +++ b/src/main/java/de/ellpeck/actuallyadditions/common/blocks/InitBlocks.java @@ -1,16 +1,21 @@ package de.ellpeck.actuallyadditions.common.blocks; import de.ellpeck.actuallyadditions.common.ActuallyAdditions; +import de.ellpeck.actuallyadditions.common.blocks.base.ActuallyBlockBase; import de.ellpeck.actuallyadditions.common.blocks.base.BlockPlant; import de.ellpeck.actuallyadditions.common.blocks.metalists.TheMiscBlocks; +import de.ellpeck.actuallyadditions.common.items.InitItems; import de.ellpeck.actuallyadditions.common.items.metalists.TheCrystals; import net.minecraft.block.Block; import net.minecraft.block.StairsBlock; import net.minecraft.block.material.Material; +import net.minecraft.item.BlockItem; import net.minecraftforge.fml.RegistryObject; import net.minecraftforge.registries.DeferredRegister; import net.minecraftforge.registries.ForgeRegistries; +import java.util.Objects; + public final class InitBlocks { public static final DeferredRegister BLOCKS = DeferredRegister.create(ForgeRegistries.BLOCKS, ActuallyAdditions.MODID); @@ -300,7 +305,21 @@ public final class InitBlocks { public static final RegistryObject blockPillarQuartzSlab = BLOCKS.register("block_pillar_quartz_slab", () -> new BlockSlabs(blockMisc.get().getDefaultState().with(BlockMisc.TYPE, TheMiscBlocks.QUARTZ_PILLAR))); - public static void init() { - ActuallyAdditions.LOGGER.info("Initializing Blocks..."); + static { + for (RegistryObject entry : BLOCKS.getEntries()) { + if (!(entry.get() instanceof ActuallyBlockBase)) { + continue; + } + + ActuallyBlockBase block = (ActuallyBlockBase) entry.get(); + if (block.hasCustomBlockItem()) { + continue; + } + + InitItems.ITEMS.register( + Objects.requireNonNull(block.getRegistryName()).getPath(), + () -> new BlockItem(block, block.getBlockItemProps()) + ); + } } } \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/common/blocks/base/ActuallyBlockBase.java b/src/main/java/de/ellpeck/actuallyadditions/common/blocks/base/ActuallyBlockBase.java index dec4530e4..e9a3b46da 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/common/blocks/base/ActuallyBlockBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/common/blocks/base/ActuallyBlockBase.java @@ -1,21 +1,40 @@ package de.ellpeck.actuallyadditions.common.blocks.base; +import de.ellpeck.actuallyadditions.common.ActuallyAdditions; import net.minecraft.block.Block; import net.minecraft.block.SoundType; import net.minecraft.block.material.Material; +import net.minecraft.item.Item; import net.minecraftforge.common.ToolType; public abstract class ActuallyBlockBase extends Block { - private static final Properties STONE_PROPS = Block.Properties.create(Material.ROCK) + protected static final Properties STONE_PROPS = Block.Properties.create(Material.ROCK) .harvestTool(ToolType.PICKAXE) .sound(SoundType.STONE); - private static final Properties STONE_PROPS_WITH_TICK = STONE_PROPS.tickRandomly(); - private static final Properties STONE_PROPS_WITH_HARDNESS = STONE_PROPS.hardnessAndResistance(1.5f, 10.0f); + protected static final Properties STONE_PROPS_WITH_TICK = STONE_PROPS.tickRandomly(); + protected static final Properties STONE_PROPS_WITH_HARDNESS = STONE_PROPS.hardnessAndResistance(1.5f, 10.0f); public ActuallyBlockBase(Properties properties) { super(properties); } - + /** + * Define custom BlockItem Properties for a specific block. This is useful for + * when you need to modify the stack size. I'd recommend using super.getBlockItemProps() + * and adding to this response. + * + * @return default item properties for our blockItems + */ + public Item.Properties getBlockItemProps() { + return new Item.Properties().group(ActuallyAdditions.aaGroup); + } + + /** + * If the block has a custom BlockItem to define custom behavior then + * override this method and return true to stop auto registration + */ + public boolean hasCustomBlockItem() { + return false; + } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/common/items/InitItems.java b/src/main/java/de/ellpeck/actuallyadditions/common/items/InitItems.java index 1daff7e35..5264accce 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/common/items/InitItems.java +++ b/src/main/java/de/ellpeck/actuallyadditions/common/items/InitItems.java @@ -25,9 +25,13 @@ import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.potion.PotionEffect; import net.minecraft.tileentity.TileEntityChest; +import net.minecraftforge.registries.DeferredRegister; +import net.minecraftforge.registries.ForgeRegistries; public final class InitItems { + public static final DeferredRegister ITEMS = DeferredRegister.create(ForgeRegistries.ITEMS, ActuallyAdditions.MODID); + public static Item itemBooklet; public static Item itemFertilizer; public static Item itemMisc;