• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

CyclopsMC / IntegratedDynamics / 20374407946

19 Dec 2025 03:19PM UTC coverage: 53.067% (-0.005%) from 53.072%
20374407946

push

github

rubensworks
Remove deprecated IIngredientComponentValueHandler

2852 of 8730 branches covered (32.67%)

Branch coverage included in aggregate %.

17389 of 29412 relevant lines covered (59.12%)

3.07 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

0.0
/src/main/java/org/cyclops/integrateddynamics/client/render/level/PartOffsetsOverlayRenderer.java
1
package org.cyclops.integrateddynamics.client.render.level;
2

3
import com.google.common.collect.Lists;
4
import com.mojang.blaze3d.vertex.PoseStack;
5
import com.mojang.blaze3d.vertex.VertexConsumer;
6
import net.minecraft.client.Minecraft;
7
import net.minecraft.client.renderer.MultiBufferSource;
8
import net.minecraft.client.renderer.rendertype.RenderTypes;
9
import net.minecraft.world.InteractionHand;
10
import net.minecraft.world.entity.player.Player;
11
import net.minecraft.world.phys.AABB;
12
import net.minecraft.world.phys.Vec3;
13
import net.neoforged.bus.api.SubscribeEvent;
14
import net.neoforged.neoforge.client.event.RenderLevelStageEvent;
15
import org.cyclops.cyclopscore.helper.IModHelpers;
16
import org.cyclops.integrateddynamics.IntegratedDynamics;
17
import org.cyclops.integrateddynamics.core.helper.WrenchHelpers;
18
import org.cyclops.integrateddynamics.core.network.PartOffsetsClientNotifier;
19
import org.cyclops.integrateddynamics.network.packet.PartOffsetsSubscribePacket;
20

21
import java.util.List;
22
import java.util.Random;
23

24
/**
25
 * @author rubensworks
26
 */
27
public class PartOffsetsOverlayRenderer {
28

29
    private static final PartOffsetsOverlayRenderer _INSTANCE = new PartOffsetsOverlayRenderer();
×
30

31
    private boolean subscribedToServerChanges = false;
×
32

33
    private List<PartOffsetsClientNotifier.Entry> data = Lists.newArrayList();
×
34

35
    private PartOffsetsOverlayRenderer() {
×
36

37
    }
×
38

39
    public static PartOffsetsOverlayRenderer getInstance() {
40
        return _INSTANCE;
×
41
    }
42

43
    private void subscribeToServerChanges() {
44
        IntegratedDynamics._instance.getPacketHandler().sendToServer(new PartOffsetsSubscribePacket(true));
×
45
        this.subscribedToServerChanges = true;
×
46
    }
×
47

48
    private void unsubscribeToServerChanges() {
49
        IntegratedDynamics._instance.getPacketHandler().sendToServer(new PartOffsetsSubscribePacket(false));
×
50
        this.subscribedToServerChanges = false;
×
51
    }
×
52

53
    public void clear() {
54
        this.data.clear();
×
55
    }
×
56

57
    public void setData(List<PartOffsetsClientNotifier.Entry> data) {
58
        this.data = data;
×
59
    }
×
60

61
    @SubscribeEvent
62
    public void onRender(RenderLevelStageEvent.AfterTranslucentBlocks event) {
63
        // If the player is holding a wrench, show the offsets of parts
64
        // Only do this for parts with non-default target side or non-default offset
65
        Player player = Minecraft.getInstance().player;
×
66
        if (player.getItemInHand(InteractionHand.MAIN_HAND).is(WrenchHelpers.TAG_WRENCH)
×
67
                || player.getItemInHand(InteractionHand.OFF_HAND).is(WrenchHelpers.TAG_WRENCH)) {
×
68
            if (!subscribedToServerChanges) {
×
69
                this.subscribeToServerChanges();
×
70
            }
71

72
            Vec3 eyePos = event.getLevelRenderState().cameraRenderState.pos;
×
73
            for (PartOffsetsClientNotifier.Entry entry : this.data) {
×
74
                this.renderOffset(event.getPoseStack(), Minecraft.getInstance().renderBuffers().bufferSource(), entry, eyePos);
×
75
            }
×
76

77
        } else if (subscribedToServerChanges) {
×
78
            this.data.clear();
×
79
            this.unsubscribeToServerChanges();
×
80
        }
81
    }
×
82

83
    private void renderOffset(PoseStack matrixStack, MultiBufferSource renderTypeBuffer, PartOffsetsClientNotifier.Entry entry, Vec3 eyePos) {
84
        double offsetX = eyePos.x;
×
85
        double offsetY = eyePos.y;
×
86
        double offsetZ = eyePos.z;
×
87

88
        Random posRand = new Random(entry.source().asLong());
×
89
        float r = 0.5F + posRand.nextFloat() / 2;
×
90
        float g = 0.5F + posRand.nextFloat() / 2;
×
91
        float b = 0.5F + posRand.nextFloat() / 2;
×
92
        float a = 0.90F;
×
93

94
        // Draw line from center to target
95
        VertexConsumer vb = renderTypeBuffer.getBuffer(RenderTypes.SECONDARY_BLOCK_OUTLINE);
×
96
        float minX = entry.source().getX() - (float) offsetX + 0.5F + entry.sourceSide().getStepX() * 0.5F;
×
97
        float minY = entry.source().getY() - (float) offsetY + 0.5F + entry.sourceSide().getStepY() * 0.5F;
×
98
        float minZ = entry.source().getZ() - (float) offsetZ + 0.5F + entry.sourceSide().getStepZ() * 0.5F;
×
99
        float maxX = entry.source().getX() - (float) offsetX + 0.5F + entry.targetOffset().getX() + (entry.targetSide().getAxis() != entry.sourceSide().getAxis() ? entry.targetSide().getStepX() * 0.5F : 0);
×
100
        float maxY = entry.source().getY() - (float) offsetY + 0.5F + entry.targetOffset().getY() + (entry.targetSide().getAxis() != entry.sourceSide().getAxis() ? entry.targetSide().getStepY() * 0.5F : 0);
×
101
        float maxZ = entry.source().getZ() - (float) offsetZ + 0.5F + entry.targetOffset().getZ() + (entry.targetSide().getAxis() != entry.sourceSide().getAxis() ? entry.targetSide().getStepZ() * 0.5F : 0);
×
102
        vb.addVertex(matrixStack.last().pose(), minX, minY, minZ).setLineWidth(2).setColor(r, g, b, a).setNormal(0.0F, 0.0F, 0.0F);
×
103
        vb.addVertex(matrixStack.last().pose(), maxX, maxY, maxZ).setLineWidth(2).setColor(r, g, b, a).setNormal(0.0F, 0.0F, 0.0F);
×
104

105
        // Draw target face
106
        AABB bb = new AABB(entry.targetSide().getStepX() == 1 ? 0.9 : 0, entry.targetSide().getStepY() == 1 ? 0.9 : 0, entry.targetSide().getStepZ() == 1 ? 0.9 : 0,
×
107
                entry.targetSide().getStepX() == -1 ? 0.1 : 1, entry.targetSide().getStepY() == -1 ? 0.1 : 1, entry.targetSide().getStepZ() == -1 ? 0.1 : 1);
×
108
        bb = bb
×
109
                .move(entry.source())
×
110
                .move(entry.targetOffset().getX(), entry.targetOffset().getY(), entry.targetOffset().getZ())
×
111
                .move(-offsetX, -offsetY, -offsetZ)
×
112
                .inflate(0.05, 0.05, 0.05)
×
113
                .inflate(-0.05, -0.05, -0.05);
×
114
        IModHelpers.get().getRenderHelpers().renderLineBox(matrixStack, renderTypeBuffer.getBuffer(RenderTypes.lines()),
×
115
                bb, r, g, b, a, 2.5f);
116
    }
×
117

118
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc