Skip to content

Commit f516907

Browse files
committed
feat:black dog blood
1 parent 4606769 commit f516907

File tree

11 files changed

+125
-25
lines changed

11 files changed

+125
-25
lines changed

src/generated/resources/assets/vanillaextra/lang/en_us.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
"item.vanillaextra.bacon": "Bacon",
1919
"item.vanillaextra.bacon_and_egg": "Bacon And Egg",
2020
"item.vanillaextra.bat_wing": "Bat Wing",
21+
"item.vanillaextra.black_dog_blood": "Black Dog Blood",
2122
"item.vanillaextra.black_dog_spawn_egg": "Black Dog Spawn Egg",
2223
"item.vanillaextra.cooked_bacon": "Cooked Bacon",
2324
"item.vanillaextra.cooked_bat_wing": "Cooked Bat Wing",

src/generated/resources/assets/vanillaextra/lang/zh_cn.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
"item.vanillaextra.bacon": "培根",
1919
"item.vanillaextra.bacon_and_egg": "培根煎蛋",
2020
"item.vanillaextra.bat_wing": "蝙蝠翼",
21+
"item.vanillaextra.black_dog_blood": "黑狗血",
2122
"item.vanillaextra.black_dog_spawn_egg": "生成黑狗",
2223
"item.vanillaextra.cooked_bacon": "熟培根",
2324
"item.vanillaextra.cooked_bat_wing": "熟蝙蝠翼",
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"parent": "minecraft:item/generated",
3+
"textures": {
4+
"layer0": "vanillaextra:item/black_dog_blood"
5+
}
6+
}

src/generated/resources/data/vanillaextra/neoforge/biome_modifier/add_black_dog.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,6 @@
55
"type": "vanillaextra:black_dog",
66
"maxCount": 2,
77
"minCount": 1,
8-
"weight": 40
8+
"weight": 12
99
}
1010
}

src/main/java/com/taiyitistmc/vanillaextra/VanillaExtraEventHandler.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
import net.minecraft.tags.EnchantmentTags;
1515
import net.minecraft.world.entity.EntityType;
1616
import net.minecraft.world.entity.SpawnPlacementTypes;
17+
import net.minecraft.world.item.ItemStack;
18+
import net.minecraft.world.item.Items;
1719
import net.minecraft.world.item.enchantment.Enchantment;
1820
import net.minecraft.world.level.ItemLike;
1921
import net.minecraft.world.level.levelgen.Heightmap;
@@ -31,13 +33,28 @@
3133
import net.neoforged.fml.common.EventBusSubscriber;
3234
import net.neoforged.neoforge.event.LootTableLoadEvent;
3335
import net.neoforged.neoforge.event.entity.RegisterSpawnPlacementsEvent;
36+
import net.neoforged.neoforge.event.entity.player.AttackEntityEvent;
3437

3538
import java.util.List;
3639

3740
@SuppressWarnings("removal")
3841
@EventBusSubscriber(bus = EventBusSubscriber.Bus.MOD, modid = VanillaExtra.MODID)
3942
public class VanillaExtraEventHandler {
4043

44+
@SubscribeEvent
45+
public static void onPlayerAttack(AttackEntityEvent event) {
46+
var entity = event.getTarget();
47+
var player = event.getEntity();
48+
var item = player.getMainHandItem();
49+
boolean canHoldDogBlood = entity instanceof BlackDog && item.is(Items.BOWL);
50+
if (canHoldDogBlood) {
51+
if (!player.getAbilities().instabuild) {
52+
item.shrink(1);
53+
}
54+
player.getInventory().add(new ItemStack(ModItems.BLACK_DOG_BLOOD.get()));
55+
}
56+
}
57+
4158
@SubscribeEvent
4259
public static void onEntitySpawn(RegisterSpawnPlacementsEvent event) {
4360
event.register(ModEntities.BLACK_DOG.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, BlackDog::checkBlackDogSpawnRules, RegisterSpawnPlacementsEvent.Operation.AND);

src/main/java/com/taiyitistmc/vanillaextra/datagen/ModLanguageProviderZh.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ protected void addTranslations() {
4848
add(ModItems.PEACH_WOOD_SWORD.get(), "桃木剑");
4949
add(ModEntities.BLACK_DOG.get(), "黑狗");
5050
add(ModItems.BLACK_DOG_SPAWN_EGG.get(), "生成黑狗");
51+
add(ModItems.BLACK_DOG_BLOOD.get(), "黑狗血");
5152
add("advancements.vanillaextra.story.obtain_land_kelp.title", "特殊的海带,陆生海带");
5253
add("advancements.vanillaextra.story.obtain_land_kelp.description", "一种登上陆地的特殊海带,可以长到6格高,是美味的农作物");
5354
add("advancements.vanillaextra.story.obtain_dried_land_kelp.title", "美味的陆生海带干,一种食物");

src/main/java/com/taiyitistmc/vanillaextra/datagen/levelgen/ModBiomeModiferProvider.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ public static void addBiomeModifiers(BootstrapContext<BiomeModifier> context) {
5656
GenerationStep.Decoration.VEGETAL_DECORATION));
5757
context.register(ADD_BLACK_DOG, new BiomeModifiers.AddSpawnsBiomeModifier(
5858
biomes.getOrThrow(Tags.Biomes.IS_OVERWORLD),
59-
List.of(new MobSpawnSettings.SpawnerData(ModEntities.BLACK_DOG.get(), 40, 1, 2))
59+
List.of(new MobSpawnSettings.SpawnerData(ModEntities.BLACK_DOG.get(), 12, 1, 2))
6060
));
6161
}
6262

src/main/java/com/taiyitistmc/vanillaextra/entity/BlackDog.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
import net.minecraft.world.entity.ai.attributes.AttributeSupplier;
1717
import net.minecraft.world.entity.ai.attributes.Attributes;
1818
import net.minecraft.world.entity.animal.Wolf;
19-
import net.minecraft.world.item.DyeColor;
2019
import net.minecraft.world.level.Level;
2120
import net.minecraft.world.level.LevelAccessor;
2221
import org.jetbrains.annotations.Nullable;

src/main/java/com/taiyitistmc/vanillaextra/init/ModItems.java

Lines changed: 39 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.taiyitistmc.vanillaextra.init;
22

33
import com.taiyitistmc.vanillaextra.VanillaExtra;
4+
import com.taiyitistmc.vanillaextra.item.BlackBloodItem;
45
import net.minecraft.world.entity.Entity;
56
import net.minecraft.world.entity.EntityType;
67
import net.minecraft.world.entity.Mob;
@@ -23,28 +24,44 @@ public class ModItems {
2324
registerFood("dried_land_kelp", Foods.BAKED_POTATO);
2425
public static final DeferredItem<Item> SAGO =
2526
registerFood("sago", Foods.POTATO);
26-
public static final DeferredItem<Item> BACON = registerFood("bacon", Foods.PORKCHOP);
27-
public static final DeferredItem<Item> COOKED_BACON = registerFood("cooked_bacon", Foods.COOKED_PORKCHOP);
28-
public static final DeferredItem<Item> BACON_AND_EGG = registerFood("bacon_and_egg", Foods.COOKED_BEEF);
29-
public static final DeferredItem<Item> WOLF_MEAT = registerFood("wolf_meat", Foods.BEEF);
30-
public static final DeferredItem<Item> COOKED_WOLF_MEAT = registerFood("cooked_wolf_meat", Foods.COOKED_BEEF);
31-
public static final DeferredItem<Item> HORSE_MEAT = registerFood("horse_meat", Foods.BEEF);
32-
public static final DeferredItem<Item> COOKED_HORSE_MEAT = registerFood("cooked_horse_meat", Foods.COOKED_BEEF);
33-
public static final DeferredItem<Item> SQUID_RAW = registerFood("squid_raw", Foods.COD);
34-
public static final DeferredItem<Item> SQUID_COOKED = registerFood("squid_cooked", Foods.COOKED_COD);
35-
public static final DeferredItem<Item> BAT_WING = registerFood("bat_wing", Foods.SALMON);
36-
public static final DeferredItem<Item> COOKED_BAT_WING = registerFood("cooked_bat_wing", Foods.COOKED_SALMON);
37-
public static final DeferredItem<Item> LLAMA_MEAT = registerFood("llama_meat", Foods.PORKCHOP);
38-
public static final DeferredItem<Item> COOKED_LLAMA_MEAT = registerFood("cooked_llama_meat", Foods.COOKED_PORKCHOP);
39-
public static final DeferredItem<Item> HUMAN_MEAT = registerFood("human_meat", Foods.PORKCHOP);
40-
public static final DeferredItem<Item> COOKED_HUMAN_MEAT = registerFood("cooked_human_meat", Foods.COOKED_PORKCHOP);
41-
public static final DeferredItem<Item> PEACH = registerFood("peach", Foods.APPLE);
42-
public static final DeferredItem<Item> PEACH_WOOD_SWORD = registerSword("peach_wood_sword", Tiers.WOOD, 4, -2.4F);
43-
public static final DeferredItem<Item> BLACK_DOG_SPAWN_EGG = registerSpawnEgg("black_dog_spawn_egg", ModEntities.BLACK_DOG,1315860, 4672845);
44-
45-
public static DeferredItem<Item> register(String name, Item item) {
46-
return ITEMS.register(name, () -> item);
47-
}
27+
public static final DeferredItem<Item> BACON =
28+
registerFood("bacon", Foods.PORKCHOP);
29+
public static final DeferredItem<Item> COOKED_BACON =
30+
registerFood("cooked_bacon", Foods.COOKED_PORKCHOP);
31+
public static final DeferredItem<Item> BACON_AND_EGG =
32+
registerFood("bacon_and_egg", Foods.COOKED_BEEF);
33+
public static final DeferredItem<Item> WOLF_MEAT =
34+
registerFood("wolf_meat", Foods.BEEF);
35+
public static final DeferredItem<Item> COOKED_WOLF_MEAT =
36+
registerFood("cooked_wolf_meat", Foods.COOKED_BEEF);
37+
public static final DeferredItem<Item> HORSE_MEAT =
38+
registerFood("horse_meat", Foods.BEEF);
39+
public static final DeferredItem<Item> COOKED_HORSE_MEAT =
40+
registerFood("cooked_horse_meat", Foods.COOKED_BEEF);
41+
public static final DeferredItem<Item> SQUID_RAW =
42+
registerFood("squid_raw", Foods.COD);
43+
public static final DeferredItem<Item> SQUID_COOKED =
44+
registerFood("squid_cooked", Foods.COOKED_COD);
45+
public static final DeferredItem<Item> BAT_WING =
46+
registerFood("bat_wing", Foods.SALMON);
47+
public static final DeferredItem<Item> COOKED_BAT_WING =
48+
registerFood("cooked_bat_wing", Foods.COOKED_SALMON);
49+
public static final DeferredItem<Item> LLAMA_MEAT =
50+
registerFood("llama_meat", Foods.PORKCHOP);
51+
public static final DeferredItem<Item> COOKED_LLAMA_MEAT =
52+
registerFood("cooked_llama_meat", Foods.COOKED_PORKCHOP);
53+
public static final DeferredItem<Item> HUMAN_MEAT =
54+
registerFood("human_meat", Foods.PORKCHOP);
55+
public static final DeferredItem<Item> COOKED_HUMAN_MEAT =
56+
registerFood("cooked_human_meat", Foods.COOKED_PORKCHOP);
57+
public static final DeferredItem<Item> PEACH =
58+
registerFood("peach", Foods.APPLE);
59+
public static final DeferredItem<Item> PEACH_WOOD_SWORD =
60+
registerSword("peach_wood_sword", Tiers.WOOD, 4, -2.4F);
61+
public static final DeferredItem<Item> BLACK_DOG_SPAWN_EGG =
62+
registerSpawnEgg("black_dog_spawn_egg", ModEntities.BLACK_DOG,1315860, 4672845);
63+
public static final DeferredItem<Item> BLACK_DOG_BLOOD =
64+
ITEMS.registerItem("black_dog_blood", properties -> new BlackBloodItem());
4865

4966
public static <T extends EntityType<? extends Mob>> DeferredItem<Item> registerSpawnEgg(String name, DeferredHolder<EntityType<? extends Entity>, T> entity, int backgroundColor, int highlightColor) {
5067
return ITEMS.registerItem(name, properties -> new DeferredSpawnEggItem(entity, backgroundColor, highlightColor, new Item.Properties()));
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
package com.taiyitistmc.vanillaextra.item;
2+
3+
import net.minecraft.advancements.CriteriaTriggers;
4+
import net.minecraft.server.level.ServerPlayer;
5+
import net.minecraft.stats.Stats;
6+
import net.minecraft.world.InteractionHand;
7+
import net.minecraft.world.InteractionResultHolder;
8+
import net.minecraft.world.entity.LivingEntity;
9+
import net.minecraft.world.entity.player.Player;
10+
import net.minecraft.world.food.Foods;
11+
import net.minecraft.world.item.Item;
12+
import net.minecraft.world.item.ItemStack;
13+
import net.minecraft.world.item.ItemUtils;
14+
import net.minecraft.world.item.UseAnim;
15+
import net.minecraft.world.level.Level;
16+
import net.neoforged.neoforge.common.EffectCures;
17+
18+
public class BlackBloodItem extends Item {
19+
20+
public BlackBloodItem() {
21+
super(new Item.Properties().food(Foods.MUSHROOM_STEW));
22+
}
23+
24+
25+
@Override
26+
public ItemStack finishUsingItem(ItemStack stack, Level level, LivingEntity entityLiving) {
27+
if (entityLiving instanceof ServerPlayer serverplayer) {
28+
CriteriaTriggers.CONSUME_ITEM.trigger(serverplayer, stack);
29+
serverplayer.awardStat(Stats.ITEM_USED.get(this));
30+
}
31+
32+
if (!level.isClientSide) {
33+
entityLiving.removeEffectsCuredBy(EffectCures.MILK);
34+
}
35+
36+
if (entityLiving instanceof Player player) {
37+
if (!player.getAbilities().instabuild) {
38+
stack.consume(1, entityLiving);
39+
}
40+
}
41+
return stack;
42+
}
43+
44+
@Override
45+
public int getUseDuration(ItemStack stack, LivingEntity entity) {
46+
return 32;
47+
}
48+
49+
@Override
50+
public UseAnim getUseAnimation(ItemStack stack) {
51+
return UseAnim.DRINK;
52+
}
53+
54+
@Override
55+
public InteractionResultHolder<ItemStack> use(Level level, Player player, InteractionHand hand) {
56+
return ItemUtils.startUsingInstantly(level, player, hand);
57+
}
58+
}

0 commit comments

Comments
 (0)