mirror of
https://github.com/Ellpeck/PrettyPipes.git
synced 2024-11-22 11:53:29 +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;
|
return 1;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
public PressurizerTileEntity pressurizer;
|
||||||
protected List<PipeItem> items;
|
protected List<PipeItem> items;
|
||||||
private PressurizerTileEntity pressurizer;
|
|
||||||
private int lastItemAmount;
|
private int lastItemAmount;
|
||||||
private int priority;
|
private int priority;
|
||||||
|
|
||||||
|
@ -102,6 +102,10 @@ public class PipeTileEntity extends TileEntity implements INamedContainerProvide
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void tick() {
|
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))
|
if (!this.world.isAreaLoaded(this.pos, 1))
|
||||||
return;
|
return;
|
||||||
IProfiler profiler = this.world.getProfiler();
|
IProfiler profiler = this.world.getProfiler();
|
||||||
|
@ -121,13 +125,6 @@ public class PipeTileEntity extends TileEntity implements INamedContainerProvide
|
||||||
PipeNetwork.get(this.world).clearDestinationCache(this.pos);
|
PipeNetwork.get(this.world).clearDestinationCache(this.pos);
|
||||||
}
|
}
|
||||||
profiler.endSection();
|
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");
|
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
|
// 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))
|
if (!this.getItems().contains(item))
|
||||||
this.getItems().add(item);
|
this.getItems().add(item);
|
||||||
if (this.pressurizer != null && !this.pressurizer.isRemoved())
|
if (this.pressurizer != null)
|
||||||
this.pressurizer.pressurizeItem(item.stack, false);
|
this.pressurizer.pressurizeItem(item.stack, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -219,7 +216,7 @@ public class PipeTileEntity extends TileEntity implements INamedContainerProvide
|
||||||
|
|
||||||
public float getItemSpeed(ItemStack stack) {
|
public float getItemSpeed(ItemStack stack) {
|
||||||
float moduleSpeed = (float) this.streamModules().mapToDouble(m -> m.getRight().getItemSpeedIncrease(m.getLeft(), this)).sum();
|
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;
|
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) {
|
public Container createMenu(int window, PlayerInventory inv, PlayerEntity player) {
|
||||||
return new MainPipeContainer(Registry.pipeContainer, window, player, PipeTileEntity.this.pos);
|
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.PrettyPipes;
|
||||||
import de.ellpeck.prettypipes.Registry;
|
import de.ellpeck.prettypipes.Registry;
|
||||||
import de.ellpeck.prettypipes.Utility;
|
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 de.ellpeck.prettypipes.terminal.containers.ItemTerminalContainer;
|
||||||
import net.minecraft.block.BlockState;
|
import net.minecraft.block.BlockState;
|
||||||
import net.minecraft.entity.player.PlayerEntity;
|
import net.minecraft.entity.player.PlayerEntity;
|
||||||
|
@ -17,6 +19,7 @@ import net.minecraft.tileentity.ITickableTileEntity;
|
||||||
import net.minecraft.tileentity.TileEntity;
|
import net.minecraft.tileentity.TileEntity;
|
||||||
import net.minecraft.tileentity.TileEntityType;
|
import net.minecraft.tileentity.TileEntityType;
|
||||||
import net.minecraft.util.Direction;
|
import net.minecraft.util.Direction;
|
||||||
|
import net.minecraft.util.math.BlockPos;
|
||||||
import net.minecraft.util.text.ITextComponent;
|
import net.minecraft.util.text.ITextComponent;
|
||||||
import net.minecraft.util.text.TranslationTextComponent;
|
import net.minecraft.util.text.TranslationTextComponent;
|
||||||
import net.minecraftforge.common.capabilities.Capability;
|
import net.minecraftforge.common.capabilities.Capability;
|
||||||
|
@ -109,6 +112,20 @@ public class PressurizerTileEntity extends TileEntity implements INamedContainer
|
||||||
public void tick() {
|
public void tick() {
|
||||||
if (this.world.isRemote)
|
if (this.world.isRemote)
|
||||||
return;
|
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) {
|
if (this.lastEnergy != this.storage.getEnergyStored() && this.world.getGameTime() % 10 == 0) {
|
||||||
this.lastEnergy = this.storage.getEnergyStored();
|
this.lastEnergy = this.storage.getEnergyStored();
|
||||||
Utility.sendTileEntityToClients(this);
|
Utility.sendTileEntityToClients(this);
|
||||||
|
|
Loading…
Reference in a new issue