From fdcf09abfb4bddaf727581ca535e943c5e43fdef Mon Sep 17 00:00:00 2001 From: Boblet Date: Fri, 28 Jan 2022 10:43:58 +0100 Subject: [PATCH] pheo's ivy mike GUI, det cord is now cord shaped, as the name implies --- src/main/java/com/hbm/blocks/ModBlocks.java | 6 +- .../java/com/hbm/blocks/bomb/DetCord.java | 148 +++++++----------- .../com/hbm/blocks/bomb/ExplosiveCharge.java | 93 +++++++++++ .../com/hbm/blocks/bomb/IDetConnectible.java | 21 +++ .../container/ContainerNukeMike.java | 73 ++++----- .../com/hbm/inventory/gui/GUINukeMike.java | 31 +++- src/main/java/com/hbm/main/ClientProxy.java | 1 + src/main/java/com/hbm/main/MainRegistry.java | 3 + .../com/hbm/render/block/RenderDetCord.java | 96 ++++++++++++ .../assets/hbm/textures/blocks/det_cord.png | Bin 191 -> 183 bytes .../textures/gui/weapon/ivyMikeSchematic.png | Bin 2736 -> 16860 bytes 11 files changed, 334 insertions(+), 138 deletions(-) create mode 100644 src/main/java/com/hbm/blocks/bomb/ExplosiveCharge.java create mode 100644 src/main/java/com/hbm/blocks/bomb/IDetConnectible.java create mode 100644 src/main/java/com/hbm/render/block/RenderDetCord.java diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index 409fed4a8..2c6b7aa5c 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -1672,9 +1672,9 @@ public class ModBlocks { therm_endo = new BombThermo(Material.iron).setBlockName("therm_endo").setCreativeTab(MainRegistry.nukeTab).setHardness(5.0F).setResistance(6000.0F); therm_exo = new BombThermo(Material.iron).setBlockName("therm_exo").setCreativeTab(MainRegistry.nukeTab).setHardness(5.0F).setResistance(6000.0F); emp_bomb = new BombFloat(Material.iron).setBlockName("emp_bomb").setCreativeTab(MainRegistry.nukeTab).setHardness(5.0F).setResistance(6000.0F); - det_cord = new DetCord(Material.iron).setBlockName("det_cord").setCreativeTab(MainRegistry.nukeTab).setHardness(0.1F).setResistance(0.0F).setBlockTextureName(RefStrings.MODID + ":det_cord"); - det_charge = new DetCord(Material.iron).setBlockName("det_charge").setCreativeTab(MainRegistry.nukeTab).setHardness(0.1F).setResistance(0.0F).setBlockTextureName(RefStrings.MODID + ":det_charge"); - det_nuke = new DetCord(Material.iron).setBlockName("det_nuke").setCreativeTab(MainRegistry.nukeTab).setHardness(0.1F).setResistance(0.0F).setBlockTextureName(RefStrings.MODID + ":det_nuke"); + det_cord = new ExplosiveCharge(Material.iron).setBlockName("det_cord").setCreativeTab(MainRegistry.nukeTab).setHardness(0.1F).setResistance(0.0F).setBlockTextureName(RefStrings.MODID + ":det_cord"); + det_charge = new ExplosiveCharge(Material.iron).setBlockName("det_charge").setCreativeTab(MainRegistry.nukeTab).setHardness(0.1F).setResistance(0.0F).setBlockTextureName(RefStrings.MODID + ":det_charge"); + det_nuke = new ExplosiveCharge(Material.iron).setBlockName("det_nuke").setCreativeTab(MainRegistry.nukeTab).setHardness(0.1F).setResistance(0.0F).setBlockTextureName(RefStrings.MODID + ":det_nuke"); det_miner = new DetMiner(Material.iron, RefStrings.MODID + ":det_miner_top").setBlockName("det_miner").setCreativeTab(MainRegistry.nukeTab).setHardness(0.1F).setResistance(0.0F).setBlockTextureName(RefStrings.MODID + ":det_miner_side"); red_barrel = new RedBarrel(Material.iron).setBlockName("red_barrel").setCreativeTab(MainRegistry.nukeTab).setHardness(0.5F).setResistance(2.5F).setBlockTextureName(RefStrings.MODID + ":barrel_red"); pink_barrel = new RedBarrel(Material.iron).setBlockName("pink_barrel").setCreativeTab(MainRegistry.nukeTab).setHardness(0.5F).setResistance(2.5F).setBlockTextureName(RefStrings.MODID + ":barrel_pink"); diff --git a/src/main/java/com/hbm/blocks/bomb/DetCord.java b/src/main/java/com/hbm/blocks/bomb/DetCord.java index 152e55d33..129580a30 100644 --- a/src/main/java/com/hbm/blocks/bomb/DetCord.java +++ b/src/main/java/com/hbm/blocks/bomb/DetCord.java @@ -1,88 +1,60 @@ -package com.hbm.blocks.bomb; - -import com.hbm.blocks.ModBlocks; -import com.hbm.config.BombConfig; -import com.hbm.entity.effect.EntityNukeCloudSmall; -import com.hbm.entity.logic.EntityNukeExplosionMK4; -import com.hbm.explosion.ExplosionLarge; -import com.hbm.explosion.ExplosionNT; -import com.hbm.interfaces.IBomb; -import com.hbm.lib.RefStrings; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.block.Block; -import net.minecraft.block.material.Material; -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.init.Blocks; -import net.minecraft.util.IIcon; -import net.minecraft.world.Explosion; -import net.minecraft.world.World; - -public class DetCord extends Block implements IBomb { - - @SideOnly(Side.CLIENT) - private IIcon iconTop; - - public DetCord(Material p_i45394_1_) { - super(p_i45394_1_); - } - - @Override - @SideOnly(Side.CLIENT) - public void registerBlockIcons(IIconRegister iconRegister) { - - super.registerBlockIcons(iconRegister); - - this.iconTop = iconRegister.registerIcon(RefStrings.MODID + ":det_nuke_top"); - } - - @Override - @SideOnly(Side.CLIENT) - public IIcon getIcon(int side, int metadata) { - - if(this != ModBlocks.det_nuke) - return this.blockIcon; - - return side == 1 ? this.iconTop : (side == 0 ? this.iconTop : this.blockIcon); - } - - @Override - public void onBlockDestroyedByExplosion(World world, int x, int y, int z, Explosion p_149723_5_) { - this.explode(world, x, y, z); - } - - @Override - public void onNeighborBlockChange(World world, int x, int y, int z, Block p_149695_5_) { - if(world.isBlockIndirectlyGettingPowered(x, y, z)) { - this.explode(world, x, y, z); - } - } - - @Override - public BombReturnCode explode(World world, int x, int y, int z) { - - if(!world.isRemote) { - world.setBlock(x, y, z, Blocks.air); - if(this == ModBlocks.det_cord) { - world.createExplosion(null, x + 0.5, y + 0.5, z + 0.5, 1.5F, true); - } - if(this == ModBlocks.det_charge) { - new ExplosionNT(world, null, x + 0.5, y + 0.5, z + 0.5, 15).overrideResolution(64).explode(); - ExplosionLarge.spawnParticles(world, x, y, z, ExplosionLarge.cloudFunction(15)); - } - if(this == ModBlocks.det_nuke) { - world.spawnEntityInWorld(EntityNukeExplosionMK4.statFac(world, BombConfig.missileRadius, x + 0.5, y + 0.5, z + 0.5)); - - EntityNukeCloudSmall entity2 = new EntityNukeCloudSmall(world, 1000, BombConfig.missileRadius * 0.005F); - entity2.posX = x; - entity2.posY = y; - entity2.posZ = z; - world.spawnEntityInWorld(entity2); - } - } - - return BombReturnCode.DETONATED; - } - -} +package com.hbm.blocks.bomb; + +import com.hbm.blocks.ModBlocks; +import com.hbm.interfaces.IBomb.BombReturnCode; + +import cpw.mods.fml.client.registry.RenderingRegistry; +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.init.Blocks; +import net.minecraft.world.Explosion; +import net.minecraft.world.World; + +public class DetCord extends Block implements IDetConnectible { + + protected DetCord(Material p_i45394_1_) { + super(p_i45394_1_); + } + + public static int renderID = RenderingRegistry.getNextAvailableRenderId(); + + @Override + public int getRenderType() { + return renderID; + } + + @Override + public boolean isOpaqueCube() { + return false; + } + + @Override + public boolean renderAsNormalBlock() { + return false; + } + + @Override + public void onBlockDestroyedByExplosion(World world, int x, int y, int z, Explosion p_149723_5_) { + this.explode(world, x, y, z); + } + + @Override + public boolean canDropFromExplosion(Explosion explosion) { + return false; + } + + @Override + public void onNeighborBlockChange(World world, int x, int y, int z, Block p_149695_5_) { + if(world.isBlockIndirectlyGettingPowered(x, y, z)) { + this.explode(world, x, y, z); + } + } + + public void explode(World world, int x, int y, int z) { + + if(!world.isRemote) { + world.setBlock(x, y, z, Blocks.air); + world.createExplosion(null, x + 0.5, y + 0.5, z + 0.5, 1.5F, true); + } + } +} diff --git a/src/main/java/com/hbm/blocks/bomb/ExplosiveCharge.java b/src/main/java/com/hbm/blocks/bomb/ExplosiveCharge.java new file mode 100644 index 000000000..56925c285 --- /dev/null +++ b/src/main/java/com/hbm/blocks/bomb/ExplosiveCharge.java @@ -0,0 +1,93 @@ +package com.hbm.blocks.bomb; + +import com.hbm.blocks.ModBlocks; +import com.hbm.config.BombConfig; +import com.hbm.entity.effect.EntityNukeCloudSmall; +import com.hbm.entity.logic.EntityNukeExplosionMK4; +import com.hbm.explosion.ExplosionLarge; +import com.hbm.explosion.ExplosionNT; +import com.hbm.interfaces.IBomb; +import com.hbm.lib.RefStrings; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.init.Blocks; +import net.minecraft.util.IIcon; +import net.minecraft.world.Explosion; +import net.minecraft.world.World; + +public class ExplosiveCharge extends Block implements IBomb, IDetConnectible { + + @SideOnly(Side.CLIENT) + private IIcon iconTop; + + public ExplosiveCharge(Material p_i45394_1_) { + super(p_i45394_1_); + } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister iconRegister) { + + super.registerBlockIcons(iconRegister); + + this.iconTop = iconRegister.registerIcon(RefStrings.MODID + ":det_nuke_top"); + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(int side, int metadata) { + + if(this != ModBlocks.det_nuke) + return this.blockIcon; + + return side == 1 ? this.iconTop : (side == 0 ? this.iconTop : this.blockIcon); + } + + @Override + public void onBlockDestroyedByExplosion(World world, int x, int y, int z, Explosion p_149723_5_) { + this.explode(world, x, y, z); + } + + @Override + public boolean canDropFromExplosion(Explosion explosion) { + return false; + } + + @Override + public void onNeighborBlockChange(World world, int x, int y, int z, Block p_149695_5_) { + if(world.isBlockIndirectlyGettingPowered(x, y, z)) { + this.explode(world, x, y, z); + } + } + + @Override + public BombReturnCode explode(World world, int x, int y, int z) { + + if(!world.isRemote) { + world.setBlock(x, y, z, Blocks.air); + if(this == ModBlocks.det_cord) { + world.createExplosion(null, x + 0.5, y + 0.5, z + 0.5, 1.5F, true); + } + if(this == ModBlocks.det_charge) { + new ExplosionNT(world, null, x + 0.5, y + 0.5, z + 0.5, 15).overrideResolution(64).explode(); + ExplosionLarge.spawnParticles(world, x, y, z, ExplosionLarge.cloudFunction(15)); + } + if(this == ModBlocks.det_nuke) { + world.spawnEntityInWorld(EntityNukeExplosionMK4.statFac(world, BombConfig.missileRadius, x + 0.5, y + 0.5, z + 0.5)); + + EntityNukeCloudSmall entity2 = new EntityNukeCloudSmall(world, 1000, BombConfig.missileRadius * 0.005F); + entity2.posX = x; + entity2.posY = y; + entity2.posZ = z; + world.spawnEntityInWorld(entity2); + } + } + + return BombReturnCode.DETONATED; + } + +} diff --git a/src/main/java/com/hbm/blocks/bomb/IDetConnectible.java b/src/main/java/com/hbm/blocks/bomb/IDetConnectible.java new file mode 100644 index 000000000..9c0a63e86 --- /dev/null +++ b/src/main/java/com/hbm/blocks/bomb/IDetConnectible.java @@ -0,0 +1,21 @@ +package com.hbm.blocks.bomb; + +import net.minecraft.block.Block; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +public interface IDetConnectible { + + public default boolean canConnectToDetCord(IBlockAccess world, int x, int y, int z, ForgeDirection dir) { + return true; + } + + public static boolean isConnectible(IBlockAccess world, int x, int y, int z, ForgeDirection dir) { + Block b = world.getBlock(x, y, z); + if(b instanceof IDetConnectible) { + return ((IDetConnectible)b).canConnectToDetCord(world, x, y, z, dir); + } + return false; + } +} diff --git a/src/main/java/com/hbm/inventory/container/ContainerNukeMike.java b/src/main/java/com/hbm/inventory/container/ContainerNukeMike.java index dc5ce78f9..6520eb428 100644 --- a/src/main/java/com/hbm/inventory/container/ContainerNukeMike.java +++ b/src/main/java/com/hbm/inventory/container/ContainerNukeMike.java @@ -10,71 +10,62 @@ import net.minecraft.item.ItemStack; public class ContainerNukeMike extends Container { -private TileEntityNukeMike nukeMike; - + private TileEntityNukeMike nukeMike; + public ContainerNukeMike(InventoryPlayer invPlayer, TileEntityNukeMike tedf) { - + nukeMike = tedf; - - this.addSlotToContainer(new Slot(tedf, 0, 26, 17)); - this.addSlotToContainer(new Slot(tedf, 1, 62, 17)); - this.addSlotToContainer(new Slot(tedf, 2, 26, 53)); - this.addSlotToContainer(new Slot(tedf, 3, 62, 53)); - this.addSlotToContainer(new Slot(tedf, 4, 44, 35)); - this.addSlotToContainer(new Slot(tedf, 5, 80, 35)); - this.addSlotToContainer(new Slot(tedf, 6, 98, 35)); - this.addSlotToContainer(new Slot(tedf, 7, 116, 35)); - - for(int i = 0; i < 3; i++) - { - for(int j = 0; j < 9; j++) - { - this.addSlotToContainer(new Slot(invPlayer, j + i * 9 + 9, 8 + j * 18, 84 + i * 18)); + + this.addSlotToContainer(new Slot(tedf, 0, 26, 83)); + this.addSlotToContainer(new Slot(tedf, 1, 26, 101)); + this.addSlotToContainer(new Slot(tedf, 2, 44, 83)); + this.addSlotToContainer(new Slot(tedf, 3, 44, 101)); + this.addSlotToContainer(new Slot(tedf, 4, 39, 35)); + this.addSlotToContainer(new Slot(tedf, 5, 98, 91)); + this.addSlotToContainer(new Slot(tedf, 6, 116, 91)); + this.addSlotToContainer(new Slot(tedf, 7, 134, 91)); + + for(int i = 0; i < 3; i++) { + for(int j = 0; j < 9; j++) { + this.addSlotToContainer(new Slot(invPlayer, j + i * 9 + 9, 8 + j * 18, 135 + i * 18)); } } - - for(int i = 0; i < 9; i++) - { - this.addSlotToContainer(new Slot(invPlayer, i, 8 + i * 18, 142)); + + for(int i = 0; i < 9; i++) { + this.addSlotToContainer(new Slot(invPlayer, i, 8 + i * 18, 193)); } } - + @Override - public ItemStack transferStackInSlot(EntityPlayer p_82846_1_, int par2) - { + public ItemStack transferStackInSlot(EntityPlayer p_82846_1_, int par2) { ItemStack var3 = null; Slot var4 = (Slot) this.inventorySlots.get(par2); - - if (var4 != null && var4.getHasStack()) - { + + if(var4 != null && var4.getHasStack()) { ItemStack var5 = var4.getStack(); var3 = var5.copy(); - - if (par2 <= 7) { - if (!this.mergeItemStack(var5, 8, this.inventorySlots.size(), true)) - { + + if(par2 <= 7) { + if(!this.mergeItemStack(var5, 8, this.inventorySlots.size(), true)) { return null; } } else { return null; } - - if (var5.stackSize == 0) - { + + if(var5.stackSize == 0) { var4.putStack((ItemStack) null); - } - else - { + } else { var4.onSlotChanged(); } } - + return var3; - } + } @Override public boolean canInteractWith(EntityPlayer player) { return nukeMike.isUseableByPlayer(player); } -} +} \ No newline at end of file diff --git a/src/main/java/com/hbm/inventory/gui/GUINukeMike.java b/src/main/java/com/hbm/inventory/gui/GUINukeMike.java index 22e85fcb9..bef83622d 100644 --- a/src/main/java/com/hbm/inventory/gui/GUINukeMike.java +++ b/src/main/java/com/hbm/inventory/gui/GUINukeMike.java @@ -3,6 +3,7 @@ package com.hbm.inventory.gui; import org.lwjgl.opengl.GL11; import com.hbm.inventory.container.ContainerNukeMike; +import com.hbm.items.ModItems; import com.hbm.lib.RefStrings; import com.hbm.tileentity.bomb.TileEntityNukeMike; @@ -22,14 +23,14 @@ public class GUINukeMike extends GuiContainer { testNuke = tedf; this.xSize = 176; - this.ySize = 166; + this.ySize = 217; } @Override protected void drawGuiContainerForegroundLayer( int i, int j) { String name = this.testNuke.hasCustomInventoryName() ? this.testNuke.getInventoryName() : I18n.format(this.testNuke.getInventoryName()); - this.fontRendererObj.drawString(name, this.xSize / 2 - this.fontRendererObj.getStringWidth(name) / 2, 6, 4210752); + this.fontRendererObj.drawString(name, this.xSize / 2 - this.fontRendererObj.getStringWidth(name) / 2, 4, 4210752); this.fontRendererObj.drawString(I18n.format("container.inventory"), 8, this.ySize - 96 + 2, 4210752); } @@ -41,13 +42,31 @@ public class GUINukeMike extends GuiContainer { if(testNuke.isReady() && !testNuke.isFilled()) { - drawTexturedModalRect(guiLeft + 142, guiTop + 34, 176, 0, 18, 18); + drawTexturedModalRect(guiLeft + 5, guiTop + 35, 177, 1, 16, 16); } if(testNuke.isReady() && testNuke.isFilled()) { - drawTexturedModalRect(guiLeft + 142, guiTop + 34, 176, 18, 18, 18); + drawTexturedModalRect(guiLeft + 5, guiTop + 35, 177, 19, 16, 16); + } + + if(testNuke.getStackInSlot(5) != null && testNuke.getStackInSlot(5).getItem() == ModItems.mike_core) + drawTexturedModalRect(guiLeft + 75, guiTop + 25, 176, 49, 80, 36); + + if(testNuke.getStackInSlot(6) != null && testNuke.getStackInSlot(6).getItem() == ModItems.mike_deut) + drawTexturedModalRect(guiLeft + 79, guiTop + 30, 180, 88, 58, 26); + + if(testNuke.getStackInSlot(7) != null && testNuke.getStackInSlot(7).getItem() == ModItems.mike_cooling_unit) + drawTexturedModalRect(guiLeft + 140, guiTop + 30, 240, 88, 12, 26); + + for(int i = 0; i < 4; i++) { + if(testNuke.getStackInSlot(i) != null && testNuke.getStackInSlot(i).getItem() == ModItems.man_explosive8) + switch(i) { + case 0: drawTexturedModalRect(guiLeft + 24, guiTop + 20 , 209, 1, 23, 23); break; + case 2: drawTexturedModalRect(guiLeft + 47, guiTop + 20 , 232, 1, 23, 23); break; + case 1: drawTexturedModalRect(guiLeft + 24, guiTop + 43 , 209, 24, 23, 23); break; + case 3: drawTexturedModalRect(guiLeft + 47, guiTop + 43 , 232, 24, 23, 23); break; + } } } - -} +} \ No newline at end of file diff --git a/src/main/java/com/hbm/main/ClientProxy.java b/src/main/java/com/hbm/main/ClientProxy.java index 10618cde6..e20609902 100644 --- a/src/main/java/com/hbm/main/ClientProxy.java +++ b/src/main/java/com/hbm/main/ClientProxy.java @@ -634,6 +634,7 @@ public class ClientProxy extends ServerProxy { RenderingRegistry.registerBlockHandler(new RenderCrystal()); RenderingRegistry.registerBlockHandler(new RenderTestCable()); RenderingRegistry.registerBlockHandler(new RenderBlockCT()); + RenderingRegistry.registerBlockHandler(new RenderDetCord()); RenderingRegistry.registerBlockHandler(new RenderBlockRotated(ModBlocks.charge_dynamite.getRenderType(), ResourceManager.charge_dynamite)); diff --git a/src/main/java/com/hbm/main/MainRegistry.java b/src/main/java/com/hbm/main/MainRegistry.java index f7831f75c..f411e42e4 100644 --- a/src/main/java/com/hbm/main/MainRegistry.java +++ b/src/main/java/com/hbm/main/MainRegistry.java @@ -958,6 +958,9 @@ public class MainRegistry { TileEntityMachineReactorLarge.registerAll(); proxy.registerMissileItems(); + + //expand for the largest entity we have (currently Quackos who is 17.5m in diameter, that's one fat duck) + World.MAX_ENTITY_RADIUS = Math.max(World.MAX_ENTITY_RADIUS, 8.75); } @EventHandler diff --git a/src/main/java/com/hbm/render/block/RenderDetCord.java b/src/main/java/com/hbm/render/block/RenderDetCord.java new file mode 100644 index 000000000..c07ffca3c --- /dev/null +++ b/src/main/java/com/hbm/render/block/RenderDetCord.java @@ -0,0 +1,96 @@ +package com.hbm.render.block; + +import org.lwjgl.opengl.GL11; + +import com.hbm.blocks.bomb.IDetConnectible; +import com.hbm.blocks.test.TestConductor; +import com.hbm.lib.Library; +import com.hbm.main.ResourceManager; +import com.hbm.render.util.ObjUtil; + +import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; +import net.minecraft.block.Block; +import net.minecraft.client.renderer.RenderBlocks; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.util.IIcon; +import net.minecraft.world.IBlockAccess; +import net.minecraftforge.client.model.obj.WavefrontObject; + +public class RenderDetCord implements ISimpleBlockRenderingHandler { + + @Override + public void renderInventoryBlock(Block block, int metadata, int modelId, RenderBlocks renderer) { + + GL11.glPushMatrix(); + Tessellator tessellator = Tessellator.instance; + IIcon iicon = block.getIcon(0, 0); + tessellator.setColorOpaque_F(1, 1, 1); + + if(renderer.hasOverrideBlockTexture()) { + iicon = renderer.overrideBlockTexture; + } + + GL11.glRotated(180, 0, 1, 0); + GL11.glScaled(1.25D, 1.25D, 1.25D); + tessellator.startDrawingQuads(); + ObjUtil.renderPartWithIcon((WavefrontObject) ResourceManager.cable_neo, "CX", iicon, tessellator, 0, false); + tessellator.draw(); + + GL11.glPopMatrix(); + } + + @Override + public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer) { + + Tessellator tessellator = Tessellator.instance; + IIcon iicon = block.getIcon(0, 0); + tessellator.setColorOpaque_F(1, 1, 1); + + if(renderer.hasOverrideBlockTexture()) { + iicon = renderer.overrideBlockTexture; + } + + tessellator.setBrightness(block.getMixedBrightnessForBlock(world, x, y, z)); + tessellator.setColorOpaque_F(1, 1, 1); + + boolean pX = IDetConnectible.isConnectible(world, x + 1, y, z, Library.NEG_X); + boolean nX = IDetConnectible.isConnectible(world, x - 1, y, z, Library.POS_X); + boolean pY = IDetConnectible.isConnectible(world, x, y + 1, z, Library.NEG_Y); + boolean nY = IDetConnectible.isConnectible(world, x, y - 1, z, Library.POS_Y); + boolean pZ = IDetConnectible.isConnectible(world, x, y, z + 1, Library.NEG_Z); + boolean nZ = IDetConnectible.isConnectible(world, x, y, z - 1, Library.POS_Z); + + tessellator.addTranslation(x + 0.5F, y + 0.5F, z + 0.5F); + + if(pX && nX && !pY && !nY && !pZ && !nZ) + ObjUtil.renderPartWithIcon((WavefrontObject) ResourceManager.cable_neo, "CX", iicon, tessellator, 0, true); + else if(!pX && !nX && pY && nY && !pZ && !nZ) + ObjUtil.renderPartWithIcon((WavefrontObject) ResourceManager.cable_neo, "CY", iicon, tessellator, 0, true); + else if(!pX && !nX && !pY && !nY && pZ && nZ) + ObjUtil.renderPartWithIcon((WavefrontObject) ResourceManager.cable_neo, "CZ", iicon, tessellator, 0, true); + + else { + ObjUtil.renderPartWithIcon((WavefrontObject) ResourceManager.cable_neo, "Core", iicon, tessellator, 0, true); + if(pX) ObjUtil.renderPartWithIcon((WavefrontObject) ResourceManager.cable_neo, "posX", iicon, tessellator, 0, true); + if(nX) ObjUtil.renderPartWithIcon((WavefrontObject) ResourceManager.cable_neo, "negX", iicon, tessellator, 0, true); + if(pY) ObjUtil.renderPartWithIcon((WavefrontObject) ResourceManager.cable_neo, "posY", iicon, tessellator, 0, true); + if(nY) ObjUtil.renderPartWithIcon((WavefrontObject) ResourceManager.cable_neo, "negY", iicon, tessellator, 0, true); + if(nZ) ObjUtil.renderPartWithIcon((WavefrontObject) ResourceManager.cable_neo, "posZ", iicon, tessellator, 0, true); + if(pZ) ObjUtil.renderPartWithIcon((WavefrontObject) ResourceManager.cable_neo, "negZ", iicon, tessellator, 0, true); + } + + tessellator.addTranslation(-x - 0.5F, -y - 0.5F, -z - 0.5F); + + return true; + } + + @Override + public boolean shouldRender3DInInventory(int modelId) { + return true; + } + + @Override + public int getRenderId() { + return TestConductor.renderID; + } +} diff --git a/src/main/resources/assets/hbm/textures/blocks/det_cord.png b/src/main/resources/assets/hbm/textures/blocks/det_cord.png index 66c6c57522864ad3f152427ad65c5e2d987b12f9..9be1b515ee4adaef4bcae5eb5518cffa2233eb43 100644 GIT binary patch delta 166 zcmdnbxSer=WIY=L1B3kM|A|0~rP#?cgaZg_I8r)*{5($=#}JF&x06ouHYf>-tKP^2+P)GSjFYg6DVK~xh44$rjF6*2UngF_wKPUhI delta 174 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 OQTTcaJkD(rXZ;1?uDb#N