Skip to content

Commit

Permalink
Changed registration logic to perform operations on global block regi…
Browse files Browse the repository at this point in the history
…stry, rather than on personal deferred registers, which greatly improves friendliness to addon mods
  • Loading branch information
Quinteger committed May 4, 2022
1 parent 6746a98 commit c4721b1
Show file tree
Hide file tree
Showing 4 changed files with 96 additions and 87 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -142,7 +142,7 @@ private static void loadGeometryData () {
StorageDrawers.rl("models/block/geometry/comp_drawers_count_area_3.json"),
StorageDrawers.rl("models/block/geometry/comp_drawers_ind_area_3.json"),
StorageDrawers.rl("models/block/geometry/comp_drawers_indbase_area_3.json"),
ModBlocks.getBlocksOfType(BlockCompDrawers.class).toArray(BlockDrawers[]::new));
ModBlocks.getDrawersOfType(BlockCompDrawers.class).toArray(BlockDrawers[]::new));
}

private static BlockModel getBlockModel (ResourceLocation location) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import com.jaquadro.minecraft.storagedrawers.block.BlockDrawers;
import net.minecraft.core.BlockPos;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraftforge.event.entity.player.PlayerInteractEvent;
Expand All @@ -16,12 +17,13 @@ public class CommonEventBusSubscriber {
@SubscribeEvent
public static void playerLeftClick (@NotNull PlayerInteractEvent.LeftClickBlock event) {
BlockPos pos = event.getPos();
BlockState state = event.getWorld().getBlockState(pos);
Level level = event.getWorld();
BlockState state = level.getBlockState(pos);
Block block = state.getBlock();
if (block instanceof BlockDrawers blockDrawers) {
Player player = event.getPlayer();
if (player.isCreative()) {
event.setCanceled(blockDrawers.interactTakeItems(state, event.getWorld(), pos, player));
event.setCanceled(blockDrawers.interactTakeItems(state, level, pos, player));
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,8 @@ public final class ModBlockEntities {
public static final RegistryObject<BlockEntityType<BlockEntityDrawersStandard>> STANDARD_DRAWERS_2 = registerDrawerBlockEntityType("standard_drawers_2", BlockEntityDrawersStandard.Slot2::new, BlockStandardDrawers.class, 2);
public static final RegistryObject<BlockEntityType<BlockEntityDrawersStandard>> STANDARD_DRAWERS_4 = registerDrawerBlockEntityType("standard_drawers_4", BlockEntityDrawersStandard.Slot4::new, BlockStandardDrawers.class, 4);
public static final RegistryObject<BlockEntityType<BlockEntityDrawersComp>> FRACTIONAL_DRAWERS_3 = registerDrawerBlockEntityType("fractional_drawers_3", BlockEntityDrawersComp.Slot3::new, BlockCompDrawers.class, 3);
public static final RegistryObject<BlockEntityType<BlockEntityController>> CONTROLLER = registerBlockEntityType("controller", BlockEntityController::new, BlockController.class);
public static final RegistryObject<BlockEntityType<BlockEntitySlave>> CONTROLLER_SLAVE = registerBlockEntityType("controller_slave", BlockEntitySlave::new, BlockSlave.class);
public static final RegistryObject<BlockEntityType<BlockEntityController>> CONTROLLER = registerBlockEntityType("controller", BlockEntityController::new, ModBlocks.getControllers());
public static final RegistryObject<BlockEntityType<BlockEntitySlave>> CONTROLLER_SLAVE = registerBlockEntityType("controller_slave", BlockEntitySlave::new, ModBlocks.getControllerSlaves());

private ModBlockEntities() {}

Expand All @@ -36,10 +36,6 @@ private static <BE extends BlockEntityDrawers, B extends BlockDrawers> RegistryO
return ro;
}

private static <BE extends BaseBlockEntity, B extends Block> RegistryObject<BlockEntityType<BE>> registerBlockEntityType(String name, BlockEntitySupplier<BE> blockEntitySupplier, Class<B> blockClass) {
return registerBlockEntityType(name, blockEntitySupplier, ModBlocks.getBlocksOfType(blockClass));
}

private static <BE extends BaseBlockEntity, B extends Block> RegistryObject<BlockEntityType<BE>> registerBlockEntityType(String name, BlockEntitySupplier<BE> blockEntitySupplier, Stream<B> blockStream) {
return BLOCK_ENTITY_REGISTER.register(name, () -> BlockEntityType.Builder.of(blockEntitySupplier, blockStream.toArray(Block[]::new)).build(null));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
import net.minecraft.world.level.BlockGetter;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.SoundType;
import net.minecraft.world.level.block.state.BlockBehaviour;
import net.minecraft.world.level.block.state.BlockBehaviour.Properties;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.material.Material;
import net.minecraftforge.eventbus.api.IEventBus;
Expand All @@ -21,54 +21,54 @@ public final class ModBlocks
public static final DeferredRegister<Block> BLOCK_REGISTER = DeferredRegister.create(ForgeRegistries.BLOCKS, StorageDrawers.MOD_ID);

public static final RegistryObject<BlockStandardDrawers>
OAK_FULL_DRAWERS_1 = registerDrawerBlock("oak_full_drawers_1", 1, false),
OAK_FULL_DRAWERS_2 = registerDrawerBlock("oak_full_drawers_2", 2, false),
OAK_FULL_DRAWERS_4 = registerDrawerBlock("oak_full_drawers_4", 4, false),
OAK_HALF_DRAWERS_1 = registerDrawerBlock("oak_half_drawers_1", 1, true),
OAK_HALF_DRAWERS_2 = registerDrawerBlock("oak_half_drawers_2", 2, true),
OAK_HALF_DRAWERS_4 = registerDrawerBlock("oak_half_drawers_4", 4, true),
SPRUCE_FULL_DRAWERS_1 = registerDrawerBlock("spruce_full_drawers_1", 1, false),
SPRUCE_FULL_DRAWERS_2 = registerDrawerBlock("spruce_full_drawers_2", 2, false),
SPRUCE_FULL_DRAWERS_4 = registerDrawerBlock("spruce_full_drawers_4", 4, false),
SPRUCE_HALF_DRAWERS_1 = registerDrawerBlock("spruce_half_drawers_1", 1, true),
SPRUCE_HALF_DRAWERS_2 = registerDrawerBlock("spruce_half_drawers_2", 2, true),
SPRUCE_HALF_DRAWERS_4 = registerDrawerBlock("spruce_half_drawers_4", 4, true),
BIRCH_FULL_DRAWERS_1 = registerDrawerBlock("birch_full_drawers_1", 1, false),
BIRCH_FULL_DRAWERS_2 = registerDrawerBlock("birch_full_drawers_2", 2, false),
BIRCH_FULL_DRAWERS_4 = registerDrawerBlock("birch_full_drawers_4", 4, false),
BIRCH_HALF_DRAWERS_1 = registerDrawerBlock("birch_half_drawers_1", 1, true),
BIRCH_HALF_DRAWERS_2 = registerDrawerBlock("birch_half_drawers_2", 2, true),
BIRCH_HALF_DRAWERS_4 = registerDrawerBlock("birch_half_drawers_4", 4, true),
JUNGLE_FULL_DRAWERS_1 = registerDrawerBlock("jungle_full_drawers_1", 1, false),
JUNGLE_FULL_DRAWERS_2 = registerDrawerBlock("jungle_full_drawers_2", 2, false),
JUNGLE_FULL_DRAWERS_4 = registerDrawerBlock("jungle_full_drawers_4", 4, false),
JUNGLE_HALF_DRAWERS_1 = registerDrawerBlock("jungle_half_drawers_1", 1, true),
JUNGLE_HALF_DRAWERS_2 = registerDrawerBlock("jungle_half_drawers_2", 2, true),
JUNGLE_HALF_DRAWERS_4 = registerDrawerBlock("jungle_half_drawers_4", 4, true),
ACACIA_FULL_DRAWERS_1 = registerDrawerBlock("acacia_full_drawers_1", 1, false),
ACACIA_FULL_DRAWERS_2 = registerDrawerBlock("acacia_full_drawers_2", 2, false),
ACACIA_FULL_DRAWERS_4 = registerDrawerBlock("acacia_full_drawers_4", 4, false),
ACACIA_HALF_DRAWERS_1 = registerDrawerBlock("acacia_half_drawers_1", 1, true),
ACACIA_HALF_DRAWERS_2 = registerDrawerBlock("acacia_half_drawers_2", 2, true),
ACACIA_HALF_DRAWERS_4 = registerDrawerBlock("acacia_half_drawers_4", 4, true),
DARK_OAK_FULL_DRAWERS_1 = registerDrawerBlock("dark_oak_full_drawers_1", 1, false),
DARK_OAK_FULL_DRAWERS_2 = registerDrawerBlock("dark_oak_full_drawers_2", 2, false),
DARK_OAK_FULL_DRAWERS_4 = registerDrawerBlock("dark_oak_full_drawers_4", 4, false),
DARK_OAK_HALF_DRAWERS_1 = registerDrawerBlock("dark_oak_half_drawers_1", 1, true),
DARK_OAK_HALF_DRAWERS_2 = registerDrawerBlock("dark_oak_half_drawers_2", 2, true),
DARK_OAK_HALF_DRAWERS_4 = registerDrawerBlock("dark_oak_half_drawers_4", 4, true),
CRIMSON_FULL_DRAWERS_1 = registerDrawerBlock("crimson_full_drawers_1", 1, false),
CRIMSON_FULL_DRAWERS_2 = registerDrawerBlock("crimson_full_drawers_2", 2, false),
CRIMSON_FULL_DRAWERS_4 = registerDrawerBlock("crimson_full_drawers_4", 4, false),
CRIMSON_HALF_DRAWERS_1 = registerDrawerBlock("crimson_half_drawers_1", 1, true),
CRIMSON_HALF_DRAWERS_2 = registerDrawerBlock("crimson_half_drawers_2", 2, true),
CRIMSON_HALF_DRAWERS_4 = registerDrawerBlock("crimson_half_drawers_4", 4, true),
WARPED_FULL_DRAWERS_1 = registerDrawerBlock("warped_full_drawers_1", 1, false),
WARPED_FULL_DRAWERS_2 = registerDrawerBlock("warped_full_drawers_2", 2, false),
WARPED_FULL_DRAWERS_4 = registerDrawerBlock("warped_full_drawers_4", 4, false),
WARPED_HALF_DRAWERS_1 = registerDrawerBlock("warped_half_drawers_1", 1, true),
WARPED_HALF_DRAWERS_2 = registerDrawerBlock("warped_half_drawers_2", 2, true),
WARPED_HALF_DRAWERS_4 = registerDrawerBlock("warped_half_drawers_4", 4, true);
OAK_FULL_DRAWERS_1 = registerWoodenDrawerBlock("oak_full_drawers_1", 1, false),
OAK_FULL_DRAWERS_2 = registerWoodenDrawerBlock("oak_full_drawers_2", 2, false),
OAK_FULL_DRAWERS_4 = registerWoodenDrawerBlock("oak_full_drawers_4", 4, false),
OAK_HALF_DRAWERS_1 = registerWoodenDrawerBlock("oak_half_drawers_1", 1, true),
OAK_HALF_DRAWERS_2 = registerWoodenDrawerBlock("oak_half_drawers_2", 2, true),
OAK_HALF_DRAWERS_4 = registerWoodenDrawerBlock("oak_half_drawers_4", 4, true),
SPRUCE_FULL_DRAWERS_1 = registerWoodenDrawerBlock("spruce_full_drawers_1", 1, false),
SPRUCE_FULL_DRAWERS_2 = registerWoodenDrawerBlock("spruce_full_drawers_2", 2, false),
SPRUCE_FULL_DRAWERS_4 = registerWoodenDrawerBlock("spruce_full_drawers_4", 4, false),
SPRUCE_HALF_DRAWERS_1 = registerWoodenDrawerBlock("spruce_half_drawers_1", 1, true),
SPRUCE_HALF_DRAWERS_2 = registerWoodenDrawerBlock("spruce_half_drawers_2", 2, true),
SPRUCE_HALF_DRAWERS_4 = registerWoodenDrawerBlock("spruce_half_drawers_4", 4, true),
BIRCH_FULL_DRAWERS_1 = registerWoodenDrawerBlock("birch_full_drawers_1", 1, false),
BIRCH_FULL_DRAWERS_2 = registerWoodenDrawerBlock("birch_full_drawers_2", 2, false),
BIRCH_FULL_DRAWERS_4 = registerWoodenDrawerBlock("birch_full_drawers_4", 4, false),
BIRCH_HALF_DRAWERS_1 = registerWoodenDrawerBlock("birch_half_drawers_1", 1, true),
BIRCH_HALF_DRAWERS_2 = registerWoodenDrawerBlock("birch_half_drawers_2", 2, true),
BIRCH_HALF_DRAWERS_4 = registerWoodenDrawerBlock("birch_half_drawers_4", 4, true),
JUNGLE_FULL_DRAWERS_1 = registerWoodenDrawerBlock("jungle_full_drawers_1", 1, false),
JUNGLE_FULL_DRAWERS_2 = registerWoodenDrawerBlock("jungle_full_drawers_2", 2, false),
JUNGLE_FULL_DRAWERS_4 = registerWoodenDrawerBlock("jungle_full_drawers_4", 4, false),
JUNGLE_HALF_DRAWERS_1 = registerWoodenDrawerBlock("jungle_half_drawers_1", 1, true),
JUNGLE_HALF_DRAWERS_2 = registerWoodenDrawerBlock("jungle_half_drawers_2", 2, true),
JUNGLE_HALF_DRAWERS_4 = registerWoodenDrawerBlock("jungle_half_drawers_4", 4, true),
ACACIA_FULL_DRAWERS_1 = registerWoodenDrawerBlock("acacia_full_drawers_1", 1, false),
ACACIA_FULL_DRAWERS_2 = registerWoodenDrawerBlock("acacia_full_drawers_2", 2, false),
ACACIA_FULL_DRAWERS_4 = registerWoodenDrawerBlock("acacia_full_drawers_4", 4, false),
ACACIA_HALF_DRAWERS_1 = registerWoodenDrawerBlock("acacia_half_drawers_1", 1, true),
ACACIA_HALF_DRAWERS_2 = registerWoodenDrawerBlock("acacia_half_drawers_2", 2, true),
ACACIA_HALF_DRAWERS_4 = registerWoodenDrawerBlock("acacia_half_drawers_4", 4, true),
DARK_OAK_FULL_DRAWERS_1 = registerWoodenDrawerBlock("dark_oak_full_drawers_1", 1, false),
DARK_OAK_FULL_DRAWERS_2 = registerWoodenDrawerBlock("dark_oak_full_drawers_2", 2, false),
DARK_OAK_FULL_DRAWERS_4 = registerWoodenDrawerBlock("dark_oak_full_drawers_4", 4, false),
DARK_OAK_HALF_DRAWERS_1 = registerWoodenDrawerBlock("dark_oak_half_drawers_1", 1, true),
DARK_OAK_HALF_DRAWERS_2 = registerWoodenDrawerBlock("dark_oak_half_drawers_2", 2, true),
DARK_OAK_HALF_DRAWERS_4 = registerWoodenDrawerBlock("dark_oak_half_drawers_4", 4, true),
CRIMSON_FULL_DRAWERS_1 = registerWoodenDrawerBlock("crimson_full_drawers_1", 1, false),
CRIMSON_FULL_DRAWERS_2 = registerWoodenDrawerBlock("crimson_full_drawers_2", 2, false),
CRIMSON_FULL_DRAWERS_4 = registerWoodenDrawerBlock("crimson_full_drawers_4", 4, false),
CRIMSON_HALF_DRAWERS_1 = registerWoodenDrawerBlock("crimson_half_drawers_1", 1, true),
CRIMSON_HALF_DRAWERS_2 = registerWoodenDrawerBlock("crimson_half_drawers_2", 2, true),
CRIMSON_HALF_DRAWERS_4 = registerWoodenDrawerBlock("crimson_half_drawers_4", 4, true),
WARPED_FULL_DRAWERS_1 = registerWoodenDrawerBlock("warped_full_drawers_1", 1, false),
WARPED_FULL_DRAWERS_2 = registerWoodenDrawerBlock("warped_full_drawers_2", 2, false),
WARPED_FULL_DRAWERS_4 = registerWoodenDrawerBlock("warped_full_drawers_4", 4, false),
WARPED_HALF_DRAWERS_1 = registerWoodenDrawerBlock("warped_half_drawers_1", 1, true),
WARPED_HALF_DRAWERS_2 = registerWoodenDrawerBlock("warped_half_drawers_2", 2, true),
WARPED_HALF_DRAWERS_4 = registerWoodenDrawerBlock("warped_half_drawers_4", 4, true);

public static final RegistryObject<BlockCompDrawers> COMPACTING_DRAWERS_3 = registerCompactingDrawerBlock("compacting_drawers_3");

Expand All @@ -87,61 +87,72 @@ public final class ModBlocks

private ModBlocks() {}

private static RegistryObject<BlockStandardDrawers> registerDrawerBlock(String name, int drawerCount, boolean halfDepth) {
return BLOCK_REGISTER.register(name, () -> new BlockStandardDrawers(drawerCount, halfDepth, BlockBehaviour.Properties.of(Material.WOOD)
.strength(3.0F, 5.0F)
.sound(SoundType.WOOD)
.isSuffocating(ModBlocks::predFalse)
.isRedstoneConductor(ModBlocks::predFalse)));
private static RegistryObject<BlockStandardDrawers> registerWoodenDrawerBlock(String name, int drawerCount, boolean halfDepth) {
return BLOCK_REGISTER.register(name, () -> new BlockStandardDrawers(drawerCount, halfDepth, getWoodenDrawerBlockProperties()));
}

private static RegistryObject<BlockCompDrawers> registerCompactingDrawerBlock(String name) {
return BLOCK_REGISTER.register(name, () -> new BlockCompDrawers(BlockBehaviour.Properties.of(Material.STONE)
.sound(SoundType.STONE).strength(10f)
.isSuffocating(ModBlocks::predFalse)
.isRedstoneConductor(ModBlocks::predFalse)));
return BLOCK_REGISTER.register(name, () -> new BlockCompDrawers(getStoneDrawerBlockProperties()));
}

private static RegistryObject<BlockTrim> registerTrimBlock(String name) {
return BLOCK_REGISTER.register(name, () -> new BlockTrim(BlockBehaviour.Properties.of(Material.WOOD)
.sound(SoundType.WOOD).strength(5f)));
return BLOCK_REGISTER.register(name, () -> new BlockTrim(getWoodenBlockProperties()));
}

private static RegistryObject<BlockController> registerControllerBlock(String name) {
return BLOCK_REGISTER.register(name, () -> new BlockController(BlockBehaviour.Properties.of(Material.WOOD)
.sound(SoundType.STONE).strength(5f)));
return BLOCK_REGISTER.register(name, () -> new BlockController(getStoneBlockProperties()));
}

private static RegistryObject<BlockSlave> registerControllerSlaveBlock(String name) {
return BLOCK_REGISTER.register(name, () -> new BlockSlave(BlockBehaviour.Properties.of(Material.WOOD)
.sound(SoundType.STONE).strength(5f)));
return BLOCK_REGISTER.register(name, () -> new BlockSlave(getStoneBlockProperties()));
}

private static Properties getWoodenBlockProperties() {
return Properties.of(Material.WOOD).sound(SoundType.WOOD).strength(3f, 4f);
}

private static Properties getWoodenDrawerBlockProperties() {
return getWoodenBlockProperties().isSuffocating(ModBlocks::predFalse).isRedstoneConductor(ModBlocks::predFalse);
}

private static Properties getStoneBlockProperties() {
return Properties.of(Material.STONE).sound(SoundType.STONE).strength(4f, 5f);
}

private static Properties getStoneDrawerBlockProperties() {
return getStoneBlockProperties().isSuffocating(ModBlocks::predFalse).isRedstoneConductor(ModBlocks::predFalse);
}

public static void register(IEventBus bus) {
BLOCK_REGISTER.register(bus);
}

public static <B extends Block> Stream<B> getBlocksOfType(Class<B> blockClass) {
return BLOCK_REGISTER.getEntries()
.stream()
.filter(RegistryObject::isPresent)
.map(RegistryObject::get)
.filter(blockClass::isInstance)
.map(blockClass::cast);
private static <B extends Block> Stream<B> getBlocksOfType(Class<B> blockClass) {
return ForgeRegistries.BLOCKS.getValues().stream().filter(blockClass::isInstance).map(blockClass::cast);
}

public static Stream<BlockDrawers> getDrawers() {
return getBlocksOfType(BlockDrawers.class);
}

public static <B extends BlockDrawers> Stream<B> getDrawersOfTypeAndSize(Class<B> drawerClass, int size) {
return getBlocksOfType(drawerClass)
.filter(blockDrawers -> blockDrawers.getDrawerCount() == size);
public static Stream<BlockController> getControllers() {
return getBlocksOfType(BlockController.class);
}

public static Stream<BlockSlave> getControllerSlaves() {
return getBlocksOfType(BlockSlave.class);
}

public static <BD extends BlockDrawers> Stream<BD> getDrawersOfType(Class<BD> drawerClass) {
return getBlocksOfType(drawerClass);
}

public static <BD extends BlockDrawers> Stream<BD> getDrawersOfTypeAndSize(Class<BD> drawerClass, int size) {
return getDrawersOfType(drawerClass).filter(blockDrawers -> blockDrawers.getDrawerCount() == size);
}

public static <B extends BlockDrawers> Stream<B> getDrawersOfTypeAndSizeAndDepth(Class<B> drawerClass, int size, boolean halfDepth) {
return getDrawersOfTypeAndSize(drawerClass, size)
.filter(blockDrawers -> blockDrawers.isHalfDepth() == halfDepth);
public static <BD extends BlockDrawers> Stream<BD> getDrawersOfTypeAndSizeAndDepth(Class<BD> drawerClass, int size, boolean halfDepth) {
return getDrawersOfTypeAndSize(drawerClass, size).filter(blockDrawers -> blockDrawers.isHalfDepth() == halfDepth);
}

private static boolean predFalse (BlockState blockState, BlockGetter blockGetter, BlockPos blockPos) {
Expand Down

0 comments on commit c4721b1

Please sign in to comment.