Fixed the Blood Altar not inputting Fluids properly.

Also added the Vein Mining charge.
This commit is contained in:
WayofTime 2021-01-23 17:54:32 -05:00
parent 4749eecccf
commit 2c3af715d7
23 changed files with 346 additions and 9 deletions

View file

@ -2,6 +2,7 @@
Version 3.1.0 Version 3.1.0
------------------------------------------------------ ------------------------------------------------------
- Fixed Plunderer's Glint - Fixed Plunderer's Glint
- Fixed the Blood Altar not being able to input fluids. About time, Way!
------------------------------------------------------ ------------------------------------------------------

View file

@ -52,13 +52,14 @@ d2e2e78bd859c321a72f40fbb17ca79292d58031 assets/bloodmagic/blockstates/shaped_ch
f1ca47098385a955155cab9c2a97219e02d390a0 assets/bloodmagic/blockstates/steadfastdemoncrystal.json f1ca47098385a955155cab9c2a97219e02d390a0 assets/bloodmagic/blockstates/steadfastdemoncrystal.json
297bc2425f7b07b1a9dd3f7f6649c44f88dbac29 assets/bloodmagic/blockstates/stonebrickpath.json 297bc2425f7b07b1a9dd3f7f6649c44f88dbac29 assets/bloodmagic/blockstates/stonebrickpath.json
e3256db10fc8a8ab540f6ac8d27e0f47861e817a assets/bloodmagic/blockstates/stonetilepath.json e3256db10fc8a8ab540f6ac8d27e0f47861e817a assets/bloodmagic/blockstates/stonetilepath.json
6989c4e23e5405772a8601ea88f071a479ed3fa9 assets/bloodmagic/blockstates/veinmine_charge.json
48ed6b25a5d8d8074c38d772fdc27c1753d42c36 assets/bloodmagic/blockstates/vengefuldemoncrystal.json 48ed6b25a5d8d8074c38d772fdc27c1753d42c36 assets/bloodmagic/blockstates/vengefuldemoncrystal.json
e6d9cf699667aaa47efff37b2b033895dee29c15 assets/bloodmagic/blockstates/waterritualstone.json e6d9cf699667aaa47efff37b2b033895dee29c15 assets/bloodmagic/blockstates/waterritualstone.json
74c889434f46e060e8f185e8ef674312eb2f1192 assets/bloodmagic/blockstates/woodbrickpath.json 74c889434f46e060e8f185e8ef674312eb2f1192 assets/bloodmagic/blockstates/woodbrickpath.json
42f26f715bddd16c069f9b51e3767b36477c8908 assets/bloodmagic/blockstates/woodtilepath.json 42f26f715bddd16c069f9b51e3767b36477c8908 assets/bloodmagic/blockstates/woodtilepath.json
3c6ce233dae6c1307d9016406c324bbe844b4e1e assets/bloodmagic/blockstates/wornstonebrickpath.json 3c6ce233dae6c1307d9016406c324bbe844b4e1e assets/bloodmagic/blockstates/wornstonebrickpath.json
d59655f12d1724b73b77c373fb6864fcff69db12 assets/bloodmagic/blockstates/wornstonetilepath.json d59655f12d1724b73b77c373fb6864fcff69db12 assets/bloodmagic/blockstates/wornstonetilepath.json
6018c5727249da4191f055bc7be11a67af18513b assets/bloodmagic/lang/en_us.json ecf65a425fa9999726baa714503e7bd701c169ce assets/bloodmagic/lang/en_us.json
34445195b9f2459475cde53454bc8e37d32865d7 assets/bloodmagic/models/block/accelerationrune.json 34445195b9f2459475cde53454bc8e37d32865d7 assets/bloodmagic/models/block/accelerationrune.json
bcdbccc49d4509571be6988762ab87126275a4c8 assets/bloodmagic/models/block/airritualstone.json bcdbccc49d4509571be6988762ab87126275a4c8 assets/bloodmagic/models/block/airritualstone.json
adf6c0b1e25451609486dc8c8cfbd9cf0f8c67f4 assets/bloodmagic/models/block/alchemicalreactionchamber.json adf6c0b1e25451609486dc8c8cfbd9cf0f8c67f4 assets/bloodmagic/models/block/alchemicalreactionchamber.json
@ -181,6 +182,7 @@ d6238c0661560abd991d534ef6c8836f4655a7e7 assets/bloodmagic/models/block/sentient
65fe5e01ed2660e45a5c329ff2389a87e4d791ec assets/bloodmagic/models/block/speedrune.json 65fe5e01ed2660e45a5c329ff2389a87e4d791ec assets/bloodmagic/models/block/speedrune.json
c5d2b0e33500a5c51046cd606e0d1272ec0dddd6 assets/bloodmagic/models/block/stonebrickpath.json c5d2b0e33500a5c51046cd606e0d1272ec0dddd6 assets/bloodmagic/models/block/stonebrickpath.json
359e28e79778961f57c6369b5d1b68218972fccb assets/bloodmagic/models/block/stonetilepath.json 359e28e79778961f57c6369b5d1b68218972fccb assets/bloodmagic/models/block/stonetilepath.json
d8c8cb24e0e8479ec620b4cd8d5a6f5abb1a2dcb assets/bloodmagic/models/block/veinmine_charge.json
6041f2e47f5437d90a58586e42d18dadc42df439 assets/bloodmagic/models/block/waterritualstone.json 6041f2e47f5437d90a58586e42d18dadc42df439 assets/bloodmagic/models/block/waterritualstone.json
d77cdb168a084aeb962be6ad7b4f41b181837be6 assets/bloodmagic/models/block/woodbrickpath.json d77cdb168a084aeb962be6ad7b4f41b181837be6 assets/bloodmagic/models/block/woodbrickpath.json
e54a4f2b3cd405c69782662b1b0d57e24f7c2524 assets/bloodmagic/models/block/woodtilepath.json e54a4f2b3cd405c69782662b1b0d57e24f7c2524 assets/bloodmagic/models/block/woodtilepath.json
@ -406,6 +408,7 @@ ec6f6bf7f520182b2044f3cc5a10f1d4c7a8d7ab assets/bloodmagic/models/item/variants/
7d22fdba9bb8593c247a0b33df11f3b26a16c254 assets/bloodmagic/models/item/variants/soulsword_steadfast_deactivated.json 7d22fdba9bb8593c247a0b33df11f3b26a16c254 assets/bloodmagic/models/item/variants/soulsword_steadfast_deactivated.json
2029220112f89a3f4d432ab4749dff6143846659 assets/bloodmagic/models/item/variants/soulsword_vengeful_activated.json 2029220112f89a3f4d432ab4749dff6143846659 assets/bloodmagic/models/item/variants/soulsword_vengeful_activated.json
0f5a3e1e5993a03ccda156eed855b71fbd0be0a2 assets/bloodmagic/models/item/variants/soulsword_vengeful_deactivated.json 0f5a3e1e5993a03ccda156eed855b71fbd0be0a2 assets/bloodmagic/models/item/variants/soulsword_vengeful_deactivated.json
81776d7be5f2d13e44622a6d38929821bc78ae7d assets/bloodmagic/models/item/veinmine_charge.json
16bde91467016c6012fe2b618c898d0340043492 assets/bloodmagic/models/item/vengefulcrystal.json 16bde91467016c6012fe2b618c898d0340043492 assets/bloodmagic/models/item/vengefulcrystal.json
11e3347147e079093c4fa12018412071db22a4f5 assets/bloodmagic/models/item/vengefuldemoncrystal.json 11e3347147e079093c4fa12018412071db22a4f5 assets/bloodmagic/models/item/vengefuldemoncrystal.json
9019dcd2f21b03e703ceeee1ea3199de72110268 assets/bloodmagic/models/item/voidsigil.json 9019dcd2f21b03e703ceeee1ea3199de72110268 assets/bloodmagic/models/item/voidsigil.json
@ -521,6 +524,7 @@ f748a5ba8838b50de0502f132fe2a65f4726dae6 data/bloodmagic/loot_tables/blocks/soul
128ec3ee93e927d457beeb8161e80706e9239760 data/bloodmagic/loot_tables/blocks/steadfastdemoncrystal.json 128ec3ee93e927d457beeb8161e80706e9239760 data/bloodmagic/loot_tables/blocks/steadfastdemoncrystal.json
8849e41b699c2eb7c3712a8e862bd9dd309a5c31 data/bloodmagic/loot_tables/blocks/stonebrickpath.json 8849e41b699c2eb7c3712a8e862bd9dd309a5c31 data/bloodmagic/loot_tables/blocks/stonebrickpath.json
6149fd464bafaabf35ca431202680c84cf5441b1 data/bloodmagic/loot_tables/blocks/stonetilepath.json 6149fd464bafaabf35ca431202680c84cf5441b1 data/bloodmagic/loot_tables/blocks/stonetilepath.json
10b636d364f9ff72eb6db34f6f5e6aca704fc621 data/bloodmagic/loot_tables/blocks/veinmine_charge.json
33a22d9b198c93ed07ac69b7a594bb08db64b239 data/bloodmagic/loot_tables/blocks/vengefuldemoncrystal.json 33a22d9b198c93ed07ac69b7a594bb08db64b239 data/bloodmagic/loot_tables/blocks/vengefuldemoncrystal.json
26e3f34021426def32602e5ae7755e4672878320 data/bloodmagic/loot_tables/blocks/waterritualstone.json 26e3f34021426def32602e5ae7755e4672878320 data/bloodmagic/loot_tables/blocks/waterritualstone.json
04c5bc02383ddff04588af3a048ee3973e69666f data/bloodmagic/loot_tables/blocks/woodbrickpath.json 04c5bc02383ddff04588af3a048ee3973e69666f data/bloodmagic/loot_tables/blocks/woodbrickpath.json
@ -691,6 +695,7 @@ d6e06747c75fc06e708a15358911f1c63eee86b1 data/bloodmagic/recipes/soulforge/petty
7e281841a2953c1284d332c2bbf75097f8128241 data/bloodmagic/recipes/soulforge/sentientsword.json 7e281841a2953c1284d332c2bbf75097f8128241 data/bloodmagic/recipes/soulforge/sentientsword.json
dc977e9d98fcba66fbcce3f6c31a746db5ed60f5 data/bloodmagic/recipes/soulforge/shaped_charge.json dc977e9d98fcba66fbcce3f6c31a746db5ed60f5 data/bloodmagic/recipes/soulforge/shaped_charge.json
c4102a1573e632d0b9f894353b0d522a51a7c65e data/bloodmagic/recipes/soulforge/steadfast_crystal_block.json c4102a1573e632d0b9f894353b0d522a51a7c65e data/bloodmagic/recipes/soulforge/steadfast_crystal_block.json
978033adf58e34fa317bcea448ac1ddf3f0cd69e data/bloodmagic/recipes/soulforge/vein_charge.json
3aa852edda803a2225ebe53d2daa55bd46b0a1b9 data/bloodmagic/recipes/soulforge/vengeful_crystal_block.json 3aa852edda803a2225ebe53d2daa55bd46b0a1b9 data/bloodmagic/recipes/soulforge/vengeful_crystal_block.json
d7d993bb729284a5201c164ea81fbe1d8e4e4750 data/bloodmagic/recipes/weak_activation_crystal.json d7d993bb729284a5201c164ea81fbe1d8e4e4750 data/bloodmagic/recipes/weak_activation_crystal.json
cf63fdccec992f2cb36c72843791623463cecc44 data/bloodmagic/tags/items/arc/cuttingfluid.json cf63fdccec992f2cb36c72843791623463cecc44 data/bloodmagic/tags/items/arc/cuttingfluid.json

View file

@ -0,0 +1,29 @@
{
"variants": {
"attached=down": {
"model": "bloodmagic:block/veinmine_charge",
"x": 180
},
"attached=up": {
"model": "bloodmagic:block/veinmine_charge"
},
"attached=north": {
"model": "bloodmagic:block/veinmine_charge",
"x": 90
},
"attached=south": {
"model": "bloodmagic:block/veinmine_charge",
"x": 270
},
"attached=west": {
"model": "bloodmagic:block/veinmine_charge",
"x": 90,
"y": 270
},
"attached=east": {
"model": "bloodmagic:block/veinmine_charge",
"x": 90,
"y": 90
}
}
}

View file

@ -64,6 +64,7 @@
"block.bloodmagic.steadfastdemoncrystal": "Steadfast Crystal Cluster", "block.bloodmagic.steadfastdemoncrystal": "Steadfast Crystal Cluster",
"block.bloodmagic.stonebrickpath": "Stone Path", "block.bloodmagic.stonebrickpath": "Stone Path",
"block.bloodmagic.stonetilepath": "Tiled Stone Path", "block.bloodmagic.stonetilepath": "Tiled Stone Path",
"block.bloodmagic.veinmine_charge": "Vein Charge",
"block.bloodmagic.vengefuldemoncrystal": "Vengeful Crystal Cluster", "block.bloodmagic.vengefuldemoncrystal": "Vengeful Crystal Cluster",
"block.bloodmagic.waterritualstone": "Water Ritual Stone", "block.bloodmagic.waterritualstone": "Water Ritual Stone",
"block.bloodmagic.woodbrickpath": "Wooden Path", "block.bloodmagic.woodbrickpath": "Wooden Path",
@ -279,10 +280,10 @@
"ritual.bloodmagic.crystalHarvestRitual.info": "Breaks Demon Will crystal clusters within its range, dropping the results on top of the crystals.", "ritual.bloodmagic.crystalHarvestRitual.info": "Breaks Demon Will crystal clusters within its range, dropping the results on top of the crystals.",
"ritual.bloodmagic.crystalSplitRitual": "Resonance of the Faceted Crystal", "ritual.bloodmagic.crystalSplitRitual": "Resonance of the Faceted Crystal",
"ritual.bloodmagic.crystalSplitRitual.info": "Splits apart a well-grown Raw crystal cluster into seperal aspected crystal clusters.", "ritual.bloodmagic.crystalSplitRitual.info": "Splits apart a well-grown Raw crystal cluster into seperal aspected crystal clusters.",
"ritual.bloodmagic.ellipseRitual": "Focus of the Ellipsoid",
"ritual.bloodmagic.ellipseRitual.chest.info": "(Chest) The location of the inventory that the ritual will grab blocks from to place in the world.", "ritual.bloodmagic.ellipseRitual.chest.info": "(Chest) The location of the inventory that the ritual will grab blocks from to place in the world.",
"ritual.bloodmagic.ellipseRitual.info": "Creates a hollow spheroid around the ritual using the blocks in the attached chest.", "ritual.bloodmagic.ellipseRitual.info": "Creates a hollow spheroid around the ritual using the blocks in the attached chest.",
"ritual.bloodmagic.ellipseRitual.spheroidRange.info": "(Placement) The range that the ritual will place its blocks in. Spheroid is centered on the ritual - if one side is shorter than the side opposite the spheroid is truncated.", "ritual.bloodmagic.ellipseRitual.spheroidRange.info": "(Placement) The range that the ritual will place its blocks in. Spheroid is centered on the ritual - if one side is shorter than the side opposite the spheroid is truncated.",
"ritual.bloodmagic.ellipsoidRitual": "Focus of the Ellipsoid",
"ritual.bloodmagic.eternalSoulRitual.info": "Capable of transferring Life Essence from a Network back into an Altar at a cost.", "ritual.bloodmagic.eternalSoulRitual.info": "Capable of transferring Life Essence from a Network back into an Altar at a cost.",
"ritual.bloodmagic.expulsionRitual": "Aura of Expulsion", "ritual.bloodmagic.expulsionRitual": "Aura of Expulsion",
"ritual.bloodmagic.expulsionRitual.expulsionRange.info": "(Expulsion) The area from which players that are not owner or have an orb in the chest will be teleported away from.", "ritual.bloodmagic.expulsionRitual.expulsionRange.info": "(Expulsion) The area from which players that are not owner or have an orb in the chest will be teleported away from.",

View file

@ -0,0 +1,11 @@
{
"parent": "bloodmagic:block/sub/shaped_charge",
"textures": {
"1": "minecraft:block/sandstone_bottom",
"3": "minecraft:block/sandstone_bottom",
"4": "bloodmagic:block/blankrune",
"5": "minecraft:block/sand",
"6": "bloodmagic:models/defaultcrystal",
"particle": "bloodmagic:models/defaultcrystal"
}
}

View file

@ -0,0 +1,3 @@
{
"parent": "bloodmagic:block/veinmine_charge"
}

View file

@ -0,0 +1,10 @@
{
"type": "minecraft:block",
"pools": [
{
"name": "bloodmagic:veinmine_charge",
"rolls": 1.0,
"entries": []
}
]
}

View file

@ -0,0 +1,21 @@
{
"type": "bloodmagic:soulforge",
"input0": {
"tag": "forge:cobblestone"
},
"input1": {
"item": "minecraft:charcoal"
},
"input2": {
"tag": "forge:sandstone"
},
"input3": {
"tag": "forge:sand"
},
"output": {
"item": "bloodmagic:veinmine_charge",
"count": 8
},
"minimumDrain": 10.0,
"drain": 0.5
}

View file

@ -78,6 +78,7 @@ import wayoftime.bloodmagic.tile.TileMasterRitualStone;
import wayoftime.bloodmagic.tile.TileMimic; import wayoftime.bloodmagic.tile.TileMimic;
import wayoftime.bloodmagic.tile.TileShapedExplosive; import wayoftime.bloodmagic.tile.TileShapedExplosive;
import wayoftime.bloodmagic.tile.TileSoulForge; import wayoftime.bloodmagic.tile.TileSoulForge;
import wayoftime.bloodmagic.tile.TileVeinMineCharge;
import wayoftime.bloodmagic.util.handler.event.GenericHandler; import wayoftime.bloodmagic.util.handler.event.GenericHandler;
import wayoftime.bloodmagic.util.handler.event.WillHandler; import wayoftime.bloodmagic.util.handler.event.WillHandler;
@ -201,6 +202,8 @@ public class BloodMagic
event.getRegistry().register(TileEntityType.Builder.create(TileMimic::new, BloodMagicBlocks.MIMIC.get(), BloodMagicBlocks.ETHEREAL_MIMIC.get()).build(null).setRegistryName("mimic")); event.getRegistry().register(TileEntityType.Builder.create(TileMimic::new, BloodMagicBlocks.MIMIC.get(), BloodMagicBlocks.ETHEREAL_MIMIC.get()).build(null).setRegistryName("mimic"));
event.getRegistry().register(TileEntityType.Builder.create(TileShapedExplosive::new, BloodMagicBlocks.SHAPED_CHARGE.get()).build(null).setRegistryName("shaped_explosive")); event.getRegistry().register(TileEntityType.Builder.create(TileShapedExplosive::new, BloodMagicBlocks.SHAPED_CHARGE.get()).build(null).setRegistryName("shaped_explosive"));
event.getRegistry().register(TileEntityType.Builder.create(TileDeforesterCharge::new, BloodMagicBlocks.DEFORESTER_CHARGE.get()).build(null).setRegistryName("deforester_charge")); event.getRegistry().register(TileEntityType.Builder.create(TileDeforesterCharge::new, BloodMagicBlocks.DEFORESTER_CHARGE.get()).build(null).setRegistryName("deforester_charge"));
event.getRegistry().register(TileEntityType.Builder.create(TileVeinMineCharge::new, BloodMagicBlocks.VEINMINE_CHARGE.get()).build(null).setRegistryName("veinmine_charge"));
} }
@SubscribeEvent @SubscribeEvent

View file

@ -237,6 +237,10 @@ public class BloodAltar// implements IFluidHandler
// //
// System.out.println("There are currently " + altarRecipes.size() + " Altar Recipes loaded."); // System.out.println("There are currently " + altarRecipes.size() + " Altar Recipes loaded.");
// //
// this.fluidInput = new FluidStack(BloodMagicBlocks.LIFE_ESSENCE_FLUID.get(), 1000);
// System.out.println(this.fluidOutput.getAmount());
World world = tileAltar.getWorld(); World world = tileAltar.getWorld();
BlockPos pos = tileAltar.getPos(); BlockPos pos = tileAltar.getPos();
@ -671,7 +675,7 @@ public class BloodAltar// implements IFluidHandler
if (!doFill) if (!doFill)
{ {
if (fluidInput == null) if (fluidInput == null || fluidInput.isEmpty())
{ {
return Math.min(bufferCapacity, resource.getAmount()); return Math.min(bufferCapacity, resource.getAmount());
} }

View file

@ -0,0 +1,20 @@
package wayoftime.bloodmagic.common.block;
import net.minecraft.block.BlockState;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.IBlockReader;
import wayoftime.bloodmagic.tile.TileVeinMineCharge;
public class BlockVeinMineCharge extends BlockShapedExplosive
{
public BlockVeinMineCharge(int explosionSize, Properties properties)
{
super(explosionSize, properties);
}
@Override
public TileEntity createTileEntity(BlockState state, IBlockReader world)
{
return new TileVeinMineCharge();
}
}

View file

@ -176,6 +176,7 @@ public class BloodMagicBlocks
public static final RegistryObject<Block> SHAPED_CHARGE = BLOCKS.register("shaped_charge", () -> new BlockShapedExplosive(3, Properties.create(Material.IRON).hardnessAndResistance(5.0F, 6.0F).sound(SoundType.METAL).harvestTool(ToolType.PICKAXE).harvestLevel(1).setRequiresTool())); public static final RegistryObject<Block> SHAPED_CHARGE = BLOCKS.register("shaped_charge", () -> new BlockShapedExplosive(3, Properties.create(Material.IRON).hardnessAndResistance(5.0F, 6.0F).sound(SoundType.METAL).harvestTool(ToolType.PICKAXE).harvestLevel(1).setRequiresTool()));
public static final RegistryObject<Block> DEFORESTER_CHARGE = BLOCKS.register("deforester_charge", () -> new BlockDeforesterCharge(3, Properties.create(Material.IRON).hardnessAndResistance(5.0F, 6.0F).sound(SoundType.METAL).harvestTool(ToolType.PICKAXE).harvestLevel(1).setRequiresTool())); public static final RegistryObject<Block> DEFORESTER_CHARGE = BLOCKS.register("deforester_charge", () -> new BlockDeforesterCharge(3, Properties.create(Material.IRON).hardnessAndResistance(5.0F, 6.0F).sound(SoundType.METAL).harvestTool(ToolType.PICKAXE).harvestLevel(1).setRequiresTool()));
public static final RegistryObject<Block> VEINMINE_CHARGE = BLOCKS.register("veinmine_charge", () -> new BlockVeinMineCharge(3, Properties.create(Material.IRON).hardnessAndResistance(5.0F, 6.0F).sound(SoundType.METAL).harvestTool(ToolType.PICKAXE).harvestLevel(1).setRequiresTool()));
// //
//// private static <T extends Block> RegistryObject<T> register(String name, Supplier<? extends T> sup, Function<RegistryObject<T>, Supplier<? extends Item>> itemCreator) //// private static <T extends Block> RegistryObject<T> register(String name, Supplier<? extends T> sup, Function<RegistryObject<T>, Supplier<? extends Item>> itemCreator)

View file

@ -94,6 +94,7 @@ public class GeneratorBlockStates extends BlockStateProvider
buildOrientable(BloodMagicBlocks.SHAPED_CHARGE.get(), "shaped_charge", modLoc("block/sub/shaped_charge"), modLoc("block/dungeon/dungeon_stone"), modLoc("block/dungeon/dungeon_tile"), modLoc("block/blankrune"), modLoc("block/largebloodstonebrick"), modLoc("models/defaultcrystal")); buildOrientable(BloodMagicBlocks.SHAPED_CHARGE.get(), "shaped_charge", modLoc("block/sub/shaped_charge"), modLoc("block/dungeon/dungeon_stone"), modLoc("block/dungeon/dungeon_tile"), modLoc("block/blankrune"), modLoc("block/largebloodstonebrick"), modLoc("models/defaultcrystal"));
buildOrientable(BloodMagicBlocks.DEFORESTER_CHARGE.get(), "deforester_charge", modLoc("block/sub/shaped_charge"), new ResourceLocation("block/oak_log_top"), new ResourceLocation("block/oak_log_top"), modLoc("block/blankrune"), new ResourceLocation("block/oak_planks"), modLoc("models/defaultcrystal")); buildOrientable(BloodMagicBlocks.DEFORESTER_CHARGE.get(), "deforester_charge", modLoc("block/sub/shaped_charge"), new ResourceLocation("block/oak_log_top"), new ResourceLocation("block/oak_log_top"), modLoc("block/blankrune"), new ResourceLocation("block/oak_planks"), modLoc("models/defaultcrystal"));
buildOrientable(BloodMagicBlocks.VEINMINE_CHARGE.get(), "veinmine_charge", modLoc("block/sub/shaped_charge"), new ResourceLocation("block/sandstone_bottom"), new ResourceLocation("block/sandstone_bottom"), modLoc("block/blankrune"), new ResourceLocation("block/sand"), modLoc("models/defaultcrystal"));
} }
private void buildOrientable(Block block, String name, ResourceLocation modelPath, ResourceLocation base, ResourceLocation edges, ResourceLocation centerCap, ResourceLocation binding, ResourceLocation core) private void buildOrientable(Block block, String name, ResourceLocation modelPath, ResourceLocation base, ResourceLocation edges, ResourceLocation centerCap, ResourceLocation binding, ResourceLocation core)

View file

@ -91,6 +91,7 @@ public class GeneratorItemModels extends ItemModelProvider
registerBlockModel(BloodMagicBlocks.SHAPED_CHARGE.get()); registerBlockModel(BloodMagicBlocks.SHAPED_CHARGE.get());
registerBlockModel(BloodMagicBlocks.DEFORESTER_CHARGE.get()); registerBlockModel(BloodMagicBlocks.DEFORESTER_CHARGE.get());
registerBlockModel(BloodMagicBlocks.VEINMINE_CHARGE.get());
registerMultiLayerItem(BloodMagicItems.SLATE_VIAL.get(), modLoc("item/alchemic_vial"), modLoc("item/alchemic_ribbon")); registerMultiLayerItem(BloodMagicItems.SLATE_VIAL.get(), modLoc("item/alchemic_vial"), modLoc("item/alchemic_ribbon"));
registerMultiLayerItem(BloodMagicItems.MELEE_DAMAGE_ANOINTMENT.get(), modLoc("item/alchemic_vial"), modLoc("item/alchemic_liquid"), modLoc("item/alchemic_ribbon")); registerMultiLayerItem(BloodMagicItems.MELEE_DAMAGE_ANOINTMENT.get(), modLoc("item/alchemic_vial"), modLoc("item/alchemic_liquid"), modLoc("item/alchemic_ribbon"));

View file

@ -171,7 +171,7 @@ public class GeneratorLanguage extends LanguageProvider
add("ritual.bloodmagic.crystalHarvestRitual", "Crack of the Fractured Crystal"); add("ritual.bloodmagic.crystalHarvestRitual", "Crack of the Fractured Crystal");
add("ritual.bloodmagic.forsakenSoulRitual", "Gathering of the Forsaken Souls"); add("ritual.bloodmagic.forsakenSoulRitual", "Gathering of the Forsaken Souls");
add("ritual.bloodmagic.crystalSplitRitual", "Resonance of the Faceted Crystal"); add("ritual.bloodmagic.crystalSplitRitual", "Resonance of the Faceted Crystal");
add("ritual.bloodmagic.ellipsoidRitual", "Focus of the Ellipsoid"); add("ritual.bloodmagic.ellipseRitual", "Focus of the Ellipsoid");
add("ritual.bloodmagic.cobblestoneRitual", "Le Vulcanos Frigius"); add("ritual.bloodmagic.cobblestoneRitual", "Le Vulcanos Frigius");
add("ritual.bloodmagic.placerRitual", "The Filler"); add("ritual.bloodmagic.placerRitual", "The Filler");
@ -451,6 +451,7 @@ public class GeneratorLanguage extends LanguageProvider
addBlock(BloodMagicBlocks.SHAPED_CHARGE, "Shaped Charge"); addBlock(BloodMagicBlocks.SHAPED_CHARGE, "Shaped Charge");
addBlock(BloodMagicBlocks.DEFORESTER_CHARGE, "Deforester Charge"); addBlock(BloodMagicBlocks.DEFORESTER_CHARGE, "Deforester Charge");
addBlock(BloodMagicBlocks.VEINMINE_CHARGE, "Vein Charge");
// Item names // Item names
addItem(BloodMagicItems.WEAK_BLOOD_ORB, "Weak Blood Orb"); addItem(BloodMagicItems.WEAK_BLOOD_ORB, "Weak Blood Orb");

View file

@ -134,6 +134,7 @@ public class GeneratorLootTable extends LootTableProvider
registerNoDropLootTable(BloodMagicBlocks.SHAPED_CHARGE.get()); registerNoDropLootTable(BloodMagicBlocks.SHAPED_CHARGE.get());
registerNoDropLootTable(BloodMagicBlocks.DEFORESTER_CHARGE.get()); registerNoDropLootTable(BloodMagicBlocks.DEFORESTER_CHARGE.get());
registerNoDropLootTable(BloodMagicBlocks.VEINMINE_CHARGE.get());
} }
private void registerNoDropLootTable(Block block) private void registerNoDropLootTable(Block block)

View file

@ -101,6 +101,7 @@ public class BloodMagicItems
public static final RegistryObject<Item> SHAPED_CHARGE_ITEM = ITEMS.register("shaped_charge", () -> new ItemBlockShapedCharge(BloodMagicBlocks.SHAPED_CHARGE.get(), new Item.Properties().group(BloodMagic.TAB))); public static final RegistryObject<Item> SHAPED_CHARGE_ITEM = ITEMS.register("shaped_charge", () -> new ItemBlockShapedCharge(BloodMagicBlocks.SHAPED_CHARGE.get(), new Item.Properties().group(BloodMagic.TAB)));
public static final RegistryObject<Item> DEFORESTER_CHARGE_ITEM = ITEMS.register("deforester_charge", () -> new ItemBlockShapedCharge(BloodMagicBlocks.DEFORESTER_CHARGE.get(), new Item.Properties().group(BloodMagic.TAB))); public static final RegistryObject<Item> DEFORESTER_CHARGE_ITEM = ITEMS.register("deforester_charge", () -> new ItemBlockShapedCharge(BloodMagicBlocks.DEFORESTER_CHARGE.get(), new Item.Properties().group(BloodMagic.TAB)));
public static final RegistryObject<Item> VEINMINE_CHARGE_ITEM = ITEMS.register("veinmine_charge", () -> new ItemBlockShapedCharge(BloodMagicBlocks.VEINMINE_CHARGE.get(), new Item.Properties().group(BloodMagic.TAB)));
// TODO: Need to rework the above instantiations for the ItemBlocks so that it's // TODO: Need to rework the above instantiations for the ItemBlocks so that it's
// done with the Blocks. // done with the Blocks.

View file

@ -49,6 +49,7 @@ public class TartaricForgeRecipeProvider implements ISubRecipeProvider
TartaricForgeRecipeBuilder.tartaricForge(new ItemStack(BloodMagicBlocks.SHAPED_CHARGE.get(), 8), 10, 0.5, Ingredient.fromTag(Tags.Items.COBBLESTONE), Ingredient.fromItems(Items.CHARCOAL), Ingredient.fromTag(Tags.Items.SAND), Ingredient.fromTag(Tags.Items.STONE)).build(consumer, BloodMagic.rl(basePath + "shaped_charge")); TartaricForgeRecipeBuilder.tartaricForge(new ItemStack(BloodMagicBlocks.SHAPED_CHARGE.get(), 8), 10, 0.5, Ingredient.fromTag(Tags.Items.COBBLESTONE), Ingredient.fromItems(Items.CHARCOAL), Ingredient.fromTag(Tags.Items.SAND), Ingredient.fromTag(Tags.Items.STONE)).build(consumer, BloodMagic.rl(basePath + "shaped_charge"));
TartaricForgeRecipeBuilder.tartaricForge(new ItemStack(BloodMagicBlocks.DEFORESTER_CHARGE.get(), 8), 10, 0.5, Ingredient.fromTag(Tags.Items.COBBLESTONE), Ingredient.fromItems(Items.CHARCOAL), Ingredient.fromTag(ItemTags.LOGS), Ingredient.fromTag(ItemTags.PLANKS)).build(consumer, BloodMagic.rl(basePath + "deforester_charge")); TartaricForgeRecipeBuilder.tartaricForge(new ItemStack(BloodMagicBlocks.DEFORESTER_CHARGE.get(), 8), 10, 0.5, Ingredient.fromTag(Tags.Items.COBBLESTONE), Ingredient.fromItems(Items.CHARCOAL), Ingredient.fromTag(ItemTags.LOGS), Ingredient.fromTag(ItemTags.PLANKS)).build(consumer, BloodMagic.rl(basePath + "deforester_charge"));
TartaricForgeRecipeBuilder.tartaricForge(new ItemStack(BloodMagicBlocks.VEINMINE_CHARGE.get(), 8), 10, 0.5, Ingredient.fromTag(Tags.Items.COBBLESTONE), Ingredient.fromItems(Items.CHARCOAL), Ingredient.fromTag(Tags.Items.SANDSTONE), Ingredient.fromTag(Tags.Items.SAND)).build(consumer, BloodMagic.rl(basePath + "vein_charge"));
ItemStack stack = new ItemStack(BloodMagicBlocks.DEFORESTER_CHARGE.get()); ItemStack stack = new ItemStack(BloodMagicBlocks.DEFORESTER_CHARGE.get());
AnointmentHolder smeltingHolder = new AnointmentHolder(); AnointmentHolder smeltingHolder = new AnointmentHolder();

View file

@ -42,8 +42,6 @@ public class TileDeforesterCharge extends TileExplosiveCharge
// private boolean cached = false; // private boolean cached = false;
public double internalCounter = 0; public double internalCounter = 0;
// public int explosionRadius;
// public int explosionDepth;
public int currentLogs = 0; public int currentLogs = 0;

View file

@ -15,7 +15,6 @@ import wayoftime.bloodmagic.tile.base.TileTicking;
public class TileExplosiveCharge extends TileTicking public class TileExplosiveCharge extends TileTicking
{ {
public AnointmentHolder anointmentHolder = new AnointmentHolder(); public AnointmentHolder anointmentHolder = new AnointmentHolder();
public TileExplosiveCharge(TileEntityType<?> type) public TileExplosiveCharge(TileEntityType<?> type)

View file

@ -26,7 +26,7 @@ import wayoftime.bloodmagic.common.block.BlockShapedExplosive;
public class TileShapedExplosive extends TileExplosiveCharge public class TileShapedExplosive extends TileExplosiveCharge
{ {
@ObjectHolder("bloodmagic:shaped_explosive") @ObjectHolder("bloodmagic:shaped_explosive")
public static TileEntityType<TileExplosiveCharge> TYPE; public static TileEntityType<TileShapedExplosive> TYPE;
public double internalCounter = 0; public double internalCounter = 0;
public int explosionRadius; public int explosionRadius;

View file

@ -0,0 +1,225 @@
package wayoftime.bloodmagic.tile;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import com.mojang.datafixers.util.Pair;
import it.unimi.dsi.fastutil.objects.ObjectArrayList;
import net.minecraft.block.Block;
import net.minecraft.block.BlockState;
import net.minecraft.block.Blocks;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.loot.LootContext;
import net.minecraft.loot.LootParameters;
import net.minecraft.nbt.CompoundNBT;
import net.minecraft.particles.ParticleTypes;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.tileentity.TileEntityType;
import net.minecraft.util.Direction;
import net.minecraft.util.SoundCategory;
import net.minecraft.util.SoundEvents;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.vector.Vector3d;
import net.minecraft.world.server.ServerWorld;
import net.minecraftforge.registries.ObjectHolder;
import wayoftime.bloodmagic.common.block.BlockShapedExplosive;
public class TileVeinMineCharge extends TileExplosiveCharge
{
@ObjectHolder("bloodmagic:veinmine_charge")
public static TileEntityType<TileVeinMineCharge> TYPE;
private Map<BlockPos, Boolean> veinPartsMap;
private List<BlockPos> veinPartsCache;
private boolean finishedAnalysis;
public double internalCounter = 0;
public int currentBlocks = 0;
public int maxBlocks = 128;
public TileVeinMineCharge(TileEntityType<?> type, int maxBlocks)
{
super(type);
this.maxBlocks = maxBlocks;
}
public TileVeinMineCharge()
{
this(TYPE, 64 * 3);
}
@Override
public void onUpdate()
{
if (world.isRemote)
{
return;
}
// System.out.println("Counter: " + internalCounter);
Direction explosiveDirection = this.getBlockState().get(BlockShapedExplosive.ATTACHED).getOpposite();
BlockState attachedState = world.getBlockState(pos.offset(explosiveDirection));
Block attachedBlock = attachedState.getBlock();
// if (!BlockTags.LOGS.contains(attachedState.getBlock()) && !BlockTags.LEAVES.contains(attachedState.getBlock()))
// {
// return;
// }
if (veinPartsMap == null)
{
veinPartsMap = new HashMap<BlockPos, Boolean>();
veinPartsMap.put(pos.offset(explosiveDirection), false);
veinPartsCache = new LinkedList<BlockPos>();
veinPartsCache.add(pos.offset(explosiveDirection));
internalCounter = 0;
// veinPartsMap.add(pos.offset(explosiveDirection));
}
boolean foundNew = false;
List<BlockPos> newPositions = new LinkedList<BlockPos>();
for (BlockPos currentPos : veinPartsCache)
{
if (!veinPartsMap.getOrDefault(currentPos, false)) // If the BlockPos wasn't checked yet
{
// BlockPos currentPos = entry.getKey();
for (Direction dir : Direction.values())
{
BlockPos checkPos = currentPos.offset(dir);
if (veinPartsMap.containsKey(checkPos))
{
continue;
}
BlockState checkState = world.getBlockState(checkPos);
boolean isTree = false;
if (currentBlocks >= maxBlocks)
{
continue;
}
if (attachedBlock.equals(checkState.getBlock()))
{
currentBlocks++;
isTree = true;
}
if (isTree)
{
veinPartsMap.put(checkPos, false);
newPositions.add(checkPos);
foundNew = true;
}
}
veinPartsMap.put(currentPos, true);
if (currentBlocks >= maxBlocks)
{
finishedAnalysis = true;
break;
}
}
}
veinPartsCache.addAll(newPositions);
// System.out.println("Found blocks: " + veinPartsMap.size());
if (foundNew)
{
return;
}
internalCounter++;
if (internalCounter == 20)
{
// worldIn.playSound((PlayerEntity)null, tntentity.getPosX(), tntentity.getPosY(), tntentity.getPosZ(), SoundEvents.ENTITY_TNT_PRIMED, SoundCategory.BLOCKS, 1.0F, 1.0F);
world.playSound((PlayerEntity) null, this.getPos().getX() + 0.5, this.getPos().getY() + 0.5, this.getPos().getZ() + 0.5, SoundEvents.ITEM_FLINTANDSTEEL_USE, SoundCategory.BLOCKS, 1.0F, world.rand.nextFloat() * 0.4F + 0.8F);
((ServerWorld) this.world).spawnParticle(ParticleTypes.FLAME, pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5, 5, 0.02, 0.03, 0.02, 0);
}
if (internalCounter == 30)
{
world.playSound((PlayerEntity) null, this.getPos().getX() + 0.5, this.getPos().getY() + 0.5, this.getPos().getZ() + 0.5, SoundEvents.ENTITY_TNT_PRIMED, SoundCategory.BLOCKS, 1.0F, 1.0F);
}
if (internalCounter < 30)
{
return;
}
if (world.rand.nextDouble() < 0.3)
{
((ServerWorld) this.world).spawnParticle(ParticleTypes.SMOKE, pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5, 1, 0.0D, 0.0D, 0.0D, 0);
}
if (internalCounter == 100)
{
ItemStack toolStack = this.getHarvestingTool();
world.playSound((PlayerEntity) null, this.getPos().getX() + 0.5, this.getPos().getY() + 0.5, this.getPos().getZ() + 0.5, SoundEvents.ENTITY_GENERIC_EXPLODE, SoundCategory.BLOCKS, 4.0F, (1.0F + (world.rand.nextFloat() - world.rand.nextFloat()) * 0.2F) * 0.7F);
int numParticles = 10;
((ServerWorld) this.world).spawnParticle(ParticleTypes.EXPLOSION, pos.getX() + 0.5 + explosiveDirection.getXOffset(), pos.getY() + 0.5 + explosiveDirection.getYOffset(), pos.getZ() + 0.5 + explosiveDirection.getZOffset(), numParticles, 1.0D, 1.0D, 1.0D, 0);
ObjectArrayList<Pair<ItemStack, BlockPos>> objectarraylist = new ObjectArrayList<>();
for (BlockPos blockPos : veinPartsCache)
{
// BlockPos blockpos = initialPos.offset(explosiveDirection, i).offset(sweepDir1, j).offset(sweepDir2, k);
BlockState blockstate = this.world.getBlockState(blockPos);
Block block = blockstate.getBlock();
if (!blockstate.isAir(this.world, blockPos))
{
BlockPos blockpos1 = blockPos.toImmutable();
// this.world.getProfiler().startSection("explosion_blocks");
if (this.world instanceof ServerWorld)
{
TileEntity tileentity = blockstate.hasTileEntity() ? this.world.getTileEntity(blockPos) : null;
LootContext.Builder lootcontext$builder = (new LootContext.Builder((ServerWorld) this.world)).withRandom(this.world.rand).withParameter(LootParameters.field_237457_g_, Vector3d.copyCentered(blockPos)).withParameter(LootParameters.TOOL, toolStack).withNullableParameter(LootParameters.BLOCK_ENTITY, tileentity);
// if (this.mode == Explosion.Mode.DESTROY) {
// lootcontext$builder.withParameter(LootParameters.EXPLOSION_RADIUS, this.size);
// }
blockstate.getDrops(lootcontext$builder).forEach((stack) -> {
handleExplosionDrops(objectarraylist, stack, blockpos1);
});
world.setBlockState(blockPos, Blocks.AIR.getDefaultState(), 3);
// blockstate.onBlockExploded(this.world, blockpos, null);
// this.world.getProfiler().endSection();
}
}
}
for (Pair<ItemStack, BlockPos> pair : objectarraylist)
{
Block.spawnAsEntity(this.world, pair.getSecond(), pair.getFirst());
}
world.setBlockState(getPos(), Blocks.AIR.getDefaultState());
}
}
@Override
public void deserialize(CompoundNBT tag)
{
internalCounter = tag.getDouble("internalCounter");
}
@Override
public CompoundNBT serialize(CompoundNBT tag)
{
tag.putDouble("internalCounter", internalCounter);
return tag;
}
}

View file

@ -18,7 +18,7 @@
"north": {"uv": [0, 6, 10, 8], "texture": "#3"}, "north": {"uv": [0, 6, 10, 8], "texture": "#3"},
"east": {"uv": [0, 6, 10, 8], "texture": "#3"}, "east": {"uv": [0, 6, 10, 8], "texture": "#3"},
"south": {"uv": [0, 6, 10, 8], "texture": "#3"}, "south": {"uv": [0, 6, 10, 8], "texture": "#3"},
"west": {"uv": [8, 14, 18, 16], "texture": "#3"}, "west": {"uv": [6, 14, 16, 16], "texture": "#3"},
"up": {"uv": [10, 10, 0, 0], "texture": "#3"}, "up": {"uv": [10, 10, 0, 0], "texture": "#3"},
"down": {"uv": [10, 0, 0, 10], "texture": "#3"} "down": {"uv": [10, 0, 0, 10], "texture": "#3"}
} }