Skip to content

Commit 6579ae9

Browse files
committed
Add fallback handling and client handling for projector bounds
1 parent 304693b commit 6579ae9

File tree

2 files changed

+22
-14
lines changed

2 files changed

+22
-14
lines changed

src/main/java/dev/compactmods/crafting/projector/FieldProjectorTile.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -92,10 +92,12 @@ public void updateFieldInfo() {
9292
if (!fields.hasActiveField(finalCenter)) {
9393
final IMiniaturizationField field = fields.registerField(MiniaturizationField.fromSizeAndCenter(fieldSize, finalCenter));
9494

95-
// Send activation packet to clients
96-
NetworkHandler.MAIN_CHANNEL.send(
97-
PacketDistributor.TRACKING_CHUNK.with(() -> level.getChunkAt(field.getCenter())),
98-
new FieldActivatedPacket(field));
95+
if(!level.isClientSide) {
96+
// Send activation packet to clients
97+
NetworkHandler.MAIN_CHANNEL.send(
98+
PacketDistributor.TRACKING_CHUNK.with(() -> level.getChunkAt(field.getCenter())),
99+
new FieldActivatedPacket(field));
100+
}
99101
}
100102

101103
CompactCrafting.LOGGER.debug("Changing field: updateFI");

src/main/java/dev/compactmods/crafting/projector/render/FieldProjectorRenderer.java

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import com.mojang.blaze3d.vertex.IVertexBuilder;
55
import dev.compactmods.crafting.CompactCrafting;
66
import dev.compactmods.crafting.api.field.IMiniaturizationField;
7+
import dev.compactmods.crafting.api.field.MiniaturizationFieldSize;
78
import dev.compactmods.crafting.client.ClientConfig;
89
import dev.compactmods.crafting.projector.EnumProjectorColorType;
910
import dev.compactmods.crafting.projector.FieldProjectorBlock;
@@ -23,6 +24,7 @@
2324
import net.minecraft.util.Direction;
2425
import net.minecraft.util.ResourceLocation;
2526
import net.minecraft.util.math.AxisAlignedBB;
27+
import net.minecraft.util.math.BlockPos;
2628
import net.minecraft.util.math.BlockRayTraceResult;
2729
import net.minecraft.util.math.RayTraceResult;
2830
import net.minecraft.util.math.vector.Vector3d;
@@ -64,19 +66,23 @@ public void render(FieldProjectorTile tile, float partialTicks, MatrixStack matr
6466

6567
renderDish(tile, matrixStack, buffers, combinedLightIn, combinedOverlayIn, gameTime);
6668

67-
tile.getField().ifPresent(field -> {
69+
AxisAlignedBB bounds = tile.getField().map(field -> {
6870
double scale = MathUtil.calculateFieldScale(field);
71+
return field.getBounds().deflate((1 - scale) * (field.getFieldSize().getSize() / 2.0));
72+
}).orElseGet(() -> {
73+
BlockState state = tile.getBlockState();
74+
final MiniaturizationFieldSize fieldSize = state.getValue(FieldProjectorBlock.SIZE);
75+
final BlockPos center = fieldSize.getCenterFromProjector(tile.getBlockPos(), state.getValue(FieldProjectorBlock.FACING));
76+
return fieldSize.getBoundsAtPosition(center);
77+
});
6978

70-
AxisAlignedBB bounds = field.getBounds().deflate((1 - scale) * (field.getFieldSize().getSize() / 2.0));
71-
72-
matrixStack.pushPose();
79+
matrixStack.pushPose();
7380

74-
drawScanLine(tile, matrixStack, buffers, bounds, gameTime);
75-
drawProjectorArcs(tile, matrixStack, buffers, bounds, gameTime);
76-
drawFieldFace(tile, matrixStack, buffers, bounds);
81+
drawScanLine(tile, matrixStack, buffers, bounds, gameTime);
82+
drawProjectorArcs(tile, matrixStack, buffers, bounds, gameTime);
83+
drawFieldFace(tile, matrixStack, buffers, bounds);
7784

78-
matrixStack.popPose();
79-
});
85+
matrixStack.popPose();
8086
}
8187

8288
private IBakedModel getModel() {
@@ -111,7 +117,7 @@ private void renderDish(FieldProjectorTile te, MatrixStack mx, IRenderTypeBuffer
111117
// double yaw = Math.random();
112118

113119
Direction facing = state.getValue(FieldProjectorBlock.FACING);
114-
if(facing != Direction.WEST) {
120+
if (facing != Direction.WEST) {
115121
float angle = facing.toYRot() - 90;
116122
mx.mulPose(Vector3f.YN.rotationDegrees(angle));
117123
}

0 commit comments

Comments
 (0)