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

CyclopsMC / IntegratedDynamics / 20210191346

14 Dec 2025 03:32PM UTC coverage: 19.514% (-33.5%) from 53.061%
20210191346

push

github

rubensworks
Remove deprecations

663 of 8728 branches covered (7.6%)

Branch coverage included in aggregate %.

6786 of 29445 relevant lines covered (23.05%)

1.09 hits per line

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

9.62
/src/main/java/org/cyclops/integrateddynamics/core/blockentity/BlockEntityActiveVariableBase.java
1
package org.cyclops.integrateddynamics.core.blockentity;
2

3
import com.google.common.collect.Sets;
4
import net.minecraft.core.BlockPos;
5
import net.minecraft.network.chat.MutableComponent;
6
import net.minecraft.world.level.block.entity.BlockEntityType;
7
import net.minecraft.world.level.block.state.BlockState;
8
import net.minecraft.world.level.storage.ValueInput;
9
import net.minecraft.world.level.storage.ValueOutput;
10
import org.cyclops.cyclopscore.persist.IDirtyMarkListener;
11
import org.cyclops.cyclopscore.persist.nbt.NBTClassType;
12
import org.cyclops.integrateddynamics.Capabilities;
13
import org.cyclops.integrateddynamics.api.evaluate.variable.IValue;
14
import org.cyclops.integrateddynamics.api.evaluate.variable.IVariable;
15
import org.cyclops.integrateddynamics.api.evaluate.variable.ValueDeseralizationContext;
16
import org.cyclops.integrateddynamics.api.network.INetwork;
17
import org.cyclops.integrateddynamics.api.network.INetworkEventListener;
18
import org.cyclops.integrateddynamics.api.network.IPartNetwork;
19
import org.cyclops.integrateddynamics.api.network.event.INetworkEvent;
20
import org.cyclops.integrateddynamics.core.evaluate.InventoryVariableEvaluator;
21
import org.cyclops.integrateddynamics.core.evaluate.variable.ValueTypes;
22
import org.cyclops.integrateddynamics.core.helper.NetworkHelpers;
23
import org.cyclops.integrateddynamics.core.network.event.VariableContentsUpdatedEvent;
24

25
import javax.annotation.Nullable;
26
import java.util.List;
27
import java.util.Optional;
28
import java.util.Set;
29
import java.util.function.Supplier;
30

31
/**
32
 * Base part entity that can hold variables.
33
 * @param <E> The type of event listener
34
 * @author rubensworks
35
 */
36
public abstract class BlockEntityActiveVariableBase<E> extends BlockEntityCableConnectableInventory implements IDirtyMarkListener, INetworkEventListener<E> {
37

38
    private final InventoryVariableEvaluator<IValue> evaluator;
39

40
    public BlockEntityActiveVariableBase(BlockEntityType<?> type, BlockPos blockPos, BlockState blockState, int inventorySize) {
41
        super(type, blockPos, blockState, inventorySize, 1);
×
42
        getInventory().addDirtyMarkListener(this);
×
43

44
        this.evaluator = createEvaluator();
×
45
    }
×
46

47
    public static class CapabilityRegistrar<T extends BlockEntityActiveVariableBase<?>> extends BlockEntityCableConnectableInventory.CapabilityRegistrar<T> {
48
        public CapabilityRegistrar(Supplier<BlockEntityType<? extends T>> blockEntityType) {
49
            super(blockEntityType);
3✔
50
        }
1✔
51

52
        @Override
53
        public void populate() {
54
            super.populate();
2✔
55

56
            add(
4✔
57
                    Capabilities.ValueInterface.BLOCK,
58
                    (blockEntity, context) -> () -> {
×
59
                        INetwork network = blockEntity.getNetwork();
×
60
                        IPartNetwork partNetwork = NetworkHelpers.getPartNetworkChecked(network);
×
61
                        if (blockEntity.hasVariable()) {
×
62
                            IVariable<?> variable = blockEntity.getVariable(partNetwork);
×
63
                            if (variable != null) {
×
64
                                return Optional.of(variable.getValue());
×
65
                            }
66
                        }
67
                        return Optional.empty();
×
68
                    }
69
            );
70
        }
1✔
71
    }
72

73
    protected InventoryVariableEvaluator<IValue> createEvaluator() {
74
        return new InventoryVariableEvaluator<>(this.getInventory(), getSlotRead(), () -> ValueDeseralizationContext.of(getLevel()), ValueTypes.CATEGORY_ANY);
×
75
    }
76

77
    public InventoryVariableEvaluator getEvaluator() {
78
        return evaluator;
×
79
    }
80

81
    @Override
82
    public void saveAdditional(ValueOutput output) {
83
        super.saveAdditional(output);
×
84
        List<MutableComponent> errors = evaluator.getErrors();
×
85
        NBTClassType.writeNbt(List.class, "errors", errors, output);
×
86
    }
×
87

88
    @Override
89
    public void read(ValueInput input) {
90
        evaluator.setErrors(NBTClassType.readNbt(List.class, "errors", input));
×
91
        super.read(input);
×
92
    }
×
93

94
    public abstract int getSlotRead();
95

96
    public boolean hasVariable() {
97
        return !getInventory().getItem(getSlotRead()).isEmpty();
×
98
    }
99

100
    protected void updateReadVariable(boolean sendVariablesUpdateEvent) {
101
        evaluator.refreshVariable(getNetwork(), sendVariablesUpdateEvent);
×
102
        sendUpdate();
×
103
    }
×
104

105
    @Override
106
    public void onDirty() {
107
        if(!level.isClientSide()) {
×
108
            updateReadVariable(true);
×
109
        }
110
    }
×
111

112
    @Nullable
113
    public IVariable<?> getVariable(IPartNetwork network) {
114
        return evaluator.getVariable(getNetwork(), network);
×
115
    }
116

117
    @Override
118
    public boolean hasEventSubscriptions() {
119
        return true;
×
120
    }
121

122
    @Override
123
    public Set<Class<? extends INetworkEvent>> getSubscribedEvents() {
124
        return Sets.<Class<? extends INetworkEvent>>newHashSet(VariableContentsUpdatedEvent.class);
×
125
    }
126

127
    @Override
128
    public void onEvent(INetworkEvent event, E networkElement) {
129
        if(event instanceof VariableContentsUpdatedEvent) {
×
130
            updateReadVariable(false);
×
131
        }
132
    }
×
133

134
    @Override
135
    public void afterNetworkReAlive() {
136
        super.afterNetworkReAlive();
×
137
        updateReadVariable(true);
×
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