9
9
import net .minecraft .util .math .MathHelper ;
10
10
import org .jetbrains .annotations .Nullable ;
11
11
import org .spongepowered .asm .mixin .Shadow ;
12
+ import org .spongepowered .asm .mixin .Unique ;
12
13
import net .minecraft .entity .FlyingItemEntity ;
13
14
import com .llamalad7 .mixinextras .sugar .Local ;
14
15
import org .spongepowered .asm .mixin .injection .At ;
@@ -30,13 +31,20 @@ public abstract class FireworkRocketEntityMixin implements FlyingItemEntity {
30
31
@ Shadow
31
32
private @ Nullable LivingEntity shooter ;
32
33
34
+ @ Unique
35
+ private @ Nullable RocketMan rm ;
36
+
33
37
// See RocketMan.java
34
38
@ Inject (method = "tick" , at = @ At ("HEAD" ))
35
39
private void createTrackedRocketEntity (CallbackInfo ci ) {
36
40
if (this .shooter == null ) return ;
37
- Modules modules = Modules .get ();
38
- if (modules == null ) return ;
39
- RocketMan rm = modules .get (RocketMan .class );
41
+
42
+ if (this .rm == null ) {
43
+ Modules modules = Modules .get ();
44
+ if (modules == null ) return ;
45
+ rm = modules .get (RocketMan .class );
46
+ }
47
+
40
48
if (!rm .getClientInstance ().player .isFallFlying ()) return ;
41
49
if (!this .shooter .getUuid ().equals (rm .getClientInstance ().player .getUuid ())) return ;
42
50
if (!rm .isActive () || rm .currentRocket == (Object )this ) return ;
@@ -60,21 +68,23 @@ private void createTrackedRocketEntity(CallbackInfo ci) {
60
68
61
69
@ ModifyConstant (method = "tick" , constant = @ Constant (doubleValue = 1.5 ))
62
70
private double boostFireworkRocketSpeed (double multiplier ) {
63
- Modules modules = Modules .get ();
64
- if (modules == null ) return multiplier ;
65
-
66
- RocketMan rm = modules .get (RocketMan .class );
71
+ if (this .rm == null ) {
72
+ Modules modules = Modules .get ();
73
+ if (modules == null ) return multiplier ;
74
+ rm = modules .get (RocketMan .class );
75
+ }
67
76
if (!rm .isActive () || !rm .boostSpeed .get ()) return multiplier ;
68
77
69
78
return rm .getRocketBoostAcceleration ();
70
79
}
71
80
72
81
@ Inject (method = "tick" , at = @ At (value = "INVOKE" , target = "Lnet/minecraft/entity/LivingEntity;getVelocity()Lnet/minecraft/util/math/Vec3d;" ))
73
82
private void spoofRotationVector (CallbackInfo ci , @ Local (ordinal = 0 ) LocalRef <Vec3d > rotationVec ) {
74
- Modules modules = Modules .get ();
75
- if (modules == null ) return ;
76
-
77
- RocketMan rm = modules .get (RocketMan .class );
83
+ if (this .rm == null ) {
84
+ Modules modules = Modules .get ();
85
+ if (modules == null ) return ;
86
+ rm = modules .get (RocketMan .class );
87
+ }
78
88
if (!rm .isActive () || !rm .shouldLockYLevel ()) return ;
79
89
if (!rm .getClientInstance ().player .isFallFlying () || !rm .hasActiveRocket ) return ;
80
90
@@ -87,9 +97,11 @@ private void spoofRotationVector(CallbackInfo ci, @Local(ordinal = 0) LocalRef<V
87
97
88
98
@ Inject (method = "tick" , at = @ At (value = "INVOKE" , target = "Lnet/minecraft/entity/projectile/FireworkRocketEntity;explodeAndRemove()V" , shift = At .Shift .BEFORE ), cancellable = true )
89
99
private void extendFireworkDuration (CallbackInfo ci ) {
90
- Modules modules = Modules .get ();
91
- if (modules == null ) return ;
92
- RocketMan rm = modules .get (RocketMan .class );
100
+ if (this .rm == null ) {
101
+ Modules modules = Modules .get ();
102
+ if (modules == null ) return ;
103
+ rm = modules .get (RocketMan .class );
104
+ }
93
105
if (rm .currentRocket == null ) return ;
94
106
if (!rm .isActive () || !rm .extendRockets .get ()) return ;
95
107
if (rm .currentRocket .getId () != ((FireworkRocketEntity )(Object )this ).getId ()) return ;
0 commit comments