summaryrefslogtreecommitdiff
path: root/src/main/java/lv/enes/mc/eris_alchemy/client/ErisAlchemyClientRegistry.java
diff options
context:
space:
mode:
authorGravatar Uko Kokņevičs2024-01-10 00:26:04 +0100
committerGravatar Uko Kokņevičs2024-01-10 00:26:04 +0100
commit982f0bbbd7564b6f292a0890dd862149d9f710a9 (patch)
tree30875caa478390a6c30096e17b4e0c8133a3cf88 /src/main/java/lv/enes/mc/eris_alchemy/client/ErisAlchemyClientRegistry.java
parentMake Alchemical Chest waterloggable. (diff)
downloadmc-eris-alchemy-982f0bbbd7564b6f292a0890dd862149d9f710a9.tar.gz
mc-eris-alchemy-982f0bbbd7564b6f292a0890dd862149d9f710a9.tar.xz
mc-eris-alchemy-982f0bbbd7564b6f292a0890dd862149d9f710a9.zip
Some refactoring
Diffstat (limited to 'src/main/java/lv/enes/mc/eris_alchemy/client/ErisAlchemyClientRegistry.java')
-rw-r--r--src/main/java/lv/enes/mc/eris_alchemy/client/ErisAlchemyClientRegistry.java116
1 files changed, 116 insertions, 0 deletions
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 @@
1package lv.enes.mc.eris_alchemy.client;
2
3import lv.enes.mc.eris_alchemy.block.entity.AlchemicalChestBlockEntity;
4import net.fabricmc.fabric.api.client.rendering.v1.BuiltinItemRendererRegistry.DynamicItemRenderer;
5import net.minecraft.client.gui.screens.MenuScreens.ScreenConstructor;
6import net.minecraft.client.gui.screens.Screen;
7import net.minecraft.client.gui.screens.inventory.MenuAccess;
8import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider;
9import net.minecraft.client.renderer.blockentity.ChestRenderer;
10import net.minecraft.world.inventory.AbstractContainerMenu;
11import net.minecraft.world.inventory.MenuType;
12import net.minecraft.world.level.ItemLike;
13import net.minecraft.world.level.block.entity.BlockEntity;
14import net.minecraft.world.level.block.entity.BlockEntityType;
15
16import java.util.LinkedHashMap;
17import java.util.Map;
18import java.util.function.BiConsumer;
19
20import static lv.enes.mc.eris_alchemy.ErisAlchemyRegistry.*;
21
22public final class ErisAlchemyClientRegistry {
23 private ErisAlchemyClientRegistry() {}
24
25 public static final class BlockEntityRenderers {
26 private BlockEntityRenderers() {}
27
28 @FunctionalInterface
29 public interface Consumer {
30 <T extends BlockEntity> void consume(BlockEntityType<? extends T> type, BlockEntityRendererProvider<T> provider);
31 }
32
33 public static void consume(Consumer consumer) {
34 data.values().forEach(pair -> pair.beConsumed(consumer));
35 }
36
37 private record Pair<T extends BlockEntity>(
38 BlockEntityType<? extends T> type,
39 BlockEntityRendererProvider<T> provider
40 ) {
41 public void beConsumed(Consumer consumer) {
42 consumer.consume(type, provider);
43 }
44 }
45
46 private static final Map<BlockEntityType<?>, Pair<?>> data = new LinkedHashMap<>();
47
48 private static <T extends BlockEntity> void register(
49 BlockEntityType<? extends T> type,
50 BlockEntityRendererProvider<T> provider
51 ) {
52 data.put(type, new Pair<>(type, provider));
53 }
54
55 static {
56 register(BlockEntities.ALCHEMICAL_CHEST, ChestRenderer::new);
57 }
58 }
59
60 public static final class ItemRenderers {
61 private ItemRenderers() {}
62
63 public static void consume(BiConsumer<? super ItemLike, ? super DynamicItemRenderer> consumer) {
64 data.forEach(consumer);
65 }
66
67 private static final Map<ItemLike, DynamicItemRenderer> data = new LinkedHashMap<>();
68
69 private static void register(ItemLike item, DynamicItemRenderer renderer) {
70 data.put(item, renderer);
71 }
72
73 static {
74 register(
75 Items.ALCHEMICAL_CHEST,
76 new ChestItemRenderer<>(Blocks.ALCHEMICAL_CHEST, AlchemicalChestBlockEntity::new)::renderByItem
77 );
78 }
79 }
80
81 public static final class MenuScreens {
82 private MenuScreens() {}
83
84 @FunctionalInterface
85 public interface Consumer {
86 <M extends AbstractContainerMenu, S extends Screen & MenuAccess<M>>
87 void consume(MenuType<? extends M> menu, ScreenConstructor<M, S> constructor);
88 }
89
90 public static void consume(Consumer consumer) {
91 data.values().forEach(pair -> pair.beConsumed(consumer));
92 }
93
94 private record Pair<M extends AbstractContainerMenu, S extends Screen & MenuAccess<M>>(
95 MenuType<? extends M> menu,
96 ScreenConstructor<M, S> constructor
97 ) {
98 public void beConsumed(Consumer consumer) {
99 consumer.consume(menu, constructor);
100 }
101 }
102
103 private static final Map<MenuType<?>, Pair<?, ?>> data = new LinkedHashMap<>();
104
105 private static <M extends AbstractContainerMenu, S extends Screen & MenuAccess<M>> void register(
106 MenuType<? extends M> menu,
107 ScreenConstructor<M, S> constructor
108 ) {
109 data.put(menu, new Pair<>(menu, constructor));
110 }
111
112 static {
113 register(Menus.ALCHEMICAL_CHEST, AlchemicalChestScreen::new);
114 }
115 }
116}