From 40e2d3b7fcdc70683a10df96e07cbe6d3a4fde45 Mon Sep 17 00:00:00 2001 From: Aidan Brady Date: Fri, 20 Dec 2013 16:47:09 -0500 Subject: [PATCH] Bump version, work on multipart transporters --- build.xml | 20 --- .../api/transmitters/TransmissionType.java | 10 +- .../client/render/PartTransmitterIcons.java | 9 +- .../client/render/RenderPartTransmitter.java | 157 ++++++++++++++++++ .../RenderLogisticalTransporter.java | 8 +- common/mekanism/common/Mekanism.java | 4 +- common/mekanism/common/item/ItemBalloon.java | 10 +- .../common/multipart/MultipartMekanism.java | 30 +++- .../multipart/PartDiversionTransporter.java | 6 + .../multipart/PartLogisticalTransporter.java | 16 ++ .../common/multipart/PartSidedPipe.java | 14 +- .../generators/common/MekanismGenerators.java | 4 +- .../mekanism/tools/common/MekanismTools.java | 4 +- etc/core/mcmod.info | 2 +- etc/generators/mcmod.info | 2 +- etc/induction/logo.png | Bin 12009 -> 0 bytes etc/induction/mcmod.info | 17 -- etc/tools/mcmod.info | 2 +- resources/assets/mekanism/lang/en_US.lang | 2 + 19 files changed, 253 insertions(+), 64 deletions(-) create mode 100644 common/mekanism/common/multipart/PartDiversionTransporter.java delete mode 100644 etc/induction/logo.png delete mode 100755 etc/induction/mcmod.info diff --git a/build.xml b/build.xml index cc71ca776..ffd782b16 100644 --- a/build.xml +++ b/build.xml @@ -6,7 +6,6 @@ - @@ -14,7 +13,6 @@ - @@ -45,7 +43,6 @@ - @@ -71,7 +68,6 @@ - @@ -87,14 +83,6 @@ - - - - - - - - @@ -118,10 +106,6 @@ - - - - @@ -139,10 +123,6 @@ - - - - diff --git a/common/mekanism/api/transmitters/TransmissionType.java b/common/mekanism/api/transmitters/TransmissionType.java index efe96256b..206837273 100644 --- a/common/mekanism/api/transmitters/TransmissionType.java +++ b/common/mekanism/api/transmitters/TransmissionType.java @@ -52,8 +52,16 @@ public enum TransmissionType public static TransmissionType fromOldMeta(int meta) { - if(meta <= metaArray.length) + if(meta < metaArray.length) + { return metaArray[meta]; + } + + if(meta == 4 || meta == 5) + { + return ITEM; + } + return null; } diff --git a/common/mekanism/client/render/PartTransmitterIcons.java b/common/mekanism/client/render/PartTransmitterIcons.java index e6c4e3293..fafa0339e 100644 --- a/common/mekanism/client/render/PartTransmitterIcons.java +++ b/common/mekanism/client/render/PartTransmitterIcons.java @@ -3,7 +3,8 @@ package mekanism.client.render; import net.minecraft.client.renderer.texture.IconRegister; import net.minecraft.util.Icon; -public class PartTransmitterIcons { +public class PartTransmitterIcons +{ private Icon sideIcon; private Icon[] centerIcons; @@ -14,15 +15,15 @@ public class PartTransmitterIcons { public void registerCenterIcons(IconRegister register, String[] filenames) { - for(int i=0; i> cachedLiquids = new HashMap>(); + private HashMap> cachedOverlays = new HashMap>(); + + private Minecraft mc = Minecraft.getMinecraft(); + + private EntityItem entityItem = new EntityItem(null); + private RenderItem renderer = (RenderItem)RenderManager.instance.getEntityClassRenderObject(EntityItem.class); public static RenderPartTransmitter getInstance() { @@ -102,6 +118,11 @@ public class RenderPartTransmitter implements IIconRegister GL11.glPopMatrix(); } + public void renderContents(PartLogisticalTransporter transporter, Vector3 pos) + { + + } + public void renderContents(PartUniversalCable cable, Vector3 pos) { if(cable.currentPower == 0) @@ -408,4 +429,140 @@ public class RenderPartTransmitter implements IIconRegister { return 0; } + + private void popTransporter() + { + GL11.glPopAttrib(); + MekanismRenderer.glowOff(); + MekanismRenderer.blendOff(); + GL11.glPopMatrix(); + } + + private void pushTransporter() + { + GL11.glPushMatrix(); + GL11.glPushAttrib(GL11.GL_ENABLE_BIT); + GL11.glEnable(GL11.GL_CULL_FACE); + GL11.glDisable(GL11.GL_LIGHTING); + MekanismRenderer.glowOn(); + MekanismRenderer.blendOn(); + } + + private DisplayInteger getOverlayDisplay(World world, ForgeDirection side, int mode) + { + if(cachedOverlays.containsKey(side) && cachedOverlays.get(side).containsKey(mode)) + { + return cachedOverlays.get(side).get(mode); + } + + Icon icon = null; + + switch(mode) + { + case 0: + icon = Item.gunpowder.getIcon(new ItemStack(Item.gunpowder), 0); + break; + case 1: + icon = Block.torchRedstoneActive.getIcon(0, 0); + break; + case 2: + icon = Block.torchRedstoneIdle.getIcon(0, 0); + break; + } + + Model3D toReturn = new Model3D(); + toReturn.baseBlock = Block.stone; + toReturn.setTexture(icon); + + DisplayInteger display = DisplayInteger.createAndStart(); + + if(cachedOverlays.containsKey(side)) + { + cachedOverlays.get(side).put(mode, display); + } + else { + HashMap map = new HashMap(); + map.put(mode, display); + cachedOverlays.put(side, map); + } + + switch(side) + { + case DOWN: + { + toReturn.minY = -0.01; + toReturn.maxY = 0; + + toReturn.minX = 0; + toReturn.minZ = 0; + toReturn.maxX = 1; + toReturn.maxZ = 1; + break; + } + case UP: + { + toReturn.minY = 1; + toReturn.maxY = 1.01; + + toReturn.minX = 0; + toReturn.minZ = 0; + toReturn.maxX = 1; + toReturn.maxZ = 1; + break; + } + case NORTH: + { + toReturn.minZ = -0.01; + toReturn.maxZ = 0; + + toReturn.minX = 0; + toReturn.minY = 0; + toReturn.maxX = 1; + toReturn.maxY = 1; + break; + } + case SOUTH: + { + toReturn.minZ = 1; + toReturn.maxZ = 1.01; + + toReturn.minX = 0; + toReturn.minY = 0; + toReturn.maxX = 1; + toReturn.maxY = 1; + break; + } + case WEST: + { + toReturn.minX = -0.01; + toReturn.maxX = 0; + + toReturn.minY = 0; + toReturn.minZ = 0; + toReturn.maxY = 1; + toReturn.maxZ = 1; + break; + } + case EAST: + { + toReturn.minX = 1; + toReturn.maxX = 1.01; + + toReturn.minY = 0; + toReturn.minZ = 0; + toReturn.maxY = 1; + toReturn.maxZ = 1; + break; + } + default: + { + break; + } + } + + MekanismRenderer.renderObject(toReturn); + display.endList(); + + return display; + } } diff --git a/common/mekanism/client/render/tileentity/RenderLogisticalTransporter.java b/common/mekanism/client/render/tileentity/RenderLogisticalTransporter.java index c024f0673..dc9b9241d 100644 --- a/common/mekanism/client/render/tileentity/RenderLogisticalTransporter.java +++ b/common/mekanism/client/render/tileentity/RenderLogisticalTransporter.java @@ -152,7 +152,7 @@ public class RenderLogisticalTransporter extends TileEntitySpecialRenderer int mode = ((TileEntityDiversionTransporter)tileEntity).modes[pos.sideHit]; ForgeDirection side = ForgeDirection.getOrientation(pos.sideHit); - push(); + pushTransporter(); GL11.glColor4f(1.0F, 1.0F, 1.0F, 0.8F); @@ -164,13 +164,13 @@ public class RenderLogisticalTransporter extends TileEntitySpecialRenderer int display = getOverlayDisplay(world, side, mode).display; GL11.glCallList(display); - pop(); + popTransporter(); } } } } - private void pop() + private void popTransporter() { GL11.glPopAttrib(); MekanismRenderer.glowOff(); @@ -178,7 +178,7 @@ public class RenderLogisticalTransporter extends TileEntitySpecialRenderer GL11.glPopMatrix(); } - private void push() + private void pushTransporter() { GL11.glPushMatrix(); GL11.glPushAttrib(GL11.GL_ENABLE_BIT); diff --git a/common/mekanism/common/Mekanism.java b/common/mekanism/common/Mekanism.java index 18f3a26b2..74c92453a 100644 --- a/common/mekanism/common/Mekanism.java +++ b/common/mekanism/common/Mekanism.java @@ -134,7 +134,7 @@ import cpw.mods.fml.common.registry.GameRegistry; * @author AidanBrady * */ -@Mod(modid = "Mekanism", name = "Mekanism", version = "5.6.0") +@Mod(modid = "Mekanism", name = "Mekanism", version = "6.0.0") @NetworkMod(channels = {"MEK"}, clientSideRequired = true, serverSideRequired = false, packetHandler = PacketHandler.class) public class Mekanism { @@ -159,7 +159,7 @@ public class Mekanism public static Configuration configuration; /** Mekanism version number */ - public static Version versionNumber = new Version(5, 6, 0); + public static Version versionNumber = new Version(6, 0, 0); /** Map of Teleporters */ public static Map> teleporters = new HashMap>(); diff --git a/common/mekanism/common/item/ItemBalloon.java b/common/mekanism/common/item/ItemBalloon.java index b6c5a5496..ea2ce0da0 100644 --- a/common/mekanism/common/item/ItemBalloon.java +++ b/common/mekanism/common/item/ItemBalloon.java @@ -5,9 +5,11 @@ import java.util.List; import mekanism.api.Coord4D; import mekanism.api.EnumColor; import mekanism.common.EntityBalloon; +import mekanism.common.util.MekanismUtils; import net.minecraft.block.Block; import net.minecraft.client.renderer.texture.IconRegister; import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.world.World; @@ -61,7 +63,7 @@ public class ItemBalloon extends ItemMekanism @Override public String getItemDisplayName(ItemStack stack) { - return getColor(stack).getName() + " Balloon"; + return getColor(stack).getName() + " " + MekanismUtils.localize("tooltip.balloon"); } @Override @@ -95,6 +97,12 @@ public class ItemBalloon extends ItemMekanism return false; } + /*@Override + public boolean itemInteractionForEntity(ItemStack stack, EntityPlayer player, EntityLivingBase entity) + { + return false; + }*/ + private boolean canReplace(World world, int x, int y, int z) { return world.isAirBlock(x, y, z) || Block.blocksList[world.getBlockId(x, y, z)].isBlockReplaceable(world, x, y, z); diff --git a/common/mekanism/common/multipart/MultipartMekanism.java b/common/mekanism/common/multipart/MultipartMekanism.java index 5257fb6e5..b5af4b2ac 100644 --- a/common/mekanism/common/multipart/MultipartMekanism.java +++ b/common/mekanism/common/multipart/MultipartMekanism.java @@ -20,7 +20,8 @@ public class MultipartMekanism implements IPartFactory, IPartConverter public void init() { MultiPartRegistry.registerConverter(this); - MultiPartRegistry.registerParts(this, new String[] {"mekanism:universal_cable", "mekanism:mechanical_pipe", "mekanism:pressurized_tube", "mekanism:logistical_transporter"}); + MultiPartRegistry.registerParts(this, new String[] {"mekanism:universal_cable", "mekanism:mechanical_pipe", "mekanism:pressurized_tube", "mekanism:logistical_transporter", + "mekanism:restrictive_transporter", "mekanism:diversion_transporter"}); MultipartGenerator.registerPassThroughInterface("mekanism.api.transmitters.ITransmitter"); MultipartGenerator.registerPassThroughInterface("mekanism.common.ILogisticalTransporter"); @@ -34,14 +35,31 @@ public class MultipartMekanism implements IPartFactory, IPartConverter @Override public TMultiPart createPart(String name, boolean client) { - if(name == "mekanism:universal_cable") + if(name.equals("mekanism:universal_cable")) + { return new PartUniversalCable(); - if(name == "mekanism:mechanical_pipe") + } + else if(name.equals("mekanism:mechanical_pipe")) + { return new PartMechanicalPipe(); - if(name == "mekanism:pressurized_tube") + } + else if(name.equals("mekanism:pressurized_tube")) + { return new PartPressurizedTube(); - if(name == "mekanism:logistical_transporter") + } + else if(name.equals("mekanism:logistical_transporter")) + { return new PartLogisticalTransporter(); + } + else if(name.equals("mekanism:restrictive_transporter")) + { + return new PartLogisticalTransporter(); + } + else if(name.equals("mekanism:diversion_transporter")) + { + return new PartDiversionTransporter(); + } + return null; } @@ -57,7 +75,7 @@ public class MultipartMekanism implements IPartFactory, IPartConverter if(world.getBlockId(pos.x, pos.y, pos.z) == Mekanism.transmitterID) { int meta = world.getBlockMetadata(pos.x, pos.y, pos.z); - return PartTransmitter.getPartType(TransmissionType.fromOldMeta(meta)); + return PartTransmitter.getPartType(TransmissionType.fromOldMeta(meta), meta); } return null; diff --git a/common/mekanism/common/multipart/PartDiversionTransporter.java b/common/mekanism/common/multipart/PartDiversionTransporter.java new file mode 100644 index 000000000..83ca886c9 --- /dev/null +++ b/common/mekanism/common/multipart/PartDiversionTransporter.java @@ -0,0 +1,6 @@ +package mekanism.common.multipart; + +public class PartDiversionTransporter extends PartLogisticalTransporter +{ + +} diff --git a/common/mekanism/common/multipart/PartLogisticalTransporter.java b/common/mekanism/common/multipart/PartLogisticalTransporter.java index b087bbcfd..73b89424f 100644 --- a/common/mekanism/common/multipart/PartLogisticalTransporter.java +++ b/common/mekanism/common/multipart/PartLogisticalTransporter.java @@ -1,7 +1,11 @@ package mekanism.common.multipart; +import codechicken.lib.vec.Vector3; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; import mekanism.api.transmitters.TransmissionType; import mekanism.client.render.PartTransmitterIcons; +import mekanism.client.render.RenderPartTransmitter; import net.minecraft.client.renderer.texture.IconRegister; import net.minecraft.inventory.IInventory; import net.minecraft.tileentity.TileEntity; @@ -12,11 +16,13 @@ public class PartLogisticalTransporter extends PartSidedPipe { public static PartTransmitterIcons transporterIcons; + @Override public String getType() { return "mekanism:logistical_transporter"; } + @Override public TransmissionType getTransmissionType() { return TransmissionType.ITEM; @@ -28,17 +34,27 @@ public class PartLogisticalTransporter extends PartSidedPipe transporterIcons.registerCenterIcons(register, new String[] {"LogisticalTransporter", "RestrictionTransporter", "DiversionTransporter"}); transporterIcons.registerSideIcon(register, "LogisticalTransporterSide"); } + + @Override + @SideOnly(Side.CLIENT) + public void renderDynamic(Vector3 pos, float f, int pass) + { + RenderPartTransmitter.getInstance().renderContents(this, pos); + } + @Override public Icon getCenterIcon() { return transporterIcons.getCenterIcon(0); } + @Override public Icon getSideIcon() { return transporterIcons.getSideIcon(); } + @Override public boolean isValidAcceptor(TileEntity tile, ForgeDirection side) { return tile instanceof IInventory; diff --git a/common/mekanism/common/multipart/PartSidedPipe.java b/common/mekanism/common/multipart/PartSidedPipe.java index 6e4c15347..427deb15d 100644 --- a/common/mekanism/common/multipart/PartSidedPipe.java +++ b/common/mekanism/common/multipart/PartSidedPipe.java @@ -86,7 +86,7 @@ public abstract class PartSidedPipe extends TMultiPart implements TSlottedPart, largeSides[6] = new IndexedCuboid6(6, new Cuboid6(0.25, 0.25, 0.25, 0.75, 0.75, 0.75)); } - public static TMultiPart getPartType(TransmissionType type) + public static TMultiPart getPartType(TransmissionType type, int sub) { switch(type) { @@ -97,7 +97,17 @@ public abstract class PartSidedPipe extends TMultiPart implements TSlottedPart, case GAS: return new PartPressurizedTube(); case ITEM: - return new PartLogisticalTransporter(); + { + switch(sub) + { + case 3: + return new PartLogisticalTransporter(); + case 4: + return new PartLogisticalTransporter(); + case 5: + return new PartDiversionTransporter(); + } + } default: return null; } diff --git a/common/mekanism/generators/common/MekanismGenerators.java b/common/mekanism/generators/common/MekanismGenerators.java index 70437103e..6be29534d 100644 --- a/common/mekanism/generators/common/MekanismGenerators.java +++ b/common/mekanism/generators/common/MekanismGenerators.java @@ -29,7 +29,7 @@ import cpw.mods.fml.common.network.NetworkMod; import cpw.mods.fml.common.network.NetworkRegistry; import cpw.mods.fml.common.registry.GameRegistry; -@Mod(modid = "MekanismGenerators", name = "MekanismGenerators", version = "5.6.0", dependencies = "required-after:Mekanism") +@Mod(modid = "MekanismGenerators", name = "MekanismGenerators", version = "6.0.0", dependencies = "required-after:Mekanism") @NetworkMod(clientSideRequired = true, serverSideRequired = false) public class MekanismGenerators implements IModule { @@ -40,7 +40,7 @@ public class MekanismGenerators implements IModule public static MekanismGenerators instance; /** MekanismGenerators version number */ - public static Version versionNumber = new Version(5, 6, 0); + public static Version versionNumber = new Version(6, 0, 0); //Items public static Item BioFuel; diff --git a/common/mekanism/tools/common/MekanismTools.java b/common/mekanism/tools/common/MekanismTools.java index ef5aeebd2..ed29a6a5d 100644 --- a/common/mekanism/tools/common/MekanismTools.java +++ b/common/mekanism/tools/common/MekanismTools.java @@ -32,7 +32,7 @@ import cpw.mods.fml.common.network.NetworkMod; import cpw.mods.fml.common.registry.GameRegistry; import cpw.mods.fml.common.registry.LanguageRegistry; -@Mod(modid = "MekanismTools", name = "MekanismTools", version = "5.6.0", dependencies = "required-after:Mekanism") +@Mod(modid = "MekanismTools", name = "MekanismTools", version = "6.0.0", dependencies = "required-after:Mekanism") @NetworkMod(clientSideRequired = true, serverSideRequired = false) public class MekanismTools implements IModule { @@ -40,7 +40,7 @@ public class MekanismTools implements IModule public static MekanismTools instance; /** MekanismTools version number */ - public static Version versionNumber = new Version(5, 6, 0); + public static Version versionNumber = new Version(6, 0, 0); //Enums: Tools public static EnumToolMaterial toolOBSIDIAN = EnumHelper.addToolMaterial("OBSIDIAN", 3, 2500, 20F, 10, 100); diff --git a/etc/core/mcmod.info b/etc/core/mcmod.info index 2ffb54787..9d402482f 100755 --- a/etc/core/mcmod.info +++ b/etc/core/mcmod.info @@ -3,7 +3,7 @@ "modid": "Mekanism", "name": "Mekanism", "description": "Energy, Armor, Tools, Weapons, Machines, Magic.", - "version": "5.6.0", + "version": “6.0.0”, "mcversion": "1.6.4", "updateUrl": "", "authors": [ diff --git a/etc/generators/mcmod.info b/etc/generators/mcmod.info index 22db7b9be..96dda6d70 100755 --- a/etc/generators/mcmod.info +++ b/etc/generators/mcmod.info @@ -3,7 +3,7 @@ "modid": "MekanismGenerators", "name": "MekanismGenerators", "description": "Generators module of Mekanism.", - "version": "5.6.0", + "version": “6.0.0”, "mcversion": "1.6.4", "updateUrl": "", "authors": [ diff --git a/etc/induction/logo.png b/etc/induction/logo.png deleted file mode 100644 index 9c4bc2a3b61b3daaea641daa60fd09fa398846bb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12009 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