Skip to content

Commit b01a2b7

Browse files
Added 3 new items:
Meat Feast Fish Feast Smoked Rabbit I've also made cooked rabbit and tropical fish edible by cats. I will update the wiki
1 parent f3138b2 commit b01a2b7

File tree

22 files changed

+231
-47
lines changed

22 files changed

+231
-47
lines changed

.java-version

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
oracle64-21.0.7

src/client/java/singh/akaalroop/meowmeals/mixin/client/ExampleClientMixin.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@
88

99
@Mixin(MinecraftClient.class)
1010
public class ExampleClientMixin {
11-
@Inject(at = @At("HEAD"), method = "run")
12-
private void init(CallbackInfo info) {
13-
// This code is injected into the start of MinecraftClient.run()V
14-
}
11+
@Inject(at = @At("HEAD"), method = "run")
12+
private void init(CallbackInfo info) {
13+
// This code is injected into the start of MinecraftClient.run()V
14+
}
1515
}

src/client/kotlin/singh/akaalroop/meowmeals/MeowMealsClient.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ package singh.akaalroop.meowmeals
33
import net.fabricmc.api.ClientModInitializer
44

55
object MeowMealsClient : ClientModInitializer {
6-
override fun onInitializeClient() {
7-
// This entrypoint is suitable for setting up client-specific logic, such as rendering.
8-
}
6+
override fun onInitializeClient() {
7+
// This entrypoint is suitable for setting up client-specific logic, such as rendering.
8+
}
99
}

src/client/kotlin/singh/akaalroop/meowmeals/MeowMealsDataGenerator.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,6 @@ import net.fabricmc.fabric.api.datagen.v1.DataGeneratorEntrypoint
44
import net.fabricmc.fabric.api.datagen.v1.FabricDataGenerator
55

66
object MeowMealsDataGenerator : DataGeneratorEntrypoint {
7-
override fun onInitializeDataGenerator(fabricDataGenerator: FabricDataGenerator) {
8-
}
7+
override fun onInitializeDataGenerator(fabricDataGenerator: FabricDataGenerator) {
8+
}
99
}
Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
{
2-
"required": true,
3-
"package": "singh.akaalroop.meowmeals.mixin.client",
4-
"compatibilityLevel": "JAVA_17",
5-
"client": [
6-
"ExampleClientMixin"
7-
],
8-
"injectors": {
9-
"defaultRequire": 1
10-
}
2+
"required": true,
3+
"package": "singh.akaalroop.meowmeals.mixin.client",
4+
"compatibilityLevel": "JAVA_17",
5+
"client": [
6+
"ExampleClientMixin"
7+
],
8+
"injectors": {
9+
"defaultRequire": 1
10+
}
1111
}
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
package singh.akaalroop.meowmeals.mixin;
2+
3+
import net.minecraft.item.ItemStack;
4+
import net.minecraft.registry.Registries;
5+
import net.minecraft.util.ActionResult;
6+
import net.minecraft.util.Identifier;
7+
import org.spongepowered.asm.mixin.Mixin;
8+
import org.spongepowered.asm.mixin.injection.At;
9+
import org.spongepowered.asm.mixin.injection.Inject;
10+
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
11+
import net.minecraft.entity.passive.CatEntity;
12+
import net.minecraft.entity.player.PlayerEntity;
13+
14+
@Mixin(CatEntity.class)
15+
public class CatEntityMixin {
16+
17+
@Inject(method = "isBreedingItem", at = @At("HEAD"), cancellable = true)
18+
private void isBreedingItem(ItemStack stack, CallbackInfoReturnable<Boolean> cir) {
19+
if (stack.isOf(Registries.ITEM.get(Identifier.of("meowmeals", "cat_food_tin")))) {
20+
cir.setReturnValue(true);
21+
}
22+
else if (stack.isOf(Registries.ITEM.get(Identifier.of("meowmeals", "fish_feast")))) {
23+
cir.setReturnValue(true);
24+
}
25+
else if (stack.isOf(Registries.ITEM.get(Identifier.of("meowmeals", "meat_feast")))) {
26+
cir.setReturnValue(true);
27+
}
28+
else if (stack.isOf(Registries.ITEM.get(Identifier.of("minecraft", "tropical_fish")))) {
29+
cir.setReturnValue(true);
30+
}
31+
else if (stack.isOf(Registries.ITEM.get(Identifier.of("meowmeals", "smoked_rabbit")))) {
32+
cir.setReturnValue(true);
33+
}
34+
else if (stack.isOf(Registries.ITEM.get(Identifier.of("minecraft", "cooked_rabbit")))) {
35+
cir.setReturnValue(true);
36+
}
37+
}
38+
39+
// Hook into interactMob instead, since it has the player and hand info.
40+
@Inject(method = "interactMob", at = @At("HEAD"), cancellable = true)
41+
private void onInteractMob(PlayerEntity player, net.minecraft.util.Hand hand, CallbackInfoReturnable<ActionResult> cir) {
42+
ItemStack stack = player.getStackInHand(hand);
43+
if (stack.isOf(Registries.ITEM.get(Identifier.of("meowmeals", "cat_food_tin")))) {
44+
CatEntity cat = (CatEntity)(Object)this;
45+
46+
// Heal the cat if it’s hurt
47+
if (cat.getHealth() < cat.getMaxHealth()) {
48+
cat.heal(6.0f); // 3 hearts
49+
}
50+
51+
// Tame the cat if it’s not already tamed
52+
if (!cat.isTamed()) {
53+
cat.setTamed(true, true);
54+
cat.setOwner(player);
55+
}
56+
57+
// Set in love if tamed and adult
58+
if (cat.isTamed() && !cat.isBaby()) {
59+
cat.setLoveTicks(600); // 30 seconds of love mode, 1 tick = 50ms so 20 ticks = 1 second, so 600 ticks / 20 = 30
60+
}
61+
62+
// Consume one item from stack
63+
if (!player.getAbilities().creativeMode) {
64+
stack.decrement(1);
65+
}
66+
67+
cir.setReturnValue(ActionResult.SUCCESS); // or ActionResult.PASS / FAIL depending on logic
68+
cir.cancel();
69+
}
70+
}
71+
}

src/main/java/singh/akaalroop/meowmeals/mixin/ExampleMixin.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@
88

99
@Mixin(MinecraftServer.class)
1010
public class ExampleMixin {
11-
@Inject(at = @At("HEAD"), method = "loadWorld")
12-
private void init(CallbackInfo info) {
13-
// This code is injected into the start of MinecraftServer.loadWorld()V
14-
}
11+
@Inject(at = @At("HEAD"), method = "loadWorld")
12+
private void init(CallbackInfo info) {
13+
// This code is injected into the start of MinecraftServer.loadWorld()V
14+
}
1515
}

src/main/kotlin/singh/akaalroop/meowmeals/MeowMeals.kt

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ import net.minecraft.registry.Registries
1010
import net.minecraft.registry.Registry
1111
import net.minecraft.registry.RegistryKey
1212
import net.minecraft.registry.RegistryKeys
13-
import net.minecraft.registry.tag.TagKey
1413
import net.minecraft.text.Text
1514
import net.minecraft.util.Identifier
1615
import org.slf4j.LoggerFactory
@@ -32,6 +31,24 @@ object MeowMeals : ModInitializer {
3231
Item(Item.Settings())
3332
)
3433

34+
val fishFeast = Registry.register(
35+
Registries.ITEM,
36+
Identifier.of(MOD_ID, "fish_feast"),
37+
Item(Item.Settings())
38+
)
39+
40+
val meatFeast = Registry.register(
41+
Registries.ITEM,
42+
Identifier.of(MOD_ID, "meat_feast"),
43+
Item(Item.Settings())
44+
)
45+
46+
val smokedRabbit = Registry.register(
47+
Registries.ITEM,
48+
Identifier.of(MOD_ID, "smoked_rabbit"),
49+
Item(Item.Settings())
50+
)
51+
3552
Registry.register(
3653
Registries.ITEM_GROUP,
3754
MEOWMEALS_GROUP,
@@ -43,12 +60,9 @@ object MeowMeals : ModInitializer {
4360

4461
ItemGroupEvents.modifyEntriesEvent(MEOWMEALS_GROUP).register { content ->
4562
content.add(catFoodTin)
63+
content.add(fishFeast)
64+
content.add(meatFeast)
65+
content.add(smokedRabbit)
4666
}
47-
val CAT_FOOD_TAG = TagKey.of(RegistryKeys.ITEM, Identifier.of("minecraft", "cat_food"))
48-
49-
fun isCatFood(item: Item): Boolean {
50-
return ItemStack(item).isIn(CAT_FOOD_TAG)
51-
}
52-
print("Is Cat Food: ${isCatFood(catFoodTin)}")
5367
}
5468
}
Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
11
{
22
"item.meowmeals.cat_food_tin": "Cat Food Tin",
3-
"itemGroup.meowmeals.meowmeals_group": "Meow Meals"
4-
}
3+
"itemGroup.meowmeals.meowmeals_group": "Meow Meals",
4+
"item.meowmeals.fish_feast": "Fish Feast",
5+
"item.meowmeals.meat_feast": "Meat Feast",
6+
"item.meowmeals.smoked_rabbit": "Smoked Rabbit",
7+
"item.meowmeals.cat_food_tin.description": "A tin of cat food, perfect for feeding your feline friends. They love it!"
8+
}
Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
11
{
22
"item.meowmeals.cat_food_tin": "Cat Food Tin",
3-
"itemGroup.meowmeals.meowmeals_group": "Meow Meals"
3+
"itemGroup.meowmeals.meowmeals_group": "Meow Meals",
4+
"item.meowmeals.fish_feast": "Fish Feast",
5+
"item.meowmeals.meat_feast": "Meat Feast",
6+
"item.meowmeals.smoked_rabbit": "Smoked Rabbit",
7+
"item.meowmeals.cat_food_tin.description": "A tin of cat food, perfect for feeding your feline friends. They love it!"
48
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"parent": "item/generated",
3+
"textures": {
4+
"layer0": "meowmeals:item/fish_feast"
5+
}
6+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"parent": "item/generated",
3+
"textures": {
4+
"layer0": "meowmeals:item/meat_feast"
5+
}
6+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"parent": "item/generated",
3+
"textures": {
4+
"layer0": "meowmeals:item/smoked_rabbit"
5+
}
6+
}
Loading
Loading
Loading

src/main/resources/data/minecraft/tags/items/cat_food.json

Lines changed: 0 additions & 6 deletions
This file was deleted.
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
{
2+
"type": "minecraft:crafting_shaped",
3+
"pattern": [
4+
"## ",
5+
"## ",
6+
" "
7+
],
8+
"key": {
9+
"#": {
10+
"item": "minecraft:cod"
11+
}
12+
},
13+
"result": {
14+
"id": "meowmeals:cat_food_tin",
15+
"count": 1
16+
}
17+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
{
2+
"type": "minecraft:crafting_shaped",
3+
"pattern": [
4+
" # ",
5+
" C ",
6+
" B "
7+
],
8+
"key": {
9+
"#": {
10+
"item": "minecraft:cooked_cod"
11+
},
12+
"C": {
13+
"item": "minecraft:cooked_salmon"
14+
},
15+
"B": {
16+
"item": "minecraft:bowl"
17+
}
18+
},
19+
"result": {
20+
"id": "meowmeals:fish_feast",
21+
"count": 1
22+
}
23+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
{
2+
"type": "minecraft:crafting_shaped",
3+
"pattern": [
4+
" ",
5+
"#CD",
6+
" B "
7+
],
8+
"key": {
9+
"#": {
10+
"item": "minecraft:cooked_porkchop"
11+
},
12+
"C": {
13+
"item": "minecraft:cooked_chicken"
14+
},
15+
"D": {
16+
"item": "minecraft:cooked_beef"
17+
},
18+
"B": {
19+
"item": "minecraft:bowl"
20+
}
21+
},
22+
"result": {
23+
"item": "meowmeals:meat_feast",
24+
"count": 1
25+
}
26+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
{
2+
"type": "minecraft:smoking",
3+
"ingredient": {
4+
"item": "minecraft:cooked_rabbit"
5+
},
6+
"result": {
7+
"id": "meowmeals:smoked_rabbit"
8+
},
9+
"experience": 1.1,
10+
"cookingtime": 69
11+
}
Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
{
2-
"required": true,
3-
"package": "singh.akaalroop.meowmeals.mixin",
4-
"compatibilityLevel": "JAVA_17",
5-
"mixins": [
6-
"ExampleMixin"
7-
],
8-
"injectors": {
9-
"defaultRequire": 1
10-
}
2+
"required": true,
3+
"package": "singh.akaalroop.meowmeals.mixin",
4+
"compatibilityLevel": "JAVA_21",
5+
"mixins": [
6+
"CatEntityMixin",
7+
"ExampleMixin"
8+
],
9+
"injectors": {
10+
"defaultRequire": 1
11+
}
1112
}

0 commit comments

Comments
 (0)