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

CyclopsMC / IntegratedDynamics / 22182377337

19 Feb 2026 12:46PM UTC coverage: 44.49% (-1.7%) from 46.183%
22182377337

push

github

rubensworks
Fix performance workflow failing

2663 of 8850 branches covered (30.09%)

Branch coverage included in aggregate %.

12028 of 24171 relevant lines covered (49.76%)

2.36 hits per line

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

4.11
/src/main/java/org/cyclops/integrateddynamics/part/PartTypePanelLightDynamic.java
1
package org.cyclops.integrateddynamics.part;
2

3
import net.minecraft.core.BlockPos;
4
import net.minecraft.network.chat.Component;
5
import net.minecraft.world.level.BlockGetter;
6
import net.minecraft.world.level.Level;
7
import net.minecraft.world.level.block.Block;
8
import net.minecraft.world.level.block.Blocks;
9
import org.cyclops.cyclopscore.config.extendedconfig.BlockConfig;
10
import org.cyclops.cyclopscore.helper.BlockEntityHelpers;
11
import org.cyclops.cyclopscore.helper.MinecraftHelpers;
12
import org.cyclops.integrateddynamics.Capabilities;
13
import org.cyclops.integrateddynamics.GeneralConfig;
14
import org.cyclops.integrateddynamics.RegistryEntries;
15
import org.cyclops.integrateddynamics.api.evaluate.InvalidValueTypeException;
16
import org.cyclops.integrateddynamics.api.evaluate.variable.IValue;
17
import org.cyclops.integrateddynamics.api.network.INetwork;
18
import org.cyclops.integrateddynamics.api.network.IPartNetwork;
19
import org.cyclops.integrateddynamics.api.part.PartTarget;
20
import org.cyclops.integrateddynamics.block.BlockInvisibleLight;
21
import org.cyclops.integrateddynamics.block.BlockInvisibleLightConfig;
22
import org.cyclops.integrateddynamics.core.block.IgnoredBlockStatus;
23
import org.cyclops.integrateddynamics.core.evaluate.variable.ValueTypeLightLevels;
24
import org.cyclops.integrateddynamics.core.helper.L10NValues;
25
import org.cyclops.integrateddynamics.core.part.panel.PartTypePanelVariableDriven;
26

27
/**
28
 * A part that can display variables.
29
 * @author rubensworks
30
 */
31
public class PartTypePanelLightDynamic extends PartTypePanelVariableDriven<PartTypePanelLightDynamic, PartTypePanelLightDynamic.State> {
32

33
    public PartTypePanelLightDynamic(String name) {
34
        super(name);
3✔
35
    }
1✔
36

37
    @Override
38
    public boolean supportsOffsets() {
39
        return false;
×
40
    }
41

42
    @Override
43
    protected Block createBlock(BlockConfig blockConfig) {
44
        return new IgnoredBlockStatus();
4✔
45
    }
46

47
    @Override
48
    public PartTypePanelLightDynamic.State constructDefaultState() {
49
        return new PartTypePanelLightDynamic.State();
×
50
    }
51

52
    @Override
53
    public int getConsumptionRate(State state) {
54
        return GeneralConfig.panelLightDynamicBaseConsumption;
×
55
    }
56

57
    @Override
58
    protected IgnoredBlockStatus.Status getStatus(PartTypePanelVariableDriven.State state) {
59
        IgnoredBlockStatus.Status status = super.getStatus(state);
×
60
        if (status == IgnoredBlockStatus.Status.ACTIVE && state.getDisplayValue() != null
×
61
                && getLightLevel((State) state, state.getDisplayValue()) == 0) {
×
62
            return IgnoredBlockStatus.Status.INACTIVE;
×
63
        }
64
        return status;
×
65
    }
66

67
    @Override
68
    protected void onValueChanged(INetwork network, IPartNetwork partNetwork, PartTarget target, State state, IValue lastValue, IValue newValue) {
69
        super.onValueChanged(network, partNetwork, target, state, lastValue, newValue);
×
70
        int lightLevel = 0;
×
71
        if(newValue != null) {
×
72
            lightLevel = getLightLevel(state, newValue);
×
73
        }
74
        setLightLevel(target, lightLevel);
×
75
        state.sendUpdate();
×
76
    }
×
77

78
    protected int getLightLevel(State state, IValue value) {
79
        try {
80
            return ValueTypeLightLevels.REGISTRY.getLightLevel(value);
×
81
        } catch (InvalidValueTypeException e) {
×
82
            state.addGlobalError(Component.translatable(L10NValues.PART_PANEL_ERROR_INVALIDTYPE,
×
83
                    Component.translatable(value.getType().getTranslationKey())));
×
84
        }
85
        return 0;
×
86
    }
87

88
    @Override
89
    public void onNetworkRemoval(INetwork network, IPartNetwork partNetwork, PartTarget target, State state) {
90
        super.onNetworkRemoval(network, partNetwork, target, state);
×
91
        PartTypePanelLightDynamic.setLightLevel(target, 0);
×
92
    }
×
93

94
    @Override
95
    public void onPostRemoved(INetwork network, IPartNetwork partNetwork, PartTarget target, State state) {
96
        super.onPostRemoved(network, partNetwork, target, state);
×
97
        setLightLevel(target, 0);
×
98
    }
×
99

100
    @Override
101
    public void onBlockNeighborChange(INetwork network, IPartNetwork partNetwork, PartTarget target, State state,
102
                                      BlockGetter world, Block neighbourBlock, BlockPos neighbourPos) {
103
        super.onBlockNeighborChange(network, partNetwork, target, state, world, neighbourBlock, neighbourPos);
×
104
        setLightLevel(target, state.getDisplayValue() == null ? 0 : getLightLevel(state, state.getDisplayValue()));
×
105
    }
×
106

107
    @Override
108
    public void postUpdate(INetwork network, IPartNetwork partNetwork, PartTarget target, State state, boolean updated) {
109
        boolean wasEnabled = isEnabled(state);
×
110
        super.postUpdate(network, partNetwork, target, state, updated);
×
111
        boolean isEnabled = isEnabled(state);
×
112
        if(wasEnabled != isEnabled) {
×
113
            setLightLevel(target, isEnabled ? getLightLevel(state, state.getDisplayValue()) : 0);
×
114
        }
115
    }
×
116

117
    public static void setLightLevel(PartTarget target, int lightLevel) {
118
        if (BlockInvisibleLightConfig.invisibleLightBlock) {
×
119
            Level world = target.getTarget().getPos().getLevel(true);
×
120
            BlockPos pos = target.getTarget().getPos().getBlockPos();
×
121
            if(world.isEmptyBlock(pos) || world.getBlockState(pos).getBlock() == RegistryEntries.BLOCK_INVISIBLE_LIGHT.get()) {
×
122
                if(lightLevel > 0) {
×
123
                    world.setBlockAndUpdate(pos, RegistryEntries.BLOCK_INVISIBLE_LIGHT.get().defaultBlockState()
×
124
                            .setValue(BlockInvisibleLight.LIGHT, lightLevel));
×
125
                } else {
126
                    world.setBlock(pos, Blocks.AIR.defaultBlockState(), MinecraftHelpers.BLOCK_NOTIFY_CLIENT);
×
127
                }
128
            }
129
        } else {
×
130
            BlockEntityHelpers.getCapability(target.getCenter().getPos(), target.getCenter().getSide(), Capabilities.DynamicLight.BLOCK)
×
131
                    .ifPresent(dynamicLight -> dynamicLight.setLightLevel(lightLevel));
×
132
        }
133
    }
×
134

135
    public static class State extends PartTypePanelVariableDriven.State<PartTypePanelLightDynamic, PartTypePanelLightDynamic.State> {
×
136

137
    }
138

139
}
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