This commit is contained in:
Boblet 2023-11-06 16:43:44 +01:00
parent 98b05b1c70
commit 5d8704e150
9 changed files with 46 additions and 75 deletions

View File

@ -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
* Changed many tool recipes that exclusively used polymer to now also accept bakelite * The wood-burning generator now burns 40mB/s instead of 1mB/s
* Reduced the value of hematite and malachite blocks in the crucible down to one ingot * Buffed the wood-burning generator's efficiency for fluids from 25% to 50%
* Hematite veins are still giant, so a single vein will still yield many stacks of iron * The particle accelerator now has a new IO mode called single mode, which only allows one item per slot
* 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
## Fixed ## 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 wood-burning generator being 100x more efficient than it's supposed to be
* Fixed Fwatz access hatch not visually connecting to cables * Fixed arc welders eating infinite energy
* Fixed most projectiles creating explosions with the projectile itself as the attacker instead of the player that fired that projectile

View File

@ -28,15 +28,17 @@ public interface IEnergyUser extends IEnergyConnector {
@Override @Override
public default long transferPower(long power) { public default long transferPower(long power) {
this.setPower(this.getPower() + power); if(this.getPower() + power > this.getMaxPower()) {
if(this.getPower() > this.getMaxPower()) { long overshoot = this.getPower() + power - this.getMaxPower();
long overshoot = this.getPower() - this.getMaxPower();
this.setPower(this.getMaxPower()); this.setPower(this.getMaxPower());
return overshoot; return overshoot;
} }
if(this.getPower() + power < 0) return 0; //safeguard for negative energy or overflows
this.setPower(this.getPower() + power);
return 0; return 0;
} }

View File

@ -40,8 +40,10 @@ public class GUIHadron extends GuiInfoContainer {
this.drawElectricityInfo(this, mouseX, mouseY, guiLeft + 62, guiTop + 108, 70, 16, hadron.power, hadron.maxPower); 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")); 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 else
this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 142, guiTop + 89, 18, 18, mouseX, mouseY, I18nUtil.resolveKeyArray("hadron.hopper0")); this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 142, guiTop + 89, 18, 18, mouseX, mouseY, I18nUtil.resolveKeyArray("hadron.hopper0"));
@ -106,8 +108,8 @@ public class GUIHadron extends GuiInfoContainer {
if(hadron.analysisOnly) if(hadron.analysisOnly)
drawTexturedModalRect(guiLeft + 142, guiTop + 107, 206, 18, 18, 18); drawTexturedModalRect(guiLeft + 142, guiTop + 107, 206, 18, 18, 18);
if(hadron.hopperMode) if(hadron.ioMode == hadron.MODE_HOPPER) drawTexturedModalRect(guiLeft + 142, guiTop + 89, 206, 36, 18, 18);
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) { if(hadron.state == EnumHadronState.SUCCESS) {
drawTexturedModalRect(guiLeft + 73, guiTop + 29, 176, 0, 30, 30); drawTexturedModalRect(guiLeft + 73, guiTop + 29, 176, 0, 30, 30);

View File

@ -43,7 +43,10 @@ public class TileEntityHadron extends TileEntityMachineBase implements IEnergyUs
public boolean isOn = false; public boolean isOn = false;
public boolean analysisOnly = 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; private int delay;
public EnumHadronState state = EnumHadronState.IDLE; public EnumHadronState state = EnumHadronState.IDLE;
@ -71,8 +74,8 @@ public class TileEntityHadron extends TileEntityMachineBase implements IEnergyUs
@Override @Override
public int[] getAccessibleSlotsFromSide(int side) { public int[] getAccessibleSlotsFromSide(int side) {
return access; return access;
} }
@Override @Override
public boolean canExtractItem(int i, ItemStack itemStack, int j) { 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) { public boolean isItemValidForSlot(int i, ItemStack itemStack) {
if(i != 0 && i != 1) return false; 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 //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(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; 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(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()); ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata());
particles.add(new Particle(slots[0], slots[1], dir, xCoord, yCoord, zCoord)); particles.add(new Particle(slots[0], slots[1], dir, xCoord, yCoord, zCoord));
this.decrStackSize(0, 1); this.decrStackSize(0, 1);
@ -131,7 +138,7 @@ public class TileEntityHadron extends TileEntityMachineBase implements IEnergyUs
data.setBoolean("isOn", isOn); data.setBoolean("isOn", isOn);
data.setLong("power", power); data.setLong("power", power);
data.setBoolean("analysis", analysisOnly); data.setBoolean("analysis", analysisOnly);
data.setBoolean("hopperMode", hopperMode); data.setInteger("ioMode", ioMode);
data.setByte("state", (byte) state.ordinal()); data.setByte("state", (byte) state.ordinal());
data.setBoolean("stat_success", stat_success); data.setBoolean("stat_success", stat_success);
@ -189,7 +196,7 @@ public class TileEntityHadron extends TileEntityMachineBase implements IEnergyUs
this.isOn = data.getBoolean("isOn"); this.isOn = data.getBoolean("isOn");
this.power = data.getLong("power"); this.power = data.getLong("power");
this.analysisOnly = data.getBoolean("analysis"); this.analysisOnly = data.getBoolean("analysis");
this.hopperMode = data.getBoolean("hopperMode"); this.ioMode = data.getInteger("ioMode");
this.state = EnumHadronState.values()[data.getByte("state")]; this.state = EnumHadronState.values()[data.getByte("state")];
this.stat_success = data.getBoolean("stat_success"); this.stat_success = data.getBoolean("stat_success");
@ -207,8 +214,12 @@ public class TileEntityHadron extends TileEntityMachineBase implements IEnergyUs
this.isOn = !this.isOn; this.isOn = !this.isOn;
if(meta == 1) if(meta == 1)
this.analysisOnly = !this.analysisOnly; this.analysisOnly = !this.analysisOnly;
if(meta == 2) if(meta == 2) {
this.hopperMode = !this.hopperMode; this.ioMode++;
if(ioMode > 2) ioMode = 0;
}
this.markChanged();
} }
private void drawPower() { private void drawPower() {
@ -262,7 +273,7 @@ public class TileEntityHadron extends TileEntityMachineBase implements IEnergyUs
this.isOn = nbt.getBoolean("isOn"); this.isOn = nbt.getBoolean("isOn");
this.power = nbt.getLong("power"); this.power = nbt.getLong("power");
this.analysisOnly = nbt.getBoolean("analysis"); this.analysisOnly = nbt.getBoolean("analysis");
this.hopperMode = nbt.getBoolean("hopperMode"); this.ioMode = nbt.getInteger("ioMode");
} }
@Override @Override
@ -272,7 +283,7 @@ public class TileEntityHadron extends TileEntityMachineBase implements IEnergyUs
nbt.setBoolean("isOn", isOn); nbt.setBoolean("isOn", isOn);
nbt.setLong("power", power); nbt.setLong("power", power);
nbt.setBoolean("analysis", analysisOnly); nbt.setBoolean("analysis", analysisOnly);
nbt.setBoolean("hopperMode", hopperMode); nbt.setInteger("ioMode", ioMode);
} }
public int getPowerScaled(int i) { public int getPowerScaled(int i) {

View File

@ -41,7 +41,6 @@ public class TileEntityMachineWoodBurner extends TileEntityMachineBase implement
public boolean isOn = false; public boolean isOn = false;
public FluidTank tank; public FluidTank tank;
public int millis = 0;
public static ModuleBurnTime burnModule = new ModuleBurnTime().setLogTimeMod(4).setWoodTimeMod(2); public static ModuleBurnTime burnModule = new ModuleBurnTime().setLogTimeMod(4).setWoodTimeMod(2);
@ -109,17 +108,12 @@ public class TileEntityMachineWoodBurner extends TileEntityMachineBase implement
if(trait != null) { if(trait != null) {
if(millis <= 900) { int toBurn = Math.min(tank.getFill(), 2);
this.tank.setFill(tank.getFill() - 1);
this.millis += 100;
}
int toBurn = Math.min(millis, 5);
if(toBurn > 0) { if(toBurn > 0) {
this.power += trait.getHeatEnergy() * toBurn / 4_000L; this.power += trait.getHeatEnergy() * toBurn / 2_000L;
this.millis -= toBurn; this.tank.setFill(this.tank.getFill() - toBurn);
if(worldObj.getTotalWorldTime() % 20 == 0) PollutionHandler.incrementPollution(worldObj, xCoord, yCoord, zCoord, PollutionType.SOOT, PollutionHandler.SOOT_PER_SECOND); 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.isOn = nbt.getBoolean("isOn");
this.liquidBurn = nbt.getBoolean("liquidBurn"); this.liquidBurn = nbt.getBoolean("liquidBurn");
tank.readFromNBT(nbt, "t"); tank.readFromNBT(nbt, "t");
this.millis = nbt.getInteger("millis");
} }
@Override @Override
@ -185,7 +178,6 @@ public class TileEntityMachineWoodBurner extends TileEntityMachineBase implement
nbt.setBoolean("isOn", isOn); nbt.setBoolean("isOn", isOn);
nbt.setBoolean("liquidBurn", liquidBurn); nbt.setBoolean("liquidBurn", liquidBurn);
tank.writeToNBT(nbt, "t"); tank.writeToNBT(nbt, "t");
nbt.setInteger("millis", millis);
} }
protected boolean processAsh(int level, EnumAshType type, int threshold) { protected boolean processAsh(int level, EnumAshType type, int threshold) {

View File

@ -591,6 +591,7 @@ hadron.error_diode_collision=Fehler 0x08 [DC]
hadron.error_branching_turn=Fehler 0x09 [BT] hadron.error_branching_turn=Fehler 0x09 [BT]
hadron.hopper0=§eNormalmodus:$Alle Items werden beschleunigt. hadron.hopper0=§eNormalmodus:$Alle Items werden beschleunigt.
hadron.hopper1=§eTrichtermodus:$Ein Item bleibt immer übrig. hadron.hopper1=§eTrichtermodus:$Ein Item bleibt immer übrig.
hadron.hopper1=§eEinzelmodus:$Erlaubt nur ein Item pro Slot.
hadron.idle=Leerlauf hadron.idle=Leerlauf
hadron.modeCircular=§eRingbeschleuniger:$Magnete bilden eine Schleife.$Schaltet mehr Rezepte frei. hadron.modeCircular=§eRingbeschleuniger:$Magnete bilden eine Schleife.$Schaltet mehr Rezepte frei.
hadron.modeLine=§eLinearbeschleuniger:$Beschleuniger ended mit Analysekammer.$Weniger Rezepte. 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_vacuum_distill.name=Vakuumraffinerie
tile.machine_waste_drum.name=Abklingbecken-Trommel tile.machine_waste_drum.name=Abklingbecken-Trommel
tile.machine_wood_burner.name=Brennholzgenerator 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_well.name=Ölbohrturm
tile.machine_zirnox.name=ZIRNOX Atomreaktor tile.machine_zirnox.name=ZIRNOX Atomreaktor
tile.marker_structure.name=Multiblock-Strukturvorlage tile.marker_structure.name=Multiblock-Strukturvorlage

View File

@ -1232,6 +1232,7 @@ hadron.error_diode_collision=Error 0x08 [DC]
hadron.error_branching_turn=Error 0x09 [BT] hadron.error_branching_turn=Error 0x09 [BT]
hadron.hopper0=§eNormal Mode:$All items will be used. hadron.hopper0=§eNormal Mode:$All items will be used.
hadron.hopper1=§eHopper Mode:$One item will always remain. hadron.hopper1=§eHopper Mode:$One item will always remain.
hadron.hopper2=§eSingle Mode:$Only allows one item per slot.
hadron.idle=Idle hadron.idle=Idle
hadron.modeCircular=§eCircular Accelerator Mode:$Magnets must loop back into core.$Unlocks more recipes. 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. 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_vacuum_distill.name=Vacuum Refinery
tile.machine_waste_drum.name=Spent Fuel Pool Drum tile.machine_waste_drum.name=Spent Fuel Pool Drum
tile.machine_wood_burner.name=Wood-Burning Generator 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_well.name=Oil Derrick
tile.machine_zirnox.name=ZIRNOX Nuclear Reactor tile.machine_zirnox.name=ZIRNOX Nuclear Reactor
tile.marker_structure.name=Multiblock Structure Marker tile.marker_structure.name=Multiblock Structure Marker

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.5 KiB

After

Width:  |  Height:  |  Size: 7.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.6 KiB

After

Width:  |  Height:  |  Size: 4.5 KiB