From b1b0ba0a93acdc422104061e93d6fa111acdb669 Mon Sep 17 00:00:00 2001 From: Vaern Date: Sat, 15 Jun 2024 21:35:25 -0700 Subject: [PATCH] flixes --- .../handler/nei/CyclotronRecipeHandler.java | 2 +- .../container/ContainerMachineCyclotron.java | 48 +-- .../hbm/inventory/fluid/tank/FluidTank.java | 6 +- .../inventory/gui/GUIMachineCyclotron.java | 55 ++- .../hbm/tileentity/IUpgradeInfoProvider.java | 1 - .../machine/TileEntityMachineCyclotron.java | 351 +++++------------- .../textures/gui/machine/gui_cyclotron.png | Bin 5276 -> 3417 bytes 7 files changed, 127 insertions(+), 336 deletions(-) diff --git a/src/main/java/com/hbm/handler/nei/CyclotronRecipeHandler.java b/src/main/java/com/hbm/handler/nei/CyclotronRecipeHandler.java index 51b0a6b6f..bdc9a3954 100644 --- a/src/main/java/com/hbm/handler/nei/CyclotronRecipeHandler.java +++ b/src/main/java/com/hbm/handler/nei/CyclotronRecipeHandler.java @@ -120,7 +120,7 @@ public class CyclotronRecipeHandler extends TemplateRecipeHandler implements ICo guiGui = new LinkedList>(); transferRects.add(new RecipeTransferRect(new Rectangle(83 - 3 + 16 - 52, 5 + 18 + 1, 24, 18), "cyclotronProcessing")); - transferRectsGui.add(new RecipeTransferRect(new Rectangle(47, 15, 36, 36), "cyclotronProcessing")); + transferRectsGui.add(new RecipeTransferRect(new Rectangle(48 - 5, 27 - 11, 34, 34), "cyclotronProcessing")); guiGui.add(GUIMachineCyclotron.class); RecipeTransferRectHandler.registerRectsToGuis(getRecipeTransferRectGuis(), transferRects); RecipeTransferRectHandler.registerRectsToGuis(guiGui, transferRectsGui); diff --git a/src/main/java/com/hbm/inventory/container/ContainerMachineCyclotron.java b/src/main/java/com/hbm/inventory/container/ContainerMachineCyclotron.java index 7251c9623..cc720bc10 100644 --- a/src/main/java/com/hbm/inventory/container/ContainerMachineCyclotron.java +++ b/src/main/java/com/hbm/inventory/container/ContainerMachineCyclotron.java @@ -25,42 +25,34 @@ public class ContainerMachineCyclotron extends Container { cyclotron = tile; //Input - this.addSlotToContainer(new Slot(tile, 0, 17, 18)); - this.addSlotToContainer(new Slot(tile, 1, 17, 36)); - this.addSlotToContainer(new Slot(tile, 2, 17, 54)); + this.addSlotToContainer(new Slot(tile, 0, 11, 18)); + this.addSlotToContainer(new Slot(tile, 1, 11, 36)); + this.addSlotToContainer(new Slot(tile, 2, 11, 54)); //Targets - this.addSlotToContainer(new Slot(tile, 3, 107, 18)); - this.addSlotToContainer(new Slot(tile, 4, 107, 36)); - this.addSlotToContainer(new Slot(tile, 5, 107, 54)); + this.addSlotToContainer(new Slot(tile, 3, 101, 18)); + this.addSlotToContainer(new Slot(tile, 4, 101, 36)); + this.addSlotToContainer(new Slot(tile, 5, 101, 54)); //Output - this.addSlotToContainer(new SlotCraftingOutput(invPlayer.player, tile, 6, 143, 18)); - this.addSlotToContainer(new SlotCraftingOutput(invPlayer.player, tile, 7, 143, 36)); - this.addSlotToContainer(new SlotCraftingOutput(invPlayer.player, tile, 8, 143, 54)); - //AMAT In - this.addSlotToContainer(new Slot(tile, 9, 143, 90)); - //AMAT Out - this.addSlotToContainer(new SlotTakeOnly(tile, 10, 143, 108)); - //Coolant In - this.addSlotToContainer(new Slot(tile, 11, 62, 72)); - //Coolant Out - this.addSlotToContainer(new SlotTakeOnly(tile, 12, 62, 90)); + this.addSlotToContainer(new SlotCraftingOutput(invPlayer.player, tile, 6, 131, 18)); + this.addSlotToContainer(new SlotCraftingOutput(invPlayer.player, tile, 7, 131, 36)); + this.addSlotToContainer(new SlotCraftingOutput(invPlayer.player, tile, 8, 131, 54)); //Battery - this.addSlotToContainer(new Slot(tile, 13, 62, 108)); + this.addSlotToContainer(new Slot(tile, 9, 168, 83)); //Upgrades - this.addSlotToContainer(new SlotUpgrade(tile, 14, 17, 90)); - this.addSlotToContainer(new SlotUpgrade(tile, 15, 17, 108)); + this.addSlotToContainer(new SlotUpgrade(tile, 10, 60, 81)); + this.addSlotToContainer(new SlotUpgrade(tile, 11, 78, 81)); 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 + 56)); + this.addSlotToContainer(new Slot(invPlayer, j + i * 9 + 9, 15 + j * 18, 133 + i * 18)); } } for(int i = 0; i < 9; i++) { - this.addSlotToContainer(new Slot(invPlayer, i, 8 + i * 18, 142 + 56)); + this.addSlotToContainer(new Slot(invPlayer, i, 15 + i * 18, 191)); } } @@ -82,20 +74,12 @@ public class ContainerMachineCyclotron extends Container { } else { if(stack.getItem() instanceof IBatteryItem || stack.getItem() == ModItems.battery_creative) { - if(!this.mergeItemStack(stack, 13, 14, true)) - return null; - - } else if(FluidContainerRegistry.getFluidContent(stack, Fluids.COOLANT) > 0) { - if(!this.mergeItemStack(stack, 11, 12, true)) - return null; - - } else if(FluidContainerRegistry.getFullContainer(stack, Fluids.AMAT) != null) { if(!this.mergeItemStack(stack, 9, 10, true)) return null; } else if(stack.getItem() instanceof ItemMachineUpgrade) { - if(!this.mergeItemStack(stack, 14, 15, true)) - if(!this.mergeItemStack(stack, 15, 16, true)) + if(!this.mergeItemStack(stack, 10, 11, true)) + if(!this.mergeItemStack(stack, 11, 12, true)) return null; } else { diff --git a/src/main/java/com/hbm/inventory/fluid/tank/FluidTank.java b/src/main/java/com/hbm/inventory/fluid/tank/FluidTank.java index d30374713..641769b1c 100644 --- a/src/main/java/com/hbm/inventory/fluid/tank/FluidTank.java +++ b/src/main/java/com/hbm/inventory/fluid/tank/FluidTank.java @@ -250,10 +250,10 @@ public class FluidTank { maxX += i; maxY += height; - minV = 0; + minV = 0D; maxV = height / 16D; - minU = 0D; - maxU = width / 16D; + minU = 1D; + maxU = 1D - i / 16D; } Tessellator tessellator = Tessellator.instance; diff --git a/src/main/java/com/hbm/inventory/gui/GUIMachineCyclotron.java b/src/main/java/com/hbm/inventory/gui/GUIMachineCyclotron.java index c0ad1c777..57d35ef3b 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIMachineCyclotron.java +++ b/src/main/java/com/hbm/inventory/gui/GUIMachineCyclotron.java @@ -24,25 +24,26 @@ public class GUIMachineCyclotron extends GuiInfoContainer { super(new ContainerMachineCyclotron(invPlayer, tile)); cyclotron = tile; - this.xSize = 176; - this.ySize = 222; + this.xSize = 190; + this.ySize = 215; } @Override public void drawScreen(int mouseX, int mouseY, float f) { super.drawScreen(mouseX, mouseY, f); - this.drawElectricityInfo(this, mouseX, mouseY, guiLeft + 80, guiTop + 72, 7, 52, cyclotron.power, cyclotron.maxPower); + this.drawElectricityInfo(this, mouseX, mouseY, guiLeft + 168, guiTop + 18, 16, 63, cyclotron.power, cyclotron.maxPower); - cyclotron.coolant.renderTankInfo(this, mouseX, mouseY, guiLeft + 53, guiTop + 72, 7, 52); - cyclotron.amat.renderTankInfo(this, mouseX, mouseY, guiLeft + 134, guiTop + 90, 7, 34); + cyclotron.tanks[0].renderTankInfo(this, mouseX, mouseY, guiLeft + 11, guiTop + 81, 34, 7); + cyclotron.tanks[1].renderTankInfo(this, mouseX, mouseY, guiLeft + 11, guiTop + 90, 34, 7); + cyclotron.tanks[2].renderTankInfo(this, mouseX, mouseY, guiLeft + 107, guiTop + 81, 34, 16); String[] upgradeText = new String[4]; upgradeText[0] = I18nUtil.resolveKey("desc.gui.upgrade"); upgradeText[1] = I18nUtil.resolveKey("desc.gui.upgrade.speed"); upgradeText[2] = I18nUtil.resolveKey("desc.gui.upgrade.effectiveness"); upgradeText[3] = I18nUtil.resolveKey("desc.gui.upgrade.power"); - this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 21, guiTop + 75, 8, 8, mouseX, mouseY, upgradeText); + this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 49, guiTop + 85, 8, 8, mouseX, mouseY, upgradeText); } @Override @@ -50,38 +51,28 @@ public class GUIMachineCyclotron extends GuiInfoContainer { String name = this.cyclotron.hasCustomInventoryName() ? this.cyclotron.getInventoryName() : I18n.format(this.cyclotron.getInventoryName()); this.fontRendererObj.drawString(name, this.xSize / 2 - this.fontRendererObj.getStringWidth(name) / 2, 6, 4210752); - this.fontRendererObj.drawString(I18n.format("container.inventory"), 8, this.ySize - 96 + 2, 4210752); + this.fontRendererObj.drawString(I18n.format("container.inventory"), 15, this.ySize - 96 + 2, 4210752); } @Override - protected void mouseClicked(int x, int y, int i) { - super.mouseClicked(x, y, i); - - if(guiLeft + 97 <= x && guiLeft + 97 + 18 > x && guiTop + 107 < y && guiTop + 107 + 18 >= y) { - - mc.getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("gui.button.press"), 1.0F)); - PacketDispatcher.wrapper.sendToServer(new AuxButtonPacket(cyclotron.xCoord, cyclotron.yCoord, cyclotron.zCoord, 0, 0)); - } - } - - @Override - protected void drawGuiContainerBackgroundLayer(float p_146976_1_, int p_146976_2_, int p_146976_3_) { + protected void drawGuiContainerBackgroundLayer(float interp, int x, int y) { GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); Minecraft.getMinecraft().getTextureManager().bindTexture(texture); drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize); - int k = (int) cyclotron.getPowerScaled(52); - drawTexturedModalRect(guiLeft + 80, guiTop + 124 - k, 212, 52 - k, 7, k); - - int l = cyclotron.getProgressScaled(36); - drawTexturedModalRect(guiLeft + 52, guiTop + 26, 176, 0, l, 36); - - if(cyclotron.isOn) - drawTexturedModalRect(guiLeft + 97, guiTop + 107, 219, 0, 18, 18); - - this.drawInfoPanel(guiLeft + 21, guiTop + 75, 8, 8, 8); - - cyclotron.coolant.renderTank(guiLeft + 53, guiTop + 124, this.zLevel, 7, 52); - cyclotron.amat.renderTank(guiLeft + 134, guiTop + 124, this.zLevel, 7, 34); + int k = (int) cyclotron.getPowerScaled(63); + drawTexturedModalRect(guiLeft + 168, guiTop + 80 - k, 190, 62 - k, 16, k); + + int l = cyclotron.getProgressScaled(34); + drawTexturedModalRect(guiLeft + 48, guiTop + 27, 206, 0, l, 34); + + if(l > 0) + drawTexturedModalRect(guiLeft + 172, guiTop + 4, 190, 63, 9, 12); + + this.drawInfoPanel(guiLeft + 49, guiTop + 85, 8, 8, 8); + + cyclotron.tanks[0].renderTank(guiLeft + 11, guiTop + 88, this.zLevel, 34, 7, 1); + cyclotron.tanks[1].renderTank(guiLeft + 11, guiTop + 97, this.zLevel, 34, 7, 1); + cyclotron.tanks[2].renderTank(guiLeft + 107, guiTop + 97, this.zLevel, 34, 16, 1); } } diff --git a/src/main/java/com/hbm/tileentity/IUpgradeInfoProvider.java b/src/main/java/com/hbm/tileentity/IUpgradeInfoProvider.java index 90a348e1c..0fd4f7dab 100644 --- a/src/main/java/com/hbm/tileentity/IUpgradeInfoProvider.java +++ b/src/main/java/com/hbm/tileentity/IUpgradeInfoProvider.java @@ -26,6 +26,5 @@ public interface IUpgradeInfoProvider { public static final String KEY_DELAY = "upgrade.delay"; public static final String KEY_EFFICIENCY = "upgrade.efficiency"; public static final String KEY_FORTUNE = "upgrade.fortune"; - public static final String KEY_OVERHEAT_CHANCE = "upgrade.overheatChance"; public static final String KEY_RANGE = "upgrade.range"; } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCyclotron.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCyclotron.java index 87660cb63..e43f45631 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCyclotron.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCyclotron.java @@ -4,14 +4,11 @@ import java.util.List; import java.util.Map.Entry; import com.hbm.blocks.ModBlocks; -import com.hbm.config.BombConfig; -import com.hbm.entity.effect.EntityBlackHole; -import com.hbm.entity.logic.EntityBalefire; -import com.hbm.entity.logic.EntityNukeExplosionMK5; import com.hbm.explosion.ExplosionLarge; import com.hbm.explosion.ExplosionThermo; import com.hbm.interfaces.IFluidAcceptor; import com.hbm.interfaces.IFluidSource; +import com.hbm.inventory.UpgradeManager; import com.hbm.inventory.RecipesCommon.AStack; import com.hbm.inventory.RecipesCommon.ComparableStack; import com.hbm.inventory.container.ContainerMachineCyclotron; @@ -24,8 +21,6 @@ import com.hbm.items.ModItems; import com.hbm.items.machine.ItemMachineUpgrade; import com.hbm.items.machine.ItemMachineUpgrade.UpgradeType; import com.hbm.lib.Library; -import com.hbm.packet.AuxParticlePacketNT; -import com.hbm.packet.PacketDispatcher; import com.hbm.tileentity.IConditionalInvAccess; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.IUpgradeInfoProvider; @@ -38,9 +33,9 @@ import com.hbm.util.fauxpointtwelve.DirPos; import api.hbm.energymk2.IEnergyReceiverMK2; import api.hbm.fluid.IFluidStandardTransceiver; import api.hbm.tile.IInfoProviderEC; -import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; @@ -52,30 +47,26 @@ import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityMachineCyclotron extends TileEntityMachineBase implements IFluidSource, IFluidAcceptor, IEnergyReceiverMK2, IFluidStandardTransceiver, IGUIProvider, IConditionalInvAccess, IUpgradeInfoProvider, IInfoProviderEC { +public class TileEntityMachineCyclotron extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardTransceiver, IGUIProvider, IConditionalInvAccess, IUpgradeInfoProvider, IInfoProviderEC { public long power; public static final long maxPower = 100000000; - public int consumption = 1_000_000; - - public boolean isOn; - - private int age; - private int countdown; + public static int consumption = 1_000_000; private byte plugs; public int progress; public static final int duration = 690; - public FluidTank coolant; - public FluidTank amat; + public FluidTank[] tanks; public TileEntityMachineCyclotron() { - super(16); - - coolant = new FluidTank(Fluids.COOLANT, 32000, 0); - amat = new FluidTank(Fluids.AMAT, 8000, 1); + super(12); + + this.tanks = new FluidTank[3]; + this.tanks[0] = new FluidTank(Fluids.WATER, 32000); + this.tanks[1] = new FluidTank(Fluids.SPENTSTEAM, 32000); + this.tanks[2] = new FluidTank(Fluids.AMAT, 8000); } @Override @@ -90,72 +81,22 @@ public class TileEntityMachineCyclotron extends TileEntityMachineBase implements this.updateConnections(); - age++; - if(age >= 20) - { - age = 0; - } + this.power = Library.chargeTEFromItems(slots, 9, power, maxPower); - if(age == 9 || age == 19) - fillFluidInit(amat.getTankType()); - - this.power = Library.chargeTEFromItems(slots, 13, power, maxPower); - this.coolant.loadTank(11, 12, slots); - this.amat.unloadTank(9, 10, slots); + UpgradeManager.eval(slots, 10, 11); - if(isOn) { + if(canProcess()) { + progress += getSpeed(); + power -= getConsumption(); - int defConsumption = consumption - 100_000 * getConsumption(); + int convert = getCoolantConsumption(); + tanks[0].setFill(tanks[0].getFill() - convert); + tanks[1].setFill(tanks[1].getFill() + convert); - if(canProcess() && power >= defConsumption) { - - progress += this.getSpeed(); - power -= defConsumption; - - if(progress >= duration) { - process(); - progress = 0; - this.markDirty(); - } - - int safety = this.getSafety(); - - if(coolant.getFill() > 0) { - - countdown = 0; - - if(worldObj.rand.nextInt(3 * safety) == 0) - coolant.setFill(coolant.getFill() - 1); - - } else if(worldObj.rand.nextInt(safety) == 0) { - - countdown++; - - int chance = 7 - Math.min((int) Math.ceil(countdown / 200D), 6); - - if(worldObj.rand.nextInt(chance) == 0) - ExplosionLarge.spawnTracers(worldObj, xCoord + 0.5, yCoord + 3.25, zCoord + 0.5, 1); - - if(countdown > 1000) { - ExplosionThermo.setEntitiesOnFire(worldObj, xCoord + 0.5, yCoord + 1.5, zCoord + 0.5, 25); - ExplosionThermo.scorchLight(worldObj, xCoord, yCoord, zCoord, 7); - - if(countdown % 4 == 0) - ExplosionLarge.spawnBurst(worldObj, xCoord + 0.5, yCoord + 3.25, zCoord + 0.5, 18, 1); - - } else if(countdown > 600) { - ExplosionThermo.setEntitiesOnFire(worldObj, xCoord + 0.5, yCoord + 1.5, zCoord + 0.5, 10); - } - - if(countdown == 1140) - worldObj.playSoundEffect(xCoord + 0.5, yCoord + 1.5, zCoord + 0.5, "hbm:block.shutdown", 10.0F, 1.0F); - - if(countdown > 1200) - explode(); - } - - } else { + if(progress >= duration) { + process(); progress = 0; + this.markDirty(); } } else { @@ -163,29 +104,46 @@ public class TileEntityMachineCyclotron extends TileEntityMachineBase implements } this.sendFluid(); - - NBTTagCompound data = new NBTTagCompound(); - data.setLong("power", power); - data.setInteger("progress", progress); - data.setBoolean("isOn", isOn); - data.setByte("plugs", plugs); - this.networkPack(data, 25); - - coolant.updateTank(xCoord, yCoord, zCoord, worldObj.provider.dimensionId); - amat.updateTank(xCoord, yCoord, zCoord, worldObj.provider.dimensionId); + this.networkPackNT(25); } } + @Override + public void serialize(ByteBuf buf) { + super.serialize(buf); + buf.writeLong(power); + buf.writeInt(progress); + buf.writeByte(plugs); + + for(int i = 0; i < 3; i++) + tanks[i].serialize(buf); + } + + @Override + public void deserialize(ByteBuf buf) { + super.deserialize(buf); + power = buf.readLong(); + progress = buf.readInt(); + plugs = buf.readByte(); + + for(int i = 0; i < 3; i++) + tanks[i].deserialize(buf); + } + private void updateConnections() { for(DirPos pos : getConPos()) { this.trySubscribe(worldObj, pos.getX(), pos.getY(), pos.getZ(), pos.getDir()); - this.trySubscribe(coolant.getTankType(), worldObj, pos.getX(), pos.getY(), pos.getZ(), pos.getDir()); + this.trySubscribe(tanks[0].getTankType(), worldObj, pos.getX(), pos.getY(), pos.getZ(), pos.getDir()); } } private void sendFluid() { - for(DirPos pos : getConPos()) { - this.sendFluid(amat, worldObj, pos.getX(), pos.getY(), pos.getZ(), pos.getDir()); + for(int i = 1; i < 3; i++) { + if(tanks[i].getFill() > 0) { + for(DirPos pos : getConPos()) { + this.sendFluid(tanks[i], worldObj, pos.getX(), pos.getY(), pos.getZ(), pos.getDir()); + } + } } } @@ -202,62 +160,19 @@ public class TileEntityMachineCyclotron extends TileEntityMachineBase implements }; } - public void networkUnpack(NBTTagCompound data) { - super.networkUnpack(data); - - this.isOn = data.getBoolean("isOn"); - this.power = data.getLong("power"); - this.progress = data.getInteger("progress"); - this.plugs = data.getByte("plugs"); - } - - public void handleButtonPacket(int value, int meta) { - - this.isOn = !this.isOn; - } - - private void explode() { - - ExplosionLarge.explodeFire(worldObj, xCoord + 0.5, yCoord + 1.5, zCoord + 0.5, 25, true, false, true); - - int rand = worldObj.rand.nextInt(10); - - if(rand < 2) { - - worldObj.spawnEntityInWorld(EntityNukeExplosionMK5.statFac(worldObj, (int)(BombConfig.fatmanRadius * 1.5), xCoord + 0.5, yCoord + 1.5, zCoord + 0.5)); - - NBTTagCompound data = new NBTTagCompound(); - data.setString("type", "muke"); - PacketDispatcher.wrapper.sendToAllAround(new AuxParticlePacketNT(data, xCoord + 0.5, yCoord + 0.5, zCoord + 0.5), new TargetPoint(worldObj.provider.dimensionId, xCoord + 0.5, yCoord + 0.5, zCoord + 0.5, 250)); - worldObj.playSoundEffect(xCoord + 0.5, yCoord + 0.5, zCoord + 0.5, "hbm:weapon.mukeExplosion", 15.0F, 1.0F); - - } else if(rand < 4) { - - EntityBalefire bf = new EntityBalefire(worldObj); - bf.posX = xCoord + 0.5; - bf.posY = yCoord + 1.5; - bf.posZ = zCoord + 0.5; - bf.destructionRange = (int)(BombConfig.fatmanRadius * 1.5); - worldObj.spawnEntityInWorld(bf); - - NBTTagCompound data = new NBTTagCompound(); - data.setString("type", "muke"); - data.setBoolean("balefire", true); - PacketDispatcher.wrapper.sendToAllAround(new AuxParticlePacketNT(data, xCoord + 0.5, yCoord + 0.5, zCoord + 0.5), new TargetPoint(worldObj.provider.dimensionId, xCoord + 0.5, yCoord + 0.5, zCoord + 0.5, 250)); - worldObj.playSoundEffect(xCoord + 0.5, yCoord + 0.5, zCoord + 0.5, "hbm:weapon.mukeExplosion", 15.0F, 1.0F); - - } else if(rand < 5) { - - EntityBlackHole bl = new EntityBlackHole(worldObj, 1.5F + worldObj.rand.nextFloat()); - bl.posX = xCoord + 0.5F; - bl.posY = yCoord + 1.5F; - bl.posZ = zCoord + 0.5F; - worldObj.spawnEntityInWorld(bl); - } - } - public boolean canProcess() { + if(power < getConsumption()) + return false; + + int convert = getCoolantConsumption(); + + if(tanks[0].getFill() < convert) + return false; + + if(tanks[1].getFill() + convert > tanks[1].getMaxFill()) + return false; + for(int i = 0; i < 3; i++) { Object[] res = CyclotronRecipes.getOutput(slots[i + 3], slots[i]); @@ -300,7 +215,7 @@ public class TileEntityMachineCyclotron extends TileEntityMachineBase implements this.decrStackSize(i + 3, 1); slots[i + 6] = out; - this.amat.setFill(this.amat.getFill() + (Integer)res[1]); + this.tanks[2].setFill(this.tanks[2].getFill() + (Integer)res[1]); continue; } @@ -311,72 +226,28 @@ public class TileEntityMachineCyclotron extends TileEntityMachineBase implements this.decrStackSize(i + 3, 1); slots[i + 6].stackSize++; - this.amat.setFill(this.amat.getFill() + (Integer)res[1]); + this.tanks[2].setFill(this.tanks[2].getFill() + (Integer)res[1]); } } - if(this.amat.getFill() > this.amat.getMaxFill()) - this.amat.setFill(this.amat.getMaxFill()); + if(this.tanks[2].getFill() > this.tanks[2].getMaxFill()) + this.tanks[2].setFill(this.tanks[2].getMaxFill()); } public int getSpeed() { - - int speed = 1; - - for(int i = 14; i < 16; i++) { - - if(slots[i] != null) { - - if(slots[i].getItem() == ModItems.upgrade_speed_1) - speed += 1; - else if(slots[i].getItem() == ModItems.upgrade_speed_2) - speed += 2; - else if(slots[i].getItem() == ModItems.upgrade_speed_3) - speed += 3; - } - } - - return Math.min(speed, 4); + return Math.min(UpgradeManager.getLevel(UpgradeType.SPEED), 3) + 1; } public int getConsumption() { + int efficiency = Math.min(UpgradeManager.getLevel(UpgradeType.POWER), 3); - int speed = 0; - - for(int i = 14; i < 16; i++) { - - if(slots[i] != null) { - - if(slots[i].getItem() == ModItems.upgrade_power_1) - speed += 1; - else if(slots[i].getItem() == ModItems.upgrade_power_2) - speed += 2; - else if(slots[i].getItem() == ModItems.upgrade_power_3) - speed += 3; - } - } - - return Math.min(speed, 3); + return consumption - 100_000 * efficiency; } - public int getSafety() { - - int speed = 1; - - for(int i = 14; i < 16; i++) { - - if(slots[i] != null) { - - if(slots[i].getItem() == ModItems.upgrade_effect_1) - speed += 1; - else if(slots[i].getItem() == ModItems.upgrade_effect_2) - speed += 2; - else if(slots[i].getItem() == ModItems.upgrade_effect_3) - speed += 3; - } - } - - return Math.min(speed, 4); + public int getCoolantConsumption() { + int efficiency = Math.min(UpgradeManager.getLevel(UpgradeType.EFFECT), 3); + //half a small tower's worth + return 500 / (efficiency + 1) * getSpeed(); } public long getPowerScaled(long i) { @@ -386,56 +257,6 @@ public class TileEntityMachineCyclotron extends TileEntityMachineBase implements public int getProgressScaled(int i) { return (progress * i) / duration; } - - @Override - public void setFillForSync(int fill, int index) { - - if(index == 0) - coolant.setFill(fill); - else if(index == 1) - amat.setFill(fill); - } - - @Override - public void setFluidFill(int fill, FluidType type) { - if(type == Fluids.COOLANT) - coolant.setFill(fill); - else if(type == Fluids.AMAT) - amat.setFill(fill); - } - - @Override - public void setTypeForSync(FluidType type, int index) { - if(index == 0) - coolant.setTankType(type); - else if(index == 1) - amat.setTankType(type); - } - - @Override - public int getFluidFill(FluidType type) { - if(type == Fluids.COOLANT) - return coolant.getFill(); - else if(type == Fluids.AMAT) - return amat.getFill(); - - return 0; - } - - @Override public void fillFluidInit(FluidType type) { } - @Override public void fillFluid(int x, int y, int z, boolean newTact, FluidType type) { } - @Override public boolean getTact() { return false; } - @Override public List getFluidList(FluidType type) { return null; } - @Override public void clearFluidList(FluidType type) { } - - @Override - public int getMaxFluidFill(FluidType type) { - - if(type == Fluids.COOLANT) - return coolant.getMaxFill(); - - return 0; - } @Override public AxisAlignedBB getRenderBoundingBox() { @@ -452,11 +273,9 @@ public class TileEntityMachineCyclotron extends TileEntityMachineBase implements public void readFromNBT(NBTTagCompound nbt) { super.readFromNBT(nbt); - coolant.readFromNBT(nbt, "coolant"); - amat.readFromNBT(nbt, "amat"); + for(int i = 0; i < 3; i++) + tanks[i].readFromNBT(nbt, "t" + i); - this.isOn = nbt.getBoolean("isOn"); - this.countdown = nbt.getInteger("countdown"); this.progress = nbt.getInteger("progress"); this.power = nbt.getLong("power"); this.plugs = nbt.getByte("plugs"); @@ -466,11 +285,9 @@ public class TileEntityMachineCyclotron extends TileEntityMachineBase implements public void writeToNBT(NBTTagCompound nbt) { super.writeToNBT(nbt); - coolant.writeToNBT(nbt, "coolant"); - amat.writeToNBT(nbt, "amat"); + for(int i = 0; i < 3; i++) + tanks[i].writeToNBT(nbt, "t" + i); - nbt.setBoolean("isOn", isOn); - nbt.setInteger("countdown", countdown); nbt.setInteger("progress", progress); nbt.setLong("power", power); nbt.setByte("plugs", plugs); @@ -522,17 +339,17 @@ public class TileEntityMachineCyclotron extends TileEntityMachineBase implements @Override public FluidTank[] getSendingTanks() { - return new FluidTank[] { amat }; + return new FluidTank[] { tanks[1], tanks[2] }; } @Override public FluidTank[] getReceivingTanks() { - return new FluidTank[] { coolant }; + return new FluidTank[] { tanks[0] }; } @Override public FluidTank[] getAllTanks() { - return new FluidTank[] { amat, coolant }; + return tanks; } @Override @@ -598,13 +415,13 @@ public class TileEntityMachineCyclotron extends TileEntityMachineBase implements info.add(IUpgradeInfoProvider.getStandardLabel(ModBlocks.machine_cyclotron)); if(type == UpgradeType.SPEED) { info.add(EnumChatFormatting.GREEN + I18nUtil.resolveKey(this.KEY_DELAY, "-" + (100 - 100 / (level + 1)) + "%")); + info.add(EnumChatFormatting.RED + I18nUtil.resolveKey(this.KEY_COOLANT_CONSUMPTION, "+" + (level * 100) + "%")); } if(type == UpgradeType.POWER) { info.add(EnumChatFormatting.GREEN + I18nUtil.resolveKey(this.KEY_CONSUMPTION, "-" + (level * 10) + "%")); } if(type == UpgradeType.EFFECT) { info.add(EnumChatFormatting.GREEN + I18nUtil.resolveKey(this.KEY_COOLANT_CONSUMPTION, "-" + (100 - 100 / (level + 1)) + "%")); - info.add(EnumChatFormatting.GREEN + I18nUtil.resolveKey(this.KEY_OVERHEAT_CHANCE, "-" + (100 - 100 / (level + 1)) + "%")); } } @@ -618,7 +435,7 @@ public class TileEntityMachineCyclotron extends TileEntityMachineBase implements @Override public void provideExtraInfo(NBTTagCompound data) { - data.setBoolean(CompatEnergyControl.B_ACTIVE, this.isOn && this.progress > 0); - data.setDouble(CompatEnergyControl.D_CONSUMPTION_HE, this.progress > 0 ? consumption - 100_000 * getConsumption() : 0); + data.setBoolean(CompatEnergyControl.B_ACTIVE, this.progress > 0); + data.setDouble(CompatEnergyControl.D_CONSUMPTION_HE, this.progress > 0 ? getConsumption() : 0); } } diff --git a/src/main/resources/assets/hbm/textures/gui/machine/gui_cyclotron.png b/src/main/resources/assets/hbm/textures/gui/machine/gui_cyclotron.png index 13a5d33bbfbdfcd374da643dd003c563e74334de..9da387278a9f2911f526dbe8981a4acace6736a0 100644 GIT binary patch literal 3417 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 YyD>B5QVOQ%^lwg6V@sp*Gj6y42aB}2LI3~&