Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 542757e

Browse files
committed
fix #52 - early registration crash
1 parent b787f8e commit 542757e

3 files changed

Lines changed: 35 additions & 18 deletions

File tree

CHANGELOG.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@
33
All notable changes to this project will be documented in this file.
44

55
## Unreleased
6-
- /
6+
7+
- fixed crash caused by early registration ([#52](https://github.com/AlmostReliable/merequester/issues/52))
78

89
## [1.4.0] - 2025-08-27
910

src/main/java/com/almostreliable/merequester/compat/wtlib/WirelessTerminalCompat.java

Lines changed: 23 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,16 @@
11
package com.almostreliable.merequester.compat.wtlib;
22

3+
import com.almostreliable.merequester.Utils;
4+
5+
import net.minecraft.core.Registry;
36
import net.minecraft.world.inventory.MenuType;
7+
import net.minecraft.world.item.Item;
48
import net.minecraft.world.level.ItemLike;
5-
import net.neoforged.fml.ModList;
9+
import net.neoforged.fml.loading.LoadingModList;
610
import net.neoforged.neoforge.capabilities.Capabilities;
711
import net.neoforged.neoforge.capabilities.RegisterCapabilitiesEvent;
812
import net.neoforged.neoforge.client.event.RegisterMenuScreensEvent;
913
import net.neoforged.neoforge.registries.DeferredHolder;
10-
import net.neoforged.neoforge.registries.DeferredItem;
1114
import net.neoforged.neoforge.registries.DeferredRegister;
1215

1316
import appeng.api.features.GridLinkables;
@@ -27,9 +30,9 @@ public final class WirelessTerminalCompat {
2730
public static final WirelessTerminalCompat INSTANCE = new WirelessTerminalCompat();
2831
static final String TERMINAL_ID = "wireless_requester_terminal";
2932

30-
public void init(DeferredRegister.Items itemRegistry, DeferredRegister<MenuType<?>> menuRegistry) {
33+
public void init(DeferredRegister<MenuType<?>> menuRegistry) {
3134
if (isLoaded()) {
32-
Guard.init(itemRegistry, menuRegistry);
35+
Guard.init(menuRegistry);
3336
}
3437
}
3538

@@ -39,6 +42,12 @@ public void initClient(RegisterMenuScreensEvent event) {
3942
}
4043
}
4144

45+
public void registerWirelessTerminal(Registry<Item> registry) {
46+
if (isLoaded()) {
47+
Guard.registerWirelessTerminal(registry);
48+
}
49+
}
50+
4251
public void registerCapabilities(RegisterCapabilitiesEvent event) {
4352
if (isLoaded()) {
4453
Guard.registerCapabilities(event);
@@ -54,7 +63,7 @@ public Iterable<ItemLike> collectItems() {
5463
}
5564

5665
private boolean isLoaded() {
57-
return ModList.get().isLoaded("ae2wtlib");
66+
return LoadingModList.get().getModFileById("ae2wtlib") != null;
5867
}
5968

6069
private WirelessTerminalCompat() {}
@@ -63,23 +72,22 @@ private WirelessTerminalCompat() {}
6372
static final class Guard {
6473

6574
@Nullable
66-
static DeferredItem<ReqWirelessTerminalItem> WIRELESS_REQUESTER_TERMINAL;
75+
static ReqWirelessTerminalItem WIRELESS_REQUESTER_TERMINAL;
6776
@Nullable
6877
static DeferredHolder<MenuType<?>, MenuType<ReqWirelessTerminalMenu>> WIRELESS_REQUESTER_TERMINAL_MENU;
6978

70-
private static void init(DeferredRegister.Items itemRegistry, DeferredRegister<MenuType<?>> menuRegistry) {
71-
72-
WIRELESS_REQUESTER_TERMINAL = itemRegistry.registerItem(
73-
TERMINAL_ID,
74-
properties -> new ReqWirelessTerminalItem()
75-
);
79+
private static void init(DeferredRegister<MenuType<?>> menuRegistry) {
7680
WIRELESS_REQUESTER_TERMINAL_MENU = menuRegistry.register(
7781
TERMINAL_ID,
7882
() -> ReqWirelessTerminalMenu.TYPE
7983
);
84+
}
8085

86+
public static void registerWirelessTerminal(Registry<Item> registry) {
87+
WIRELESS_REQUESTER_TERMINAL = new ReqWirelessTerminalItem();
88+
Registry.register(registry, Utils.getRL(TERMINAL_ID), WIRELESS_REQUESTER_TERMINAL);
8189
AddTerminalEvent.register(event -> event.builder(
82-
"requester", ReqWirelessTerminalMenuHost::new, ReqWirelessTerminalMenu.TYPE, WIRELESS_REQUESTER_TERMINAL.get(),
90+
"requester", ReqWirelessTerminalMenuHost::new, ReqWirelessTerminalMenu.TYPE, WIRELESS_REQUESTER_TERMINAL,
8391
Icon.PATTERN_ACCESS
8492
)
8593
.addTerminal());
@@ -90,14 +98,14 @@ private static void registerCapabilities(RegisterCapabilitiesEvent event) {
9098
GridLinkables.register(WIRELESS_REQUESTER_TERMINAL, WirelessTerminalItem.LINKABLE_HANDLER);
9199
event.registerItem(
92100
Capabilities.EnergyStorage.ITEM,
93-
(stack, context) -> new PoweredItemCapabilities(stack, WIRELESS_REQUESTER_TERMINAL.get()),
101+
(stack, context) -> new PoweredItemCapabilities(stack, WIRELESS_REQUESTER_TERMINAL),
94102
WIRELESS_REQUESTER_TERMINAL
95103
);
96104
}
97105

98106
private static Iterable<ItemLike> collectItems() {
99107
assert WIRELESS_REQUESTER_TERMINAL != null;
100-
return List.of(WIRELESS_REQUESTER_TERMINAL.get());
108+
return List.of(WIRELESS_REQUESTER_TERMINAL);
101109
}
102110

103111
private Guard() {}

src/main/java/com/almostreliable/merequester/core/Registration.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import com.almostreliable.merequester.terminal.RequesterTerminalMenu;
1111
import com.almostreliable.merequester.terminal.RequesterTerminalPart;
1212

13+
import net.minecraft.core.Registry;
1314
import net.minecraft.core.component.DataComponentType;
1415
import net.minecraft.core.registries.Registries;
1516
import net.minecraft.network.codec.ByteBufCodecs;
@@ -20,6 +21,7 @@
2021
import net.minecraft.world.item.Item;
2122
import net.minecraft.world.level.ItemLike;
2223
import net.minecraft.world.level.block.entity.BlockEntityType;
24+
import net.neoforged.bus.api.EventPriority;
2325
import net.neoforged.bus.api.IEventBus;
2426
import net.neoforged.neoforge.capabilities.RegisterCapabilitiesEvent;
2527
import net.neoforged.neoforge.event.BuildCreativeModeTabContentsEvent;
@@ -114,11 +116,12 @@ public final class Registration {
114116
private Registration() {}
115117

116118
public static void init(IEventBus modEventBus) {
117-
modEventBus.addListener(Registration::registerContents);
119+
// High priority due to AE2WTLib closes it's registration in the registry event
120+
modEventBus.addListener(EventPriority.HIGH, Registration::registerContents);
118121
modEventBus.addListener(Registration::registerCapabilities);
119122
modEventBus.addListener(Tab::initContents);
120123

121-
WirelessTerminalCompat.INSTANCE.init(ITEMS, MENUS);
124+
WirelessTerminalCompat.INSTANCE.init(MENUS);
122125

123126
BLOCKS.register(modEventBus);
124127
ITEMS.register(modEventBus);
@@ -127,10 +130,15 @@ public static void init(IEventBus modEventBus) {
127130
COMPONENTS.register(modEventBus);
128131
}
129132

133+
@SuppressWarnings("unchecked")
130134
private static void registerContents(RegisterEvent event) {
131135
if (event.getRegistryKey() == Registries.CREATIVE_MODE_TAB) {
132136
Tab.registerTab(event);
133137
}
138+
139+
if (event.getRegistryKey() == Registries.ITEM) {
140+
WirelessTerminalCompat.INSTANCE.registerWirelessTerminal((Registry<Item>) event.getRegistry());
141+
}
134142
}
135143

136144
private static void registerCapabilities(RegisterCapabilitiesEvent event) {

0 commit comments

Comments
 (0)