From 982f0bbbd7564b6f292a0890dd862149d9f710a9 Mon Sep 17 00:00:00 2001 From: Uko Kokņevičs Date: Wed, 10 Jan 2024 00:26:04 +0100 Subject: Some refactoring --- .../client/ErisAlchemyClientRegistry.java | 116 +++++++++++++++++++++ 1 file changed, 116 insertions(+) create mode 100644 src/main/java/lv/enes/mc/eris_alchemy/client/ErisAlchemyClientRegistry.java (limited to 'src/main/java/lv/enes/mc/eris_alchemy/client/ErisAlchemyClientRegistry.java') diff --git a/src/main/java/lv/enes/mc/eris_alchemy/client/ErisAlchemyClientRegistry.java b/src/main/java/lv/enes/mc/eris_alchemy/client/ErisAlchemyClientRegistry.java new file mode 100644 index 0000000..3680fd5 --- /dev/null +++ b/src/main/java/lv/enes/mc/eris_alchemy/client/ErisAlchemyClientRegistry.java @@ -0,0 +1,116 @@ +package lv.enes.mc.eris_alchemy.client; + +import lv.enes.mc.eris_alchemy.block.entity.AlchemicalChestBlockEntity; +import net.fabricmc.fabric.api.client.rendering.v1.BuiltinItemRendererRegistry.DynamicItemRenderer; +import net.minecraft.client.gui.screens.MenuScreens.ScreenConstructor; +import net.minecraft.client.gui.screens.Screen; +import net.minecraft.client.gui.screens.inventory.MenuAccess; +import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider; +import net.minecraft.client.renderer.blockentity.ChestRenderer; +import net.minecraft.world.inventory.AbstractContainerMenu; +import net.minecraft.world.inventory.MenuType; +import net.minecraft.world.level.ItemLike; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityType; + +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.function.BiConsumer; + +import static lv.enes.mc.eris_alchemy.ErisAlchemyRegistry.*; + +public final class ErisAlchemyClientRegistry { + private ErisAlchemyClientRegistry() {} + + public static final class BlockEntityRenderers { + private BlockEntityRenderers() {} + + @FunctionalInterface + public interface Consumer { + void consume(BlockEntityType type, BlockEntityRendererProvider provider); + } + + public static void consume(Consumer consumer) { + data.values().forEach(pair -> pair.beConsumed(consumer)); + } + + private record Pair( + BlockEntityType type, + BlockEntityRendererProvider provider + ) { + public void beConsumed(Consumer consumer) { + consumer.consume(type, provider); + } + } + + private static final Map, Pair> data = new LinkedHashMap<>(); + + private static void register( + BlockEntityType type, + BlockEntityRendererProvider provider + ) { + data.put(type, new Pair<>(type, provider)); + } + + static { + register(BlockEntities.ALCHEMICAL_CHEST, ChestRenderer::new); + } + } + + public static final class ItemRenderers { + private ItemRenderers() {} + + public static void consume(BiConsumer consumer) { + data.forEach(consumer); + } + + private static final Map data = new LinkedHashMap<>(); + + private static void register(ItemLike item, DynamicItemRenderer renderer) { + data.put(item, renderer); + } + + static { + register( + Items.ALCHEMICAL_CHEST, + new ChestItemRenderer<>(Blocks.ALCHEMICAL_CHEST, AlchemicalChestBlockEntity::new)::renderByItem + ); + } + } + + public static final class MenuScreens { + private MenuScreens() {} + + @FunctionalInterface + public interface Consumer { + > + void consume(MenuType menu, ScreenConstructor constructor); + } + + public static void consume(Consumer consumer) { + data.values().forEach(pair -> pair.beConsumed(consumer)); + } + + private record Pair>( + MenuType menu, + ScreenConstructor constructor + ) { + public void beConsumed(Consumer consumer) { + consumer.consume(menu, constructor); + } + } + + private static final Map, Pair> data = new LinkedHashMap<>(); + + private static > void register( + MenuType menu, + ScreenConstructor constructor + ) { + data.put(menu, new Pair<>(menu, constructor)); + } + + static { + register(Menus.ALCHEMICAL_CHEST, AlchemicalChestScreen::new); + } + } +} -- cgit v1.2.3