package net.shadowfacts.simplemultipart; import net.fabricmc.api.ModInitializer; import net.minecraft.block.entity.BlockEntity; import net.minecraft.block.entity.BlockEntityType; import net.minecraft.util.Identifier; import net.minecraft.util.registry.IdRegistry; import net.minecraft.util.registry.Registry; import net.minecraft.world.loot.context.LootContextType; import net.minecraft.world.loot.context.LootContextTypes; import net.minecraft.world.loot.context.Parameter; import net.minecraft.world.loot.context.Parameters; import net.shadowfacts.simplemultipart.container.*; import net.shadowfacts.simplemultipart.multipart.Multipart; import net.shadowfacts.simplemultipart.multipart.MultipartState; import java.util.function.BiFunction; import java.util.function.Consumer; import java.util.function.Supplier; /** * @author shadowfacts */ public class SimpleMultipart implements ModInitializer { public static final String MODID = "simplemultipart"; public static final Registry MULTIPART = createMultipartRegistry(); public static final Parameter MULTIPART_STATE_PARAMETER = new Parameter<>(new Identifier(MODID, "multipart_state")); public static final LootContextType MULTIPART_LOOT_CONTEXT = createMultipartLootContextType(); public static final ContainerBlock containerBlock = new ContainerBlock(); public static final TickableContainerBlock tickableContainerBlock = new TickableContainerBlock(); public static final BlockEntityType containerBlockEntity = createBlockEntityType("container", ContainerBlockEntity::new); public static final BlockEntityType tickableContainerBlockEntity = createBlockEntityType("tickable_container", TickableContainerBlockEntity::new); private static BiFunction, LootContextType> lootContextRegisterFunction; @Override public void onInitialize() { Registry.register(Registry.BLOCK, new Identifier(MODID, "container"), containerBlock); Registry.register(Registry.BLOCK, new Identifier(MODID, "tickable_container"), tickableContainerBlock); ContainerEventHandler.register(); } private static Registry createMultipartRegistry() { IdRegistry registry = new IdRegistry<>(); Registry.REGISTRIES.register(new Identifier(MODID, "multipart"), registry); return registry; } private static BlockEntityType createBlockEntityType(String name, Supplier supplier) { BlockEntityType.Builder builder = BlockEntityType.Builder.create(supplier); return Registry.register(Registry.BLOCK_ENTITY, new Identifier(MODID, name), builder.method_11034(null)); } @Deprecated public static void setLootContextRegisterFunction(BiFunction, LootContextType> function) { lootContextRegisterFunction = function; } private static LootContextType createMultipartLootContextType() { try { // Load the function Class.forName(LootContextTypes.class.getCanonicalName()); } catch (ClassNotFoundException e) {} return lootContextRegisterFunction.apply( MODID + ":multipart", builder -> builder.require(MULTIPART_STATE_PARAMETER).require(Parameters.POSITION) ); } }