Skip to content

Commit 244c62d

Browse files
Merge pull request #51 from OrnitheMC/minecraftserver-instance-api
[Lifecycle Events] add Minecraftserver instance api
2 parents 8bcae52 + 677ee3d commit 244c62d

File tree

33 files changed

+673
-123
lines changed

33 files changed

+673
-123
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package net.ornithemc.osl.lifecycle.api.server;
2+
3+
import net.minecraft.server.MinecraftServer;
4+
5+
import net.ornithemc.osl.lifecycle.impl.server.MinecraftServerAccess;
6+
7+
/**
8+
* A wrapper class for getting the {@linkplain MinecraftServer} instance.
9+
*/
10+
public class MinecraftServerInstance {
11+
12+
/**
13+
* Retrieves the current Minecraft server instance,
14+
* or throws an exception.
15+
*
16+
* @return the current Minecraft server instance
17+
*/
18+
public static MinecraftServer get() {
19+
return MinecraftServerAccess.getInstance();
20+
}
21+
}

libraries/lifecycle-events/lifecycle-events-mc12w01a-mc12w17a/src/main/java/net/ornithemc/osl/lifecycle/impl/mixin/server/MinecraftServerMixin.java

Lines changed: 24 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,12 @@
1010
import net.minecraft.server.MinecraftServer;
1111

1212
import net.ornithemc.osl.lifecycle.api.server.MinecraftServerEvents;
13+
import net.ornithemc.osl.lifecycle.impl.server.MinecraftServerAccess;
1314

1415
@Mixin(MinecraftServer.class)
1516
public class MinecraftServerMixin {
1617

17-
@Unique private boolean osl$lifecycle$stopped;
18+
@Unique private int osl$lifecycle$shutdownDepth;
1819

1920
@Inject(
2021
method = "run",
@@ -23,7 +24,8 @@ public class MinecraftServerMixin {
2324
)
2425
)
2526
private void osl$lifecycle$start(CallbackInfo ci) {
26-
MinecraftServerEvents.START.invoker().accept((MinecraftServer)(Object)this);
27+
MinecraftServerAccess.INSTANCE = (MinecraftServer)(Object)this;
28+
MinecraftServerEvents.START.invoker().accept(MinecraftServerAccess.INSTANCE);
2729
}
2830

2931
@Inject(
@@ -35,7 +37,7 @@ public class MinecraftServerMixin {
3537
)
3638
)
3739
private void osl$lifecycle$ready(CallbackInfo ci) {
38-
MinecraftServerEvents.READY.invoker().accept((MinecraftServer)(Object)this);
40+
MinecraftServerEvents.READY.invoker().accept(MinecraftServerAccess.INSTANCE);
3941
}
4042

4143
@Inject(
@@ -45,9 +47,20 @@ public class MinecraftServerMixin {
4547
)
4648
)
4749
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);
50+
if (osl$lifecycle$shutdownDepth++ == 0) {
51+
MinecraftServerEvents.STOP.invoker().accept(MinecraftServerAccess.INSTANCE);
52+
}
53+
}
54+
55+
@Inject(
56+
method = "shutdown",
57+
at = @At(
58+
value = "HEAD"
59+
)
60+
)
61+
private void osl$lifecycle$stopped(CallbackInfo ci) {
62+
if (--osl$lifecycle$shutdownDepth == 0) {
63+
MinecraftServerAccess.INSTANCE = null;
5164
}
5265
}
5366

@@ -58,7 +71,7 @@ public class MinecraftServerMixin {
5871
)
5972
)
6073
private void osl$lifecycle$startTick(CallbackInfo ci) {
61-
MinecraftServerEvents.TICK_START.invoker().accept((MinecraftServer)(Object)this);
74+
MinecraftServerEvents.TICK_START.invoker().accept(MinecraftServerAccess.INSTANCE);
6275
}
6376

6477
@Inject(
@@ -68,7 +81,7 @@ public class MinecraftServerMixin {
6881
)
6982
)
7083
private void osl$lifecycle$endTick(CallbackInfo ci) {
71-
MinecraftServerEvents.TICK_END.invoker().accept((MinecraftServer)(Object)this);
84+
MinecraftServerEvents.TICK_END.invoker().accept(MinecraftServerAccess.INSTANCE);
7285
}
7386

7487
@Inject(
@@ -78,7 +91,7 @@ public class MinecraftServerMixin {
7891
)
7992
)
8093
private void osl$lifecycle$loadWorld(CallbackInfo ci) {
81-
MinecraftServerEvents.LOAD_WORLD.invoker().accept((MinecraftServer)(Object)this);
94+
MinecraftServerEvents.LOAD_WORLD.invoker().accept(MinecraftServerAccess.INSTANCE);
8295
}
8396

8497
@Inject(
@@ -91,7 +104,7 @@ public class MinecraftServerMixin {
91104
)
92105
)
93106
private void osl$lifecycle$prepareWorld(CallbackInfo ci) {
94-
MinecraftServerEvents.PREPARE_WORLD.invoker().accept((MinecraftServer)(Object)this);
107+
MinecraftServerEvents.PREPARE_WORLD.invoker().accept(MinecraftServerAccess.INSTANCE);
95108
}
96109

97110
@Inject(
@@ -101,6 +114,6 @@ public class MinecraftServerMixin {
101114
)
102115
)
103116
private void osl$lifecycle$readyWorld(CallbackInfo ci) {
104-
MinecraftServerEvents.READY_WORLD.invoker().accept((MinecraftServer)(Object)this);
117+
MinecraftServerEvents.READY_WORLD.invoker().accept(MinecraftServerAccess.INSTANCE);
105118
}
106119
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package net.ornithemc.osl.lifecycle.impl.server;
2+
3+
import net.minecraft.server.MinecraftServer;
4+
5+
public class MinecraftServerAccess {
6+
7+
public static MinecraftServer INSTANCE;
8+
9+
public static MinecraftServer getInstance() {
10+
if (INSTANCE == null) {
11+
throw new IllegalStateException("no MinecraftServer instance available right now");
12+
}
13+
14+
return INSTANCE;
15+
}
16+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package net.ornithemc.osl.lifecycle.api.server;
2+
3+
import net.minecraft.server.MinecraftServer;
4+
5+
import net.ornithemc.osl.lifecycle.impl.server.MinecraftServerAccess;
6+
7+
/**
8+
* A wrapper class for getting the {@linkplain MinecraftServer} instance.
9+
*/
10+
public class MinecraftServerInstance {
11+
12+
/**
13+
* Retrieves the current Minecraft server instance,
14+
* or throws an exception.
15+
*
16+
* @return the current Minecraft server instance
17+
*/
18+
public static MinecraftServer get() {
19+
return MinecraftServerAccess.getInstance();
20+
}
21+
}

libraries/lifecycle-events/lifecycle-events-mc12w18a-mc12w19a/src/main/java/net/ornithemc/osl/lifecycle/impl/mixin/common/MinecraftServerMixin.java

Lines changed: 24 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,12 @@
1010
import net.minecraft.server.MinecraftServer;
1111

1212
import net.ornithemc.osl.lifecycle.api.server.MinecraftServerEvents;
13+
import net.ornithemc.osl.lifecycle.impl.server.MinecraftServerAccess;
1314

1415
@Mixin(MinecraftServer.class)
1516
public class MinecraftServerMixin {
1617

17-
@Unique private boolean osl$lifecycle$stopped;
18+
@Unique private int osl$lifecycle$shutdownDepth;
1819

1920
@Inject(
2021
method = "run",
@@ -23,7 +24,8 @@ public class MinecraftServerMixin {
2324
)
2425
)
2526
private void osl$lifecycle$start(CallbackInfo ci) {
26-
MinecraftServerEvents.START.invoker().accept((MinecraftServer)(Object)this);
27+
MinecraftServerAccess.INSTANCE = (MinecraftServer)(Object)this;
28+
MinecraftServerEvents.START.invoker().accept(MinecraftServerAccess.INSTANCE);
2729
}
2830

2931
@Inject(
@@ -35,7 +37,7 @@ public class MinecraftServerMixin {
3537
)
3638
)
3739
private void osl$lifecycle$ready(CallbackInfo ci) {
38-
MinecraftServerEvents.READY.invoker().accept((MinecraftServer)(Object)this);
40+
MinecraftServerEvents.READY.invoker().accept(MinecraftServerAccess.INSTANCE);
3941
}
4042

4143
@Inject(
@@ -45,9 +47,20 @@ public class MinecraftServerMixin {
4547
)
4648
)
4749
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);
50+
if (osl$lifecycle$shutdownDepth++ == 0) {
51+
MinecraftServerEvents.STOP.invoker().accept(MinecraftServerAccess.INSTANCE);
52+
}
53+
}
54+
55+
@Inject(
56+
method = "shutdown",
57+
at = @At(
58+
value = "HEAD"
59+
)
60+
)
61+
private void osl$lifecycle$stopped(CallbackInfo ci) {
62+
if (--osl$lifecycle$shutdownDepth == 0) {
63+
MinecraftServerAccess.INSTANCE = null;
5164
}
5265
}
5366

@@ -58,7 +71,7 @@ public class MinecraftServerMixin {
5871
)
5972
)
6073
private void osl$lifecycle$startTick(CallbackInfo ci) {
61-
MinecraftServerEvents.TICK_START.invoker().accept((MinecraftServer)(Object)this);
74+
MinecraftServerEvents.TICK_START.invoker().accept(MinecraftServerAccess.INSTANCE);
6275
}
6376

6477
@Inject(
@@ -68,7 +81,7 @@ public class MinecraftServerMixin {
6881
)
6982
)
7083
private void osl$lifecycle$endTick(CallbackInfo ci) {
71-
MinecraftServerEvents.TICK_END.invoker().accept((MinecraftServer)(Object)this);
84+
MinecraftServerEvents.TICK_END.invoker().accept(MinecraftServerAccess.INSTANCE);
7285
}
7386

7487
@Inject(
@@ -78,7 +91,7 @@ public class MinecraftServerMixin {
7891
)
7992
)
8093
private void osl$lifecycle$loadWorld(CallbackInfo ci) {
81-
MinecraftServerEvents.LOAD_WORLD.invoker().accept((MinecraftServer)(Object)this);
94+
MinecraftServerEvents.LOAD_WORLD.invoker().accept(MinecraftServerAccess.INSTANCE);
8295
}
8396

8497
@Inject(
@@ -91,7 +104,7 @@ public class MinecraftServerMixin {
91104
)
92105
)
93106
private void osl$lifecycle$prepareWorld(CallbackInfo ci) {
94-
MinecraftServerEvents.PREPARE_WORLD.invoker().accept((MinecraftServer)(Object)this);
107+
MinecraftServerEvents.PREPARE_WORLD.invoker().accept(MinecraftServerAccess.INSTANCE);
95108
}
96109

97110
@Inject(
@@ -101,6 +114,6 @@ public class MinecraftServerMixin {
101114
)
102115
)
103116
private void osl$lifecycle$readyWorld(CallbackInfo ci) {
104-
MinecraftServerEvents.READY_WORLD.invoker().accept((MinecraftServer)(Object)this);
117+
MinecraftServerEvents.READY_WORLD.invoker().accept(MinecraftServerAccess.INSTANCE);
105118
}
106119
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package net.ornithemc.osl.lifecycle.impl.server;
2+
3+
import net.minecraft.server.MinecraftServer;
4+
5+
public class MinecraftServerAccess {
6+
7+
public static MinecraftServer INSTANCE;
8+
9+
public static MinecraftServer getInstance() {
10+
if (INSTANCE == null) {
11+
throw new IllegalStateException("no MinecraftServer instance available right now");
12+
}
13+
14+
return INSTANCE;
15+
}
16+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package net.ornithemc.osl.lifecycle.api.server;
2+
3+
import net.minecraft.server.MinecraftServer;
4+
5+
import net.ornithemc.osl.lifecycle.impl.server.MinecraftServerAccess;
6+
7+
/**
8+
* A wrapper class for getting the {@linkplain MinecraftServer} instance.
9+
*/
10+
public class MinecraftServerInstance {
11+
12+
/**
13+
* Retrieves the current Minecraft server instance,
14+
* or throws an exception.
15+
*
16+
* @return the current Minecraft server instance
17+
*/
18+
public static MinecraftServer get() {
19+
return MinecraftServerAccess.getInstance();
20+
}
21+
}

0 commit comments

Comments
 (0)