From 3d1212bd8e6584f4b520a0f2001bbadad06942b3 Mon Sep 17 00:00:00 2001 From: Lizbeth Rika Date: Sun, 28 Jun 2015 22:57:05 +0100 Subject: [PATCH] Add the Spark Tinkerer. --- .../client/core/proxy/ClientProxy.java | 6 +- .../render/tile/RenderTileSparkChanger.java | 66 ++++++++ .../common/block/BlockSparkChanger.java | 160 ++++++++++++++++++ .../botania/common/block/ModBlocks.java | 4 + .../common/block/tile/TileSparkChanger.java | 86 ++++++++++ .../common/core/BotaniaCreativeTab.java | 1 + .../botania/common/lib/LibBlockNames.java | 1 + .../resources/assets/botania/lang/en_US.lang | 1 + .../botania/textures/blocks/sparkChanger0.png | Bin 0 -> 15645 bytes .../botania/textures/blocks/sparkChanger1.png | Bin 0 -> 15730 bytes .../botania/textures/blocks/sparkChanger2.png | Bin 0 -> 15120 bytes 11 files changed, 323 insertions(+), 2 deletions(-) create mode 100644 src/main/java/vazkii/botania/client/render/tile/RenderTileSparkChanger.java create mode 100644 src/main/java/vazkii/botania/common/block/BlockSparkChanger.java create mode 100644 src/main/java/vazkii/botania/common/block/tile/TileSparkChanger.java create mode 100644 src/main/resources/assets/botania/textures/blocks/sparkChanger0.png create mode 100644 src/main/resources/assets/botania/textures/blocks/sparkChanger1.png create mode 100644 src/main/resources/assets/botania/textures/blocks/sparkChanger2.png diff --git a/src/main/java/vazkii/botania/client/core/proxy/ClientProxy.java b/src/main/java/vazkii/botania/client/core/proxy/ClientProxy.java index 3678aca46..21bf26eae 100644 --- a/src/main/java/vazkii/botania/client/core/proxy/ClientProxy.java +++ b/src/main/java/vazkii/botania/client/core/proxy/ClientProxy.java @@ -23,7 +23,6 @@ import net.minecraft.client.network.NetHandlerPlayClient; import net.minecraft.client.renderer.entity.RenderSnowball; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Blocks; import net.minecraft.item.Item; import net.minecraft.item.ItemRecord; import net.minecraft.item.ItemStack; @@ -101,6 +100,7 @@ import vazkii.botania.client.render.tile.RenderTilePylon; import vazkii.botania.client.render.tile.RenderTileRedString; import vazkii.botania.client.render.tile.RenderTileRuneAltar; import vazkii.botania.client.render.tile.RenderTileSkullOverride; +import vazkii.botania.client.render.tile.RenderTileSparkChanger; import vazkii.botania.client.render.tile.RenderTileSpawnerClaw; import vazkii.botania.client.render.tile.RenderTileSpreader; import vazkii.botania.client.render.tile.RenderTileStarfield; @@ -117,6 +117,7 @@ import vazkii.botania.common.block.tile.TileHourglass; import vazkii.botania.common.block.tile.TileIncensePlate; import vazkii.botania.common.block.tile.TilePylon; import vazkii.botania.common.block.tile.TileRuneAltar; +import vazkii.botania.common.block.tile.TileSparkChanger; import vazkii.botania.common.block.tile.TileSpawnerClaw; import vazkii.botania.common.block.tile.TileStarfield; import vazkii.botania.common.block.tile.TileTerraPlate; @@ -151,8 +152,8 @@ import cpw.mods.fml.common.FMLCommonHandler; import cpw.mods.fml.common.FMLLog; import cpw.mods.fml.common.Optional; import cpw.mods.fml.common.event.FMLInitializationEvent; -import cpw.mods.fml.common.event.FMLPreInitializationEvent; import cpw.mods.fml.common.event.FMLPostInitializationEvent; +import cpw.mods.fml.common.event.FMLPreInitializationEvent; import cpw.mods.fml.relauncher.ReflectionHelper; public class ClientProxy extends CommonProxy { @@ -278,6 +279,7 @@ public class ClientProxy extends CommonProxy { ClientRegistry.bindTileEntitySpecialRenderer(TileCorporeaCrystalCube.class, new RenderTileCorporeaCrystalCube()); ClientRegistry.bindTileEntitySpecialRenderer(TileIncensePlate.class, new RenderTileIncensePlate()); ClientRegistry.bindTileEntitySpecialRenderer(TileHourglass.class, new RenderTileHourglass()); + ClientRegistry.bindTileEntitySpecialRenderer(TileSparkChanger.class, new RenderTileSparkChanger()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntitySkull.class, new RenderTileSkullOverride()); diff --git a/src/main/java/vazkii/botania/client/render/tile/RenderTileSparkChanger.java b/src/main/java/vazkii/botania/client/render/tile/RenderTileSparkChanger.java new file mode 100644 index 000000000..97188418e --- /dev/null +++ b/src/main/java/vazkii/botania/client/render/tile/RenderTileSparkChanger.java @@ -0,0 +1,66 @@ +/** + * This class was created by . It's distributed as + * part of the Botania Mod. Get the Source Code in github: + * https://github.com/Vazkii/Botania + * + * Botania is Open Source and distributed under the + * Botania License: http://botaniamod.net/license.php + * + * File Created @ [Jun 28, 2015, 10:19:20 PM (GMT)] + */ +package vazkii.botania.client.render.tile; + +import java.awt.Color; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.ItemRenderer; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.texture.TextureMap; +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.IIcon; + +import org.lwjgl.opengl.GL11; + +import vazkii.botania.common.block.tile.TileSparkChanger; + +public class RenderTileSparkChanger extends TileEntitySpecialRenderer { + + @Override + public void renderTileEntityAt(TileEntity tileentity, double d0, double d1, double d2, float pticks) { + GL11.glPushMatrix(); + GL11.glTranslated(d0, d1, d2); + GL11.glRotated(90F, 1F, 0F, 0F); + GL11.glTranslatef(0.8F, 0.2F, -0.22F); + GL11.glColor4f(1F, 1F, 1F, 1F); + ItemStack stack = ((TileSparkChanger) tileentity).getStackInSlot(0); + if(stack != null) { + GL11.glPushMatrix(); + Minecraft.getMinecraft().renderEngine.bindTexture(TextureMap.locationItemsTexture); + float s = 0.6F; + GL11.glScalef(s, s, s); + GL11.glRotatef(180F, 0F, 1F, 0F); + + int renderPass = 0; + do { + IIcon icon = stack.getItem().getIcon(stack, renderPass); + if(icon != null) { + Color color = new Color(stack.getItem().getColorFromItemStack(stack, renderPass)); + GL11.glColor3ub((byte) color.getRed(), (byte) color.getGreen(), (byte) color.getBlue()); + float f = icon.getMinU(); + float f1 = icon.getMaxU(); + float f2 = icon.getMinV(); + float f3 = icon.getMaxV(); + ItemRenderer.renderItemIn2D(Tessellator.instance, f1, f2, f, f3, icon.getIconWidth(), icon.getIconHeight(), 1F / 16F); + GL11.glColor3f(1F, 1F, 1F); + } + renderPass++; + } while(renderPass < stack.getItem().getRenderPasses(stack.getItemDamage())); + GL11.glPopMatrix(); + } + GL11.glColor4f(1F, 1F, 1F, 1F); + GL11.glPopMatrix(); + } + +} diff --git a/src/main/java/vazkii/botania/common/block/BlockSparkChanger.java b/src/main/java/vazkii/botania/common/block/BlockSparkChanger.java new file mode 100644 index 000000000..040cf5994 --- /dev/null +++ b/src/main/java/vazkii/botania/common/block/BlockSparkChanger.java @@ -0,0 +1,160 @@ +/** + * This class was created by . It's distributed as + * part of the Botania Mod. Get the Source Code in github: + * https://github.com/Vazkii/Botania + * + * Botania is Open Source and distributed under the + * Botania License: http://botaniamod.net/license.php + * + * File Created @ [Jun 28, 2015, 10:01:01 PM (GMT)] + */ +package vazkii.botania.common.block; + +import java.util.Random; + +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.IIcon; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import vazkii.botania.client.core.helper.IconHelper; +import vazkii.botania.common.block.tile.TileSimpleInventory; +import vazkii.botania.common.block.tile.TileSparkChanger; +import vazkii.botania.common.block.tile.TileTerraPlate; +import vazkii.botania.common.block.tile.string.TileRedStringDispenser; +import vazkii.botania.common.item.ModItems; +import vazkii.botania.common.lib.LibBlockNames; + +public class BlockSparkChanger extends BlockModContainer { + + IIcon[] icons; + Random random; + + public BlockSparkChanger() { + super(Material.rock); + setBlockBounds(0F, 0F, 0F, 1F, 3F / 16F, 1F); + setHardness(2.0F); + setResistance(10.0F); + setStepSound(soundTypeStone); + setBlockName(LibBlockNames.SPARK_CHANGER); + + random = new Random(); + } + + @Override + public boolean renderAsNormalBlock() { + return false; + } + + @Override + public boolean isOpaqueCube() { + return false; + } + + @Override + public boolean getBlocksMovement(IBlockAccess p_149655_1_, int p_149655_2_, int p_149655_3_, int p_149655_4_) { + return false; + } + + @Override + public void registerBlockIcons(IIconRegister par1IconRegister) { + icons = new IIcon[3]; + for(int i = 0; i < icons.length; i++) + icons[i] = IconHelper.forBlock(par1IconRegister, this, i); + } + + @Override + public IIcon getIcon(int par1, int par2) { + return icons[Math.min(2, par1)]; + } + + @Override + public void onNeighborBlockChange(World world, int x, int y, int z, Block block) { + boolean power = world.isBlockIndirectlyGettingPowered(x, y, z) || world.isBlockIndirectlyGettingPowered(x, y + 1, z); + int meta = world.getBlockMetadata(x, y, z); + boolean powered = (meta & 8) != 0; + + if(power && !powered) { + ((TileSparkChanger) world.getTileEntity(x, y, z)).doSwap(); + world.setBlockMetadataWithNotify(x, y, z, meta | 8, 4); + } else if(!power && powered) + world.setBlockMetadataWithNotify(x, y, z, meta & -9, 4); + } + + @Override + public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int s, float xs, float ys, float zs) { + TileSparkChanger changer = (TileSparkChanger) world.getTileEntity(x, y, z); + ItemStack cstack = changer.getStackInSlot(0); + ItemStack pstack = player.getCurrentEquippedItem(); + if(pstack != null && pstack.getItem() == ModItems.sparkUpgrade) { + changer.setInventorySlotContents(0, pstack.copy()); + changer.markDirty(); + + pstack.stackSize--; + if(pstack.stackSize == 0) + player.inventory.setInventorySlotContents(player.inventory.currentItem, null); + + if(cstack != null && !player.inventory.addItemStackToInventory(cstack)) + player.dropPlayerItemWithRandomChoice(cstack, false); + return true; + } else if(cstack != null) { + changer.setInventorySlotContents(0, null); + changer.markDirty(); + if(!player.inventory.addItemStackToInventory(cstack)) + player.dropPlayerItemWithRandomChoice(cstack, false); + return true; + } + + return false; + } + + @Override + public void breakBlock(World par1World, int par2, int par3, int par4, Block par5, int par6) { + TileSimpleInventory inv = (TileSimpleInventory) par1World.getTileEntity(par2, par3, par4); + + if (inv != null) { + for (int j1 = 0; j1 < inv.getSizeInventory(); ++j1) { + ItemStack itemstack = inv.getStackInSlot(j1); + + if (itemstack != null) { + float f = random.nextFloat() * 0.8F + 0.1F; + float f1 = random.nextFloat() * 0.8F + 0.1F; + EntityItem entityitem; + + for (float f2 = random.nextFloat() * 0.8F + 0.1F; itemstack.stackSize > 0; par1World.spawnEntityInWorld(entityitem)) { + int k1 = random.nextInt(21) + 10; + + if (k1 > itemstack.stackSize) + k1 = itemstack.stackSize; + + itemstack.stackSize -= k1; + entityitem = new EntityItem(par1World, par2 + f, par3 + f1, par4 + f2, new ItemStack(itemstack.getItem(), k1, itemstack.getItemDamage())); + float f3 = 0.05F; + entityitem.motionX = (float)random.nextGaussian() * f3; + entityitem.motionY = (float)random.nextGaussian() * f3 + 0.2F; + entityitem.motionZ = (float)random.nextGaussian() * f3; + + if (itemstack.hasTagCompound()) + entityitem.getEntityItem().setTagCompound((NBTTagCompound)itemstack.getTagCompound().copy()); + } + } + } + + par1World.func_147453_f(par2, par3, par4, par5); + } + + super.breakBlock(par1World, par2, par3, par4, par5, par6); + } + + @Override + public TileEntity createNewTileEntity(World world, int meta) { + return new TileSparkChanger(); + } + +} diff --git a/src/main/java/vazkii/botania/common/block/ModBlocks.java b/src/main/java/vazkii/botania/common/block/ModBlocks.java index 47a5a9ff0..2a036fa48 100644 --- a/src/main/java/vazkii/botania/common/block/ModBlocks.java +++ b/src/main/java/vazkii/botania/common/block/ModBlocks.java @@ -127,6 +127,7 @@ import vazkii.botania.common.block.tile.TileOpenCrate; import vazkii.botania.common.block.tile.TilePlatform; import vazkii.botania.common.block.tile.TilePylon; import vazkii.botania.common.block.tile.TileRuneAltar; +import vazkii.botania.common.block.tile.TileSparkChanger; import vazkii.botania.common.block.tile.TileSpawnerClaw; import vazkii.botania.common.block.tile.TileSpecialFlower; import vazkii.botania.common.block.tile.TileStarfield; @@ -229,6 +230,7 @@ public final class ModBlocks { public static Block incensePlate; public static Block hourglass; public static Block ghostRail; + public static Block sparkChanger; public static void init() { flower = new BlockModFlower(); @@ -302,6 +304,7 @@ public final class ModBlocks { incensePlate = new BlockIncensePlate(); hourglass = new BlockHourglass(); ghostRail = new BlockGhostRail(); + sparkChanger = new BlockSparkChanger(); ModFluffBlocks.init(); @@ -391,6 +394,7 @@ public final class ModBlocks { registerTile(TileCorporeaCrystalCube.class, LibBlockNames.CORPOREA_CRYSTAL_CUBE); registerTile(TileIncensePlate.class, LibBlockNames.INCENSE_PLATE); registerTile(TileHourglass.class, LibBlockNames.HOURGLASS); + registerTile(TileSparkChanger.class, LibBlockNames.SPARK_CHANGER); BotaniaAPI.registerSubTile(LibBlockNames.SUBTILE_PUREDAISY, SubTilePureDaisy.class); BotaniaAPI.registerSubTile(LibBlockNames.SUBTILE_MANASTAR, SubTileManastar.class); diff --git a/src/main/java/vazkii/botania/common/block/tile/TileSparkChanger.java b/src/main/java/vazkii/botania/common/block/tile/TileSparkChanger.java new file mode 100644 index 000000000..13c1052f6 --- /dev/null +++ b/src/main/java/vazkii/botania/common/block/tile/TileSparkChanger.java @@ -0,0 +1,86 @@ +/** + * This class was created by . It's distributed as + * part of the Botania Mod. Get the Source Code in github: + * https://github.com/Vazkii/Botania + * + * Botania is Open Source and distributed under the + * Botania License: http://botaniamod.net/license.php + * + * File Created @ [Jun 28, 2015, 10:02:11 PM (GMT)] + */ +package vazkii.botania.common.block.tile; + +import java.util.ArrayList; +import java.util.List; + +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.common.util.ForgeDirection; +import vazkii.botania.api.internal.VanillaPacketDispatcher; +import vazkii.botania.api.mana.spark.ISparkAttachable; +import vazkii.botania.api.mana.spark.ISparkEntity; +import vazkii.botania.common.item.ModItems; +import vazkii.botania.common.lib.LibBlockNames; +import vazkii.botania.common.lib.LibMisc; + +public class TileSparkChanger extends TileSimpleInventory { + + public void doSwap() { + if(worldObj.isRemote) + return; + + ItemStack changeStack = getStackInSlot(0); + List attachables = new ArrayList(); + for(ForgeDirection dir : LibMisc.CARDINAL_DIRECTIONS) { + TileEntity tile = worldObj.getTileEntity(xCoord + dir.offsetX, yCoord, zCoord + dir.offsetZ); + if(tile != null && tile instanceof ISparkAttachable) { + ISparkAttachable attach = (ISparkAttachable) tile; + ISparkEntity spark = attach.getAttachedSpark(); + if(spark != null) { + int upg = spark.getUpgrade(); + int newUpg = changeStack == null ? 0 : changeStack.getItemDamage() + 1; + if(upg != newUpg) + attachables.add(attach); + } + } + } + + if(attachables.size() > 0) { + ISparkAttachable attach = attachables.get(worldObj.rand.nextInt(attachables.size())); + ISparkEntity spark = attach.getAttachedSpark(); + int upg = spark.getUpgrade(); + ItemStack sparkStack = upg == 0 ? null : new ItemStack(ModItems.sparkUpgrade, 1, upg - 1); + int newUpg = changeStack == null ? 0 : changeStack.getItemDamage() + 1; + spark.setUpgrade(newUpg); + setInventorySlotContents(0, sparkStack); + markDirty(); + } + } + + @Override + public int getSizeInventory() { + return 1; + } + + @Override + public boolean isItemValidForSlot(int i, ItemStack itemstack) { + return itemstack != null && itemstack.getItem() == ModItems.sparkUpgrade; + } + + @Override + public int getInventoryStackLimit() { + return 1; + } + + @Override + public void markDirty() { + super.markDirty(); + VanillaPacketDispatcher.dispatchTEToNearbyPlayers(this); + } + + @Override + public String getInventoryName() { + return LibBlockNames.SPARK_CHANGER; + } + +} diff --git a/src/main/java/vazkii/botania/common/core/BotaniaCreativeTab.java b/src/main/java/vazkii/botania/common/core/BotaniaCreativeTab.java index a520ca115..7bb04047c 100644 --- a/src/main/java/vazkii/botania/common/core/BotaniaCreativeTab.java +++ b/src/main/java/vazkii/botania/common/core/BotaniaCreativeTab.java @@ -240,6 +240,7 @@ public final class BotaniaCreativeTab extends CreativeTabs { addItem(ModItems.clip); addItem(ModItems.spark); addItem(ModItems.sparkUpgrade); + addBlock(ModBlocks.sparkChanger); addItem(ModItems.corporeaSpark); addBlock(ModBlocks.corporeaIndex); addBlock(ModBlocks.corporeaFunnel); diff --git a/src/main/java/vazkii/botania/common/lib/LibBlockNames.java b/src/main/java/vazkii/botania/common/lib/LibBlockNames.java index 132ad8fd9..0390c2362 100644 --- a/src/main/java/vazkii/botania/common/lib/LibBlockNames.java +++ b/src/main/java/vazkii/botania/common/lib/LibBlockNames.java @@ -86,6 +86,7 @@ public final class LibBlockNames { public static final String INCENSE_PLATE = "incensePlate"; public static final String HOURGLASS = "hourglass"; public static final String GHOST_RAIL = "ghostRail"; + public static final String SPARK_CHANGER = "sparkChanger"; public static final String SUBTILE_PUREDAISY = "puredaisy"; public static final String SUBTILE_MANASTAR = "manastar"; diff --git a/src/main/resources/assets/botania/lang/en_US.lang b/src/main/resources/assets/botania/lang/en_US.lang index 6e3e1a24f..298bd48f3 100644 --- a/src/main/resources/assets/botania/lang/en_US.lang +++ b/src/main/resources/assets/botania/lang/en_US.lang @@ -930,6 +930,7 @@ tile.botania:corporeaCrystalCube.name=Corporea Crystal Cube tile.botania:incensePlate.name=Incense Plate tile.botania:hourglass.name=Hovering Hourglass tile.botania:ghostRail.name=Spectral Rail +tile.botania:sparkChanger.name=Spark Tinkerer # FLOWER NAMES tile.botania:flower..name=Botania Flower diff --git a/src/main/resources/assets/botania/textures/blocks/sparkChanger0.png b/src/main/resources/assets/botania/textures/blocks/sparkChanger0.png new file mode 100644 index 0000000000000000000000000000000000000000..a012985bc12412e844d0d6f8b2eb4104d8da57d7 GIT binary patch literal 15645 zcmeI3aZnR?7RMLLfQNWeagbuGG3XhkVY3MdWShiNf`T>5kYK?ZPM6I>7LshtE+$}$ zo*tg9GgNz4luGgL(es8A+pEaU6+POj9jTnijTH;Gn}iU5!0)`f z-rPT%nPm6<-tYU~?&tS=FZ<8Fn7ew#jOfH@1VLuxWE=DNW32F<7S8|f-ec47hab4I z3t0r29w&UmkotoO2%>GLEd^YGX%$W~jugVm6jLc)hl`($Ai8B<7eSU&oTQj4rJZ`| ztq)E~CA3v9eNJssm|U5Zjn1xeQ|7AG7P6|G)LNy>4AD9-&IfQ%93k;K>`oT<>ZQK8 zIDak-qf&`)3RkX|W(Wx-1*Tj{CgY|g>J+t{RA8x+G;Io|#!}OX->aC)g!NEG}8?#tl{CUUX?c05JYOSn)h zMS)HxvXViKtHN#fU7D3dDLdt$oE*#Rut{|;8^bZIjhP~4&^={heoaiKVD3q;*Ws8n zHOpmf;t>RpPO4-rl`aa+qgbZGO;TB#_*+Su?Cv?bWPEWRh$MKXymrb=GRc&K_Ut@j#T3;3xyX6;tIH zCRb=Im>S2lxB^=jqW4b%SmsF0))x1`&Ot&a8T%C?%iev?bD-`}1Av3`keAQS9 zj(Dgjp>spxSV_EuaXSdkKs$(13UxV4b?EqD$jsng!ZR5=mCJmR6EZDT;jnOr}uz zgwRHYtPpA>5ZcOzCX_0*%1Wx_RB=hMyo5?s$+ehDDJRsLv~&{FSTUt`EOdx`Lg+Pa zn(uFfJ!Fn>_5W^)Ny1D>l})q!uB;5%t^A(#bucrv@xjqChn@CyA{XIiDWT5v(y>Ad zwyt1j5;VSg#R*dAVFpqt1InsH9~d3Kte`R=qbDxl!%_Cf50Ouu!(*eIQ`C|_if_Wy zdX_2SJcOIdDCM`qzbI~hzy}pzWF0DWdOQ6;z|Rt!{yX>&S3Um${HZ$8|78Wnw=HQS zoTZf2fR63hv4MwMH2+dQSW06ZU}EX%gnu2JFI#>e5x#Q4bm)Y!@y!1D1w#4RD}3|Q zlnVZXV#04g8tMk6g>Y%88 z{EoiQs6Z?+2>=9cin!o>0I!G(00K8fTyQ>sSHuMXftw;OI3K_(;sSucO%WHI58xGX z0YKoUhzrgK@QSzqAaGN}1?K~JMO*+7xGCa-^8vgfE&vGJ6mh}%0A3Ln00eG|xZr#M zuZRl(0yjlma6W)n#03C>n<6eaAHXZ(0)W6x5f_{f;1zKJK;Wi`3(g1dinstEa8twu z=L2{}TmTTbDdK|j0lXqE00`U^al!cjUJ(}n1a6AB;CukDhzkG$H$_}CuITZ1GbtzkLZ*j*^KwWNAH%=3DIv4-ObAl72tl@PN04tv`Qr@) zsZb!u*BcN7-;W@3m{-=fFGrB@i#f&&i?=7@bbtA4HUx2v9v?nBvrkr3tH~kD{?>SS zXi-su=lA_p^CQXOW2f=x^2-G)pGi!dMenp&_Ueq5d8u#hIgwo-dE>LLja$xqSKZy) zF&bXmv^1-B@rc%dR}IbTV8cI18ffoXuww0CR8-7)^R^FnhHsW_Ea=bDpVM6E+E&Ak z9_{>1>H+-Jyss|*;q^uLo-d2q(-+aGP&Ve0-!5IdV3+LJV=u)nd?}8eU7KrbEtck|`4gsMlHs58lzF4cK5uKe(prmO6U&bn{< zEx&kU<>SLoMkx*t#Aq)??D-_Jf9Xh6)~%ntd-DB?ORrhk`MadCmG?JY-KkdAT35eS zJlyoeVDo{yX>n_a1Ny9|KDo2w+R|O^3yZvuzTf)nN4gzt5g%W_H?UzoSrA>neRN)% z?2aXK?H^BuZN9KJ*S6fexTr^SGqZcTz5QZ6qB~tst87qStUBA)y6#p--_?Y_zIXC) zS+DMm6tnDjZ^lsDn`uKMbDwsSsb<$B=V$7gdXIi#{^D%>&2DGMr-@|CwOYLOwtCx~ z9rv4umaOj{nL&2nUwAR5ttIA9za3f8GD^IoY3SM?(K9>4%FS>4^UFV1f4U~JZUwSs z2Nu)XvOb(sXXqnudIx5e)!qK`$L8{et_z9P!-F+b}mEp1XJLg?*ilXTSS; z|Ki6F9hv^#*{jvR{Oqps<7ulBDt}~=SQ>hA_Wk|&cuDFvMJMv>k1YPl=0}rzRePIl z`}XV1XQmxSuIo?KC&wRO+3t9I9eyS3Tx|Q9_}{(W_^VfBTd!5r_9e%hit>In8iwTO X_sLGW;`RzJFy~~gHnu*qVcS0eBMg0( literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/botania/textures/blocks/sparkChanger1.png b/src/main/resources/assets/botania/textures/blocks/sparkChanger1.png new file mode 100644 index 0000000000000000000000000000000000000000..be11b6241ea7d26b69e36d95d6e662ad040016b0 GIT binary patch literal 15730 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 Ku6E&?_5TLKxT*jE literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/botania/textures/blocks/sparkChanger2.png b/src/main/resources/assets/botania/textures/blocks/sparkChanger2.png new file mode 100644 index 0000000000000000000000000000000000000000..a40baf87dad2174abe2cad4acd0997b5f580ba3d GIT binary patch literal 15120 zcmeI3U5pb|6vr=-_^||I;@5^iY`U0Wa5{6Roh>tIi|ZEHRlB<^CF~N3OlNM}fp(^L zX1CpyAVOl02V;B!#Sk6{ghcegL=!Z)>OK%9O5ziS7{m_*3=$p`U+_*pXK&lpz2l%1s`F(~S z^>30ALZZ-*vc|x45p9?rN@~;FHCgwsj&()K3Qmwmj_NDtbEd77qy9=>1)saayx&&| zakfYOeQrVDSYpK2ZxxYG3P_wLz>qI22cQH)tKj24QGh{S2=Xw&kIEH2V+`MYansB0izgwvBsoht;&?scuHFlUHUsek|31L#j2}p zq>j+n-|t(o$uM=RWIq<+$>`=(Hxr?_>Yx~2iXjd{PUuZSNrAE=z|9_gHHeTWEZs;? z)#Vb_a^k9_2o*_I#PCW1DuPhW;fW-3;I7eCN1ay|Z>%Set|@7&m{*;ckykT_FPNDK z-yHNrHrA5TZ{@5azAO|AM)-Ea9#v(1DTAi%sHTPn<1suCFbrKuYY@SdDse$AEO4?I zk~uXP!W2XlOv`B)hH|(9Ad&FOTT;g@ZNlx5T527q7Sod6o6jU$fwCYsOZKe7S(As(t_g_cBZHw2DT4@&;;akR< zm8noHkBJq!-NxtzU z+0vPfZR>WPH1FtkW+ig5A_Ne+$#Bv65MG9h075qzE;=8=%Wx4u=qAHO=RSM zWVq;j2rt7$0HK=<7o88`Ww;0+bd%wt^C7$p7XgHBGF)^%gqPtWfY42bi_VAeGF$`@ zy2)_S`4C=)ivU7587?{>!pm?GKTdb;bpi8 zAas-AqVplV3>N`}ZZceSK7^OyB7o3MhKtUJ@G@Kk5W2~5(fJTwhKm3~HyJKEAHvIU z5kTlB!$s#qco{AN2;HRO>T155iA?-LW(mJ}xl|nevSw465i<8?v83DU4+}N>u;o<#n4qiMh|M={Z zvkx8mc=or~0$Y~eF?8?Dk%e8G_dU4ouywt3smD3<>)VIGXD{xJUD^}-ebEl?tQbH2 zKqk{I&m4!tJ7+HcaA0c7sJ`HM_tvlXA9?!v#;1_DE!>xVM}F&D`Mt&YlSj{=y71Gh z*FL{%OG$tK{8t~IfPcJnCG+W*A6=Zh^1+T}?<#%YPwh=Y1N!&9ynOu=eZfevjazOE(7NJ?~eWQ%`kqo6@bAtL-7+&Zr%MSLYR21 literal 0 HcmV?d00001