mirror of
https://github.com/Ellpeck/PrettyPipes.git
synced 2024-11-25 21:18:34 +01:00
improve the performance of the pressurizer drastically
This commit is contained in:
parent
cafa3f39c2
commit
e3cbbae905
2 changed files with 24 additions and 23 deletions
|
@ -59,8 +59,8 @@ public class PipeTileEntity extends TileEntity implements INamedContainerProvide
|
|||
return 1;
|
||||
}
|
||||
};
|
||||
public PressurizerTileEntity pressurizer;
|
||||
protected List<PipeItem> items;
|
||||
private PressurizerTileEntity pressurizer;
|
||||
private int lastItemAmount;
|
||||
private int priority;
|
||||
|
||||
|
@ -102,6 +102,10 @@ public class PipeTileEntity extends TileEntity implements INamedContainerProvide
|
|||
|
||||
@Override
|
||||
public void tick() {
|
||||
// invalidate our pressurizer reference if it was removed
|
||||
if(this.pressurizer != null && this.pressurizer.isRemoved())
|
||||
this.pressurizer = null;
|
||||
|
||||
if (!this.world.isAreaLoaded(this.pos, 1))
|
||||
return;
|
||||
IProfiler profiler = this.world.getProfiler();
|
||||
|
@ -121,13 +125,6 @@ public class PipeTileEntity extends TileEntity implements INamedContainerProvide
|
|||
PipeNetwork.get(this.world).clearDestinationCache(this.pos);
|
||||
}
|
||||
profiler.endSection();
|
||||
|
||||
if (this.world.getGameTime() % 40 == 0) {
|
||||
profiler.startSection("caching_data");
|
||||
// figure out if we're pressurized
|
||||
this.pressurizer = this.findPressurizer();
|
||||
profiler.endSection();
|
||||
}
|
||||
}
|
||||
|
||||
profiler.startSection("ticking_items");
|
||||
|
@ -151,7 +148,7 @@ public class PipeTileEntity extends TileEntity implements INamedContainerProvide
|
|||
// an item might be re-routed from a previous location, but it should still count as a new item then
|
||||
if (!this.getItems().contains(item))
|
||||
this.getItems().add(item);
|
||||
if (this.pressurizer != null && !this.pressurizer.isRemoved())
|
||||
if (this.pressurizer != null)
|
||||
this.pressurizer.pressurizeItem(item.stack, false);
|
||||
}
|
||||
|
||||
|
@ -219,7 +216,7 @@ public class PipeTileEntity extends TileEntity implements INamedContainerProvide
|
|||
|
||||
public float getItemSpeed(ItemStack stack) {
|
||||
float moduleSpeed = (float) this.streamModules().mapToDouble(m -> m.getRight().getItemSpeedIncrease(m.getLeft(), this)).sum();
|
||||
float pressureSpeed = this.pressurizer != null && !this.pressurizer.isRemoved() && this.pressurizer.pressurizeItem(stack, true) ? 0.45F : 0;
|
||||
float pressureSpeed = this.pressurizer != null && this.pressurizer.pressurizeItem(stack, true) ? 0.45F : 0;
|
||||
return 0.05F + moduleSpeed + pressureSpeed;
|
||||
}
|
||||
|
||||
|
@ -302,17 +299,4 @@ public class PipeTileEntity extends TileEntity implements INamedContainerProvide
|
|||
public Container createMenu(int window, PlayerInventory inv, PlayerEntity player) {
|
||||
return new MainPipeContainer(Registry.pipeContainer, window, player, PipeTileEntity.this.pos);
|
||||
}
|
||||
|
||||
private PressurizerTileEntity findPressurizer() {
|
||||
PipeNetwork network = PipeNetwork.get(this.world);
|
||||
for (BlockPos node : network.getOrderedNetworkNodes(this.pos)) {
|
||||
PipeTileEntity pipe = network.getPipe(node);
|
||||
for (Direction dir : Direction.values()) {
|
||||
IPipeConnectable connectable = pipe.getPipeConnectable(dir);
|
||||
if (connectable instanceof PressurizerBlock)
|
||||
return Utility.getTileEntity(PressurizerTileEntity.class, this.world, node.offset(dir));
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3,6 +3,8 @@ package de.ellpeck.prettypipes.pressurizer;
|
|||
import de.ellpeck.prettypipes.PrettyPipes;
|
||||
import de.ellpeck.prettypipes.Registry;
|
||||
import de.ellpeck.prettypipes.Utility;
|
||||
import de.ellpeck.prettypipes.network.PipeNetwork;
|
||||
import de.ellpeck.prettypipes.pipe.PipeTileEntity;
|
||||
import de.ellpeck.prettypipes.terminal.containers.ItemTerminalContainer;
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.entity.player.PlayerEntity;
|
||||
|
@ -17,6 +19,7 @@ import net.minecraft.tileentity.ITickableTileEntity;
|
|||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.tileentity.TileEntityType;
|
||||
import net.minecraft.util.Direction;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.util.text.ITextComponent;
|
||||
import net.minecraft.util.text.TranslationTextComponent;
|
||||
import net.minecraftforge.common.capabilities.Capability;
|
||||
|
@ -109,6 +112,20 @@ public class PressurizerTileEntity extends TileEntity implements INamedContainer
|
|||
public void tick() {
|
||||
if (this.world.isRemote)
|
||||
return;
|
||||
// notify pipes in network about us
|
||||
if (this.world.getGameTime() % 10 == 0) {
|
||||
PipeNetwork network = PipeNetwork.get(this.world);
|
||||
for (Direction dir : Direction.values()) {
|
||||
BlockPos offset = this.pos.offset(dir);
|
||||
for (BlockPos node : network.getOrderedNetworkNodes(offset)) {
|
||||
PipeTileEntity pipe = network.getPipe(node);
|
||||
if (pipe != null)
|
||||
pipe.pressurizer = this;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// send energy update
|
||||
if (this.lastEnergy != this.storage.getEnergyStored() && this.world.getGameTime() % 10 == 0) {
|
||||
this.lastEnergy = this.storage.getEnergyStored();
|
||||
Utility.sendTileEntityToClients(this);
|
||||
|
|
Loading…
Reference in a new issue