Outstanding Performance
- Fixed Chutes pulling from inventories causing major framerate drops - Fixed Chutes sending update packets when idling - Added a max range for filter slot rendering of blocks - Synced TEs are no longer able to cause side-effects by calling sendData on the Render Thread
This commit is contained in:
parent
cc575a70c8
commit
8edb9121cc
5 changed files with 35 additions and 12 deletions
|
@ -138,12 +138,13 @@ public class ChuteTileEntity extends SmartTileEntity implements IHaveGoggleInfor
|
|||
if (!level.isClientSide)
|
||||
canPickUpItems = canDirectlyInsert();
|
||||
|
||||
boolean clientSide = level != null && level.isClientSide && !isVirtual();
|
||||
float itemMotion = getItemMotion();
|
||||
if (itemMotion != 0 && level != null && level.isClientSide)
|
||||
spawnParticles(itemMotion);
|
||||
tickAirStreams(itemMotion);
|
||||
|
||||
if (item.isEmpty()) {
|
||||
if (item.isEmpty() && !clientSide) {
|
||||
if (itemMotion < 0)
|
||||
handleInputFromAbove();
|
||||
if (itemMotion > 0)
|
||||
|
@ -152,13 +153,13 @@ public class ChuteTileEntity extends SmartTileEntity implements IHaveGoggleInfor
|
|||
}
|
||||
|
||||
float nextOffset = itemPosition.value + itemMotion;
|
||||
|
||||
|
||||
if (itemMotion < 0) {
|
||||
if (nextOffset < .5f) {
|
||||
if (!handleDownwardOutput(true))
|
||||
nextOffset = .5f;
|
||||
else if (nextOffset < 0) {
|
||||
handleDownwardOutput(level.isClientSide && !isVirtual());
|
||||
handleDownwardOutput(clientSide);
|
||||
nextOffset = itemPosition.value;
|
||||
}
|
||||
}
|
||||
|
@ -167,7 +168,7 @@ public class ChuteTileEntity extends SmartTileEntity implements IHaveGoggleInfor
|
|||
if (!handleUpwardOutput(true))
|
||||
nextOffset = .5f;
|
||||
else if (nextOffset > 1) {
|
||||
handleUpwardOutput(level.isClientSide && !isVirtual());
|
||||
handleUpwardOutput(clientSide);
|
||||
nextOffset = itemPosition.value;
|
||||
}
|
||||
}
|
||||
|
@ -341,7 +342,8 @@ public class ChuteTileEntity extends SmartTileEntity implements IHaveGoggleInfor
|
|||
if (mode == ExtractionCountMode.UPTO || !ItemHelper.extract(inv, canAccept, mode, count, true)
|
||||
.isEmpty()) {
|
||||
ItemStack extracted = ItemHelper.extract(inv, canAccept, mode, count, false);
|
||||
setItem(extracted, startLocation);
|
||||
if (!extracted.isEmpty())
|
||||
setItem(extracted, startLocation);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -496,8 +498,8 @@ public class ChuteTileEntity extends SmartTileEntity implements IHaveGoggleInfor
|
|||
public void setItem(ItemStack stack, float insertionPos) {
|
||||
item = stack;
|
||||
itemPosition.lastValue = itemPosition.value = insertionPos;
|
||||
setChanged();
|
||||
sendData();
|
||||
if (!level.isClientSide)
|
||||
notifyUpdate();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -13,6 +13,7 @@ public class CClient extends ConfigBase {
|
|||
public ConfigBool explainRenderErrors =
|
||||
b(false, "explainRenderErrors", "Log a stack-trace when rendering issues happen within a moving contraption.");
|
||||
public ConfigFloat fanParticleDensity = f(.5f, 0, 1, "fanParticleDensity");
|
||||
public ConfigFloat filterItemRenderDistance = f(10f, 1, "filterItemRenderDistance", "[in Blocks]", "Maximum Distance to the player at which items in Blocks' filter slots will be displayed");
|
||||
public ConfigBool rainbowDebug =
|
||||
b(true, "enableRainbowDebug", "Show colourful debug information while the F3-Menu is open.");
|
||||
public ConfigBool experimentalRendering =
|
||||
|
|
|
@ -37,7 +37,7 @@ public abstract class SyncedTileEntity extends TileEntity {
|
|||
}
|
||||
|
||||
public void sendData() {
|
||||
if (level != null)
|
||||
if (level != null && !level.isClientSide)
|
||||
level.sendBlockUpdated(getBlockPos(), getBlockState(), getBlockState(), 2 | 4 | 16);
|
||||
}
|
||||
|
||||
|
|
|
@ -4,6 +4,7 @@ import com.mojang.blaze3d.matrix.MatrixStack;
|
|||
import com.simibubi.create.AllSpecialTextures;
|
||||
import com.simibubi.create.CreateClient;
|
||||
import com.simibubi.create.content.logistics.item.filter.FilterItem;
|
||||
import com.simibubi.create.foundation.config.AllConfigs;
|
||||
import com.simibubi.create.foundation.tileEntity.SmartTileEntity;
|
||||
import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour;
|
||||
import com.simibubi.create.foundation.tileEntity.behaviour.ValueBox;
|
||||
|
@ -14,11 +15,13 @@ import com.simibubi.create.foundation.tileEntity.behaviour.ValueBoxTransform.Sid
|
|||
import com.simibubi.create.foundation.utility.Iterate;
|
||||
import com.simibubi.create.foundation.utility.Lang;
|
||||
import com.simibubi.create.foundation.utility.Pair;
|
||||
import com.simibubi.create.foundation.utility.VecHelper;
|
||||
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.renderer.IRenderTypeBuffer;
|
||||
import net.minecraft.client.world.ClientWorld;
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.util.Direction;
|
||||
import net.minecraft.util.math.AxisAlignedBB;
|
||||
|
@ -86,12 +89,19 @@ public class FilteringRenderer {
|
|||
.highlightFace(result.getDirection());
|
||||
}
|
||||
|
||||
public static void renderOnTileEntity(SmartTileEntity tileEntityIn, float partialTicks, MatrixStack ms,
|
||||
public static void renderOnTileEntity(SmartTileEntity te, float partialTicks, MatrixStack ms,
|
||||
IRenderTypeBuffer buffer, int light, int overlay) {
|
||||
|
||||
if (tileEntityIn == null || tileEntityIn.isRemoved())
|
||||
if (te == null || te.isRemoved())
|
||||
return;
|
||||
FilteringBehaviour behaviour = tileEntityIn.getBehaviour(FilteringBehaviour.TYPE);
|
||||
|
||||
Entity cameraEntity = Minecraft.getInstance().cameraEntity;
|
||||
float max = AllConfigs.CLIENT.filterItemRenderDistance.getF();
|
||||
if (!te.isVirtual() && cameraEntity != null && cameraEntity.position()
|
||||
.distanceToSqr(VecHelper.getCenterOf(te.getBlockPos())) > (max * max))
|
||||
return;
|
||||
|
||||
FilteringBehaviour behaviour = te.getBehaviour(FilteringBehaviour.TYPE);
|
||||
if (behaviour == null)
|
||||
return;
|
||||
if (!behaviour.isActive())
|
||||
|
@ -101,7 +111,7 @@ public class FilteringRenderer {
|
|||
return;
|
||||
|
||||
ValueBoxTransform slotPositioning = behaviour.slotPositioning;
|
||||
BlockState blockState = tileEntityIn.getBlockState();
|
||||
BlockState blockState = te.getBlockState();
|
||||
|
||||
if (slotPositioning instanceof ValueBoxTransform.Sided) {
|
||||
ValueBoxTransform.Sided sided = (ValueBoxTransform.Sided) slotPositioning;
|
||||
|
|
|
@ -4,6 +4,7 @@ import com.mojang.blaze3d.matrix.MatrixStack;
|
|||
import com.mojang.datafixers.util.Pair;
|
||||
import com.simibubi.create.AllSpecialTextures;
|
||||
import com.simibubi.create.CreateClient;
|
||||
import com.simibubi.create.foundation.config.AllConfigs;
|
||||
import com.simibubi.create.foundation.tileEntity.SmartTileEntity;
|
||||
import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour;
|
||||
import com.simibubi.create.foundation.tileEntity.behaviour.ValueBox;
|
||||
|
@ -11,10 +12,12 @@ import com.simibubi.create.foundation.tileEntity.behaviour.ValueBoxRenderer;
|
|||
import com.simibubi.create.foundation.tileEntity.behaviour.ValueBoxTransform;
|
||||
import com.simibubi.create.foundation.utility.Iterate;
|
||||
import com.simibubi.create.foundation.utility.Lang;
|
||||
import com.simibubi.create.foundation.utility.VecHelper;
|
||||
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.renderer.IRenderTypeBuffer;
|
||||
import net.minecraft.client.world.ClientWorld;
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.util.math.AxisAlignedBB;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
|
@ -63,6 +66,13 @@ public class LinkRenderer {
|
|||
|
||||
if (te == null || te.isRemoved())
|
||||
return;
|
||||
|
||||
Entity cameraEntity = Minecraft.getInstance().cameraEntity;
|
||||
float max = AllConfigs.CLIENT.filterItemRenderDistance.getF();
|
||||
if (!te.isVirtual() && cameraEntity != null && cameraEntity.position()
|
||||
.distanceToSqr(VecHelper.getCenterOf(te.getBlockPos())) > (max * max))
|
||||
return;
|
||||
|
||||
LinkBehaviour behaviour = te.getBehaviour(LinkBehaviour.TYPE);
|
||||
if (behaviour == null)
|
||||
return;
|
||||
|
|
Loading…
Reference in a new issue