From 64fe3a21eabd0ad18f8ced7aa2236083f76f37c4 Mon Sep 17 00:00:00 2001 From: Aidan Brady Date: Sat, 2 Nov 2013 21:07:55 -0400 Subject: [PATCH] Fix typo, start work on fancy Energy Cube rendering :) --- common/mekanism/client/ClientProxy.java | 2 + common/mekanism/client/ClientTickHandler.java | 2 + common/mekanism/client/MekanismClient.java | 2 + .../client/model/ModelEnergyCube.java | 211 ++++++++++++++++++ .../render/block/MachineRenderingHandler.java | 2 +- .../render/item/ItemRenderingHandler.java | 18 +- .../render/tileentity/RenderEnergyCube.java | 74 ++++++ common/mekanism/common/CommonProxy.java | 1 + common/mekanism/common/Mekanism.java | 14 +- common/mekanism/common/Tier.java | 13 +- .../mekanism/common/TileComponentEjector.java | 6 +- .../common/block/BlockEnergyCube.java | 67 ++---- .../mekanism/common/block/BlockMachine.java | 5 + .../tileentity/TileEntityBasicMachine.java | 2 +- .../tileentity/TileEntityEnergyCube.java | 6 +- .../TileEntityElectrolyticSeparator.java | 6 +- .../assets/mekanism/render/EnergyCore.png | Bin 0 -> 1117 bytes .../mekanism/render/EnergyCubeAdvanced.png | Bin 0 -> 1641 bytes .../mekanism/render/EnergyCubeBasic.png | Bin 0 -> 1697 bytes .../mekanism/render/EnergyCubeElite.png | Bin 0 -> 1709 bytes .../mekanism/render/EnergyCubeUltimate.png | Bin 0 -> 1743 bytes 21 files changed, 353 insertions(+), 78 deletions(-) create mode 100644 common/mekanism/client/model/ModelEnergyCube.java create mode 100644 common/mekanism/client/render/tileentity/RenderEnergyCube.java create mode 100644 resources/assets/mekanism/render/EnergyCore.png create mode 100644 resources/assets/mekanism/render/EnergyCubeAdvanced.png create mode 100644 resources/assets/mekanism/render/EnergyCubeBasic.png create mode 100644 resources/assets/mekanism/render/EnergyCubeElite.png create mode 100644 resources/assets/mekanism/render/EnergyCubeUltimate.png diff --git a/common/mekanism/client/ClientProxy.java b/common/mekanism/client/ClientProxy.java index 444de123d..07221ee23 100644 --- a/common/mekanism/client/ClientProxy.java +++ b/common/mekanism/client/ClientProxy.java @@ -43,6 +43,7 @@ import mekanism.client.render.tileentity.RenderConfigurableMachine; import mekanism.client.render.tileentity.RenderDynamicTank; import mekanism.client.render.tileentity.RenderElectricChest; import mekanism.client.render.tileentity.RenderElectricPump; +import mekanism.client.render.tileentity.RenderEnergyCube; import mekanism.client.render.tileentity.RenderLogisticalSorter; import mekanism.client.render.tileentity.RenderLogisticalTransporter; import mekanism.client.render.tileentity.RenderMechanicalPipe; @@ -225,6 +226,7 @@ public class ClientProxy extends CommonProxy ClientRegistry.registerTileEntity(TileEntityPurificationChamber.class, "PurificationChamber", new RenderConfigurableMachine()); ClientRegistry.registerTileEntity(TileEntityEnergizedSmelter.class, "EnergizedSmelter", new RenderConfigurableMachine()); ClientRegistry.registerTileEntity(TileEntityMetallurgicInfuser.class, "MetallurgicInfuser", new RenderMetallurgicInfuser()); + ClientRegistry.registerTileEntity(TileEntityEnergyCube.class, "EnergyCube", new RenderEnergyCube()); ClientRegistry.registerTileEntity(TileEntityPressurizedTube.class, "PressurizedTube", new RenderPressurizedTube()); ClientRegistry.registerTileEntity(TileEntityUniversalCable.class, "UniversalCable", new RenderUniversalCable()); ClientRegistry.registerTileEntity(TileEntityElectricPump.class, "ElectricPump", new RenderElectricPump()); diff --git a/common/mekanism/client/ClientTickHandler.java b/common/mekanism/client/ClientTickHandler.java index e95b552b7..fdf737dfc 100644 --- a/common/mekanism/client/ClientTickHandler.java +++ b/common/mekanism/client/ClientTickHandler.java @@ -55,6 +55,8 @@ public class ClientTickHandler implements ITickHandler }).start(); } + MekanismClient.ticksPassed++; + if(!hasNotified && mc.theWorld != null && Mekanism.latestVersionNumber != null && Mekanism.recentNews != null) { MekanismUtils.checkForUpdates(mc.thePlayer); diff --git a/common/mekanism/client/MekanismClient.java b/common/mekanism/client/MekanismClient.java index 833a4f21d..1e58a499f 100644 --- a/common/mekanism/client/MekanismClient.java +++ b/common/mekanism/client/MekanismClient.java @@ -14,4 +14,6 @@ public class MekanismClient extends Mekanism //General Configuration public static boolean enableSounds = true; public static boolean fancyUniversalCableRender = true; + + public static long ticksPassed = 0; } diff --git a/common/mekanism/client/model/ModelEnergyCube.java b/common/mekanism/client/model/ModelEnergyCube.java new file mode 100644 index 000000000..78cba89cd --- /dev/null +++ b/common/mekanism/client/model/ModelEnergyCube.java @@ -0,0 +1,211 @@ +package mekanism.client.model; + +import mekanism.client.render.MekanismRenderer; +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.model.ModelRenderer; + +public class ModelEnergyCube extends ModelBase +{ + ModelRenderer Corner1; + ModelRenderer Corner2; + ModelRenderer Corner3; + ModelRenderer Corner4; + ModelRenderer Corner5; + ModelRenderer Corner6; + ModelRenderer Corner7; + ModelRenderer Corner8; + ModelRenderer Frame4; + ModelRenderer Frame3; + ModelRenderer Frame2; + ModelRenderer Frame1; + ModelRenderer HoriPole1; + ModelRenderer HoriPole2; + ModelRenderer HoriPole3; + ModelRenderer HoriPole4; + ModelRenderer HoriPole5; + ModelRenderer HoriPole6; + ModelRenderer HoriPole7; + ModelRenderer HoriPole8; + + public ModelEnergyCube() + { + textureWidth = 64; + textureHeight = 64; + + Corner1 = new ModelRenderer(this, 0, 17); + Corner1.addBox(0F, 0F, 0F, 3, 3, 3); + Corner1.setRotationPoint(5F, 21F, -8F); + Corner1.setTextureSize(64, 64); + Corner1.mirror = true; + setRotation(Corner1, 0F, 0F, 0F); + Corner2 = new ModelRenderer(this, 0, 17); + Corner2.addBox(0F, 0F, 0F, 3, 3, 3); + Corner2.setRotationPoint(-8F, 21F, -8F); + Corner2.setTextureSize(64, 64); + Corner2.mirror = true; + setRotation(Corner2, 0F, 0F, 0F); + Corner3 = new ModelRenderer(this, 0, 17); + Corner3.addBox(0F, 0F, 0F, 3, 3, 3); + Corner3.setRotationPoint(5F, 21F, 5F); + Corner3.setTextureSize(64, 64); + Corner3.mirror = true; + setRotation(Corner3, 0F, 0F, 0F); + Corner4 = new ModelRenderer(this, 0, 17); + Corner4.addBox(0F, 0F, 0F, 3, 3, 3); + Corner4.setRotationPoint(-8F, 21F, 5F); + Corner4.setTextureSize(64, 64); + Corner4.mirror = true; + setRotation(Corner4, 0F, 0F, 0F); + Corner5 = new ModelRenderer(this, 0, 17); + Corner5.addBox(0F, 0F, 0F, 3, 3, 3); + Corner5.setRotationPoint(5F, 8F, -8F); + Corner5.setTextureSize(64, 64); + Corner5.mirror = true; + setRotation(Corner5, 0F, 0F, 0F); + Corner6 = new ModelRenderer(this, 0, 17); + Corner6.addBox(0F, 0F, 0F, 3, 3, 3); + Corner6.setRotationPoint(-8F, 8F, -8F); + Corner6.setTextureSize(64, 64); + Corner6.mirror = true; + setRotation(Corner6, 0F, 0F, 0F); + Corner7 = new ModelRenderer(this, 0, 17); + Corner7.addBox(0F, 0F, 0F, 3, 3, 3); + Corner7.setRotationPoint(-8F, 8F, 5F); + Corner7.setTextureSize(64, 64); + Corner7.mirror = true; + setRotation(Corner7, 0F, 0F, 0F); + Corner8 = new ModelRenderer(this, 0, 17); + Corner8.addBox(0F, 0F, 0F, 3, 3, 3); + Corner8.setRotationPoint(5F, 8F, 5F); + Corner8.setTextureSize(64, 64); + Corner8.mirror = true; + setRotation(Corner8, 0F, 0F, 0F); + Frame4 = new ModelRenderer(this, 0, 24); + Frame4.addBox(0F, 0F, 0F, 3, 10, 3); + Frame4.setRotationPoint(5F, 11F, -8F); + Frame4.setTextureSize(64, 64); + Frame4.mirror = true; + setRotation(Frame4, 0F, 0F, 0F); + Frame3 = new ModelRenderer(this, 0, 24); + Frame3.addBox(0F, 0F, 0F, 3, 10, 3); + Frame3.setRotationPoint(-8F, 11F, -8F); + Frame3.setTextureSize(64, 64); + Frame3.mirror = true; + setRotation(Frame3, 0F, 0F, 0F); + Frame2 = new ModelRenderer(this, 0, 24); + Frame2.addBox(0F, 0F, 0F, 3, 10, 3); + Frame2.setRotationPoint(-8F, 11F, 5F); + Frame2.setTextureSize(64, 64); + Frame2.mirror = true; + setRotation(Frame2, 0F, 0F, 0F); + Frame1 = new ModelRenderer(this, 0, 24); + Frame1.addBox(0F, 0F, 0F, 3, 10, 3); + Frame1.setRotationPoint(5F, 11F, 5F); + Frame1.setTextureSize(64, 64); + Frame1.mirror = true; + setRotation(Frame1, 0F, 0F, 0F); + HoriPole1 = new ModelRenderer(this, 27, 0); + HoriPole1.addBox(0F, 0F, 0F, 3, 3, 10); + HoriPole1.setRotationPoint(5F, 21F, -5F); + HoriPole1.setTextureSize(64, 64); + HoriPole1.mirror = true; + setRotation(HoriPole1, 0F, 0F, 0F); + HoriPole2 = new ModelRenderer(this, 0, 0); + HoriPole2.addBox(0F, 0F, 0F, 10, 3, 3); + HoriPole2.setRotationPoint(-5F, 21F, 5F); + HoriPole2.setTextureSize(64, 64); + HoriPole2.mirror = true; + setRotation(HoriPole2, 0F, 0F, 0F); + HoriPole3 = new ModelRenderer(this, 27, 0); + HoriPole3.addBox(0F, 0F, 0F, 3, 3, 10); + HoriPole3.setRotationPoint(-8F, 21F, -5F); + HoriPole3.setTextureSize(64, 64); + HoriPole3.mirror = true; + setRotation(HoriPole3, 0F, 0F, 0F); + HoriPole4 = new ModelRenderer(this, 0, 0); + HoriPole4.addBox(0F, 0F, 0F, 10, 3, 3); + HoriPole4.setRotationPoint(-5F, 21F, -8F); + HoriPole4.setTextureSize(64, 64); + HoriPole4.mirror = true; + setRotation(HoriPole4, 0F, 0F, 0F); + HoriPole5 = new ModelRenderer(this, 27, 0); + HoriPole5.addBox(0F, 0F, 0F, 3, 3, 10); + HoriPole5.setRotationPoint(5F, 8F, -5F); + HoriPole5.setTextureSize(64, 64); + HoriPole5.mirror = true; + setRotation(HoriPole5, 0F, 0F, 0F); + HoriPole6 = new ModelRenderer(this, 0, 0); + HoriPole6.addBox(0F, 0F, 0F, 10, 3, 3); + HoriPole6.setRotationPoint(-5F, 8F, 5F); + HoriPole6.setTextureSize(64, 64); + HoriPole6.mirror = true; + setRotation(HoriPole6, 0F, 0F, 0F); + HoriPole7 = new ModelRenderer(this, 27, 0); + HoriPole7.addBox(0F, 0F, 0F, 3, 3, 10); + HoriPole7.setRotationPoint(-8F, 8F, -5F); + HoriPole7.setTextureSize(64, 64); + HoriPole7.mirror = true; + setRotation(HoriPole7, 0F, 0F, 0F); + HoriPole8 = new ModelRenderer(this, 0, 0); + HoriPole8.addBox(0F, 0F, 0F, 10, 3, 3); + HoriPole8.setRotationPoint(-5F, 8F, -8F); + HoriPole8.setTextureSize(64, 64); + HoriPole8.mirror = true; + setRotation(HoriPole8, 0F, 0F, 0F); + } + + public void render(float size) + { + MekanismRenderer.glowOn(); + Corner1.render(size); + Corner2.render(size); + Corner3.render(size); + Corner4.render(size); + Corner5.render(size); + Corner6.render(size); + Corner7.render(size); + Corner8.render(size); + MekanismRenderer.glowOff(); + + Frame4.render(size); + Frame3.render(size); + Frame2.render(size); + Frame1.render(size); + HoriPole1.render(size); + HoriPole2.render(size); + HoriPole3.render(size); + HoriPole4.render(size); + HoriPole5.render(size); + HoriPole6.render(size); + HoriPole7.render(size); + HoriPole8.render(size); + } + + private void setRotation(ModelRenderer model, float x, float y, float z) + { + model.rotateAngleX = x; + model.rotateAngleY = y; + model.rotateAngleZ = z; + } + + public static class ModelEnergyCore extends ModelBase + { + private ModelRenderer cube; + + public ModelEnergyCore() + { + textureWidth = 32; + textureHeight = 32; + + cube = new ModelRenderer(this, 0, 0); + cube.addBox(-8, -8, -8, 16, 16, 16); + cube.setTextureSize(32, 32); + cube.mirror = true; + } + + public void render(float size) + { + cube.render(0.0625F); + } + } +} diff --git a/common/mekanism/client/render/block/MachineRenderingHandler.java b/common/mekanism/client/render/block/MachineRenderingHandler.java index 0b4ca93c0..b7e19293b 100644 --- a/common/mekanism/client/render/block/MachineRenderingHandler.java +++ b/common/mekanism/client/render/block/MachineRenderingHandler.java @@ -54,7 +54,7 @@ public class MachineRenderingHandler implements ISimpleBlockRenderingHandler { GL11.glRotatef(180F, 0.0F, 0.0F, 1.0F); GL11.glRotatef(270F, 0.0F, -1.0F, 0.0F); - GL11.glTranslatef(0.0F, -0.95F, -0.10F); + GL11.glTranslatef(0.0F, -1.0F, 0.0F); Minecraft.getMinecraft().renderEngine.bindTexture(MekanismUtils.getResource(ResourceType.RENDER, "MetallurgicInfuser.png")); metallurgicInfuser.render(0.0625F); } diff --git a/common/mekanism/client/render/item/ItemRenderingHandler.java b/common/mekanism/client/render/item/ItemRenderingHandler.java index a5f8347f8..2442c96ed 100644 --- a/common/mekanism/client/render/item/ItemRenderingHandler.java +++ b/common/mekanism/client/render/item/ItemRenderingHandler.java @@ -1,6 +1,7 @@ package mekanism.client.render.item; import mekanism.client.ClientProxy; +import mekanism.client.model.ModelEnergyCube; import mekanism.client.model.ModelRobit; import mekanism.client.render.MekanismRenderer; import mekanism.common.IElectricChest; @@ -16,17 +17,11 @@ import mekanism.common.util.MekanismUtils.ResourceType; import net.minecraft.block.Block; import net.minecraft.client.Minecraft; import net.minecraft.client.model.ModelChest; -import net.minecraft.client.renderer.ItemRenderer; import net.minecraft.client.renderer.RenderBlocks; -import net.minecraft.client.renderer.Tessellator; -import net.minecraft.client.renderer.entity.RenderManager; -import net.minecraft.client.renderer.texture.TextureManager; import net.minecraft.item.ItemStack; -import net.minecraft.util.Icon; import net.minecraftforge.client.IItemRenderer; import org.lwjgl.opengl.GL11; -import org.lwjgl.opengl.GL12; import cpw.mods.fml.client.registry.RenderingRegistry; import cpw.mods.fml.relauncher.Side; @@ -37,6 +32,7 @@ public class ItemRenderingHandler implements IItemRenderer { public ModelRobit robit = new ModelRobit(); public ModelChest electricChest = new ModelChest(); + public ModelEnergyCube energyCube = new ModelEnergyCube(); @Override public boolean handleRenderType(ItemStack item, ItemRenderType type) @@ -66,9 +62,13 @@ public class ItemRenderingHandler implements IItemRenderer if(item.getItem() instanceof IEnergyCube) { EnergyCubeTier tier = ((IEnergyCube)item.getItem()).getEnergyCubeTier(item); - - GL11.glRotatef(90, 0.0F, 1.0F, 0.0F); - MekanismRenderer.renderItem((RenderBlocks)data[0], tier.ordinal(), Mekanism.EnergyCube); + Minecraft.getMinecraft().renderEngine.bindTexture(MekanismUtils.getResource(ResourceType.RENDER, "EnergyCube" + tier.name + ".png")); + + GL11.glRotatef(180F, 0.0F, 0.0F, 1.0F); + GL11.glRotatef(270F, 0.0F, -1.0F, 0.0F); + GL11.glTranslatef(0.0F, -1.0F, 0.0F); + + energyCube.render(0.0625F); } else if(item.getItem() instanceof ItemWalkieTalkie) { diff --git a/common/mekanism/client/render/tileentity/RenderEnergyCube.java b/common/mekanism/client/render/tileentity/RenderEnergyCube.java new file mode 100644 index 000000000..b553f7c8c --- /dev/null +++ b/common/mekanism/client/render/tileentity/RenderEnergyCube.java @@ -0,0 +1,74 @@ +package mekanism.client.render.tileentity; + +import mekanism.api.EnumColor; +import mekanism.client.MekanismClient; +import mekanism.client.model.ModelEnergyCube; +import mekanism.client.model.ModelEnergyCube.ModelEnergyCore; +import mekanism.client.render.MekanismRenderer; +import mekanism.common.tileentity.TileEntityEnergyCube; +import mekanism.common.util.MekanismUtils; +import mekanism.common.util.MekanismUtils.ResourceType; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.tileentity.TileEntity; + +import org.lwjgl.opengl.GL11; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RenderEnergyCube extends TileEntitySpecialRenderer +{ + private ModelEnergyCube model = new ModelEnergyCube(); + private ModelEnergyCore core = new ModelEnergyCore(); + + @Override + public void renderTileEntityAt(TileEntity tileEntity, double x, double y, double z, float partialTick) + { + renderAModelAt((TileEntityEnergyCube)tileEntity, x, y, z, 1F); + } + + private void renderAModelAt(TileEntityEnergyCube tileEntity, double x, double y, double z, float partialTick) + { + GL11.glPushMatrix(); + GL11.glTranslatef((float)x + 0.5F, (float)y + 1.5F, (float)z + 0.5F); + + bindTexture(MekanismUtils.getResource(ResourceType.RENDER, "EnergyCube" + tileEntity.tier.name + ".png")); + + GL11.glRotatef(180F, 0.0F, 0.0F, 1.0F); + model.render(0.0625F); + GL11.glPopMatrix(); + + //Energy Core Render + GL11.glPushMatrix(); + GL11.glTranslated(x + 0.5, y + 0.5, z + 0.5); + bindTexture(MekanismUtils.getResource(ResourceType.RENDER, "EnergyCore.png")); + + GL11.glShadeModel(GL11.GL_SMOOTH); + GL11.glEnable(GL11.GL_BLEND); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + + MekanismRenderer.glowOn(); + + EnumColor c = tileEntity.tier.color; + + GL11.glPushMatrix(); + GL11.glScalef(0.4F, 0.4F, 0.4F); + GL11.glColor4f(c.getColor(0), c.getColor(1), c.getColor(2), tileEntity.getEnergyStored()/tileEntity.getMaxEnergyStored()); + GL11.glTranslatef(0, (float)Math.sin(Math.toRadians((MekanismClient.ticksPassed + partialTick) * 3)) / 7, 0); + GL11.glRotatef((MekanismClient.ticksPassed + partialTick) * 4, 0, 1, 0); + GL11.glRotatef(36F + (MekanismClient.ticksPassed + partialTick) * 4, 0, 1, 1); + core.render(0.0625F); + GL11.glPopMatrix(); + + MekanismRenderer.glowOff(); + + GL11.glShadeModel(GL11.GL_FLAT); + GL11.glDisable(GL11.GL_LINE_SMOOTH); + GL11.glDisable(GL11.GL_POLYGON_SMOOTH); + GL11.glDisable(GL11.GL_BLEND); + + GL11.glPopMatrix(); + } +} diff --git a/common/mekanism/common/CommonProxy.java b/common/mekanism/common/CommonProxy.java index e33bee1e0..6291303dd 100644 --- a/common/mekanism/common/CommonProxy.java +++ b/common/mekanism/common/CommonProxy.java @@ -75,6 +75,7 @@ public class CommonProxy GameRegistry.registerTileEntity(TileEntityPurificationChamber.class, "PurificationChamber"); GameRegistry.registerTileEntity(TileEntityEnergizedSmelter.class, "EnergizedSmelter"); GameRegistry.registerTileEntity(TileEntityMetallurgicInfuser.class, "MetallurgicInfuser"); + GameRegistry.registerTileEntity(TileEntityEnergyCube.class, "EnergyCube"); GameRegistry.registerTileEntity(TileEntityPressurizedTube.class, "PressurizedTube"); GameRegistry.registerTileEntity(TileEntityUniversalCable.class, "UniversalCable"); GameRegistry.registerTileEntity(TileEntityElectricPump.class, "ElectricPump"); diff --git a/common/mekanism/common/Mekanism.java b/common/mekanism/common/Mekanism.java index 66dc13e1b..a8bb806c8 100644 --- a/common/mekanism/common/Mekanism.java +++ b/common/mekanism/common/Mekanism.java @@ -189,7 +189,7 @@ public class Mekanism public static Item TeleportationCore; public static Item Configurator; public static Item NetworkReader; - public static Item MaganeseAlloy; + public static Item ManganeseAlloy; public static Item WalkieTalkie; //Blocks @@ -238,9 +238,6 @@ public class Mekanism public static double purificationChamberUsage; public static double energizedSmelterUsage; - /** Total ticks passed since thePlayer joined theWorld */ - public static int ticksPassed = 0; - /** * Adds all in-game crafting and smelting recipes. */ @@ -340,7 +337,7 @@ public class Mekanism "RER", Character.valueOf('R'), Item.redstone, Character.valueOf('E'), EnrichedAlloy })); CraftingManager.getInstance().getRecipeList().add(new ShapelessOreRecipe(new ItemStack(EnrichedIron, 2), new Object[] { - MaganeseAlloy, Item.ingotIron + ManganeseAlloy, Item.ingotIron })); CraftingManager.getInstance().getRecipeList().add(new MekanismRecipe(new ItemStack(MachineBlock, 1, 8), new Object[] { "IFI", "CEC", "IFI", Character.valueOf('I'), Item.ingotIron, Character.valueOf('F'), Block.furnaceIdle, Character.valueOf('C'), "circuitBasic", Character.valueOf('E'), EnrichedAlloy @@ -494,7 +491,7 @@ public class Mekanism InfuseRegistry.registerInfuseObject(new ItemStack(CompressedCarbon), new InfuseObject(InfuseRegistry.get("CARBON"), 100)); //Smelting - FurnaceRecipes.smelting().addSmelting(Block.dirt.blockID, new ItemStack(MaganeseAlloy, 2), 0); + FurnaceRecipes.smelting().addSmelting(Block.dirt.blockID, new ItemStack(ManganeseAlloy, 2), 0); } /** @@ -525,7 +522,7 @@ public class Mekanism DirtyDust = new ItemDirtyDust(configuration.getItem("DirtyDust", 11220).getInt()-256); Configurator = new ItemConfigurator(configuration.getItem("Configurator", 11221).getInt()).setUnlocalizedName("Configurator"); NetworkReader = new ItemNetworkReader(configuration.getItem("NetworkReader", 11222).getInt()).setUnlocalizedName("NetworkReader"); - MaganeseAlloy = new ItemMekanism(configuration.getItem("MaganeseAlloy", 11223).getInt()).setUnlocalizedName("MaganeseAlloy"); + ManganeseAlloy = new ItemMekanism(configuration.getItem("ManganeseAlloy", 11223).getInt()).setUnlocalizedName("ManganeseAlloy"); WalkieTalkie = new ItemWalkieTalkie(configuration.getItem("WalkieTalkie", 11224).getInt()).setUnlocalizedName("WalkieTalkie"); configuration.save(); @@ -550,7 +547,7 @@ public class Mekanism GameRegistry.registerItem(DirtyDust, "DirtyDust"); GameRegistry.registerItem(Configurator, "Configurator"); GameRegistry.registerItem(NetworkReader, "NetworkReader"); - GameRegistry.registerItem(MaganeseAlloy, "MaganeseAlloy"); + GameRegistry.registerItem(ManganeseAlloy, "MaganeseAlloy"); GameRegistry.registerItem(WalkieTalkie, "WalkieTalkie"); } @@ -1005,7 +1002,6 @@ public class Mekanism EntityRegistry.registerModEntity(EntityRobit.class, "Robit", 1, this, 40, 2, true); //Tile entities - GameRegistry.registerTileEntity(TileEntityEnergyCube.class, "EnergyCube"); GameRegistry.registerTileEntity(TileEntityBoundingBlock.class, "BoundingBlock"); GameRegistry.registerTileEntity(TileEntityGasTank.class, "GasTank"); GameRegistry.registerTileEntity(TileEntityTeleporter.class, "MekanismTeleporter"); diff --git a/common/mekanism/common/Tier.java b/common/mekanism/common/Tier.java index b56ea3ed9..7eeb65916 100644 --- a/common/mekanism/common/Tier.java +++ b/common/mekanism/common/Tier.java @@ -1,5 +1,6 @@ package mekanism.common; +import mekanism.api.EnumColor; import net.minecraft.util.ResourceLocation; /** @@ -16,15 +17,16 @@ public final class Tier */ public static enum EnergyCubeTier { - BASIC("Basic", 2000000, 120, 800), - ADVANCED("Advanced", 8000000, 240, 3200), - ELITE("Elite", 32000000, 240, 12800), - ULTIMATE("Ultimate", 128000000, 480, 51200); + BASIC("Basic", EnumColor.BRIGHT_GREEN, 2000000, 120, 800), + ADVANCED("Advanced", EnumColor.DARK_RED, 8000000, 240, 3200), + ELITE("Elite", EnumColor.DARK_BLUE, 32000000, 240, 12800), + ULTIMATE("Ultimate", EnumColor.PURPLE, 128000000, 480, 51200); public double MAX_ELECTRICITY; public float VOLTAGE; public double OUTPUT; public String name; + public EnumColor color; public static EnergyCubeTier getFromName(String tierName) { @@ -40,9 +42,10 @@ public final class Tier return BASIC; } - private EnergyCubeTier(String s, double maxEnergy, float voltage, int out) + private EnergyCubeTier(String s, EnumColor c, double maxEnergy, float voltage, int out) { name = s; + color = c; MAX_ELECTRICITY = maxEnergy; VOLTAGE = voltage; OUTPUT = out; diff --git a/common/mekanism/common/TileComponentEjector.java b/common/mekanism/common/TileComponentEjector.java index 643b46c34..d18a3d9b0 100644 --- a/common/mekanism/common/TileComponentEjector.java +++ b/common/mekanism/common/TileComponentEjector.java @@ -186,7 +186,11 @@ public class TileComponentEjector implements ITileComponent, IEjector public void write(NBTTagCompound nbtTags) { nbtTags.setBoolean("ejecting", ejecting); - nbtTags.setInteger("ejectColor", TransporterUtils.colors.indexOf(ejectColor)); + + if(ejectColor != null) + { + nbtTags.setInteger("ejectColor", TransporterUtils.colors.indexOf(ejectColor)); + } for(int i = 0; i < sideData.availableSlots.length; i++) { diff --git a/common/mekanism/common/block/BlockEnergyCube.java b/common/mekanism/common/block/BlockEnergyCube.java index 8f419a9eb..fd0889847 100644 --- a/common/mekanism/common/block/BlockEnergyCube.java +++ b/common/mekanism/common/block/BlockEnergyCube.java @@ -7,6 +7,7 @@ import java.util.List; import java.util.Random; import mekanism.api.energy.IEnergizedItem; +import mekanism.client.ClientProxy; import mekanism.common.IEnergyCube; import mekanism.common.ISustainedInventory; import mekanism.common.Mekanism; @@ -52,41 +53,11 @@ public class BlockEnergyCube extends BlockContainer setHardness(2F); setResistance(4F); setCreativeTab(Mekanism.tabMekanism); - setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); } @Override @SideOnly(Side.CLIENT) - public void registerIcons(IconRegister register) - { - icons[0][0] = register.registerIcon("mekanism:BasicEnergyCubeFront"); - icons[0][1] = register.registerIcon("mekanism:BasicEnergyCubeSide"); - icons[1][0] = register.registerIcon("mekanism:AdvancedEnergyCubeFront"); - icons[1][1] = register.registerIcon("mekanism:AdvancedEnergyCubeSide"); - icons[2][0] = register.registerIcon("mekanism:EliteEnergyCubeFront"); - icons[2][1] = register.registerIcon("mekanism:EliteEnergyCubeSide"); - icons[3][0] = register.registerIcon("mekanism:UltimateEnergyCubeFront"); - icons[3][1] = register.registerIcon("mekanism:UltimateEnergyCubeSide"); - } - - @Override - public void setBlockBoundsForItemRender() - { - setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); - } - - @Override - @SideOnly(Side.CLIENT) - public Icon getIcon(int side, int meta) - { - if(side == 3) - { - return icons[meta][0]; - } - else { - return icons[meta][1]; - } - } + public void registerIcons(IconRegister register) {} @Override public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase entityliving, ItemStack itemstack) @@ -116,22 +87,6 @@ public class BlockEnergyCube extends BlockContainer tileEntity.setFacing((short)change); } - - @Override - @SideOnly(Side.CLIENT) - public Icon getBlockTexture(IBlockAccess world, int x, int y, int z, int side) - { - int metadata = world.getBlockMetadata(x, y, z); - TileEntityEnergyCube tileEntity = (TileEntityEnergyCube)world.getBlockTileEntity(x, y, z); - - if(side == tileEntity.facing) - { - return icons[tileEntity.tier.ordinal()][0]; - } - else { - return icons[tileEntity.tier.ordinal()][1]; - } - } @Override public int quantityDropped(Random random) @@ -258,6 +213,24 @@ public class BlockEnergyCube extends BlockContainer return new TileEntityEnergyCube(); } + @Override + public boolean renderAsNormalBlock() + { + return false; + } + + @Override + public boolean isOpaqueCube() + { + return false; + } + + @Override + public int getRenderType() + { + return -1; + } + @Override public ItemStack getPickBlock(MovingObjectPosition target, World world, int x, int y, int z) { diff --git a/common/mekanism/common/block/BlockMachine.java b/common/mekanism/common/block/BlockMachine.java index d390fd003..1b2d3acc0 100644 --- a/common/mekanism/common/block/BlockMachine.java +++ b/common/mekanism/common/block/BlockMachine.java @@ -650,6 +650,11 @@ public class BlockMachine extends BlockContainer implements ISpecialBounds @Override public TileEntity createTileEntity(World world, int metadata) { + if(MachineType.getFromMetadata(metadata) == null) + { + return null; + } + return MachineType.getFromMetadata(metadata).create(); } diff --git a/common/mekanism/common/tileentity/TileEntityBasicMachine.java b/common/mekanism/common/tileentity/TileEntityBasicMachine.java index 0991c7070..cf0546047 100644 --- a/common/mekanism/common/tileentity/TileEntityBasicMachine.java +++ b/common/mekanism/common/tileentity/TileEntityBasicMachine.java @@ -279,7 +279,7 @@ public abstract class TileEntityBasicMachine extends TileEntityElectricBlock imp public double transferEnergyToAcceptor(double amount) { double rejects = 0; - double neededElectricity = MekanismUtils.getEnergy(getEnergyMultiplier(), getMaxEnergy())-getEnergy(); + double neededElectricity = getMaxEnergy()-getEnergy(); if(amount <= neededElectricity) { diff --git a/common/mekanism/common/tileentity/TileEntityEnergyCube.java b/common/mekanism/common/tileentity/TileEntityEnergyCube.java index 11e38ad17..f5a8fdca6 100644 --- a/common/mekanism/common/tileentity/TileEntityEnergyCube.java +++ b/common/mekanism/common/tileentity/TileEntityEnergyCube.java @@ -295,9 +295,10 @@ public class TileEntityEnergyCube extends TileEntityElectricBlock implements IEn @Override public void handlePacketData(ByteArrayDataInput dataStream) { + tier = EnergyCubeTier.getFromName(dataStream.readUTF()); + super.handlePacketData(dataStream); - tier = EnergyCubeTier.getFromName(dataStream.readUTF()); controlType = RedstoneControl.values()[dataStream.readInt()]; MekanismUtils.updateBlock(worldObj, xCoord, yCoord, zCoord); @@ -306,9 +307,10 @@ public class TileEntityEnergyCube extends TileEntityElectricBlock implements IEn @Override public ArrayList getNetworkedData(ArrayList data) { + data.add(tier.name); + super.getNetworkedData(data); - data.add(tier.name); data.add(controlType.ordinal()); return data; diff --git a/common/mekanism/generators/common/tileentity/TileEntityElectrolyticSeparator.java b/common/mekanism/generators/common/tileentity/TileEntityElectrolyticSeparator.java index 34f2ab453..3bc12f941 100644 --- a/common/mekanism/generators/common/tileentity/TileEntityElectrolyticSeparator.java +++ b/common/mekanism/generators/common/tileentity/TileEntityElectrolyticSeparator.java @@ -167,10 +167,10 @@ public class TileEntityElectrolyticSeparator extends TileEntityElectricBlock imp } } - if(oxygenStored < MAX_GAS && hydrogenStored < MAX_GAS && waterTank.getFluid() != null && waterTank.getFluid().amount-2 >= 0 && electricityStored-100 > 0) + if(oxygenStored < MAX_GAS && hydrogenStored < MAX_GAS && waterTank.getFluid() != null && waterTank.getFluid().amount-2 >= 0 && getEnergy()-100 > 0) { waterTank.drain(2, true); - setEnergy(electricityStored - MekanismGenerators.electrolyticSeparatorUsage); + setEnergy(getEnergy() - MekanismGenerators.electrolyticSeparatorUsage); setGas(EnumGas.OXYGEN, oxygenStored + 1); setGas(EnumGas.HYDROGEN, hydrogenStored + 2); } @@ -288,7 +288,7 @@ public class TileEntityElectrolyticSeparator extends TileEntityElectricBlock imp public double transferEnergyToAcceptor(double amount) { double rejects = 0; - double neededElectricity = MAX_ELECTRICITY-electricityStored; + double neededElectricity = getMaxEnergy()-getEnergy(); if(amount <= neededElectricity) { diff --git a/resources/assets/mekanism/render/EnergyCore.png b/resources/assets/mekanism/render/EnergyCore.png new file mode 100644 index 0000000000000000000000000000000000000000..7aa3692fb39b4c1c07da950e4d5908f835743177 GIT binary patch literal 1117 zcmeAS@N?(olHy`uVBq!ia0vp^1wib^!3HEn4h#GSQjEnx?oJHr&dIz4a#+$GeH|GX zHuiJ>Nn{1`ISV`@iy0XB4ude`@%$AjKtZVz*NBqf{Irtt#G+J&fW*wa5h zJyShHL-)^4<_rwXXFOdTLn`9l&I!zWV!-2EeZn?me^s~K0`*({a!aE599o<`+!ie} z*mB``vu2cEhgF{Xfd%^W=g+UVv$NZ0vFccb`1A*YAtde9!-O_#U&|>;qrjWA;+^yTyA8o=YA$zB@r-?>{f?eSD8& zOU{@63fDM3HLOJTN3VM9`^}fS)-m5Lw)Imu@+zr(fqzJe{`J*TV0AB@d-Qrr!kX__ zUHTh0@m$sg+v}I_JE%tmJpKFEc8`1Oi(jF;o_qN#R8&|0?pA-eT*0U0uh!((2|F8i zL_CRS_4j%bJ~M{>WxGU!!>eMwOOd|*Tfe(ltv>j~>dTx12i9*=zMjmylVP#mHT6@^ zS4Lj`Z1=TR@6wu=mGU!U+UE&N{0J?3GK-hzk5;sqz*&|yJvW7~;ZY0w4KLq&9d)rZ zp-8sMFX2J>&57A@$}ZLZOEycrIbo`9@L@HOS}(Y0u^l*M5Mt6m1GnWU%;MyU?QwXu zev6ZQ^0K|xw=Q~p0O6iJZXMs|d8C`(n3xSUduQX_{dom#K(CfPsX7=e{L#MV?gO5? z#Y@#coC+>ryQA}Iz0uBjp7uvF6y{#8ydKFb;qlx;{$*(I#pfmWO2eAp?R>^!cK+)P zhkG)Mv&?qBpJi(Mp820k>MYZ}EBv2tmRk$-?u&Uq+dju^ZoF$QV6J9RQnt0A8nRtJ#}qToeqQxU`h^Sksx#LW))ktCS1}!|;e8}!U8HL+Am06F z^#jk&Kfvfy_$$DS=82P~FDx4y<5S(&9cL?Ibc=oCAF?d+a`&$iyVn+7Y8r%0_3C{70Eeg;ohKbLh*2~7Yj C7Zw}< literal 0 HcmV?d00001 diff --git a/resources/assets/mekanism/render/EnergyCubeAdvanced.png b/resources/assets/mekanism/render/EnergyCubeAdvanced.png new file mode 100644 index 0000000000000000000000000000000000000000..c221bfba79f10b1496d1299fbd95bc4b83d0c1b4 GIT binary patch literal 1641 zcmb7FiC0o-6n|M}n|5rO5T~(aMk^O^A&pW?F?Xa~CQMTza7{~5vr%bra4c{)K~r<1 z2|{yR(Mr=Y9Z``$Epl?n#MChtQX_O8W`DrEbH4k%@7{NR_uk+4JLe^0(6*|Zpql^y zP_?&1od)-7inU=qXqzo??clb~?}YOS04Pu1{1vARo;O~y!-fNZ+B3ykQ=1wz2|A%9 zn=>TWP$DS`7e)XuxPTCn0oulGPo%K{!obkbcGk)i0F+1UQ77E4oSV$`4tr$4kU@iy!DL4AyauD^Q8@l(o`*RD30cYS=^dS*D#lu?Htk1Z}LeeKdx&v$K;mt;Y^W+`!7tME`YGgjBdr%L3Lds*~p2ri$a6Sy&&pVnkW{#JJpcH{4E8m z%`cnT0Y8~H;SteSGsD*&(G*m8%J_Xx4aH(H8!fpP<;?ALZG@~8eJ8K}(?`+R)_L6S z7>!3&RZ>g*9GAD3)H6O1q!IBAc<9{szH4 zs+2MJkoZA~X~c^vi_8VUE*RWv53(gvmuujaDZsX9U#LcZJEXkshkS9biJI08V%oOR z*)8-?;{>ocukO-7t=4uP?;yfScWwgxh*s_T068)4-GJx_VMGl2h5_{|SQV`&q8f%Z zI5N@OECng?cJ(CZ9LdnBC-jsAZRtiN@ZIm0cE`o?jGh)MaZm!o%k3YMcjYgqDJZzED|3g+ z2@v_^_|gTx0?G@yBT+uK`wahZ#?Om7J5?@~A?W@$9V$|LDA z+;iIiv(OU0hH409(bDGY&cPaY;|r_Bg^+AfufUiVu#+hDc?s`CCClXV<<#pE7yM$} z^A0{&)s75l4X%Kj+~Pk;KcSlP48M#n;_$%)MEt7q7HGzR+ zE2)=7hw4@%8ZSkTZTr1?`QsnK&@C#yuch+oH-t=Q)qZdyraL@QhM;g}x2l_d18&lb zi*FA$2JuDdk<*=URAsyg1@TyE4s&P zA>Uc*g!fcVhf`CcR|jc*9P)Uq0e6w5fNdX{;ZOqZrUf9HP0($X**NI^3!WWtnyV3q rNN+jF@G$-^;}tFcPveyJVhFL;@5ZK#4aH>ew*c7Npi!k(zBm2@_JcKy literal 0 HcmV?d00001 diff --git a/resources/assets/mekanism/render/EnergyCubeBasic.png b/resources/assets/mekanism/render/EnergyCubeBasic.png new file mode 100644 index 0000000000000000000000000000000000000000..98fee6a9d5aad9b48cebd09bced0b10c650055b1 GIT binary patch literal 1697 zcmb7Fdpy%?82_P6v5;KD>eO+Hh@ucP%Q;jKeutjV}LSjYb(wIw!iPCZi zO*Z4W6xAk1WJ{tU9ge2UTF!5!KIh-_$NRjW=Xu}fdA{%W{l1?!W1o*3bhX}U005vK z?#TV%oFp4cilA+WqkF(e`dVoJNGU7izPo-t5qwY5PcQG{$-oO;cFQ=MfjQG&0ygWDr0vULB z0Wofo%G=j}3G^Ej-7kcf~LqtU)T2&HCy9co*(&s?d5ZuiQplw!-T5d{my4R?Yz z%GL+bhD1H{k|%8QG-0KU(#3c~B5QK6x56S~pcdx>k+^#IJ9+a@_L-WJn#@OpLPlFq zc}LbVl61u*S8&+t+gtsLr-njKzXX(~@{B&oQzk8gU;tsX4;fU-Gru;YLk9W@o*E=M z`X?jFPK0}-B~Lrpn0{vI)a&I8uL&mx8~_Q&UzFAHUO&UOq!bZmuh*!#bES${cJZ-Kjl-eA&mr}pL37KRq z+?V&yDT#(tSTLJlPtI+A88LQ2^~BXWx#C|Pw+l3J(YvcKNxUmL#R1}+Whl3K_0^Xu z4(sL^qXx!p;qkW7DKH3*Xn$Mf+{Gz2b(&o0$EeyXFtxe`rI*l63?$uxP~0MRvNOL& ziUPB&ebXJFqc7%Lp@~}{tqT=VxnJ<2KMN4Iw;$~RHVO))D3Vg zU+q=Rn8qGe8GU%(FWE!vVgRL-$(SwFV^-l#Agj67I%!E~SY@gMHCgVO1<3X=!{r_3 z8Dy>!hwZQ7*|_5;|KPQc52ZzheXUa#Wt~vlVOkU^aweE;+Mn8q9!|p&oMF}fE!?{K z2m?K2yQCK7`>nURvO`-3$*#fDGVNPqYUe=0w(o0nj-8OJ!^~B$lD`r+8IqZ*{{sen z>{f?yaat!AM40Oh9R)d);Zbqs+Ue;z%bc)cSdb(VRX7bE_(IIv!Zi1yY^;UzW}oi* zf{kl`Iew^DEkk36DdzlNtFCG7{Gt7?58!{ACwx8`F?Tsbk>zk4{7wK57a!zpr{J^y E0tx^or2qf` literal 0 HcmV?d00001 diff --git a/resources/assets/mekanism/render/EnergyCubeElite.png b/resources/assets/mekanism/render/EnergyCubeElite.png new file mode 100644 index 0000000000000000000000000000000000000000..3fa52225c261be1011d320454cb8e0700a830796 GIT binary patch literal 1709 zcmb7FdpOf;9RDfeEKN=qSsYYP9i5cRba5KyF6K5$F4+>Jc4HSSm9#7l=cq?>nU^;YKoAfB z0IPg`JVMm_In6Ryp^nYY=r;AHi-9BH0B|>V&U+7ShNBHPS!?X!uP zo{Td>R-e3kKb7tW{e1D48y>zn*N<)yI3731v>MuD>@r^d@!GZ2`0WTvq5KY+TRcnm z>%3aj`;Z$*p-`OiF6^dKsobc$59`^l_z+pio@$2>1ud8skp|z^GMr?N!C>a8_C=wR zw`Ak7v9Sk?#*|Mmd{Hyq&8AgVSHwoHMLq1E!+ zQ+sQ~C~$+{=F(Z$k=GjXpfw7&Dx=9m2bA|!=L5t!vfC1gsHAsSG}=()H^ zHHO(aHHFWR)iCF!(t~}py7;kV-Ghqgt{Hrs{+ElwN5|0FMOhT2rck9i3#;EGrun0x znMjBe14laU1%~Phnx~W6%qA-XPS<5YNrLs1Fpe)I05&)$Hu5nNIYCgt`9nulMf*}m`3L(X2oq%

S2)uD6gr3S$=_wJ3Mq^?VgLqL5@NnPU~ z65}Jyr}M+tneC0rH4ZO|ZA)YcQ&ax!(L|Vw<2*hqOelP+lVfCW!h7&yrzzRuC0m#YE{l{3v<`SQ1{-`Ar41x zG_a5Xg&U(M2#c5*!a9*4YFzEp4L6t0{=2-S@WuMFpR>zj2Bp>8{RP~n(lgFye=iSn zzbWAL&i$}8rk6}Ws{SmWM^;2M(4ZxzANwnsMv$;OkWIM2TRr5!HD}6jVI_V_`x~L} z!WKIE6%qLExyZmu;un5T<73s+xlXJdty`*7vTMF9chqh{0OBv+dqr4`O)+qhr&t^u z?D+d^UCxipQ^ET5Bt(e}*S9fkr)YpUBfD>bwITM`6_}JUPwL5$lgKScw||$@DwV{-Y0admHFVMYZx;chYFd8FYNFYvKOzcbkjXwQvG) zmh98FpU|CyV#>X3d)n*1mVpQh^-&7wOdP!$+fVte7||cS05e5 zL+u=iu&N%thJex++7Z2E&r*KTPF^F$d}}jGH?2&{(F`k2Ij<=Yq+2hagdhr_% zi&4G4k_KUEJxCqN(HafuzP5(&*@PuQCzI;N)0!g=X;K45t|G& z4ogDTiNyM~YaQiL%z#ap3=J6|Os4jHO=UVDC{L@;$8Q?VorC+CzA*5s zK(j@m_Xed|6QD3rSS4Pk8_CDg?Vs{x=Z+5mQIdXBZ=4`A& zilf1R1Cu`5>v3S7`5s?FZ?Rv2R1L-ic{CpWoLlH+d7D|Bb+H9rlC1GIaAyXcbJbb8 z*wNHKODt|BTcO;-`VQeXkpq+BkLeVItZUG@z_6|esg>gK_!smbu+bU)0@VZ$XU<&{ z7}ro4nw4>1uW@H~1g^N1iO}6xx)5v{MQlQN=>?R0C0gY?zk*rtc}@mPn{ThGZj0dN z!%lPUZonnQimUezUc-nfwq&sFp1AgmKqcH{Ey-1_71ft3)>Q1r>ybo!THvkE*ogT= zX7(t)t5ZZ~MdFbMz6*?*bU{rXVVMc?E46lz%DW9u$+w!20=_G;O?nDkvd=<=(Qd38 zQs85!NGE6UnTm|`gRSxChW+Kc2{K}0GO!v=WM}?De^)4?D}X-zUI)zXm%_1HGlajxc=G0D--cp zw=mLalM~UZ{qNN0IE(j*>o?9OVlDq7<^Ap$c}-bzsiX76N}BL| zPZ_CXsun=J*pS^;nmvkZU3qb~41IvRxuP|%N z>aP0(o`-uY`Bv7j|8CVyjuTL4d18~YNV+pt%%*4!S-e%yiM&&73|hDkF1x(`O-3)v4_7-H(;%GPSPZ3fZwL!fm-YlQJP%C5r7D(Y)bn z(`BCV`oZTSj+QJ0dCus*zn(08;awfOE8W>Q9m}m54P{G*B<73J@B4hg-}qhfhhZ}! zHFv5;>hQu{NDg&ria^EBw~HH1>xw*gI6!F$zG>KWe$8^s3tOy($&DOuWg}@aDgQ}&%J_-&0#GY;emW+z zpN)+oG@lS?Q_rW`@;_d9d~W1@b9dRGSwfYpNX?ke7m~k9Phs!b+)%!FpKCir2xznb zA~vH;PlCd+CrXA;^AycO6km~(`sELV zTFV(d+#hZRar zB((6V!tEBYAk&86r&G{Jf5t|;RKMB<8A9KQdXu3bB>FjP_bOt`$dOq>N=15GP}Pbv zXbsYs!7sNbYAdf|6ok3YyDd6}5pS1u9mk`g(^D(#=)53Q1EcL<8BxfZgB|11|JALs z9nj4!U*Vdbnuz!YCHpDfkkFaITayPjGa;RPrg34NxyyLYzEkVBBsf*IK+f&b=O3p3 kD3aw$`Jbk({+`sdIRE-)-L!HP@cDo|U42|?oWhR(1MHhM`Tzg` literal 0 HcmV?d00001