From ea24e7edd89286b0d67bac97c3a770b626371c91 Mon Sep 17 00:00:00 2001 From: WayofTime Date: Thu, 25 Feb 2016 22:00:02 -0500 Subject: [PATCH] Created the proper rendering for the crystal clusters while in hand --- .../bloodmagic/block/BlockDemonCrystal.java | 81 +++++++++++++++++- .../block/BlockDemonCrystallizer.java | 9 ++ .../bloodmagic/item/ItemComponent.java | 10 +++ .../item/block/ItemBlockDemonCrystal.java | 24 ++++++ .../bloodmagic/registry/ModBlocks.java | 9 +- .../bloodmagic/tile/TileDemonCrystal.java | 8 +- .../blockstates/BlockDemonCrystal.json | 63 ++++++++++++++ .../item/ItemBlockDemonCrystal.json | 39 +++++++++ .../blockstates/item/ItemComponent.json | 25 ++++++ .../textures/items/CorrosiveCrystal.png | Bin 0 -> 761 bytes .../textures/items/DefaultCrystal.png | Bin 0 -> 740 bytes .../textures/items/DestructiveCrystal.png | Bin 0 -> 765 bytes .../textures/items/SteadfastCrystal.png | Bin 0 -> 751 bytes .../textures/items/VengefulCrystal.png | Bin 0 -> 796 bytes .../textures/models/DestructiveCrystal.png | Bin 765 -> 749 bytes 15 files changed, 261 insertions(+), 7 deletions(-) create mode 100644 src/main/resources/assets/bloodmagic/blockstates/item/ItemBlockDemonCrystal.json create mode 100644 src/main/resources/assets/bloodmagic/textures/items/CorrosiveCrystal.png create mode 100644 src/main/resources/assets/bloodmagic/textures/items/DefaultCrystal.png create mode 100644 src/main/resources/assets/bloodmagic/textures/items/DestructiveCrystal.png create mode 100644 src/main/resources/assets/bloodmagic/textures/items/SteadfastCrystal.png create mode 100644 src/main/resources/assets/bloodmagic/textures/items/VengefulCrystal.png diff --git a/src/main/java/WayofTime/bloodmagic/block/BlockDemonCrystal.java b/src/main/java/WayofTime/bloodmagic/block/BlockDemonCrystal.java index 5ef1aac1..7c486248 100644 --- a/src/main/java/WayofTime/bloodmagic/block/BlockDemonCrystal.java +++ b/src/main/java/WayofTime/bloodmagic/block/BlockDemonCrystal.java @@ -1,7 +1,9 @@ package WayofTime.bloodmagic.block; import java.util.List; +import java.util.Random; +import net.minecraft.block.Block; import net.minecraft.block.BlockContainer; import net.minecraft.block.material.Material; import net.minecraft.block.properties.IProperty; @@ -11,6 +13,7 @@ import net.minecraft.block.state.BlockState; import net.minecraft.block.state.IBlockState; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Items; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; @@ -23,17 +26,20 @@ import net.minecraftforge.fml.relauncher.SideOnly; import WayofTime.bloodmagic.BloodMagic; import WayofTime.bloodmagic.api.Constants; import WayofTime.bloodmagic.api.soul.EnumDemonWillType; +import WayofTime.bloodmagic.item.ItemComponent; +import WayofTime.bloodmagic.tile.TileAltar; import WayofTime.bloodmagic.tile.TileDemonCrystal; public class BlockDemonCrystal extends BlockContainer { public static final PropertyInteger AGE = PropertyInteger.create("age", 0, 6); public static final PropertyEnum TYPE = PropertyEnum.create("type", EnumDemonWillType.class); + public static final PropertyEnum ATTACHED = PropertyEnum.create("attached", EnumFacing.class); public BlockDemonCrystal() { super(Material.rock); - this.setDefaultState(this.blockState.getBaseState().withProperty(TYPE, EnumDemonWillType.DEFAULT)); + this.setDefaultState(this.blockState.getBaseState().withProperty(TYPE, EnumDemonWillType.DEFAULT).withProperty(ATTACHED, EnumFacing.UP)); setUnlocalizedName(Constants.Mod.MODID + ".demonCrystal"); setRegistryName(Constants.BloodMagicBlock.DEMON_CRYSTAL.getRegName()); @@ -43,11 +49,36 @@ public class BlockDemonCrystal extends BlockContainer setHarvestLevel("pickaxe", 2); } + @Override + public boolean canPlaceBlockOnSide(World world, BlockPos pos, EnumFacing side) + { + BlockPos offsetPos = pos.offset(side.getOpposite()); + IBlockState offsetState = world.getBlockState(offsetPos); + Block offsetBlock = offsetState.getBlock(); + + return offsetBlock.isSideSolid(world, offsetPos, side) && this.canPlaceBlockAt(world, pos); + } + + @Override + public void onNeighborBlockChange(World world, BlockPos pos, IBlockState state, Block neighborBlock) + { + TileDemonCrystal tile = (TileDemonCrystal) world.getTileEntity(pos); + EnumFacing placement = tile.getPlacement(); + BlockPos offsetPos = pos.offset(placement.getOpposite()); + IBlockState offsetState = world.getBlockState(offsetPos); + Block offsetBlock = offsetState.getBlock(); + + if (!offsetBlock.isSideSolid(world, offsetPos, placement)) + { + world.setBlockToAir(pos); + } + } + @Override public IBlockState getActualState(IBlockState state, IBlockAccess world, BlockPos pos) { TileDemonCrystal tile = (TileDemonCrystal) world.getTileEntity(pos); - return state.withProperty(AGE, tile.getCrystalCountForRender()); + return state.withProperty(AGE, tile.getCrystalCountForRender()).withProperty(ATTACHED, tile.getPlacement()); } @Override @@ -93,7 +124,6 @@ public class BlockDemonCrystal extends BlockContainer @Override public IBlockState getStateFromMeta(int meta) { - System.out.println("Meta: " + meta + ", " + EnumDemonWillType.values()[meta]); return this.getDefaultState().withProperty(TYPE, EnumDemonWillType.values()[meta]); } @@ -109,7 +139,7 @@ public class BlockDemonCrystal extends BlockContainer @Override protected BlockState createBlockState() { - return new BlockState(this, new IProperty[] { TYPE, AGE }); + return new BlockState(this, new IProperty[] { TYPE, AGE, ATTACHED }); } @Override @@ -118,6 +148,49 @@ public class BlockDemonCrystal extends BlockContainer return new TileDemonCrystal(); } + @Override + public void breakBlock(World world, BlockPos pos, IBlockState state) + { + TileDemonCrystal tile = (TileDemonCrystal) world.getTileEntity(pos); + EnumDemonWillType type = state.getValue(TYPE); + int number = tile.getCrystalCount(); + + spawnAsEntity(world, pos, getItemStackDropped(type, number)); + world.removeTileEntity(pos); + } + + private ItemStack getItemStackDropped(EnumDemonWillType type, int crystalNumber) + { + ItemStack stack = null; + switch (type) + { + case CORROSIVE: + stack = ItemComponent.getStack(ItemComponent.CRYSTAL_CORROSIVE); + break; + case DEFAULT: + stack = ItemComponent.getStack(ItemComponent.CRYSTAL_DEFAULT); + break; + case DESTRUCTIVE: + stack = ItemComponent.getStack(ItemComponent.CRYSTAL_DESTRUCTIVE); + break; + case STEADFAST: + stack = ItemComponent.getStack(ItemComponent.CRYSTAL_STEADFAST); + break; + case VENGEFUL: + stack = ItemComponent.getStack(ItemComponent.CRYSTAL_VENGEFUL); + break; + } + + stack.stackSize = crystalNumber; + return stack; + } + + @Override + public int quantityDropped(Random random) + { + return 0; + } + @Override public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumFacing side, float hitX, float hitY, float hitZ) { diff --git a/src/main/java/WayofTime/bloodmagic/block/BlockDemonCrystallizer.java b/src/main/java/WayofTime/bloodmagic/block/BlockDemonCrystallizer.java index bea9f3b5..395f10cf 100644 --- a/src/main/java/WayofTime/bloodmagic/block/BlockDemonCrystallizer.java +++ b/src/main/java/WayofTime/bloodmagic/block/BlockDemonCrystallizer.java @@ -3,6 +3,9 @@ package WayofTime.bloodmagic.block; import net.minecraft.block.BlockContainer; import net.minecraft.block.material.Material; import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.BlockPos; +import net.minecraft.util.EnumFacing; +import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import WayofTime.bloodmagic.BloodMagic; import WayofTime.bloodmagic.api.Constants; @@ -24,6 +27,12 @@ public class BlockDemonCrystallizer extends BlockContainer // setBlockBounds(0.3F, 0F, 0.3F, 0.72F, 1F, 0.72F); } + @Override + public boolean isSideSolid(IBlockAccess world, BlockPos pos, EnumFacing side) + { + return side == EnumFacing.UP; + } + @Override public boolean isOpaqueCube() { diff --git a/src/main/java/WayofTime/bloodmagic/item/ItemComponent.java b/src/main/java/WayofTime/bloodmagic/item/ItemComponent.java index 569f46b3..02f75615 100644 --- a/src/main/java/WayofTime/bloodmagic/item/ItemComponent.java +++ b/src/main/java/WayofTime/bloodmagic/item/ItemComponent.java @@ -37,6 +37,11 @@ public class ItemComponent extends Item public static final String REAGENT_SEVERANCE = "reagentSeverance"; public static final String REAGENT_TELEPOSITION = "reagentTeleposition"; public static final String REAGENT_TRANSPOSITION = "reagentTransposition"; + public static final String CRYSTAL_DEFAULT = "crystalDefault"; + public static final String CRYSTAL_CORROSIVE = "crystalCorrosive"; + public static final String CRYSTAL_VENGEFUL = "crystalVengeful"; + public static final String CRYSTAL_DESTRUCTIVE = "crystalDestructive"; + public static final String CRYSTAL_STEADFAST = "crystalSteadfast"; public ItemComponent() { @@ -71,6 +76,11 @@ public class ItemComponent extends Item names.add(16, REAGENT_SEVERANCE); names.add(17, REAGENT_TELEPOSITION); names.add(18, REAGENT_TRANSPOSITION); + names.add(19, CRYSTAL_DEFAULT); + names.add(20, CRYSTAL_CORROSIVE); + names.add(21, CRYSTAL_VENGEFUL); + names.add(22, CRYSTAL_DESTRUCTIVE); + names.add(23, CRYSTAL_STEADFAST); } @Override diff --git a/src/main/java/WayofTime/bloodmagic/item/block/ItemBlockDemonCrystal.java b/src/main/java/WayofTime/bloodmagic/item/block/ItemBlockDemonCrystal.java index 71b94b75..064996fa 100644 --- a/src/main/java/WayofTime/bloodmagic/item/block/ItemBlockDemonCrystal.java +++ b/src/main/java/WayofTime/bloodmagic/item/block/ItemBlockDemonCrystal.java @@ -1,9 +1,16 @@ package WayofTime.bloodmagic.item.block; import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemBlock; import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.BlockPos; +import net.minecraft.util.EnumFacing; +import net.minecraft.world.World; import WayofTime.bloodmagic.api.soul.EnumDemonWillType; +import WayofTime.bloodmagic.tile.TileDemonCrystal; public class ItemBlockDemonCrystal extends ItemBlock { @@ -24,4 +31,21 @@ public class ItemBlockDemonCrystal extends ItemBlock { return meta; } + + @Override + public boolean placeBlockAt(ItemStack stack, EntityPlayer player, World world, BlockPos pos, EnumFacing side, float hitX, float hitY, float hitZ, IBlockState newState) + { + if (super.placeBlockAt(stack, player, world, pos, side, hitX, hitY, hitZ, newState)) + { + TileEntity tile = world.getTileEntity(pos); + if (tile instanceof TileDemonCrystal) + { + ((TileDemonCrystal) tile).setPlacement(side); + } + + return true; + } + + return false; + } } diff --git a/src/main/java/WayofTime/bloodmagic/registry/ModBlocks.java b/src/main/java/WayofTime/bloodmagic/registry/ModBlocks.java index b8a8743d..846ab044 100644 --- a/src/main/java/WayofTime/bloodmagic/registry/ModBlocks.java +++ b/src/main/java/WayofTime/bloodmagic/registry/ModBlocks.java @@ -1,6 +1,7 @@ package WayofTime.bloodmagic.registry; import net.minecraft.block.Block; +import net.minecraft.item.Item; import net.minecraft.item.ItemBlock; import net.minecraftforge.fluids.FluidRegistry; import net.minecraftforge.fml.common.registry.GameRegistry; @@ -64,6 +65,7 @@ import WayofTime.bloodmagic.tile.routing.TileItemRoutingNode; import WayofTime.bloodmagic.tile.routing.TileMasterRoutingNode; import WayofTime.bloodmagic.tile.routing.TileOutputRoutingNode; import WayofTime.bloodmagic.util.helper.InventoryRenderHelper; +import WayofTime.bloodmagic.util.helper.InventoryRenderHelperV2; public class ModBlocks { @@ -168,6 +170,7 @@ public class ModBlocks public static void initRenders() { InventoryRenderHelper renderHelper = BloodMagic.proxy.getRenderHelper(); + InventoryRenderHelperV2 renderHelperV2 = BloodMagic.proxy.getRenderHelperV2(); renderHelper.fluidRender(lifeEssence); for (int i = 0; i < BlockBloodRune.names.length; i++) @@ -212,8 +215,12 @@ public class ModBlocks renderHelper.itemRender(InventoryRenderHelper.getItemFromBlock(pathBlock), 5); renderHelper.itemRender(InventoryRenderHelper.getItemFromBlock(pathBlock), 6); renderHelper.itemRender(InventoryRenderHelper.getItemFromBlock(pathBlock), 7); - renderHelper.itemRender(InventoryRenderHelper.getItemFromBlock(demonCrystal)); renderHelper.itemRender(InventoryRenderHelper.getItemFromBlock(demonPylon)); + renderHelperV2.registerRender(InventoryRenderHelper.getItemFromBlock(demonCrystal), 0, "ItemBlockDemonCrystal", "default"); + renderHelperV2.registerRender(InventoryRenderHelper.getItemFromBlock(demonCrystal), 1, "ItemBlockDemonCrystal", "corrosive"); + renderHelperV2.registerRender(InventoryRenderHelper.getItemFromBlock(demonCrystal), 2, "ItemBlockDemonCrystal", "destructive"); + renderHelperV2.registerRender(InventoryRenderHelper.getItemFromBlock(demonCrystal), 3, "ItemBlockDemonCrystal", "vengeful"); + renderHelperV2.registerRender(InventoryRenderHelper.getItemFromBlock(demonCrystal), 4, "ItemBlockDemonCrystal", "steadfast"); renderHelper.itemRender(InventoryRenderHelper.getItemFromBlock(dimensionalPortal)); } diff --git a/src/main/java/WayofTime/bloodmagic/tile/TileDemonCrystal.java b/src/main/java/WayofTime/bloodmagic/tile/TileDemonCrystal.java index fc284834..6bf6a485 100644 --- a/src/main/java/WayofTime/bloodmagic/tile/TileDemonCrystal.java +++ b/src/main/java/WayofTime/bloodmagic/tile/TileDemonCrystal.java @@ -9,6 +9,7 @@ import net.minecraft.network.Packet; import net.minecraft.network.play.server.S35PacketUpdateTileEntity; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.BlockPos; +import net.minecraft.util.EnumFacing; import net.minecraft.util.ITickable; import net.minecraft.util.MathHelper; import net.minecraft.world.World; @@ -25,6 +26,9 @@ public class TileDemonCrystal extends TileEntity implements ITickable, IDemonWil @Getter @Setter public int crystalCount = 1; + @Getter + @Setter + public EnumFacing placement = EnumFacing.UP; //Side that this crystal is placed on. public TileDemonCrystal() { @@ -43,8 +47,6 @@ public class TileDemonCrystal extends TileEntity implements ITickable, IDemonWil { crystalCount = Math.min(crystalCount + 1, 7); worldObj.markBlockForUpdate(pos); - - System.out.println("" + crystalCount); } } @@ -60,6 +62,7 @@ public class TileDemonCrystal extends TileEntity implements ITickable, IDemonWil holder.readFromNBT(tag, "Will"); crystalCount = tag.getInteger("crystalCount"); + placement = EnumFacing.getFront(tag.getInteger("placement")); } @Override @@ -69,6 +72,7 @@ public class TileDemonCrystal extends TileEntity implements ITickable, IDemonWil holder.writeToNBT(tag, "Will"); tag.setInteger("crystalCount", crystalCount); + tag.setInteger("placement", placement.getIndex()); } // IDemonWillConduit diff --git a/src/main/resources/assets/bloodmagic/blockstates/BlockDemonCrystal.json b/src/main/resources/assets/bloodmagic/blockstates/BlockDemonCrystal.json index 761ad081..1b32c4bf 100644 --- a/src/main/resources/assets/bloodmagic/blockstates/BlockDemonCrystal.json +++ b/src/main/resources/assets/bloodmagic/blockstates/BlockDemonCrystal.json @@ -9,6 +9,40 @@ } }, "variants": { + "attached": { + "down": { + "transform": { + "translation": [ 0, 0, -1 ], + "rotation": {"x": 180} + } + }, + "up": { + }, + "north": { + "transform": { + "translation": [ 0, 1, 0 ], + "rotation": {"x": -90} + } + }, + "south": { + "transform": { + "translation": [ 0, -1, 0 ], + "rotation": {"x": 90} + } + }, + "east": { + "transform": { + "translation": [ 0, 0, 1 ], + "rotation": {"z": -90} + } + }, + "west": { + "transform": { + "translation": [ 0, 0, 1 ], + "rotation": {"z": 90} + } + } + }, "type": { "default": { "textures": { @@ -89,6 +123,35 @@ "inventory": [{ "transform": { "translation": [0.44, -0.1, 0.44] + }, + "variants": { + "type": { + "default": { + "textures": { + "#crystal" : "bloodmagic:models/DefaultCrystal" + } + }, + "corrosive": { + "textures": { + "#crystal" : "bloodmagic:models/CorrosiveCrystal" + } + }, + "destructive": { + "textures": { + "#crystal" : "bloodmagic:models/DestructiveCrystal" + } + }, + "vengeful": { + "textures": { + "#crystal" : "bloodmagic:models/VengefulCrystal" + } + }, + "steadfast": { + "textures": { + "#crystal" : "bloodmagic:models/SteadfastCrystal" + } + } + } } }] } diff --git a/src/main/resources/assets/bloodmagic/blockstates/item/ItemBlockDemonCrystal.json b/src/main/resources/assets/bloodmagic/blockstates/item/ItemBlockDemonCrystal.json new file mode 100644 index 00000000..492f59ee --- /dev/null +++ b/src/main/resources/assets/bloodmagic/blockstates/item/ItemBlockDemonCrystal.json @@ -0,0 +1,39 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "bloodmagic:crystal/Crystal1.obj", + "custom": { "flip-v": true }, + "transform": { + "translation": [ 0, 0, 1] + } + }, + "variants": { + "type": { + "default": { + "textures": { + "#crystal" : "bloodmagic:models/DefaultCrystal" + } + }, + "corrosive": { + "textures": { + "#crystal" : "bloodmagic:models/CorrosiveCrystal" + } + }, + "destructive": { + "textures": { + "#crystal" : "bloodmagic:models/DestructiveCrystal" + } + }, + "vengeful": { + "textures": { + "#crystal" : "bloodmagic:models/VengefulCrystal" + } + }, + "steadfast": { + "textures": { + "#crystal" : "bloodmagic:models/SteadfastCrystal" + } + } + } + } +} diff --git a/src/main/resources/assets/bloodmagic/blockstates/item/ItemComponent.json b/src/main/resources/assets/bloodmagic/blockstates/item/ItemComponent.json index 2b95fa02..e4740f5a 100644 --- a/src/main/resources/assets/bloodmagic/blockstates/item/ItemComponent.json +++ b/src/main/resources/assets/bloodmagic/blockstates/item/ItemComponent.json @@ -100,6 +100,31 @@ "textures": { "layer0": "bloodmagic:items/ReagentTransposition" } + }, + "crystaldefault": { + "textures": { + "layer0": "bloodmagic:items/DefaultCrystal" + } + }, + "crystalcorrosive": { + "textures": { + "layer0": "bloodmagic:items/CorrosiveCrystal" + } + }, + "crystalvengeful": { + "textures": { + "layer0": "bloodmagic:items/VengefulCrystal" + } + }, + "crystaldestructive": { + "textures": { + "layer0": "bloodmagic:items/DestructiveCrystal" + } + }, + "crystalsteadfast": { + "textures": { + "layer0": "bloodmagic:items/SteadfastCrystal" + } } } } diff --git a/src/main/resources/assets/bloodmagic/textures/items/CorrosiveCrystal.png b/src/main/resources/assets/bloodmagic/textures/items/CorrosiveCrystal.png new file mode 100644 index 0000000000000000000000000000000000000000..24609a47f3e300bbf9eec888d6d9b2a6f6896e6b GIT binary patch literal 761 zcmVD+r9>D>_X;f1H000McNliru-~t&FD<5cC7vcZ_0)|OM zK~y-)1;I(0+b95l(H{f|$r?Ol{Bo~8MxUb(nN2oXRF%t?H6Rc}zbF3v@1Igh$>lOq zS%s}NyKv-M)3g>L4Y_hm&kZ*_QP^RwD^$eu9oxl3&p}SF4+3SE;B}G zjP21UN7^GgRZR1Yt`tIlpc;MQb~E(98g^L`4GiKNfgNKsqZufo(2gg(bJVe=8_wLz z8-4Cjc2Er8FNn?%cu}-Q>x#A;33Fl=4pY@=XUHm{8;yw2T{~VOplE7_?>*{zW`2(t zZ7{ZjreJMFDv67@@zO7@^@X(WOzDY`3UyYfLS_YYIjHNJtRzt%w6qi>Xv+yB4E@;S zoyV_O^lH--KcfVPxFJL9Ju6J+{_eS40X@8MM{uFpOAh%=*)nq1fmx7c0eh`C~g3d z!PFYjLdU@G&);lmVz5_k>Kn4N9U<)GBjLR#B!?;*pEtI=VVW9%7$bXf^i7W_g7tW? zY)@2*J2EtcWydrPF=zgkKeXb6Pacykkx1S%63{5d>zOniASzT74Cxfv!p0YVQ5}+y zq3FbNtkfwmyNN!Hgb=Vo6P!o*m2G(;MOK8#af%ARYz(U7NC(9yOau`kIv6sUkUS}F ztoH}==R({A>h0q%r*S0Dj$kLIsbWw)6HkQGxP2$OOiT-USM2PxMeztP{2oyuNa}6j z(>dz(;BYHKT8fq2AMf}j(3}-EwD+r9>D>_X;f1H000McNliru-~t&FGB&a6CYAsI0&z)1 zK~y-)EznDH+%^l!25|zWm`9TOr&xm#$aOPI!wpOn5 zq&UIf7v7w~cI#M=lhzue1iTac;4#MFdc*ZbZ5?ABXX})%e7!AHlx{(4SI%1KU77AP z){iV>px27?o`T^_7seR&oLI)d`p=G7!8pN|l$ou=IY)C2V+@Mn<^#?-YOPo&h_y`4 z@%OrMXyf5WW)vHoCB{h8j#H)giq%dAk}899s4BI0j4IPH5WD zR>*lL<%ranxJ>4DdvL^^H!lc|qgS+6O3e(~puv?+V%}+S<=R(rJdn?y-KV0000D+r9>D>_X;f1H000McNliru-~t&FD>GVwdjS9d0*XmQ zK~y-)CC*u{95nzy(QB8ds;(Yi^b#pzTS)APMe+p*l72&vF3&DLI4d~f_g{ZorBodE z2b_{vZ4kj@C&}a-ax@G+a7_yjA1JY*l;N`rdW-^bQ+XMZsE&G7{Yj*a@Qq$O(+$ zu$x(8#?w$zGFid&dP3@6SngM@K4P{L`{SN@bl_%6PNY>(pHGCc7(mOF{g)#6Kgi*Zowh7gvXrFOkiHbmcE=zDRtm;>%b+#l z@B%;wtkFyZFz)#L>kr!XhC7{5hgYPVW^#y>(nu*$Ljbvkrad`l1ey>M>CN-JFUYP2ZjVUKisyYn*_l=fDK~0_>?>Is=$)1m z^}g`&?}g8&C+3EF|K|t${f5Ui;eOt@tpjSe1%D+7O{|enJMHl#t_pl)T^%`kVr{4_ z8_Tm0LcrHVxOwF4a87bLzwu0&gHm)ekye8m3=hBH>&p4<9p$E(_m2ycQw+)Raf_Hx vxQR-*J?O1+Q4SRJzEFhX^6^GV6_n&Zjh=QF4~e~d00000NkvXXu0mjfF{Mt& literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/bloodmagic/textures/items/SteadfastCrystal.png b/src/main/resources/assets/bloodmagic/textures/items/SteadfastCrystal.png new file mode 100644 index 0000000000000000000000000000000000000000..9953c5b1967225103a0ddf38e897b649510f71f2 GIT binary patch literal 751 zcmVD+r9>D>_X;f1H000McNliru-~t&FFabMY;Tr$|0(?nC zK~y-)CDFTf+%^~h;Q{ayAjlQPmE^pmOBZ?K#EGTj-RLZD0C7v9db)4a_dkC$tu^yJ z(>aH=9jR2T?eX3tBBWMX9}D}sl5?W#gs`rJJs|VTm7ELX^TgZBE2gs?@x*%%Xhdto zc07$woM%L}#{yZQV6UTATDaG^i%&&ib za+wm+4+F2?{$RLF94TSM;+$jhp12>Jxnf1oCDVzecOA7Brg`Q(BhvSt>+37m>o@*= zf5%$O*n7nF_})`%<o>%vRl6Jp@M+YMt3e!L(R07EVn=Nv{Gs?vzjXd{T$*sf!m zCPE0DM?j0x$Nf-t`Q_07~P;u!V^3grimZ&Z0$7+Az;EdkC!Sf;L9j z_nn5qijY%guol}{uG15_R8mT8`^L5(jDzPqBCQlsN=OI?^L#~Xjp;hPb6@(-vBp4a zjm|j$d~5vm_fMemdYvIB^ymj-jO3h&F%nb4C`C+(cqaP32l(n|VjM>R)_v!(F6i@& zo-tprIbPl0i_h{ zw$h7mo+ri_LO9rtjb(YDHL$J^R4Z)zhVLCYXHrVkR>}E9wMJ`=GiBl#xZi*C`1~Zs zfc*M+=lOYN+ZLSnbe-T_&mICLB|-?K7};upoJl34>X%oF32CLVZ7aud5RbsVZ&>LN z>$u%+gng&KjC97JN=8IjmIq&fQ){J_ h!u@_Hrij*>{{dt1e;eGmHOT+~002ovPDHLkV1hb@Wc2_5 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/bloodmagic/textures/items/VengefulCrystal.png b/src/main/resources/assets/bloodmagic/textures/items/VengefulCrystal.png new file mode 100644 index 0000000000000000000000000000000000000000..b1e9b1752db2045c5c95c8223c35060fb5077049 GIT binary patch literal 796 zcmV+%1LOROP)D+r9>D>_X;f1H000McNliru-~t&FE-b44g0TPq0;x$v zK~y-)CCf>2C^Rz9-j_h0Rb#pk3fNw%mr1AsMXJ9E6}79QrxmFrG; zq(~D%4di8siVk56d0DaWiasWyvRqw@wk4;FK-+c2_sa64wn%!c2*`&OY3RwUB`-c8 zQesm`oIeqZ9qXmz%jH5WOY}x4KGp@bR?wUTnBF?0G2>|hl_iw)wM#<{&X9l%I7FEUQN2WM2 zw`XY2B%?`POX{wq&F25?J+r$~sRxn}47XRB_J9mN;nCcOmLN4^8WCUqfcL+ly@L1P zdQ#T`AXLs{{h6pLgeuTJuc)V3{ z&Ld|nIFEs#7qsq%SUrJn5uJw+nWl+RRWJv_*f8}s-kU3jzNepN^nQP4Q|DYJNztCj z{`m`CeIVW5=uJjHG`JK9{gFW}h?6IonxVVk<{3SxK-Wb&eWwi`=NvLu6e4jvA8A75 zK`3Iiz~vF6N^af2J;B%W8C?`5`%6QGLI=w}&15qWJe`ZoA#%)e=pnj}QF@No3*#6; aOa23=w{D|Ms-yt`0000fpN`C^4NkltUj{5^`t7)`B6i2f+^j(W=EGjr2Ze^Mr(Pgx@+@`|fJ^K65 z6Kdf!ww&I-(YBE4Ow$j@wjeOHYGiPZZA;{&nC1yJXw2n;Hh=pg=g#uuTZcRJ?NLh5SV7zE(OM(AGXSMPV-0-+sDC}TufNFalXg6zyLV*U?g(xp z`i%FU92`{`ieD*drRy4i|7Xe3^&=HQobIfz2Qs;h;0yD-k+P&vsLS6FKgr1vb0);Z zx)mru)ttsRQqqX5(7{`VkO+PS^@Ers1u!)e(?ZSxH$BPnKnMX*4Q}=L+rs>KA&b;J z?~b%;=6~mkRy%Tz_$`whge4J*1qwNN(z0^>dFS?++17x*{QQ^0`M`8_wEdH(Q0QTV z{J=%Swrx0H$YEyl8vI6GHNm~uazY0sS#LAWIhGi4&js1Fw1eb+`C?uJZ=I&d9=}<% z)J)HXWlem3excj8=kj%>mo4fQxMr|@joN=Xwj3GVkR(Rt9C{{T#| VhOY%4x6J?m002ovPDHLkV1fqNQaAtr delta 703 zcmV;w0zm!k1^oq(N`C+cbV*G`2jBu36Du=XfqMY}00N3hL_t(I%O%cPt{gQ0K+$WL zr>d?VU-S|wVp~Y;h(+=R2$Ft7k1o$HJ~%5l;`d*FTcuPS_XnJkSZxr&V<*Yv9C9=a zK5$J74<9J8p_JjX3w#QwZ_|O?GbiUbeL3PpqgIKXH%QYFQh(!4TQ(sObEWlxhkr0s zg?|4;>En(UWBEQBp%ogOZI=YHEkmZYD1oHI9O>`wgdG4!oT!+8Eq^W*k|W6KJN9%WK7S(Z^NO^J!>Ca74jWiS!CH$l65R{f38Mta35?;en^|JU(@;_}S;6#r zLh4>v?pLlpVzv|e>z7))M#~=h&3V+6V%b+#l@B%;wtkFyZFz)#L z>kr!XhC7{5hgYPVW^#y>(nu*$Ljbvk zrad`l1b>8t9#t6ZO9E@$ZGtrzhry zdjIDK`~8N;HQ|2VxUB~KzUIlu8tnS)YvGm%z<8VnD=;Ooly?H%Q&nK<{43zJg}$?