From 56698989eded7ce69d341518b8baecefdc4e1f6c Mon Sep 17 00:00:00 2001 From: Bob Date: Fri, 30 Oct 2020 23:03:43 +0100 Subject: [PATCH] even morer igen work --- .../hbm/textures/gui/generators/gui_igen.png | Bin 4583 -> 4654 bytes .../hbm/textures/items/spongebob_macaroni.png | Bin 0 -> 427 bytes .../hbm/blocks/machine/MachineIGenerator.java | 68 +++++++- .../com/hbm/inventory/gui/GUIIGenerator.java | 27 ++- .../render/tileentity/RenderIGenerator.java | 26 ++- .../machine/TileEntityMachineIGenerator.java | 154 +++++++++++++++--- 6 files changed, 240 insertions(+), 35 deletions(-) create mode 100644 src/main/java/assets/hbm/textures/items/spongebob_macaroni.png diff --git a/src/main/java/assets/hbm/textures/gui/generators/gui_igen.png b/src/main/java/assets/hbm/textures/gui/generators/gui_igen.png index d7caba897d0072ac206a2769f2e53b1c00900c5d..7085550a2e9848610bff2dbb9f370ab991141f9b 100644 GIT binary patch literal 4654 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 diff --git a/src/main/java/assets/hbm/textures/items/spongebob_macaroni.png b/src/main/java/assets/hbm/textures/items/spongebob_macaroni.png new file mode 100644 index 0000000000000000000000000000000000000000..28b2341dacb97451dc5283c6a65a73259301595d GIT binary patch literal 427 zcmV;c0aX5pP)XY{(4yKv&HO|&o|xj&;&ial_FSO@66ctd1{ybJceHD2=Nfuy;cghRiIPf zU24Zy8AKnq0f>j9*uB= 12) + return new TileEntityMachineIGenerator(); + + if(meta >= extra) + return new TileEntityProxyCombo(false, true, true); + + return null; } @Override @@ -44,7 +55,16 @@ public class MachineIGenerator extends BlockDummyable { return true; } else if(!player.isSneaking()) { - FMLNetworkHandler.openGui(player, MainRegistry.instance, ModBlocks.guiID_machine_industrial_generator, world, x, y, z); + int[] pos = this.findCore(world, x, y, z); + + if(pos == null) + return false; + + TileEntityMachineIGenerator gen = (TileEntityMachineIGenerator)world.getTileEntity(pos[0], pos[1], pos[2]); + + if(gen != null) + FMLNetworkHandler.openGui(player, MainRegistry.instance, ModBlocks.guiID_machine_industrial_generator, world, pos[0], pos[1], pos[2]); + return true; } else { return false; @@ -53,11 +73,49 @@ public class MachineIGenerator extends BlockDummyable { @Override public int[] getDimensions() { - return new int [] {0,0,0,0,0,0}; + return new int [] {1,0,2,2,2,4}; } @Override public int getOffset() { - return 1; + return 2; + } + + protected boolean checkRequirement(World world, int x, int y, int z, ForgeDirection dir, int o) { + + if(!MultiblockHandlerXR.checkSpace(world, x + dir.offsetX * o , y + dir.offsetY * o, z + dir.offsetZ * o, getDimensions(), x, y, z, dir)) + return false; + if(!MultiblockHandlerXR.checkSpace(world, x + dir.offsetX * o , y + dir.offsetY * o, z + dir.offsetZ * o, new int [] {5,0,2,2,8,-2}, x, y, z, dir)) + return false; + if(!MultiblockHandlerXR.checkSpace(world, x + dir.offsetX * o , y + dir.offsetY * o, z + dir.offsetZ * o, new int [] {4,0,2,2,-4,8}, x, y, z, dir)) + return false; + if(!MultiblockHandlerXR.checkSpace(world, x + dir.offsetX * o , y + dir.offsetY * o, z + dir.offsetZ * o, new int [] {3,-2,1,1,-1,3}, x, y, z, dir)) + return false; + if(!MultiblockHandlerXR.checkSpace(world, x + dir.offsetX * o , y + dir.offsetY * o, z + dir.offsetZ * o, new int [] {4,-2,1,1,1,0}, x, y, z, dir)) + return false; + + return true; + } + + protected void fillSpace(World world, int x, int y, int z, ForgeDirection dir, int o) { + + MultiblockHandlerXR.fillSpace(world, x + dir.offsetX * o , y + dir.offsetY * o, z + dir.offsetZ * o, getDimensions(), this, dir); + MultiblockHandlerXR.fillSpace(world, x + dir.offsetX * o , y + dir.offsetY * o, z + dir.offsetZ * o, new int [] {5,0,2,2,8,-2}, this, dir); + MultiblockHandlerXR.fillSpace(world, x + dir.offsetX * o , y + dir.offsetY * o, z + dir.offsetZ * o, new int [] {4,0,2,2,-4,8}, this, dir); + MultiblockHandlerXR.fillSpace(world, x + dir.offsetX * o , y + dir.offsetY * o, z + dir.offsetZ * o, new int [] {3,-2,1,1,-1,3}, this, dir); + MultiblockHandlerXR.fillSpace(world, x + dir.offsetX * o , y + dir.offsetY * o, z + dir.offsetZ * o, new int [] {4,-2,1,1,1,0}, this, dir); + + int[] rot = MultiblockHandlerXR.rotate(new int [] {1,0,2,2,8,8}, dir); + + for(int iy = 0; iy <= 1; iy++) { + for(int ix = -rot[4]; ix <= rot[5]; ix++) { + for(int iz = -rot[2]; iz <= rot[3]; iz++) { + + if(ix == -rot[4] || ix == rot[5] || iz == -rot[2] || iz == rot[3]) { + this.makeExtra(world, x + dir.offsetX * o + ix, y + iy, z + dir.offsetZ * o + iz); + } + } + } + } } } diff --git a/src/main/java/com/hbm/inventory/gui/GUIIGenerator.java b/src/main/java/com/hbm/inventory/gui/GUIIGenerator.java index 4be6bf1b6..5457f201d 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIIGenerator.java +++ b/src/main/java/com/hbm/inventory/gui/GUIIGenerator.java @@ -4,6 +4,7 @@ import org.lwjgl.input.Mouse; import org.lwjgl.opengl.GL11; import com.hbm.inventory.container.ContainerIGenerator; +import com.hbm.lib.Library; import com.hbm.lib.RefStrings; import com.hbm.packet.AuxButtonPacket; import com.hbm.packet.PacketDispatcher; @@ -47,6 +48,13 @@ public class GUIIGenerator extends GuiInfoContainer { PacketDispatcher.wrapper.sendToServer(new AuxButtonPacket(igen.xCoord, igen.yCoord, igen.zCoord, dial, 2)); caughtMouse = false; } + + this.drawCustomInfoStat(x, y, guiLeft + 76, guiTop + 20, 36, 12, x, y, new String[] { (igen.temperature + 300) + "K" }); + this.drawCustomInfoStat(x, y, guiLeft + 76, guiTop + 56, 36, 12, x, y, new String[] { (Math.round((igen.torque * igen.animSpeed / (360D * 20D)) * 10D) / 10D) + "RPM" }); + this.drawCustomInfoStat(x, y, guiLeft + 76, guiTop + 92, 36, 12, x, y, new String[] { Library.getShortNumber(igen.power) + "HE" }); + this.drawCustomInfoStat(x, y, guiLeft + 40, guiTop + 26, 18, 18, x, y, new String[] { (igen.burnTime / 20) + "s" }); + this.drawCustomInfoStat(x, y, guiLeft + 24, guiTop + 64, 14, 14, x, y, new String[] { "Add pellet to stack" }); + this.drawCustomInfoStat(x, y, guiLeft + 24, guiTop + 100, 14, 14, x, y, new String[] { "Take pellet from stack" }); igen.tanks[0].renderTankInfo(this, x, y, guiLeft + 148, guiTop + 26, 18, 18); igen.tanks[1].renderTankInfo(this, x, y, guiLeft + 148, guiTop + 62, 18, 18); @@ -77,8 +85,6 @@ public class GUIIGenerator extends GuiInfoContainer { this.fontRendererObj.drawString(name, this.xSize / 2 - this.fontRendererObj.getStringWidth(name) / 2, 6, 4210752); this.fontRendererObj.drawString(I18n.format("container.inventory"), 14, this.ySize - 96 + 2, 4210752); - this.fontRendererObj.drawString(igen.getConversion() + "", 100, this.ySize - 96 + 2, 0xffffff); - this.fontRendererObj.drawString(igen.getBrake() + "", 100, this.ySize - 96 + 12, 0xffffff); } @Override @@ -93,6 +99,23 @@ public class GUIIGenerator extends GuiInfoContainer { drawTexturedModalRect(guiLeft + 6, guiTop + 106 - 4 * i, 188, igen.pellets[i].offset, 14, 9); } + for(int i = 0; i < 3; i++) { + if(igen.tanks[i].getFill() > 0) { + + int hex = igen.tanks[i].getTankType().getColor(); + + int r = (hex & 0xFF0000) >> 16; + int g = (hex & 0xFF00) >> 8; + int b = (hex & 0xFF); + + GL11.glColor3f(r / 256F, g / 256F, b / 256F); + + drawTexturedModalRect(guiLeft + 149, guiTop + 39 + 36 * i, 218, 0, 16, 4); + } + } + + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + drawDial(x, y); GaugeUtil.renderGauge(Gauge.BOW_SMALL, guiLeft + 40, guiTop + 26, this.zLevel, igen.getSolidGauge()); diff --git a/src/main/java/com/hbm/render/tileentity/RenderIGenerator.java b/src/main/java/com/hbm/render/tileentity/RenderIGenerator.java index 9e920a763..f4391c3c6 100644 --- a/src/main/java/com/hbm/render/tileentity/RenderIGenerator.java +++ b/src/main/java/com/hbm/render/tileentity/RenderIGenerator.java @@ -2,10 +2,12 @@ package com.hbm.render.tileentity; import org.lwjgl.opengl.GL11; +import com.hbm.blocks.BlockDummyable; import com.hbm.main.ResourceManager; import com.hbm.render.util.BeamPronter; import com.hbm.render.util.BeamPronter.EnumBeamType; import com.hbm.render.util.BeamPronter.EnumWaveType; +import com.hbm.tileentity.machine.TileEntityMachineIGenerator; import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; import net.minecraft.tileentity.TileEntity; @@ -18,6 +20,16 @@ public class RenderIGenerator extends TileEntitySpecialRenderer { GL11.glPushMatrix(); GL11.glTranslated(x + 0.5D, y, z + 0.5D); + switch(te.getBlockMetadata() - BlockDummyable.offset) + { + case 2: GL11.glRotatef(90, 0F, 1F, 0F); break; + case 4: GL11.glRotatef(180, 0F, 1F, 0F); break; + case 3: GL11.glRotatef(270, 0F, 1F, 0F); break; + case 5: GL11.glRotatef(0, 0F, 1F, 0F); break; + } + + TileEntityMachineIGenerator igen = (TileEntityMachineIGenerator)te; + GL11.glEnable(GL11.GL_LIGHTING); GL11.glDisable(GL11.GL_CULL_FACE); GL11.glShadeModel(GL11.GL_SMOOTH); @@ -25,7 +37,7 @@ public class RenderIGenerator extends TileEntitySpecialRenderer { bindTexture(ResourceManager.igen_tex); ResourceManager.igen.renderPart("Base"); - float angle = System.currentTimeMillis() * 1 % 360; + float angle = igen.prevRotation + (igen.rotation - igen.prevRotation) * f; float px = 0.0625F; float sine = (float) Math.sin(Math.toRadians(angle)); float cosine = (float) Math.cos(Math.toRadians(angle)); @@ -96,16 +108,16 @@ public class RenderIGenerator extends TileEntitySpecialRenderer { GL11.glPopMatrix(); GL11.glTranslated(-0.75, 5.5625, -7); - for(int i = 0; i < 2; i++) { - BeamPronter.prontBeam(Vec3.createVectorHelper(1.5, 0, 0), EnumWaveType.RANDOM, EnumBeamType.LINE, 0x8080ff, 0x0000ff, (int)te.getWorldObj().getTotalWorldTime() % 1000 + i, 5, px * 4, 0, 0); - BeamPronter.prontBeam(Vec3.createVectorHelper(1.5, 0, 0), EnumWaveType.RANDOM, EnumBeamType.LINE, 0xffffff, 0x0000ff, (int)te.getWorldObj().getTotalWorldTime() % 1000 + 2 + i, 5, px * 4, 0, 0); + + if(igen.torque > 0) { + for(int i = 0; i < 2; i++) { + BeamPronter.prontBeam(Vec3.createVectorHelper(1.5, 0, 0), EnumWaveType.RANDOM, EnumBeamType.LINE, 0x8080ff, 0x0000ff, (int)te.getWorldObj().getTotalWorldTime() % 1000 + i, 5, px * 4, 0, 0); + BeamPronter.prontBeam(Vec3.createVectorHelper(1.5, 0, 0), EnumWaveType.RANDOM, EnumBeamType.LINE, 0xffffff, 0x0000ff, (int)te.getWorldObj().getTotalWorldTime() % 1000 + 2 + i, 5, px * 4, 0, 0); + } } GL11.glShadeModel(GL11.GL_FLAT); GL11.glEnable(GL11.GL_CULL_FACE); - - te.getWorldObj().spawnParticle("splash", te.xCoord + 2.1, te.yCoord + 5.875, te.zCoord + 0.5, 0, 0, -0.25); - te.getWorldObj().spawnParticle("smoke", te.xCoord + 2.8, te.yCoord + 5.05, te.zCoord + 2, 0, 0, -0.1); GL11.glPopMatrix(); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineIGenerator.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineIGenerator.java index 982528874..088890692 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineIGenerator.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineIGenerator.java @@ -1,8 +1,11 @@ package com.hbm.tileentity.machine; +import java.util.ArrayList; import java.util.List; import com.google.common.collect.HashBiMap; +import com.hbm.handler.MultiblockHandlerXR; +import com.hbm.blocks.BlockDummyable; import com.hbm.handler.FluidTypeHandler.FluidType; import com.hbm.interfaces.IConsumer; import com.hbm.interfaces.IFluidAcceptor; @@ -12,10 +15,15 @@ import com.hbm.items.ModItems; import com.hbm.lib.Library; import com.hbm.tileentity.TileEntityMachineBase; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntityFurnace; +import net.minecraft.util.AxisAlignedBB; +import net.minecraftforge.common.util.ForgeDirection; import scala.actors.threadpool.Arrays; public class TileEntityMachineIGenerator extends TileEntityMachineBase implements ISource, IFluidAcceptor { @@ -30,8 +38,18 @@ public class TileEntityMachineIGenerator extends TileEntityMachineBase implement public static final int maxTorque = 10000; public float limiter = 0.0F; /// 0 - 1 /// + public static final int animSpeed = 50; + + @SideOnly(Side.CLIENT) + public float rotation; + @SideOnly(Side.CLIENT) + public float prevRotation; + public IGenRTG[] pellets = new IGenRTG[12]; public FluidTank[] tanks; + + public int age = 0; + public List list = new ArrayList(); public TileEntityMachineIGenerator() { super(15); @@ -50,6 +68,14 @@ public class TileEntityMachineIGenerator extends TileEntityMachineBase implement public void updateEntity() { if(!worldObj.isRemote) { + + age++; + if (age >= 20) { + age = 0; + } + + if (age == 9 || age == 19) + ffgeuaInit(); tanks[0].loadTank(7, 8, slots); tanks[1].loadTank(9, 10, slots); @@ -64,7 +90,15 @@ public class TileEntityMachineIGenerator extends TileEntityMachineBase implement temperature += 100; } + fuelAction(); + + if(temperature > maxTemperature) + temperature = maxTemperature; + + int displayHeat = temperature; + rtgAction(); + rotorAction(); generatorAction(); @@ -81,7 +115,7 @@ public class TileEntityMachineIGenerator extends TileEntityMachineBase implement } data.setIntArray("rtgs", rtgs); - data.setInteger("temp", temperature); + data.setInteger("temp", displayHeat); data.setInteger("torque", torque); data.setInteger("power", (int)power); data.setShort("burn", (short) burnTime); @@ -91,6 +125,16 @@ public class TileEntityMachineIGenerator extends TileEntityMachineBase implement for(int i = 0; i < 3; i++) tanks[i].updateTank(xCoord, yCoord, zCoord, this.worldObj.provider.dimensionId); + } else { + + this.prevRotation = this.rotation; + + this.rotation += this.torque * animSpeed / maxTorque; + + if(this.rotation >= 360) { + this.rotation -= 360; + this.prevRotation -= 360; + } } } @@ -169,9 +213,39 @@ public class TileEntityMachineIGenerator extends TileEntityMachineBase implement if(pellets[i] != null) this.temperature += pellets[i].heat; } + } + + /** + * Burns liquid fuel + */ + private void fuelAction() { - if(temperature > maxTemperature) - temperature = maxTemperature; + int heat = getHeatFromFuel(tanks[1].getTankType()); + + int maxBurn = 2; + + if(tanks[1].getFill() > 0) { + + int burn = Math.min(maxBurn, tanks[1].getFill()); + + tanks[1].setFill(tanks[1].getFill() - burn); + temperature += heat * burn; + } + } + + public int getHeatFromFuel(FluidType type) { + + switch(type) { + case SMEAR: return 75; + case HEATINGOIL: return 150; + case DIESEL: return 225; + case KEROSENE: return 300; + case RECLAIMED: return 100; + case PETROIL: return 125; + case BIOFUEL: return 200; + case NITAN: return 2500; + default: return 0; + } } /** @@ -203,7 +277,13 @@ public class TileEntityMachineIGenerator extends TileEntityMachineBase implement int conversion = getConversion(); - this.torque += conversion; + if(temperature > 10 && tanks[0].getFill() > 0) + tanks[0].setFill(tanks[0].getFill() - 1); + + if(torque > 10 && tanks[2].getFill() > 0 && worldObj.rand.nextInt(2) == 0) + tanks[2].setFill(tanks[2].getFill() - 1); + + this.torque += conversion * (tanks[0].getFill() > 0 ? 1.5 : 1); this.temperature -= conversion; if(torque > maxTorque) @@ -215,7 +295,9 @@ public class TileEntityMachineIGenerator extends TileEntityMachineBase implement */ private void generatorAction() { - this.power += this.torque; + double balanceFactor = 0.025D; + + this.power += this.torque * balanceFactor; torque -= getBrake(); if(power > maxPower) @@ -227,7 +309,7 @@ public class TileEntityMachineIGenerator extends TileEntityMachineBase implement } public int getConversion() { - return (int) (temperature * limiter * (tanks[0].getFill() > 0 ? 1 : 0.35)); + return (int) (temperature * limiter); } /** @@ -309,44 +391,58 @@ public class TileEntityMachineIGenerator extends TileEntityMachineBase implement @Override public void ffgeuaInit() { - // TODO Auto-generated method stub + ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata() - BlockDummyable.offset); + + int[] rot = MultiblockHandlerXR.rotate(new int [] {1,0,2,2,8,8}, dir); + + boolean tact = this.getTact(); + + for(int iy = 0; iy <= 1; iy++) { + for(int ix = -rot[4]; ix <= rot[5]; ix++) { + for(int iz = -rot[2]; iz <= rot[3]; iz++) { + + if(ix == -rot[4] || ix == rot[5] || iz == -rot[2] || iz == rot[3]) { + + ffgeua(xCoord + dir.offsetX * 2 + ix, yCoord + iy, zCoord + dir.offsetZ * 2 + iz, tact); + } + } + } + } } @Override public void ffgeua(int x, int y, int z, boolean newTact) { - // TODO Auto-generated method stub - + Library.ffgeua(x, y, z, newTact, this, worldObj); } @Override public boolean getTact() { - // TODO Auto-generated method stub + if (age >= 0 && age < 10) { + return true; + } + return false; } @Override public long getSPower() { - // TODO Auto-generated method stub - return 0; + return this.power; } @Override public void setSPower(long i) { - // TODO Auto-generated method stub - + this.power = i; } @Override public List getList() { - // TODO Auto-generated method stub - return null; + return this.list; } @Override public void clearList() { - // TODO Auto-generated method stub - + this.list.clear(); } @Override @@ -356,14 +452,18 @@ public class TileEntityMachineIGenerator extends TileEntityMachineBase implement @Override public void setFluidFill(int fill, FluidType type) { - // TODO Auto-generated method stub + if(type == FluidType.WATER) + tanks[0].setFill(fill); + else if(type == FluidType.LUBRICANT) + tanks[2].setFill(fill); + else if(tanks[1].getTankType() == type) + tanks[1].setFill(fill); } @Override public void setType(FluidType type, int index) { - // TODO Auto-generated method stub - + tanks[index].setTankType(type); } @Override @@ -449,4 +549,16 @@ public class TileEntityMachineIGenerator extends TileEntityMachineBase implement return rtgPellets.get(item); } } + + @Override + public AxisAlignedBB getRenderBoundingBox() { + return TileEntity.INFINITE_EXTENT_AABB; + } + + @Override + @SideOnly(Side.CLIENT) + public double getMaxRenderDistanceSquared() + { + return 65536.0D; + } }