Skip to content

Commit d9d62d4

Browse files
committed
Bring last few APIs for porting FoxLoader 1.0 mods.
1 parent 6058af3 commit d9d62d4

File tree

4 files changed

+32
-0
lines changed

4 files changed

+32
-0
lines changed

loader/src/main/java/com/fox2code/foxloader/loader/Mod.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,8 @@ protected final void setConfigObject(@Nullable Object configObject) {
6060

6161
public void onPreInit() {}
6262

63+
public void onLatePreInit() {}
64+
6365
public void onInit() {}
6466

6567
public void onPostInit() {}

loader/src/main/java/com/fox2code/foxloader/loader/ModLoader.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ public final class ModLoader extends Mod {
5959
private static final ArrayList<Mod> mods = new ArrayList<>();
6060
private static boolean areAllModsLoaded = false;
6161
private static boolean areAllModsFullyLoaded = false;
62+
private static boolean constructingMods = false;
6263
private static Thread gameThread;
6364

6465
static {
@@ -96,13 +97,15 @@ static void preInitializeMods(Collection<LoadingPlugin> loadingPlugins) throws E
9697
for (LoadingPlugin loadingPlugin : loadingPlugins) {
9798
loadingPlugin.preModInitialization();
9899
}
100+
constructingMods = true;
99101
for (ModContainer modContainer : ModLoaderInit.modContainers.values()) {
100102
ModContainer.setActiveModContainer(modContainer);
101103
Mod mod = modContainer.initializeMod();
102104
if (mod != null) {
103105
mods.add(mod);
104106
}
105107
}
108+
constructingMods = false;
106109
for (Mod mod : mods) {
107110
ModContainer.setActiveModContainer(mod.getModContainer());
108111
FoxLoaderEvents.INSTANCE.registerEvents(mod);
@@ -111,6 +114,10 @@ static void preInitializeMods(Collection<LoadingPlugin> loadingPlugins) throws E
111114
ModContainer.setActiveModContainer(mod.getModContainer());
112115
mod.onPreInit();
113116
}
117+
for (Mod mod : mods) {
118+
ModContainer.setActiveModContainer(mod.getModContainer());
119+
mod.onLatePreInit();
120+
}
114121
ModContainer.setActiveModContainer(null);
115122
areAllModsLoaded = true;
116123
GameRegistry.freeze();
@@ -202,6 +209,10 @@ public static boolean areAllModsFullyLoaded() {
202209
return areAllModsFullyLoaded;
203210
}
204211

212+
public static boolean isConstructingMods() {
213+
return constructingMods;
214+
}
215+
205216
public static Thread getGameThread() {
206217
return gameThread;
207218
}

loader/src/main/java/com/fox2code/foxloader/registry/GameRegistry.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -447,6 +447,10 @@ static void initializeCustomInitialIds(int initialNextBlockId, int initialNextIt
447447
public static int generateBlockId(Block block, String id) {
448448
if (!initialized) throw new IllegalStateException("GameRegistry not initialized");
449449
if (frozen) throw new IllegalStateException("GameRegistry frozen");
450+
if (ModLoader.isConstructingMods()) {
451+
// Avoid bad practices that can leads to severe unfixable bugs down the line.
452+
throw new IllegalStateException("Cannot register blocks during mods construction");
453+
}
450454
ModContainer modContainer = ModContainer.getActiveModContainer();
451455
if (modContainer == null) throw new IllegalStateException("No mod container active");
452456
if (modContainer != FOXLOADER_MOD_CONTAINER) {
@@ -468,6 +472,10 @@ public static int generateBlockId(Block block, String id) {
468472
public static int generateItemId(Item item, String id) {
469473
if (!initialized) throw new IllegalStateException("GameRegistry not initialized");
470474
if (frozen) throw new IllegalStateException("GameRegistry frozen");
475+
if (ModLoader.isConstructingMods()) {
476+
// Avoid bad practices that can leads to severe unfixable bugs down the line.
477+
throw new IllegalStateException("Cannot register items during mods construction");
478+
}
471479
ModContainer modContainer = ModContainer.getActiveModContainer();
472480
if (modContainer == null) throw new IllegalStateException("No mod container active");
473481
if (modContainer != FOXLOADER_MOD_CONTAINER) {

patching/src/main/java/com/fox2code/foxloader/patching/game/RegistryPatch.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -567,6 +567,9 @@ private static void patchRenderItem(ClassNode classNode) {
567567

568568
// Block/Item patching
569569
private static void patchItem(ClassNode classNode) {
570+
TransformerUtils.getMethod(classNode, "setMaxDamage").access = ACC_PUBLIC;
571+
TransformerUtils.getMethod(classNode, "setWearable").access = ACC_PUBLIC;
572+
TransformerUtils.getMethod(classNode, "addDescription").access = ACC_PUBLIC;
570573
MethodNode init = TransformerUtils.getMethod(classNode, "<init>");
571574
MethodNode flInit = TransformerUtils.copyMethodNode(init);
572575
init.access |= ACC_DEPRECATED;
@@ -690,6 +693,14 @@ private static void patchBlock(ClassNode classNode) {
690693
TransformerUtils.getField(classNode, "blockName").access = ACC_PROTECTED;
691694
TransformerUtils.getMethod(classNode, "getBlockName").access |= ACC_FINAL;
692695
TransformerUtils.getMethod(classNode, "setBlockName").access |= ACC_FINAL;
696+
TransformerUtils.getMethod(classNode, "setLightOpacity").access = ACC_PUBLIC;
697+
TransformerUtils.getMethod(classNode, "setResistance").access = ACC_PUBLIC;
698+
TransformerUtils.getMethod(classNode, "setIsIndestructible").access = ACC_PUBLIC;
699+
TransformerUtils.getMethod(classNode, "setBlockUnbreakable").access = ACC_PUBLIC;
700+
TransformerUtils.getMethod(classNode, "setHardness").access = ACC_PUBLIC;
701+
TransformerUtils.getMethod(classNode, "disableStats").access = ACC_PUBLIC;
702+
TransformerUtils.getMethod(classNode, "setWearable").access = ACC_PUBLIC;
703+
TransformerUtils.getMethod(classNode, "addDescription").access = ACC_PUBLIC;
693704
MethodNode init = TransformerUtils.getMethod(classNode, "<init>");
694705
MethodNode flInit = TransformerUtils.copyMethodNode(init);
695706
init.access |= ACC_DEPRECATED;

0 commit comments

Comments
 (0)