fixed items looking funky in pipes sometimes

This commit is contained in:
Ellpeck 2020-04-15 20:53:56 +02:00
parent ab7e472a0f
commit 9ea6f7353f
2 changed files with 21 additions and 9 deletions

View file

@ -25,13 +25,17 @@ public class PipeRenderer extends TileEntityRenderer<PipeTileEntity> {
@Override
public void render(PipeTileEntity tile, float v, MatrixStack matrixStack, IRenderTypeBuffer iRenderTypeBuffer, int k, int i1) {
BlockPos pos = tile.getPos();
if (tile.items.isEmpty())
return;
matrixStack.push();
BlockPos tilePos = tile.getPos();
matrixStack.translate(-tilePos.getX(), -tilePos.getY(), -tilePos.getZ());
for (PipeItem item : tile.items) {
matrixStack.push();
matrixStack.translate(
MathHelper.lerp(v, item.lastX, item.x) - pos.getX(),
MathHelper.lerp(v, item.lastY, item.y) - pos.getY(),
MathHelper.lerp(v, item.lastZ, item.z) - pos.getZ());
MathHelper.lerp(v, item.lastX, item.x),
MathHelper.lerp(v, item.lastY, item.y),
MathHelper.lerp(v, item.lastZ, item.z));
if (item.stack.getItem() instanceof BlockItem) {
float scale = 0.7F;
@ -59,6 +63,7 @@ public class PipeRenderer extends TileEntityRenderer<PipeTileEntity> {
}
matrixStack.pop();
}
matrixStack.pop();
}
protected int getModelCount(ItemStack stack) {

View file

@ -45,6 +45,7 @@ public class PipeItem implements INBTSerializable<CompoundNBT> {
private int pipeTimer;
private int currentTile;
private boolean dropOnObstruction;
private long lastWorldTick;
public PipeItem(ItemStack stack, BlockPos startPipe, BlockPos startInventory) {
this.stack = stack;
@ -69,6 +70,13 @@ public class PipeItem implements INBTSerializable<CompoundNBT> {
}
public void updateInPipe(PipeTileEntity currPipe) {
// this prevents pipes being updated after one another
// causing an item that just switched to tick twice
long worldTick = currPipe.getWorld().getGameTime();
if (this.lastWorldTick == worldTick)
return;
this.lastWorldTick = worldTick;
this.pipeTimer++;
BlockPos goalPos;
if (this.pipeTimer >= PIPE_TIME) {
@ -92,7 +100,7 @@ public class PipeItem implements INBTSerializable<CompoundNBT> {
this.pipeTimer = 0;
goalPos = next.getPos();
}
} else if (this.pipeTimer >= PIPE_TIME / 2) {
} else if (this.pipeTimer > PIPE_TIME / 2) {
// we're past the start of the pipe, so move to the center of the next pipe
PipeTileEntity next = this.getNextTile(currPipe, false);
if (next == null) {
@ -116,12 +124,11 @@ public class PipeItem implements INBTSerializable<CompoundNBT> {
this.lastY = this.y;
this.lastZ = this.z;
float speed = 1 / (float) PIPE_TIME;
Vec3d dist = new Vec3d(goalPos.getX() + 0.5F - this.x, goalPos.getY() + 0.5F - this.y, goalPos.getZ() + 0.5F - this.z);
dist = dist.normalize();
this.x += dist.x * speed;
this.y += dist.y * speed;
this.z += dist.z * speed;
this.x += dist.x / PIPE_TIME;
this.y += dist.y / PIPE_TIME;
this.z += dist.z / PIPE_TIME;
}
private void onPathObstructed(PipeTileEntity currPipe, boolean tryReturn) {