From e5f93b651cefd70c6faeb2662bcdce07dc89fb5f Mon Sep 17 00:00:00 2001 From: Matt Caughey Date: Sun, 10 Nov 2013 04:00:47 -0500 Subject: [PATCH] Made leather armor protect you from deathblooms, burning blossoms, thorns, and tiny cacti --- apis/worldcore/asm/WCFMLLoadingPlugin.java | 43 ---- apis/worldcore/asm/WCFogColour.java | 225 ------------------ apis/worldcore/asm/WCFogDistance.java | 201 ---------------- apis/worldcore/interfaces/IWCFog.java | 8 - .../biomes/BiomeGenOminousWoods.java | 3 +- .../biomes/BiomeGenOminousWoodsThick.java | 3 +- .../biomesoplenty/blocks/BlockBOPFlower.java | 15 +- .../biomesoplenty/blocks/BlockBOPFlower2.java | 18 +- .../biomesoplenty/blocks/BlockBOPPlant.java | 29 ++- .../textures/blocks/holymossycobble.png | Bin 0 -> 661 bytes .../textures/blocks/leaves_pine_fancy.png | Bin 372 -> 366 bytes .../textures/blocks/leaves_pine_fast.png | Bin 331 -> 362 bytes 12 files changed, 59 insertions(+), 486 deletions(-) delete mode 100644 apis/worldcore/asm/WCFMLLoadingPlugin.java delete mode 100644 apis/worldcore/asm/WCFogColour.java delete mode 100644 apis/worldcore/asm/WCFogDistance.java delete mode 100644 apis/worldcore/interfaces/IWCFog.java create mode 100644 resources/assets/biomesoplenty/textures/blocks/holymossycobble.png diff --git a/apis/worldcore/asm/WCFMLLoadingPlugin.java b/apis/worldcore/asm/WCFMLLoadingPlugin.java deleted file mode 100644 index 737f2a7df..000000000 --- a/apis/worldcore/asm/WCFMLLoadingPlugin.java +++ /dev/null @@ -1,43 +0,0 @@ -package worldcore.asm; - -import java.io.File; -import java.util.Map; - -import cpw.mods.fml.relauncher.IFMLLoadingPlugin; -import cpw.mods.fml.relauncher.IFMLLoadingPlugin.TransformerExclusions; - -@TransformerExclusions({ "worldcore.asm" }) -public class WCFMLLoadingPlugin implements IFMLLoadingPlugin -{ - public static File location; - - @Override - public String[] getLibraryRequestClass() - { - return null; - } - - @Override - public String[] getASMTransformerClass() - { - return new String[] {WCFogColour.class.getName(), WCFogDistance.class.getName()}; - } - - @Override - public String getModContainerClass() - { - return null; - } - - @Override - public String getSetupClass() - { - return null; - } - - @Override - public void injectData(Map data) - { - location = (File)data.get("coremodLocation"); - } -} diff --git a/apis/worldcore/asm/WCFogColour.java b/apis/worldcore/asm/WCFogColour.java deleted file mode 100644 index b4ee9ee8a..000000000 --- a/apis/worldcore/asm/WCFogColour.java +++ /dev/null @@ -1,225 +0,0 @@ -package worldcore.asm; - -import static org.objectweb.asm.Opcodes.ALOAD; -import static org.objectweb.asm.Opcodes.ASTORE; -import static org.objectweb.asm.Opcodes.FLOAD; -import static org.objectweb.asm.Opcodes.INVOKESTATIC; -import static org.objectweb.asm.Opcodes.INVOKEVIRTUAL; - -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; - -import net.minecraft.client.Minecraft; -import net.minecraft.entity.Entity; -import net.minecraft.launchwrapper.IClassTransformer; -import net.minecraft.util.MathHelper; -import net.minecraft.util.Vec3; -import net.minecraft.world.World; -import net.minecraft.world.biome.BiomeGenBase; -import net.minecraftforge.common.ForgeDummyContainer; - -import org.objectweb.asm.ClassReader; -import org.objectweb.asm.ClassWriter; -import org.objectweb.asm.tree.AbstractInsnNode; -import org.objectweb.asm.tree.ClassNode; -import org.objectweb.asm.tree.InsnList; -import org.objectweb.asm.tree.MethodInsnNode; -import org.objectweb.asm.tree.MethodNode; -import org.objectweb.asm.tree.VarInsnNode; - -import worldcore.interfaces.IWCFog; - -public class WCFogColour implements IClassTransformer -{ - @Override - public byte[] transform(String name, String newname, byte[] bytes) - { - if (name.equals("net.minecraft.client.renderer.EntityRenderer")) - { - return patchEntityRenderer(newname, bytes, false); - } - - if (name.equals("bfe")) - { - return patchEntityRenderer(newname, bytes, true); - } - - return bytes; - } - - public static byte[] patchEntityRenderer(String name, byte[] bytes, boolean obfuscated) - { - String targetMethodName = ""; - - if (obfuscated) - targetMethodName ="i"; - else - targetMethodName ="updateFogColor"; - - ClassNode classNode = new ClassNode(); - ClassReader classReader = new ClassReader(bytes); - classReader.accept(classNode, 0); - - Iterator methods = classNode.methods.iterator(); - - while (methods.hasNext()) - { - MethodNode m = methods.next(); - int fdiv_index = -1; - - if (m.name.equals(targetMethodName) && (m.desc.equals("(F)V"))) - { - AbstractInsnNode currentNode = null; - AbstractInsnNode targetNode = null; - - Iterator iter = m.instructions.iterator(); - - int index = -1; - int timesFound = 0; - - while (iter.hasNext()) - { - index++; - currentNode = iter.next(); - - if (currentNode.getOpcode() == INVOKEVIRTUAL) - { - if (timesFound == 1) - { - targetNode = currentNode; - fdiv_index = index; - break; - } - else - { - timesFound++; - } - } - } - - /* - mv.visitLineNumber(1658, l8); - mv.visitVarInsn(ALOAD, 3); - mv.visitVarInsn(ALOAD, 2); - mv.visitMethodInsn(INVOKESTATIC, "biomesoplenty/asm/BOPFogColour", "getFogVec", "(Lnet/minecraft/entity/Entity;Lnet/minecraft/world/World;)Lnet/minecraft/util/Vec3;"); - mv.visitVarInsn(ASTORE, 9); - */ - - InsnList toInject = new InsnList(); - - toInject.add(new VarInsnNode(ALOAD, 3)); - toInject.add(new VarInsnNode(ALOAD, 2)); - toInject.add(new VarInsnNode(FLOAD, 1)); - if (obfuscated) - toInject.add(new MethodInsnNode(INVOKESTATIC, "worldcore/asm/WCFogColour", "getFogVec", "(Lnn;Labw;F)Latc;")); - else - toInject.add(new MethodInsnNode(INVOKESTATIC, "worldcore/asm/WCFogColour", "getFogVec", "(Lnet/minecraft/entity/Entity;Lnet/minecraft/world/World;F)Lnet/minecraft/util/Vec3;")); - toInject.add(new VarInsnNode(ASTORE, 9)); - - m.instructions.insert(m.instructions.get(fdiv_index + 1), toInject); - - /* - mv.visitLineNumber(1654, l8); - mv.visitVarInsn(ALOAD, 2); - mv.visitVarInsn(FLOAD, 1); - mv.visitMethodInsn(INVOKEVIRTUAL, "net/minecraft/client/multiplayer/WorldClient", "getFogColor", "(F)Lnet/minecraft/util/Vec3;"); - mv.visitVarInsn(ASTORE, 9); - */ - - List remNodes = new ArrayList(); - - for (int i = -2; i <= 1; i++) - { - remNodes.add(m.instructions.get(fdiv_index + i)); - } - - for (AbstractInsnNode remNode : remNodes) - { - m.instructions.remove(remNode); - } - - break; - } - } - - ClassWriter writer = new ClassWriter(ClassWriter.COMPUTE_MAXS | ClassWriter.COMPUTE_FRAMES); - classNode.accept(writer); - return writer.toByteArray(); - } - - public static int getFogBlendColour(World world, float partialRenderTick, int playerX, int playerZ) - { - int distance = Minecraft.getMinecraft().gameSettings.fancyGraphics ? ForgeDummyContainer.blendRanges[Minecraft.getMinecraft().gameSettings.renderDistance] : 0; - - int r = 0; - int g = 0; - int b = 0; - - float celestialAngle = world.getCelestialAngle(partialRenderTick); - - int wr = (int)(world.provider.getFogColor(celestialAngle, partialRenderTick).xCoord * 255); - int wg = (int)(world.provider.getFogColor(celestialAngle, partialRenderTick).yCoord * 255); - int wb = (int)(world.provider.getFogColor(celestialAngle, partialRenderTick).zCoord * 255); - - int defaultcolour = (wr << 16) + (wg << 8) + (wb); - int divider = 0; - - for (int x = -distance; x <= distance; ++x) - { - for (int z = -distance; z <= distance; ++z) - { - BiomeGenBase biome = world.getBiomeGenForCoords(playerX + x, playerZ + z); - int colour = 0; - - if (biome instanceof IWCFog) - { - colour = ((IWCFog)biome).getFogColour(); - } - else - { - colour = defaultcolour; - } - - r += (colour & 0xFF0000) >> 16; - g += (colour & 0x00FF00) >> 8; - b += colour & 0x0000FF; - divider++; - } - } - - float celestialAngleMultiplier = MathHelper.cos(celestialAngle * (float)Math.PI * 2.0F) * 2.0F + 0.5F; - - if (celestialAngleMultiplier < 0.0F) - { - celestialAngleMultiplier = 0.0F; - } - - if (celestialAngleMultiplier > 1.0F) - { - celestialAngleMultiplier = 1.0F; - } - - r *= celestialAngleMultiplier; - g *= celestialAngleMultiplier; - b *= celestialAngleMultiplier; - - int multiplier = (r / divider & 255) << 16 | (g / divider & 255) << 8 | b / divider & 255; - - return multiplier; - } - - public static Vec3 getFogVec(Entity entity, World world, float partialRenderTick) - { - int x = MathHelper.floor_double(entity.posX); - int z = MathHelper.floor_double(entity.posZ); - - int multiplier = getFogBlendColour(world, partialRenderTick, x, z); - - float r = (float)(multiplier >> 16 & 255) / 255.0F; - float g = (float)(multiplier >> 8 & 255) / 255.0F; - float b = (float)(multiplier & 255) / 255.0F; - - return world.getWorldVec3Pool().getVecFromPool(r, g, b); - } -} diff --git a/apis/worldcore/asm/WCFogDistance.java b/apis/worldcore/asm/WCFogDistance.java deleted file mode 100644 index 654ce7c4d..000000000 --- a/apis/worldcore/asm/WCFogDistance.java +++ /dev/null @@ -1,201 +0,0 @@ -package worldcore.asm; - -import static org.objectweb.asm.Opcodes.ALOAD; -import static org.objectweb.asm.Opcodes.FLOAD; -import static org.objectweb.asm.Opcodes.ILOAD; -import static org.objectweb.asm.Opcodes.INVOKESTATIC; - -import java.util.Iterator; - -import net.minecraft.client.Minecraft; -import net.minecraft.entity.Entity; -import net.minecraft.launchwrapper.IClassTransformer; -import net.minecraft.util.MathHelper; -import net.minecraft.world.World; -import net.minecraft.world.biome.BiomeGenBase; -import net.minecraftforge.common.ForgeDummyContainer; - -import org.lwjgl.opengl.GL11; -import org.objectweb.asm.ClassReader; -import org.objectweb.asm.ClassWriter; -import org.objectweb.asm.tree.AbstractInsnNode; -import org.objectweb.asm.tree.ClassNode; -import org.objectweb.asm.tree.InsnList; -import org.objectweb.asm.tree.MethodInsnNode; -import org.objectweb.asm.tree.MethodNode; -import org.objectweb.asm.tree.VarInsnNode; - -import worldcore.interfaces.IWCFog; - -public class WCFogDistance implements IClassTransformer -{ - private static int fogX, fogZ; - - private static boolean fogInit; - private static float storedFinalFogCloseness; - - @Override - public byte[] transform(String name, String newname, byte[] bytes) - { - if (name.equals("net.minecraft.client.renderer.EntityRenderer")) - { - return patchEntityRenderer(newname, bytes, false); - } - - if (name.equals("bfe")) - { - return patchEntityRenderer(newname, bytes, true); - } - - return bytes; - } - - public static byte[] patchEntityRenderer(String name, byte[] bytes, boolean obfuscated) - { - String targetMethodName = ""; - - if (obfuscated) - targetMethodName ="a"; - else - targetMethodName ="setupFog"; - - ClassNode classNode = new ClassNode(); - ClassReader classReader = new ClassReader(bytes); - classReader.accept(classNode, 0); - - Iterator methods = classNode.methods.iterator(); - - while (methods.hasNext()) - { - MethodNode m = methods.next(); - int fdiv_index = -1; - - if (m.name.equals(targetMethodName) && (m.desc.equals("(IF)V"))) - { - AbstractInsnNode currentNode = null; - AbstractInsnNode targetNode = null; - - Iterator iter = m.instructions.iterator(); - - int index = -1; - int timesFound = 0; - - while (iter.hasNext()) - { - index++; - currentNode = iter.next(); - - if (currentNode.getOpcode() == ALOAD) - { - if (timesFound == 22) - { - targetNode = currentNode; - fdiv_index = index; - break; - } - else - { - timesFound++; - } - } - } - - /* - mv.visitMethodInsn(INVOKESTATIC, "org/lwjgl/opengl/GL11", "glFogf", "(IF)V"); - mv.visitLabel(l71); - mv.visitLineNumber(1922, l71); - mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null); - mv.visitVarInsn(ALOAD, 3); - mv.visitVarInsn(FLOAD, 6); - mv.visitMethodInsn(INVOKESTATIC, "biomesoplenty/asm/BOPFogDistance", "setBiomeFogDistance", "(Lnet/minecraft/entity/Entity;F)V"); - mv.visitLabel(l32); - */ - - InsnList toInject = new InsnList(); - - toInject.add(new VarInsnNode(ALOAD, 3)); - toInject.add(new VarInsnNode(ILOAD, 1)); - toInject.add(new VarInsnNode(FLOAD, 6)); - if (obfuscated) - toInject.add(new MethodInsnNode(INVOKESTATIC, "worldcore/asm/WCFogDistance", "setBiomeFogDistance", "(Lnn;IF)V")); - else - toInject.add(new MethodInsnNode(INVOKESTATIC, "worldcore/asm/WCFogDistance", "setBiomeFogDistance", "(Lnet/minecraft/entity/Entity;IF)V")); - - m.instructions.insertBefore(m.instructions.get(fdiv_index), toInject); - - break; - } - } - - ClassWriter writer = new ClassWriter(ClassWriter.COMPUTE_MAXS | ClassWriter.COMPUTE_FRAMES); - classNode.accept(writer); - return writer.toByteArray(); - } - - public static void setBiomeFogDistance(Entity entity, int distance, float farPlaneDistance) - { - World world = entity.worldObj; - - int playerX = MathHelper.floor_double(entity.posX); - int playerZ = MathHelper.floor_double(entity.posZ); - - if (playerX == fogX && playerZ == fogZ && fogInit) - { - if (distance < 0) - { - GL11.glFogf(GL11.GL_FOG_START, 0.0F); - GL11.glFogf(GL11.GL_FOG_END, farPlaneDistance * 0.8F); - } - else - { - GL11.glFogf(GL11.GL_FOG_START, farPlaneDistance * (storedFinalFogCloseness / 10)); - GL11.glFogf(GL11.GL_FOG_END, Math.min(farPlaneDistance, 192.0F) * storedFinalFogCloseness); - } - return; - } - - fogInit = true; - - int blenddistance = Minecraft.getMinecraft().gameSettings.fancyGraphics ? ForgeDummyContainer.blendRanges[Minecraft.getMinecraft().gameSettings.renderDistance] : 0; - - int divider = 0; - - float fogCloseness = 0.0F; - - for (int x = -blenddistance; x <= blenddistance; ++x) - { - for (int z = -blenddistance; z <= blenddistance; ++z) - { - BiomeGenBase biome = world.getBiomeGenForCoords(playerX + x, playerZ + z); - - if (biome instanceof IWCFog) - { - fogCloseness += ((IWCFog)biome).getFogCloseness(); - } - else - { - fogCloseness += 1.0F; - } - - divider++; - } - } - - float finalFogCloseness = fogCloseness / divider; - - fogX = playerX; - fogZ = playerZ; - storedFinalFogCloseness = finalFogCloseness; - - if (distance < 0) - { - GL11.glFogf(GL11.GL_FOG_START, 0.0F); - GL11.glFogf(GL11.GL_FOG_END, farPlaneDistance * 0.8F); - } - else - { - GL11.glFogf(GL11.GL_FOG_START, farPlaneDistance * (finalFogCloseness / 10)); - GL11.glFogf(GL11.GL_FOG_END, Math.min(farPlaneDistance, 192.0F) * finalFogCloseness); - } - } -} diff --git a/apis/worldcore/interfaces/IWCFog.java b/apis/worldcore/interfaces/IWCFog.java deleted file mode 100644 index c970610f8..000000000 --- a/apis/worldcore/interfaces/IWCFog.java +++ /dev/null @@ -1,8 +0,0 @@ -package worldcore.interfaces; - -public interface IWCFog -{ - public int getFogColour(); - - public float getFogCloseness(); -} diff --git a/common/biomesoplenty/biomes/BiomeGenOminousWoods.java b/common/biomesoplenty/biomes/BiomeGenOminousWoods.java index d1ed27412..b63f0905a 100644 --- a/common/biomesoplenty/biomes/BiomeGenOminousWoods.java +++ b/common/biomesoplenty/biomes/BiomeGenOminousWoods.java @@ -123,7 +123,6 @@ public class BiomeGenOminousWoods extends BiomeGenBase implements IWCFog @Override public float getFogCloseness() { - // TODO Auto-generated method stub - return 0.2F; + return 0.1F; } } diff --git a/common/biomesoplenty/biomes/BiomeGenOminousWoodsThick.java b/common/biomesoplenty/biomes/BiomeGenOminousWoodsThick.java index f4996aa63..f0bc5a8ae 100644 --- a/common/biomesoplenty/biomes/BiomeGenOminousWoodsThick.java +++ b/common/biomesoplenty/biomes/BiomeGenOminousWoodsThick.java @@ -126,7 +126,6 @@ public class BiomeGenOminousWoodsThick extends BiomeGenBase implements IWCFog @Override public float getFogCloseness() { - // TODO Auto-generated method stub - return 0.2F; + return 0.1F; } } diff --git a/common/biomesoplenty/blocks/BlockBOPFlower.java b/common/biomesoplenty/blocks/BlockBOPFlower.java index 6db746edd..e8a660691 100644 --- a/common/biomesoplenty/blocks/BlockBOPFlower.java +++ b/common/biomesoplenty/blocks/BlockBOPFlower.java @@ -11,6 +11,7 @@ import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.potion.Potion; @@ -133,7 +134,19 @@ public class BlockBOPFlower extends BlockFlower if (!world.isRemote && meta == 2 && entity instanceof EntityLivingBase) { - ((EntityLivingBase)entity).addPotionEffect(new PotionEffect(Potion.wither.id, 200)); + if (entity instanceof EntityPlayer) + { + InventoryPlayer inventory = ((EntityPlayer)entity).inventory; + + if (!((inventory.armorInventory[0] != null && inventory.armorInventory[0].itemID == Item.bootsLeather.itemID) && (inventory.armorInventory[1] != null && inventory.armorInventory[1].itemID == Item.legsLeather.itemID))) + { + ((EntityLivingBase)entity).addPotionEffect(new PotionEffect(Potion.wither.id, 200)); + } + } + else + { + ((EntityLivingBase)entity).addPotionEffect(new PotionEffect(Potion.wither.id, 200)); + } } } diff --git a/common/biomesoplenty/blocks/BlockBOPFlower2.java b/common/biomesoplenty/blocks/BlockBOPFlower2.java index c49e53d9d..4a06cdbe6 100644 --- a/common/biomesoplenty/blocks/BlockBOPFlower2.java +++ b/common/biomesoplenty/blocks/BlockBOPFlower2.java @@ -10,6 +10,7 @@ import net.minecraft.client.renderer.texture.IconRegister; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.Icon; @@ -91,8 +92,21 @@ public class BlockBOPFlower2 extends BlockFlower @Override public void onEntityCollidedWithBlock(World world, int x, int y, int z, Entity entity) { - if (world.getBlockMetadata(x, y, z) == 2) { - entity.setFire(1); + if (world.getBlockMetadata(x, y, z) == 2) + { + if (entity instanceof EntityPlayer) + { + InventoryPlayer inventory = ((EntityPlayer)entity).inventory; + + if (!((inventory.armorInventory[0] != null && inventory.armorInventory[0].itemID == Item.bootsLeather.itemID) && (inventory.armorInventory[1] != null && inventory.armorInventory[1].itemID == Item.legsLeather.itemID))) + { + entity.setFire(1); + } + } + else + { + entity.setFire(1); + } } } diff --git a/common/biomesoplenty/blocks/BlockBOPPlant.java b/common/biomesoplenty/blocks/BlockBOPPlant.java index e338e7b75..95974f27f 100644 --- a/common/biomesoplenty/blocks/BlockBOPPlant.java +++ b/common/biomesoplenty/blocks/BlockBOPPlant.java @@ -12,6 +12,7 @@ import net.minecraft.client.renderer.texture.IconRegister; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.potion.Potion; @@ -271,11 +272,35 @@ public class BlockBOPPlant extends BlockFlower implements IShearable int meta = world.getBlockMetadata(x, y, z); if (meta == 5) { - entity.attackEntityFrom(DamageSource.cactus, 1); + if (entity instanceof EntityPlayer) + { + InventoryPlayer inventory = ((EntityPlayer)entity).inventory; + + if (!((inventory.armorInventory[0] != null && inventory.armorInventory[0].itemID == Item.bootsLeather.itemID) && (inventory.armorInventory[1] != null && inventory.armorInventory[1].itemID == Item.legsLeather.itemID))) + { + entity.attackEntityFrom(DamageSource.cactus, 1); + } + } + else + { + entity.attackEntityFrom(DamageSource.cactus, 1); + } } if (meta == 12) { - entity.attackEntityFrom(DamageSource.cactus, 1); + if (entity instanceof EntityPlayer) + { + InventoryPlayer inventory = ((EntityPlayer)entity).inventory; + + if (!((inventory.armorInventory[0] != null && inventory.armorInventory[0].itemID == Item.bootsLeather.itemID) && (inventory.armorInventory[1] != null && inventory.armorInventory[1].itemID == Item.legsLeather.itemID))) + { + entity.attackEntityFrom(DamageSource.cactus, 1); + } + } + else + { + entity.attackEntityFrom(DamageSource.cactus, 1); + } } } diff --git a/resources/assets/biomesoplenty/textures/blocks/holymossycobble.png b/resources/assets/biomesoplenty/textures/blocks/holymossycobble.png new file mode 100644 index 0000000000000000000000000000000000000000..d88cf5cc3207baaa3f33f8b9dace5d8406e65e28 GIT binary patch literal 661 zcmV;G0&4wN2bPDNB8 zb~7$DE-^7j^FlWO00I$7L_t(IPd$>`YZ^fm#^;ai-k{J(vY{%mjg(L;C2hfnqOssD zAW~Z-V7;Iytx}7Z7tseVuy_RpLB*Fqf3w?W7?znm-*>+6oHJrP9+yg`LZR?zujzEE zMm=iS&3Q7J5K1Hx*=)AiY&rn3-EN=I>-8Gw^WH6+!+yU%91cW_#i9|oAQww0pD%$9 zheO@(a?o70@7KhPSFYu9nNFwG8yRBH=X0UlUuhpr)ke45Z6)RbYFXCtc$A|*ihA_?8*qd+o6YHTQoj0VmlzBNaH!!~=#s3F zNJL77O!e-i^5G(v%h4kAlgT70s@1BH27G6LP^U#wD&cj^kW#sG(-J*s?smI!xeQnm z(8ZNhfAHh7QmK#+zLyu#>U5LZEc#5uhnnt5qtMlB4)! vYOl|9-wSEXeubc^n1NuA=4yd+%d-9glE4*xXru?>00000NkvXXu0mjf`eG{^ literal 0 HcmV?d00001 diff --git a/resources/assets/biomesoplenty/textures/blocks/leaves_pine_fancy.png b/resources/assets/biomesoplenty/textures/blocks/leaves_pine_fancy.png index bd3217338d5a8f209aba18fa64d83eab6fc885fc..fd5b8ab45c3513c97992b011f76b62fae3328635 100644 GIT binary patch delta 289 zcmV++0p9-f0`3BkB#|)~3c>&Y4#EKyC`y2lQz3sbNAp5A0002$Nkl_L4QWL?)4 z)I`6dAq3ll$9bL^1Q8WH&0simJ>eKaFhm3U4pb);4rDH6ngS?K?{eq|F}Z2Mkmf1B z#d?311l1p^!{9}I}GBd_jxIY=|KYMHQRfb n;VVRwM4Rp5@wq(Ce5>u`a0q000R9NkvXXu0mjfxYUPb delta 293 zcmV+=0owlV0`vlqBnkm@Qb$4nuFf3kks%uj!vFvd!vV){sAQ2wA%8G1^m3s90084j zL_t(IPi>OH4TL}p18HEZq6aGAM_Y7&sP9gb)2vL6N3fH4oh-17F_!zjKj6Oah2-+< zx+cEW>T#ZD1%h>5KMLRq?UNhSig;k#wt4ss>B}(#|Ag}6I4WlfnA>@n`nTg~SCI>OdeBQ~m^3zds8sY!pVXz*o z`L@2jtfdA%S0eg-4QrZ!Y+42>0{bS(9cGPz^`Jp0azdge8u+dr|9eL#_1vq%ABiG! rdLDB9zEQa=vY95yF>&Lc;aI*E%fr?9l+TI)0000&Y4#EKyC`y2lQz3sbNAp5A0002yNklh-OH(qQcp|_%XlWzF^ zN~3?0%0Ws<4C(7intEk@WLC`kl-YdHiecYenoTT3tk!^BYvv{)WfqC1uzvpmfsFA+ zr-bVJl{ya2y|pQjQj2{514CJWzwgaWtVPxdHH^9RI{WoXGD!DaCzQ@MFo}o~XbW5e jc`cYkB)3}py8Zy?ok)$B*Qogb0000LW4Z|Q1L)nd0^2b`;0I^>lebgePmTLLVXD-lEYaL_2*LA5Cy?6O23%}17 zyCJmf3(C16Ly9*mNWyc&VYJo|90q5t)98|oOe9P*rHEbuzf}zodpJyI-GP7^OITqi z7H>EMU>}krU;@!=Ls&MZ^hn@8qYJNBI=)Aah=nMw6Sh|IE6pVNxWnIjdtwfn0a`%M z(KkN=;FySgXn4JnjHd?9vC}d$GjN=z7m>^qwca}kR3}_;AAbM<002ovPDHLkV1iqt BX#4;G