Skip to content

Commit afa0c28

Browse files
authored
Fixes multiblock rendering issues on world load (#4302)
1 parent fe532a8 commit afa0c28

File tree

3 files changed

+11
-1
lines changed

3 files changed

+11
-1
lines changed

src/main/java/com/gregtechceu/gtceu/api/machine/MetaMachine.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -228,6 +228,12 @@ public void onLoad() {
228228
this.isPainted() != renderState.getValue(GTMachineModelProperties.IS_PAINTED)) {
229229
setRenderState(renderState.setValue(GTMachineModelProperties.IS_PAINTED, this.isPainted()));
230230
}
231+
232+
// Force model data refresh on client when BlockEntity finishes loading,
233+
// in case the chunk was rendered before this BlockEntity was available
234+
if (isRemote()) {
235+
scheduleRenderUpdate();
236+
}
231237
}
232238

233239
/**

src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/part/MultiblockPartMachine.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import com.gregtechceu.gtceu.client.model.machine.MachineRenderState;
1313

1414
import com.lowdragmc.lowdraglib.syncdata.annotation.DescSynced;
15+
import com.lowdragmc.lowdraglib.syncdata.annotation.RequireRerender;
1516
import com.lowdragmc.lowdraglib.syncdata.annotation.UpdateListener;
1617
import com.lowdragmc.lowdraglib.syncdata.field.ManagedFieldHolder;
1718

@@ -38,6 +39,7 @@ public class MultiblockPartMachine extends MetaMachine implements IMultiPart {
3839
MetaMachine.MANAGED_FIELD_HOLDER);
3940

4041
@DescSynced
42+
@RequireRerender
4143
@UpdateListener(methodName = "onControllersUpdated")
4244
protected final Set<BlockPos> controllerPositions = new ObjectOpenHashSet<>(8);
4345
protected final SortedSet<IMultiController> controllers = new ReferenceLinkedOpenHashSet<>(8);

src/main/java/com/gregtechceu/gtceu/client/model/machine/multipart/MultiPartBakedModel.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,9 @@ public ChunkRenderTypeSet getRenderTypes(BlockState state, RandomSource rand, Mo
122122
BlockPos pos = modelData.get(MODEL_DATA_POS);
123123

124124
var machine = (level == null || pos == null) ? null : MetaMachine.getMachine(level, pos);
125-
if (machine == null) return IDynamicBakedModel.super.getRenderTypes(state, rand, modelData);
125+
// When machine is null (BE not loaded yet), use the default model's render types
126+
// to ensure we still render something instead of being invisible
127+
if (machine == null) return defaultModel.getRenderTypes(state, rand, modelData);
126128

127129
var renderTypeSets = new LinkedList<ChunkRenderTypeSet>();
128130
var selectors = getSelectors(machine.getRenderState());

0 commit comments

Comments
 (0)