Skip to content

Commit 80e5038

Browse files
committed
[lifecycle events] fix prepare world hook for real this time
1 parent 724dce8 commit 80e5038

File tree

17 files changed

+365
-5
lines changed

17 files changed

+365
-5
lines changed

libraries/lifecycle-events/lifecycle-events-mcserver-a0.1.0-mcserver-a0.2.8/build.gradle renamed to libraries/lifecycle-events/lifecycle-events-mcserver-a0.1.0-mcserver-a0.1.4/build.gradle

File renamed without changes.
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
environment = server
2+
min_mc_version = server-a0.1.0
3+
max_mc_version = server-a0.1.4
4+
mc_version_range = >=1.0.0-alpha.1.0 <=1.0.0-alpha.1.4
5+
6+
minecraft_version = server-a0.1.4
7+
feather_build = 1
8+
nests_build = 2

libraries/lifecycle-events/lifecycle-events-mcserver-a0.1.0-mcserver-a0.2.8/src/main/java/net/ornithemc/osl/lifecycle/api/WorldEvents.java renamed to libraries/lifecycle-events/lifecycle-events-mcserver-a0.1.0-mcserver-a0.1.4/src/main/java/net/ornithemc/osl/lifecycle/api/WorldEvents.java

File renamed without changes.

libraries/lifecycle-events/lifecycle-events-mcserver-a0.1.0-mcserver-a0.2.8/src/main/java/net/ornithemc/osl/lifecycle/api/server/MinecraftServerEvents.java renamed to libraries/lifecycle-events/lifecycle-events-mcserver-a0.1.0-mcserver-a0.1.4/src/main/java/net/ornithemc/osl/lifecycle/api/server/MinecraftServerEvents.java

File renamed without changes.

libraries/lifecycle-events/lifecycle-events-mcserver-a0.1.0-mcserver-a0.2.8/src/main/java/net/ornithemc/osl/lifecycle/impl/mixin/common/WorldMixin.java renamed to libraries/lifecycle-events/lifecycle-events-mcserver-a0.1.0-mcserver-a0.1.4/src/main/java/net/ornithemc/osl/lifecycle/impl/mixin/common/WorldMixin.java

File renamed without changes.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
package net.ornithemc.osl.lifecycle.impl.mixin.server;
2+
3+
import org.spongepowered.asm.mixin.Mixin;
4+
import org.spongepowered.asm.mixin.Unique;
5+
import org.spongepowered.asm.mixin.injection.At;
6+
import org.spongepowered.asm.mixin.injection.At.Shift;
7+
import org.spongepowered.asm.mixin.injection.Inject;
8+
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
9+
10+
import net.minecraft.server.MinecraftServer;
11+
12+
import net.ornithemc.osl.lifecycle.api.server.MinecraftServerEvents;
13+
14+
@Mixin(MinecraftServer.class)
15+
public class MinecraftServerMixin {
16+
17+
@Unique private boolean osl$lifecycle$stopped;
18+
19+
@Inject(
20+
method = "run",
21+
at = @At(
22+
value = "HEAD"
23+
)
24+
)
25+
private void osl$lifecycle$start(CallbackInfo ci) {
26+
MinecraftServerEvents.START.invoker().accept((MinecraftServer)(Object)this);
27+
}
28+
29+
@Inject(
30+
method = "run",
31+
at = @At(
32+
value = "INVOKE",
33+
shift = Shift.AFTER,
34+
target = "Lnet/minecraft/server/MinecraftServer;init()Z"
35+
)
36+
)
37+
private void osl$lifecycle$ready(CallbackInfo ci) {
38+
MinecraftServerEvents.READY.invoker().accept((MinecraftServer)(Object)this);
39+
}
40+
41+
@Inject(
42+
method = "shutdown",
43+
at = @At(
44+
value = "HEAD"
45+
)
46+
)
47+
private void osl$lifecycle$stop(CallbackInfo ci) {
48+
if (!osl$lifecycle$stopped) {
49+
osl$lifecycle$stopped = true;
50+
MinecraftServerEvents.STOP.invoker().accept((MinecraftServer)(Object)this);
51+
}
52+
}
53+
54+
@Inject(
55+
method = "tick",
56+
at = @At(
57+
value = "HEAD"
58+
)
59+
)
60+
private void osl$lifecycle$startTick(CallbackInfo ci) {
61+
MinecraftServerEvents.TICK_START.invoker().accept((MinecraftServer)(Object)this);
62+
}
63+
64+
@Inject(
65+
method = "tick",
66+
at = @At(
67+
value = "TAIL"
68+
)
69+
)
70+
private void osl$lifecycle$endTick(CallbackInfo ci) {
71+
MinecraftServerEvents.TICK_END.invoker().accept((MinecraftServer)(Object)this);
72+
}
73+
74+
@Inject(
75+
method = "loadWorld",
76+
at = @At(
77+
value = "HEAD"
78+
)
79+
)
80+
private void osl$lifecycle$loadWorld(CallbackInfo ci) {
81+
MinecraftServerEvents.LOAD_WORLD.invoker().accept((MinecraftServer)(Object)this);
82+
}
83+
84+
@Inject(
85+
method = "loadWorld",
86+
at = @At(
87+
value = "INVOKE",
88+
shift = Shift.AFTER,
89+
target = "Lnet/minecraft/server/world/ServerWorld;addEventListener(Lnet/minecraft/world/WorldEventListener;)V"
90+
)
91+
)
92+
private void osl$lifecycle$prepareWorld(CallbackInfo ci) {
93+
MinecraftServerEvents.PREPARE_WORLD.invoker().accept((MinecraftServer)(Object)this);
94+
}
95+
96+
@Inject(
97+
method = "loadWorld",
98+
at = @At(
99+
value = "TAIL"
100+
)
101+
)
102+
private void osl$lifecycle$readyWorld(CallbackInfo ci) {
103+
MinecraftServerEvents.READY_WORLD.invoker().accept((MinecraftServer)(Object)this);
104+
}
105+
}

libraries/lifecycle-events/lifecycle-events-mcserver-a0.1.0-mcserver-a0.2.8/src/main/resources/osl.lifecycle-events.mixins.json renamed to libraries/lifecycle-events/lifecycle-events-mcserver-a0.1.0-mcserver-a0.1.4/src/main/resources/osl.lifecycle-events.mixins.json

File renamed without changes.
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
setUpModule(project)

libraries/lifecycle-events/lifecycle-events-mcserver-a0.1.0-mcserver-a0.2.8/gradle.properties renamed to libraries/lifecycle-events/lifecycle-events-mcserver-a0.2.0-mcserver-a0.2.8/gradle.properties

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
environment = server
2-
min_mc_version = server-a0.1.0
2+
min_mc_version = server-a0.2.0
33
max_mc_version = server-a0.2.8
4-
mc_version_range = >=1.0.0-alpha.1.0 <=1.0.0-alpha.2.8
4+
mc_version_range = >=1.0.0-alpha.2.0 <=1.0.0-alpha.2.8
55

66
minecraft_version = server-a0.2.8
77
feather_build = 1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package net.ornithemc.osl.lifecycle.api;
2+
3+
import java.util.function.Consumer;
4+
5+
import net.minecraft.world.World;
6+
7+
import net.ornithemc.osl.core.api.events.Event;
8+
9+
/**
10+
* Events to track the lifecycle of a Minecraft world.
11+
*/
12+
public class WorldEvents {
13+
14+
/**
15+
* This event is invoked each tick, before the world ticks.
16+
*
17+
* <p>
18+
* Callbacks to this event should be registered in your mod's entrypoint,
19+
* and can be done as follows:
20+
*
21+
* <pre>
22+
* {@code
23+
* WorldEvents.TICK_START.register(world -> {
24+
* ...
25+
* });
26+
* }
27+
* </pre>
28+
*/
29+
public static final Event<Consumer<World>> TICK_START = Event.consumer();
30+
/**
31+
* This event is invoked each tick, after the world ticks.
32+
*
33+
* <p>
34+
* Callbacks to this event should be registered in your mod's entrypoint,
35+
* and can be done as follows:
36+
*
37+
* <pre>
38+
* {@code
39+
* WorldEvents.TICK_START.register(world -> {
40+
* ...
41+
* });
42+
* }
43+
* </pre>
44+
*/
45+
public static final Event<Consumer<World>> TICK_END = Event.consumer();
46+
47+
}

0 commit comments

Comments
 (0)