From f177efd6c7ea4585ffb15c8c14ae97e2687c0c09 Mon Sep 17 00:00:00 2001 From: MrTJP Date: Thu, 5 Sep 2013 23:13:14 -0400 Subject: [PATCH] Lang files - Added US Localization, others should be added AND managed via PRs. - API folder should only contain things that can be included in other mods, moved APIImp to core. - Gem storage blocks - Fixed/added recipes - Optimized/recolored lamp halos --- common/mrtjp/projectred/ProjectRedCore.java | 14 +- .../projectred/{api => core}/APIImpl.java | 5 +- .../projectred/core/BasicRenderUtils.java | 41 --- common/mrtjp/projectred/core/BlockBasics.java | 1 + .../mrtjp/projectred/core/Configurator.java | 5 - common/mrtjp/projectred/core/CoreCPH.java | 5 +- .../projectred/core/CoreClientProxy.java | 14 +- .../projectred/core/ItemBlockBasics.java | 2 +- common/mrtjp/projectred/core/ItemPart.java | 3 +- common/mrtjp/projectred/core/PRColors.java | 32 +- .../projectred/core/TileAlloySmelter.java | 2 +- .../expansion/ExpansionClientProxy.java | 5 - .../mrtjp/projectred/expansion/ItemVAWT.java | 2 +- .../projectred/exploration/BlockOre.java | 15 +- .../exploration/BlockSpecialStone.java | 25 +- .../exploration/ExplorationClientProxy.java | 46 --- .../exploration/ExplorationRecipes.java | 29 ++ .../projectred/exploration/ItemBackpack.java | 4 +- .../mrtjp/projectred/illumination/ILight.java | 5 + .../illumination/IlluminationClientProxy.java | 8 - .../projectred/illumination/LampPart.java | 20 +- .../projectred/illumination/LampRenderer.java | 91 ++---- .../projectred/illumination/LanternPart.java | 13 +- .../illumination/LanternRenderer.java | 43 +-- .../LastEventBasedHaloRenderer.java | 104 ++++--- .../integration/IntegrationClientProxy.java | 5 - .../integration/IntegrationRecipes.java | 26 +- .../transmission/BundledCablePart.java | 3 +- .../transmission/FramedBundledCablePart.java | 3 +- .../transmission/FramedRedwirePart.java | 3 +- .../transmission/ItemPartFramedWire.java | 2 +- .../projectred/transmission/RedwirePart.java | 3 +- .../transmission/TransmissionClientProxy.java | 5 - resources/assets/projectred/lang/en_US.lang | 285 ++++++++++++++++++ .../blocks/machines/generatorside.png | Bin 4351 -> 0 bytes .../blocks/machines/generatorsideon.png | Bin 4376 -> 0 bytes .../storageperidot.png} | Bin 3394 -> 3189 bytes .../saw.png => blocks/ore/storageruby.png} | Bin 4080 -> 3320 bytes .../storagesapphire.png} | Bin 4310 -> 3228 bytes 39 files changed, 512 insertions(+), 357 deletions(-) rename common/mrtjp/projectred/{api => core}/APIImpl.java (90%) create mode 100644 common/mrtjp/projectred/illumination/ILight.java create mode 100755 resources/assets/projectred/lang/en_US.lang delete mode 100644 resources/assets/projectred/textures/blocks/machines/generatorside.png delete mode 100644 resources/assets/projectred/textures/blocks/machines/generatorsideon.png rename resources/assets/projectred/textures/blocks/{machines/generatortop.png => ore/storageperidot.png} (79%) rename resources/assets/projectred/textures/{items/saw.png => blocks/ore/storageruby.png} (65%) mode change 100755 => 100644 rename resources/assets/projectred/textures/blocks/{machines/generatorbottom.png => ore/storagesapphire.png} (62%) diff --git a/common/mrtjp/projectred/ProjectRedCore.java b/common/mrtjp/projectred/ProjectRedCore.java index 207412ff5..587d0a4b6 100755 --- a/common/mrtjp/projectred/ProjectRedCore.java +++ b/common/mrtjp/projectred/ProjectRedCore.java @@ -1,7 +1,8 @@ package mrtjp.projectred; -import mrtjp.projectred.api.APIImpl; +import codechicken.lib.packet.PacketCustom.CustomTinyPacketHandler; import mrtjp.projectred.api.ProjectRedAPI; +import mrtjp.projectred.core.APIImpl; import mrtjp.projectred.core.BlockBasics; import mrtjp.projectred.core.CommandDebug; import mrtjp.projectred.core.Configurator; @@ -40,7 +41,7 @@ "after:CCTurtle;" + "after:ComputerCraft;" ) -@NetworkMod(clientSideRequired = true, serverSideRequired = true) +@NetworkMod(clientSideRequired = true, serverSideRequired = true, tinyPacketHandler = CustomTinyPacketHandler.class) public class ProjectRedCore { public ProjectRedCore() { @@ -63,15 +64,6 @@ public ProjectRedCore() { @SidedProxy(clientSide = "mrtjp.projectred.core.CoreClientProxy", serverSide = "mrtjp.projectred.core.CoreProxy") public static IProxy proxy; - static { - LanguageRegistry.instance().addStringLocalization("itemGroup.core", "en_US", "Project Red: Core"); - LanguageRegistry.instance().addStringLocalization("itemGroup.trans", "en_US", "Project Red: Transmission"); - LanguageRegistry.instance().addStringLocalization("itemGroup.int", "en_US", "Project Red: Integration"); - LanguageRegistry.instance().addStringLocalization("itemGroup.ill", "en_US", "Project Red: Illumination"); - LanguageRegistry.instance().addStringLocalization("itemGroup.expansion", "en_US", "Project Red: Expansion"); - LanguageRegistry.instance().addStringLocalization("itemGroup.exploration", "en_US", "Project Red: Exploration"); - } - public static CreativeTabs tabCore = new CreativeTabs("core") { @Override public ItemStack getIconItemStack() { diff --git a/common/mrtjp/projectred/api/APIImpl.java b/common/mrtjp/projectred/core/APIImpl.java similarity index 90% rename from common/mrtjp/projectred/api/APIImpl.java rename to common/mrtjp/projectred/core/APIImpl.java index 83ab226f4..de552f456 100644 --- a/common/mrtjp/projectred/api/APIImpl.java +++ b/common/mrtjp/projectred/core/APIImpl.java @@ -1,9 +1,12 @@ -package mrtjp.projectred.api; +package mrtjp.projectred.core; import codechicken.lib.vec.BlockCoord; import codechicken.lib.vec.Rotation; import codechicken.multipart.TMultiPart; import codechicken.multipart.TileMultipart; +import mrtjp.projectred.api.IBundledEmitter; +import mrtjp.projectred.api.IBundledTile; +import mrtjp.projectred.api.ProjectRedAPI; import mrtjp.projectred.transmission.BundledCableCommons; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; diff --git a/common/mrtjp/projectred/core/BasicRenderUtils.java b/common/mrtjp/projectred/core/BasicRenderUtils.java index f2459da65..ef00e5f9e 100755 --- a/common/mrtjp/projectred/core/BasicRenderUtils.java +++ b/common/mrtjp/projectred/core/BasicRenderUtils.java @@ -43,45 +43,4 @@ public static void setFullBrightness() { public static void setFullColor() { Tessellator.instance.setColorRGBA(255, 255, 255, 255); } - - static EntityItem entityItem; - static RenderItem uniformRenderItem = new RenderItem() { - @Override - public boolean shouldBob() { - return false; - } - }; - - static { - uniformRenderItem.setRenderManager(RenderManager.instance); - entityItem = new EntityItem(null); - entityItem.hoverStart = 0; - } - - public static void renderItemUniform(ItemStack item) { - IItemRenderer customRenderer = MinecraftForgeClient.getItemRenderer(item, ENTITY); - boolean is3D = customRenderer != null && customRenderer.shouldUseRenderHelper(ENTITY, item, BLOCK_3D); - - boolean larger = false; - if (item.getItem() instanceof ItemBlock && RenderBlocks.renderItemIn3d(Block.blocksList[item.itemID].getRenderType())) { - int renderType = Block.blocksList[item.itemID].getRenderType(); - larger = !(renderType == 1 || renderType == 19 || renderType == 12 || renderType == 2); - } else if (is3D) { - larger = true; - } - - double d = 2; - double d1 = 1 / d; - if (larger) - GL11.glScaled(d, d, d); - - GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); - - entityItem.setEntityItemStack(item); - uniformRenderItem.doRenderItem(entityItem, 0, larger ? 0.09 : 0.06, 0, 0, 0); - - if (larger) - GL11.glScaled(d1, d1, d1); - } - } \ No newline at end of file diff --git a/common/mrtjp/projectred/core/BlockBasics.java b/common/mrtjp/projectred/core/BlockBasics.java index 094e684d2..0154d0eba 100644 --- a/common/mrtjp/projectred/core/BlockBasics.java +++ b/common/mrtjp/projectred/core/BlockBasics.java @@ -25,6 +25,7 @@ public class BlockBasics extends BlockContainer { public BlockBasics(int id) { super(id, new Material(Material.iron.materialMapColor)); setCreativeTab(ProjectRedExpansion.tabExpansion); + this.setUnlocalizedName("projectred.core.appliance"); setHardness(0.75f); } diff --git a/common/mrtjp/projectred/core/Configurator.java b/common/mrtjp/projectred/core/Configurator.java index c034e7087..265cca037 100755 --- a/common/mrtjp/projectred/core/Configurator.java +++ b/common/mrtjp/projectred/core/Configurator.java @@ -17,11 +17,6 @@ public class Configurator { public static final String buildnumber = "@BUILD_NUMBER@"; public static final String modName = "Project: Red"; - public static final String corePacketChannel = "PR:Core"; - public static final String integrationPacketChannel = "PR:Int"; - public static final String transmissionPacketChannel = "PR:Trans"; - public static final String expansionPacketChannel = "PR:Expan"; - /** Multipart IDs **/ public static Property part_gate; public static Property part_wire; diff --git a/common/mrtjp/projectred/core/CoreCPH.java b/common/mrtjp/projectred/core/CoreCPH.java index 8e0d7a95d..350247bb2 100644 --- a/common/mrtjp/projectred/core/CoreCPH.java +++ b/common/mrtjp/projectred/core/CoreCPH.java @@ -1,5 +1,6 @@ package mrtjp.projectred.core; +import mrtjp.projectred.ProjectRedCore; import net.minecraft.client.Minecraft; import net.minecraft.client.multiplayer.NetClientHandler; import net.minecraft.entity.player.EntityPlayer; @@ -8,7 +9,8 @@ import codechicken.lib.packet.PacketCustom.IClientPacketHandler; public class CoreCPH implements IClientPacketHandler { - + public static Object channel = ProjectRedCore.instance; + @Override public void handlePacket(PacketCustom packet, NetClientHandler nethandler, Minecraft mc) { EntityPlayer player = mc.thePlayer; @@ -17,6 +19,7 @@ public void handlePacket(PacketCustom packet, NetClientHandler nethandler, Minec switch (packet.getType()) { case CoreProxy.messengerQueue: Messenger.addMessage(packet.readDouble(), packet.readDouble(), packet.readDouble(), packet.readString()); + return; case CoreProxy.alloySmelterWatcherUpdate: TileAlloySmelter t = BasicUtils.getTileEntity(world, packet.readCoord(), TileAlloySmelter.class); if (t != null) { diff --git a/common/mrtjp/projectred/core/CoreClientProxy.java b/common/mrtjp/projectred/core/CoreClientProxy.java index 389920234..f64e05860 100644 --- a/common/mrtjp/projectred/core/CoreClientProxy.java +++ b/common/mrtjp/projectred/core/CoreClientProxy.java @@ -17,19 +17,7 @@ public class CoreClientProxy extends CoreProxy { @Override public void init() { super.init(); - for (EnumPart part : EnumPart.VALID_PARTS) { - LanguageRegistry.addName(new ItemStack(itemComponent, 1, part.meta), part.fullName); - } - - for (EnumBasics m : EnumBasics.VALID_MACHINES) { - LanguageRegistry.addName(new ItemStack(blockMachines, 1, m.meta), m.fullname); - } - - LanguageRegistry.addName(itemDrawPlate, "Draw Plate"); - LanguageRegistry.addName(itemScrewdriver, "Screwdriver"); - LanguageRegistry.addName(new ItemStack(itemWireDebugger, 1, 0), "Wire debugger"); - MinecraftForge.EVENT_BUS.register(new Messenger()); - PacketCustom.assignHandler(Configurator.corePacketChannel, 1, 32, new CoreCPH()); + PacketCustom.assignHandler(CoreCPH.channel, new CoreCPH()); } } diff --git a/common/mrtjp/projectred/core/ItemBlockBasics.java b/common/mrtjp/projectred/core/ItemBlockBasics.java index 9d7157e02..e64914156 100644 --- a/common/mrtjp/projectred/core/ItemBlockBasics.java +++ b/common/mrtjp/projectred/core/ItemBlockBasics.java @@ -30,7 +30,7 @@ public int getMetadata(int md) { */ @Override public String getUnlocalizedName(ItemStack itemstack) { - return EnumBasics.get(itemstack.getItemDamage()).unlocalname; + return getUnlocalizedName()+"."+EnumBasics.get(itemstack.getItemDamage()).unlocalname; } } diff --git a/common/mrtjp/projectred/core/ItemPart.java b/common/mrtjp/projectred/core/ItemPart.java index f35ff56a8..fd06eee54 100644 --- a/common/mrtjp/projectred/core/ItemPart.java +++ b/common/mrtjp/projectred/core/ItemPart.java @@ -18,6 +18,7 @@ public class ItemPart extends Item { public ItemPart(int par1) { super(par1); + setUnlocalizedName("projectred.core.part"); setCreativeTab(ProjectRedCore.tabCore); setHasSubtypes(true); } @@ -40,7 +41,7 @@ public void getSubItems(int id, CreativeTabs tab, List list) { */ @Override public String getUnlocalizedName(ItemStack itemstack) { - return EnumPart.get(itemstack.getItemDamage()).unlocalName; + return getUnlocalizedName()+"."+EnumPart.get(itemstack.getItemDamage()).unlocalName; } @Override diff --git a/common/mrtjp/projectred/core/PRColors.java b/common/mrtjp/projectred/core/PRColors.java index 8da85d9b5..f463134a0 100644 --- a/common/mrtjp/projectred/core/PRColors.java +++ b/common/mrtjp/projectred/core/PRColors.java @@ -1,22 +1,22 @@ package mrtjp.projectred.core; public enum PRColors { - WHITE("White", 1.0F, 1.0F, 1.0F, 0xFFFFFF), - ORANGE("Orange", 0.95F, 0.7F, 0.2F, 0xFFA100), - MAGENTA("Magenta", 0.9F, 0.5F, 0.85F, 0xFF00FF), - LIGHT_BLUE("Light Blue", 0.6F, 0.7F, 0.95F, 0xAEAEFF), - YELLOW("Yellow", 0.9F, 0.9F, 0.2F, 0xFFFF00), - LIME("Lime", 0.5F, 0.8F, 0.1F, 0xA1FF63), - PINK("Pink", 0.95F, 0.7F, 0.8F, 0xFFB9B9), - GREY("Grey", 0.3F, 0.3F, 0.3F, 0x9D9D9D), - LIGHT_GREY("Light Grey", 0.6F, 0.6F, 0.6F, 0xCBCBCB), - CYAN("Cyan", 0.3F, 0.6F, 0.7F, 0x00FFFF), - PURPLE("Purple", 0.7F, 0.4F, 0.9F, 0xAE00FF), - BLUE("Blue", 0.2F, 0.4F, 0.8F, 0x0000FF), - BROWN("Brown", 0.5F, 0.4F, 0.3F, 0xA55A00), - GREEN("Green", 0.2F, 0.8F, 0.2F, 0x00A600), - RED("Red", 0.8F, 0.3F, 0.3F, 0xFF0000), - BLACK("Black", 0.1F, 0.1F, 0.1F, 0x3B3B3B), + WHITE("White", 1.0F, 1.0F, 1.0F, 16777215), + ORANGE("Orange", 0.95F, 0.7F, 0.2F, 12608256), + MAGENTA("Magenta", 0.9F, 0.5F, 0.85F, 11868853), + LIGHT_BLUE("Light Blue", 0.6F, 0.7F, 0.95F, 7308529), + YELLOW("Yellow", 0.9F, 0.9F, 0.2F, 12566272), + LIME("Lime", 0.5F, 0.8F, 0.1F, 7074048), + PINK("Pink", 0.95F, 0.7F, 0.8F, 15812213), + GREY("Grey", 0.3F, 0.3F, 0.3F, 5460819), + LIGHT_GREY("Light Grey", 0.6F, 0.6F, 0.6F, 9671571), + CYAN("Cyan", 0.3F, 0.6F, 0.7F, 34695), + PURPLE("Purple", 0.7F, 0.4F, 0.9F, 6160576), + BLUE("Blue", 0.2F, 0.4F, 0.8F, 1250240), + BROWN("Brown", 0.5F, 0.4F, 0.3F, 5187328), + GREEN("Green", 0.2F, 0.8F, 0.2F, 558848), + RED("Red", 0.8F, 0.3F, 0.3F, 10620678), + BLACK("Black", 0.1F, 0.1F, 0.1F, 2039583), ; diff --git a/common/mrtjp/projectred/core/TileAlloySmelter.java b/common/mrtjp/projectred/core/TileAlloySmelter.java index d97c4a176..6962816d6 100644 --- a/common/mrtjp/projectred/core/TileAlloySmelter.java +++ b/common/mrtjp/projectred/core/TileAlloySmelter.java @@ -285,7 +285,7 @@ public void updateWatchers() { if (BasicUtils.isClient(worldObj)) { return; } - PacketCustom packet = new PacketCustom(Configurator.expansionPacketChannel, CoreProxy.alloySmelterWatcherUpdate); + PacketCustom packet = new PacketCustom(CoreCPH.channel, CoreProxy.alloySmelterWatcherUpdate); packet.writeCoord(xCoord, yCoord, zCoord); packet.writeShort(heat); packet.writeShort(progress); diff --git a/common/mrtjp/projectred/expansion/ExpansionClientProxy.java b/common/mrtjp/projectred/expansion/ExpansionClientProxy.java index 070ef2447..d61dd8707 100644 --- a/common/mrtjp/projectred/expansion/ExpansionClientProxy.java +++ b/common/mrtjp/projectred/expansion/ExpansionClientProxy.java @@ -10,11 +10,6 @@ public class ExpansionClientProxy extends ExpansionProxy { @Override public void init() { super.init(); - LanguageRegistry.addName(new ItemStack(itemVAWT, 1, 0), "Vertical-Axis Wind Turbine"); - - for (EnumTube t : EnumTube.VALID_TUBE) { - LanguageRegistry.addName(new ItemStack(itemPartTube, 1, t.meta), t.name); - } } @Override diff --git a/common/mrtjp/projectred/expansion/ItemVAWT.java b/common/mrtjp/projectred/expansion/ItemVAWT.java index fb5a6b2f4..adb307137 100644 --- a/common/mrtjp/projectred/expansion/ItemVAWT.java +++ b/common/mrtjp/projectred/expansion/ItemVAWT.java @@ -19,7 +19,7 @@ public ItemVAWT(int id) { maxStackSize = 1; setMaxDamage(1280); setNoRepair(); - setUnlocalizedName("projectred.items.turbine.VAWT"); + setUnlocalizedName("projectred.expansion.VAWT"); setCreativeTab(ProjectRedExpansion.tabExpansion); } diff --git a/common/mrtjp/projectred/exploration/BlockOre.java b/common/mrtjp/projectred/exploration/BlockOre.java index 61dc304a9..78288228b 100644 --- a/common/mrtjp/projectred/exploration/BlockOre.java +++ b/common/mrtjp/projectred/exploration/BlockOre.java @@ -32,16 +32,17 @@ public ArrayList getBlockDropped(World world, int x, int y, int z, in int max = type.maxDrop; if (min == max) { - ret.add(type.getDropStack(max)); + if (type.drop != null) + ret.add(type.getDropStack(max)); + else + ret.add(type.getItemStack(max)); return ret; } int count = world.rand.nextInt(fortune + max); - if (count > max) { + if (count > max) count = max; - } - if (count < min) { + if (count < min) count = min; - } dropXpOnBlockBreak(world, x, y, z, MathHelper.getRandomIntegerInRange(world.rand, type.minXP, type.maxXP)); ret.add(type.getDropStack(count)); return ret; @@ -59,6 +60,10 @@ public void registerIcons(IconRegister reg) { } } + @Override + public int damageDropped(int meta) { + return meta; + } public enum EnumOre { ORERUBY("Ruby Ore", "oreruby", 2, EnumPart.RUBY.getItemStack(), 1, 4, 1, 8), diff --git a/common/mrtjp/projectred/exploration/BlockSpecialStone.java b/common/mrtjp/projectred/exploration/BlockSpecialStone.java index 2d09a4044..86cca7a1a 100644 --- a/common/mrtjp/projectred/exploration/BlockSpecialStone.java +++ b/common/mrtjp/projectred/exploration/BlockSpecialStone.java @@ -48,17 +48,24 @@ public ArrayList getBlockDropped(World world, int x, int y, int z, in @Override public void registerIcons(IconRegister reg) { - for (EnumSpecialStone s : EnumSpecialStone.VALID_STONE) { + for (EnumSpecialStone s : EnumSpecialStone.VALID_STONE) s.loadTextures(reg); - } + } + + @Override + public int damageDropped(int meta) { + return meta; } public enum EnumSpecialStone { - MARBLE("Marble", "stonemarble", 1, 6), - MARBLEBRICK("Marble Brick", "brickmarble", 1, 6), - BASALTCOBBLE("Basalt Cobblestone", "cobblebasalt", 2.5f, 16), + MARBLE("Marble", "stonemarble", 1, 6, null), + MARBLEBRICK("Marble Brick", "brickmarble", 1, 6, null), + BASALTCOBBLE("Basalt Cobblestone", "cobblebasalt", 2.5f, 16, null), BASALT("Basalt", "stonebasalt", 2.5f, 8, BASALTCOBBLE.getItemStack()), - BASALTBRICK("Basalt Brick", "brickbasalt", 2.5f, 8), + BASALTBRICK("Basalt Brick", "brickbasalt", 2.5f, 8, null), + RUBYBLOCK("Ruby Block", "storageruby", 5.0F, 10.0F, null), + SAPPHIREBLOCK("Sapphire Block", "storagesapphire", 5.0F, 10.0F, null), + PERIDOTBLOCK("Peridot Block", "storageperidot", 5.0F, 10.0F, null), ; public final String name; @@ -70,10 +77,6 @@ public enum EnumSpecialStone { public Icon texture; public static EnumSpecialStone[] VALID_STONE = values(); - private EnumSpecialStone(String name, String unlocal, float hardness, float explosionRes) { - this(name, unlocal, hardness, explosionRes, null); - } - private EnumSpecialStone(String name, String unlocal, float hardness, float explosionRes, ItemStack drop) { this.name = name; this.unlocal = unlocal; @@ -91,7 +94,7 @@ public ItemStack getItemStack() { } public ItemStack getItemStack(int i) { - return new ItemStack(ProjectRedExploration.blockStones, 1, meta); + return new ItemStack(ProjectRedExploration.blockStones, i, meta); } } } diff --git a/common/mrtjp/projectred/exploration/ExplorationClientProxy.java b/common/mrtjp/projectred/exploration/ExplorationClientProxy.java index b137a7304..f91dc01bf 100644 --- a/common/mrtjp/projectred/exploration/ExplorationClientProxy.java +++ b/common/mrtjp/projectred/exploration/ExplorationClientProxy.java @@ -44,52 +44,6 @@ public class ExplorationClientProxy extends ExplorationProxy { @Override public void init() { super.init(); - LanguageRegistry.addName(itemWoolGin, "Wool Gin"); - - for (EnumOre o : EnumOre.VALID_ORES) { - LanguageRegistry.addName(o.getItemStack(1), o.name); - } - - for (EnumSpecialStone s : EnumSpecialStone.VALID_STONE) { - LanguageRegistry.addName(s.getItemStack(), s.name); - } - - for (EnumBackpack b : EnumBackpack.VALID_BP) { - LanguageRegistry.addName(b.getItemStack(), b.fullname); - } - - LanguageRegistry.addName(itemRubyAxe, itemRubyAxe.tool.name); - LanguageRegistry.addName(itemSapphireAxe, itemSapphireAxe.tool.name); - LanguageRegistry.addName(itemPeridotAxe, itemPeridotAxe.tool.name); - LanguageRegistry.addName(itemRubyHoe, itemRubyHoe.tool.name); - LanguageRegistry.addName(itemSapphireHoe, itemSapphireHoe.tool.name); - LanguageRegistry.addName(itemPeridotHoe, itemPeridotHoe.tool.name); - LanguageRegistry.addName(itemRubyPickaxe, itemRubyPickaxe.tool.name); - LanguageRegistry.addName(itemSapphirePickaxe, itemSapphirePickaxe.tool.name); - LanguageRegistry.addName(itemPeridotPickaxe, itemPeridotPickaxe.tool.name); - LanguageRegistry.addName(itemRubyShovel, itemRubyShovel.tool.name); - LanguageRegistry.addName(itemSapphireShovel, itemSapphireShovel.tool.name); - LanguageRegistry.addName(itemPeridotShovel, itemPeridotShovel.tool.name); - LanguageRegistry.addName(itemRubySword, itemRubySword.tool.name); - LanguageRegistry.addName(itemSapphireSword, itemSapphireSword.tool.name); - LanguageRegistry.addName(itemPeridotSword, itemPeridotSword.tool.name); - LanguageRegistry.addName(itemWoodSaw, itemWoodSaw.tool.name); - LanguageRegistry.addName(itemStoneSaw, itemStoneSaw.tool.name); - LanguageRegistry.addName(itemIronSaw, itemIronSaw.tool.name); - LanguageRegistry.addName(itemGoldSaw, itemGoldSaw.tool.name); - LanguageRegistry.addName(itemRubySaw, itemRubySaw.tool.name); - LanguageRegistry.addName(itemSapphireSaw, itemSapphireSaw.tool.name); - LanguageRegistry.addName(itemPeridotSaw, itemPeridotSaw.tool.name); - LanguageRegistry.addName(itemDiamondSaw, itemDiamondSaw.tool.name); - LanguageRegistry.addName(itemWoodSickle, itemWoodSickle.tool.name); - LanguageRegistry.addName(itemStoneSickle, itemStoneSickle.tool.name); - LanguageRegistry.addName(itemIronSickle, itemIronSickle.tool.name); - LanguageRegistry.addName(itemGoldSickle, itemGoldSickle.tool.name); - LanguageRegistry.addName(itemRubySickle, itemRubySickle.tool.name); - LanguageRegistry.addName(itemSapphireSickle, itemSapphireSickle.tool.name); - LanguageRegistry.addName(itemPeridotSickle, itemPeridotSickle.tool.name); - LanguageRegistry.addName(itemDiamondSickle, itemDiamondSickle.tool.name); - MinecraftForgeClient.registerItemRenderer(itemWoodSaw.itemID, GemSawItemRenderer.instance); MinecraftForgeClient.registerItemRenderer(itemStoneSaw.itemID, GemSawItemRenderer.instance); MinecraftForgeClient.registerItemRenderer(itemIronSaw.itemID, GemSawItemRenderer.instance); diff --git a/common/mrtjp/projectred/exploration/ExplorationRecipes.java b/common/mrtjp/projectred/exploration/ExplorationRecipes.java index 094c2e2de..2e86d608e 100644 --- a/common/mrtjp/projectred/exploration/ExplorationRecipes.java +++ b/common/mrtjp/projectred/exploration/ExplorationRecipes.java @@ -181,6 +181,35 @@ private static void initWorldRecipes() { ); /** Basalt **/ FurnaceRecipes.smelting().addSmelting(ProjectRedExploration.blockStones.blockID, EnumSpecialStone.BASALTCOBBLE.meta, EnumSpecialStone.BASALT.getItemStack(), 0); + + /** Ruby block **/ + GameRegistry.addRecipe(EnumSpecialStone.RUBYBLOCK.getItemStack(), + "xxx", + "xxx", + "xxx", + 'x', EnumPart.RUBY.getItemStack() + ); + /** Sapphire block **/ + GameRegistry.addRecipe(EnumSpecialStone.SAPPHIREBLOCK.getItemStack(), + "xxx", + "xxx", + "xxx", + 'x', EnumPart.SAPPHIRE.getItemStack() + ); + /** Peridot block **/ + GameRegistry.addRecipe(EnumSpecialStone.PERIDOTBLOCK.getItemStack(), + "xxx", + "xxx", + "xxx", + 'x', EnumPart.PERIDOT.getItemStack() + ); + + /** Ruby **/ + GameRegistry.addShapelessRecipe(EnumPart.RUBY.getItemStack(9), EnumSpecialStone.RUBYBLOCK.getItemStack()); + /** Sapphire **/ + GameRegistry.addShapelessRecipe(EnumPart.SAPPHIRE.getItemStack(9), EnumSpecialStone.SAPPHIREBLOCK.getItemStack()); + /** Peridot **/ + GameRegistry.addShapelessRecipe(EnumPart.PERIDOT.getItemStack(9), EnumSpecialStone.PERIDOTBLOCK.getItemStack()); } diff --git a/common/mrtjp/projectred/exploration/ItemBackpack.java b/common/mrtjp/projectred/exploration/ItemBackpack.java index d209df484..d10ec6aea 100644 --- a/common/mrtjp/projectred/exploration/ItemBackpack.java +++ b/common/mrtjp/projectred/exploration/ItemBackpack.java @@ -27,7 +27,7 @@ public ItemBackpack(int par1) { super(par1); hasSubtypes = true; maxStackSize = 1; - setUnlocalizedName("projectred.items.backpack"); + setUnlocalizedName("projectred.exploration.backpack"); setCreativeTab(ProjectRedExploration.tabExploration); } @@ -94,7 +94,7 @@ public void getSubItems(int id, CreativeTabs tab, List list) { @Override public String getUnlocalizedName(ItemStack itemstack) { - return EnumBackpack.get(itemstack.getItemDamage()).unlocalname; + return this.getUnlocalizedName()+"."+EnumBackpack.get(itemstack.getItemDamage()).unlocalname; } @Override diff --git a/common/mrtjp/projectred/illumination/ILight.java b/common/mrtjp/projectred/illumination/ILight.java new file mode 100644 index 000000000..3907de021 --- /dev/null +++ b/common/mrtjp/projectred/illumination/ILight.java @@ -0,0 +1,5 @@ +package mrtjp.projectred.illumination; + +public interface ILight { + public boolean isOn(); +} diff --git a/common/mrtjp/projectred/illumination/IlluminationClientProxy.java b/common/mrtjp/projectred/illumination/IlluminationClientProxy.java index 64d2d0c60..d319ca7fd 100644 --- a/common/mrtjp/projectred/illumination/IlluminationClientProxy.java +++ b/common/mrtjp/projectred/illumination/IlluminationClientProxy.java @@ -14,14 +14,6 @@ public void init() { MinecraftForgeClient.registerItemRenderer(ProjectRedIllumination.itemPartInvLantern.itemID, LanternRenderer.instance); MinecraftForgeClient.registerItemRenderer(ProjectRedIllumination.itemPartLamp.itemID, LampRenderer.instance); MinecraftForgeClient.registerItemRenderer(ProjectRedIllumination.itemPartInvLamp.itemID, LampRenderer.instance); - for (EnumLantern e : EnumLantern.values()) { - LanguageRegistry.addName(e.getItemStack(), e.fullName); - LanguageRegistry.addName(e.getInvertedItemStack(), "Inverted " + e.fullName); - } - for (EnumLamp e : EnumLamp.values()) { - LanguageRegistry.addName(e.getItemStack(), e.fullName); - LanguageRegistry.addName(e.getInvertedItemStack(), "Inverted " + e.fullName); - } MinecraftForge.EVENT_BUS.register(LastEventBasedHaloRenderer.instance); } diff --git a/common/mrtjp/projectred/illumination/LampPart.java b/common/mrtjp/projectred/illumination/LampPart.java index 7bdc58bd5..ddf72fb63 100644 --- a/common/mrtjp/projectred/illumination/LampPart.java +++ b/common/mrtjp/projectred/illumination/LampPart.java @@ -24,7 +24,7 @@ import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -public class LampPart extends JCuboidPart implements TFacePart, JNormalOcclusion, IRedstonePart { +public class LampPart extends JCuboidPart implements TFacePart, JNormalOcclusion, IRedstonePart, ILight { EnumLamp type; private boolean isInverted; @@ -130,7 +130,8 @@ public int getLightValue() { @Override @SideOnly(Side.CLIENT) public void renderStatic(Vector3 pos, LazyLightMatrix olm, int pass) { - LampRenderer.instance.renderLamp(this, null); + if (pass == 0) + LampRenderer.instance.renderLamp(this, null); } @Override @@ -160,7 +161,7 @@ public ItemStack pickItem(MovingObjectPosition hit) { @Override public Cuboid6 getBounds() { - return new Cuboid6(0, 0, 0, 1, 1, 1); + return Cuboid6.full; } @Override @@ -170,7 +171,7 @@ public boolean occlusionTest(TMultiPart npart) { @Override public int getSlotMask() { - return 1 << PartMap.CENTER.i | 1 << 0 | 1 << 1 | 1 << 2 | 1 << 3 | 1 << 4 | 1 << 5; + return 1 << 6 | 1 << 0 | 1 << 1 | 1 << 2 | 1 << 3 | 1 << 4 | 1 << 5; } @Override @@ -195,12 +196,17 @@ public int weakPowerLevel(int s) { @Override public int redstoneConductionMap() { - return 1 << PartMap.CENTER.i | 1 << 0 | 1 << 1 | 1 << 2 | 1 << 3 | 1 << 4 | 1 << 5; + return 1 << 6 | 1 << 0 | 1 << 1 | 1 << 2 | 1 << 3 | 1 << 4 | 1 << 5; } @Override public boolean solid(int arg0) { - return true; - } + return true; + } + + @Override + public boolean isOn() { + return getLightValue() == 15; + } } diff --git a/common/mrtjp/projectred/illumination/LampRenderer.java b/common/mrtjp/projectred/illumination/LampRenderer.java index 6cb7cba37..d244d878f 100644 --- a/common/mrtjp/projectred/illumination/LampRenderer.java +++ b/common/mrtjp/projectred/illumination/LampRenderer.java @@ -5,15 +5,11 @@ import mrtjp.projectred.ProjectRedIllumination; import mrtjp.projectred.core.BasicRenderUtils; import mrtjp.projectred.core.InvertX; -import mrtjp.projectred.core.PRColors; -import mrtjp.projectred.illumination.LastEventBasedHaloRenderer.HaloObject; import net.minecraft.client.renderer.RenderBlocks; -import net.minecraft.client.renderer.Tessellator; import net.minecraft.item.ItemStack; import net.minecraft.util.Icon; import net.minecraft.util.ResourceLocation; import net.minecraftforge.client.IItemRenderer; -import net.minecraftforge.client.event.RenderWorldLastEvent; import net.minecraftforge.client.model.IModelCustom; import org.lwjgl.opengl.GL11; @@ -22,91 +18,40 @@ import codechicken.lib.render.CCRenderState; import codechicken.lib.render.IUVTransformation; import codechicken.lib.render.IconTransformation; +import codechicken.lib.render.RenderUtils; import codechicken.lib.render.TextureUtils; +import codechicken.lib.vec.Cuboid6; import codechicken.lib.vec.TransformationList; import codechicken.lib.vec.Translation; public class LampRenderer implements IItemRenderer { - private Map models; - private Icon lampIcon; - private RenderBlocks render; - + public static LampRenderer instance = new LampRenderer(); - public LampRenderer() { - models = CCModel.parseObjModels(new ResourceLocation("projectred", "textures/obj/lamp.obj"), 7, new InvertX()); - for (CCModel c : models.values()) { - c.shrinkUVs(0.0005); - } - } - - private IModelCustom model; + private Icon lampIcon; - public void render() { - model.renderAll(); - } - - public void renderPart(String part) { - model.renderPart(part); - } - - public void bindTexture(LampPart lamp) { - lampIcon = lamp.getLightValue() == 15 ? lamp.type.onIcon : lamp.type.offIcon; + public Icon bindTexture(LampPart lamp) { + return lamp.getLightValue() == 15 ? lamp.type.onIcon : lamp.type.offIcon; } public void renderLamp(LampPart lamp, RenderBlocks b) { - render = b; - bindTexture(lamp); + lampIcon = b == null || b.overrideBlockTexture == null ? bindTexture(lamp) : b.overrideBlockTexture; CCRenderState.reset(); TextureUtils.bindAtlas(0); - BasicRenderUtils.setBrightnessDirect(lamp.world(), lamp.x(), lamp.y(), lamp.z()); + CCRenderState.setBrightness(lamp.world(), lamp.x(), lamp.y(), lamp.z()); renderLampBulb(lamp.x(), lamp.y(), lamp.z()); if (lamp.getLightValue() == 15 && b == null) - renderLampShade(lamp.x(), lamp.y(), lamp.z(), lamp.type.meta); - else if (lamp.getLightValue() == 0 && b == null) - LastEventBasedHaloRenderer.removeHaloObject(lamp.x(), lamp.y(), lamp.z()); - - } - - public void renderPart(CCModel cc, double x, double y, double z) { - TransformationList tl = new TransformationList(); - tl.with(new Translation(1, 0, 1)).with(new Translation(x, y, z)); - - IUVTransformation uv = null; - Icon override = render == null ? null : render.overrideBlockTexture; - if (override != null) { - uv = new IconTransformation(override); - } else { - uv = new IconTransformation(lampIcon); - } - cc.render(0, cc.verts.length, tl, uv, null); + renderLampShade(lamp.x(), lamp.y(), lamp.z(), lamp.type.meta); } - - + public void renderLampBulb(double x, double y, double z) { - renderPart(models.get("lamp"), x, y, z); + RenderUtils.renderBlock(Cuboid6.full, 0, new Translation(x, y, z), new IconTransformation(lampIcon), null); } - public void renderLampShade(final double x, final double y, final double z, final int tint) { - HaloObject r = new HaloObject((int) x, (int) y, (int) z) { - @Override - public boolean render(RenderWorldLastEvent event) { - renderPart(models.get("shade"), x, y, z); - return true; - } - - @Override - public void preRender() { - Tessellator.instance.setColorRGBA_I(PRColors.get(tint).hex, 128); - } - - @Override - public void postRender() { - } - }; - - LastEventBasedHaloRenderer.addObjectToRender(r); + public void renderLampShade(int x, int y, int z, int tint) { + Cuboid6 box = new Cuboid6(0, 0, 0, 1, 1, 1).expand(0.05D); + LastEventBasedHaloRenderer.addLight(x, y, z, tint, box); } public void renderInventory(double x, double y, double z, float scale) { @@ -114,14 +59,12 @@ public void renderInventory(double x, double y, double z, float scale) { GL11.glTranslated(x, y, z); GL11.glScalef(scale, scale, scale); TextureUtils.bindAtlas(0); - GL11.glDisable(GL11.GL_LIGHTING); CCRenderState.reset(); CCRenderState.useNormals(true); + CCRenderState.pullLightmap(); CCRenderState.startDrawing(7); - BasicRenderUtils.setFullColor(); - renderPart(models.get("lamp"), x, y, z); + renderLampBulb(x, y, z); CCRenderState.draw(); - GL11.glEnable(GL11.GL_LIGHTING); GL11.glPopMatrix(); } @@ -142,7 +85,7 @@ public void renderItem(ItemRenderType type, ItemStack item, Object... data) { lampIcon = item.getItem() == ProjectRedIllumination.itemPartInvLamp ? EnumLamp.get(item.getItemDamage()).onIcon : EnumLamp.get(item.getItemDamage()).offIcon; switch (type) { case ENTITY: - renderInventory(0f, 0f, 0f, .5f); + renderInventory(-.15f, 0f, -.15f, .50f); return; case EQUIPPED: renderInventory(0f, 0f, 0f, 1f); diff --git a/common/mrtjp/projectred/illumination/LanternPart.java b/common/mrtjp/projectred/illumination/LanternPart.java index a4ed13603..fb3ab031c 100644 --- a/common/mrtjp/projectred/illumination/LanternPart.java +++ b/common/mrtjp/projectred/illumination/LanternPart.java @@ -27,7 +27,7 @@ import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -public class LanternPart extends JCuboidPart implements TSlottedPart, JNormalOcclusion, IRedstonePart { +public class LanternPart extends JCuboidPart implements TSlottedPart, JNormalOcclusion, IRedstonePart, ILight { EnumLantern type; private boolean isInverted; @@ -93,12 +93,7 @@ public void onPartChanged(TMultiPart t){ updateNextTick = true; updateStateNextTick = true; } - - @Override - public void onRemoved() { - LastEventBasedHaloRenderer.removeHaloObject(x(), y(), z()); - } - + private boolean isBeingPowered() { return world().isBlockIndirectlyGettingPowered(x(), y(), z()); } @@ -238,4 +233,8 @@ public int weakPowerLevel(int arg0) { return 0; } + @Override + public boolean isOn() { + return getLightValue() == 15; + } } diff --git a/common/mrtjp/projectred/illumination/LanternRenderer.java b/common/mrtjp/projectred/illumination/LanternRenderer.java index c14242278..53268a42b 100644 --- a/common/mrtjp/projectred/illumination/LanternRenderer.java +++ b/common/mrtjp/projectred/illumination/LanternRenderer.java @@ -5,23 +5,21 @@ import mrtjp.projectred.ProjectRedIllumination; import mrtjp.projectred.core.BasicRenderUtils; import mrtjp.projectred.core.InvertX; -import mrtjp.projectred.core.PRColors; -import mrtjp.projectred.illumination.LastEventBasedHaloRenderer.HaloObject; import net.minecraft.client.renderer.RenderBlocks; -import net.minecraft.client.renderer.Tessellator; import net.minecraft.item.ItemStack; import net.minecraft.util.Icon; import net.minecraft.util.ResourceLocation; import net.minecraftforge.client.IItemRenderer; -import net.minecraftforge.client.event.RenderWorldLastEvent; import org.lwjgl.opengl.GL11; +import codechicken.lib.lighting.LightModel; import codechicken.lib.render.CCModel; import codechicken.lib.render.CCRenderState; import codechicken.lib.render.IUVTransformation; import codechicken.lib.render.IconTransformation; import codechicken.lib.render.TextureUtils; +import codechicken.lib.vec.Cuboid6; import codechicken.lib.vec.Rotation; import codechicken.lib.vec.TransformationList; import codechicken.lib.vec.Translation; @@ -39,6 +37,7 @@ public LanternRenderer() { models = CCModel.parseObjModels(new ResourceLocation("projectred", "textures/obj/lantern.obj"), 7, new InvertX()); for (CCModel c : models.values()) { c.apply(new Translation(.5, 0, .5)); + c.computeLighting(LightModel.standardLightModel); c.shrinkUVs(0.0005); } } @@ -50,14 +49,13 @@ public void bindTexture(LanternPart lan) { public void renderLamp(LanternPart lan, RenderBlocks b) { render = b; bindTexture(lan); - CCRenderState.reset(); TextureUtils.bindAtlas(0); + CCRenderState.reset(); BasicRenderUtils.setBrightnessDirect(lan.world(), lan.x(), lan.y(), lan.z()); + CCRenderState.useModelColours(true); renderLampBulb(lan.x(), lan.y(), lan.z(), lan.rotation); if (lan.getLightValue() == 15 && b == null) renderLampShade(lan.x(), lan.y(), lan.z(), lan.type.meta); - else if (lan.getLightValue() == 0 && b == null) - LastEventBasedHaloRenderer.removeHaloObject(lan.x(), lan.y(), lan.z()); } public void renderPart(CCModel cc, double x, double y, double z, int rot) { @@ -76,8 +74,6 @@ public void renderPart(CCModel cc, double x, double y, double z, int rot) { } public void renderLampBulb(double x, double y, double z, int rotation) { - // CCRenderState.useNormals(true); - // CCRenderState.startDrawing(7); renderPart(models.get("covertop"), x, y, z, 2); renderPart(models.get("coverbottom"), x, y, z, 2); renderPart(models.get("lamp"), x, y, z, 2); @@ -91,7 +87,6 @@ public void renderLampBulb(double x, double y, double z, int rotation) { renderPart(models.get("standside"), x, y, z, rotation); renderPart(models.get("goldringtop"), x, y, z, rotation); } - // CCRenderState.draw(); } public void renderInventory(double x, double y, double z, float scale) { @@ -109,25 +104,9 @@ public void renderInventory(double x, double y, double z, float scale) { GL11.glPopMatrix(); } - public void renderLampShade(final double x, final double y, final double z, final int tint) { - HaloObject r = new HaloObject((int) x, (int) y, (int) z) { - @Override - public boolean render(RenderWorldLastEvent event) { - renderPart(models.get("lampshade"), x, y, z, 2); - return true; - } - - @Override - public void preRender() { - Tessellator.instance.setColorRGBA_I(PRColors.get(tint).hex, 128); - } - - @Override - public void postRender() { - } - }; - - LastEventBasedHaloRenderer.addObjectToRender(r); + public void renderLampShade(int x, int y, int z, int tint) { + Cuboid6 box = new Cuboid6(0.35D, 0.25D, 0.35D, 0.65D, 0.75D, 0.65D).expand(-1/64D); + LastEventBasedHaloRenderer.addLight(x, y, z, tint, box); } @Override @@ -135,13 +114,13 @@ public void renderItem(ItemRenderType type, ItemStack item, Object... data) { lampIcon = item.getItem() == ProjectRedIllumination.itemPartInvLantern ? EnumLantern.get(item.getItemDamage()).onIcon : EnumLantern.get(item.getItemDamage()).offIcon; switch (type) { case ENTITY: - renderInventory(-.3f, 0f, -.3f, 1.4f); + renderInventory(-.25f, 0f, -.25f, 1f); return; case EQUIPPED: - renderInventory(0f, 0f, 0f, 2f); + renderInventory(-.15f, -.15f, -.15f, 2f); return; case EQUIPPED_FIRST_PERSON: - renderInventory(0f, 0f, 0f, 2f); + renderInventory(-.15f, -.15f, -.15f, 2f); return; case INVENTORY: renderInventory(0f, -.05f, 0f, 2f); diff --git a/common/mrtjp/projectred/illumination/LastEventBasedHaloRenderer.java b/common/mrtjp/projectred/illumination/LastEventBasedHaloRenderer.java index 734abf167..9823a9a3f 100644 --- a/common/mrtjp/projectred/illumination/LastEventBasedHaloRenderer.java +++ b/common/mrtjp/projectred/illumination/LastEventBasedHaloRenderer.java @@ -5,14 +5,26 @@ import java.util.List; import java.util.Set; +import mrtjp.projectred.core.BasicRenderUtils; +import mrtjp.projectred.core.BasicUtils; +import mrtjp.projectred.core.PRColors; import net.minecraft.client.Minecraft; +import net.minecraft.client.multiplayer.WorldClient; +import net.minecraft.client.renderer.Tessellator; import net.minecraft.entity.EntityLivingBase; +import net.minecraft.world.World; import net.minecraftforge.client.event.RenderWorldLastEvent; import net.minecraftforge.event.ForgeSubscribe; import org.lwjgl.opengl.GL11; import codechicken.lib.render.CCRenderState; +import codechicken.lib.render.RenderUtils; +import codechicken.lib.vec.BlockCoord; +import codechicken.lib.vec.Cuboid6; +import codechicken.lib.vec.Translation; +import codechicken.multipart.TMultiPart; +import codechicken.multipart.TileMultipart; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @@ -20,53 +32,47 @@ public class LastEventBasedHaloRenderer { public static LastEventBasedHaloRenderer instance = new LastEventBasedHaloRenderer(); - private static Set renderQueue = new HashSet(); - - public abstract static class HaloObject { - int posX; - int posY; - int posZ; - - public HaloObject(int x, int y, int z) { - posX = x; - posY = y; - posZ = z; + private static Set renderQueue = new HashSet(); + + private static class CoordCache { + int x, y, z; + int color; + Cuboid6 cube; + + public CoordCache(int x, int y, int z, int colorIndex, Cuboid6 cube) { + this.x = x; + this.y = y; + this.z = z; + this.color = colorIndex; + + this.cube = cube; } - + @Override public boolean equals(Object o) { - if (o instanceof HaloObject) { - HaloObject r = (HaloObject) o; - return posX == r.posX && posY == r.posY && posZ == r.posZ; + if (o instanceof CoordCache) { + CoordCache coord = (CoordCache) o; + return x == coord.x && y == coord.y && z == coord.z; } return false; } - public abstract void preRender(); - public abstract boolean render(RenderWorldLastEvent event); - public abstract void postRender(); + } - public static void addObjectToRender(HaloObject r) { - for (HaloObject ro : renderQueue) { - if (ro.equals(r)) { + static void addLight(int x, int y, int z, int color, Cuboid6 box) { + CoordCache cc = new CoordCache(x, y, z, color, box); + for (CoordCache c : renderQueue) { + if (cc.equals(c)) return; - } - } - renderQueue.add(r); - } - - public static void removeHaloObject(int x, int y, int z) { - for (HaloObject ro : renderQueue) { - if (ro.posX == x && ro.posY == y && ro.posZ == z) { - renderQueue.remove(ro); - break; - } } + renderQueue.add(cc); } + @ForgeSubscribe public void onRenderWorldLast(RenderWorldLastEvent event) { - List removeQueue = new ArrayList(); + List removeQueue = new ArrayList(); + Tessellator tess = Tessellator.instance; GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE); GL11.glDisable(GL11.GL_TEXTURE_2D); GL11.glEnable(GL11.GL_BLEND); @@ -80,18 +86,18 @@ public void onRenderWorldLast(RenderWorldLastEvent event) { double z = view.prevPosZ + (view.posZ - view.prevPosZ) * partials; GL11.glTranslated(-1 * x, -1 * y, -1 * z); } - + WorldClient w = event.context.theWorld; + CCRenderState.reset(); CCRenderState.startDrawing(7); - for (HaloObject r : renderQueue) { - r.preRender(); - if (!r.render(event)) { + for (CoordCache r : renderQueue) { + if (shouldRemove(w, r)) removeQueue.add(r); - } - r.postRender(); + else + renderHalo(tess, r); } CCRenderState.draw(); - + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); GL11.glEnable(GL11.GL_TEXTURE_2D); GL11.glColor3f(1, 1, 1); @@ -101,4 +107,22 @@ public void onRenderWorldLast(RenderWorldLastEvent event) { renderQueue.removeAll(removeQueue); } + + static void renderHalo(Tessellator tess, CoordCache cc) { + BasicRenderUtils.setFullBrightness(); + tess.setColorRGBA_I(PRColors.VALID_COLORS[cc.color].hex, 128); + RenderUtils.renderBlock(cc.cube, 0, new Translation(cc.x, cc.y, cc.z), null, null); + } + + static boolean shouldRemove(World w, CoordCache cc) { + TileMultipart t = BasicUtils.getMultipartTile(w, new BlockCoord(cc.x, cc.y, cc.z)); + if (t != null) { + TMultiPart tp = t.partMap(6); + if (tp instanceof ILight) { + return !((ILight)tp).isOn(); + } + } + return true; + } + } diff --git a/common/mrtjp/projectred/integration/IntegrationClientProxy.java b/common/mrtjp/projectred/integration/IntegrationClientProxy.java index d839b7274..419474643 100644 --- a/common/mrtjp/projectred/integration/IntegrationClientProxy.java +++ b/common/mrtjp/projectred/integration/IntegrationClientProxy.java @@ -17,10 +17,5 @@ public void preinit() { public void init() { super.init(); MinecraftForgeClient.registerItemRenderer(ProjectRedIntegration.itemPartGate.itemID, GateItemRenderer.instance); - - for (EnumGate g : EnumGate.VALID_GATES) - if(g.implemented()) - LanguageRegistry.addName(g.getItemStack(), g.name); - } } diff --git a/common/mrtjp/projectred/integration/IntegrationRecipes.java b/common/mrtjp/projectred/integration/IntegrationRecipes.java index 868a4a8b7..df847d4ca 100644 --- a/common/mrtjp/projectred/integration/IntegrationRecipes.java +++ b/common/mrtjp/projectred/integration/IntegrationRecipes.java @@ -51,9 +51,9 @@ private static void initGateRecipes() { /** RS Latch **/ GameRegistry.addRecipe(EnumGate.RSLatch.getItemStack(), - "WWA", - "CPC", - "AWW", + "ACW", + "WPW", + "WCA", 'W', EnumPart.CONDUCTIVEPLATE.getItemStack(), 'A', EnumPart.ANODE.getItemStack(), 'C', EnumPart.CATHODE.getItemStack(), @@ -73,9 +73,9 @@ private static void initGateRecipes() { /** Transparent Latch **/ GameRegistry.addRecipe(EnumGate.TransparentLatch.getItemStack(), - "CAW", - "AAA", - "AWP", + "ACW", + "CCC", + "CWP", 'C', EnumPart.CATHODE.getItemStack(), 'A', EnumPart.ANODE.getItemStack(), 'P', EnumPart.PLATE.getItemStack(), @@ -171,9 +171,9 @@ private static void initGateRecipes() { /** Counter Gate **/ GameRegistry.addRecipe(EnumGate.Counter.getItemStack(), - "PWP", - "CTC", - "PWP", + "PCP", + "WWT", + "PCP", 'P', EnumPart.PLATE.getItemStack(), 'W', EnumPart.CONDUCTIVEPLATE.getItemStack(), 'C', EnumPart.CATHODE.getItemStack(), @@ -300,12 +300,12 @@ private static void initGateRecipes() { /** Comparator **/ GameRegistry.addRecipe(EnumGate.Comparator.getItemStack(), - "QCQ", - "WWW", + "WCW", + "QWQ", "PWP", - 'Q', Item.netherQuartz, - 'C', EnumPart.CATHODE.getItemStack(), 'W', EnumPart.CONDUCTIVEPLATE.getItemStack(), + 'C', EnumPart.CATHODE.getItemStack(), + 'Q', Item.netherQuartz, 'P', EnumPart.PLATE.getItemStack() ); diff --git a/common/mrtjp/projectred/transmission/BundledCablePart.java b/common/mrtjp/projectred/transmission/BundledCablePart.java index 03d287434..8272d03eb 100644 --- a/common/mrtjp/projectred/transmission/BundledCablePart.java +++ b/common/mrtjp/projectred/transmission/BundledCablePart.java @@ -9,6 +9,7 @@ import mrtjp.projectred.api.IConnectable; import mrtjp.projectred.core.BasicUtils; import mrtjp.projectred.core.Configurator; +import mrtjp.projectred.core.CoreCPH; import mrtjp.projectred.core.CoreProxy; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.nbt.NBTTagCompound; @@ -193,7 +194,7 @@ protected boolean test(EntityPlayer player) { if (s == "") s = "off"; - PacketCustom packet = new PacketCustom(Configurator.corePacketChannel, CoreProxy.messengerQueue); + PacketCustom packet = new PacketCustom(CoreCPH.channel, CoreProxy.messengerQueue); packet.writeDouble(x() + 0.0D); packet.writeDouble(y() + 0.5D); packet.writeDouble(z() + 0.0D); diff --git a/common/mrtjp/projectred/transmission/FramedBundledCablePart.java b/common/mrtjp/projectred/transmission/FramedBundledCablePart.java index 2319c1bc0..5d1bcefee 100644 --- a/common/mrtjp/projectred/transmission/FramedBundledCablePart.java +++ b/common/mrtjp/projectred/transmission/FramedBundledCablePart.java @@ -9,6 +9,7 @@ import mrtjp.projectred.api.IConnectable; import mrtjp.projectred.core.BasicUtils; import mrtjp.projectred.core.Configurator; +import mrtjp.projectred.core.CoreCPH; import mrtjp.projectred.core.CoreProxy; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.nbt.NBTTagCompound; @@ -126,7 +127,7 @@ protected boolean test(EntityPlayer player, MovingObjectPosition hit) { if (s == "") { s = "off"; } - PacketCustom packet = new PacketCustom(Configurator.corePacketChannel, CoreProxy.messengerQueue); + PacketCustom packet = new PacketCustom(CoreCPH.channel, CoreProxy.messengerQueue); packet.writeDouble(x() + 0.0D); packet.writeDouble(y() + 0.5D); packet.writeDouble(z() + 0.0D); diff --git a/common/mrtjp/projectred/transmission/FramedRedwirePart.java b/common/mrtjp/projectred/transmission/FramedRedwirePart.java index 92d35ac4e..a3126f964 100644 --- a/common/mrtjp/projectred/transmission/FramedRedwirePart.java +++ b/common/mrtjp/projectred/transmission/FramedRedwirePart.java @@ -3,6 +3,7 @@ import mrtjp.projectred.api.IConnectable; import mrtjp.projectred.core.BasicUtils; import mrtjp.projectred.core.Configurator; +import mrtjp.projectred.core.CoreCPH; import mrtjp.projectred.core.CoreProxy; import mrtjp.projectred.core.Messenger; import net.minecraft.entity.player.EntityPlayer; @@ -209,7 +210,7 @@ protected boolean test(EntityPlayer player, MovingObjectPosition hit) { if (BasicUtils.isClient(world())) { Messenger.addMessage(x() + 0, y() + .5f, z() + 0, "/#f/#c[c] = " + getRedwireSignal()); } else { - PacketCustom packet = new PacketCustom(Configurator.corePacketChannel, CoreProxy.messengerQueue); + PacketCustom packet = new PacketCustom(CoreCPH.channel, CoreProxy.messengerQueue); packet.writeDouble(x() + 0.0D); packet.writeDouble(y() + 0.5D); packet.writeDouble(z() + 0.0D); diff --git a/common/mrtjp/projectred/transmission/ItemPartFramedWire.java b/common/mrtjp/projectred/transmission/ItemPartFramedWire.java index fd189dd4d..35f4f113b 100644 --- a/common/mrtjp/projectred/transmission/ItemPartFramedWire.java +++ b/common/mrtjp/projectred/transmission/ItemPartFramedWire.java @@ -54,7 +54,7 @@ public void getSubItems(int id, CreativeTabs tab, List list) { @Override public String getUnlocalizedName(ItemStack stack) { - return super.getUnlocalizedName() + ".jac|" + stack.getItemDamage(); + return super.getUnlocalizedName() + "|" + stack.getItemDamage(); } @Override diff --git a/common/mrtjp/projectred/transmission/RedwirePart.java b/common/mrtjp/projectred/transmission/RedwirePart.java index 188475d3b..48772b58c 100755 --- a/common/mrtjp/projectred/transmission/RedwirePart.java +++ b/common/mrtjp/projectred/transmission/RedwirePart.java @@ -3,6 +3,7 @@ import mrtjp.projectred.api.IConnectable; import mrtjp.projectred.core.BasicUtils; import mrtjp.projectred.core.Configurator; +import mrtjp.projectred.core.CoreCPH; import mrtjp.projectred.core.CoreProxy; import mrtjp.projectred.core.Messenger; import net.minecraft.block.Block; @@ -260,7 +261,7 @@ protected boolean test(EntityPlayer player) { if (BasicUtils.isClient(world())) { Messenger.addMessage(x() + 0, y() + .5f, z() + 0, "/#f/#c[c] = " + getRedwireSignal()); } else { - PacketCustom packet = new PacketCustom(Configurator.corePacketChannel, CoreProxy.messengerQueue); + PacketCustom packet = new PacketCustom(CoreCPH.channel, CoreProxy.messengerQueue); packet.writeDouble(x() + 0.0D); packet.writeDouble(y() + 0.5D); packet.writeDouble(z() + 0.0D); diff --git a/common/mrtjp/projectred/transmission/TransmissionClientProxy.java b/common/mrtjp/projectred/transmission/TransmissionClientProxy.java index c94cc69f9..41df3b80b 100644 --- a/common/mrtjp/projectred/transmission/TransmissionClientProxy.java +++ b/common/mrtjp/projectred/transmission/TransmissionClientProxy.java @@ -11,11 +11,6 @@ public class TransmissionClientProxy extends TransmissionProxy { @Override public void init() { super.init(); - for (EnumWire w : EnumWire.VALID_WIRE) { - LanguageRegistry.addName(w.getItemStack(), w.name); - if (w.hasFramedForm()) - LanguageRegistry.addName(w.getFramedItemStack(), "Framed " + w.name); - } MinecraftForgeClient.registerItemRenderer(itemPartWire.itemID, WireItemRenderer.instance); MinecraftForgeClient.registerItemRenderer(itemPartFramedWire.itemID, FramedWireItemRenderer.instance); MicroMaterialRegistry.registerHighlightRenderer(new JacketedHighlightRenderer()); diff --git a/resources/assets/projectred/lang/en_US.lang b/resources/assets/projectred/lang/en_US.lang new file mode 100755 index 000000000..899c274d0 --- /dev/null +++ b/resources/assets/projectred/lang/en_US.lang @@ -0,0 +1,285 @@ +itemGroup.core=Project Red: Core + +item.projectred.core.part.partplate.name=Circuit Plate +item.projectred.core.part.partconductiveplate.name=Conductive Plate +item.projectred.core.part.partwiredplate.name=Wired Plate +item.projectred.core.part.partbundledplate.name=Bundled Plate +item.projectred.core.part.partanode.name=Anode +item.projectred.core.part.partcathode.name=Cathode +item.projectred.core.part.partpointer.name=Pointer +item.projectred.core.part.partsiliconchip.name=Silicon Chip +item.projectred.core.part.partenergizedsiliconchip.name=Energized Silicon Chip +item.projectred.core.part.partplatformedplate.name=Platformed Plate +item.projectred.core.part.partredingot.name=Red Alloy Ingot +item.projectred.core.part.partboule.name=Silicon Boule +item.projectred.core.part.partsilicon.name=Silicon +item.projectred.core.part.partinfusedsilicon.name=Infused Silicon +item.projectred.core.part.partenergizedsilicon.name=Energized Silicon +item.projectred.core.part.partmotor.name=Motor +item.projectred.core.part.partcoppercoil.name=Copper Coil +item.projectred.core.part.partironcoil.name=Iron Coil +item.projectred.core.part.partgoldcoil.name=Golden Coil +item.projectred.core.part.partwhitedust.name=White Illumar +item.projectred.core.part.partorangedust.name=Orange Illumar +item.projectred.core.part.partmagentadust.name=Magenta Illumar +item.projectred.core.part.partlightbluedust.name=Light Blue Illumar +item.projectred.core.part.partyellowdust.name=Yellow Illumar +item.projectred.core.part.partlimedust.name=Lime Illumar +item.projectred.core.part.partpinkdust.name=Pink Illumar +item.projectred.core.part.partgreydust.name=Grey Illumar +item.projectred.core.part.partlightgreydust.name=Light Grey Illumar +item.projectred.core.part.partcyandust.name=Cyan Illumar +item.projectred.core.part.partpurpledust.name=Purple Illumar +item.projectred.core.part.partbluedust.name=Blue Illumar +item.projectred.core.part.partbrowndust.name=Brown Illumar +item.projectred.core.part.partgreendust.name=Green Illumar +item.projectred.core.part.partreddust.name=Red Illumar +item.projectred.core.part.partblackdust.name=Black Illumar +item.projectred.core.part.partcloth.name=Woven Cloth +item.projectred.core.part.partsail.name=Sail +item.projectred.core.part.gemruby.name=Ruby +item.projectred.core.part.gemsapphire.name=Sapphire +item.projectred.core.part.gemperidot.name=Peridot + +tile.projectred.core.appliance.machinealloy.name=Alloy Smelter + +item.projectred.core.drawplate.name=Draw Plate +item.projectred.core.wiredebugger.name=Wire Debugger +item.projectred.core.screwdriver.name=Screwdriver + + + + +itemGroup.expansion=Project Red: Expansion + +item.projectred.expansion.VAWT.name=Vertical Axis Wind Turbine +item.projectred.expansion.ptube|0.name=Pressurized Tube + + + + +itemGroup.exploration=Project Red: Exploration + +tile.projectred.exploration.ore.oreruby.name=Ruby Ore +tile.projectred.exploration.ore.oresapphire.name=Sapphire Ore +tile.projectred.exploration.ore.oreperidot.name=Peridot Ore +tile.projectred.exploration.stone.stonemarble.name=Marble +tile.projectred.exploration.stone.brickmarble.name=Marble Brick +tile.projectred.exploration.stone.cobblebasalt.name=Basalt Cobblestone +tile.projectred.exploration.stone.stonebasalt.name=Basalt +tile.projectred.exploration.stone.brickbasalt.name=Basalt Brick +tile.projectred.exploration.stone.storageruby.name=Block of Ruby +tile.projectred.exploration.stone.storagesapphire.name=Block of Sapphire +tile.projectred.exploration.stone.storageperidot.name=Block of Peridot +item.projectred.exploration.woolgin.name=Wool Gin +item.projectred.exploration.backpack.bpwhite.name=White Backpack +item.projectred.exploration.backpack.bporange.name=Orange Backpack +item.projectred.exploration.backpack.bpmagenta.name=Magenta Backpack +item.projectred.exploration.backpack.bplightblue.name=Light Blue Backpack +item.projectred.exploration.backpack.bpyellow.name=Yellow Backpack +item.projectred.exploration.backpack.bplime.name=Lime Backpack +item.projectred.exploration.backpack.bppink.name=Pink Backpack +item.projectred.exploration.backpack.bpgrey.name=Grey Backpack +item.projectred.exploration.backpack.bplightgrey.name=Light Grey Backpack +item.projectred.exploration.backpack.bpcyan.name=Cyan Backpack +item.projectred.exploration.backpack.bppurple.name=Purple Backpack +item.projectred.exploration.backpack.bpblue.name=Blue Backpack +item.projectred.exploration.backpack.bpbrown.name=Brown Backpack +item.projectred.exploration.backpack.bpgreen.name=Green Backpack +item.projectred.exploration.backpack.bpred.name=Red Backpack +item.projectred.exploration.backpack.bpblack.name=Black Backpack +item.projectred.exploration.axeruby.name=Ruby Axe +item.projectred.exploration.axesapphire.name=Sapphire Axe +item.projectred.exploration.axeperidot.name=Peridot Axe +item.projectred.exploration.hoeruby.name=Ruby Hoe +item.projectred.exploration.hoesapphire.name=Sapphire Hoe +item.projectred.exploration.hoeperidot.name=Peridot Hoe +item.projectred.exploration.pickaxeruby.name=Ruby Pickaxe +item.projectred.exploration.pickaxesapphire.name=Sapphire Pickaxe +item.projectred.exploration.pickaxeperidot.name=Peridot Pickaxe +item.projectred.exploration.shovelruby.name=Ruby Shovel +item.projectred.exploration.shovelsapphire.name=Sapphire Shovel +item.projectred.exploration.shovelperidot.name=Peridot Shovel +item.projectred.exploration.swordruby.name=Ruby Sword +item.projectred.exploration.swordsapphire.name=Sapphire Sword +item.projectred.exploration.swordperidot.name=Peridot Sword +item.projectred.exploration.sawwood.name=Wooden Saw +item.projectred.exploration.sawstone.name=Stone Saw +item.projectred.exploration.sawiron.name=Iron Saw +item.projectred.exploration.sawgold.name=Golden Saw +item.projectred.exploration.sawruby.name=Ruby Saw +item.projectred.exploration.sawsapphire.name=Sapphire Saw +item.projectred.exploration.sawperidot.name=Peridot Saw +item.projectred.exploration.sawdiamond.name=Diamond Saw +item.projectred.exploration.sicklewood.name=Wooden Sickle +item.projectred.exploration.sicklestone.name=Stone Sickle +item.projectred.exploration.sickleiron.name=Iron Sickle +item.projectred.exploration.sicklegold.name=Golden Sickle +item.projectred.exploration.sickleruby.name=Ruby Sickle +item.projectred.exploration.sicklesapphire.name=Sapphire Sickle +item.projectred.exploration.sickleperidot.name=Peridot Sickle +item.projectred.exploration.sicklediamond.name=Diamond Sickle + + + + + +itemGroup.ill=Project Red: Illumination + +item.projectred.illumination.lantern|0.name=White Lantern +item.projectred.illumination.lantern|1.name=Orange Lantern +item.projectred.illumination.lantern|2.name=Magenta Lantern +item.projectred.illumination.lantern|3.name=Light Blue Lantern +item.projectred.illumination.lantern|4.name=Yellow Lantern +item.projectred.illumination.lantern|5.name=Lime Lantern +item.projectred.illumination.lantern|6.name=Pink Lantern +item.projectred.illumination.lantern|7.name=Grey Lantern +item.projectred.illumination.lantern|8.name=Light Grey Lantern +item.projectred.illumination.lantern|9.name=Cyan Lantern +item.projectred.illumination.lantern|10.name=Purple Lantern +item.projectred.illumination.lantern|11.name=Blue Lantern +item.projectred.illumination.lantern|12.name=Brown Lantern +item.projectred.illumination.lantern|13.name=Green Lantern +item.projectred.illumination.lantern|14.name=Red Lantern +item.projectred.illumination.lantern|15.name=Black Lantern +item.projectred.illumination.lanterninv.|0.name=Inverted White Lantern +item.projectred.illumination.lanterninv.|1.name=Inverted Orange Lantern +item.projectred.illumination.lanterninv.|2.name=Inverted Magenta Lantern +item.projectred.illumination.lanterninv.|3.name=Inverted Light Blue Lantern +item.projectred.illumination.lanterninv.|4.name=Inverted Yellow Lantern +item.projectred.illumination.lanterninv.|5.name=Inverted Lime Lantern +item.projectred.illumination.lanterninv.|6.name=Inverted Pink Lantern +item.projectred.illumination.lanterninv.|7.name=Inverted Grey Lantern +item.projectred.illumination.lanterninv.|8.name=Inverted Light Grey Lantern +item.projectred.illumination.lanterninv.|9.name=Inverted Cyan Lantern +item.projectred.illumination.lanterninv.|10.name=Inverted Purple Lantern +item.projectred.illumination.lanterninv.|11.name=Inverted Blue Lantern +item.projectred.illumination.lanterninv.|12.name=Inverted Brown Lantern +item.projectred.illumination.lanterninv.|13.name=Inverted Green Lantern +item.projectred.illumination.lanterninv.|14.name=Inverted Red Lantern +item.projectred.illumination.lanterninv.|15.name=Inverted Black Lantern +item.projectred.illumination.lamp|0.name=White Lamp +item.projectred.illumination.lamp|1.name=Orange Lamp +item.projectred.illumination.lamp|2.name=Magenta Lamp +item.projectred.illumination.lamp|3.name=Light Blue Lamp +item.projectred.illumination.lamp|4.name=Yellow Lamp +item.projectred.illumination.lamp|5.name=Lime Lamp +item.projectred.illumination.lamp|6.name=Pink Lamp +item.projectred.illumination.lamp|7.name=Grey Lamp +item.projectred.illumination.lamp|8.name=Light Grey Lamp +item.projectred.illumination.lamp|9.name=Cyan Lamp +item.projectred.illumination.lamp|10.name=Purple Lamp +item.projectred.illumination.lamp|11.name=Blue Lamp +item.projectred.illumination.lamp|12.name=Brown Lamp +item.projectred.illumination.lamp|13.name=Green Lamp +item.projectred.illumination.lamp|14.name=Red Lamp +item.projectred.illumination.lamp|15.name=Black Lamp +item.projectred.illumination.lampinv.|0.name=Inverted White Lamp +item.projectred.illumination.lampinv.|1.name=Inverted Orange Lamp +item.projectred.illumination.lampinv.|2.name=Inverted Magenta Lamp +item.projectred.illumination.lampinv.|3.name=Inverted Light Blue Lamp +item.projectred.illumination.lampinv.|4.name=Inverted Yellow Lamp +item.projectred.illumination.lampinv.|5.name=Inverted Lime Lamp +item.projectred.illumination.lampinv.|6.name=Inverted Pink Lamp +item.projectred.illumination.lampinv.|7.name=Inverted Grey Lamp +item.projectred.illumination.lampinv.|8.name=Inverted Light Grey Lamp +item.projectred.illumination.lampinv.|9.name=Inverted Cyan Lamp +item.projectred.illumination.lampinv.|10.name=Inverted Purple Lamp +item.projectred.illumination.lampinv.|11.name=Inverted Blue Lamp +item.projectred.illumination.lampinv.|12.name=Inverted Brown Lamp +item.projectred.illumination.lampinv.|13.name=Inverted Green Lamp +item.projectred.illumination.lampinv.|14.name=Inverted Red Lamp +item.projectred.illumination.lampinv.|15.name=Inverted Black Lamp + + + + + +itemGroup.int=Project Red: Integration + +item.projectred.integration.gate|0.name=OR Gate +item.projectred.integration.gate|1.name=NOR Gate +item.projectred.integration.gate|2.name=NOT Gate +item.projectred.integration.gate|3.name=AND Gate +item.projectred.integration.gate|4.name=NAND Gate +item.projectred.integration.gate|5.name=XOR Gate +item.projectred.integration.gate|6.name=XNOR Gate +item.projectred.integration.gate|7.name=Buffer Gate +item.projectred.integration.gate|8.name=Multiplexer +item.projectred.integration.gate|9.name=Pulse Former +item.projectred.integration.gate|10.name=Repeater +item.projectred.integration.gate|11.name=Randomizer +item.projectred.integration.gate|12.name=RS Latch +item.projectred.integration.gate|13.name=Toggle Latch +item.projectred.integration.gate|14.name=Transparent Latch +item.projectred.integration.gate|15.name=Light Sensor +item.projectred.integration.gate|16.name=Rain Sensor +item.projectred.integration.gate|17.name=Timer +item.projectred.integration.gate|18.name=Sequencer +item.projectred.integration.gate|19.name=Counter +item.projectred.integration.gate|20.name=State Cell +item.projectred.integration.gate|21.name=Synchronizer +item.projectred.integration.gate|22.name=Bus Transceiver +item.projectred.integration.gate|23.name=Null Cell +item.projectred.integration.gate|24.name=Invert Cell +item.projectred.integration.gate|25.name=Buffer Cell +item.projectred.integration.gate|26.name=Comparator +item.projectred.integration.gate|27.name=AND Cell + + + + +itemGroup.trans=Project Red: Transmission + +item.projectred.transmission.wire|0.name=Red Alloy Wire +item.projectred.transmission.wire|1.name=White Insulated Wire +item.projectred.transmission.wire|2.name=Orange Insulated Wire +item.projectred.transmission.wire|3.name=Magenta Insulated Wire +item.projectred.transmission.wire|4.name=Light Blue Insulated Wire +item.projectred.transmission.wire|5.name=Yellow Insulated Wire +item.projectred.transmission.wire|6.name=Lime Insulated Wire +item.projectred.transmission.wire|7.name=Pink Insulated Wire +item.projectred.transmission.wire|8.name=Grey Insulated Wire +item.projectred.transmission.wire|9.name=Light Grey Insulated Wire +item.projectred.transmission.wire|10.name=Cyan Insulated Wire +item.projectred.transmission.wire|11.name=Purple Insulated Wire +item.projectred.transmission.wire|12.name=Blue Insulated Wire +item.projectred.transmission.wire|13.name=Brown Insulated Wire +item.projectred.transmission.wire|14.name=Green Insulated Wire +item.projectred.transmission.wire|15.name=Red Insulated Wire +item.projectred.transmission.wire|16.name=Black Insulated Wire +item.projectred.transmission.wire|17.name=Bundled Cable +item.projectred.transmission.wire|18.name=White Bundled Cable +item.projectred.transmission.wire|19.name=Orange Bundled Cable +item.projectred.transmission.wire|20.name=Magenta Bundled Cable +item.projectred.transmission.wire|21.name=Light Blue Bundled Cable +item.projectred.transmission.wire|22.name=Yellow Bundled Cable +item.projectred.transmission.wire|23.name=Lime Bundled Cable +item.projectred.transmission.wire|24.name=Pink Bundled Cable +item.projectred.transmission.wire|25.name=Grey Bundled Cable +item.projectred.transmission.wire|26.name=Light Grey Bundled Cable +item.projectred.transmission.wire|27.name=Cyan Bundled Cable +item.projectred.transmission.wire|28.name=Purple Bundled Cable +item.projectred.transmission.wire|29.name=Blue Bundled Cable +item.projectred.transmission.wire|30.name=Brown Bundled Cable +item.projectred.transmission.wire|31.name=Green Bundled Cable +item.projectred.transmission.wire|32.name=Red Bundled Cable +item.projectred.transmission.wire|33.name=Black Bundled Cable +item.projectred.transmission.framewire|0.name=Framed Red Alloy Wire +item.projectred.transmission.framewire|1.name=Framed White Insulated Wire +item.projectred.transmission.framewire|2.name=Framed Orange Insulated Wire +item.projectred.transmission.framewire|3.name=Framed Magenta Insulated Wire +item.projectred.transmission.framewire|4.name=Framed Light Blue Insulated Wire +item.projectred.transmission.framewire|5.name=Framed Yellow Insulated Wire +item.projectred.transmission.framewire|6.name=Framed Lime Insulated Wire +item.projectred.transmission.framewire|7.name=Framed Pink Insulated Wire +item.projectred.transmission.framewire|8.name=Framed Grey Insulated Wire +item.projectred.transmission.framewire|9.name=Framed Light Grey Insulated Wire +item.projectred.transmission.framewire|10.name=Framed Cyan Insulated Wire +item.projectred.transmission.framewire|11.name=Framed Purple Insulated Wire +item.projectred.transmission.framewire|12.name=Framed Blue Insulated Wire +item.projectred.transmission.framewire|13.name=Framed Brown Insulated Wire +item.projectred.transmission.framewire|14.name=Framed Green Insulated Wire +item.projectred.transmission.framewire|15.name=Framed Red Insulated Wire +item.projectred.transmission.framewire|16.name=Framed Black Insulated Wire +item.projectred.transmission.framewire|17.name=Framed Bundled Cable diff --git a/resources/assets/projectred/textures/blocks/machines/generatorside.png b/resources/assets/projectred/textures/blocks/machines/generatorside.png deleted file mode 100644 index c46385a5da72b265afe949049f7926622d57e1b0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4351 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 a5dn7W99Qa6e!G diff --git a/resources/assets/projectred/textures/blocks/machines/generatortop.png b/resources/assets/projectred/textures/blocks/ore/storageperidot.png similarity index 79% rename from resources/assets/projectred/textures/blocks/machines/generatortop.png rename to resources/assets/projectred/textures/blocks/ore/storageperidot.png index 7704e0b23b6449a9013577a6daef7ce3354bbc09..571fb208843cf2d0018d7fbe604e7a688a79f87e 100644 GIT binary patch delta 464 zcmV;>0Wbc-8ub{ED+>z~000XU0RWnu7_l~q3V#8hNkl1ah7ODkN z0VLnix~FpO(^3IMwIFAA5ajP6r2)i_PRki*?^ek8e1{<9+7N5RAZHA5CXn(Ja{j25 zK!3ayq`KhRnGjU$Ye1n(sxyYT58P0hK`L{~TS4kil)vVGXTmB}pj)sbWAprvX3Xxd zHDtqYR%ldUM=aZ0GSFLb^Z6shjR`ML4ak}m?<=rE2KyUG{aI(3bCdg^6*IHHVIn&^ z0;p{XsBIZ+R^Z0jp_ZqR(vX(Yg^(XjK!0_iA&KEiLb)-WJFqbYG+zD#Ojjy1#@Z2Q z0V;qLdi-(m4!Qb(T)YwDud`=$p$|4;OLoMGMZUwKsBIz5FUai= delta 671 zcmV;Q0$~017{VHmD+>;*000iF0gmj%{INEP3V#A^NklZ1U5Qd-rn%N!i z+Q?20u|SC;%Ls);;=+M5znmWcTw)~$8zJLGyJLZOyEik_)7_QBW)|w$s#aCK@AInb z>uYh&F_qSuoHL~qwAN^?QA&|gVjM?A1f|rm-x^~$IXPiAo1wMF7(+^l7$a3xF`v)T zT7UEO^hDQnhzO+=N-5-=u>f^lbAEn~h+vEX;O_R8?$amyc8k)Q7nhgEsWC=|VPLo0 zVM{59$Z-P^;m;56`DsyjRb{lmsyJ@e_dNUdEyfszVPL!6;=RX;2svlQab!N9qm<(H zn|J(^605!kz&Xc7RUsn87zrT|LLkP727gE?QA%NT^E*w`5MyM$Ub9-QczAfAZCm=j zC+Ez^oA>m6|DVVJN-6%hyW_`GMU0WnW<%Syc<%`z(6%jY+cJ(L*Ym<=v!Q7kthH!s zEzUWNQampQVZ8U`oDmVG6Q`Bm)e-x}EfGO$tvPTYKw-b%A3y%TCi`ktFiJ5D1AjSZ z^fVzC;qP>CVX;^o?VR9hng(MG_oE{N-h0Mz#44pQ#_-L{m;CzI9n0r4PESt}5kd$6 zG)=?B#Rb+{e(NjdO@sFy5jlY5oFnJV$=9!`s*0R5i^YPvu9-law0idHieVUzG+GhC zdrwM#s4(eJ5&f%AKyO@0OGxWw|VNhLjV8(00>D%PDHLk FV1laEM^^v< diff --git a/resources/assets/projectred/textures/items/saw.png b/resources/assets/projectred/textures/blocks/ore/storageruby.png old mode 100755 new mode 100644 similarity index 65% rename from resources/assets/projectred/textures/items/saw.png rename to resources/assets/projectred/textures/blocks/ore/storageruby.png index c1dde7168a5cbcecc0289050780437db399995a2..11652ea5f4e3fd1c8ddc4358cab4ff37597855f9 GIT binary patch delta 637 zcmV-@0)qYUANUzIiBL{Q4GJ0x0000DNk~Le0000G0000G2nGNE03Y-JVE_OC32;bR za{vGf6951U69E94oEWh-i3)!LBS}O-RCwB4lU;9=MHq&!*UabkCyCpS?T0ZY6sdGs zX;F(^7Ps9}u$mUyQZO-kV2mDlMxu$)A9;DeEL0EfOeUH8n&-La89pGmL~xzp2EjFg zs{{v4E7#V!mI&S;_&z}fUG!F$9Fe?7^0WVGhvaTsM|?UuQoN#iMfH^8v_Wpq z0jmT@B)@Ft$4y5~hZK*go;JvHiZil9lFRc7MkL21zae`{@uWc>k$pgRkL;M@8P%6m z&nVs}zX7Zgyi0OI@;QISSM8P~vg2mnYoHm$XH=h39Fg9&FeEx5c|rAis+Uw}WWOf+ z)iuB)vQvutWVeV8=C3d$IwrpbTu?o3VNS`8Nj@Zd(Dn~VZj)S`1GXFB1=Sy@zG#3$ zvIis&uZ21zyWeJFog|9{ZxTHu`wP|Iss2p$g5nv)bBd=Fk6VAR2W0meV2vp2U38P+ zIoUtx`8Nx`rsq#oUo~A)J!us@Y{RxqeDex@g13lXQT&Sq|6##D>G@-8<&x?-#itY} z&AdbM4#~AH$#NI{nCOh;Z}fak&tIv2_cnuf!QF4>du^2a1i8_E*e1~(qWeU5iEa`7 zl<2U1pe>@GG~GQUy3s`!yC@&Mm+cc>B>YE91XqZzwXjx*4!Y!^ORjdw1%&$e8So!AiBL{Q4GJ0x0000DNk~Le0000W0000W5C#AM03+(Aw*UYD32;bR za{vGizyJUazyWI3i3zbbi3)!O8%ab#RCwC#S#3~MRTzFQ>hd8wo9xbA`3MwN*x8{? zH&Y{9gGSnMOh#%(18s^BZ6-{|>IYfFg!02N!R&`2lZ}IfF);&?ZB(G-7sQ9rMyoAE zJMwjBSK8TSfyF%iSgyzJvI7yqlD>cLo^#K+bKYm4=Q-!Tmm!1@LU4cIh9BJ0Y(yqkP#>;P&3zEYT6-SK!AndZ4zlCExl!KZ;@M>aMolwE8{(%v4RVxv9CS zxrvbK$Bzwe5d-qTMQi=v1kS9kTiJVQ?f@}m2@E<1or6wbLN zO^)k#nyYXKE8rvOgR={Y@MO|_<4Q-L;X7@nWC6mrg>MVr284c`aP95$KfrQXEn7zbM`L6A&s%{52c7lemjPDGYFRB{G#ZUYBhb6^Qrw|+_ueC> z?QKxV2xoF@v0)WWoRqdG2m0qP+={==!Q)WLtdJAZa?=;%A zQ$J8KGgT850uhiC7aL;+7WF*Wob;1-j}QV;US4=~`*z^$*(+B#jy`|GhBa$g7BCn( zJMDiCz-;EYAt$}x(b3aAG(?#>;{g0uAlC0LKAJm96LjwmfZ7nP6xTCMTYQJnuBFeN zEC4fJ5)*pFaQ?OH9g)C5*q4vhK1w~Juf1UCWE2pZl=H^E0Xjc4Eo8U<62MJ$hT$b3 zOqgecx5Q_?CO8ogn=^jhQ@xTVY%u)ZX?K4Br8{b0>23C&P<(uJv^aRq6-8-6aebGo zzbXT)>OVKSWI%7}z=tDUfZ5#tkAL`10cOnfA|qKgFo^b3srZNqP88a`>Tt<<&y{pn zS>V!n2h2@zz`Y%M&UYV}yfcRJ^)Ev)F=63>f!#`&xVOg8uggcNtT3CTOo zPJKQqijeW|&lwMxID}LdnjPQf6Bq6Zb5;UA`(5Ax0RNNtdjL5hdKA})9P9u9002ov JPDHLkV1m>~g*5;G diff --git a/resources/assets/projectred/textures/blocks/machines/generatorbottom.png b/resources/assets/projectred/textures/blocks/ore/storagesapphire.png similarity index 62% rename from resources/assets/projectred/textures/blocks/machines/generatorbottom.png rename to resources/assets/projectred/textures/blocks/ore/storagesapphire.png index 8bd5326999b8643aea65bca75d42deb376533435..529c5da471d12c716d8ee1a0152a59b95fc9f238 100644 GIT binary patch delta 522 zcmV+l0`>jYA)FbI7#;`)0000V^Z#K0000SaNLh0L01FcU01FcV0GgZ_u{Mbce*woy zL_t(|+I*8siyA=`g&Vr+-gZpqUsEw4KkkTh4hC48B0P82PeyVF-Q&>N% zosD7K0EW9rsfEOF0qaNl(+oDue__K4HoU-w7f@V-vOOqn_1hfQPhngihTBLCKg0U5 zUS7zBSc2k4lJG3~$hxYE?21!+rP#ZhR9+cBobXZq&g-0UacUyD+W~&QEa7cleKg;hMj}jjtMxhNP9b zHq%IwC=UAI{0!Ipqkwk>V4NyZ+}(7d0J@TcYY0E}^&g<@b1es##9d}WS~;Z_5}C#V z#`WbetfWcY5XKF)&BwYQsCqE`tbO2mNU8N88S&z7ygN7hlv?;V0H!}@pB@+>82|tP M07*qoM6N<$f(dr=_W%F@ delta 1613 zcmV-T2D15_8P*|?7#wgIR|A^*;F>cKjEM7Pk{U=Kgy3# z+pX=^cA*h&gd1VtfCCPI7%^fXQX(Z%fQg9-nrf=1YC>zNwbWXImZ6rRmLZV6vRC$k zwyv#f>(G4DeA9db)~2;-ZGy-2m>v@@&0LzfGz0FOJLk?pF<;CV^HA%oe|6S6L6&4m zmY_M>9Bqz*d@7&Hr_gkpZqo&gAVGrQ?e=ziyP*_ktOE10P zOgIzH1c;Cbi4X+30$qVFaChBZcNaqQq504}$XPinXF=?XeX$RA+D_YPupG;=9H>06 zJg+m`W@Q$XBjrdr z0_~P|OS=W_ZoAv=g6I)Fq6gF+bw}L+t7Mg|68ydQ_uk)oP_?Ue)dof8WKQP5$vHVE z2Ts8$I0X=Skr#Q;wzX|-8`LdzOWgwfyZ&AO4!%j>q;C?uac|rke+N(06ZJ&F8}UZG z5s84rjAzC(;~5x-#-VWtR@{nPaS(l4pVp^I*&b{Uwg=%#=t}5H2s(N? zdOCVQ-_dvU9cUJsg=PV?QEgNk1$WAwa;Km%+!$^QgGh*kNB~~Ec%dGuhw33PQ)bFc zL3y{lTi%6QvX-nRf1whq#40h+NRuWFA}XRH3Z7HXspk~*EqzPh0&lCg)!PcL;wr8J z!W5=3p}tsOtS^Fl;a<2Gz$vGkf_hcGs$K;#EvCgZCqW3loOC)8J1yaW}De& z7Tk~N_& zSIXec;LYGo2-pETV1xJAd+a?1U%(ge1wcz_DJ=y7GhhZx(3kaPeHomW&P(SdRJ4j# z(Lh~L7t{q{e}fG+Kpcr9aRlayxni!suNS{w{CWYUOes^!faZ;QquwaUe%UYk!AUtO zCk676d?X)%+>?895A-wrOg{r3K74@t$^GPh0;lYhoifPR^0j;ojs8Y|qaVnSAp=g) zDLO^?JN$R}?=V!hE8CTAu-;m4t+$|vn23oOs7vaSf4T(vs=lhPf*2R$VjN^##$_Cu z`DVVEhibSQu7<%_H`a}HsAj9#Y8GlwYENoUpx#yQs&|2%u`_lCj83D|=mf(yY{Le- z&+fDPfI$Ws{67bDQ#W-JJV{T|lLR%ahSe~520eqGL2!wPS zGtWFIe`Cs+G6u?qvY~8%xFK$c8{kj+ll~+qXUds!2JWW2>2Cg$P{i)W?#Av)*>S() ze#dnind<<&0+O2kj-D~&Sy&&i0oSXx3AP&Re!5w$U-ElDXj6Guy z%%WK|i|~8-_ww&$sJ^Pcs=flvU31smHK<4Gk$MFFME*qnM8F!f2CYF*AE*!12jF-e zf3M>O92^|bX0=&u7PPFE)v{2Vs7=%+z(^ZuBmHl_i_}HxA_b;qYNiH_)5dAz6y!Vk zPQC+8w2D^I3M5F70PC~$+4>CjzP)engVL>ZE8U>3s;lZMh$XQkmO!kDHL(VaFv183 zpYRDEC=n&1L_q$KKjaT+7!9LgfYau*BROqAjvP4<-^4fZ4gNO(K6m>Mn+-t500000 LNkvXXu0mjfrN;lc