From 816db93991603aa02ae43f28ed58f3ef4b620e42 Mon Sep 17 00:00:00 2001 From: Boblet Date: Mon, 29 Nov 2021 08:53:26 +0100 Subject: [PATCH 1/3] made nukes more destructive in close proximity, concrete cracker now... ...works as advertised (changes untested, ugh) --- .../entity/missile/EntityMissileDrill.java | 8 +- .../java/com/hbm/explosion/ExplosionNT.java | 126 ++++++++++++------ .../com/hbm/explosion/ExplosionNukeRay.java | 22 ++- 3 files changed, 108 insertions(+), 48 deletions(-) diff --git a/src/main/java/com/hbm/entity/missile/EntityMissileDrill.java b/src/main/java/com/hbm/entity/missile/EntityMissileDrill.java index 32dd3fcdc..7ee90dc9a 100644 --- a/src/main/java/com/hbm/entity/missile/EntityMissileDrill.java +++ b/src/main/java/com/hbm/entity/missile/EntityMissileDrill.java @@ -4,6 +4,8 @@ import java.util.ArrayList; import java.util.List; import com.hbm.explosion.ExplosionLarge; +import com.hbm.explosion.ExplosionNT; +import com.hbm.explosion.ExplosionNT.ExAttrib; import com.hbm.items.ModItems; import api.hbm.entity.IRadarDetectable.RadarTargetType; @@ -24,11 +26,13 @@ public class EntityMissileDrill extends EntityMissileBaseAdvanced { public void onImpact() { for(int i = 0; i < 30; i++) { - this.worldObj.createExplosion(this, this.posX, this.posY - i, this.posZ, 10F, true); + ExplosionNT explosion = new ExplosionNT(worldObj, this, this.posX, this.posY - 1, this.posZ, 10F); + explosion.addAllAttrib(ExAttrib.ERRODE); + explosion.explode(); //an explosion exploded! } ExplosionLarge.spawnParticles(worldObj, this.posX, this.posY, this.posZ, 25); ExplosionLarge.spawnShrapnels(worldObj, this.posX, this.posY, this.posZ, 12); - ExplosionLarge.spawnRubble(worldObj, this.posX, this.posY, this.posZ, 12); + ExplosionLarge.jolt(worldObj, this.posX, this.posY, this.posZ, 10, 50, 1); } @Override diff --git a/src/main/java/com/hbm/explosion/ExplosionNT.java b/src/main/java/com/hbm/explosion/ExplosionNT.java index 5c273c0d9..508cfbbb5 100644 --- a/src/main/java/com/hbm/explosion/ExplosionNT.java +++ b/src/main/java/com/hbm/explosion/ExplosionNT.java @@ -33,7 +33,7 @@ public class ExplosionNT extends Explosion { private Random explosionRNG = new Random(); private World worldObj; - protected int field_77289_h = 16; + protected int resolution = 16; protected Map affectedEntities = new HashMap(); public static final List nukeAttribs = Arrays.asList(new ExAttrib[] { ExAttrib.FIRE, ExAttrib.NOPARTICLE, ExAttrib.NOSOUND, ExAttrib.NODROP, ExAttrib.NOHURT }); @@ -53,8 +53,13 @@ public class ExplosionNT extends Explosion { return this; } + public ExplosionNT addAllAttrib(ExAttrib... attrib) { + for(ExAttrib a : attrib) atttributes.add(a); + return this; + } + public ExplosionNT overrideResolution(int res) { - field_77289_h = res; + resolution = res; return this; } @@ -69,44 +74,51 @@ public class ExplosionNT extends Explosion { int i; int j; int k; - double d5; - double d6; - double d7; + double currentX; + double currentY; + double currentZ; - for(i = 0; i < this.field_77289_h; ++i) { - for(j = 0; j < this.field_77289_h; ++j) { - for(k = 0; k < this.field_77289_h; ++k) { - if(i == 0 || i == this.field_77289_h - 1 || j == 0 || j == this.field_77289_h - 1 || k == 0 || k == this.field_77289_h - 1) { - double d0 = (double) ((float) i / ((float) this.field_77289_h - 1.0F) * 2.0F - 1.0F); - double d1 = (double) ((float) j / ((float) this.field_77289_h - 1.0F) * 2.0F - 1.0F); - double d2 = (double) ((float) k / ((float) this.field_77289_h - 1.0F) * 2.0F - 1.0F); - double d3 = Math.sqrt(d0 * d0 + d1 * d1 + d2 * d2); - d0 /= d3; - d1 /= d3; - d2 /= d3; - float f1 = this.explosionSize * (0.7F + this.worldObj.rand.nextFloat() * 0.6F); - d5 = this.explosionX; - d6 = this.explosionY; - d7 = this.explosionZ; + for(i = 0; i < this.resolution; ++i) { + for(j = 0; j < this.resolution; ++j) { + for(k = 0; k < this.resolution; ++k) { + + if(i == 0 || i == this.resolution - 1 || j == 0 || j == this.resolution - 1 || k == 0 || k == this.resolution - 1) { + + double d0 = (double) ((float) i / ((float) this.resolution - 1.0F) * 2.0F - 1.0F); + double d1 = (double) ((float) j / ((float) this.resolution - 1.0F) * 2.0F - 1.0F); + double d2 = (double) ((float) k / ((float) this.resolution - 1.0F) * 2.0F - 1.0F); + + double dist = Math.sqrt(d0 * d0 + d1 * d1 + d2 * d2); + d0 /= dist; + d1 /= dist; + d2 /= dist; + + float remainingPower = this.explosionSize * (0.7F + this.worldObj.rand.nextFloat() * 0.6F); + currentX = this.explosionX; + currentY = this.explosionY; + currentZ = this.explosionZ; - for(float f2 = 0.3F; f1 > 0.0F; f1 -= f2 * 0.75F) { - int j1 = MathHelper.floor_double(d5); - int k1 = MathHelper.floor_double(d6); - int l1 = MathHelper.floor_double(d7); - Block block = this.worldObj.getBlock(j1, k1, l1); + for(float step = 0.3F; remainingPower > 0.0F; remainingPower -= step * 0.75F) { + int xPos = MathHelper.floor_double(currentX); + int yPos = MathHelper.floor_double(currentY); + int zPos = MathHelper.floor_double(currentZ); + Block block = this.worldObj.getBlock(xPos, yPos, zPos); if(block.getMaterial() != Material.air) { - float f3 = this.exploder != null ? this.exploder.func_145772_a(this, this.worldObj, j1, k1, l1, block) : block.getExplosionResistance(this.exploder, worldObj, j1, k1, l1, explosionX, explosionY, explosionZ); - f1 -= (f3 + 0.3F) * f2; + float resistance = this.exploder != null ? this.exploder.func_145772_a(this, this.worldObj, xPos, yPos, zPos, block) : block.getExplosionResistance(this.exploder, worldObj, xPos, yPos, zPos, explosionX, explosionY, explosionZ); + remainingPower -= (resistance + 0.3F) * step; } - if(block != Blocks.air && f1 > 0.0F && (this.exploder == null || this.exploder.func_145774_a(this, this.worldObj, j1, k1, l1, block, f1))) { - hashset.add(new ChunkPosition(j1, k1, l1)); + if(block != Blocks.air && remainingPower > 0.0F && (this.exploder == null || this.exploder.func_145774_a(this, this.worldObj, xPos, yPos, zPos, block, remainingPower))) { + hashset.add(new ChunkPosition(xPos, yPos, zPos)); + + } else if(this.has(ExAttrib.ERRODE) && errosion.containsKey(block)) { + hashset.add(new ChunkPosition(xPos, yPos, zPos)); } - d5 += d0 * (double) f2; - d6 += d1 * (double) f2; - d7 += d2 * (double) f2; + currentX += d0 * (double) step; + currentY += d1 * (double) step; + currentZ += d2 * (double) step; } } } @@ -133,25 +145,25 @@ public class ExplosionNT extends Explosion { double d4 = entity.getDistance(this.explosionX, this.explosionY, this.explosionZ) / (double) this.explosionSize; if(d4 <= 1.0D) { - d5 = entity.posX - this.explosionX; - d6 = entity.posY + (double) entity.getEyeHeight() - this.explosionY; - d7 = entity.posZ - this.explosionZ; - double d9 = (double) MathHelper.sqrt_double(d5 * d5 + d6 * d6 + d7 * d7); + currentX = entity.posX - this.explosionX; + currentY = entity.posY + (double) entity.getEyeHeight() - this.explosionY; + currentZ = entity.posZ - this.explosionZ; + double d9 = (double) MathHelper.sqrt_double(currentX * currentX + currentY * currentY + currentZ * currentZ); if(d9 != 0.0D) { - d5 /= d9; - d6 /= d9; - d7 /= d9; + currentX /= d9; + currentY /= d9; + currentZ /= d9; double d10 = (double) this.worldObj.getBlockDensity(vec3, entity.boundingBox); double d11 = (1.0D - d4) * d10; entity.attackEntityFrom(DamageSource.setExplosionSource(this), (float) ((int) ((d11 * d11 + d11) / 2.0D * 8.0D * (double) this.explosionSize + 1.0D))); double d8 = EnchantmentProtection.func_92092_a(entity, d11); - entity.motionX += d5 * d8; - entity.motionY += d6 * d8; - entity.motionZ += d7 * d8; + entity.motionX += currentX * d8; + entity.motionY += currentY * d8; + entity.motionZ += currentZ * d8; if(entity instanceof EntityPlayer) { - this.affectedEntities.put((EntityPlayer) entity, Vec3.createVectorHelper(d5 * d11, d6 * d11, d7 * d11)); + this.affectedEntities.put((EntityPlayer) entity, Vec3.createVectorHelper(currentX * d11, currentY * d11, currentZ * d11)); } } } @@ -212,7 +224,19 @@ public class ExplosionNT extends Explosion { } if(block.getMaterial() != Material.air) { - if(block.canDropFromExplosion(this) && !has(ExAttrib.NODROP)) { + + boolean doesErrode = false; + Block errodesInto = Blocks.air; + + if(this.has(ExAttrib.ERRODE) && this.explosionRNG.nextFloat() < 0.6F) { //errosion has a 60% chance to occour + + if(errosion.containsKey(block)) { + doesErrode = true; + errodesInto = errosion.get(block); + } + } + + if(block.canDropFromExplosion(this) && !has(ExAttrib.NODROP) && !doesErrode) { float chance = 1.0F; if(!has(ExAttrib.ALLDROP)) @@ -225,6 +249,10 @@ public class ExplosionNT extends Explosion { if(block.isNormalCube()) { + if(doesErrode) { + this.worldObj.setBlock(i, j, k, errodesInto); + } + if(has(ExAttrib.DIGAMMA)) { this.worldObj.setBlock(i, j, k, ModBlocks.ash_digamma); @@ -300,6 +328,7 @@ public class ExplosionNT extends Explosion { DIGAMMA_CIRCUIT, LAVA, //again the same thing but lava LAVA_V, //again the same thing but volcaniclava + ERRODE, //will turn select blocks into gravel or sand ALLMOD, //block placer attributes like fire are applied for all destroyed blocks ALLDROP, //miner TNT! NODROP, //the opposite @@ -307,5 +336,14 @@ public class ExplosionNT extends Explosion { NOSOUND, NOHURT } + + public static final HashMap errosion = new HashMap(); + + static { + errosion.put(ModBlocks.concrete, Blocks.gravel); + errosion.put(ModBlocks.concrete_smooth, Blocks.gravel); + errosion.put(ModBlocks.brick_concrete, ModBlocks.brick_concrete_broken); + errosion.put(ModBlocks.brick_concrete_broken, Blocks.gravel); + } } diff --git a/src/main/java/com/hbm/explosion/ExplosionNukeRay.java b/src/main/java/com/hbm/explosion/ExplosionNukeRay.java index 9e5084792..4131b4852 100644 --- a/src/main/java/com/hbm/explosion/ExplosionNukeRay.java +++ b/src/main/java/com/hbm/explosion/ExplosionNukeRay.java @@ -4,6 +4,8 @@ import java.util.ArrayList; import java.util.List; import java.util.Random; +import com.hbm.interfaces.Untested; + import net.minecraft.init.Blocks; import net.minecraft.util.Vec3; import net.minecraft.world.World; @@ -25,6 +27,8 @@ public class ExplosionNukeRay { int startCir; public boolean isAusf3Complete = false; + private double overrideRange = 0; + public ExplosionNukeRay(World world, int x, int y, int z, int strength, int count, int speed, int length) { this.world = world; this.posX = x; @@ -39,6 +43,9 @@ public class ExplosionNukeRay { //Mk 4.5, must be int32 this.startY = 0; this.startCir = 0; + + //starts at around 80, becomes 8 at length 500 + this.overrideRange = Math.max((Math.log(length) * 4 - 2.5D) * 10, 0); } /*public void processBunch(int count) { @@ -147,6 +154,7 @@ public class ExplosionNukeRay { processed += count; } + @Untested //override range public void collectTip(int count) { for(int k = 0; k < count; k++) { @@ -177,12 +185,22 @@ public class ExplosionNukeRay { res -= Math.pow(world.getBlock((int)x0, (int)y0, (int)z0).getExplosionResistance(null), 1.25); else res -= Math.pow(Blocks.air.getExplosionResistance(null), 1.25); + + /* + * Blast resistance calculations are still done to preserve the general shape, + * but if the blast were to be stopped within this range we go through with it anyway. + * There is currently no blast resistance limit on this, could change in the future. + */ + boolean inOverrideRange = this.overrideRange >= length; - if(res > 0 && world.getBlock((int)x0, (int)y0, (int)z0) != Blocks.air) { + if((res > 0 || inOverrideRange) && world.getBlock((int)x0, (int)y0, (int)z0) != Blocks.air) { lastPos = new FloatTriplet(x0, y0, z0); } - if(res <= 0 || i + 1 >= this.length) { + /* + * Only stop if we are either out of range or if the remaining strength is 0 while being outside the override range + */ + if((res <= 0 && !inOverrideRange) || i + 1 >= this.length) { if(affectedBlocks.size() < Integer.MAX_VALUE - 100 && lastPos != null) affectedBlocks.add(new FloatTriplet(lastPos.xCoord, lastPos.yCoord, lastPos.zCoord)); break; From bc3fd09b4407b3a4237f2bf2fbffe3fb094a5717 Mon Sep 17 00:00:00 2001 From: Boblet Date: Mon, 29 Nov 2021 16:22:22 +0100 Subject: [PATCH 2/3] buffed combustion engines and geothermal w/ lava, more slime w/ beheader --- .../java/com/hbm/handler/WeaponAbility.java | 6 ++ .../hbm/inventory/gui/GUIMachineDiesel.java | 29 ++++---- .../hbm/inventory/gui/GUIMachineSelenium.java | 39 +++++----- .../machine/TileEntityMachineAmgen.java | 71 ++++++++----------- .../machine/TileEntityMachineDiesel.java | 35 +++++---- .../TileEntityMachineSeleniumEngine.java | 45 ++++++------ 6 files changed, 113 insertions(+), 112 deletions(-) diff --git a/src/main/java/com/hbm/handler/WeaponAbility.java b/src/main/java/com/hbm/handler/WeaponAbility.java index 6500993b3..e4fbd8d57 100644 --- a/src/main/java/com/hbm/handler/WeaponAbility.java +++ b/src/main/java/com/hbm/handler/WeaponAbility.java @@ -19,7 +19,9 @@ import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.item.EntityXPOrb; import net.minecraft.entity.monster.EntityCreeper; +import net.minecraft.entity.monster.EntityMagmaCube; import net.minecraft.entity.monster.EntitySkeleton; +import net.minecraft.entity.monster.EntitySlime; import net.minecraft.entity.monster.EntityZombie; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; @@ -287,6 +289,10 @@ public abstract class WeaponAbility { living.entityDropItem(new ItemStack(Items.skull, 1, 2), 0.0F); } else if(living instanceof EntityCreeper) { living.entityDropItem(new ItemStack(Items.skull, 1, 4), 0.0F); + } else if(living instanceof EntityMagmaCube) { + living.entityDropItem(new ItemStack(Items.magma_cream, 3), 0.0F); + } else if(living instanceof EntitySlime) { + living.entityDropItem(new ItemStack(Items.slime_ball, 3), 0.0F); } else if(living instanceof EntityPlayer) { ItemStack head = new ItemStack(Items.skull, 1, 3); diff --git a/src/main/java/com/hbm/inventory/gui/GUIMachineDiesel.java b/src/main/java/com/hbm/inventory/gui/GUIMachineDiesel.java index 6e35ccd15..f102ba32e 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIMachineDiesel.java +++ b/src/main/java/com/hbm/inventory/gui/GUIMachineDiesel.java @@ -1,15 +1,23 @@ package com.hbm.inventory.gui; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Map.Entry; + import org.lwjgl.opengl.GL11; +import com.hbm.handler.FluidTypeHandler.FluidType; import com.hbm.inventory.FluidTank; import com.hbm.inventory.container.ContainerMachineDiesel; import com.hbm.lib.RefStrings; import com.hbm.tileentity.machine.TileEntityMachineDiesel; +import com.hbm.util.I18nUtil; import net.minecraft.client.Minecraft; import net.minecraft.client.resources.I18n; import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.ResourceLocation; public class GUIMachineDiesel extends GuiInfoContainer { @@ -32,20 +40,17 @@ public class GUIMachineDiesel extends GuiInfoContainer { diFurnace.tank.renderTankInfo(this, mouseX, mouseY, guiLeft + 80, guiTop + 69 - 52, 16, 52); this.drawElectricityInfo(this, mouseX, mouseY, guiLeft + 152, guiTop + 69 - 52, 16, 52, diFurnace.power, diFurnace.powerCap); - String[] text = new String[] { "Accepted Fuels:", - " Diesel (500 HE/t)", - " Petroil (300 HE/t)", - " Biofuel (400 HE/t)", - " Ethanol (200 HE/t)", - " LPG (450 HE/t)", - " Hydrogen (10 HE/t)", - " Leaded Gasoline (1500 HE/t)", - " NITAN Superfuel (5000 HE/t)" }; - this.drawCustomInfoStat(mouseX, mouseY, guiLeft - 16, guiTop + 36, 16, 16, guiLeft - 8, guiTop + 36 + 16, text); + List text = new ArrayList(); + text.add(EnumChatFormatting.YELLOW + "Accepted Fuels:"); + + for(Entry entry : TileEntityMachineDiesel.fuels.entrySet()) { + text.add(" " + I18nUtil.resolveKey(entry.getKey().getUnlocalizedName()) + " (" + entry.getValue() + " HE/t)"); + } + this.drawCustomInfoStat(mouseX, mouseY, guiLeft - 16, guiTop + 36, 16, 16, guiLeft - 8, guiTop + 36 + 16, text.toArray(new String[0])); String[] text1 = new String[] { "Fuel consumption rate:", - " 10 mB/t", - " 200 mB/s", + " 1 mB/t", + " 20 mB/s", "(Consumption rate is constant)" }; this.drawCustomInfoStat(mouseX, mouseY, guiLeft - 16, guiTop + 36 + 16, 16, 16, guiLeft - 8, guiTop + 36 + 16, text1); diff --git a/src/main/java/com/hbm/inventory/gui/GUIMachineSelenium.java b/src/main/java/com/hbm/inventory/gui/GUIMachineSelenium.java index 14ddaaf3a..6c254346c 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIMachineSelenium.java +++ b/src/main/java/com/hbm/inventory/gui/GUIMachineSelenium.java @@ -1,15 +1,23 @@ package com.hbm.inventory.gui; +import java.util.ArrayList; +import java.util.List; +import java.util.Map.Entry; + import org.lwjgl.opengl.GL11; +import com.hbm.handler.FluidTypeHandler.FluidType; import com.hbm.inventory.FluidTank; import com.hbm.inventory.container.ContainerMachineSelenium; import com.hbm.lib.RefStrings; +import com.hbm.tileentity.machine.TileEntityMachineDiesel; import com.hbm.tileentity.machine.TileEntityMachineSeleniumEngine; +import com.hbm.util.I18nUtil; import net.minecraft.client.Minecraft; import net.minecraft.client.resources.I18n; import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.ResourceLocation; public class GUIMachineSelenium extends GuiInfoContainer { @@ -31,26 +39,23 @@ public class GUIMachineSelenium extends GuiInfoContainer { diFurnace.tank.renderTankInfo(this, mouseX, mouseY, guiLeft + 116, guiTop + 18, 16, 52); this.drawElectricityInfo(this, mouseX, mouseY, guiLeft + 8, guiTop + 108, 160, 16, diFurnace.power, diFurnace.powerCap); + + List text = new ArrayList(); + text.add(EnumChatFormatting.YELLOW + "Accepted Fuels:"); - String[] text = new String[] { "Accepted Fuels:", - " Industrial Oil (50 HE/t)", - " Heating Oil (75 HE/t)", - " Hydrogen (500 HE/t)", - " Diesel (225 HE/t)", - " Kerosene (300 HE/t)", - " Reclaimed Oil (100 HE/t)", - " Petroil (125 HE/t)", - " Biofuel (200 HE/t)", - " Leaded Gasoline (700 HE/t)", - " NITAN Superfuel (2500 HE/t)", - "(These numbers are base values,", - "actual output is based", - "on piston count)" }; - this.drawCustomInfoStat(mouseX, mouseY, guiLeft - 16, guiTop + 36, 16, 16, guiLeft - 8, guiTop + 36 + 16, text); + for(Entry entry : TileEntityMachineDiesel.fuels.entrySet()) { + text.add(" " + I18nUtil.resolveKey(entry.getKey().getUnlocalizedName()) + " (" + entry.getValue() + " HE/t)"); + } + + text.add(EnumChatFormatting.ITALIC + "(These numbers are base values,"); + text.add(EnumChatFormatting.ITALIC + "actual output is based"); + text.add(EnumChatFormatting.ITALIC + "on piston count)"); + + this.drawCustomInfoStat(mouseX, mouseY, guiLeft - 16, guiTop + 36, 16, 16, guiLeft - 8, guiTop + 36 + 16, text.toArray(new String[0])); String[] text1 = new String[] { "Fuel consumption rate:", - " 5 mB/t", - " 100 mB/s", + " 1 mB/t", + " 20 mB/s", "(Consumption rate per piston)" }; this.drawCustomInfoStat(mouseX, mouseY, guiLeft - 16, guiTop + 36 + 16, 16, 16, guiLeft - 8, guiTop + 36 + 16, text1); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAmgen.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAmgen.java index 67bf9bc15..c3326f584 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAmgen.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAmgen.java @@ -28,52 +28,12 @@ public class TileEntityMachineAmgen extends TileEntity implements IEnergyGenerat if(block == ModBlocks.machine_amgen) { float rad = ChunkRadiationManager.proxy.getRadiation(worldObj, xCoord, yCoord, zCoord); - power += rad; - ChunkRadiationManager.proxy.decrementRad(worldObj, xCoord, yCoord, zCoord, 5F); } else if(block == ModBlocks.machine_geo) { - - Block b = worldObj.getBlock(xCoord, yCoord - 1, zCoord); - - if(b == ModBlocks.geysir_water) { - power += 75; - } else if(b == ModBlocks.geysir_chlorine) { - power += 100; - } else if(b == ModBlocks.geysir_vapor) { - power += 50; - } else if(b == ModBlocks.geysir_nether) { - power += 500; - } else if(b == Blocks.lava) { - power += 100; - - if(worldObj.rand.nextInt(1200) == 0) { - worldObj.setBlock(xCoord, yCoord - 1, zCoord, Blocks.obsidian); - } - } else if(b == Blocks.flowing_lava) { - power += 25; - - if(worldObj.rand.nextInt(600) == 0) { - worldObj.setBlock(xCoord, yCoord - 1, zCoord, Blocks.cobblestone); - } - } - - b = worldObj.getBlock(xCoord, yCoord + 1, zCoord); - - if(b == Blocks.lava) { - power += 100; - - if(worldObj.rand.nextInt(1200) == 0) { - worldObj.setBlock(xCoord, yCoord + 1, zCoord, Blocks.obsidian); - } - } else if(b == Blocks.flowing_lava) { - power += 25; - - if(worldObj.rand.nextInt(600) == 0) { - worldObj.setBlock(xCoord, yCoord + 1, zCoord, Blocks.cobblestone); - } - } + this.checkGeoInteraction(xCoord, yCoord + 1, zCoord); + this.checkGeoInteraction(xCoord, yCoord - 1, zCoord); } if(power > maxPower) @@ -83,6 +43,33 @@ public class TileEntityMachineAmgen extends TileEntity implements IEnergyGenerat this.sendPower(worldObj, xCoord + dir.offsetX, yCoord + dir.offsetY, zCoord + dir.offsetZ, dir); } } + + private void checkGeoInteraction(int x, int y, int z) { + + Block b = worldObj.getBlock(x, y, z); + + if(b == ModBlocks.geysir_water) { + power += 75; + } else if(b == ModBlocks.geysir_chlorine) { + power += 100; + } else if(b == ModBlocks.geysir_vapor) { + power += 50; + } else if(b == ModBlocks.geysir_nether) { + power += 500; + } else if(b == Blocks.lava) { + power += 100; + + if(worldObj.rand.nextInt(6000) == 0) { + worldObj.setBlock(xCoord, yCoord - 1, zCoord, Blocks.obsidian); + } + } else if(b == Blocks.flowing_lava) { + power += 25; + + if(worldObj.rand.nextInt(3000) == 0) { + worldObj.setBlock(xCoord, yCoord - 1, zCoord, Blocks.cobblestone); + } + } + } @Override public long getPower() { diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineDiesel.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineDiesel.java index 70935b516..64d34b260 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineDiesel.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineDiesel.java @@ -1,6 +1,7 @@ package com.hbm.tileentity.machine; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import com.hbm.handler.FluidTypeHandler.FluidType; @@ -132,25 +133,23 @@ public class TileEntityMachineDiesel extends TileEntityMachineBase implements IE return getHEFromFuel() > 0; } + public static final HashMap fuels = new HashMap(); + + static { + fuels.put(FluidType.HYDROGEN, 10); + fuels.put(FluidType.DIESEL, 500); + fuels.put(FluidType.PETROIL, 300); + fuels.put(FluidType.BIOFUEL, 400); + fuels.put(FluidType.GASOLINE, 1500); + fuels.put(FluidType.NITAN, 5000); + fuels.put(FluidType.LPG, 450); + fuels.put(FluidType.ETHANOL, 200); + } + public int getHEFromFuel() { FluidType type = tank.getTankType(); - if(type.name().equals(FluidType.HYDROGEN.name())) - return 10; - if(type.name().equals(FluidType.DIESEL.name())) - return 500; - if(type.name().equals(FluidType.PETROIL.name())) - return 300; - if(type.name().equals(FluidType.BIOFUEL.name())) - return 400; - if(type.name().equals(FluidType.GASOLINE.name())) - return 1500; - if(type.name().equals(FluidType.NITAN.name())) - return 5000; - if(type.name().equals(FluidType.LPG.name())) - return 450; - if(type.name().equals(FluidType.ETHANOL.name())) - return 200; - return 0; + Integer value = fuels.get(type); + return value != null ? value : null; } public void generate() { @@ -166,7 +165,7 @@ public class TileEntityMachineDiesel extends TileEntityMachineBase implements IE if (soundCycle >= 3) soundCycle = 0; - tank.setFill(tank.getFill() - 10); + tank.setFill(tank.getFill() - 1); if (tank.getFill() < 0) tank.setFill(0); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSeleniumEngine.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSeleniumEngine.java index 51f6c505f..492cd7a88 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSeleniumEngine.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSeleniumEngine.java @@ -1,6 +1,7 @@ package com.hbm.tileentity.machine; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import com.hbm.handler.FluidTypeHandler.FluidType; @@ -255,29 +256,27 @@ public class TileEntityMachineSeleniumEngine extends TileEntity implements ISide return getHEFromFuel() > 0; } + public static final HashMap fuels = new HashMap(); + + static { + fuels.put(FluidType.SMEAR, 50); + fuels.put(FluidType.HEATINGOIL, 75); + fuels.put(FluidType.HYDROGEN, 5); + fuels.put(FluidType.DIESEL, 225); + fuels.put(FluidType.KEROSENE, 300); + fuels.put(FluidType.RECLAIMED, 100); + fuels.put(FluidType.PETROIL, 125); + fuels.put(FluidType.BIOFUEL, 200); + fuels.put(FluidType.GASOLINE, 700); + fuels.put(FluidType.NITAN, 2500); + fuels.put(FluidType.LPG, 200); + fuels.put(FluidType.ETHANOL, 75); + } + public int getHEFromFuel() { FluidType type = tank.getTankType(); - if(type.name().equals(FluidType.SMEAR.name())) - return 50; - if(type.name().equals(FluidType.HEATINGOIL.name())) - return 75; - if(type.name().equals(FluidType.HYDROGEN.name())) - return 5; - if(type.name().equals(FluidType.DIESEL.name())) - return 225; - if(type.name().equals(FluidType.KEROSENE.name())) - return 300; - if(type.name().equals(FluidType.RECLAIMED.name())) - return 100; - if(type.name().equals(FluidType.PETROIL.name())) - return 125; - if(type.name().equals(FluidType.BIOFUEL.name())) - return 200; - if(type.name().equals(FluidType.GASOLINE.name())) - return 700; - if(type.name().equals(FluidType.NITAN.name())) - return 2500; - return 0; + Integer value = fuels.get(type); + return value != null ? value : null; } public void generate() { @@ -294,8 +293,8 @@ public class TileEntityMachineSeleniumEngine extends TileEntity implements ISide if (soundCycle >= 3) soundCycle = 0; - tank.setFill(tank.getFill() - this.pistonCount * 5); - if (tank.getFill() < 0) + tank.setFill(tank.getFill() - this.pistonCount); + if(tank.getFill() < 0) tank.setFill(0); power += getHEFromFuel() * Math.pow(this.pistonCount, 1.15D); From c51b2bfb936eec8ba77f9284b1497f51292ad66a Mon Sep 17 00:00:00 2001 From: Bob Date: Mon, 29 Nov 2021 22:10:20 +0100 Subject: [PATCH 3/3] small pylon connector --- src/main/java/com/hbm/blocks/ModBlocks.java | 3 + .../hbm/blocks/network/ConnectorRedWire.java | 20 +++ .../com/hbm/blocks/network/PylonRedWire.java | 6 +- .../entity/missile/EntityMissileDrill.java | 2 +- .../entity/projectile/EntityBulletBase.java | 4 +- src/main/java/com/hbm/main/ClientProxy.java | 2 + .../render/tileentity/RenderConnector.java | 28 ++++ .../hbm/render/tileentity/RenderPylon.java | 75 +--------- .../render/tileentity/RenderPylonBase.java | 136 ++++++++++++++++++ .../java/com/hbm/tileentity/TileMappings.java | 1 + .../network/TileEntityConnector.java | 22 +++ .../tileentity/network/TileEntityPylon.java | 2 +- .../hbm/textures/blocks/stone_gneiss_dark.png | Bin 0 -> 725 bytes 13 files changed, 222 insertions(+), 79 deletions(-) create mode 100644 src/main/java/com/hbm/blocks/network/ConnectorRedWire.java create mode 100644 src/main/java/com/hbm/render/tileentity/RenderConnector.java create mode 100644 src/main/java/com/hbm/render/tileentity/RenderPylonBase.java create mode 100644 src/main/java/com/hbm/tileentity/network/TileEntityConnector.java create mode 100644 src/main/resources/assets/hbm/textures/blocks/stone_gneiss_dark.png diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index b2745e6d0..f10989622 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -690,6 +690,7 @@ public class ModBlocks { public static Block red_wire_coated; public static Block red_cable; + public static Block red_connector; public static Block red_pylon; public static Block cable_switch; public static Block machine_detector; @@ -1790,6 +1791,7 @@ public class ModBlocks { red_wire_coated = new WireCoated(Material.iron).setBlockName("red_wire_coated").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":red_wire_coated"); red_cable = new BlockCable(Material.iron).setBlockName("red_cable").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":cable_neo"); rf_cable = new BlockRFCable(Material.iron).setBlockName("rf_cable").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":rf_cable_icon"); + red_connector = new ConnectorRedWire(Material.iron).setBlockName("red_connector").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":red_connector"); red_pylon = new PylonRedWire(Material.iron).setBlockName("red_pylon").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":red_pylon"); cable_switch = new CableSwitch(Material.iron).setBlockName("cable_switch").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":cable_switch_off"); machine_detector = new PowerDetector(Material.iron).setBlockName("machine_detector").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":machine_detector_off"); @@ -2869,6 +2871,7 @@ public class ModBlocks { GameRegistry.registerBlock(red_cable, red_cable.getUnlocalizedName()); GameRegistry.registerBlock(red_wire_coated, red_wire_coated.getUnlocalizedName()); + GameRegistry.registerBlock(red_connector, red_connector.getUnlocalizedName()); GameRegistry.registerBlock(red_pylon, red_pylon.getUnlocalizedName()); GameRegistry.registerBlock(cable_switch, cable_switch.getUnlocalizedName()); GameRegistry.registerBlock(machine_detector, machine_detector.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/blocks/network/ConnectorRedWire.java b/src/main/java/com/hbm/blocks/network/ConnectorRedWire.java new file mode 100644 index 000000000..1eaf9f06c --- /dev/null +++ b/src/main/java/com/hbm/blocks/network/ConnectorRedWire.java @@ -0,0 +1,20 @@ +package com.hbm.blocks.network; + +import com.hbm.tileentity.network.TileEntityConnector; + +import net.minecraft.block.material.Material; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; + +public class ConnectorRedWire extends PylonBase { + + public ConnectorRedWire(Material mat) { + super(mat); + } + + @Override + public TileEntity createNewTileEntity(World world, int meta) { + return new TileEntityConnector(); + } + +} diff --git a/src/main/java/com/hbm/blocks/network/PylonRedWire.java b/src/main/java/com/hbm/blocks/network/PylonRedWire.java index 6cebf526b..552781fd9 100644 --- a/src/main/java/com/hbm/blocks/network/PylonRedWire.java +++ b/src/main/java/com/hbm/blocks/network/PylonRedWire.java @@ -9,12 +9,12 @@ import net.minecraft.world.World; public class PylonRedWire extends PylonBase { - public PylonRedWire(Material p_i45386_1_) { - super(p_i45386_1_); + public PylonRedWire(Material material) { + super(material); } @Override - public TileEntity createNewTileEntity(World p_149915_1_, int p_149915_2_) { + public TileEntity createNewTileEntity(World world, int meta) { return new TileEntityPylon(); } } diff --git a/src/main/java/com/hbm/entity/missile/EntityMissileDrill.java b/src/main/java/com/hbm/entity/missile/EntityMissileDrill.java index 7ee90dc9a..bc860e2e6 100644 --- a/src/main/java/com/hbm/entity/missile/EntityMissileDrill.java +++ b/src/main/java/com/hbm/entity/missile/EntityMissileDrill.java @@ -26,7 +26,7 @@ public class EntityMissileDrill extends EntityMissileBaseAdvanced { public void onImpact() { for(int i = 0; i < 30; i++) { - ExplosionNT explosion = new ExplosionNT(worldObj, this, this.posX, this.posY - 1, this.posZ, 10F); + ExplosionNT explosion = new ExplosionNT(worldObj, this, this.posX, this.posY - i, this.posZ, 10F); explosion.addAllAttrib(ExAttrib.ERRODE); explosion.explode(); //an explosion exploded! } diff --git a/src/main/java/com/hbm/entity/projectile/EntityBulletBase.java b/src/main/java/com/hbm/entity/projectile/EntityBulletBase.java index 50f8fb6c3..5662bcc4e 100644 --- a/src/main/java/com/hbm/entity/projectile/EntityBulletBase.java +++ b/src/main/java/com/hbm/entity/projectile/EntityBulletBase.java @@ -202,8 +202,7 @@ public class EntityBulletBase extends Entity implements IProjectile { return; } - if(this.config.blackPowder) { - this.setDead(); + if(this.config.blackPowder && this.ticksExisted == 1) { for(int i = 0; i < 15; i++) { double mod = rand.nextDouble(); @@ -215,7 +214,6 @@ public class EntityBulletBase extends Entity implements IProjectile { double mod = 0.5; this.worldObj.spawnParticle("flame", this.posX + this.motionX * mod, this.posY + this.motionY * mod, this.posZ + this.motionZ * mod, 0, 0, 0); - return; } if(config.maxAge == 0) { diff --git a/src/main/java/com/hbm/main/ClientProxy.java b/src/main/java/com/hbm/main/ClientProxy.java index a725ce863..71b27a8ef 100644 --- a/src/main/java/com/hbm/main/ClientProxy.java +++ b/src/main/java/com/hbm/main/ClientProxy.java @@ -86,6 +86,7 @@ import com.hbm.tileentity.machine.oil.TileEntityMachinePumpjack; import com.hbm.tileentity.machine.oil.TileEntityMachineRefinery; import com.hbm.tileentity.machine.oil.TileEntitySpacer; import com.hbm.tileentity.machine.rbmk.*; +import com.hbm.tileentity.network.TileEntityConnector; import com.hbm.tileentity.network.TileEntityPylon; import com.hbm.tileentity.turret.*; @@ -236,6 +237,7 @@ public class ClientProxy extends ServerProxy { ClientRegistry.bindTileEntitySpecialRenderer(TileEntityFluidDuct.class, new RenderFluidDuct()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityRFDuct.class, new RenderRFCable()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityPylon.class, new RenderPylon()); + ClientRegistry.bindTileEntitySpecialRenderer(TileEntityConnector.class, new RenderConnector()); //multiblocks ClientRegistry.bindTileEntitySpecialRenderer(TileEntityStructureMarker.class, new RenderStructureMaker()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMultiblock.class, new RenderMultiblock()); diff --git a/src/main/java/com/hbm/render/tileentity/RenderConnector.java b/src/main/java/com/hbm/render/tileentity/RenderConnector.java new file mode 100644 index 000000000..1182553fe --- /dev/null +++ b/src/main/java/com/hbm/render/tileentity/RenderConnector.java @@ -0,0 +1,28 @@ +package com.hbm.render.tileentity; + +import org.lwjgl.opengl.GL11; + +import com.hbm.main.ResourceManager; +import com.hbm.tileentity.network.TileEntityConnector; + +import net.minecraft.tileentity.TileEntity; + +public class RenderConnector extends RenderPylonBase { + + @Override + public void renderTileEntityAt(TileEntity te, double x, double y, double z, float interp) { + TileEntityConnector con = (TileEntityConnector) te; + + GL11.glPushMatrix(); + GL11.glTranslated(x + 0.5, y, z + 0.5); + double s = 0.5; + GL11.glScaled(s, s, s); + bindTexture(ResourceManager.universal); + ResourceManager.barrel.renderAll(); + GL11.glPopMatrix(); + + GL11.glPushMatrix(); + this.renderSingleLine(con, x, y, z); + GL11.glPopMatrix(); + } +} diff --git a/src/main/java/com/hbm/render/tileentity/RenderPylon.java b/src/main/java/com/hbm/render/tileentity/RenderPylon.java index 5fb6ef3af..f700bd3ed 100644 --- a/src/main/java/com/hbm/render/tileentity/RenderPylon.java +++ b/src/main/java/com/hbm/render/tileentity/RenderPylon.java @@ -16,7 +16,7 @@ import net.minecraft.util.MathHelper; import net.minecraft.util.ResourceLocation; import net.minecraft.util.Vec3; -public class RenderPylon extends TileEntitySpecialRenderer { +public class RenderPylon extends RenderPylonBase { private static final ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":" + "textures/models/ModelPylon.png"); @@ -29,83 +29,16 @@ public class RenderPylon extends TileEntitySpecialRenderer { @Override public void renderTileEntityAt(TileEntity te, double x, double y, double z, float f) { TileEntityPylon pyl = (TileEntityPylon)te; + GL11.glPushMatrix(); GL11.glTranslatef((float) x + 0.5F, (float) y + 1.5F - ((1F / 16F) * 14F), (float) z + 0.5F); GL11.glRotatef(180, 0F, 0F, 1F); bindTexture(texture); this.pylon.renderAll(0.0625F); GL11.glPopMatrix(); - GL11.glPushMatrix(); - for(int i = 0; i < pyl.connected.size(); i++) { - - int[] wire = pyl.connected.get(i); - - float wX = (wire[0] - pyl.xCoord) / 2F; - float wY = (wire[1] - pyl.yCoord) / 2F; - float wZ = (wire[2] - pyl.zCoord) / 2F; - - float count = 10; - Vec3 delta = Vec3.createVectorHelper((wire[0] - te.xCoord), (wire[1] - te.yCoord), (wire[2] - te.zCoord)); - - for(float j = 0; j < count; j++) { - - float k = j + 1; - - double ja = j + 0.5D; - double ix = te.xCoord + 0.5 + delta.xCoord / (double)(count * 2) * ja; - double iy = te.yCoord + 0.5 + delta.yCoord / (double)(count * 2) * ja + 5 - Math.sin(j / count * Math.PI * 0.5); - double iz = te.zCoord + 0.5 + delta.zCoord / (double)(count * 2) * ja; - - //te.getWorldObj().spawnParticle("reddust", ix, iy, iz, 0.01 + j * 0.1, 0, 0); - - int brightness = te.getWorldObj().getLightBrightnessForSkyBlocks(MathHelper.floor_double(ix), MathHelper.floor_double(iy), MathHelper.floor_double(iz), 0); - int lX = brightness % 65536; - int lY = brightness / 65536; - OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, (float)lX / 1.0F, (float)lY / 1.0F); - - drawPowerLine( - x + 0.5 + (wX * j / count), - y + 5.4 + (wY * j / count) - Math.sin(j / count * Math.PI * 0.5), - z + 0.5 + (wZ * j / count), - x + 0.5 + (wX * k / count), - y + 5.4 + (wY * k / count) - Math.sin(k / count * Math.PI * 0.5), - z + 0.5 + (wZ * k / count)); - } - } + GL11.glPushMatrix(); + this.renderSingleLine(pyl, x, y, z); GL11.glPopMatrix(); } - - public void drawPowerLine(double x, double y, double z, double a, double b, double c) { - - GL11.glDisable(GL11.GL_TEXTURE_2D); - GL11.glDisable(GL11.GL_LIGHTING); - GL11.glDisable(GL11.GL_CULL_FACE); - Tessellator tessellator = Tessellator.instance; - tessellator.startDrawing(5); - tessellator.setColorOpaque_I(0xBB3311); - tessellator.addVertex(x, y + 0.05F, z); - tessellator.addVertex(x, y - 0.05F, z); - tessellator.addVertex(a, b + 0.05F, c); - tessellator.addVertex(a, b - 0.05F, c); - tessellator.draw(); - tessellator.startDrawing(5); - tessellator.setColorOpaque_I(0xBB3311); - tessellator.addVertex(x + 0.05F, y, z); - tessellator.addVertex(x - 0.05F, y, z); - tessellator.addVertex(a + 0.05F, b, c); - tessellator.addVertex(a - 0.05F, b, c); - tessellator.draw(); - tessellator.startDrawing(5); - tessellator.setColorOpaque_I(0xBB3311); - tessellator.addVertex(x, y, z + 0.05F); - tessellator.addVertex(x, y, z - 0.05F); - tessellator.addVertex(a, b, c + 0.05F); - tessellator.addVertex(a, b, c - 0.05F); - tessellator.draw(); - GL11.glEnable(GL11.GL_LIGHTING); - GL11.glEnable(GL11.GL_TEXTURE_2D); - GL11.glEnable(GL11.GL_CULL_FACE); - } - } diff --git a/src/main/java/com/hbm/render/tileentity/RenderPylonBase.java b/src/main/java/com/hbm/render/tileentity/RenderPylonBase.java new file mode 100644 index 000000000..ef4e3111d --- /dev/null +++ b/src/main/java/com/hbm/render/tileentity/RenderPylonBase.java @@ -0,0 +1,136 @@ +package com.hbm.render.tileentity; + +import org.lwjgl.opengl.GL11; + +import com.hbm.tileentity.network.TileEntityPylonBase; + +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.MathHelper; +import net.minecraft.util.Vec3; +import net.minecraft.world.World; + +public abstract class RenderPylonBase extends TileEntitySpecialRenderer { + + //TODO: adapt this into a more generic form for multi wire pylons + public void renderSingleLine(TileEntityPylonBase pyl, double x, double y, double z) { + + for(int i = 0; i < pyl.connected.size(); i++) { + + int[] wire = pyl.connected.get(i); + TileEntity tile = pyl.getWorldObj().getTileEntity(wire[0], wire[1], wire[2]); + + if(tile instanceof TileEntityPylonBase) { + TileEntityPylonBase pylon = (TileEntityPylonBase) tile; + Vec3 myOffset = pyl.getMountPos(); + Vec3 theirOffset = pylon.getMountPos(); + + double conX0 = pyl.xCoord + myOffset.xCoord; + double conY0 = pyl.yCoord + myOffset.yCoord; + double conZ0 = pyl.zCoord + myOffset.zCoord; + double conX1 = pylon.xCoord + theirOffset.xCoord; + double conY1 = pylon.yCoord + theirOffset.yCoord; + double conZ1 = pylon.zCoord + theirOffset.zCoord; + + double wX = (conX1 - conX0) / 2D; + double wY = (conY1 - conY0) / 2D; + double wZ = (conZ1 - conZ0) / 2D; + + float count = 10; + Vec3 delta = Vec3.createVectorHelper(conX1 - conX0, conY1 - conY0, conZ1 - conZ0); + + for(float j = 0; j < count; j++) { + + float k = j + 1; + + double ja = j + 0.5D; + double ix = conX0 + delta.xCoord / (double)(count * 2) * ja; + double iy = conY0 + delta.yCoord / (double)(count * 2) * ja - Math.sin(j / count * Math.PI * 0.5); + double iz = conZ0 + delta.zCoord / (double)(count * 2) * ja; + + //pylon.getWorldObj().spawnParticle("reddust", ix, iy, iz, 0.01 + j * 0.1, 0, 0); + + int brightness = pyl.getWorldObj().getLightBrightnessForSkyBlocks(MathHelper.floor_double(ix), MathHelper.floor_double(iy), MathHelper.floor_double(iz), 0); + int lX = brightness % 65536; + int lY = brightness / 65536; + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, (float)lX / 1.0F, (float)lY / 1.0F); + + drawPowerLine( + x + myOffset.xCoord + (wX * j / count), + y + myOffset.yCoord + (wY * j / count) - Math.sin(j / count * Math.PI * 0.5), + z + myOffset.zCoord + (wZ * j / count), + x + myOffset.xCoord + (wX * k / count), + y + myOffset.yCoord + (wY * k / count) - Math.sin(k / count * Math.PI * 0.5), + z + myOffset.zCoord + (wZ * k / count)); + } + } + } + } + + public void renderLine(World world, TileEntityPylonBase pyl, double x, double y, double z, double x0, double y0, double z0, double x1, double y1, double z1) { + + GL11.glTranslated(x, y, z); + float count = 10; + + for(float j = 0; j < count; j++) { + + float k = j + 1; + + double deltaX = x1 - x0; + double deltaY = y1 - y0; + double deltaZ = z1 - z0; + + double ja = j + 0.5D; + double ix = pyl.xCoord + x0 + deltaX / (double)(count * 2) * ja; + double iy = pyl.yCoord + y0 + deltaY / (double)(count * 2) * ja - Math.sin(j / count * Math.PI * 0.5); + double iz = pyl.zCoord + z0 + deltaZ / (double)(count * 2) * ja; + + int brightness = world.getLightBrightnessForSkyBlocks(MathHelper.floor_double(ix), MathHelper.floor_double(iy), MathHelper.floor_double(iz), 0); + int lX = brightness % 65536; + int lY = brightness / 65536; + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, (float)lX / 1.0F, (float)lY / 1.0F); + + drawPowerLine( + x0 + (deltaX * j / count), + y0 + (deltaY * j / count) - Math.sin(j / count * Math.PI * 0.5), + z0 + (deltaZ * j / count), + x0 + (deltaX * k / count), + y0 + (deltaY * k / count) - Math.sin(k / count * Math.PI * 0.5), + z0 + (deltaZ * k / count)); + } + } + + public void drawPowerLine(double x, double y, double z, double a, double b, double c) { + + GL11.glDisable(GL11.GL_TEXTURE_2D); + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glDisable(GL11.GL_CULL_FACE); + Tessellator tessellator = Tessellator.instance; + tessellator.startDrawing(5); + tessellator.setColorOpaque_I(0xBB3311); + tessellator.addVertex(x, y + 0.05F, z); + tessellator.addVertex(x, y - 0.05F, z); + tessellator.addVertex(a, b + 0.05F, c); + tessellator.addVertex(a, b - 0.05F, c); + tessellator.draw(); + tessellator.startDrawing(5); + tessellator.setColorOpaque_I(0xBB3311); + tessellator.addVertex(x + 0.05F, y, z); + tessellator.addVertex(x - 0.05F, y, z); + tessellator.addVertex(a + 0.05F, b, c); + tessellator.addVertex(a - 0.05F, b, c); + tessellator.draw(); + tessellator.startDrawing(5); + tessellator.setColorOpaque_I(0xBB3311); + tessellator.addVertex(x, y, z + 0.05F); + tessellator.addVertex(x, y, z - 0.05F); + tessellator.addVertex(a, b, c + 0.05F); + tessellator.addVertex(a, b, c - 0.05F); + tessellator.draw(); + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glEnable(GL11.GL_TEXTURE_2D); + GL11.glEnable(GL11.GL_CULL_FACE); + } +} diff --git a/src/main/java/com/hbm/tileentity/TileMappings.java b/src/main/java/com/hbm/tileentity/TileMappings.java index 5001d7ef2..00b8cd714 100644 --- a/src/main/java/com/hbm/tileentity/TileMappings.java +++ b/src/main/java/com/hbm/tileentity/TileMappings.java @@ -73,6 +73,7 @@ public class TileMappings { put(TileEntityGasDuct.class, "tileentity_gas_duct"); put(TileEntityGasDuctSolid.class, "tileentity_gas_duct_solid"); put(TileEntityMachineRTG.class, "tileentity_machine_rtg"); + put(TileEntityConnector.class, "tileentity_connector_redwire"); put(TileEntityPylon.class, "tileentity_pylon_redwire"); put(TileEntityStructureMarker.class, "tileentity_structure_marker"); put(TileEntityMachineMiningDrill.class, "tileentity_mining_drill"); diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityConnector.java b/src/main/java/com/hbm/tileentity/network/TileEntityConnector.java new file mode 100644 index 000000000..e51fd5f40 --- /dev/null +++ b/src/main/java/com/hbm/tileentity/network/TileEntityConnector.java @@ -0,0 +1,22 @@ +package com.hbm.tileentity.network; + +import net.minecraft.util.Vec3; + +public class TileEntityConnector extends TileEntityPylonBase { + + @Override + public ConnectionType getConnectionType() { + return ConnectionType.SINGLE; + } + + @Override + public Vec3 getMountPos() { + return Vec3.createVectorHelper(0.5, 0.5, 0.5); + } + + @Override + public double getMaxWireLength() { + return 10; + } + +} diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityPylon.java b/src/main/java/com/hbm/tileentity/network/TileEntityPylon.java index b986a5632..50ee6d7bc 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityPylon.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityPylon.java @@ -14,7 +14,7 @@ public class TileEntityPylon extends TileEntityPylonBase { @Override public Vec3 getMountPos() { - return Vec3.createVectorHelper(xCoord + 0.5, yCoord + 5.4, zCoord + 0.5); + return Vec3.createVectorHelper(0.5, 5.4, 0.5); } @Override diff --git a/src/main/resources/assets/hbm/textures/blocks/stone_gneiss_dark.png b/src/main/resources/assets/hbm/textures/blocks/stone_gneiss_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..096e2657359b5bfdb591c0727a07c09a4d1c3e80 GIT binary patch literal 725 zcmV;`0xJE9P)DiaV}43d=~E~J7k1ec0?LD%^Q z_iwm#=Wh_YapR`Y2!R%ad^FNxpwI~hQl#`QE}eVt*~~DUGjrbeIa6|7chTu|7!HTD zS}o4c&&jfk!^1-?%i`hTfwi?YMxzmFn$qw00cf>a+}zwya$R>31OcXLBBf**VHm2t z5CVWCN$@<6TCIlTIHYOH&&|!vU+?elOs7*`Utbvv2CS~G0?_aGX*3!nNy2+9=uyIpFv8kS|z>-CsUrvS9uZOTi7@;v9?ux%TF@p!C?9mk>B zY~uSq06`E?9*@VW=;`T6UF7>dx~>DD>pDeIP^nb-{QN{psfd+a*Ig7vfs_)@^Kcvo z-}hC5Wmz7D5PxxeVZW9spNYS3EyI17H{iQcAkrE&!EEg)j_}Qev7W zLWn;YJ6vn0grPiV-xVyVk1NQdzraUO^?CdN69LG@!|F+*~G?d9%mJtL2 z$H&K9US9I}_(-YUZZ9U23A(P6=eb&k!yy0{7Z?9^vpjFLTGZ=x%0Uote}9hpE$gswB_z==FL4XqtwmX>4zAV;BZ;93!P93`1(Q z+TTgc^Bmi@v29yn(si9Eits#-AP9)#7=VL=18#3`5kl}Az*}50<}P3i00000NkvXX Hu0mjfD^XU! literal 0 HcmV?d00001