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

CyclopsMC / IntegratedDynamics / 18042102834

26 Sep 2025 03:25PM UTC coverage: 44.791% (-0.1%) from 44.905%
18042102834

push

github

rubensworks
Merge remote-tracking branch 'origin/master-1.20-lts' into master-1.21-lts

2572 of 8540 branches covered (30.12%)

Branch coverage included in aggregate %.

11761 of 23460 relevant lines covered (50.13%)

2.38 hits per line

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

0.0
/src/main/java/org/cyclops/integrateddynamics/part/aspect/write/AspectWriteBase.java
1
package org.cyclops.integrateddynamics.part.aspect.write;
2

3
import net.minecraft.network.chat.Component;
4
import net.minecraft.resources.ResourceLocation;
5
import net.neoforged.api.distmarker.Dist;
6
import net.neoforged.api.distmarker.OnlyIn;
7
import org.cyclops.cyclopscore.helper.MinecraftHelpers;
8
import org.cyclops.integrateddynamics.api.evaluate.EvaluationException;
9
import org.cyclops.integrateddynamics.api.evaluate.variable.IValue;
10
import org.cyclops.integrateddynamics.api.evaluate.variable.IValueType;
11
import org.cyclops.integrateddynamics.api.evaluate.variable.IVariable;
12
import org.cyclops.integrateddynamics.api.network.INetwork;
13
import org.cyclops.integrateddynamics.api.network.IPartNetwork;
14
import org.cyclops.integrateddynamics.api.part.IPartState;
15
import org.cyclops.integrateddynamics.api.part.IPartType;
16
import org.cyclops.integrateddynamics.api.part.PartTarget;
17
import org.cyclops.integrateddynamics.api.part.aspect.IAspectWrite;
18
import org.cyclops.integrateddynamics.api.part.aspect.property.IAspectProperties;
19
import org.cyclops.integrateddynamics.api.part.write.IPartStateWriter;
20
import org.cyclops.integrateddynamics.api.part.write.IPartTypeWriter;
21
import org.cyclops.integrateddynamics.core.evaluate.variable.ValueHelpers;
22
import org.cyclops.integrateddynamics.core.helper.L10NValues;
23
import org.cyclops.integrateddynamics.part.aspect.AspectBase;
24
import org.cyclops.integrateddynamics.part.aspect.Aspects;
25

26
/**
27
 * Base class for write aspects.
28
 * @author rubensworks
29
 */
30
public abstract class AspectWriteBase<V extends IValue, T extends IValueType<V>> extends AspectBase<V, T>
31
        implements IAspectWrite<V, T> {
32

33
    protected final String unlocalizedTypeSuffix;
34

35
    public AspectWriteBase(String modId, String unlocalizedTypeSuffix, IAspectProperties defaultProperties) {
36
        super(modId, defaultProperties);
×
37
        if(unlocalizedTypeSuffix == null) {
×
38
            unlocalizedTypeSuffix = "";
×
39
        }
40
        this.unlocalizedTypeSuffix = unlocalizedTypeSuffix;
×
41
        if(MinecraftHelpers.isClientSide()) {
×
42
            registerModelResourceLocation();
×
43
        }
44
    }
×
45

46
    @SuppressWarnings("unchecked")
47
    @Override
48
    public <P extends IPartType<P, S>, S extends IPartState<P>> void update(INetwork network, IPartNetwork partNetwork, P partType, PartTarget target, S state) {
49
        IPartTypeWriter partTypeWriter = (IPartTypeWriter) partType;
×
50
        IPartStateWriter writerState = (IPartStateWriter) state;
×
51
        IVariable variable = partTypeWriter.getActiveVariable(network, partNetwork, target, writerState);
×
52
        if(variable != null && writerState.getErrors(this).isEmpty()) {
×
53
            if (ValueHelpers.correspondsTo(variable, getValueType())) {
×
54
                if(writerState.isDeactivated() || writerState.checkAndResetFirstTick()) {
×
55
                    onActivate(partTypeWriter, target, writerState);
×
56
                }
57
                try {
58
                    write(partTypeWriter, target, writerState, variable);
×
59
                } catch (EvaluationException e) {
×
60
                    writerState.addError(this, e.getErrorMessage());
×
61
                    writerState.setDeactivated(true);
×
62
                    e.addResolutionListeners(() -> writerState.onVariableContentsUpdated(partTypeWriter, target));
×
63
                }
×
64
            } else {
65
                // This will only occur in cases where the variable is of any type, and the value type is more precise.
66
                // In all other cases, type checking will already have happen using the variable facades.
67
                try {
68
                    writerState.addError(this, Component.translatable(L10NValues.ASPECT_ERROR_INVALIDTYPE,
×
69
                        Component.translatable(getValueType().getTranslationKey()),
×
70
                        Component.translatable(variable.getValue().getType().getTranslationKey())));
×
71
                } catch (EvaluationException e) {
×
72
                    // Fallback to a less precise form of error reporting
73
                    writerState.addError(this, Component.translatable(L10NValues.ASPECT_ERROR_INVALIDTYPE,
×
74
                            Component.translatable(getValueType().getTranslationKey()),
×
75
                            Component.translatable(variable.getType().getTranslationKey())));
×
76
                }
×
77
                writerState.setDeactivated(true);
×
78
            }
79
        } else if(!writerState.isDeactivated()) {
×
80
            onDeactivate(partTypeWriter, target, writerState);
×
81
        }
82
    }
×
83

84
    @Override
85
    public <P extends IPartTypeWriter<P, S>, S extends IPartStateWriter<P>> void onActivate(P partType, PartTarget target, S state) {
86
        state.setDeactivated(false);
×
87
    }
×
88

89
    @Override
90
    public <P extends IPartTypeWriter<P, S>, S extends IPartStateWriter<P>> void onDeactivate(P partType, PartTarget target, S state) {
91
        state.setDeactivated(true);
×
92
    }
×
93

94
    @Override
95
    public <P extends IPartType<P, S>, S extends IPartState<P>> void setProperties(P partType, PartTarget target, S state, IAspectProperties properties) {
96
        onDeactivate((IPartTypeWriter) partType, target, (IPartStateWriter) state);
×
97
        super.setProperties(partType, target, state, properties);
×
98
        onActivate((IPartTypeWriter) partType, target, (IPartStateWriter) state);
×
99
    }
×
100

101
    protected String getUnlocalizedType() {
102
        return "write" + unlocalizedTypeSuffix;
×
103
    }
104

105
    @OnlyIn(Dist.CLIENT)
106
    protected void registerModelResourceLocation() {
107
        Aspects.REGISTRY.registerAspectModel(this,
×
108
                ResourceLocation.parse(getModId() + ":aspect/" + getUnlocalizedType().replaceAll("\\.", "/")));
×
109
    }
×
110

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