Skip to content

Commit ddc52f9

Browse files
Merge pull request #46 from OrnitheMC/minecraft-instance-api
[Lifecycle Events] add Minecraft instance API
2 parents 208f214 + 841655b commit ddc52f9

File tree

31 files changed

+546
-67
lines changed

31 files changed

+546
-67
lines changed

libraries/config/config-mcb1.3-1750-mcb1.7.3/src/main/java/net/ornithemc/osl/config/impl/mixin/client/MinecraftMixin.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import net.minecraft.world.World;
1313

1414
import net.ornithemc.osl.config.impl.ConfigInitializer;
15+
import net.ornithemc.osl.lifecycle.impl.client.MinecraftAccess;
1516

1617
@Mixin(Minecraft.class)
1718
public class MinecraftMixin {
@@ -26,7 +27,7 @@ public class MinecraftMixin {
2627
)
2728
private void osl$config$closeWorld(World world, String message, PlayerEntity player, CallbackInfo ci) {
2829
if (this.world != null && !this.world.isMultiplayer && world == null && osl$config$startGameDepth == 0) {
29-
ConfigInitializer.CLOSE_WORLD.invoker().accept((Minecraft)(Object)this);
30+
ConfigInitializer.CLOSE_WORLD.invoker().accept(MinecraftAccess.INSTANCE);
3031
}
3132
}
3233

@@ -42,7 +43,7 @@ public class MinecraftMixin {
4243
if (osl$config$startGameDepth++ == 0) {
4344
// The startGame method recursively calls itself when converting from
4445
// older world formats, but we only want to capture the initial call.
45-
ConfigInitializer.START_GAME.invoker().accept((Minecraft)(Object)this, saveName);
46+
ConfigInitializer.START_GAME.invoker().accept(MinecraftAccess.INSTANCE, saveName);
4647
}
4748
}
4849

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package net.ornithemc.osl.lifecycle.api.client;
2+
3+
import net.minecraft.client.Minecraft;
4+
5+
import net.ornithemc.osl.lifecycle.impl.client.MinecraftAccess;
6+
7+
/**
8+
* A wrapper class for getting the {@linkplain Minecraft} instance.
9+
*/
10+
public class MinecraftInstance {
11+
12+
/**
13+
* Retrieves the current Minecraft game instance,
14+
* or throws an exception.
15+
*
16+
* @return the current Minecraft game instance
17+
*/
18+
public static Minecraft get() {
19+
return MinecraftAccess.getInstance();
20+
}
21+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package net.ornithemc.osl.lifecycle.impl.client;
2+
3+
import net.minecraft.client.Minecraft;
4+
5+
public class MinecraftAccess {
6+
7+
public static Minecraft INSTANCE;
8+
9+
public static Minecraft getInstance() {
10+
if (INSTANCE == null) {
11+
throw new IllegalStateException("no Minecraft instance available right now");
12+
}
13+
14+
return INSTANCE;
15+
}
16+
}

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

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import net.minecraft.client.Minecraft;
1010

1111
import net.ornithemc.osl.lifecycle.api.client.MinecraftClientEvents;
12+
import net.ornithemc.osl.lifecycle.impl.client.MinecraftAccess;
1213

1314
@Mixin(Minecraft.class)
1415
public class MinecraftMixin {
@@ -20,7 +21,8 @@ public class MinecraftMixin {
2021
)
2122
)
2223
private void osl$lifecycle$start(CallbackInfo ci) {
23-
MinecraftClientEvents.START.invoker().accept((Minecraft)(Object)this);
24+
MinecraftAccess.INSTANCE = (Minecraft)(Object)this;
25+
MinecraftClientEvents.START.invoker().accept(MinecraftAccess.INSTANCE);
2426
}
2527

2628
@Inject(
@@ -30,7 +32,7 @@ public class MinecraftMixin {
3032
)
3133
)
3234
private void osl$lifecycle$ready(CallbackInfo ci) {
33-
MinecraftClientEvents.READY.invoker().accept((Minecraft)(Object)this);
35+
MinecraftClientEvents.READY.invoker().accept(MinecraftAccess.INSTANCE);
3436
}
3537

3638
@Inject(
@@ -40,7 +42,17 @@ public class MinecraftMixin {
4042
)
4143
)
4244
private void osl$lifecycle$stop(CallbackInfo ci) {
43-
MinecraftClientEvents.STOP.invoker().accept((Minecraft)(Object)this);
45+
MinecraftClientEvents.STOP.invoker().accept(MinecraftAccess.INSTANCE);
46+
}
47+
48+
@Inject(
49+
method = "shutdown",
50+
at = @At(
51+
value = "TAIL"
52+
)
53+
)
54+
private void osl$lifecycle$stopped(CallbackInfo ci) {
55+
MinecraftAccess.INSTANCE = null;
4456
}
4557

4658
@Inject(
@@ -50,7 +62,7 @@ public class MinecraftMixin {
5062
)
5163
)
5264
private void osl$lifecycle$startTick(CallbackInfo ci) {
53-
MinecraftClientEvents.TICK_START.invoker().accept((Minecraft)(Object)this);
65+
MinecraftClientEvents.TICK_START.invoker().accept(MinecraftAccess.INSTANCE);
5466
}
5567

5668
@Inject(
@@ -60,7 +72,7 @@ public class MinecraftMixin {
6072
)
6173
)
6274
private void osl$lifecycle$endTick(CallbackInfo ci) {
63-
MinecraftClientEvents.TICK_END.invoker().accept((Minecraft)(Object)this);
75+
MinecraftClientEvents.TICK_END.invoker().accept(MinecraftAccess.INSTANCE);
6476
}
6577

6678
@Unique private int osl$lifecycle$startGameDepth;
@@ -75,7 +87,7 @@ public class MinecraftMixin {
7587
// The startGame method recursively calls itself when converting from
7688
// older world formats, but we only want to capture the initial call.
7789
if (osl$lifecycle$startGameDepth++ == 0) {
78-
MinecraftClientEvents.LOAD_WORLD.invoker().accept((Minecraft)(Object)this);
90+
MinecraftClientEvents.LOAD_WORLD.invoker().accept(MinecraftAccess.INSTANCE);
7991
}
8092
}
8193

@@ -87,7 +99,7 @@ public class MinecraftMixin {
8799
)
88100
)
89101
private void osl$lifecycle$prepareWorld(CallbackInfo ci) {
90-
MinecraftClientEvents.PREPARE_WORLD.invoker().accept((Minecraft)(Object)this);
102+
MinecraftClientEvents.PREPARE_WORLD.invoker().accept(MinecraftAccess.INSTANCE);
91103
}
92104

93105
@Inject(
@@ -100,7 +112,7 @@ public class MinecraftMixin {
100112
// The startGame method recursively calls itself when converting from
101113
// older world formats, but we only want to capture the initial call.
102114
if (--osl$lifecycle$startGameDepth == 0) {
103-
MinecraftClientEvents.READY_WORLD.invoker().accept((Minecraft)(Object)this);
115+
MinecraftClientEvents.READY_WORLD.invoker().accept(MinecraftAccess.INSTANCE);
104116
}
105117
}
106118
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package net.ornithemc.osl.lifecycle.api.client;
2+
3+
import net.minecraft.client.Minecraft;
4+
5+
import net.ornithemc.osl.lifecycle.impl.client.MinecraftAccess;
6+
7+
/**
8+
* A wrapper class for getting the {@linkplain Minecraft} instance.
9+
*/
10+
public class MinecraftInstance {
11+
12+
/**
13+
* Retrieves the current Minecraft game instance,
14+
* or throws an exception.
15+
*
16+
* @return the current Minecraft game instance
17+
*/
18+
public static Minecraft get() {
19+
return MinecraftAccess.getInstance();
20+
}
21+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package net.ornithemc.osl.lifecycle.impl.client;
2+
3+
import net.minecraft.client.Minecraft;
4+
5+
public class MinecraftAccess {
6+
7+
public static Minecraft INSTANCE;
8+
9+
public static Minecraft getInstance() {
10+
if (INSTANCE == null) {
11+
throw new IllegalStateException("no Minecraft instance available right now");
12+
}
13+
14+
return INSTANCE;
15+
}
16+
}

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

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import net.minecraft.client.Minecraft;
99

1010
import net.ornithemc.osl.lifecycle.api.client.MinecraftClientEvents;
11+
import net.ornithemc.osl.lifecycle.impl.client.MinecraftAccess;
1112

1213
@Mixin(Minecraft.class)
1314
public class MinecraftMixin {
@@ -19,7 +20,8 @@ public class MinecraftMixin {
1920
)
2021
)
2122
private void osl$lifecycle$start(CallbackInfo ci) {
22-
MinecraftClientEvents.START.invoker().accept((Minecraft)(Object)this);
23+
MinecraftAccess.INSTANCE = (Minecraft)(Object)this;
24+
MinecraftClientEvents.START.invoker().accept(MinecraftAccess.INSTANCE);
2325
}
2426

2527
@Inject(
@@ -29,7 +31,7 @@ public class MinecraftMixin {
2931
)
3032
)
3133
private void osl$lifecycle$ready(CallbackInfo ci) {
32-
MinecraftClientEvents.READY.invoker().accept((Minecraft)(Object)this);
34+
MinecraftClientEvents.READY.invoker().accept(MinecraftAccess.INSTANCE);
3335
}
3436

3537
@Inject(
@@ -39,7 +41,17 @@ public class MinecraftMixin {
3941
)
4042
)
4143
private void osl$lifecycle$stop(CallbackInfo ci) {
42-
MinecraftClientEvents.STOP.invoker().accept((Minecraft)(Object)this);
44+
MinecraftClientEvents.STOP.invoker().accept(MinecraftAccess.INSTANCE);
45+
}
46+
47+
@Inject(
48+
method = "shutdown",
49+
at = @At(
50+
value = "TAIL"
51+
)
52+
)
53+
private void osl$lifecycle$stopped(CallbackInfo ci) {
54+
MinecraftAccess.INSTANCE = null;
4355
}
4456

4557
@Inject(
@@ -49,7 +61,7 @@ public class MinecraftMixin {
4961
)
5062
)
5163
private void osl$lifecycle$startTick(CallbackInfo ci) {
52-
MinecraftClientEvents.TICK_START.invoker().accept((Minecraft)(Object)this);
64+
MinecraftClientEvents.TICK_START.invoker().accept(MinecraftAccess.INSTANCE);
5365
}
5466

5567
@Inject(
@@ -59,6 +71,6 @@ public class MinecraftMixin {
5971
)
6072
)
6173
private void osl$lifecycle$endTick(CallbackInfo ci) {
62-
MinecraftClientEvents.TICK_END.invoker().accept((Minecraft)(Object)this);
74+
MinecraftClientEvents.TICK_END.invoker().accept(MinecraftAccess.INSTANCE);
6375
}
6476
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package net.ornithemc.osl.lifecycle.api.client;
2+
3+
import net.minecraft.client.Minecraft;
4+
5+
import net.ornithemc.osl.lifecycle.impl.client.MinecraftAccess;
6+
7+
/**
8+
* A wrapper class for getting the {@linkplain Minecraft} instance.
9+
*/
10+
public class MinecraftInstance {
11+
12+
/**
13+
* Retrieves the current Minecraft game instance,
14+
* or throws an exception.
15+
*
16+
* @return the current Minecraft game instance
17+
*/
18+
public static Minecraft get() {
19+
return MinecraftAccess.getInstance();
20+
}
21+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package net.ornithemc.osl.lifecycle.impl.client;
2+
3+
import net.minecraft.client.Minecraft;
4+
5+
public class MinecraftAccess {
6+
7+
public static Minecraft INSTANCE;
8+
9+
public static Minecraft getInstance() {
10+
if (INSTANCE == null) {
11+
throw new IllegalStateException("no Minecraft instance available right now");
12+
}
13+
14+
return INSTANCE;
15+
}
16+
}

libraries/lifecycle-events/lifecycle-events-mc12w21a-mc1.6.4/src/main/java/net/ornithemc/osl/lifecycle/impl/mixin/client/MinecraftMixin.java

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import net.minecraft.client.Minecraft;
99

1010
import net.ornithemc.osl.lifecycle.api.client.MinecraftClientEvents;
11+
import net.ornithemc.osl.lifecycle.impl.client.MinecraftAccess;
1112

1213
@Mixin(Minecraft.class)
1314
public class MinecraftMixin {
@@ -19,7 +20,8 @@ public class MinecraftMixin {
1920
)
2021
)
2122
private void osl$lifecycle$start(CallbackInfo ci) {
22-
MinecraftClientEvents.START.invoker().accept((Minecraft)(Object)this);
23+
MinecraftAccess.INSTANCE = (Minecraft)(Object)this;
24+
MinecraftClientEvents.START.invoker().accept(MinecraftAccess.INSTANCE);
2325
}
2426

2527
@Inject(
@@ -29,7 +31,7 @@ public class MinecraftMixin {
2931
)
3032
)
3133
private void osl$lifecycle$ready(CallbackInfo ci) {
32-
MinecraftClientEvents.READY.invoker().accept((Minecraft)(Object)this);
34+
MinecraftClientEvents.READY.invoker().accept(MinecraftAccess.INSTANCE);
3335
}
3436

3537
@Inject(
@@ -39,7 +41,17 @@ public class MinecraftMixin {
3941
)
4042
)
4143
private void osl$lifecycle$stop(CallbackInfo ci) {
42-
MinecraftClientEvents.STOP.invoker().accept((Minecraft)(Object)this);
44+
MinecraftClientEvents.STOP.invoker().accept(MinecraftAccess.INSTANCE);
45+
}
46+
47+
@Inject(
48+
method = "shutdown",
49+
at = @At(
50+
value = "TAIL"
51+
)
52+
)
53+
private void osl$lifecycle$stopped(CallbackInfo ci) {
54+
MinecraftAccess.INSTANCE = null;
4355
}
4456

4557
@Inject(
@@ -49,7 +61,7 @@ public class MinecraftMixin {
4961
)
5062
)
5163
private void osl$lifecycle$startTick(CallbackInfo ci) {
52-
MinecraftClientEvents.TICK_START.invoker().accept((Minecraft)(Object)this);
64+
MinecraftClientEvents.TICK_START.invoker().accept(MinecraftAccess.INSTANCE);
5365
}
5466

5567
@Inject(
@@ -59,6 +71,6 @@ public class MinecraftMixin {
5971
)
6072
)
6173
private void osl$lifecycle$endTick(CallbackInfo ci) {
62-
MinecraftClientEvents.TICK_END.invoker().accept((Minecraft)(Object)this);
74+
MinecraftClientEvents.TICK_END.invoker().accept(MinecraftAccess.INSTANCE);
6375
}
6476
}

0 commit comments

Comments
 (0)