Skip to content

Commit 4151762

Browse files
committed
rework sth
1 parent fa09d30 commit 4151762

File tree

12 files changed

+139
-27
lines changed

12 files changed

+139
-27
lines changed

build.gradle

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,9 @@ subprojects {
3333
dependencies {
3434
minecraft "net.minecraft:minecraft:$rootProject.minecraft_version"
3535
mappings loom.officialMojangMappings()
36+
37+
implementation("com.google.auto.service:auto-service-annotations:1.1.1")
38+
annotationProcessor("com.google.auto.service:auto-service:1.1.1")
3639
}
3740

3841
java {
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package org.thinkingstudio.initialization;
2+
3+
import org.thinkingstudio.initialization.utils.ModEnv;
4+
import org.thinkingstudio.initialization.utils.ServiceHelper;
5+
6+
public interface ModPlatform {
7+
ModPlatform INSTANCE = ServiceHelper.loadService(ModPlatform.class);
8+
9+
ModEnv getEnvironment();
10+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package org.thinkingstudio.initialization.utils;
2+
3+
import net.fabricmc.api.EnvType;
4+
5+
public enum ModEnv {
6+
CLIENT,
7+
SERVER;
8+
9+
public static ModEnv fromPlatform(Object type) {
10+
return type == EnvType.CLIENT ? CLIENT : type == EnvType.SERVER ? SERVER : null;
11+
}
12+
13+
public EnvType toPlatform() {
14+
return this == CLIENT ? EnvType.CLIENT : EnvType.SERVER;
15+
}
16+
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package org.thinkingstudio.initialization.utils;
2+
3+
import net.fabricmc.api.EnvType;
4+
import org.thinkingstudio.initialization.ModPlatform;
5+
6+
import java.util.Optional;
7+
import java.util.function.Supplier;
8+
9+
public final class ModEnvExecutor {
10+
public static void runInEnv(EnvType type, Supplier<Runnable> runnableSupplier) {
11+
runInEnv(ModEnv.fromPlatform(type), runnableSupplier);
12+
}
13+
14+
public static void runInEnv(ModEnv type, Supplier<Runnable> runnableSupplier) {
15+
if (ModPlatform.INSTANCE.getEnvironment() == type) {
16+
runnableSupplier.get().run();
17+
}
18+
}
19+
20+
public static <T> Optional<T> getInEnv(EnvType type, Supplier<Supplier<T>> runnableSupplier) {
21+
return getInEnv(ModEnv.fromPlatform(type), runnableSupplier);
22+
}
23+
24+
public static <T> Optional<T> getInEnv(ModEnv type, Supplier<Supplier<T>> runnableSupplier) {
25+
if (ModPlatform.INSTANCE.getEnvironment() == type) {
26+
return Optional.ofNullable(runnableSupplier.get().get());
27+
}
28+
29+
return Optional.empty();
30+
}
31+
32+
public static <T> T getEnvSpecific(Supplier<Supplier<T>> client, Supplier<Supplier<T>> server) {
33+
if (ModPlatform.INSTANCE.getEnvironment() == ModEnv.CLIENT) {
34+
return client.get().get();
35+
} else {
36+
return server.get().get();
37+
}
38+
}
39+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package org.thinkingstudio.initialization.utils;
2+
3+
import java.util.ServiceLoader;
4+
5+
public class ServiceHelper {
6+
public static <T> T loadService(final Class<T> clazz) {
7+
return ServiceLoader.load(clazz).findFirst().orElseThrow(() -> new AssertionError("No impl found for " + clazz.getPackageName()));
8+
}
9+
}

fabric/src/main/java/org/thinkingstudio/initialization/fabric/InitializationFabric.java

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,20 @@
55
import org.thinkingstudio.initialization.api.ClientModInitializer;
66
import org.thinkingstudio.initialization.api.DedicatedServerModInitializer;
77
import org.thinkingstudio.initialization.api.ModInitializer;
8+
import org.thinkingstudio.initialization.utils.ModEnv;
9+
import org.thinkingstudio.initialization.utils.ModEnvExecutor;
810

9-
public class InitializationFabric {
11+
public class InitializationFabric implements net.fabricmc.api.ModInitializer {
12+
13+
@Override
1014
public void onInitialize() {
1115
EntryPointManager.getEntryPoints(EntrypointContexts.MAIN_INITIALIZER_KEY, ModInitializer.class).forEach(ModInitializer::onInitialize);
12-
}
13-
14-
public void onInitializeClient() {
15-
EntryPointManager.getEntryPoints(EntrypointContexts.CLIENT_INITIALIZER_KEY, ClientModInitializer.class).forEach(ClientModInitializer::onInitializeClient);
16-
}
1716

18-
public void onInitializeServer() {
19-
EntryPointManager.getEntryPoints(EntrypointContexts.SERVER_INITIALIZER_KEY, DedicatedServerModInitializer.class).forEach(DedicatedServerModInitializer::onInitializeServer);
17+
ModEnvExecutor.runInEnv(ModEnv.CLIENT, () -> () -> {
18+
EntryPointManager.getEntryPoints(EntrypointContexts.CLIENT_INITIALIZER_KEY, ClientModInitializer.class).forEach(ClientModInitializer::onInitializeClient);
19+
});
20+
ModEnvExecutor.runInEnv(ModEnv.SERVER, () -> () -> {
21+
EntryPointManager.getEntryPoints(EntrypointContexts.SERVER_INITIALIZER_KEY, DedicatedServerModInitializer.class).forEach(DedicatedServerModInitializer::onInitializeServer);
22+
});
2023
}
2124
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package org.thinkingstudio.initialization.fabric;
2+
3+
import com.google.auto.service.AutoService;
4+
import net.fabricmc.loader.api.FabricLoader;
5+
import org.thinkingstudio.initialization.ModPlatform;
6+
import org.thinkingstudio.initialization.utils.ModEnv;
7+
8+
@AutoService(ModPlatform.class)
9+
public class ModPlatformImpl implements ModPlatform {
10+
@Override
11+
public ModEnv getEnvironment() {
12+
return ModEnv.fromPlatform(FabricLoader.getInstance().getEnvironmentType());
13+
}
14+
}

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

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,7 @@
1515
"environment": "*",
1616
"entrypoints": {
1717
"main": [
18-
"org.thinkingstudio.initialization.fabric.InitializationFabric::onInitialize"
19-
],
20-
"client": [
21-
"org.thinkingstudio.initialization.fabric.InitializationFabric::onInitializeClient"
22-
],
23-
"server": [
24-
"org.thinkingstudio.initialization.fabric.InitializationFabric::onInitializeServer"
18+
"org.thinkingstudio.initialization.fabric.InitializationFabric"
2519
]
2620
},
2721
"depends": {

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
org.gradle.jvmargs=-Xmx2G
33
org.gradle.parallel=true
44
# Mod properties
5-
mod_version=0.1.0
5+
mod_version=0.1.1
66
maven_group=org.thinkingstudio
77
archives_name=initialization
88
enabled_platforms=fabric,neoforge
Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,34 @@
11
package org.thinkingstudio.initialization.neoforge;
22

33
import com.iafenvoy.integration.entrypoint.EntryPointManager;
4-
import net.neoforged.fml.loading.FMLLoader;
4+
import net.neoforged.bus.api.IEventBus;
5+
import net.neoforged.fml.event.lifecycle.FMLClientSetupEvent;
6+
import net.neoforged.fml.event.lifecycle.FMLCommonSetupEvent;
7+
import net.neoforged.fml.event.lifecycle.FMLDedicatedServerSetupEvent;
58
import org.thinkingstudio.initialization.Initialization;
69
import net.neoforged.fml.common.Mod;
710
import org.thinkingstudio.initialization.api.ClientModInitializer;
811
import org.thinkingstudio.initialization.api.DedicatedServerModInitializer;
912
import org.thinkingstudio.initialization.EntrypointContexts;
1013
import org.thinkingstudio.initialization.api.ModInitializer;
14+
import org.thinkingstudio.initialization.utils.ModEnv;
15+
import org.thinkingstudio.initialization.utils.ModEnvExecutor;
1116

1217
@Mod(Initialization.MOD_ID)
1318
public final class InitializationNeoForge {
14-
public InitializationNeoForge() {
15-
EntryPointManager.getEntryPoints(EntrypointContexts.MAIN_INITIALIZER_KEY, ModInitializer.class).forEach(ModInitializer::onInitialize);
16-
if (FMLLoader.getDist().isClient()) {
17-
EntryPointManager.getEntryPoints(EntrypointContexts.CLIENT_INITIALIZER_KEY, ClientModInitializer.class).forEach(ClientModInitializer::onInitializeClient);
18-
} else if (FMLLoader.getDist().isDedicatedServer()) {
19-
EntryPointManager.getEntryPoints(EntrypointContexts.SERVER_INITIALIZER_KEY, DedicatedServerModInitializer.class).forEach(DedicatedServerModInitializer::onInitializeServer);
20-
}
19+
public InitializationNeoForge(IEventBus modEventBus) {
20+
EntryPointManager.getEntryPoints(EntrypointContexts.MAIN_INITIALIZER_KEY, ModInitializer.class).forEach(modInitializer -> {
21+
modEventBus.addListener(FMLCommonSetupEvent.class, event -> event.enqueueWork(modInitializer::onInitialize));
22+
});
23+
ModEnvExecutor.runInEnv(ModEnv.CLIENT, () -> () -> {
24+
EntryPointManager.getEntryPoints(EntrypointContexts.CLIENT_INITIALIZER_KEY, ClientModInitializer.class).forEach(clientModInitializer -> {
25+
modEventBus.addListener(FMLClientSetupEvent.class, event -> event.enqueueWork(clientModInitializer::onInitializeClient));
26+
});
27+
});
28+
ModEnvExecutor.runInEnv(ModEnv.SERVER, () -> () -> {
29+
EntryPointManager.getEntryPoints(EntrypointContexts.SERVER_INITIALIZER_KEY, DedicatedServerModInitializer.class).forEach(dedicatedServerModInitializer -> {
30+
modEventBus.addListener(FMLDedicatedServerSetupEvent.class, event -> event.enqueueWork(dedicatedServerModInitializer::onInitializeServer));
31+
});
32+
});
2133
}
2234
}

0 commit comments

Comments
 (0)