Skip to content

Commit 6512832

Browse files
authored
Merge pull request #2119
Fix fortuna extract and soft coating not knowing BE data
2 parents 79bfd0e + 593356a commit 6512832

8 files changed

Lines changed: 60 additions & 13 deletions

File tree

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -865,6 +865,7 @@
865865
"tooltip.bloodmagic.sacrificialdagger.desc": "Just a prick of the finger will suffice...",
866866
"tooltip.bloodmagic.sentientAxe.desc": "Uses demon will to unleash its full potential.",
867867
"tooltip.bloodmagic.sentientPickaxe.desc": "Uses demon will to unleash its full potential.",
868+
"tooltip.bloodmagic.sentientScythe.desc": "Uses demon will to unleash its full potential.",
868869
"tooltip.bloodmagic.sentientShovel.desc": "Uses demon will to unleash its full potential.",
869870
"tooltip.bloodmagic.sentientSword.desc": "Uses demon will to unleash its full potential.",
870871
"tooltip.bloodmagic.sigil.air.desc": "I feel lighter already...",
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"values": [
3+
"bloodmagic:soulscythe"
4+
]
5+
}

src/main/java/wayoftime/bloodmagic/BloodMagic.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,17 @@
11
package wayoftime.bloodmagic;
22

3+
import net.minecraft.Util;
34
import net.minecraft.core.HolderLookup;
5+
import net.minecraft.core.Position;
6+
import net.minecraft.core.dispenser.AbstractProjectileDispenseBehavior;
47
import net.minecraft.data.DataGenerator;
58
import net.minecraft.data.PackOutput;
69
import net.minecraft.resources.ResourceLocation;
10+
import net.minecraft.world.entity.projectile.Projectile;
11+
import net.minecraft.world.entity.projectile.Snowball;
712
import net.minecraft.world.item.ItemStack;
813
import net.minecraft.core.dispenser.DispenseItemBehavior;
14+
import net.minecraft.world.level.Level;
915
import net.minecraft.world.level.block.DispenserBlock;
1016
import net.minecraftforge.client.event.EntityRenderersEvent;
1117
import net.minecraftforge.client.event.ModelEvent.RegisterGeometryLoaders;
@@ -57,6 +63,7 @@
5763
import wayoftime.bloodmagic.core.recipe.IngredientBloodOrb;
5864
import wayoftime.bloodmagic.core.registry.AlchemyArrayRegistry;
5965
import wayoftime.bloodmagic.core.registry.OrbRegistry;
66+
import wayoftime.bloodmagic.entity.projectile.EntitySoulSnare;
6067
import wayoftime.bloodmagic.impl.BloodMagicAPI;
6168
import wayoftime.bloodmagic.impl.BloodMagicCorePlugin;
6269
import wayoftime.bloodmagic.loot.GlobalLootModifier;
@@ -234,6 +241,14 @@ private void setup(final FMLCommonSetupEvent event) {
234241
packetHandler.initialize();
235242
DispenserBlock.registerBehavior(BloodMagicItems.LIFE_ESSENCE_BUCKET.get(), DispenseFluidContainer.getInstance());
236243
DispenserBlock.registerBehavior(BloodMagicItems.DOUBT_BUCKET.get(), DispenseFluidContainer.getInstance());
244+
// adapted from Snowball behavior
245+
DispenserBlock.registerBehavior(BloodMagicItems.SOUL_SNARE.get(), new AbstractProjectileDispenseBehavior() {
246+
protected Projectile getProjectile(Level level, Position pos, ItemStack itemStack) {
247+
return Util.make(new EntitySoulSnare(level, pos.x(), pos.y(), pos.z()), (snare) -> {
248+
snare.setItem(itemStack);
249+
});
250+
}
251+
});
237252

238253
curiosLoaded = ModList.get().isLoaded("curios");
239254
}

src/main/java/wayoftime/bloodmagic/common/data/GeneratorItemTags.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -204,6 +204,7 @@ private void registerVanillaTools()
204204
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());
205205
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());
206206
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());
207+
tag(BloodMagicTags.SCYTHES).add(BloodMagicItems.SENTIENT_SCYTHE.get());
207208

208209
tag(Tags.Items.ARMORS_HELMETS).add(BloodMagicItems.LIVING_HELMET.get());
209210
tag(Tags.Items.ARMORS_CHESTPLATES).add(BloodMagicItems.LIVING_PLATE.get());

src/main/java/wayoftime/bloodmagic/common/data/GeneratorLanguage.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ protected void addTranslations()
8282
add("tooltip.bloodmagic.sentientAxe.desc", "Uses demon will to unleash its full potential.");
8383
add("tooltip.bloodmagic.sentientPickaxe.desc", "Uses demon will to unleash its full potential.");
8484
add("tooltip.bloodmagic.sentientShovel.desc", "Uses demon will to unleash its full potential.");
85+
add("tooltip.bloodmagic.sentientScythe.desc", "Uses demon will to unleash its full potential.");
8586
add("tooltip.bloodmagic.soulGem.petty", "A gem used to contain a little will.");
8687
add("tooltip.bloodmagic.soulGem.lesser", "A gem used to contain some will.");
8788
add("tooltip.bloodmagic.soulGem.common", "A gem used to contain more will.");

src/main/java/wayoftime/bloodmagic/common/recipe/ARCRecipeProvider.java

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -71,18 +71,18 @@ public void addRecipes(Consumer<FinishedRecipe> consumer)
7171
solidifyConcrete(consumer, Blocks.ORANGE_CONCRETE_POWDER, Blocks.ORANGE_CONCRETE);
7272
solidifyConcrete(consumer, Blocks.MAGENTA_CONCRETE_POWDER, Blocks.MAGENTA_CONCRETE);
7373
solidifyConcrete(consumer, Blocks.LIGHT_BLUE_CONCRETE_POWDER, Blocks.LIGHT_BLUE_CONCRETE);
74-
solidifyConcrete(consumer, Blocks.YELLOW_CONCRETE_POWDER, Blocks.YELLOW_CONCRETE_POWDER);
75-
solidifyConcrete(consumer, Blocks.LIME_CONCRETE_POWDER, Blocks.LIME_CONCRETE_POWDER);
76-
solidifyConcrete(consumer, Blocks.PINK_CONCRETE_POWDER, Blocks.PINK_CONCRETE_POWDER);
77-
solidifyConcrete(consumer, Blocks.GRAY_CONCRETE_POWDER, Blocks.GRAY_CONCRETE_POWDER);
78-
solidifyConcrete(consumer, Blocks.LIGHT_GRAY_CONCRETE_POWDER, Blocks.LIGHT_GRAY_CONCRETE_POWDER);
79-
solidifyConcrete(consumer, Blocks.CYAN_CONCRETE_POWDER, Blocks.CYAN_CONCRETE_POWDER);
80-
solidifyConcrete(consumer, Blocks.PURPLE_CONCRETE_POWDER, Blocks.PURPLE_CONCRETE_POWDER);
81-
solidifyConcrete(consumer, Blocks.BLUE_CONCRETE_POWDER, Blocks.BLUE_CONCRETE_POWDER);
82-
solidifyConcrete(consumer, Blocks.BROWN_CONCRETE_POWDER, Blocks.BROWN_CONCRETE_POWDER);
83-
solidifyConcrete(consumer, Blocks.GREEN_CONCRETE_POWDER, Blocks.GREEN_CONCRETE_POWDER);
84-
solidifyConcrete(consumer, Blocks.RED_CONCRETE_POWDER, Blocks.RED_CONCRETE_POWDER);
85-
solidifyConcrete(consumer, Blocks.BLACK_CONCRETE_POWDER, Blocks.BLACK_CONCRETE_POWDER);
74+
solidifyConcrete(consumer, Blocks.YELLOW_CONCRETE_POWDER, Blocks.YELLOW_CONCRETE);
75+
solidifyConcrete(consumer, Blocks.LIME_CONCRETE_POWDER, Blocks.LIME_CONCRETE);
76+
solidifyConcrete(consumer, Blocks.PINK_CONCRETE_POWDER, Blocks.PINK_CONCRETE);
77+
solidifyConcrete(consumer, Blocks.GRAY_CONCRETE_POWDER, Blocks.GRAY_CONCRETE);
78+
solidifyConcrete(consumer, Blocks.LIGHT_GRAY_CONCRETE_POWDER, Blocks.LIGHT_GRAY_CONCRETE);
79+
solidifyConcrete(consumer, Blocks.CYAN_CONCRETE_POWDER, Blocks.CYAN_CONCRETE);
80+
solidifyConcrete(consumer, Blocks.PURPLE_CONCRETE_POWDER, Blocks.PURPLE_CONCRETE);
81+
solidifyConcrete(consumer, Blocks.BLUE_CONCRETE_POWDER, Blocks.BLUE_CONCRETE);
82+
solidifyConcrete(consumer, Blocks.BROWN_CONCRETE_POWDER, Blocks.BROWN_CONCRETE);
83+
solidifyConcrete(consumer, Blocks.GREEN_CONCRETE_POWDER, Blocks.GREEN_CONCRETE);
84+
solidifyConcrete(consumer, Blocks.RED_CONCRETE_POWDER, Blocks.RED_CONCRETE);
85+
solidifyConcrete(consumer, Blocks.BLACK_CONCRETE_POWDER, Blocks.BLACK_CONCRETE);
8686

8787
ARCRecipeBuilder.arc(Ingredient.of(ItemTags.BEDS), hydration, cauldron_use, new ItemStack(Items.WHITE_BED), null).build(consumer, BloodMagic.rl(basePath + "wash_bed"));
8888
ARCRecipeBuilder.arc(Ingredient.of(ItemTags.WOOL), hydration, cauldron_use, new ItemStack(Items.WHITE_WOOL), null).build(consumer, BloodMagic.rl(basePath + "wash_wool"));

src/main/java/wayoftime/bloodmagic/common/tags/BloodMagicTags.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,7 @@ public class BloodMagicTags
132132
public static final TagKey<Item> SHOVELS = ItemTags.create(new ResourceLocation("forge:shovels"));
133133
public static final TagKey<Item> PICKAXES = ItemTags.create(new ResourceLocation("forge:pickaxes"));
134134
public static final TagKey<Item> HOES = ItemTags.create(new ResourceLocation("forge:hoes"));
135+
public static final TagKey<Item> SCYTHES = ItemTags.create(new ResourceLocation("forge:tool/scythes"));
135136

136137
// Modded (for meteor rituals)
137138
public static final TagKey<Item> ADVANCED_ALLOY = getForgeAlloyTag("advanced");

src/main/java/wayoftime/bloodmagic/loot/GlobalLootModifier.java

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,20 +4,23 @@
44
import com.mojang.serialization.Codec;
55
import com.mojang.serialization.codecs.RecordCodecBuilder;
66
import it.unimi.dsi.fastutil.objects.ObjectArrayList;
7+
import net.minecraft.core.BlockPos;
78
import net.minecraft.world.SimpleContainer;
89
import net.minecraft.world.item.ItemStack;
910
import net.minecraft.world.item.crafting.RecipeType;
1011
import net.minecraft.world.item.crafting.SmeltingRecipe;
1112
import net.minecraft.world.item.enchantment.Enchantment;
1213
import net.minecraft.world.item.enchantment.EnchantmentHelper;
1314
import net.minecraft.world.item.enchantment.Enchantments;
15+
import net.minecraft.world.level.block.entity.BlockEntity;
1416
import net.minecraft.world.level.block.state.BlockState;
1517
import net.minecraft.world.level.storage.loot.LootContext;
1618
import net.minecraft.world.level.storage.loot.LootParams;
1719
import net.minecraft.world.level.storage.loot.LootTable;
1820
import net.minecraft.world.level.storage.loot.parameters.LootContextParamSets;
1921
import net.minecraft.world.level.storage.loot.parameters.LootContextParams;
2022
import net.minecraft.world.level.storage.loot.predicates.LootItemCondition;
23+
import net.minecraft.world.phys.Vec3;
2124
import net.minecraftforge.common.loot.IGlobalLootModifier;
2225
import net.minecraftforge.common.loot.LootModifier;
2326
import net.minecraftforge.items.ItemHandlerHelper;
@@ -70,6 +73,16 @@ public SilkTouchTestModifier(LootItemCondition[] conditionsIn)
7073
fakeTool.enchant(Enchantments.SILK_TOUCH, 1);
7174
LootParams.Builder builder = new LootParams.Builder(context.getLevel());
7275
builder.withParameter(LootContextParams.TOOL, fakeTool);
76+
77+
Vec3 vec = context.getParam(LootContextParams.ORIGIN);
78+
if (vec != null) {
79+
BlockPos pos = BlockPos.containing(vec);
80+
BlockEntity be = context.getLevel().getBlockEntity(pos);
81+
if (be != null) {
82+
builder.withParameter(LootContextParams.BLOCK_ENTITY, be);
83+
}
84+
}
85+
7386
LootParams ctx = builder.create(LootContextParamSets.EMPTY);
7487
LootTable loottable = context.getLevel().getServer().getLootData().getLootTable(context.getParamOrNull(LootContextParams.BLOCK_STATE).getBlock().getLootTable());
7588
return loottable.getRandomItems(ctx);
@@ -129,7 +142,17 @@ public FortuneModifier(LootItemCondition[] conditionsIn)
129142

130143
LootParams.Builder builder = new LootParams.Builder(context.getLevel());
131144
builder.withParameter(LootContextParams.TOOL, fakeTool);
132-
LootParams ctx = builder.create(LootContextParamSets.EMPTY);
145+
146+
Vec3 vec = context.getParam(LootContextParams.ORIGIN);
147+
if (vec != null) {
148+
BlockPos pos = BlockPos.containing(vec);
149+
BlockEntity be = context.getLevel().getBlockEntity(pos);
150+
if (be != null) {
151+
builder.withParameter(LootContextParams.BLOCK_ENTITY, be);
152+
}
153+
}
154+
155+
LootParams ctx = builder.create(LootContextParamSets.EMPTY);
133156
LootTable loottable = context.getLevel().getServer().getLootData().getLootTable(context.getParamOrNull(LootContextParams.BLOCK_STATE).getBlock().getLootTable());
134157
return loottable.getRandomItems(ctx);
135158
}

0 commit comments

Comments
 (0)