1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
|
package lv.enes.mc.eris_alchemy.client;
import lv.enes.mc.eris_alchemy.block.entity.AlchemicalChestEntity;
import lv.enes.mc.eris_alchemy.block.entity.EnergyCondenserEntity;
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 {
<T extends BlockEntity> void consume(BlockEntityType<? extends T> type, BlockEntityRendererProvider<T> provider);
}
public static void consume(Consumer consumer) {
data.values().forEach(pair -> pair.beConsumed(consumer));
}
private record Pair<T extends BlockEntity>(
BlockEntityType<? extends T> type,
BlockEntityRendererProvider<T> provider
) {
public void beConsumed(Consumer consumer) {
consumer.consume(type, provider);
}
}
private static final Map<BlockEntityType<?>, Pair<?>> data = new LinkedHashMap<>();
private static <T extends BlockEntity> void register(
BlockEntityType<? extends T> type,
BlockEntityRendererProvider<T> provider
) {
data.put(type, new Pair<>(type, provider));
}
static {
register(BlockEntities.ALCHEMICAL_CHEST, ChestRenderer::new);
register(BlockEntities.ENERGY_CONDENSER, ChestRenderer::new);
}
}
public static final class ItemRenderers {
private ItemRenderers() {}
public static void consume(BiConsumer<? super ItemLike, ? super DynamicItemRenderer> consumer) {
data.forEach(consumer);
}
private static final Map<ItemLike, DynamicItemRenderer> 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, AlchemicalChestEntity::new)::renderByItem
);
register(
Items.ENERGY_CONDENSER,
new ChestItemRenderer<>(Blocks.ENERGY_CONDENSER, EnergyCondenserEntity::new)::renderByItem
);
}
}
public static final class MenuScreens {
private MenuScreens() {}
@FunctionalInterface
public interface Consumer {
<M extends AbstractContainerMenu, S extends Screen & MenuAccess<M>>
void consume(MenuType<? extends M> menu, ScreenConstructor<M, S> constructor);
}
public static void consume(Consumer consumer) {
data.values().forEach(pair -> pair.beConsumed(consumer));
}
private record Pair<M extends AbstractContainerMenu, S extends Screen & MenuAccess<M>>(
MenuType<? extends M> menu,
ScreenConstructor<M, S> constructor
) {
public void beConsumed(Consumer consumer) {
consumer.consume(menu, constructor);
}
}
private static final Map<MenuType<?>, Pair<?, ?>> data = new LinkedHashMap<>();
private static <M extends AbstractContainerMenu, S extends Screen & MenuAccess<M>> void register(
MenuType<? extends M> menu,
ScreenConstructor<M, S> constructor
) {
data.put(menu, new Pair<>(menu, constructor));
}
static {
register(Menus.ALCHEMICAL_CHEST, AlchemicalChestScreen::new);
register(Menus.ENERGY_CONDENSER, EnergyCondenserScreen::new);
}
}
}
|