From f8c1560ae12cc03646c503a55ac4908c7c313f5e Mon Sep 17 00:00:00 2001 From: stellanera Date: Mon, 10 Nov 2025 20:47:30 +0100 Subject: [PATCH 1/3] fixing fortuna extract and soft coating not knowing about BEs --- .../bloodmagic/loot/GlobalLootModifier.java | 25 ++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/src/main/java/wayoftime/bloodmagic/loot/GlobalLootModifier.java b/src/main/java/wayoftime/bloodmagic/loot/GlobalLootModifier.java index 39f7d37162..1ff690d245 100644 --- a/src/main/java/wayoftime/bloodmagic/loot/GlobalLootModifier.java +++ b/src/main/java/wayoftime/bloodmagic/loot/GlobalLootModifier.java @@ -4,6 +4,7 @@ import com.mojang.serialization.Codec; import com.mojang.serialization.codecs.RecordCodecBuilder; import it.unimi.dsi.fastutil.objects.ObjectArrayList; +import net.minecraft.core.BlockPos; import net.minecraft.world.SimpleContainer; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.crafting.RecipeType; @@ -11,6 +12,7 @@ import net.minecraft.world.item.enchantment.Enchantment; import net.minecraft.world.item.enchantment.EnchantmentHelper; import net.minecraft.world.item.enchantment.Enchantments; +import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.storage.loot.LootContext; import net.minecraft.world.level.storage.loot.LootParams; @@ -18,6 +20,7 @@ import net.minecraft.world.level.storage.loot.parameters.LootContextParamSets; import net.minecraft.world.level.storage.loot.parameters.LootContextParams; import net.minecraft.world.level.storage.loot.predicates.LootItemCondition; +import net.minecraft.world.phys.Vec3; import net.minecraftforge.common.loot.IGlobalLootModifier; import net.minecraftforge.common.loot.LootModifier; import net.minecraftforge.items.ItemHandlerHelper; @@ -70,6 +73,16 @@ public SilkTouchTestModifier(LootItemCondition[] conditionsIn) fakeTool.enchant(Enchantments.SILK_TOUCH, 1); LootParams.Builder builder = new LootParams.Builder(context.getLevel()); builder.withParameter(LootContextParams.TOOL, fakeTool); + + Vec3 vec = context.getParam(LootContextParams.ORIGIN); + if (vec != null) { + BlockPos pos = BlockPos.containing(vec); + BlockEntity be = context.getLevel().getBlockEntity(pos); + if (be != null) { + builder.withParameter(LootContextParams.BLOCK_ENTITY, be); + } + } + LootParams ctx = builder.create(LootContextParamSets.EMPTY); LootTable loottable = context.getLevel().getServer().getLootData().getLootTable(context.getParamOrNull(LootContextParams.BLOCK_STATE).getBlock().getLootTable()); return loottable.getRandomItems(ctx); @@ -129,7 +142,17 @@ public FortuneModifier(LootItemCondition[] conditionsIn) LootParams.Builder builder = new LootParams.Builder(context.getLevel()); builder.withParameter(LootContextParams.TOOL, fakeTool); - LootParams ctx = builder.create(LootContextParamSets.EMPTY); + + Vec3 vec = context.getParam(LootContextParams.ORIGIN); + if (vec != null) { + BlockPos pos = BlockPos.containing(vec); + BlockEntity be = context.getLevel().getBlockEntity(pos); + if (be != null) { + builder.withParameter(LootContextParams.BLOCK_ENTITY, be); + } + } + + LootParams ctx = builder.create(LootContextParamSets.EMPTY); LootTable loottable = context.getLevel().getServer().getLootData().getLootTable(context.getParamOrNull(LootContextParams.BLOCK_STATE).getBlock().getLootTable()); return loottable.getRandomItems(ctx); } From 437df016a8b883df289ac5e1c9dbcffa6a3aec42 Mon Sep 17 00:00:00 2001 From: stellanera Date: Tue, 11 Nov 2025 01:42:58 +0100 Subject: [PATCH 2/3] dispense soul snares --- .../java/wayoftime/bloodmagic/BloodMagic.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/main/java/wayoftime/bloodmagic/BloodMagic.java b/src/main/java/wayoftime/bloodmagic/BloodMagic.java index 844b7c9609..0314c9e962 100644 --- a/src/main/java/wayoftime/bloodmagic/BloodMagic.java +++ b/src/main/java/wayoftime/bloodmagic/BloodMagic.java @@ -1,11 +1,17 @@ package wayoftime.bloodmagic; +import net.minecraft.Util; import net.minecraft.core.HolderLookup; +import net.minecraft.core.Position; +import net.minecraft.core.dispenser.AbstractProjectileDispenseBehavior; import net.minecraft.data.DataGenerator; import net.minecraft.data.PackOutput; import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.projectile.Projectile; +import net.minecraft.world.entity.projectile.Snowball; import net.minecraft.world.item.ItemStack; import net.minecraft.core.dispenser.DispenseItemBehavior; +import net.minecraft.world.level.Level; import net.minecraft.world.level.block.DispenserBlock; import net.minecraftforge.client.event.EntityRenderersEvent; import net.minecraftforge.client.event.ModelEvent.RegisterGeometryLoaders; @@ -57,6 +63,7 @@ import wayoftime.bloodmagic.core.recipe.IngredientBloodOrb; import wayoftime.bloodmagic.core.registry.AlchemyArrayRegistry; import wayoftime.bloodmagic.core.registry.OrbRegistry; +import wayoftime.bloodmagic.entity.projectile.EntitySoulSnare; import wayoftime.bloodmagic.impl.BloodMagicAPI; import wayoftime.bloodmagic.impl.BloodMagicCorePlugin; import wayoftime.bloodmagic.loot.GlobalLootModifier; @@ -234,6 +241,14 @@ private void setup(final FMLCommonSetupEvent event) { packetHandler.initialize(); DispenserBlock.registerBehavior(BloodMagicItems.LIFE_ESSENCE_BUCKET.get(), DispenseFluidContainer.getInstance()); DispenserBlock.registerBehavior(BloodMagicItems.DOUBT_BUCKET.get(), DispenseFluidContainer.getInstance()); + // adapted from Snowball behavior + DispenserBlock.registerBehavior(BloodMagicItems.SOUL_SNARE.get(), new AbstractProjectileDispenseBehavior() { + protected Projectile getProjectile(Level level, Position pos, ItemStack itemStack) { + return Util.make(new EntitySoulSnare(level, pos.x(), pos.y(), pos.z()), (snare) -> { + snare.setItem(itemStack); + }); + } + }); curiosLoaded = ModList.get().isLoaded("curios"); } From 593356a38c181d8d0ef4a717ac7d353112acd2e7 Mon Sep 17 00:00:00 2001 From: stellanera Date: Tue, 11 Nov 2025 02:05:59 +0100 Subject: [PATCH 3/3] fix data stuff --- .../assets/bloodmagic/lang/en_us.json | 1 + .../data/forge/tags/items/tool/scythes.json | 5 ++++ .../common/data/GeneratorItemTags.java | 1 + .../common/data/GeneratorLanguage.java | 1 + .../common/recipe/ARCRecipeProvider.java | 24 +++++++++---------- .../common/tags/BloodMagicTags.java | 1 + 6 files changed, 21 insertions(+), 12 deletions(-) create mode 100644 src/generated/resources/data/forge/tags/items/tool/scythes.json diff --git a/src/generated/resources/assets/bloodmagic/lang/en_us.json b/src/generated/resources/assets/bloodmagic/lang/en_us.json index 212c2c095e..f2292d2dc3 100644 --- a/src/generated/resources/assets/bloodmagic/lang/en_us.json +++ b/src/generated/resources/assets/bloodmagic/lang/en_us.json @@ -865,6 +865,7 @@ "tooltip.bloodmagic.sacrificialdagger.desc": "Just a prick of the finger will suffice...", "tooltip.bloodmagic.sentientAxe.desc": "Uses demon will to unleash its full potential.", "tooltip.bloodmagic.sentientPickaxe.desc": "Uses demon will to unleash its full potential.", + "tooltip.bloodmagic.sentientScythe.desc": "Uses demon will to unleash its full potential.", "tooltip.bloodmagic.sentientShovel.desc": "Uses demon will to unleash its full potential.", "tooltip.bloodmagic.sentientSword.desc": "Uses demon will to unleash its full potential.", "tooltip.bloodmagic.sigil.air.desc": "I feel lighter already...", diff --git a/src/generated/resources/data/forge/tags/items/tool/scythes.json b/src/generated/resources/data/forge/tags/items/tool/scythes.json new file mode 100644 index 0000000000..360e6cd7ff --- /dev/null +++ b/src/generated/resources/data/forge/tags/items/tool/scythes.json @@ -0,0 +1,5 @@ +{ + "values": [ + "bloodmagic:soulscythe" + ] +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/common/data/GeneratorItemTags.java b/src/main/java/wayoftime/bloodmagic/common/data/GeneratorItemTags.java index 0a62363b4b..5e7e835f12 100644 --- a/src/main/java/wayoftime/bloodmagic/common/data/GeneratorItemTags.java +++ b/src/main/java/wayoftime/bloodmagic/common/data/GeneratorItemTags.java @@ -204,6 +204,7 @@ private void registerVanillaTools() tag(BloodMagicTags.SHOVELS).add(Items.DIAMOND_SHOVEL, Items.GOLDEN_SHOVEL, Items.IRON_SHOVEL, Items.NETHERITE_SHOVEL, Items.STONE_SHOVEL, Items.WOODEN_SHOVEL, BloodMagicItems.SENTIENT_SHOVEL.get()); tag(BloodMagicTags.PICKAXES).add(Items.DIAMOND_PICKAXE, Items.GOLDEN_PICKAXE, Items.IRON_PICKAXE, Items.NETHERITE_PICKAXE, Items.STONE_PICKAXE, Items.WOODEN_PICKAXE, BloodMagicItems.SENTIENT_PICKAXE.get()); tag(BloodMagicTags.HOES).add(Items.DIAMOND_HOE, Items.GOLDEN_HOE, Items.IRON_HOE, Items.NETHERITE_HOE, Items.STONE_HOE, Items.WOODEN_HOE, BloodMagicItems.SENTIENT_SCYTHE.get()); + tag(BloodMagicTags.SCYTHES).add(BloodMagicItems.SENTIENT_SCYTHE.get()); tag(Tags.Items.ARMORS_HELMETS).add(BloodMagicItems.LIVING_HELMET.get()); tag(Tags.Items.ARMORS_CHESTPLATES).add(BloodMagicItems.LIVING_PLATE.get()); diff --git a/src/main/java/wayoftime/bloodmagic/common/data/GeneratorLanguage.java b/src/main/java/wayoftime/bloodmagic/common/data/GeneratorLanguage.java index 456f9381b2..7f0043822d 100644 --- a/src/main/java/wayoftime/bloodmagic/common/data/GeneratorLanguage.java +++ b/src/main/java/wayoftime/bloodmagic/common/data/GeneratorLanguage.java @@ -82,6 +82,7 @@ protected void addTranslations() add("tooltip.bloodmagic.sentientAxe.desc", "Uses demon will to unleash its full potential."); add("tooltip.bloodmagic.sentientPickaxe.desc", "Uses demon will to unleash its full potential."); add("tooltip.bloodmagic.sentientShovel.desc", "Uses demon will to unleash its full potential."); + add("tooltip.bloodmagic.sentientScythe.desc", "Uses demon will to unleash its full potential."); add("tooltip.bloodmagic.soulGem.petty", "A gem used to contain a little will."); add("tooltip.bloodmagic.soulGem.lesser", "A gem used to contain some will."); add("tooltip.bloodmagic.soulGem.common", "A gem used to contain more will."); diff --git a/src/main/java/wayoftime/bloodmagic/common/recipe/ARCRecipeProvider.java b/src/main/java/wayoftime/bloodmagic/common/recipe/ARCRecipeProvider.java index 17beb596d5..e38b9b5dda 100644 --- a/src/main/java/wayoftime/bloodmagic/common/recipe/ARCRecipeProvider.java +++ b/src/main/java/wayoftime/bloodmagic/common/recipe/ARCRecipeProvider.java @@ -71,18 +71,18 @@ public void addRecipes(Consumer consumer) solidifyConcrete(consumer, Blocks.ORANGE_CONCRETE_POWDER, Blocks.ORANGE_CONCRETE); solidifyConcrete(consumer, Blocks.MAGENTA_CONCRETE_POWDER, Blocks.MAGENTA_CONCRETE); solidifyConcrete(consumer, Blocks.LIGHT_BLUE_CONCRETE_POWDER, Blocks.LIGHT_BLUE_CONCRETE); - solidifyConcrete(consumer, Blocks.YELLOW_CONCRETE_POWDER, Blocks.YELLOW_CONCRETE_POWDER); - solidifyConcrete(consumer, Blocks.LIME_CONCRETE_POWDER, Blocks.LIME_CONCRETE_POWDER); - solidifyConcrete(consumer, Blocks.PINK_CONCRETE_POWDER, Blocks.PINK_CONCRETE_POWDER); - solidifyConcrete(consumer, Blocks.GRAY_CONCRETE_POWDER, Blocks.GRAY_CONCRETE_POWDER); - solidifyConcrete(consumer, Blocks.LIGHT_GRAY_CONCRETE_POWDER, Blocks.LIGHT_GRAY_CONCRETE_POWDER); - solidifyConcrete(consumer, Blocks.CYAN_CONCRETE_POWDER, Blocks.CYAN_CONCRETE_POWDER); - solidifyConcrete(consumer, Blocks.PURPLE_CONCRETE_POWDER, Blocks.PURPLE_CONCRETE_POWDER); - solidifyConcrete(consumer, Blocks.BLUE_CONCRETE_POWDER, Blocks.BLUE_CONCRETE_POWDER); - solidifyConcrete(consumer, Blocks.BROWN_CONCRETE_POWDER, Blocks.BROWN_CONCRETE_POWDER); - solidifyConcrete(consumer, Blocks.GREEN_CONCRETE_POWDER, Blocks.GREEN_CONCRETE_POWDER); - solidifyConcrete(consumer, Blocks.RED_CONCRETE_POWDER, Blocks.RED_CONCRETE_POWDER); - solidifyConcrete(consumer, Blocks.BLACK_CONCRETE_POWDER, Blocks.BLACK_CONCRETE_POWDER); + solidifyConcrete(consumer, Blocks.YELLOW_CONCRETE_POWDER, Blocks.YELLOW_CONCRETE); + solidifyConcrete(consumer, Blocks.LIME_CONCRETE_POWDER, Blocks.LIME_CONCRETE); + solidifyConcrete(consumer, Blocks.PINK_CONCRETE_POWDER, Blocks.PINK_CONCRETE); + solidifyConcrete(consumer, Blocks.GRAY_CONCRETE_POWDER, Blocks.GRAY_CONCRETE); + solidifyConcrete(consumer, Blocks.LIGHT_GRAY_CONCRETE_POWDER, Blocks.LIGHT_GRAY_CONCRETE); + solidifyConcrete(consumer, Blocks.CYAN_CONCRETE_POWDER, Blocks.CYAN_CONCRETE); + solidifyConcrete(consumer, Blocks.PURPLE_CONCRETE_POWDER, Blocks.PURPLE_CONCRETE); + solidifyConcrete(consumer, Blocks.BLUE_CONCRETE_POWDER, Blocks.BLUE_CONCRETE); + solidifyConcrete(consumer, Blocks.BROWN_CONCRETE_POWDER, Blocks.BROWN_CONCRETE); + solidifyConcrete(consumer, Blocks.GREEN_CONCRETE_POWDER, Blocks.GREEN_CONCRETE); + solidifyConcrete(consumer, Blocks.RED_CONCRETE_POWDER, Blocks.RED_CONCRETE); + solidifyConcrete(consumer, Blocks.BLACK_CONCRETE_POWDER, Blocks.BLACK_CONCRETE); ARCRecipeBuilder.arc(Ingredient.of(ItemTags.BEDS), hydration, cauldron_use, new ItemStack(Items.WHITE_BED), null).build(consumer, BloodMagic.rl(basePath + "wash_bed")); ARCRecipeBuilder.arc(Ingredient.of(ItemTags.WOOL), hydration, cauldron_use, new ItemStack(Items.WHITE_WOOL), null).build(consumer, BloodMagic.rl(basePath + "wash_wool")); diff --git a/src/main/java/wayoftime/bloodmagic/common/tags/BloodMagicTags.java b/src/main/java/wayoftime/bloodmagic/common/tags/BloodMagicTags.java index 5f0f803afb..de1e68958e 100644 --- a/src/main/java/wayoftime/bloodmagic/common/tags/BloodMagicTags.java +++ b/src/main/java/wayoftime/bloodmagic/common/tags/BloodMagicTags.java @@ -132,6 +132,7 @@ public class BloodMagicTags public static final TagKey SHOVELS = ItemTags.create(new ResourceLocation("forge:shovels")); public static final TagKey PICKAXES = ItemTags.create(new ResourceLocation("forge:pickaxes")); public static final TagKey HOES = ItemTags.create(new ResourceLocation("forge:hoes")); + public static final TagKey SCYTHES = ItemTags.create(new ResourceLocation("forge:tool/scythes")); // Modded (for meteor rituals) public static final TagKey ADVANCED_ALLOY = getForgeAlloyTag("advanced");