Skip to content
This repository was archived by the owner on Jun 3, 2024. It is now read-only.

Commit f3794fe

Browse files
committed
Cleanups related to sided events, fix server potential crash
1 parent fd38a84 commit f3794fe

File tree

3 files changed

+30
-23
lines changed

3 files changed

+30
-23
lines changed

patchwork-dispatcher/src/main/java/com/patchworkmc/impl/Patchwork.java

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,9 @@
2222
import java.util.HashMap;
2323
import java.util.Map;
2424
import java.util.function.Function;
25+
import java.util.function.Supplier;
2526

27+
import net.minecraftforge.api.distmarker.Dist;
2628
import net.minecraftforge.common.MinecraftForge;
2729
import net.minecraftforge.eventbus.api.Event;
2830
import net.minecraftforge.fml.DistExecutor;
@@ -41,6 +43,7 @@
4143
import org.apache.logging.log4j.Logger;
4244

4345
import net.minecraft.client.MinecraftClient;
46+
import net.minecraft.server.dedicated.DedicatedServer;
4447

4548
import net.fabricmc.api.ModInitializer;
4649
import net.fabricmc.loader.api.FabricLoader;
@@ -90,19 +93,18 @@ public void onInitialize() {
9093

9194
RegistryEventDispatcher.dispatchRegistryEvents(event -> dispatch(mods, event));
9295
dispatch(mods, FMLCommonSetupEvent::new);
93-
DistExecutor.runForDist(
94-
() -> () -> {
95-
dispatch(mods, container -> new FMLClientSetupEvent(MinecraftClient::getInstance, container));
96-
97-
return "void isn't a valid return value...";
98-
},
99-
() -> () -> {
100-
// TODO: Get the server, the LogicalSidedProvider that's needed for this to be done easily will be merged in the networking PR
101-
dispatch(mods, container -> new FMLDedicatedServerSetupEvent(null, container));
102-
103-
return "void isn't a valid return value...";
104-
}
105-
);
96+
97+
DistExecutor.runWhenOn(Dist.CLIENT, () -> () -> {
98+
dispatch(mods, container -> new FMLClientSetupEvent(MinecraftClient::getInstance, container));
99+
});
100+
101+
DistExecutor.runWhenOn(Dist.DEDICATED_SERVER, () -> () -> {
102+
Object gameInstance = FabricLoader.getInstance().getGameInstance();
103+
Supplier<DedicatedServer> supplier = () -> (DedicatedServer) gameInstance;
104+
105+
dispatch(mods, container -> new FMLDedicatedServerSetupEvent(supplier, container));
106+
});
107+
106108
dispatch(mods, InterModEnqueueEvent::new);
107109
dispatch(mods, InterModProcessEvent::new);
108110
dispatch(mods, FMLLoadCompleteEvent::new);

patchwork-fml/src/main/java/com/patchworkmc/impl/fml/PatchworkFML.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,16 +19,27 @@
1919

2020
package com.patchworkmc.impl.fml;
2121

22+
import net.minecraftforge.api.distmarker.Dist;
23+
import net.minecraftforge.fml.DistExecutor;
2224
import net.minecraftforge.fml.LogicalSidedProvider;
2325

26+
import net.minecraft.client.MinecraftClient;
27+
import net.minecraft.server.MinecraftServer;
28+
2429
import net.fabricmc.api.ModInitializer;
2530
import net.fabricmc.fabric.api.event.server.ServerStartCallback;
2631
import net.fabricmc.fabric.api.event.server.ServerStopCallback;
32+
import net.fabricmc.loader.api.FabricLoader;
2733

2834
public class PatchworkFML implements ModInitializer {
2935
@Override
3036
public void onInitialize() {
3137
ServerStartCallback.EVENT.register(server -> LogicalSidedProvider.setServer(() -> server));
3238
ServerStopCallback.EVENT.register(server -> LogicalSidedProvider.setServer(null));
39+
40+
Object instance = FabricLoader.getInstance().getGameInstance();
41+
42+
DistExecutor.runWhenOn(Dist.CLIENT, () -> () -> LogicalSidedProvider.setClient(() -> (MinecraftClient) instance));
43+
DistExecutor.runWhenOn(Dist.DEDICATED_SERVER, () -> () -> LogicalSidedProvider.setServer(() -> (MinecraftServer) instance));
3344
}
3445
}

patchwork-fml/src/main/java/net/minecraftforge/fml/LogicalSidedProvider.java

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,6 @@
2727
import net.minecraft.server.MinecraftServer;
2828
import net.minecraft.world.World;
2929

30-
import net.fabricmc.api.EnvType;
31-
import net.fabricmc.loader.api.FabricLoader;
32-
3330
import com.patchworkmc.impl.fml.PatchworkFML;
3431

3532
public enum LogicalSidedProvider {
@@ -43,13 +40,6 @@ public enum LogicalSidedProvider {
4340
private static Supplier<MinecraftClient> client;
4441
private static Supplier<MinecraftServer> server;
4542

46-
// Patchwork: since the client never changes we can just set it directly
47-
static {
48-
if (FabricLoader.getInstance().getEnvironmentType().equals(EnvType.CLIENT)) {
49-
client = () -> (MinecraftClient) FabricLoader.getInstance().getGameInstance();
50-
}
51-
}
52-
5343
private final Function<Supplier<MinecraftClient>, ?> clientSide;
5444
private final Function<Supplier<MinecraftServer>, ?> serverSide;
5545

@@ -58,6 +48,10 @@ public enum LogicalSidedProvider {
5848
this.serverSide = serverSide;
5949
}
6050

51+
public static void setClient(Supplier<MinecraftClient> client) {
52+
LogicalSidedProvider.client = client;
53+
}
54+
6155
/**
6256
* Called by callbacks registered in {@link PatchworkFML}.
6357
*/

0 commit comments

Comments
 (0)