From e4b8342e1ca20937eebea97665e784444a1af3da Mon Sep 17 00:00:00 2001 From: mezz Date: Thu, 25 Dec 2014 01:00:13 -0800 Subject: [PATCH] Close #392 Generate Crate Icons Automatically --- .../java/forestry/core/items/ItemCrated.java | 33 +- .../core/render/CrateRenderingHandler.java | 322 ++++++++++++++++++ src/main/java/forestry/plugins/PluginIC2.java | 18 +- .../java/forestry/plugins/PluginStorage.java | 68 ++-- .../storage/proxy/ClientProxyStorage.java | 24 ++ .../forestry/storage/proxy/ProxyStorage.java | 20 ++ .../forestry/textures/items/crate-filled.png | Bin 0 -> 212 bytes .../textures/items/crates/apatite.png | Bin 256 -> 0 bytes .../forestry/textures/items/crates/apples.png | Bin 248 -> 0 bytes .../forestry/textures/items/crates/ash.png | Bin 245 -> 0 bytes .../textures/items/crates/beeswax.png | Bin 244 -> 0 bytes .../textures/items/crates/bogearth.png | Bin 246 -> 0 bytes .../forestry/textures/items/crates/brass.png | Bin 250 -> 0 bytes .../forestry/textures/items/crates/brick.png | Bin 302 -> 0 bytes .../forestry/textures/items/crates/bronze.png | Bin 254 -> 0 bytes .../forestry/textures/items/crates/cacti.png | Bin 264 -> 0 bytes .../textures/items/crates/charcoal.png | Bin 274 -> 0 bytes .../forestry/textures/items/crates/clay.png | Bin 244 -> 0 bytes .../forestry/textures/items/crates/coal.png | Bin 274 -> 0 bytes .../textures/items/crates/cobblestone.png | Bin 385 -> 0 bytes .../textures/items/crates/cocoacomb.png | Bin 239 -> 0 bytes .../textures/items/crates/cookies.png | Bin 249 -> 0 bytes .../forestry/textures/items/crates/copper.png | Bin 254 -> 0 bytes .../forestry/textures/items/crates/dirt.png | Bin 260 -> 0 bytes .../textures/items/crates/drippingcombs.png | Bin 236 -> 0 bytes .../textures/items/crates/fertilizer.png | Bin 244 -> 0 bytes .../textures/items/crates/frozencombs.png | Bin 239 -> 0 bytes .../textures/items/crates/glowstone.png | Bin 246 -> 0 bytes .../forestry/textures/items/crates/gravel.png | Bin 241 -> 0 bytes .../textures/items/crates/honeycombs.png | Bin 242 -> 0 bytes .../textures/items/crates/honeydew.png | Bin 241 -> 0 bytes .../textures/items/crates/honeydrop.png | Bin 241 -> 0 bytes .../forestry/textures/items/crates/humus.png | Bin 246 -> 0 bytes .../forestry/textures/items/crates/iron.png | Bin 249 -> 0 bytes .../forestry/textures/items/crates/lapis.png | Bin 248 -> 0 bytes .../forestry/textures/items/crates/mulch.png | Bin 250 -> 0 bytes .../textures/items/crates/mycelium.png | Bin 332 -> 0 bytes .../textures/items/crates/netherbrick.png | Bin 267 -> 0 bytes .../textures/items/crates/netherrack.png | Bin 397 -> 0 bytes .../textures/items/crates/netherwart.png | Bin 239 -> 0 bytes .../textures/items/crates/nikolite.png | Bin 246 -> 0 bytes .../textures/items/crates/obsidian.png | Bin 352 -> 0 bytes .../forestry/textures/items/crates/peat.png | Bin 248 -> 0 bytes .../textures/items/crates/phosphor.png | Bin 245 -> 0 bytes .../forestry/textures/items/crates/pollen.png | Bin 239 -> 0 bytes .../textures/items/crates/propolis.png | Bin 268 -> 0 bytes .../textures/items/crates/redstone.png | Bin 246 -> 0 bytes .../forestry/textures/items/crates/reeds.png | Bin 248 -> 0 bytes .../textures/items/crates/refractorywax.png | Bin 244 -> 0 bytes .../forestry/textures/items/crates/resin.png | Bin 416 -> 0 bytes .../textures/items/crates/royaljelly.png | Bin 252 -> 0 bytes .../forestry/textures/items/crates/rubber.png | Bin 245 -> 0 bytes .../forestry/textures/items/crates/sand.png | Bin 402 -> 0 bytes .../textures/items/crates/sandstone.png | Bin 434 -> 0 bytes .../textures/items/crates/saplings.png | Bin 239 -> 0 bytes .../forestry/textures/items/crates/scrap.png | Bin 248 -> 0 bytes .../forestry/textures/items/crates/seeds.png | Bin 240 -> 0 bytes .../forestry/textures/items/crates/silver.png | Bin 249 -> 0 bytes .../textures/items/crates/simmeringcombs.png | Bin 239 -> 0 bytes .../textures/items/crates/soulsand.png | Bin 373 -> 0 bytes .../forestry/textures/items/crates/stone.png | Bin 414 -> 0 bytes .../textures/items/crates/stringycombs.png | Bin 239 -> 0 bytes .../textures/items/crates/tile]-16.png | Bin 239 -> 0 bytes .../forestry/textures/items/crates/tin.png | Bin 254 -> 0 bytes .../forestry/textures/items/crates/uum.png | Bin 261 -> 0 bytes .../forestry/textures/items/crates/wheat.png | Bin 263 -> 0 bytes .../forestry/textures/items/crates/wood.png | Bin 282 -> 0 bytes 67 files changed, 427 insertions(+), 58 deletions(-) create mode 100644 src/main/java/forestry/core/render/CrateRenderingHandler.java create mode 100644 src/main/java/forestry/storage/proxy/ClientProxyStorage.java create mode 100644 src/main/java/forestry/storage/proxy/ProxyStorage.java create mode 100644 src/main/resources/assets/forestry/textures/items/crate-filled.png delete mode 100755 src/main/resources/assets/forestry/textures/items/crates/apatite.png delete mode 100755 src/main/resources/assets/forestry/textures/items/crates/apples.png delete mode 100755 src/main/resources/assets/forestry/textures/items/crates/ash.png delete mode 100755 src/main/resources/assets/forestry/textures/items/crates/beeswax.png delete mode 100755 src/main/resources/assets/forestry/textures/items/crates/bogearth.png delete mode 100755 src/main/resources/assets/forestry/textures/items/crates/brass.png delete mode 100755 src/main/resources/assets/forestry/textures/items/crates/brick.png delete mode 100755 src/main/resources/assets/forestry/textures/items/crates/bronze.png delete mode 100755 src/main/resources/assets/forestry/textures/items/crates/cacti.png delete mode 100755 src/main/resources/assets/forestry/textures/items/crates/charcoal.png delete mode 100755 src/main/resources/assets/forestry/textures/items/crates/clay.png delete mode 100755 src/main/resources/assets/forestry/textures/items/crates/coal.png delete mode 100755 src/main/resources/assets/forestry/textures/items/crates/cobblestone.png delete mode 100755 src/main/resources/assets/forestry/textures/items/crates/cocoacomb.png delete mode 100755 src/main/resources/assets/forestry/textures/items/crates/cookies.png delete mode 100755 src/main/resources/assets/forestry/textures/items/crates/copper.png delete mode 100755 src/main/resources/assets/forestry/textures/items/crates/dirt.png delete mode 100755 src/main/resources/assets/forestry/textures/items/crates/drippingcombs.png delete mode 100755 src/main/resources/assets/forestry/textures/items/crates/fertilizer.png delete mode 100755 src/main/resources/assets/forestry/textures/items/crates/frozencombs.png delete mode 100755 src/main/resources/assets/forestry/textures/items/crates/glowstone.png delete mode 100755 src/main/resources/assets/forestry/textures/items/crates/gravel.png delete mode 100755 src/main/resources/assets/forestry/textures/items/crates/honeycombs.png delete mode 100755 src/main/resources/assets/forestry/textures/items/crates/honeydew.png delete mode 100755 src/main/resources/assets/forestry/textures/items/crates/honeydrop.png delete mode 100755 src/main/resources/assets/forestry/textures/items/crates/humus.png delete mode 100755 src/main/resources/assets/forestry/textures/items/crates/iron.png delete mode 100755 src/main/resources/assets/forestry/textures/items/crates/lapis.png delete mode 100755 src/main/resources/assets/forestry/textures/items/crates/mulch.png delete mode 100755 src/main/resources/assets/forestry/textures/items/crates/mycelium.png delete mode 100755 src/main/resources/assets/forestry/textures/items/crates/netherbrick.png delete mode 100755 src/main/resources/assets/forestry/textures/items/crates/netherrack.png delete mode 100755 src/main/resources/assets/forestry/textures/items/crates/netherwart.png delete mode 100755 src/main/resources/assets/forestry/textures/items/crates/nikolite.png delete mode 100755 src/main/resources/assets/forestry/textures/items/crates/obsidian.png delete mode 100755 src/main/resources/assets/forestry/textures/items/crates/peat.png delete mode 100755 src/main/resources/assets/forestry/textures/items/crates/phosphor.png delete mode 100755 src/main/resources/assets/forestry/textures/items/crates/pollen.png delete mode 100755 src/main/resources/assets/forestry/textures/items/crates/propolis.png delete mode 100755 src/main/resources/assets/forestry/textures/items/crates/redstone.png delete mode 100755 src/main/resources/assets/forestry/textures/items/crates/reeds.png delete mode 100755 src/main/resources/assets/forestry/textures/items/crates/refractorywax.png delete mode 100755 src/main/resources/assets/forestry/textures/items/crates/resin.png delete mode 100644 src/main/resources/assets/forestry/textures/items/crates/royaljelly.png delete mode 100755 src/main/resources/assets/forestry/textures/items/crates/rubber.png delete mode 100755 src/main/resources/assets/forestry/textures/items/crates/sand.png delete mode 100755 src/main/resources/assets/forestry/textures/items/crates/sandstone.png delete mode 100755 src/main/resources/assets/forestry/textures/items/crates/saplings.png delete mode 100755 src/main/resources/assets/forestry/textures/items/crates/scrap.png delete mode 100755 src/main/resources/assets/forestry/textures/items/crates/seeds.png delete mode 100644 src/main/resources/assets/forestry/textures/items/crates/silver.png delete mode 100755 src/main/resources/assets/forestry/textures/items/crates/simmeringcombs.png delete mode 100755 src/main/resources/assets/forestry/textures/items/crates/soulsand.png delete mode 100755 src/main/resources/assets/forestry/textures/items/crates/stone.png delete mode 100755 src/main/resources/assets/forestry/textures/items/crates/stringycombs.png delete mode 100755 src/main/resources/assets/forestry/textures/items/crates/tile]-16.png delete mode 100755 src/main/resources/assets/forestry/textures/items/crates/tin.png delete mode 100755 src/main/resources/assets/forestry/textures/items/crates/uum.png delete mode 100755 src/main/resources/assets/forestry/textures/items/crates/wheat.png delete mode 100755 src/main/resources/assets/forestry/textures/items/crates/wood.png diff --git a/src/main/java/forestry/core/items/ItemCrated.java b/src/main/java/forestry/core/items/ItemCrated.java index 3a0650f5b..72a6ed063 100755 --- a/src/main/java/forestry/core/items/ItemCrated.java +++ b/src/main/java/forestry/core/items/ItemCrated.java @@ -10,32 +10,31 @@ ******************************************************************************/ package forestry.core.items; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import forestry.api.recipes.IGenericCrate; -import forestry.core.proxy.Proxies; -import forestry.core.render.TextureManager; -import forestry.core.utils.StringUtil; -import java.util.Locale; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.MathHelper; +import net.minecraft.util.StatCollector; import net.minecraft.world.World; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + +import forestry.api.recipes.IGenericCrate; +import forestry.core.proxy.Proxies; +import forestry.core.render.TextureManager; +import forestry.core.utils.StringUtil; +import forestry.plugins.PluginStorage; + public class ItemCrated extends Item implements IGenericCrate { private ItemStack contained; - public ItemCrated() { - this(null); - } - public ItemCrated(ItemStack contained) { - super(); this.contained = contained; + PluginStorage.proxy.registerCrate(this); } @Override @@ -80,16 +79,18 @@ public class ItemCrated extends Item implements IGenericCrate { @Override public String getItemStackDisplayName(ItemStack itemstack) { - if (contained != null) + if (contained == null) { + return StatCollector.translateToLocal("item.for.crate.name"); + } else { return StringUtil.localize("item.crated.adj") + " " + Proxies.common.getDisplayName(contained); - else - return StringUtil.localize("item.crated.unknown"); + } } @SideOnly(Side.CLIENT) @Override public void registerIcons(IIconRegister register) { - itemIcon = TextureManager.getInstance().registerTex(register, "crates/" + getUnlocalizedName().replace("item.for.crated", "").toLowerCase(Locale.ENGLISH)); + String textureName = (contained == null) ? "crate" : "crate-filled"; + itemIcon = TextureManager.getInstance().registerTex(register, textureName); } } diff --git a/src/main/java/forestry/core/render/CrateRenderingHandler.java b/src/main/java/forestry/core/render/CrateRenderingHandler.java new file mode 100644 index 000000000..b1937bc5d --- /dev/null +++ b/src/main/java/forestry/core/render/CrateRenderingHandler.java @@ -0,0 +1,322 @@ +/******************************************************************************* + * Copyright (c) 2011-2014 SirSengir. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the GNU Lesser Public License v3 + * which accompanies this distribution, and is available at + * http://www.gnu.org/licenses/lgpl-3.0.txt + * + * Various Contributors including, but not limited to: + * SirSengir (original work), CovertJaguar, Player, Binnie, MysteriousAges + ******************************************************************************/ +package forestry.core.render; + +import java.util.Random; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.ItemRenderer; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.entity.RenderItem; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.client.renderer.texture.TextureMap; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.item.Item; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; +import net.minecraft.util.ResourceLocation; + +import net.minecraftforge.client.IItemRenderer; + +import org.lwjgl.opengl.GL11; + +import forestry.api.recipes.IGenericCrate; + +/** + * Adapted from RenderTankCartItem by CovertJaguar + */ +public class CrateRenderingHandler implements IItemRenderer { + + private static final ResourceLocation BLOCK_TEXTURE = TextureMap.locationBlocksTexture; + private static final ResourceLocation ITEM_TEXTURE = TextureMap.locationItemsTexture; + private static final ResourceLocation GLINT_TEXTURE = new ResourceLocation("textures/misc/enchanted_item_glint.png"); + + public static final float PIXEL = 1.0f / 16.0f; + + private final RenderItem renderItem = new RenderItem(); + + @Override + public boolean handleRenderType(ItemStack stack, ItemRenderType type) { + switch(type){ + case INVENTORY: + case ENTITY: + case EQUIPPED: + case EQUIPPED_FIRST_PERSON: + return true; + default: + return false; + } + } + + @Override + public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack stack, ItemRendererHelper helper) { + return helper == ItemRendererHelper.ENTITY_BOBBING; + } + + @Override + public void renderItem(ItemRenderType type, ItemStack stack, Object... data) { + if (type == ItemRenderType.INVENTORY) + render(ItemRenderType.INVENTORY, stack); + else if (type == ItemRenderType.ENTITY) + if (RenderManager.instance.options.fancyGraphics) + renderAsEntity(stack, (EntityItem) data[1]); + else + renderAsEntityFlat(stack); + else if (type == ItemRenderType.EQUIPPED || type == ItemRenderType.EQUIPPED_FIRST_PERSON) { + GL11.glPushMatrix(); + renderEquipped(stack); + + ItemStack contained = getContainedFromCrate(stack); + + if (contained != null) { + float scale = 0.5f; + GL11.glScalef(scale, scale, 1.1f); + GL11.glTranslatef(10f * PIXEL, 8f * PIXEL, 0.001f); + if (contained.getItem() instanceof ItemBlock) { + renderIn3D(contained); + } else { + renderEquipped(contained); + } + } + GL11.glPopMatrix(); + } + } + + private void renderEquipped(ItemStack stack) { + GL11.glPushMatrix(); + Tessellator tessellator = Tessellator.instance; + + int meta = stack.getItemDamage(); + for (int pass = 0; pass < stack.getItem().getRenderPasses(meta); ++pass) { + IIcon icon = stack.getItem().getIconFromDamageForRenderPass(meta, pass); + if(icon == null) + continue; + + if (renderItem.renderWithColor) { + int color = stack.getItem().getColorFromItemStack(stack, pass); + float c1 = (float) (color >> 16 & 255) / 255.0F; + float c2 = (float) (color >> 8 & 255) / 255.0F; + float c3 = (float) (color & 255) / 255.0F; + + GL11.glColor4f(c1, c2, c3, 1.0F); + } + + float uv1 = icon.getMinU(); + float uv2 = icon.getMaxU(); + float uv3 = icon.getMinV(); + float uv4 = icon.getMaxV(); + + ItemRenderer.renderItemIn2D(tessellator, uv2, uv3, uv1, uv4, icon.getIconWidth(), icon.getIconHeight(), PIXEL); + } + + GL11.glPopMatrix(); + } + + private void renderAsEntity(ItemStack stack, EntityItem entity) { + GL11.glPushMatrix(); + byte iterations = 1; + if (stack.stackSize > 1) iterations = 2; + if (stack.stackSize > 15) iterations = 3; + if (stack.stackSize > 31) iterations = 4; + + Random rand = new Random(187L); + + float offsetZ = PIXEL + 0.021875F; + + GL11.glRotatef((((float) entity.age + 1.0F) / 20.0F + entity.hoverStart) * (180F / (float) Math.PI), 0.0F, 1.0F, 0.0F); + GL11.glTranslatef(-0.5F, -0.25F, -(offsetZ * (float) iterations / 2.0F)); + + for (int count = 0; count < iterations; ++count) { + if (count > 0) { + float offsetX = (rand.nextFloat() * 2.0F - 1.0F) * 0.3F / 0.5F; + float offsetY = (rand.nextFloat() * 2.0F - 1.0F) * 0.3F / 0.5F; + GL11.glTranslatef(offsetX, offsetY, offsetZ); + } else + GL11.glTranslatef(0f, 0f, offsetZ); + + renderIn3D(stack); + + ItemStack contained = getContainedFromCrate(stack); + + if (contained != null) { + GL11.glPushMatrix(); + float scale = 0.5f; + GL11.glScalef(scale, scale, 1.1F); + GL11.glTranslatef(10.0f * PIXEL, 8.0f * PIXEL, 0.003F); + renderIn3D(contained); + GL11.glPopMatrix(); + } + } + GL11.glPopMatrix(); + } + + private void renderIn3D(ItemStack stack) { + GL11.glPushMatrix(); + Tessellator tessellator = Tessellator.instance; + if (RenderManager.instance.renderEngine == null) + return; + + int meta = stack.getItemDamage(); + for (int pass = 0; pass < stack.getItem().getRenderPasses(meta); ++pass) { + IIcon icon = stack.getItem().getIconFromDamageForRenderPass(meta, pass); + if(icon == null) + continue; + + if (renderItem.renderWithColor) { + int color = stack.getItem().getColorFromItemStack(stack, pass); + float c1 = (float) (color >> 16 & 255) / 255.0F; + float c2 = (float) (color >> 8 & 255) / 255.0F; + float c3 = (float) (color & 255) / 255.0F; + + GL11.glColor4f(c1, c2, c3, 1.0F); + } + + float minU = icon.getMinU(); + float maxU = icon.getMaxU(); + float minV = icon.getMinV(); + float maxV = icon.getMaxV(); + + if (stack.getItemSpriteNumber() == 0) + RenderManager.instance.renderEngine.bindTexture(BLOCK_TEXTURE); + else + RenderManager.instance.renderEngine.bindTexture(ITEM_TEXTURE); + + ItemRenderer.renderItemIn2D(tessellator, maxU, minV, minU, maxV, icon.getIconWidth(), icon.getIconHeight(), PIXEL); + + if (stack.hasEffect(pass)) { + GL11.glDepthFunc(GL11.GL_EQUAL); + GL11.glDisable(GL11.GL_LIGHTING); + RenderManager.instance.renderEngine.bindTexture(GLINT_TEXTURE); + GL11.glEnable(GL11.GL_BLEND); + GL11.glBlendFunc(GL11.GL_SRC_COLOR, GL11.GL_ONE); + float f13 = 0.76F; + GL11.glColor4f(0.5F * f13, 0.25F * f13, 0.8F * f13, 1.0F); + GL11.glMatrixMode(GL11.GL_TEXTURE); + GL11.glPushMatrix(); + float f14 = 0.125F; + GL11.glScalef(f14, f14, f14); + float f15 = (float) (Minecraft.getSystemTime() % 3000L) / 3000.0F * 8.0F; + GL11.glTranslatef(f15, 0.0F, 0.0F); + GL11.glRotatef(-50.0F, 0.0F, 0.0F, 1.0F); + ItemRenderer.renderItemIn2D(tessellator, 0.0F, 0.0F, 1.0F, 1.0F, 255, 255, PIXEL); + GL11.glPopMatrix(); + GL11.glPushMatrix(); + GL11.glScalef(f14, f14, f14); + f15 = (float) (Minecraft.getSystemTime() % 4873L) / 4873.0F * 8.0F; + GL11.glTranslatef(-f15, 0.0F, 0.0F); + GL11.glRotatef(10.0F, 0.0F, 0.0F, 1.0F); + ItemRenderer.renderItemIn2D(tessellator, 0.0F, 0.0F, 1.0F, 1.0F, 255, 255, PIXEL); + GL11.glPopMatrix(); + GL11.glMatrixMode(GL11.GL_MODELVIEW); + GL11.glDisable(GL11.GL_BLEND); + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glDepthFunc(GL11.GL_LEQUAL); + } + } + + GL11.glPopMatrix(); + } + + private void renderAsEntityFlat(ItemStack stack) { + GL11.glPushMatrix(); + byte iterations = 1; + if (stack.stackSize > 1) iterations = 2; + if (stack.stackSize > 15) iterations = 3; + if (stack.stackSize > 31) iterations = 4; + + Random rand = new Random(187L); + + for (int ii = 0; ii < iterations; ++ii) { + GL11.glPushMatrix(); + GL11.glRotatef(180.0F, 0.0F, 1.0F, 0.0F); + GL11.glRotatef(180 - RenderManager.instance.playerViewY, 0.0F, 1.0F, 0.0F); + + if (ii > 0) { + float var12 = (rand.nextFloat() * 2.0F - 1.0F) * 0.3F; + float var13 = (rand.nextFloat() * 2.0F - 1.0F) * 0.3F; + float var14 = (rand.nextFloat() * 2.0F - 1.0F) * 0.3F; + GL11.glTranslatef(var12, var13, var14); + } + + GL11.glTranslatef(0.5f, 0.8f, 0); + GL11.glRotatef(180.0F, 0.0F, 0.0F, 1.0F); + GL11.glScalef(1f / 16f, 1f / 16f, 1); + + render(ItemRenderType.ENTITY, stack); + GL11.glPopMatrix(); + } + GL11.glPopMatrix(); + } + + private void render(ItemRenderType type, ItemStack stack) { + GL11.glPushMatrix(); + GL11.glPushAttrib(GL11.GL_ENABLE_BIT); + GL11.glEnable(GL11.GL_DEPTH_TEST); + GL11.glEnable(GL11.GL_BLEND); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + + IIcon crateTexture = stack.getIconIndex(); + renderItem.renderIcon(0, 0, crateTexture, 16, 16); + + ItemStack contained = getContainedFromCrate(stack); + + if (contained != null) { + + int meta = contained.getItemDamage(); + + float scale = 0.5f; + GL11.glScalef(scale, scale, 1); + GL11.glTranslatef(6f, 8f, 0); + if (type == ItemRenderType.ENTITY) + GL11.glTranslatef(0, 0, -0.1f); + + if (contained.getItem() instanceof ItemBlock) { + GL11.glScalef(16f, 16f, 1f); + GL11.glTranslatef(1f, 1f, 0.1f); + GL11.glRotatef(180.0F, 0.0F, 0.0F, 1.0F); + renderIn3D(contained); + } else { + for (int pass = 0; pass < contained.getItem().getRenderPasses(meta); ++pass) { + IIcon containedTexture = contained.getItem().getIconFromDamageForRenderPass(meta, pass); + if (containedTexture == null) + continue; + + if (renderItem.renderWithColor) { + int color = contained.getItem().getColorFromItemStack(contained, pass); + float c1 = (float) (color >> 16 & 255) / 255.0F; + float c2 = (float) (color >> 8 & 255) / 255.0F; + float c3 = (float) (color & 255) / 255.0F; + + GL11.glColor4f(c1, c2, c3, 1.0F); + } + + renderItem.renderIcon(0, 0, containedTexture, 16, 16); + } + } + } + + GL11.glPopAttrib(); + GL11.glPopMatrix(); + } + + private static ItemStack getContainedFromCrate(ItemStack crate) { + if (crate == null) + return null; + + Item crateItem = crate.getItem(); + if (crateItem instanceof IGenericCrate) { + return ((IGenericCrate) crateItem).getContained(crate); + } + return null; + } + +} \ No newline at end of file diff --git a/src/main/java/forestry/plugins/PluginIC2.java b/src/main/java/forestry/plugins/PluginIC2.java index bdb0a5839..52a9aa371 100644 --- a/src/main/java/forestry/plugins/PluginIC2.java +++ b/src/main/java/forestry/plugins/PluginIC2.java @@ -230,33 +230,27 @@ public class PluginIC2 extends ForestryPlugin { @Optional.Method(modid = "IC2") protected void registerCrates() { if (resin != null) { - ForestryItem.cratedResin.registerItem(new ItemCrated(), "cratedResin"); - ((ItemCrated) ForestryItem.cratedResin.item()).setContained(ForestryItem.cratedResin.getItemStack(), resin); + ForestryItem.cratedResin.registerItem(new ItemCrated(resin), "cratedResin"); } if (rubber != null) { - ForestryItem.cratedRubber.registerItem(new ItemCrated(), "cratedRubber"); - ((ItemCrated) ForestryItem.cratedRubber.item()).setContained(ForestryItem.cratedRubber.getItemStack(), rubber); + ForestryItem.cratedRubber.registerItem(new ItemCrated(rubber), "cratedRubber"); } if (scrap != null) { - ForestryItem.cratedScrap.registerItem(new ItemCrated(), "cratedScrap"); - ((ItemCrated) ForestryItem.cratedScrap.item()).setContained(ForestryItem.cratedScrap.getItemStack(), scrap); + ForestryItem.cratedScrap.registerItem(new ItemCrated(scrap), "cratedScrap"); } if (uuMatter != null) { - ForestryItem.cratedUUM.registerItem(new ItemCrated(), "cratedUUM"); - ((ItemCrated) ForestryItem.cratedUUM.item()).setContained(ForestryItem.cratedUUM.getItemStack(), uuMatter); + ForestryItem.cratedUUM.registerItem(new ItemCrated(uuMatter), "cratedUUM"); } if (silver != null) { - ForestryItem.cratedSilver.registerItem(new ItemCrated(), "cratedSilver"); - ((ItemCrated) ForestryItem.cratedSilver.item()).setContained(ForestryItem.cratedSilver.getItemStack(), silver); + ForestryItem.cratedSilver.registerItem(new ItemCrated(silver), "cratedSilver"); } if (brass != null) { - ForestryItem.cratedBrass.registerItem(new ItemCrated(), "cratedBrass"); - ((ItemCrated) ForestryItem.cratedBrass.item()).setContained(ForestryItem.cratedBrass.getItemStack(), brass); + ForestryItem.cratedBrass.registerItem(new ItemCrated(brass), "cratedBrass"); } } diff --git a/src/main/java/forestry/plugins/PluginStorage.java b/src/main/java/forestry/plugins/PluginStorage.java index 8686d08db..1bae63f45 100755 --- a/src/main/java/forestry/plugins/PluginStorage.java +++ b/src/main/java/forestry/plugins/PluginStorage.java @@ -10,40 +10,12 @@ ******************************************************************************/ package forestry.plugins; -import cpw.mods.fml.common.event.FMLInterModComms.IMCMessage; -import cpw.mods.fml.common.network.IGuiHandler; -import cpw.mods.fml.common.registry.GameData; -import forestry.api.core.Tabs; -import forestry.api.recipes.RecipeManagers; -import forestry.api.storage.BackpackManager; -import forestry.api.storage.EnumBackpackType; -import forestry.api.storage.IBackpackDefinition; -import forestry.core.config.Configuration; -import forestry.core.config.Defaults; -import forestry.core.config.ForestryBlock; -import forestry.core.config.ForestryItem; -import forestry.core.config.Property; -import forestry.core.fluids.Fluids; -import forestry.core.interfaces.IOreDictionaryHandler; -import forestry.core.interfaces.IPickupHandler; -import forestry.core.interfaces.IResupplyHandler; -import forestry.core.interfaces.ISaveEventHandler; -import forestry.core.items.ItemForestry; -import forestry.core.network.GuiId; -import forestry.core.proxy.Proxies; -import forestry.storage.BackpackDefinition; -import forestry.storage.BackpackHelper; -import forestry.storage.GuiHandlerStorage; -import forestry.storage.PickupHandlerStorage; -import forestry.storage.ResupplyHandler; -import forestry.storage.items.ItemNaturalistBackpack; -import forestry.storage.items.ItemNaturalistBackpack.BackpackDefinitionApiarist; -import forestry.storage.items.ItemNaturalistBackpack.BackpackDefinitionLepidopterist; import java.text.NumberFormat; import java.text.ParseException; import java.util.ArrayList; import java.util.logging.Level; import java.util.logging.Logger; + import net.minecraft.block.Block; import net.minecraft.block.BlockBasePressurePlate; import net.minecraft.block.BlockButton; @@ -68,13 +40,49 @@ import net.minecraft.item.Item; import net.minecraft.item.ItemDoor; import net.minecraft.item.ItemFood; import net.minecraft.item.ItemStack; + import net.minecraftforge.common.IPlantable; import net.minecraftforge.common.IShearable; import net.minecraftforge.oredict.OreDictionary; +import cpw.mods.fml.common.SidedProxy; +import cpw.mods.fml.common.event.FMLInterModComms.IMCMessage; +import cpw.mods.fml.common.network.IGuiHandler; +import cpw.mods.fml.common.registry.GameData; + +import forestry.api.core.Tabs; +import forestry.api.recipes.RecipeManagers; +import forestry.api.storage.BackpackManager; +import forestry.api.storage.EnumBackpackType; +import forestry.api.storage.IBackpackDefinition; +import forestry.core.config.Configuration; +import forestry.core.config.Defaults; +import forestry.core.config.ForestryBlock; +import forestry.core.config.ForestryItem; +import forestry.core.config.Property; +import forestry.core.fluids.Fluids; +import forestry.core.interfaces.IOreDictionaryHandler; +import forestry.core.interfaces.IPickupHandler; +import forestry.core.interfaces.IResupplyHandler; +import forestry.core.interfaces.ISaveEventHandler; +import forestry.core.items.ItemCrated; +import forestry.core.network.GuiId; +import forestry.core.proxy.Proxies; +import forestry.storage.BackpackDefinition; +import forestry.storage.BackpackHelper; +import forestry.storage.GuiHandlerStorage; +import forestry.storage.PickupHandlerStorage; +import forestry.storage.ResupplyHandler; +import forestry.storage.items.ItemNaturalistBackpack; +import forestry.storage.items.ItemNaturalistBackpack.BackpackDefinitionApiarist; +import forestry.storage.items.ItemNaturalistBackpack.BackpackDefinitionLepidopterist; +import forestry.storage.proxy.ProxyStorage; + @Plugin(pluginID = "Storage", name = "Storage", author = "SirSengir", url = Defaults.URL, unlocalizedDescription = "for.plugin.storage.description") public class PluginStorage extends ForestryPlugin implements IOreDictionaryHandler { + @SidedProxy(clientSide = "forestry.storage.proxy.ClientProxyStorage", serverSide = "forestry.storage.proxy.ProxyStorage") + public static ProxyStorage proxy; private final ArrayList minerItems = new ArrayList(); private final ArrayList diggerItems = new ArrayList(); private final ArrayList foresterItems = new ArrayList(); @@ -237,7 +245,7 @@ public class PluginStorage extends ForestryPlugin implements IOreDictionaryHandl @Override protected void registerItems() { // CRATE - ForestryItem.crate.registerItem((new ItemForestry()), "crate"); + ForestryItem.crate.registerItem((new ItemCrated(null)), "crate"); // BACKPACKS BackpackDefinition definition; diff --git a/src/main/java/forestry/storage/proxy/ClientProxyStorage.java b/src/main/java/forestry/storage/proxy/ClientProxyStorage.java new file mode 100644 index 000000000..64a4e43f9 --- /dev/null +++ b/src/main/java/forestry/storage/proxy/ClientProxyStorage.java @@ -0,0 +1,24 @@ +/******************************************************************************* + * Copyright (c) 2011-2014 SirSengir. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the GNU Lesser Public License v3 + * which accompanies this distribution, and is available at + * http://www.gnu.org/licenses/lgpl-3.0.txt + * + * Various Contributors including, but not limited to: + * SirSengir (original work), CovertJaguar, Player, Binnie, MysteriousAges + ******************************************************************************/ +package forestry.storage.proxy; + +import net.minecraftforge.client.MinecraftForgeClient; + +import forestry.core.items.ItemCrated; +import forestry.core.render.CrateRenderingHandler; + +public class ClientProxyStorage extends ProxyStorage{ + + @Override + public void registerCrate(ItemCrated crate) { + MinecraftForgeClient.registerItemRenderer(crate, new CrateRenderingHandler()); + } +} diff --git a/src/main/java/forestry/storage/proxy/ProxyStorage.java b/src/main/java/forestry/storage/proxy/ProxyStorage.java new file mode 100644 index 000000000..a2043a210 --- /dev/null +++ b/src/main/java/forestry/storage/proxy/ProxyStorage.java @@ -0,0 +1,20 @@ +/******************************************************************************* + * Copyright (c) 2011-2014 SirSengir. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the GNU Lesser Public License v3 + * which accompanies this distribution, and is available at + * http://www.gnu.org/licenses/lgpl-3.0.txt + * + * Various Contributors including, but not limited to: + * SirSengir (original work), CovertJaguar, Player, Binnie, MysteriousAges + ******************************************************************************/ +package forestry.storage.proxy; + +import forestry.core.items.ItemCrated; + +public class ProxyStorage { + + public void registerCrate(ItemCrated crate) { + } + +} diff --git a/src/main/resources/assets/forestry/textures/items/crate-filled.png b/src/main/resources/assets/forestry/textures/items/crate-filled.png new file mode 100644 index 0000000000000000000000000000000000000000..08cb41c649a48e694f3a53ea5bba8da1c2e90da6 GIT binary patch literal 212 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPGa4)6(a{r~@eah&D+7T-NHlD15U z$_z2~b5M`=)ZyUZ*e!6c2B?g&B*-tA!Qt7BG$1G4)5S5QBF^`eA|F#AkL$(nhA%uL z7%F`^rfq9tEn%KeGmW9_PDX&vY`f#3?lC>CvW*Y7Y^i?y>)$;4eo^HUT#5I7WxgmB zuh7s}G@5hB=(muP-ZZ96S4Hg;|0~TynU|-3XWDRom#DqEi;UiRN9zedD;Ydp{an^L HB{Ts58T(2b literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/forestry/textures/items/crates/apatite.png b/src/main/resources/assets/forestry/textures/items/crates/apatite.png deleted file mode 100755 index f24613f07dce3a73ebdae327aec0f20e84138456..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 256 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!Wq?nJE0CVw;#(YNxo1YwmI+ar zA;#Q%CP2a7$A3wFh6XR;M?3Fy1rv# zQj5Lqdd)PYLx03qd8IvB!!)f(?^rgg$IfeEE@6q5cgyo5SR-Zi_!h@*x%OK^?YEod yF^gYuiGsx+IMY7vXD#{M)lmHK^OIXYJ}~b&#O79gWVbZX0Sun5elF{r5}E*H!(MFw diff --git a/src/main/resources/assets/forestry/textures/items/crates/apples.png b/src/main/resources/assets/forestry/textures/items/crates/apples.png deleted file mode 100755 index 2f882f32627aaaa8dfda8e31c2fe24674d0e1cbf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 248 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFP2=EDU1=7WFmh)SD_smGzG9fB6 z#26^z=b#?#sZ(ykTh1%;Uq(Abg)@Yc@Bg&9TZH9A?(l2@s$eV$@(X5gcy=QV$SL!5 zaSW-5OHL4BVPs`vb5mAL6@IFqa9GFCS66dSW8=jL&yz(x^ocn+5C{@#35V*S0p_gRhvT>Ae%ob!l5;m#V)GX`dcW=w`NoE#ZW oBn0TQH*vACvGwsOWF#;!Sm&#*a@4Eb4|D;8r>mdKI;Vst057^tkpKVy diff --git a/src/main/resources/assets/forestry/textures/items/crates/ash.png b/src/main/resources/assets/forestry/textures/items/crates/ash.png deleted file mode 100755 index ff4bbcb3611edcce0e123c585899606dd6e6c4bf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 245 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPHF4e$wZ1=7WFmh)SD_smGzG9fB6 z#26^z=b#?#sbg#FbMxlS`SUlQIB{avu7m5>@7?2nz8fgbSQ6wH%;50sMjDV)=IP=X zQW2M&Ai~1P%EsoVtePtPR6*gej-juv=AOpJixHkDk4hZj;AL6GXxKBwq_@X`XX#b- z-WUg-$JXg;nvD`o>E-w5aU@CX-&vf`)v?gz{grH0fx|~q)m(Zvc5W2xI4Hu!*C!r;iv%&;&{o%4p0sS?ly44$rjF6*2UngAUMP;USL diff --git a/src/main/resources/assets/forestry/textures/items/crates/beeswax.png b/src/main/resources/assets/forestry/textures/items/crates/beeswax.png deleted file mode 100755 index 12039ea9dab088ce687b3ebb84ba2979d96c8fe7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 244 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPHF3h)VW1=7WFmh)SD_smGzG9fB6 z#26^z=b#?#snZo9{o-oY>}0w9t4v

RiTqaVb!au_VYZn8D%MjWi&q!qdeuq#`ak zL4<{om5t3!Sv6Jose-~`9YbGT%{`5c7b84R9+f!4!OOCW(XeMqnv`Utgx93i>N^`G zj%^N`8^UC$628{fSn$Y(nBA|=hzK}mUO%$S1_l`~B|A-9S0Uk|4ie28U-i(tw;QPZ!6Kin!zi z5f(;PHa0h9)l}i93JQmH41IMq_cS(MjPN{pRN_cS%-&yL+yo96JwInV*@0)R>FzRl z#_l(FEvtn)6t`A?f7PtecJ-X)=5-Acw^paUXVczhwYU1alEC2`M{am@u?&qK$?WxmS!x8Smx_bfl{C1Ax%eZGSE&K_TW-JNv3ubV5 zb|VeQDe`o245^57?Th3)tia*1MY~A9oJTv z9=ZH@PEuco!G5REmx&#B8PAC}xExW~WOZZBFMdnMu+_W2@3YbgnxP$@F#p~C*ZZ!^ tCfNpU@K*gNbm6QBtGiHTk(%;d~G$**5x3o)(=x*7GA=JAACB2RpWTS}k0)+I?}f z`=(^ScvH>(0Q+7)+vRcYlLG9f1UWRgTW}X>O#&LnSQ6wH%;50sMjDV)@9E+gQW59c z7cO+zfP?j`+=?C3zSR9sK4#%|^J0IQSew8nc}};m$Uxmifptnt=S*6oZ}wJg+Y*th zu`UedHVtoBttY&Bscghx(eLn)N%*JDMzP8xHIj|lcMW}ZlpcAcTx9X+>#-UE{S6Zm s{;zb}x*~Qvcc-Xun$&To#ieilvvPH^i5c!&2nrDfPgg&ebxsLQ02Nzm6#xJL diff --git a/src/main/resources/assets/forestry/textures/items/crates/bronze.png b/src/main/resources/assets/forestry/textures/items/crates/bronze.png deleted file mode 100755 index f1946a4ecf162b8db22b3d86e7c3c11adaa34c99..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 254 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!Wq?nJE0CVw;#(YNxo1YwmI+ar zA;!T@B0#}cHS3j3^P6da5UH*w0hXzJ01`yL_vK zBGvh+zmhX=D#E+}=>&rW{btFtM)dzXV)78&qol`;+ E01+iu2><{9 diff --git a/src/main/resources/assets/forestry/textures/items/crates/charcoal.png b/src/main/resources/assets/forestry/textures/items/crates/charcoal.png deleted file mode 100755 index b3bfcf15ede4b310b32839aa55be4313fe1f8aa1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 274 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!cYsfbE0CVw;#(YNxo1YwmI+ar zA;!$i%+k`*Kygt~QE_qcXiptK2X#F?J#B4m1qB6TV`B{s4OLZDGcz+~Wo0fdE^cma zUS3{)e*VMN9Tq@sj3q&S!3+-1ZlnP@rJgR1Ar*11J?=uxh8!&A9hcaifB8RM>ZI7K zCgxaU9d6$ZCLMwX+z}szmj-BdT&#V)$lYbef2YusJxvoCuI-kt2x0j2xWsJYpTy~} zbJt36Dpl{eo@F9@uk{K4mFKVjp5*H8kThW3d}LXJnlH^Yvg;$`iV{Dr+Xj?lED7=pW^j0RBMr!@@N{tusfbHX z5Mg0tWn*(wR!tRts-SRK$Iw?-b5CRA#R$)nM^LaG#pJ-&TxBT` jVqjoUP{QEI%*=4)oVwr^PW|UVH!yg*`njxgN@xNArUFgg diff --git a/src/main/resources/assets/forestry/textures/items/crates/coal.png b/src/main/resources/assets/forestry/textures/items/crates/coal.png deleted file mode 100755 index b3bfcf15ede4b310b32839aa55be4313fe1f8aa1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 274 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!cYsfbE0CVw;#(YNxo1YwmI+ar zA;!$i%+k`*Kygt~QE_qcXiptK2X#F?J#B4m1qB6TV`B{s4OLZDGcz+~Wo0fdE^cma zUS3{)e*VMN9Tq@sj3q&S!3+-1ZlnP@rJgR1Ar*11J?=uxh8!&A9hcaifB8RM>ZI7K zCgxaU9d6$ZCLMwX+z}szmj-BdT&#V)$lYbef2YusJxvoCuI-kt2x0j2xWsJYpTy~} zbJt36Dpl{eo@F9@uk{K4mFKVjp5*H8kThW3d}LXJnlHkv$HcXF)=bSa`EEDt5>gXX=zDIODicUiI0!Z$;o-oEq5JgH)~0dAIPN)42QDW zHUg=so-U3d6>+Y8SJyEc^0++C&1Ijy@C=XmzyHsrmiksbS-w~@yTu@0z@g&ci^ORs zxb8b;FE;%ZTq^C-;c@bhV3t=|=#;BxjUhvn2IoIFGD|I}Vg%ED7=pW^j0RBMqe0)5S5QA}%>W zgoTlnjm=G2HC6bjg2G`PLtkCZJ&lbQBRo$Yl{mt|%d(2mu*YPox@4n-*XFYMB|u*K z`8$=IM<&?qOuObLaJcCCyPLrYSyLQ%gx}AsKFE_SoUAO+tSQ3Mz{B>nNMS`nLc)U= d3{7lo3^$*vw}+H$e*v_f!PC{xWt~$(69AVqP7?qC diff --git a/src/main/resources/assets/forestry/textures/items/crates/cookies.png b/src/main/resources/assets/forestry/textures/items/crates/cookies.png deleted file mode 100755 index 48174ee7f38c89ac26b232fcf211c000246ee680..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 249 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFP2=EDU1=7WFmh)SD_smGzG9fB6 z#26^z=b#?#sdKa0&RawL`2?qKZ|!h>sh!29u3ExhufDhoRKZvhR^go+pn=9O2+)S;c7BW0J0C#AG-n z?ft!%Oi4G+>?y4l>QLO7{_RbtLfhRp!Mo=-NOlg?gc0Zj22WQ%mvv4FO#q8MQ-%Nl diff --git a/src/main/resources/assets/forestry/textures/items/crates/copper.png b/src/main/resources/assets/forestry/textures/items/crates/copper.png deleted file mode 100755 index 8a95f48303caaa5ab14a8417d097c995e73002dd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 254 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!Wq?nJE0CVw;#(YNxo1YwmI+ar zA;!_>VnD$Uw~jvE-gmmjXm-3>U$}C#r;eY4`r1q_H*LX7y}lc=wY6`2_XVnBED7=p zW^j0RBMrzY_H=O!sfcs!^W&K5Dfy_O7_H5m{_1Uv$ zm7!MCa=do7#_XAqG{40+(pGcJgs9>;OQ4#}5aVc19X|*4_V)I(QWF$_LaZf0ejt+= z7!GB#Z3I#ko-U3d6>+ZpkwS+Rc#b+<`o3p_>i7LQwp%Qk^n1@dc$}dh=Eb>CY(?1R zMEi@?ukSwUtJd2%DJt}T5{IM3g)+qs=IORcOPU+5Z?8~bdb3E7@!?N4#YczI`z1UW z6{fW+GX$>)i`^gnC|No3k&(p;*q#`akL4<{o zm5t3!Sv6Jose-~`9YbGT%{`5c7b84R9+f!4!OOCW(XhuP{Hz(1;goAa~d0str2sn7)z=4a5 cEWA7nKaQ&(Grz%l253Elr>mdKI;Vst0PS^8tpET3 diff --git a/src/main/resources/assets/forestry/textures/items/crates/fertilizer.png b/src/main/resources/assets/forestry/textures/items/crates/fertilizer.png deleted file mode 100755 index f1e2bc592356e98995c38d4a705db5930458bc8a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 244 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPHF3h)VW1=7WFmh)SD_smGzG9fB6 z#26^z=b#?#sUsy9THAarB<5sB{&{PcJ^PkU5d+FGmIV0)GdMiEkp|>cc)B=-RKz7G zh_EoSvaz`-tELJ+RZuvrW9X}^xu>!5Vua_(qY_6rc;{$pa3o1&uA7&_lB99ga`R=@ zBL;C>Uu_fWP^^4){osQV#$C diff --git a/src/main/resources/assets/forestry/textures/items/crates/frozencombs.png b/src/main/resources/assets/forestry/textures/items/crates/frozencombs.png deleted file mode 100755 index 3fcf0962a6f0562fa1c3c9fadcc8985992335fdf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 239 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPHF3h)VW1=7WFmh)SD_smGzG9fB6 z#26^z=b#?#sq_E;|C9g!dmp$^eQ}5GqD?m@PdosWV=M{s3ubV5b|Vd>)zif>q#`ak zL4<{om5t3!Sv6Jose-~`9YbGT%{`5c7b84R9+f!4!OOCW(Xhv4s=8#OgxBV>`6WPJ z`uRJRoJS_u?M%DoCUCgu`MaCJ30YGdc!b~2tUkz-ES#(?(5xxK(!j&^wMbz_LPElW e7Yt2oYz#M_tG9=gY<~f?p25@A&t;ucLK6Tac~hDI diff --git a/src/main/resources/assets/forestry/textures/items/crates/glowstone.png b/src/main/resources/assets/forestry/textures/items/crates/glowstone.png deleted file mode 100755 index b9b68e858073eb22d9729a8ff4c926cfd9e04f24..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 246 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPHF4e$wZ1=7WFmh)SD_smGzG9fB6 z#26^z=b#?#sS_N`aOo1m?AZ)$Z4CeaGbAT7@Kw8A14=WN1o;IsI6S+N2IQ1`x;TbZ z#EG6#Mm=TCUBo6$qcgku}SCL!*FQ&f30e=A6SJ5nDmTR2fH zi&G_e_U+n)Vw?4T?TjZ+o@=cW?@y39%VPH4UH!-E8cmbbRpp7+Q-6s>*xPgMl=eKh ndA7mpP=?puC9DSfU77zS?ovH1RDHz+=mZ8&S3j3^P6?I)=WwntK`>FGhHtJSuUdBW7#*H79|?MQ2~lob14JHgI$nk3*t^lPOOM?7@862M7NCWBiba4!+ zh)YfoVPRxtV{=nhO%;Bspm12n&{tP;Ph;c72+xy8C5~|LvaDh>>@k_DF4-vIwfWnf z5+E=A{GFd1M<(ptS$54$;Be9NcQ=C*vZgrj2*02C`v6a}aI&&Mv!)130}tERB83$R h2?-BgFf_5TF}!J1Ka=@yy9&^H22WQ%mvv4FO#loqRm1=Q diff --git a/src/main/resources/assets/forestry/textures/items/crates/honeydew.png b/src/main/resources/assets/forestry/textures/items/crates/honeydew.png deleted file mode 100755 index d9636a50a7001f16ae08bd3ab9e2c723aae27e34..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 241 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPHF3h)VW1=7WFmh)SD_smGzG9fB6 z#26^z=b#?#sZ-%0yFE{5X0*zhbj>-jsC(r>5p00i_>zopr0HSqBEdT%j diff --git a/src/main/resources/assets/forestry/textures/items/crates/honeydrop.png b/src/main/resources/assets/forestry/textures/items/crates/honeydrop.png deleted file mode 100755 index fd1ba3628e98ad24d960234499362ee40e0da49b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 241 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPHF3h)VW1=7WFmh)SD_smGzG9fB6 z#26^z=b#?#sk6CC%-0Tv?`MWyueSq&0ivvx1nXp~UXGoCudfhSowSy`Z2Q-q~~hwW>T!it21 ggamdKI;Vst09!Xo)c^nh diff --git a/src/main/resources/assets/forestry/textures/items/crates/humus.png b/src/main/resources/assets/forestry/textures/items/crates/humus.png deleted file mode 100755 index 5a9fdd5c0bc315f13e6520a9727a7a0d9dff69a7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 246 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPHF3h)VW1=7WFmh)SD_smGzG9fB6 z#26^z=b#?#sbeg`q9M#I&&MRn#iTFBBDv-7S)d$aNswPKgTu2MX+Tbur;B4qMO<=% z2n!=C8=IT5YO3&41%<;phQ7L*dm0-rMtGh)DsiMEX78^rZUTpko}aUw?7*|uba$CN zWA~f8mes-?id(C{ziL)!yL!%Y^STC!TdULFvuSU$+FSiyN#O8}BR4!aPb6@$GAcAX n?v>%tl8}(FuxeP)$jI+)?^wrhe)7W@1!t>-&i6b1mEUOre9I|?P9C%a( zr+extv~7I4#@0)r?a8XU)%r~m({|^-uVYHen0NR4KjDrFR*S=_>!wNji6aO$x+Oqe5=IaZO-W+HzOX-jP%)U)pTusT#@ZS*$JGRd^ z3w1YYtx~E_Oygs@Q{L=SKmUN7;>WJOhHHFZB-29<*M95lNM}!b#-GwJ;J~NxnveCG puBwYkJ!jNLms!b^D+@&>_q8;$YQ0WNlLA`L;OXk;vd$@?2>`2YRQ3P> diff --git a/src/main/resources/assets/forestry/textures/items/crates/mulch.png b/src/main/resources/assets/forestry/textures/items/crates/mulch.png deleted file mode 100755 index dcae6f9c063a913894289753f8885f5be44905a0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 250 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFP2=EDU1=7WFmh)SD_smGzG9fB6 z#26^z=b#?#sUs`EVz0twAkD5N!S1QWqaeg;D8td5Jn;@t1!GB&UoeBivm0qZPKBq7 zV@O4u=qW?4Lk=RY7tO=AO?&x-b<6*Hfj65OTNBo{Mqe;mx;9C8x`EJlMV=k1|94;2 z)Vt)Q+nAD5yqiC#@A=i21`3upcV2k^NU&$|%mdHKL7v# diff --git a/src/main/resources/assets/forestry/textures/items/crates/mycelium.png b/src/main/resources/assets/forestry/textures/items/crates/mycelium.png deleted file mode 100755 index 6860834a706388ca32f605fe581770a5a91e5054..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 332 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbK}QGic~E0CVw;=5-?Qbs~{Lw0_0 zY#dOer?|X0&T`9ysM3O#%n;+^^_?1*P#((OC)E8Sz=o`Ng@3DVYh`6`48Jxiy)IIbk884S7W^g=P5}We*>y+XL-j zED7=pW^j0RBMr#u@N{tusfcs!3l}fQfElVuja`EdALb7kn${|>4Z zEs{qVW;{?|^Yz*xo0V(DH@Y}E#JFbNd7<(7Uba#nZ|NLsTgL11JC;9I%UHBf_bpqp z$wT#GtK$5kpM^V*y%Sr$dme-RvV#IgFCDf$oBibba*iVnm-0j>a48+x()Gq^?TLS^ YS|J=;R=a=I0lJC7)78&qol`;+0DmEZegFUf diff --git a/src/main/resources/assets/forestry/textures/items/crates/netherbrick.png b/src/main/resources/assets/forestry/textures/items/crates/netherbrick.png deleted file mode 100755 index 087302b202521532fb01d1e209974bde69787a73..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 267 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!Q-Dv1E09(Z5jT*Kncw0o$;-cI zMv|O>aB-aFmI+arA;v&id46F(2Xzw(*=SE4NnQaNJ^?*3X=7=5XtE>RWw_g=)hSf`$wUV8s`-I}Ki*o1T{RLaSO0myCuPMh z=Kto8EZtqJWY1rhHWHTRoD@7`s-4pG309nfX|hM;-ZbB^7kHwb*S0FvV#dpt)q~bWsEfbaC~$Hun4C~|5 z?I)=WwntK`>FGhHtJSuU7qc>(ppuiD>OHnl^IF1BNvP<2{a>QWX z*4stG9f}gAQj3n=`1K%7Sispc^Qxe#z~LjQ{X#PmbCPmck_=j#7$zKC5XZ+N%EQAW fBkOSC00YC4r>b-QF3+$7x`4sc)z4*}Q$iB}hH6W{ diff --git a/src/main/resources/assets/forestry/textures/items/crates/nikolite.png b/src/main/resources/assets/forestry/textures/items/crates/nikolite.png deleted file mode 100755 index c8d522ef6e72d4269fead71ccd74d378d720cbce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 246 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPHF4e$wZ1=7WFmh)SD_smGzG9fB6 z#26^z=b#?#sl%YB%TQFv5E9Jb<;nQ}4}+QM*WA>6pfqDikY6x^!?PP{Ku)=*i(^Pd zoaiY8MMU_YMw}RxiBlY33g%icH zI8~Bo->yw4wps7j&Uo_Vxz;-I{sft`EN1WB)qkw6(KJb2Ri0=)^_NJ5y*<}XY0rb3 nXB)f@Wq9pf!fLSJmHA)dF4faQ)mKb_PGInK^>bP0l+XkKCGk@6 diff --git a/src/main/resources/assets/forestry/textures/items/crates/obsidian.png b/src/main/resources/assets/forestry/textures/items/crates/obsidian.png deleted file mode 100755 index a6cf7b677bceb0b6c22cd51f2013c311ce780295..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 352 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbK}OMp*^E0CVw;=5-?l7N83mI+ar zA;v(F;y6owesLRvFgXcr0Rc&Velb4>bv{0^Xipt0y%0V=Q6V8|4h|kpPCh<9Aprpq zUS1J?etrP~X+A!2K|vXQei051UJed^K|w_oIYR*fS!q!X0RaI)K`DNIDM3D2PEJmK zeo;X|Ngf_yAoF*bI>>>HB|(0{3=Yq3qyafyo-U3d6>+Y8p+YQ%9IVVPsVP_QKK=Lo zwu*Ji?jH+ZJK8Fqkr$9`p5QR0fve6bd$H+~K;LkePLECt4%aK|PRcE76TY&0qO`xw z`~zpsi=Up#ze&yPT<+bx^PIwSZQCweUX!1my(iH7h`Phxz4kQ~*W?=G-uHjs#^utv p^R9wJ=%y3P5--KQn6amxQI3V9*Y|wRAE2ukJYD@<);T3K0RZsYVe|k1 diff --git a/src/main/resources/assets/forestry/textures/items/crates/peat.png b/src/main/resources/assets/forestry/textures/items/crates/peat.png deleted file mode 100755 index 18e307926332c433d7d13c3a08b5cf80b4f326c4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 248 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFP2=EDU1=7WFmh)SD_smGzG9fB6 z#26^z=b#?#sl(63Vxq{aDa9qu&n73#t|HFK&CWDwNmdn51!GB&UoeBivm0qZPMN2R zV@O3@a)Jm8BP$!5o3d)E@KXha!#ak(x|(|$8!tw9o;)gXgoBr56{C?uR!@%ukLtvk z-7yY4rz2N~X*Nn+T7B)#Z;qsh_qE^Oad#}-`TnoCs=(oteH(>lB<3XLup}9@HZe>% oxFC*?MU;n!M@H7+!T|<`9w)VHKiFETfi7V1boFyt=akR{05EAvp8x;= diff --git a/src/main/resources/assets/forestry/textures/items/crates/phosphor.png b/src/main/resources/assets/forestry/textures/items/crates/phosphor.png deleted file mode 100755 index fee61a3c11cf6ebf263770e30e8e5037cb918117..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 245 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPHF4e$wZ1=7WFmh)SD_smGzG9fB6 z#26^z=b#?#sUr~;z3tWOxJ#F3KYr4F_g?wUTRZL3?gOP6OM?7@862M7NCR@pJY5_^ zD&mq8L|7PE+1T8aRa1qZDkvP*G4$2d+|$^2F~alYQHdiQyez924SS}T^!7OLEWN7U z8{@$9*g9QJvr(ccz5M<>jwFfwJB#zVIu@F|zmlygaQH~7noIA-&W(Z{2SvD;9N3zx lECoUg3=9fN7#x|I85YK=bKX!gRRX$z!PC{xWt~$(696l0P=){i diff --git a/src/main/resources/assets/forestry/textures/items/crates/pollen.png b/src/main/resources/assets/forestry/textures/items/crates/pollen.png deleted file mode 100755 index f807d28428fe85109d04a851a4f974d6048d02f7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 239 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFv5AX?b1=7WFmh)SD_smGzG9fB6 z#26^z=b#?#sk5j{wK7A-*Gb6LTHs*3%r&3{V@Z%-FoVOh8)-mJnWu|mNJU(7f(Q#E zD;t}evTCaEQw4>?I)=WwntK`>FGhHtJSuU7qc>(ppuiD>OHnl^IF1BNvP<2{a>QWX z*4stG9f}gAQj3n=`1K%7Sispc^Qxe#z~LjQ{X#PmbCPmck_=j#7$zKC5XZ+N%EQAW fBkOSC00YC4r>b-QF3+$7x`4sc)z4*}Q$iB}1XxUp diff --git a/src/main/resources/assets/forestry/textures/items/crates/propolis.png b/src/main/resources/assets/forestry/textures/items/crates/propolis.png deleted file mode 100755 index f680be088b7f625684079658c1320492df303f50..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 268 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!Q-Dv1E0CVw;=5-?(v}HPnIXm- z=2{lVS*ArRp4t(6a(fg|_UID(MBej85@cduy6KS0dr)PeDRPgRMGXn=(V&m_=a-bU+ NJYD@<);T3K0RS!jX0`wT diff --git a/src/main/resources/assets/forestry/textures/items/crates/redstone.png b/src/main/resources/assets/forestry/textures/items/crates/redstone.png deleted file mode 100755 index d15529c8965cd172433392c7c2dd74c77436857d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 246 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPHF4e$wZ1=7WFmh)SD_smGzG9fB6 z#26^z=b#?#siVulP{hCx!oc9k!0?}e!Hj{SfkXQ>P@1tM$S;_|;n|HeAgA2Z#WAEJ zPV|%_-ysJP*Nf&FI-C0Ts6F^Uf5L;^j2==Z9NQQ+32`5sqRONBTS4;Mk@|4i!ii#8 zoGQt)Z`URi+pPC%XFPfGTx*?pe}c?e7PI&6>OWT3Xqu$1Do?bY`b#9j-kxixwCBOi nvkhK{GQ9RKVKvzA%KR^Jm+EPu>MJHdCop)r`njxgN@xNAG22h; diff --git a/src/main/resources/assets/forestry/textures/items/crates/reeds.png b/src/main/resources/assets/forestry/textures/items/crates/reeds.png deleted file mode 100755 index eb34cd95e5a4c6f4ec1c32a758a4803e07dfcbf8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 248 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFP2=EDU1=7WFmh)SD_smGzG9fB6 z#26^z=b#?#sk7>KNz;nRX$R9X+ueh+Ewn9UkNKNk|4ie28U-i(tw-_PZ!6Kin!zi z5f(;PHa0h9)l}i93JQmH41IMq_cS(MjPN{pRN@E+FUu-M!=5Q=Qj(1lUXxaSH7 khn9qdgoRbZf<{J$SS{5p-(AnG1iFF2)78&qol`;+03xJI8vpb%ybb5*&sWx0r~C^y|+rqCE7vA;$s*+qI{k=vXa zpJ+F&xdkTqftpM5)aK{uRK{6v>I$7%?%A1XyR}OD;WVS>Sk10j#i^+(Er~`Y5k`GE zc3a9-w-pGL1dg>I#>cJs1Ssv@-NgT-eh zNwkKEmqwbMtdng^F>g+@FY%KKaZs^W7TF7QF=I)PUoeBivm0qZPM@cXV@O4uYxh+l zW`vaqpz%g)?cUbLN2^85b(=l^d@W@P?-cgq&za>t&##=fUcJN9IsJd}6c zp=V2HQC_-3&+ay<|!^0yhD@#R1g_)T-J3HIV%#4wdk)NMGVb(qtpf<*mAirP+ zhi5m^fSfE(7srr_IM<$NA!b94!%5N}WxwD3<-e_{>so(}<5&lqGACn0%7n+-ClnkH zUEg@r@63|<1>Y@CcC28s@N_C|s*GE=-8wVW$8KKD*UK|%j63xv*)eWV4`_|#+A_iC lQv8A0x@=(+tu4Fm$V=R2(QCeP*aT=RgQu&X%Q~loCICk#OpyQp diff --git a/src/main/resources/assets/forestry/textures/items/crates/sand.png b/src/main/resources/assets/forestry/textures/items/crates/sand.png deleted file mode 100755 index 39481d26d04f5534a520b9b038de285cb3990552..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 402 zcmV;D0d4+?P)?&7x7%$4HWq{qLB;MJ+n z$&uI3nBLQ;w61o$w0_UYk~4E>QEPdFi_v$fi3* wt~{Q}>m7fbK$J+|6#|rl1euVbo`@Lgzs`UPU!3OVO#lD@07*qoM6N<$f`@s}(f|Me diff --git a/src/main/resources/assets/forestry/textures/items/crates/sandstone.png b/src/main/resources/assets/forestry/textures/items/crates/sandstone.png deleted file mode 100755 index aa3fb342d5f7402dcf17d4b9c25b71f0ae52e2fb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 434 zcmV;j0ZsmiP)*BV9#vD(tB;@hglzJ1uyn8m())y|sP(wybqv)k68-Po_j zzI5r~vf*KS+yLaf{vdP4V<>0%`$C2dQuG`b2-q^6_-m~A>s^8b5mvrF)00001 zbW%=J06^y0W&i*Hlu1NERCr!Rj#U!GPzVGAPonGY?(XjQzte_n$ae8V*9?VWh(BNu z0>KAS0xI|kt%cU$kFu>m1Q96_L!rjmvKfmfOu>m{DxGn1`2ts7T(QLWx zPPf{#kpKpgvGFD?HWH_M#Cv$nf`%HhCVTCrZ(_QNJ>@~Xx0>AY2ab|TBNWdAtB+x e3x*~(HilCz${ZI&4@CoAz~JfX=d#Wzp$Pyn@kRpx diff --git a/src/main/resources/assets/forestry/textures/items/crates/scrap.png b/src/main/resources/assets/forestry/textures/items/crates/scrap.png deleted file mode 100755 index 019d876f8c8a56dd621048724196fdef3d24ab5b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 248 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!Wq?nJE0CVw;tM4A%t+cYAu2P( zxH!%-DOe*RA;Hf@#HZ0xW(P3lhV!Gfp(-O~v>yDY|&i~q}J!{Uid)LKRA1r_0e|-8nHji7S6LUFt pw5E8f3LMpxdY1HN?ple*?Dml?+qqV&ya8Iw;OXk;vd$@?2>?bzRJs5F diff --git a/src/main/resources/assets/forestry/textures/items/crates/seeds.png b/src/main/resources/assets/forestry/textures/items/crates/seeds.png deleted file mode 100755 index 74920f38e4bd431564b94fd4154a287c77089ccd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 240 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPHF3h)VW1=7WFmh)SD_smGzG9fB6 z#26^z=b#?#sl)I{AajF-OOcA6GtZh076MOryMS_xB|(0{3=Yq3qyaf4o-U3d6>-T4 zA}oxoY;11Is;RgTe~DWM4f%Qi>L diff --git a/src/main/resources/assets/forestry/textures/items/crates/silver.png b/src/main/resources/assets/forestry/textures/items/crates/silver.png deleted file mode 100644 index 7de7391af82ebe4e2b38052b118779d1a67eb304..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 249 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFP2=EDU{r~^}i4!O0wD=Xp+hl~9 z?VOPm?QP)iti5qUG*HR=_wRdqdy9&SzJ2?)YuB#K%uGgUgKVG#V@Z%-FoVOh8)-mJ zxu=U`NJU(7f*BhlD;wK01=Xt@q3R0CMW1}mdcNc2IkV8qOLn0`Teool?*zsmVG))j zjmQ$2R}6+u$>;P!m<)5?-HX~Qd88w9clK3o0cZEByTAPv+>X5b@8zZ7mf?~i&~fky r6O#j5bCspQ6hi}p4NDmvnV1W zgoTlnjm=G2HC6bjg2G`PLtkCZJ&lbQBRo$Yl{mt|%d(2mu*YPox@4n-*XFYMB|u*K z`8$=IM<&?qOuObLaJcCCyPLrYSyLQ%gx}AsKFE_SoUAO+tSQ3Mz{B>nNMS`nLc)U= d3{7lo3^$*vw}+H$e*v_f!PC{xWt~$(699W?P2vCm diff --git a/src/main/resources/assets/forestry/textures/items/crates/soulsand.png b/src/main/resources/assets/forestry/textures/items/crates/soulsand.png deleted file mode 100755 index ab2882eac593213f3edd0824922673cda726df3b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 373 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbMfv;dzFS0FvV#dpt)q~bWsEfbS&_bFasE+mme!hb!H#C7 zaen#Xo~Fu@2|o7z*809ShFwL;&W7p^ddhy*`bXI~Hv-+kSQ6wH%;50sMjDXQ>*?Yc zQW59c7b=@WNqA16Q3>_CnK=#fNr? z*SdHeaa{3fhrvYOpo5*2X=jS2&i}#UmTcU)Y_n6*p_!}V@;B+KAIYoV;Q2V}zw*k< zoA;XZ`74xOH`~5__xr$*{^zS}>i0NI@p#L|c*?oS=fnlSBRp^8J>5CJId$v=1t){2 LtDnm{r-UW|?*D#c diff --git a/src/main/resources/assets/forestry/textures/items/crates/stone.png b/src/main/resources/assets/forestry/textures/items/crates/stone.png deleted file mode 100755 index 54afd48d3967f18f05bf06c3c4f3139d255b3514..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 414 zcmV;P0b%}$P)ZES3_u&-oWSCfp4cyn}*kdkI#S(l55otm1Pm6d&aeSdy`l8lRneSCa=frf;J zacpc^Q&Ck>PobEVla!aIp`Mb7h;U(MbZBI1W?_?%ma(s|tD&8bh=!$~pr4kQnv#!$ zcypJGh;3(Ue|dJVt*wiIeuH>+kcEYPZ)yeFve*Cs00DGTPE!Ct=GbNc005FnL_t(| zUPX>o62mYIL?g)%C^M$a%zXcAHFhKSjehiIS0m5Uf50)xGVrai z5g`y$A#1eFWOMm~=0uT7WvWz(D?nkr(QLIlf)m}Cdi}w0#0fo~OlNaiEZvROI^4V| z+HnQ;hvSK&^Tqvfz0v*ge0`ii6llIn1xSYx#so~VTYSdsUmgz%mqm#39{>OV07*qo IM6N<$f@WB-T4 zA}oxoY;11Is;RDxyf&B3F9Gt> z&)=!!JTk#61|GJrMG7kt5)vM~ dU}$1vW4QTTy*;F4`wO7;44$rjF6*2UngIGcP%Hod diff --git a/src/main/resources/assets/forestry/textures/items/crates/tile]-16.png b/src/main/resources/assets/forestry/textures/items/crates/tile]-16.png deleted file mode 100755 index 93f68cbe78c5cf376c06293655be4368b4ec08bf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 239 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPHF4e$wZ1=7WFmh)SD_smGzG9fB6 z#Q6XJ|9%eY(VjYYrJN6nTkR6F`1Jq(rMq_@zI}W2_(Bn&2F8*gzhDN3XE)M-oB~f5 z$B>G+$#6@pNayQlC5bY=fFK%-FQkxL6q#njQDbaA-+L gNLW}kENEn8&}CL$Cc&`o3eau_Pgg&ebxsLQ0El`_mjD0& diff --git a/src/main/resources/assets/forestry/textures/items/crates/tin.png b/src/main/resources/assets/forestry/textures/items/crates/tin.png deleted file mode 100755 index 0e05104247b56de2c191ae4ac14939db03dc7d61..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 254 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!Wq?nJE0CVw;#(YNxo1YwmI+ar zA;wkPF9HSs{Qdjz-IvW*pUggSXUdVA(VjYf4(dzJ-Y?jA_Q2hjOV2%6yDqsJsE)BD z$S;_|;n|HeAg9>V#WAEJ&b7~zk6Dq2B{M%~v+Do)93Ek3PQKVp(SDs~9?VG=XPCnF zD5am0{P)Fb`3z;HGxZBseK9)nj^Q|$gHn<}q-;*uD|SQ2Ft4>=EyCI>v(|o%XsmsI x?f2(3)<^RE&*_Q&_jWK3R*7kRep0gM53}<`R$m`Z0VbgJ44$rjF6*2Ung9dFV7LGP diff --git a/src/main/resources/assets/forestry/textures/items/crates/uum.png b/src/main/resources/assets/forestry/textures/items/crates/uum.png deleted file mode 100755 index 24e3bca3d87e9674c2b7d7ca8ab31e21b523f3f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 261 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!Q-Dv1E0CVw;=5-?(v}HP#c`II zA;y^unLxoE{yTQMbon``A9I-+?Wwa-r(&^A_C=SAdo0`6TUJlinR?iN`o)VEm&s+m zJ{pn%)WBF0qrnIXoi zrkp^L!bH{8Yc=W`HH+gcuikR?b5KuB7hki%BHB|YFixFvp1%0%7x_!&p_83(Vb7u$jN6Y+d8|dcg^7Vu#rJ9|K*$;OXk;vd$@? F2>?Z)Sc(7u diff --git a/src/main/resources/assets/forestry/textures/items/crates/wood.png b/src/main/resources/assets/forestry/textures/items/crates/wood.png deleted file mode 100755 index 938c9f0697ec83221932f8bf2dba63a33b4890d2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 282 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!Uw}`DE0A7QZMFR*FJY4WzFmiFzuQ zdv(n^5PtXLLeBT|c0LPuC(EAZV$&Zgc>WsWa