Skip to content

Commit ff2bd13

Browse files
Update to 1.20.6 (VazkiiMods#744)
* Port to 1.20.5 * Remove leftover commented out code from the port * Port to 1.20.6 * Update tick events * Update NeoForge * Remove custom book recipe You can specify components in vanilla results now * Remove Accessor * Register DataComponent before items * Fix test recipes * Update neoforge * Change the stack serialization method (WIP) * Feed registry access where possible * Fix typo in networking translation key * Update NeoForge and Fabric * Fix a creative tab crash * Disable NeoForge test since it conflicts * Update JEI and REI * Fix Ingredient Variable serializer not using the HolderLookup * Change the ItemStackVariableSerializer toJson to use "components" * Revert change to ItemStackUtil#loadStackFromJson * Change the spotlight page to use ItemStack[] instead of Ingredient This prevents Components from being getting removed * Remove the isString check from TextComponentVariableSerializer * add HolderLookup.Provider context in VariableAssigner * Update BookOpenTrigger codec * Spotless apply --------- Co-authored-by: Minecraftschurli <[email protected]>
1 parent b9173fb commit ff2bd13

File tree

94 files changed

+482
-640
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

94 files changed

+482
-640
lines changed

.github/workflows/gradle.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ jobs:
1111
uses: actions/setup-java@v2
1212
with:
1313
distribution: 'adopt'
14-
java-version: '17'
14+
java-version: '21'
1515
- name: Validate gradlew integrity
1616
uses: gradle/wrapper-validation-action@v1
1717
- name: Restore cache

Fabric/build.gradle

+5-5
Original file line numberDiff line numberDiff line change
@@ -61,15 +61,15 @@ dependencies {
6161

6262
minecraft "com.mojang:minecraft:${mc_version}"
6363
mappings loom.officialMojangMappings()
64-
modImplementation "net.fabricmc:fabric-loader:0.15.3"
64+
modImplementation "net.fabricmc:fabric-loader:0.15.11"
6565

66-
modImplementation "net.fabricmc.fabric-api:fabric-api:0.92.1+1.20.4"
66+
modImplementation "net.fabricmc.fabric-api:fabric-api:0.100.0+1.20.6"
6767
compileOnly project(":Xplat")
6868

69-
modCompileOnly "mezz.jei:jei-1.20.4-common-api:17.0.0.30"
69+
modCompileOnly "mezz.jei:jei-1.20.6-common-api:18.0.0.62"
7070

71-
modCompileOnly("me.shedaniel:RoughlyEnoughItems-api-fabric:14.0.688") { transitive = false }
72-
modCompileOnly("me.shedaniel.cloth:cloth-config-fabric:13.0.121") { transitive = false }
71+
modCompileOnly("me.shedaniel:RoughlyEnoughItems-api-fabric:16.0.729") { transitive = false }
72+
modCompileOnly("me.shedaniel.cloth:cloth-config-fabric:14.0.126") { transitive = false }
7373
}
7474

7575
compileJava {

Fabric/src/main/java/vazkii/patchouli/fabric/client/FabricClientInitializer.java

+4-2
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@
3333
import vazkii.patchouli.common.item.PatchouliItems;
3434
import vazkii.patchouli.fabric.network.FabricMessageOpenBookGui;
3535
import vazkii.patchouli.fabric.network.FabricMessageReloadBookContents;
36+
import vazkii.patchouli.network.MessageOpenBookGui;
37+
import vazkii.patchouli.network.MessageReloadBookContents;
3638

3739
import org.jetbrains.annotations.Nullable;
3840

@@ -50,8 +52,8 @@ public void onInitializeClient() {
5052
UseBlockCallback.EVENT.register(MultiblockVisualizationHandler::onPlayerInteract);
5153
ClientTickEvents.END_CLIENT_TICK.register(MultiblockVisualizationHandler::onClientTick);
5254
HudRenderCallback.EVENT.register(MultiblockVisualizationHandler::onRenderHUD);
53-
ClientPlayNetworking.registerGlobalReceiver(FabricMessageOpenBookGui.ID, FabricMessageOpenBookGui::handle);
54-
ClientPlayNetworking.registerGlobalReceiver(FabricMessageReloadBookContents.ID, FabricMessageReloadBookContents::handle);
55+
ClientPlayNetworking.registerGlobalReceiver(MessageOpenBookGui.TYPE, FabricMessageOpenBookGui::handle);
56+
ClientPlayNetworking.registerGlobalReceiver(MessageReloadBookContents.TYPE, FabricMessageReloadBookContents::handle);
5557

5658
ModelLoadingPlugin.register(pluginContext -> {
5759
for (Book book : BookRegistry.INSTANCE.books.values()) {

Fabric/src/main/java/vazkii/patchouli/fabric/common/FabricModInitializer.java

+8-1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents;
66
import net.fabricmc.fabric.api.event.player.UseBlockCallback;
77
import net.fabricmc.fabric.api.itemgroup.v1.ItemGroupEvents;
8+
import net.fabricmc.fabric.api.networking.v1.PayloadTypeRegistry;
89
import net.minecraft.core.Registry;
910
import net.minecraft.core.registries.BuiltInRegistries;
1011
import net.minecraft.core.registries.Registries;
@@ -19,19 +20,25 @@
1920
import vazkii.patchouli.common.handler.LecternEventHandler;
2021
import vazkii.patchouli.common.handler.ReloadContentsHandler;
2122
import vazkii.patchouli.common.item.ItemModBook;
23+
import vazkii.patchouli.common.item.PatchouliDataComponents;
2224
import vazkii.patchouli.common.item.PatchouliItems;
25+
import vazkii.patchouli.network.MessageOpenBookGui;
26+
import vazkii.patchouli.network.MessageReloadBookContents;
2327

2428
public class FabricModInitializer implements ModInitializer {
2529
@Override
2630
public void onInitialize() {
2731
PatchouliSounds.submitRegistrations((id, e) -> Registry.register(BuiltInRegistries.SOUND_EVENT, id, e));
32+
PatchouliDataComponents.submitDataComponentRegistrations((id, e) -> Registry.register(BuiltInRegistries.DATA_COMPONENT_TYPE, id, e));
2833
PatchouliItems.submitItemRegistrations((id, e) -> Registry.register(BuiltInRegistries.ITEM, id, e));
29-
PatchouliItems.submitRecipeSerializerRegistrations((id, e) -> Registry.register(BuiltInRegistries.RECIPE_SERIALIZER, id, e));
3034
PatchouliCriteriaTriggers.submitTriggerRegistrations((id, e) -> Registry.register(BuiltInRegistries.TRIGGER_TYPES, id, e));
3135
FiberPatchouliConfig.setup();
3236
CommandRegistrationCallback.EVENT.register((disp, buildCtx, selection) -> OpenBookCommand.register(disp));
3337
UseBlockCallback.EVENT.register(LecternEventHandler::rightClick);
3438

39+
PayloadTypeRegistry.playS2C().register(MessageOpenBookGui.TYPE, MessageOpenBookGui.CODEC);
40+
PayloadTypeRegistry.playS2C().register(MessageReloadBookContents.TYPE, MessageReloadBookContents.CODEC);
41+
3542
BookRegistry.INSTANCE.init();
3643

3744
ServerLifecycleEvents.END_DATA_PACK_RELOAD.register((server, _r, success) -> {
Original file line numberDiff line numberDiff line change
@@ -1,44 +1,25 @@
11
package vazkii.patchouli.fabric.network;
22

3-
import net.fabricmc.fabric.api.networking.v1.PacketSender;
3+
import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking;
44
import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking;
55
import net.minecraft.client.Minecraft;
6-
import net.minecraft.client.multiplayer.ClientPacketListener;
7-
import net.minecraft.network.FriendlyByteBuf;
86
import net.minecraft.resources.ResourceLocation;
97
import net.minecraft.server.level.ServerPlayer;
108

11-
import vazkii.patchouli.api.PatchouliAPI;
129
import vazkii.patchouli.client.book.ClientBookRegistry;
10+
import vazkii.patchouli.network.MessageOpenBookGui;
1311

1412
import org.jetbrains.annotations.Nullable;
1513

16-
17-
import io.netty.buffer.Unpooled;
18-
1914
public class FabricMessageOpenBookGui {
20-
public static final ResourceLocation ID = new ResourceLocation(PatchouliAPI.MOD_ID, "open_book");
2115

2216
public static void send(ServerPlayer player, ResourceLocation book, @Nullable ResourceLocation entry, int page) {
23-
FriendlyByteBuf buf = new FriendlyByteBuf(Unpooled.buffer());
24-
buf.writeResourceLocation(book);
25-
buf.writeUtf(entry == null ? "" : entry.toString());
26-
buf.writeVarInt(page);
27-
ServerPlayNetworking.send(player, ID, buf);
17+
ServerPlayNetworking.send(player, new MessageOpenBookGui(book, entry, page));
2818
}
2919

30-
public static void handle(Minecraft client, ClientPacketListener handler, FriendlyByteBuf buf, PacketSender responseSender) {
31-
ResourceLocation book = buf.readResourceLocation();
32-
ResourceLocation entry;
33-
String tmp = buf.readUtf();
34-
if (tmp.isEmpty()) {
35-
entry = null;
36-
} else {
37-
entry = ResourceLocation.tryParse(tmp);
38-
}
39-
40-
int page = buf.readVarInt();
41-
client.submit(() -> ClientBookRegistry.INSTANCE.displayBookGui(book, entry, page));
20+
public static void handle(MessageOpenBookGui message, ClientPlayNetworking.Context handler) {
21+
Minecraft client = handler.client();
22+
client.submit(() -> ClientBookRegistry.INSTANCE.displayBookGui(message.book(), message.entry(), message.page()));
4223
}
4324

4425
}
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,27 @@
11
package vazkii.patchouli.fabric.network;
22

3-
import net.fabricmc.fabric.api.networking.v1.PacketSender;
3+
import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking;
44
import net.fabricmc.fabric.api.networking.v1.PlayerLookup;
55
import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking;
66
import net.minecraft.client.Minecraft;
7-
import net.minecraft.client.multiplayer.ClientPacketListener;
8-
import net.minecraft.network.FriendlyByteBuf;
9-
import net.minecraft.resources.ResourceLocation;
107
import net.minecraft.server.MinecraftServer;
118
import net.minecraft.server.level.ServerPlayer;
129

13-
import vazkii.patchouli.api.PatchouliAPI;
1410
import vazkii.patchouli.client.book.ClientBookRegistry;
15-
16-
17-
import io.netty.buffer.Unpooled;
11+
import vazkii.patchouli.network.MessageReloadBookContents;
1812

1913
public class FabricMessageReloadBookContents {
20-
public static final ResourceLocation ID = new ResourceLocation(PatchouliAPI.MOD_ID, "reload_books");
2114

2215
public static void sendToAll(MinecraftServer server) {
2316
PlayerLookup.all(server).forEach(FabricMessageReloadBookContents::send);
2417
}
2518

2619
public static void send(ServerPlayer player) {
27-
FriendlyByteBuf buf = new FriendlyByteBuf(Unpooled.EMPTY_BUFFER);
28-
ServerPlayNetworking.send(player, ID, buf);
20+
ServerPlayNetworking.send(player, new MessageReloadBookContents());
2921
}
3022

31-
public static void handle(Minecraft client, ClientPacketListener handler, FriendlyByteBuf buf, PacketSender responseSender) {
23+
public static void handle(MessageReloadBookContents message, ClientPlayNetworking.Context handler) {
24+
Minecraft client = handler.client();
3225
client.submit(() -> ClientBookRegistry.INSTANCE.reload());
3326
}
3427
}

Fabric/src/main/resources/fabric.mod.json

+3-3
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,8 @@
3535
],
3636

3737
"depends": {
38-
"fabricloader": ">=0.14.21",
39-
"fabric": ">=0.87.0",
40-
"minecraft": ">=1.20.1 <1.21"
38+
"fabricloader": ">=0.15.10",
39+
"fabric": ">=0.97.6",
40+
"minecraft": ">=1.20.6 <1.21"
4141
}
4242
}

Fabric/src/main/resources/patchouli_fabric.mixins.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"required": true,
33
"minVersion": "0.8",
44
"package": "vazkii.patchouli.mixin",
5-
"compatibilityLevel": "JAVA_17",
5+
"compatibilityLevel": "JAVA_21",
66
"mixins": [
77
],
88
"client": [

Jenkinsfile

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ pipeline {
66
}
77
agent any
88
tools {
9-
jdk "jdk-17.0.1"
9+
jdk "jdk-21.0.2"
1010
}
1111
stages {
1212
stage('Clean') {

NeoForge/build.gradle

+8-3
Original file line numberDiff line numberDiff line change
@@ -37,11 +37,16 @@ runs {
3737
}
3838

3939
dependencies {
40-
implementation "net.neoforged:neoforge:20.4.173"
40+
implementation "net.neoforged:neoforge:20.6.115"
4141
implementation project(":Xplat")
4242

43-
compileOnly "mezz.jei:jei-1.20.4-common-api:17.0.0.30"
44-
testCompileOnly "mezz.jei:jei-1.20.4-common-api:17.0.0.30"
43+
compileOnly "mezz.jei:jei-1.20.6-common-api:18.0.0.62"
44+
testCompileOnly "mezz.jei:jei-1.20.6-common-api:18.0.0.62"
45+
}
46+
47+
tasks.named('test').configure {
48+
//Disable builtin test as we have JUnit enabled in Xplat
49+
enabled(false)
4550
}
4651

4752
TaskCollection.metaClass.excludingNeoTasks = { ->

NeoForge/src/main/java/vazkii/patchouli/neoforge/client/NeoForgeClientInitializer.java

+24-24
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,17 @@
99
import net.minecraft.world.InteractionResult;
1010
import net.neoforged.api.distmarker.Dist;
1111
import net.neoforged.bus.api.SubscribeEvent;
12-
import net.neoforged.fml.common.Mod;
12+
import net.neoforged.fml.common.EventBusSubscriber;
1313
import net.neoforged.fml.event.lifecycle.FMLClientSetupEvent;
14-
import net.neoforged.neoforge.client.event.*;
15-
import net.neoforged.neoforge.client.gui.overlay.VanillaGuiOverlay;
14+
import net.neoforged.neoforge.client.event.ClientPlayerNetworkEvent;
15+
import net.neoforged.neoforge.client.event.ClientTickEvent;
16+
import net.neoforged.neoforge.client.event.ModelEvent;
17+
import net.neoforged.neoforge.client.event.RegisterClientReloadListenersEvent;
18+
import net.neoforged.neoforge.client.event.RegisterGuiLayersEvent;
19+
import net.neoforged.neoforge.client.event.RenderFrameEvent;
20+
import net.neoforged.neoforge.client.event.RenderTooltipEvent;
21+
import net.neoforged.neoforge.client.gui.VanillaGuiLayers;
1622
import net.neoforged.neoforge.common.NeoForge;
17-
import net.neoforged.neoforge.event.TickEvent;
1823
import net.neoforged.neoforge.event.entity.player.PlayerInteractEvent;
1924

2025
import vazkii.patchouli.api.PatchouliAPI;
@@ -36,7 +41,7 @@
3641
import java.util.concurrent.locks.Lock;
3742
import java.util.concurrent.locks.ReentrantLock;
3843

39-
@Mod.EventBusSubscriber(modid = PatchouliAPI.MOD_ID, bus = Mod.EventBusSubscriber.Bus.MOD, value = Dist.CLIENT)
44+
@EventBusSubscriber(modid = PatchouliAPI.MOD_ID, bus = EventBusSubscriber.Bus.MOD, value = Dist.CLIENT)
4045
public class NeoForgeClientInitializer {
4146
/**
4247
* Why are these necessary?
@@ -99,23 +104,21 @@ public static void registerReloadListeners(RegisterClientReloadListenersEvent e)
99104
}
100105

101106
@SubscribeEvent
102-
public static void registerOverlays(RegisterGuiOverlaysEvent evt) {
103-
evt.registerAbove(VanillaGuiOverlay.CROSSHAIR.id(), new ResourceLocation(PatchouliAPI.MOD_ID, "book_overlay"),
104-
(gui, poseStack, partialTick, width, height) -> BookRightClickHandler.onRenderHUD(poseStack, partialTick)
107+
public static void registerOverlays(RegisterGuiLayersEvent evt) {
108+
evt.registerAbove(VanillaGuiLayers.CROSSHAIR, new ResourceLocation(PatchouliAPI.MOD_ID, "book_overlay"),
109+
BookRightClickHandler::onRenderHUD
105110
);
106-
evt.registerBelow(VanillaGuiOverlay.BOSS_EVENT_PROGRESS.id(), new ResourceLocation(PatchouliAPI.MOD_ID, "multiblock_progress"),
107-
(gui, poseStack, partialTick, width, height) -> MultiblockVisualizationHandler.onRenderHUD(poseStack, partialTick)
111+
evt.registerBelow(VanillaGuiLayers.BOSS_OVERLAY, new ResourceLocation(PatchouliAPI.MOD_ID, "multiblock_progress"),
112+
MultiblockVisualizationHandler::onRenderHUD
108113
);
109114
}
110115

111116
@SubscribeEvent
112117
public static void onInitializeClient(FMLClientSetupEvent evt) {
113118
ClientBookRegistry.INSTANCE.init();
114119
PersistentData.setup();
115-
NeoForge.EVENT_BUS.addListener((TickEvent.ClientTickEvent e) -> {
116-
if (e.phase == TickEvent.Phase.END) {
117-
ClientTicker.endClientTick(Minecraft.getInstance());
118-
}
120+
NeoForge.EVENT_BUS.addListener((ClientTickEvent.Post e) -> {
121+
ClientTicker.endClientTick(Minecraft.getInstance());
119122
});
120123
NeoForge.EVENT_BUS.addListener((PlayerInteractEvent.RightClickBlock e) -> BookRightClickHandler.onRightClick(e.getEntity(), e.getLevel(), e.getHand(), e.getHitVec()));
121124
NeoForge.EVENT_BUS.addListener((PlayerInteractEvent.RightClickBlock e) -> {
@@ -125,18 +128,15 @@ public static void onInitializeClient(FMLClientSetupEvent evt) {
125128
e.setCancellationResult(result);
126129
}
127130
});
128-
NeoForge.EVENT_BUS.addListener((TickEvent.ClientTickEvent e) -> {
129-
if (e.phase == TickEvent.Phase.END) {
130-
MultiblockVisualizationHandler.onClientTick(Minecraft.getInstance());
131-
}
131+
NeoForge.EVENT_BUS.addListener((ClientTickEvent.Post e) -> {
132+
MultiblockVisualizationHandler.onClientTick(Minecraft.getInstance());
132133
});
133134

134-
NeoForge.EVENT_BUS.addListener((TickEvent.RenderTickEvent e) -> {
135-
if (e.phase == TickEvent.Phase.START) {
136-
ClientTicker.renderTickStart(e.renderTickTime);
137-
} else {
138-
ClientTicker.renderTickEnd();
139-
}
135+
NeoForge.EVENT_BUS.addListener((RenderFrameEvent.Pre e) -> {
136+
ClientTicker.renderTickStart(e.getPartialTick());
137+
});
138+
NeoForge.EVENT_BUS.addListener((RenderFrameEvent.Post e) -> {
139+
ClientTicker.renderTickEnd();
140140
});
141141

142142
NeoForge.EVENT_BUS.addListener((ClientPlayerNetworkEvent.LoggingOut e) -> {

NeoForge/src/main/java/vazkii/patchouli/neoforge/common/NeoForgeModInitializer.java

+12-7
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,14 @@
11
package vazkii.patchouli.neoforge.common;
22

33
import net.minecraft.core.registries.Registries;
4+
import net.minecraft.world.item.CreativeModeTab;
45
import net.minecraft.world.item.CreativeModeTabs;
56
import net.minecraft.world.item.ItemStack;
7+
import net.neoforged.api.distmarker.Dist;
68
import net.neoforged.bus.api.IEventBus;
79
import net.neoforged.bus.api.SubscribeEvent;
10+
import net.neoforged.fml.ModContainer;
11+
import net.neoforged.fml.common.EventBusSubscriber;
812
import net.neoforged.fml.common.Mod;
913
import net.neoforged.fml.event.lifecycle.FMLCommonSetupEvent;
1014
import net.neoforged.neoforge.common.CreativeModeTabRegistry;
@@ -23,14 +27,15 @@
2327
import vazkii.patchouli.common.handler.LecternEventHandler;
2428
import vazkii.patchouli.common.handler.ReloadContentsHandler;
2529
import vazkii.patchouli.common.item.ItemModBook;
30+
import vazkii.patchouli.common.item.PatchouliDataComponents;
2631
import vazkii.patchouli.common.item.PatchouliItems;
2732
import vazkii.patchouli.neoforge.network.NeoForgeNetworkHandler;
2833

29-
@Mod.EventBusSubscriber(modid = PatchouliAPI.MOD_ID, bus = Mod.EventBusSubscriber.Bus.MOD)
34+
@EventBusSubscriber(modid = PatchouliAPI.MOD_ID, bus = EventBusSubscriber.Bus.MOD)
3035
@Mod(PatchouliAPI.MOD_ID)
3136
public class NeoForgeModInitializer {
32-
public NeoForgeModInitializer(IEventBus eventBus) {
33-
NeoForgePatchouliConfig.setup();
37+
public NeoForgeModInitializer(IEventBus eventBus, Dist dist, ModContainer container) {
38+
NeoForgePatchouliConfig.setup(container);
3439

3540
eventBus.addListener(NeoForgeNetworkHandler::setupPackets);
3641
}
@@ -40,12 +45,12 @@ public static void register(RegisterEvent evt) {
4045
evt.register(Registries.SOUND_EVENT, rh -> {
4146
PatchouliSounds.submitRegistrations(rh::register);
4247
});
48+
evt.register(Registries.DATA_COMPONENT_TYPE, rh -> {
49+
PatchouliDataComponents.submitDataComponentRegistrations(rh::register);
50+
});
4351
evt.register(Registries.ITEM, rh -> {
4452
PatchouliItems.submitItemRegistrations(rh::register);
4553
});
46-
evt.register(Registries.RECIPE_SERIALIZER, rh -> {
47-
PatchouliItems.submitRecipeSerializerRegistrations(rh::register);
48-
});
4954
evt.register(Registries.TRIGGER_TYPE, rh -> PatchouliCriteriaTriggers.submitTriggerRegistrations(rh::register));
5055
}
5156

@@ -55,7 +60,7 @@ public static void processCreativeTabs(BuildCreativeModeTabContentsEvent evt) {
5560
if (!b.noBook) {
5661
ItemStack book = ItemModBook.forBook(b);
5762
if (evt.getTab() == CreativeModeTabs.searchTab()) {
58-
evt.accept(book);
63+
evt.accept(book, CreativeModeTab.TabVisibility.SEARCH_TAB_ONLY);
5964
} else if (b.creativeTab != null) {
6065
if (evt.getTab() == CreativeModeTabRegistry.getTab(b.creativeTab)) {
6166
evt.accept(book);

NeoForge/src/main/java/vazkii/patchouli/neoforge/common/NeoForgePatchouliConfig.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package vazkii.patchouli.neoforge.common;
22

33
import net.minecraft.resources.ResourceLocation;
4-
import net.neoforged.fml.ModLoadingContext;
4+
import net.neoforged.fml.ModContainer;
55
import net.neoforged.fml.config.ModConfig;
66
import net.neoforged.neoforge.common.ModConfigSpec;
77

@@ -55,8 +55,8 @@ public class NeoForgePatchouliConfig {
5555
SPEC = builder.build();
5656
}
5757

58-
public static void setup() {
59-
ModLoadingContext.get().registerConfig(ModConfig.Type.CLIENT, SPEC);
58+
public static void setup(ModContainer container) {
59+
container.registerConfig(ModConfig.Type.CLIENT, SPEC);
6060
PatchouliConfig.set(new PatchouliConfigAccess() {
6161
@Override
6262
public boolean disableAdvancementLocking() {

0 commit comments

Comments
 (0)