7
7
import net .minecraft .entity .player .PlayerEntity ;
8
8
import net .minecraft .item .ItemStack ;
9
9
import net .minecraft .item .Items ;
10
- import net .minecraft .particle .ParticleTypes ;
11
10
import net .minecraft .registry .Registries ;
12
11
import net .minecraft .text .MutableText ;
13
12
import net .minecraft .text .Text ;
14
13
import net .minecraft .util .ActionResult ;
15
14
import net .minecraft .util .Formatting ;
16
15
import net .minecraft .util .Identifier ;
17
16
import org .spongepowered .asm .mixin .Mixin ;
18
- import org .spongepowered .asm .mixin .Shadow ;
19
17
import org .spongepowered .asm .mixin .Unique ;
20
18
import org .spongepowered .asm .mixin .injection .At ;
21
19
import org .spongepowered .asm .mixin .injection .Inject ;
22
20
import org .spongepowered .asm .mixin .injection .callback .CallbackInfoReturnable ;
23
21
22
+ import static net .minecraft .sound .SoundEvents .ENTITY_CAT_EAT ;
23
+ import static singh .akaalroop .meowmeals .MeowMeals .MOD_ID ;
24
+
24
25
25
26
@ Mixin (CatEntity .class )
26
27
public abstract class CatEntityMixin {
27
28
28
- @ Shadow
29
- protected abstract void tryTame (PlayerEntity player );
30
-
31
29
@ Unique
32
30
private void sendMeowMealsMessage (PlayerEntity player , String text , Formatting colour ) {
33
31
MutableText message = Text .literal ("[MeowMeals] " )
@@ -36,6 +34,11 @@ private void sendMeowMealsMessage(PlayerEntity player, String text, Formatting c
36
34
player .sendMessage (message , false );
37
35
}
38
36
37
+ @ Unique
38
+ private void sendMeowMealsBreedingMessage (PlayerEntity player ) {
39
+ sendMeowMealsMessage (player , "Your cat is now in love mode! 🥰" , Formatting .RED );
40
+ }
41
+
39
42
@ Inject (method = "isBreedingItem" , at = @ At ("HEAD" ), cancellable = true )
40
43
private void isBreedingItem (ItemStack stack , CallbackInfoReturnable <Boolean > cir ) {
41
44
String [] items = {
@@ -45,7 +48,7 @@ private void isBreedingItem(ItemStack stack, CallbackInfoReturnable<Boolean> cir
45
48
"smoked_rabbit"
46
49
};
47
50
for (String item : items ) {
48
- if (stack .isOf (Registries .ITEM .get (Identifier .of ("meowmeals" , item )))) {
51
+ if (stack .isOf (Registries .ITEM .get (Identifier .of (MOD_ID , item )))) {
49
52
cir .setReturnValue (true );
50
53
return ;
51
54
}
@@ -56,172 +59,87 @@ private void isBreedingItem(ItemStack stack, CallbackInfoReturnable<Boolean> cir
56
59
}
57
60
}
58
61
59
- // Hook into interactMob instead, since it has the player and hand info.
62
+
60
63
@ Inject (method = "interactMob" , at = @ At ("HEAD" ), cancellable = true )
61
64
private void onInteractMob (PlayerEntity player , net .minecraft .util .Hand hand , CallbackInfoReturnable <ActionResult > cir ) {
62
65
ItemStack stack = player .getStackInHand (hand );
63
66
CatEntity cat = (CatEntity ) (Object ) this ;
64
- if (cat .getHealth () < cat .getMaxHealth () || !cat .isTamed () || cat .isBaby () || !cat .hasStatusEffect (StatusEffects .SATURATION ) || !cat .hasStatusEffect (StatusEffects .JUMP_BOOST ) || !cat .hasStatusEffect (StatusEffects .SPEED )) {
65
- if (!cat .getWorld ().isClient ()) {
66
- if (stack .isOf (Registries .ITEM .get (Identifier .of ("meowmeals" , "cat_food_tin" )))) {
67
- var actioned = false ;
68
- // Heal the cat if it’s hurt
69
- if (cat .getHealth () < cat .getMaxHealth ()) {
70
- cat .heal (6.0f ); // 3 hearts
71
- actioned = true ;
72
- }
73
-
74
- // Tame the cat if it’s not already tamed
75
- if (!cat .isTamed ()) {
76
- cat .setOwner (player );
77
- cat .setSitting (true );
78
- cat .getWorld ().sendEntityStatus (cat , EntityStatuses .ADD_POSITIVE_PLAYER_REACTION_PARTICLES );
79
- sendMeowMealsMessage (player , "Your cat liked that so much that it's now tamed! 🐱" , Formatting .GREEN );
80
- actioned = true ;
81
- }
82
-
83
- // Set in love if tamed and adult
84
- if (cat .isTamed () && !cat .isBaby () && cat .isReadyToBreed ()) {
85
- cat .setLoveTicks (600 ); // 30 seconds of love mode, 1 tick = 50 ms, so 20 ticks = 1 second, so 600 ticks / 20 = 30
86
- sendMeowMealsMessage (player , "Your cat is now in love mode! 🥰" , Formatting .RED );
87
- actioned = true ;
88
- }
89
-
90
- // Consume one item from the stack
91
- if (!player .getAbilities ().creativeMode && actioned ) {
92
- stack .decrement (1 );
93
- }
94
-
95
- cir .setReturnValue (ActionResult .SUCCESS ); // or ActionResult.PASS / FAIL depending on logic
96
- cir .cancel ();
97
- } else if (stack .isOf (Registries .ITEM .get (Identifier .of ("meowmeals" , "fish_feast" )))) {
98
- var actioned = false ;
99
- // Heal the cat if it’s hurt
100
- if (cat .getHealth () < cat .getMaxHealth ()) {
101
- cat .heal (5.0f ); // 2.5 hearts
102
- actioned = true ;
103
- }
104
-
105
- // Tame the cat if it’s not already tamed
106
- if (!cat .isTamed ()) {
107
- tryTame (player );
108
- actioned = true ;
109
- }
110
-
111
- // Breed
112
- if (cat .isTamed () && !cat .isBaby () && cat .isReadyToBreed ()) {
113
- cat .setLoveTicks (600 );
114
- sendMeowMealsMessage (player , "Your cat is now in love mode! 🥰" , Formatting .RED );
115
- actioned = true ;
116
- }
117
-
118
- // ✨ Add potion effects
119
- if (!cat .hasStatusEffect (StatusEffects .SPEED ) && cat .isTamed ()) {
120
- cat .addStatusEffect (new StatusEffectInstance (StatusEffects .SPEED , 400 , 0 ));
121
- sendMeowMealsMessage (player , "Your cat feels energised! ✨" , Formatting .GREEN );
122
- actioned = true ;
123
- } else if (actioned ) {
124
- cat .getWorld ().addParticle (
125
- ParticleTypes .HEART ,
126
- cat .getX (), cat .getY () + 1 , cat .getZ (),
127
- 0.0 , 0.1 , 0.0
128
- );
129
- sendMeowMealsMessage (player , "The cat enjoyed that! 🐟" , Formatting .YELLOW );
130
- }
131
-
132
- // Consume item
133
- if (!player .getAbilities ().creativeMode && actioned ) {
134
- stack .decrement (1 );
135
- player .getInventory ().insertStack (new ItemStack (Items .BOWL ));
136
- }
137
-
138
- cir .setReturnValue (ActionResult .SUCCESS );
139
- cir .cancel ();
140
- } else if (stack .isOf (Registries .ITEM .get (Identifier .of ("meowmeals" , "meat_feast" )))) {
141
- var actioned = false ;
142
- // Heal the cat if it’s hurt
143
- if (cat .getHealth () < cat .getMaxHealth ()) {
144
- cat .heal (8.0f ); // 4 hearts
145
- actioned = true ;
146
- }
147
67
148
- // Tame the cat if it’s not already tamed
149
- if (!cat .isTamed ()) {
150
- tryTame (player );
151
- actioned = true ;
152
- }
68
+ if (!cat .getWorld ().isClient ()) {
69
+ boolean actioned = false ;
70
+
71
+ // Cat Food Tin
72
+ if (stack .isOf (Registries .ITEM .get (Identifier .of (MOD_ID , "cat_food_tin" )))) {
73
+ if (cat .getHealth () < cat .getMaxHealth ()) {
74
+ cat .heal (6.0f );
75
+ actioned = true ;
76
+ } else if (!cat .isTamed ()) {
77
+ cat .setOwner (player );
78
+ cat .setSitting (true );
79
+ cat .getWorld ().sendEntityStatus (cat , EntityStatuses .ADD_POSITIVE_PLAYER_REACTION_PARTICLES );
80
+ sendMeowMealsMessage (player , "Your cat liked that so much that it's now tamed! 🐱" , Formatting .YELLOW );
81
+ actioned = true ;
82
+ } else if (cat .isTamed () && !cat .isInLove () && cat .getBreedingAge () == 0 ) {
83
+ cat .lovePlayer (player );
84
+ sendMeowMealsBreedingMessage (player );
85
+ actioned = true ;
86
+ }
153
87
154
- // Breed
155
- if (cat .isTamed () && !cat .isBaby () && cat .isReadyToBreed ()) {
156
- cat .setLoveTicks (600 );
157
- sendMeowMealsMessage (player , "Your cat is now in love mode! 🥰" , Formatting .RED );
158
- actioned = true ;
159
- }
88
+ // Fish Feast
89
+ } else if (stack .isOf (Registries .ITEM .get (Identifier .of (MOD_ID , "fish_feast" )))) {
90
+ if (cat .getHealth () < cat .getMaxHealth ()) {
91
+ cat .heal (5.0f );
92
+ actioned = true ;
93
+ } else if (cat .isTamed () && !cat .isInLove () && cat .getBreedingAge () == 0 ) {
94
+ cat .lovePlayer (player );
95
+ sendMeowMealsBreedingMessage (player );
96
+ actioned = true ;
97
+ } else if (!cat .hasStatusEffect (StatusEffects .SPEED )) {
98
+ cat .addStatusEffect (new StatusEffectInstance (StatusEffects .SPEED , 400 , 0 ));
99
+ sendMeowMealsMessage (player , "Your cat feels energised! ✨" , Formatting .GREEN );
100
+ actioned = true ;
101
+ }
102
+ // Meat Feast
103
+ } else if (stack .isOf (Registries .ITEM .get (Identifier .of (MOD_ID , "meat_feast" )))) {
104
+ if (cat .getHealth () < cat .getMaxHealth ()) {
105
+ cat .heal (8.0f );
106
+ actioned = true ;
107
+ } else if (cat .isTamed () && !cat .isInLove () && cat .getBreedingAge () == 0 ) {
108
+ cat .lovePlayer (player );
109
+ sendMeowMealsBreedingMessage (player );
110
+ actioned = true ;
111
+ } else if (!cat .hasStatusEffect (StatusEffects .SATURATION )) {
112
+ cat .addStatusEffect (new StatusEffectInstance (StatusEffects .SATURATION , 400 , 0 ));
113
+ sendMeowMealsMessage (player , "Your cat feels more full! 😋" , Formatting .GREEN );
114
+ actioned = true ;
115
+ }
160
116
161
- // ✨ Add potion effects
162
- if (!cat .hasStatusEffect (StatusEffects .SATURATION ) && cat .isTamed ()) {
163
- cat .addStatusEffect (new StatusEffectInstance (StatusEffects .SATURATION , 400 , 0 ));
164
- sendMeowMealsMessage (player , "Your cat feels more full! 😋" , Formatting .GREEN );
165
- actioned = true ;
166
- } else if (actioned ) {
167
- cat .getWorld ().addParticle (
168
- ParticleTypes .HEART ,
169
- cat .getX (), cat .getY () + 1 , cat .getZ (),
170
- 0.0 , 0.1 , 0.0
171
- );
172
- sendMeowMealsMessage (player , "The cat enjoyed that! 🍗" , Formatting .YELLOW );
173
- }
117
+ // Smoked Rabbit
118
+ } else if (stack .isOf (Registries .ITEM .get (Identifier .of (MOD_ID , "smoked_rabbit" )))) {
119
+ if (cat .getHealth () < cat .getMaxHealth ()) {
120
+ cat .heal (4.0f );
121
+ actioned = true ;
122
+ } else if (cat .isTamed () && !cat .isInLove () && cat .getBreedingAge () == 0 ) {
123
+ cat .lovePlayer (player );
124
+ sendMeowMealsBreedingMessage (player );
125
+ actioned = true ;
126
+ } else if (!cat .hasStatusEffect (StatusEffects .JUMP_BOOST )) {
127
+ cat .addStatusEffect (new StatusEffectInstance (StatusEffects .JUMP_BOOST , 400 , 0 ));
128
+ sendMeowMealsMessage (player , "Your cat feels bouncier, like a rabbit! 🐇" , Formatting .GREEN );
129
+ actioned = true ;
130
+ }
131
+ }
174
132
175
- // Consume item
176
- if (!player .getAbilities ().creativeMode && actioned ) {
177
- stack .decrement (1 );
133
+ if (actioned ) {
134
+ if (!player .getAbilities ().creativeMode ) {
135
+ stack .decrement (1 );
136
+ if (stack .isOf (Registries .ITEM .get (Identifier .of (MOD_ID , "fish_feast" )))
137
+ || stack .isOf (Registries .ITEM .get (Identifier .of (MOD_ID , "meat_feast" )))) {
178
138
player .getInventory ().insertStack (new ItemStack (Items .BOWL ));
179
139
}
180
- cir .setReturnValue (ActionResult .SUCCESS );
181
- cir .cancel ();
182
- } else if (stack .isOf (Registries .ITEM .get (Identifier .of ("meowmeals" , "smoked_rabbit" )))) {
183
- var actioned = false ;
184
- // Heal the cat if it’s hurt
185
- if (cat .getHealth () < cat .getMaxHealth ()) {
186
- cat .heal (4.0f ); // 2 hearts
187
- actioned = true ;
188
- }
189
-
190
- // Tame the cat if it’s not already tamed
191
- if (!cat .isTamed ()) {
192
- tryTame (player );
193
- actioned = true ;
194
- }
195
-
196
- // Breed
197
- if (cat .isTamed () && !cat .isBaby () && cat .isReadyToBreed ()) {
198
- cat .setLoveTicks (600 );
199
- sendMeowMealsMessage (player , "Your cat is now in love mode! 🥰" , Formatting .RED );
200
- actioned = true ;
201
- }
202
-
203
- // ✨ Add potion effects
204
- if (!cat .hasStatusEffect (StatusEffects .JUMP_BOOST ) && cat .isTamed ()) {
205
- cat .addStatusEffect (new StatusEffectInstance (StatusEffects .JUMP_BOOST , 400 , 0 ));
206
- sendMeowMealsMessage (player , "Your cat feels bouncier, like a rabbit! 🐇" , Formatting .GREEN );
207
- actioned = true ;
208
- } else if (actioned ) {
209
- cat .getWorld ().addParticle (
210
- ParticleTypes .HEART ,
211
- cat .getX (), cat .getY () + 1 , cat .getZ (),
212
- 0.0 , 0.1 , 0.0
213
- );
214
- sendMeowMealsMessage (player , "The cat enjoyed that! 😋" , Formatting .YELLOW );
215
- }
216
-
217
- // Consume item
218
- if (!player .getAbilities ().creativeMode && actioned ) {
219
- stack .decrement (1 );
220
- }
221
-
222
- cir .setReturnValue (ActionResult .SUCCESS );
223
- cir .cancel ();
224
140
}
141
+ cat .playSound (ENTITY_CAT_EAT , 1.0F , 1.0F );
142
+ cir .setReturnValue (ActionResult .SUCCESS );
225
143
}
226
144
}
227
145
}
0 commit comments