Skip to content

Commit 7b17735

Browse files
committed
Fix straight cable rendering
1 parent 76b30e7 commit 7b17735

3 files changed

Lines changed: 32 additions & 5 deletions

File tree

src/client/java/appeng/client/api/model/parts/PartModel.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,14 @@ void collectParts(BlockAndTintGetter level,
3333

3434
Material.Baked particleMaterial();
3535

36+
/**
37+
* @return True if the model supports attaching to a straight cable without forcing it to show as a connecting
38+
* junction.
39+
*/
40+
default boolean canAttachToStraightCable() {
41+
return false;
42+
}
43+
3644
/**
3745
* An unbaked {@link PartModel} which is what is deserialized from the JSON file and ultimately used to produce a
3846
* {@link PartModel} and its dependencies.

src/client/java/appeng/client/model/CableAnchorPartModel.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,11 @@ public Material.Baked particleMaterial() {
4747
return model.particleMaterial();
4848
}
4949

50+
@Override
51+
public boolean canAttachToStraightCable() {
52+
return true;
53+
}
54+
5055
public record Unbaked(Identifier model, Identifier shortModel) implements PartModel.Unbaked {
5156
public static final Identifier ID = AppEng.makeId("cable_anchor");
5257
public static final MapCodec<Unbaked> MAP_CODEC = RecordCodecBuilder.mapCodec(builder -> builder.group(

src/client/java/appeng/client/render/cablebus/CableBusModel.java

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -227,11 +227,7 @@ private void getCableQuads(CableBusRenderState renderState, Consumer<BakedQuad>
227227
// If the connection is straight, no busses are attached, and no covered core
228228
// has been forced (in case of glass
229229
// cables), then render the cable as a simplified straight line.
230-
boolean noAttachments = false; /*
231-
* TODO !renderState.getAttachments().values().stream()
232-
* .anyMatch(IPartModel::requireCableConnection);
233-
*/
234-
if (noAttachments && isStraightLine(cableType, connectionTypes)) {
230+
if (isStraightLine(cableType, connectionTypes) && canAllAttachmentsRenderOnStraightCable(renderState)) {
235231
Direction facing = connectionTypes.keySet().iterator().next();
236232

237233
switch (cableType) {
@@ -320,6 +316,24 @@ private void getCableQuads(CableBusRenderState renderState, Consumer<BakedQuad>
320316
}
321317
}
322318

319+
/**
320+
* {@return true if there aren't any attachments or all of them can render on a straight cable without requiring a
321+
* cable connecting core}.
322+
*/
323+
private boolean canAllAttachmentsRenderOnStraightCable(CableBusRenderState renderState) {
324+
for (var partRenderState : renderState.getAttachments().values()) {
325+
var modelsOnSide = partModels.get(partRenderState.partItem());
326+
if (modelsOnSide != null) {
327+
for (var modelOnSide : modelsOnSide) {
328+
if (!modelOnSide.canAttachToStraightCable()) {
329+
return false;
330+
}
331+
}
332+
}
333+
}
334+
return true;
335+
}
336+
323337
@Nullable
324338
private Material.Baked getCableParticleTexture(CableBusRenderState renderState) {
325339
CableCoreType coreType = CableCoreType.fromCableType(renderState.getCableType());

0 commit comments

Comments
 (0)