diff --git a/changelog b/changelog index e45b07ed7..818c3edaa 100644 --- a/changelog +++ b/changelog @@ -1,46 +1,8 @@ -## Added -* Pigeons - * Spawn on plains in large flocks - * Will alternate between walking on the ground and flying around aimlessly - * When on the ground, they can eat dropped bread (the item has a 33% of being used up) - * Fat pigeons will spawn droppings when flying, these droppings will fertilize the ground below them - * When hit with damage equivalent to twice their health or higher, pigeons will explode, dropping 10 feathers - * when killed otherwise, they only drop a few feathers and sometimes raw chicken -* Wood burner - * Replaces the old combustion generator - * A larger machine, has higher efficiency when burning logs or planks - * Collects ashes at the same rate as ashpits - * Also has an option to burn flammable liquids at 50% efficiency - * Will automatically shut off if the energy buffer is full -* `/ntmrad` - * `set` operator can change the radiation amount in the current chunk - * `clear` operator will remove the radiation data from all loaded chunks -* Dense wires - * Can be made in a crucible - * Alloy and gold ones can also be made using the arc welder - * Material cost is equivalent to 1 ingot - * For ease of mass-production, 9-fold molds are also available - * Used to craft hadron magnets, reducing crafting complexity be removing annoying upgrade recipes which make automation more complicated and needlessly inflate the amount of materials required for a magnet tier that isn't even the one that's being made - ## Changed -* Changed many tool recipes that exclusively used polymer to now also accept bakelite -* Reduced the value of hematite and malachite blocks in the crucible down to one ingot - * Hematite veins are still giant, so a single vein will still yield many stacks of iron - * Malachite's rebalance was done to be consistent with the bedrock ores which now exist. Malachite veins are now larger to compensate. -* 1000mB of red mud now makes one ingot of iron in the coker -* Doubled coal bedrock ore's coal output to 8 coal -* A new config option now replaces the iron and copper bedrock ores in 528 mode with hematite and malachite -* the industrial generator now has three additional ports on its underside, meaning it is now a lot easier to properly automate all necessary IO -* Neodymium and DNT are now valid crucible materials -* Particle accelerators will now evenly distribute items using IO if both inputs are equal, making the antischrabidium recipe a lot easier to automate -* Due to multiple complaints regarding the plastic bag's ability to contain radiation, plastic bags now *double* the radiation of the item they contain -* The post impact spawning restrictions have changed, meaning that spawning things with spawn eggs is no longer broken. Due to technical limitations, this means that post impact, no mobs will spawn as part of world gen, only via random spawns. -* All energy storage blocks now have a fixed transfer limit of 5% of their capacity per tick, reducing the impact of ping-ponging considerably -* Trenchmaster armor no longer takes damage from self-inflicted explosions, knockback is still applied though -* The combination oven no longer needs blaze powder to be made, instead it uses welded copper plates. Welded copper needs 1kHE/t to make, twice as much as welded steel. -* The steam engine now only needs 4 copper coils instead of 8 +* The wood-burning generator now burns 40mB/s instead of 1mB/s +* Buffed the wood-burning generator's efficiency for fluids from 25% to 50% +* The particle accelerator now has a new IO mode called single mode, which only allows one item per slot ## Fixed -* Pipe and power networks now force the chunk to be saved on transfer, ensuring that rapid changes in the fluid/energy level aren't lost when the tile entity is unloaded -* Fixed Fwatz access hatch not visually connecting to cables -* Fixed most projectiles creating explosions with the projectile itself as the attacker instead of the player that fired that projectile +* Fixed wood-burning generator being 100x more efficient than it's supposed to be +* Fixed arc welders eating infinite energy \ No newline at end of file diff --git a/src/main/java/api/hbm/energy/IEnergyUser.java b/src/main/java/api/hbm/energy/IEnergyUser.java index a4a0a4ed5..4ca8e369a 100644 --- a/src/main/java/api/hbm/energy/IEnergyUser.java +++ b/src/main/java/api/hbm/energy/IEnergyUser.java @@ -28,15 +28,17 @@ public interface IEnergyUser extends IEnergyConnector { @Override public default long transferPower(long power) { - this.setPower(this.getPower() + power); - - if(this.getPower() > this.getMaxPower()) { + if(this.getPower() + power > this.getMaxPower()) { - long overshoot = this.getPower() - this.getMaxPower(); + long overshoot = this.getPower() + power - this.getMaxPower(); this.setPower(this.getMaxPower()); return overshoot; } + if(this.getPower() + power < 0) return 0; //safeguard for negative energy or overflows + + this.setPower(this.getPower() + power); + return 0; } diff --git a/src/main/java/com/hbm/inventory/gui/GUIHadron.java b/src/main/java/com/hbm/inventory/gui/GUIHadron.java index 959d93d7c..b39db1804 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIHadron.java +++ b/src/main/java/com/hbm/inventory/gui/GUIHadron.java @@ -40,8 +40,10 @@ public class GUIHadron extends GuiInfoContainer { this.drawElectricityInfo(this, mouseX, mouseY, guiLeft + 62, guiTop + 108, 70, 16, hadron.power, hadron.maxPower); - if(hadron.hopperMode) + if(hadron.ioMode == 1) this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 142, guiTop + 89, 18, 18, mouseX, mouseY, I18nUtil.resolveKeyArray("hadron.hopper1")); + else if(hadron.ioMode == 2) + this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 142, guiTop + 89, 18, 18, mouseX, mouseY, I18nUtil.resolveKeyArray("hadron.hopper2")); else this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 142, guiTop + 89, 18, 18, mouseX, mouseY, I18nUtil.resolveKeyArray("hadron.hopper0")); @@ -105,9 +107,9 @@ public class GUIHadron extends GuiInfoContainer { if(hadron.analysisOnly) drawTexturedModalRect(guiLeft + 142, guiTop + 107, 206, 18, 18, 18); - - if(hadron.hopperMode) - drawTexturedModalRect(guiLeft + 142, guiTop + 89, 206, 36, 18, 18); + + if(hadron.ioMode == hadron.MODE_HOPPER) drawTexturedModalRect(guiLeft + 142, guiTop + 89, 206, 36, 18, 18); + if(hadron.ioMode == hadron.MODE_SINGLE) drawTexturedModalRect(guiLeft + 142, guiTop + 89, 224, 36, 18, 18); if(hadron.state == EnumHadronState.SUCCESS) { drawTexturedModalRect(guiLeft + 73, guiTop + 29, 176, 0, 30, 30); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityHadron.java b/src/main/java/com/hbm/tileentity/machine/TileEntityHadron.java index 4eab1dba4..fed73cb60 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityHadron.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityHadron.java @@ -43,7 +43,10 @@ public class TileEntityHadron extends TileEntityMachineBase implements IEnergyUs public boolean isOn = false; public boolean analysisOnly = false; - public boolean hopperMode = false; + public int ioMode = 0; + public static final int MODE_DEFAULT = 0; + public static final int MODE_HOPPER = 1; + public static final int MODE_SINGLE = 2; private int delay; public EnumHadronState state = EnumHadronState.IDLE; @@ -71,8 +74,8 @@ public class TileEntityHadron extends TileEntityMachineBase implements IEnergyUs @Override public int[] getAccessibleSlotsFromSide(int side) { - return access; - } + return access; + } @Override public boolean canExtractItem(int i, ItemStack itemStack, int j) { @@ -83,6 +86,10 @@ public class TileEntityHadron extends TileEntityMachineBase implements IEnergyUs public boolean isItemValidForSlot(int i, ItemStack itemStack) { if(i != 0 && i != 1) return false; + if(this.ioMode == MODE_SINGLE) { + return slots[i] == null; + } + //makes sure that equal items like the antimatter capsules are spread out evenly if(slots[0] != null && slots[1] != null && slots[0].getItem() == slots[1].getItem() && slots[0].getItemDamage() == slots[1].getItemDamage()) { if(i == 0) return slots[1].stackSize - slots[0].stackSize >= 0; @@ -102,7 +109,7 @@ public class TileEntityHadron extends TileEntityMachineBase implements IEnergyUs if(delay <= 0 && this.isOn && particles.size() < maxParticles && slots[0] != null && slots[1] != null && power >= maxPower * 0.75) { - if(!hopperMode || (slots[0].stackSize > 1 && slots[1].stackSize > 1)) { + if(ioMode != MODE_HOPPER || (slots[0].stackSize > 1 && slots[1].stackSize > 1)) { ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata()); particles.add(new Particle(slots[0], slots[1], dir, xCoord, yCoord, zCoord)); this.decrStackSize(0, 1); @@ -131,7 +138,7 @@ public class TileEntityHadron extends TileEntityMachineBase implements IEnergyUs data.setBoolean("isOn", isOn); data.setLong("power", power); data.setBoolean("analysis", analysisOnly); - data.setBoolean("hopperMode", hopperMode); + data.setInteger("ioMode", ioMode); data.setByte("state", (byte) state.ordinal()); data.setBoolean("stat_success", stat_success); @@ -189,7 +196,7 @@ public class TileEntityHadron extends TileEntityMachineBase implements IEnergyUs this.isOn = data.getBoolean("isOn"); this.power = data.getLong("power"); this.analysisOnly = data.getBoolean("analysis"); - this.hopperMode = data.getBoolean("hopperMode"); + this.ioMode = data.getInteger("ioMode"); this.state = EnumHadronState.values()[data.getByte("state")]; this.stat_success = data.getBoolean("stat_success"); @@ -207,8 +214,12 @@ public class TileEntityHadron extends TileEntityMachineBase implements IEnergyUs this.isOn = !this.isOn; if(meta == 1) this.analysisOnly = !this.analysisOnly; - if(meta == 2) - this.hopperMode = !this.hopperMode; + if(meta == 2) { + this.ioMode++; + if(ioMode > 2) ioMode = 0; + } + + this.markChanged(); } private void drawPower() { @@ -262,7 +273,7 @@ public class TileEntityHadron extends TileEntityMachineBase implements IEnergyUs this.isOn = nbt.getBoolean("isOn"); this.power = nbt.getLong("power"); this.analysisOnly = nbt.getBoolean("analysis"); - this.hopperMode = nbt.getBoolean("hopperMode"); + this.ioMode = nbt.getInteger("ioMode"); } @Override @@ -272,7 +283,7 @@ public class TileEntityHadron extends TileEntityMachineBase implements IEnergyUs nbt.setBoolean("isOn", isOn); nbt.setLong("power", power); nbt.setBoolean("analysis", analysisOnly); - nbt.setBoolean("hopperMode", hopperMode); + nbt.setInteger("ioMode", ioMode); } public int getPowerScaled(int i) { diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineWoodBurner.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineWoodBurner.java index 202dbe5ba..42510532f 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineWoodBurner.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineWoodBurner.java @@ -41,7 +41,6 @@ public class TileEntityMachineWoodBurner extends TileEntityMachineBase implement public boolean isOn = false; public FluidTank tank; - public int millis = 0; public static ModuleBurnTime burnModule = new ModuleBurnTime().setLogTimeMod(4).setWoodTimeMod(2); @@ -109,17 +108,12 @@ public class TileEntityMachineWoodBurner extends TileEntityMachineBase implement if(trait != null) { - if(millis <= 900) { - this.tank.setFill(tank.getFill() - 1); - this.millis += 100; - } - - int toBurn = Math.min(millis, 5); + int toBurn = Math.min(tank.getFill(), 2); if(toBurn > 0) { - this.power += trait.getHeatEnergy() * toBurn / 4_000L; - this.millis -= toBurn; - if(worldObj.getTotalWorldTime() % 20 == 0) PollutionHandler.incrementPollution(worldObj, xCoord, yCoord, zCoord, PollutionType.SOOT, PollutionHandler.SOOT_PER_SECOND); + this.power += trait.getHeatEnergy() * toBurn / 2_000L; + this.tank.setFill(this.tank.getFill() - toBurn); + if(worldObj.getTotalWorldTime() % 20 == 0) PollutionHandler.incrementPollution(worldObj, xCoord, yCoord, zCoord, PollutionType.SOOT, PollutionHandler.SOOT_PER_SECOND * toBurn / 2F); } } } @@ -173,7 +167,6 @@ public class TileEntityMachineWoodBurner extends TileEntityMachineBase implement this.isOn = nbt.getBoolean("isOn"); this.liquidBurn = nbt.getBoolean("liquidBurn"); tank.readFromNBT(nbt, "t"); - this.millis = nbt.getInteger("millis"); } @Override @@ -185,7 +178,6 @@ public class TileEntityMachineWoodBurner extends TileEntityMachineBase implement nbt.setBoolean("isOn", isOn); nbt.setBoolean("liquidBurn", liquidBurn); tank.writeToNBT(nbt, "t"); - nbt.setInteger("millis", millis); } protected boolean processAsh(int level, EnumAshType type, int threshold) { diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index 7008cea84..b38691e89 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -591,6 +591,7 @@ hadron.error_diode_collision=Fehler 0x08 [DC] hadron.error_branching_turn=Fehler 0x09 [BT] hadron.hopper0=§eNormalmodus:$Alle Items werden beschleunigt. hadron.hopper1=§eTrichtermodus:$Ein Item bleibt immer übrig. +hadron.hopper1=§eEinzelmodus:$Erlaubt nur ein Item pro Slot. hadron.idle=Leerlauf hadron.modeCircular=§eRingbeschleuniger:$Magnete bilden eine Schleife.$Schaltet mehr Rezepte frei. hadron.modeLine=§eLinearbeschleuniger:$Beschleuniger ended mit Analysekammer.$Weniger Rezepte. @@ -4169,7 +4170,7 @@ tile.machine_uf6_tank.name=Uranhexafluorid-Tank tile.machine_vacuum_distill.name=Vakuumraffinerie tile.machine_waste_drum.name=Abklingbecken-Trommel tile.machine_wood_burner.name=Brennholzgenerator -tile.machine_wood_burner.desc=Erzeugt 100HE/t aus Items$Sammelt Asche$Kann 1mB/s Flüssigkeiten mit 25%% Effizienz verbrennen +tile.machine_wood_burner.desc=Erzeugt 100HE/t aus Items$Sammelt Asche$Kann 40mB/s Flüssigkeiten mit 50%% Effizienz verbrennen tile.machine_well.name=Ölbohrturm tile.machine_zirnox.name=ZIRNOX Atomreaktor tile.marker_structure.name=Multiblock-Strukturvorlage diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index 780df69c2..80ed6e7a1 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -1232,6 +1232,7 @@ hadron.error_diode_collision=Error 0x08 [DC] hadron.error_branching_turn=Error 0x09 [BT] hadron.hopper0=§eNormal Mode:$All items will be used. hadron.hopper1=§eHopper Mode:$One item will always remain. +hadron.hopper2=§eSingle Mode:$Only allows one item per slot. hadron.idle=Idle hadron.modeCircular=§eCircular Accelerator Mode:$Magnets must loop back into core.$Unlocks more recipes. hadron.modeLine=§eLinear Accelerator Mode:$Accelerator ends with analysis chamber.$Fewer Recipes. @@ -5148,7 +5149,7 @@ tile.machine_uf6_tank.name=Uranium Hexafluoride Tank tile.machine_vacuum_distill.name=Vacuum Refinery tile.machine_waste_drum.name=Spent Fuel Pool Drum tile.machine_wood_burner.name=Wood-Burning Generator -tile.machine_wood_burner.desc=Generates 100HE/t when burning items$Collects ashes$Can burn fluids at 25%% efficiency at 1mB/s +tile.machine_wood_burner.desc=Generates 100HE/t when burning items$Collects ashes$Can burn fluids at 50%% efficiency at 40mB/s tile.machine_well.name=Oil Derrick tile.machine_zirnox.name=ZIRNOX Nuclear Reactor tile.marker_structure.name=Multiblock Structure Marker diff --git a/src/main/resources/assets/hbm/textures/gui/machine/gui_hadron.png b/src/main/resources/assets/hbm/textures/gui/machine/gui_hadron.png index 9c5334115..956ddeecc 100644 Binary files a/src/main/resources/assets/hbm/textures/gui/machine/gui_hadron.png and b/src/main/resources/assets/hbm/textures/gui/machine/gui_hadron.png differ diff --git a/src/main/resources/assets/hbm/textures/models/machines/fel.png b/src/main/resources/assets/hbm/textures/models/machines/fel.png index d3e0ed944..c0830a7c4 100644 Binary files a/src/main/resources/assets/hbm/textures/models/machines/fel.png and b/src/main/resources/assets/hbm/textures/models/machines/fel.png differ