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

CyclopsMC / IntegratedDynamics / 16552051255

27 Jul 2025 01:58PM UTC coverage: 53.206% (+8.0%) from 45.161%
16552051255

push

github

rubensworks
Resolve minor TODOs

2888 of 8740 branches covered (33.04%)

Branch coverage included in aggregate %.

17341 of 29280 relevant lines covered (59.22%)

3.08 hits per line

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

85.87
/src/main/java/org/cyclops/integrateddynamics/IntegratedDynamics.java
1
package org.cyclops.integrateddynamics;
2

3
import com.mojang.brigadier.builder.LiteralArgumentBuilder;
4
import net.minecraft.commands.CommandBuildContext;
5
import net.minecraft.commands.CommandSourceStack;
6
import net.minecraft.commands.Commands;
7
import net.minecraft.core.Registry;
8
import net.minecraft.gametest.framework.TestEnvironmentDefinition;
9
import net.minecraft.world.item.CreativeModeTab;
10
import net.minecraft.world.item.ItemStack;
11
import net.neoforged.bus.api.EventPriority;
12
import net.neoforged.bus.api.IEventBus;
13
import net.neoforged.fml.ModList;
14
import net.neoforged.fml.common.Mod;
15
import net.neoforged.fml.event.lifecycle.FMLCommonSetupEvent;
16
import net.neoforged.fml.javafmlmod.FMLModContainer;
17
import net.neoforged.neoforge.common.NeoForge;
18
import net.neoforged.neoforge.event.RegisterGameTestsEvent;
19
import net.neoforged.neoforge.event.server.ServerStartedEvent;
20
import net.neoforged.neoforge.registries.NewRegistryEvent;
21
import org.apache.logging.log4j.Level;
22
import org.cyclops.cyclopscore.config.ConfigHandlerCommon;
23
import org.cyclops.cyclopscore.helper.IModHelpers;
24
import org.cyclops.cyclopscore.infobook.IInfoBookRegistry;
25
import org.cyclops.cyclopscore.infobook.InfoBookRegistry;
26
import org.cyclops.cyclopscore.init.ModBaseNeoForge;
27
import org.cyclops.cyclopscore.persist.world.GlobalCounters;
28
import org.cyclops.cyclopscore.proxy.IClientProxy;
29
import org.cyclops.cyclopscore.proxy.ICommonProxy;
30
import org.cyclops.integrateddynamics.api.client.model.IVariableModelProviderRegistry;
31
import org.cyclops.integrateddynamics.api.client.render.part.IPartOverlayRendererRegistry;
32
import org.cyclops.integrateddynamics.api.client.render.valuetype.IValueTypeWorldRendererRegistry;
33
import org.cyclops.integrateddynamics.api.evaluate.operator.IOperatorRegistry;
34
import org.cyclops.integrateddynamics.api.evaluate.variable.IValueCastRegistry;
35
import org.cyclops.integrateddynamics.api.evaluate.variable.IValueTypeLightLevelRegistry;
36
import org.cyclops.integrateddynamics.api.evaluate.variable.IValueTypeListProxyFactoryTypeRegistry;
37
import org.cyclops.integrateddynamics.api.evaluate.variable.IValueTypeRegistry;
38
import org.cyclops.integrateddynamics.api.ingredient.IIngredientComponentHandlerRegistry;
39
import org.cyclops.integrateddynamics.api.item.IVariableFacadeHandlerRegistry;
40
import org.cyclops.integrateddynamics.api.logicprogrammer.ILogicProgrammerElementTypeRegistry;
41
import org.cyclops.integrateddynamics.api.network.INetworkCraftingHandlerRegistry;
42
import org.cyclops.integrateddynamics.api.part.IPartTypeRegistry;
43
import org.cyclops.integrateddynamics.api.part.aspect.IAspectRegistry;
44
import org.cyclops.integrateddynamics.capability.ingredient.IngredientComponentCapabilities;
45
import org.cyclops.integrateddynamics.capability.network.NetworkCapabilityConstructors;
46
import org.cyclops.integrateddynamics.client.render.part.PartOverlayRendererRegistry;
47
import org.cyclops.integrateddynamics.client.render.part.PartOverlayRenderers;
48
import org.cyclops.integrateddynamics.client.render.valuetype.ValueTypeWorldRendererRegistry;
49
import org.cyclops.integrateddynamics.client.render.valuetype.ValueTypeWorldRenderers;
50
import org.cyclops.integrateddynamics.command.CommandCrash;
51
import org.cyclops.integrateddynamics.command.CommandNetworkDiagnostics;
52
import org.cyclops.integrateddynamics.command.CommandTest;
53
import org.cyclops.integrateddynamics.core.NoteBlockEventReceiver;
54
import org.cyclops.integrateddynamics.core.TickHandler;
55
import org.cyclops.integrateddynamics.core.client.model.VariableModelProviderRegistry;
56
import org.cyclops.integrateddynamics.core.client.model.VariableModelProviders;
57
import org.cyclops.integrateddynamics.core.evaluate.DelayVariableFacadeHandler;
58
import org.cyclops.integrateddynamics.core.evaluate.ProxyVariableFacadeHandler;
59
import org.cyclops.integrateddynamics.core.evaluate.operator.OperatorRegistry;
60
import org.cyclops.integrateddynamics.core.evaluate.operator.Operators;
61
import org.cyclops.integrateddynamics.core.evaluate.variable.*;
62
import org.cyclops.integrateddynamics.core.event.IntegratedDynamicsSetupEvent;
63
import org.cyclops.integrateddynamics.core.ingredient.IngredientComponentHandlerRegistry;
64
import org.cyclops.integrateddynamics.core.ingredient.IngredientComponentHandlers;
65
import org.cyclops.integrateddynamics.core.item.VariableFacadeHandlerRegistry;
66
import org.cyclops.integrateddynamics.core.logicprogrammer.LogicProgrammerElementTypeRegistry;
67
import org.cyclops.integrateddynamics.core.logicprogrammer.LogicProgrammerElementTypes;
68
import org.cyclops.integrateddynamics.core.network.NetworkCraftingHandlerRegistry;
69
import org.cyclops.integrateddynamics.core.part.PartTypeRegistry;
70
import org.cyclops.integrateddynamics.core.part.PartTypes;
71
import org.cyclops.integrateddynamics.core.part.aspect.AspectRegistry;
72
import org.cyclops.integrateddynamics.core.persist.world.LabelsWorldStorage;
73
import org.cyclops.integrateddynamics.core.persist.world.NetworkWorldStorage;
74
import org.cyclops.integrateddynamics.gametest.*;
75
import org.cyclops.integrateddynamics.gametest.integration.GameTester;
76
import org.cyclops.integrateddynamics.infobook.OnTheDynamicsOfIntegrationBook;
77
import org.cyclops.integrateddynamics.item.ItemOnTheDynamicsOfIntegrationConfig;
78
import org.cyclops.integrateddynamics.metadata.RegistryExportables;
79
import org.cyclops.integrateddynamics.part.PartTypeConnectorOmniDirectional;
80
import org.cyclops.integrateddynamics.part.aspect.Aspects;
81
import org.cyclops.integrateddynamics.proxy.ClientProxy;
82
import org.cyclops.integrateddynamics.proxy.CommonProxy;
83

84
import java.lang.reflect.Field;
85

86
/**
87
 * The main mod class of IntegratedDynamics.
88
 * @author rubensworks
89
 *
90
 */
91
@Mod(Reference.MOD_ID)
92
public class IntegratedDynamics extends ModBaseNeoForge<IntegratedDynamics> {
93

94
    /**
95
     * The unique instance of this mod.
96
     */
97
    public static IntegratedDynamics _instance;
98

99
    public static GlobalCounters.Access globalCounters = null;
3✔
100

101
    public IntegratedDynamics(IEventBus modEventBus) {
102
        super(Reference.MOD_ID, (instance) -> _instance = instance, modEventBus);
8✔
103

104
        // Register world storages
105
        registerWorldStorage(NetworkWorldStorage.Access.getInstance(this));
4✔
106
        registerWorldStorage(globalCounters = new GlobalCounters.Access(this));
8✔
107
        registerWorldStorage(LabelsWorldStorage.Access.getInstance(this));
4✔
108

109
        getRegistryManager().addRegistry(IVariableFacadeHandlerRegistry.class, VariableFacadeHandlerRegistry.getInstance());
5✔
110
        getRegistryManager().addRegistry(IValueTypeRegistry.class, ValueTypeRegistry.getInstance());
5✔
111
        getRegistryManager().addRegistry(IValueCastRegistry.class, ValueCastRegistry.getInstance());
5✔
112
        getRegistryManager().addRegistry(IValueTypeListProxyFactoryTypeRegistry.class, ValueTypeListProxyFactoryTypeRegistry.getInstance());
5✔
113
        getRegistryManager().addRegistry(IValueTypeLightLevelRegistry.class, ValueTypeLightLevelRegistry.getInstance());
5✔
114
        getRegistryManager().addRegistry(IPartTypeRegistry.class, PartTypeRegistry.getInstance());
5✔
115
        getRegistryManager().addRegistry(IAspectRegistry.class, AspectRegistry.getInstance());
5✔
116
        getRegistryManager().addRegistry(IOperatorRegistry.class, OperatorRegistry.getInstance());
5✔
117
        getRegistryManager().addRegistry(ILogicProgrammerElementTypeRegistry.class, LogicProgrammerElementTypeRegistry.getInstance());
5✔
118
        if(getModHelpers().getMinecraftHelpers().isClientSide()) {
5!
119
            getRegistryManager().addRegistry(IPartOverlayRendererRegistry.class, PartOverlayRendererRegistry.getInstance());
×
120
            getRegistryManager().addRegistry(IValueTypeWorldRendererRegistry.class, ValueTypeWorldRendererRegistry.getInstance());
×
121
            getRegistryManager().addRegistry(IVariableModelProviderRegistry.class, VariableModelProviderRegistry.getInstance());
×
122
        }
123

124
        getRegistryManager().getRegistry(IVariableFacadeHandlerRegistry.class).registerHandler(ProxyVariableFacadeHandler.getInstance());
7✔
125
        getRegistryManager().getRegistry(IVariableFacadeHandlerRegistry.class).registerHandler(DelayVariableFacadeHandler.getInstance());
7✔
126
        getRegistryManager().addRegistry(IInfoBookRegistry.class, new InfoBookRegistry());
7✔
127
        getRegistryManager().addRegistry(IIngredientComponentHandlerRegistry.class, IngredientComponentHandlerRegistry.getInstance());
5✔
128
        getRegistryManager().addRegistry(INetworkCraftingHandlerRegistry.class, NetworkCraftingHandlerRegistry.getInstance());
5✔
129

130
        // Preload parts, so we force their blocks and items to be registered
131
        PartTypes.load();
1✔
132

133
        modEventBus.addListener(EventPriority.LOWEST, IngredientComponentHandlers::onIngredientComponentsPopulated);
4✔
134
        modEventBus.addListener(this::onRegistriesCreate);
4✔
135
        modEventBus.register(new NetworkCapabilityConstructors());
5✔
136
        modEventBus.addListener(this::registerIntegrationGameTests);
4✔
137

138
        NeoForge.EVENT_BUS.addListener(this::onServerStartedLoadedGroups);
4✔
139
        NeoForge.EVENT_BUS.register(TickHandler.getInstance());
3✔
140
        NeoForge.EVENT_BUS.register(NoteBlockEventReceiver.getInstance());
3✔
141
    }
1✔
142

143
    public void onRegistriesCreate(NewRegistryEvent event) {
144
        IngredientComponentCapabilities.load();
1✔
145
    }
1✔
146

147
    @Override
148
    protected LiteralArgumentBuilder<CommandSourceStack> constructBaseCommand(Commands.CommandSelection selection, CommandBuildContext context) {
149
        LiteralArgumentBuilder<CommandSourceStack> root = super.constructBaseCommand(selection, context);
5✔
150

151
        root.then(CommandCrash.make());
4✔
152
        root.then(CommandNetworkDiagnostics.make());
4✔
153
        root.then(CommandTest.make());
4✔
154

155
        return root;
2✔
156
    }
157

158
    @Override
159
    protected void setup(FMLCommonSetupEvent event) {
160
        ValueTypes.load();
1✔
161
        IngredientComponentHandlers.load();
1✔
162
        ValueCastMappings.load();
1✔
163
        ValueTypeLightLevels.load();
1✔
164
        ValueTypeListProxyFactories.load();
1✔
165
        Operators.load();
1✔
166
        Aspects.load();
1✔
167
        PartTypes.register();
1✔
168
        LogicProgrammerElementTypes.load();
1✔
169
        RegistryExportables.load();
1✔
170

171
        // Register info book
172
        putGenericReference(ModBaseNeoForge.REFKEY_INFOBOOK_REWARDS, ItemOnTheDynamicsOfIntegrationConfig.bookRewards);
5✔
173
        getRegistryManager().getRegistry(IInfoBookRegistry.class).registerInfoBook(
6✔
174
                OnTheDynamicsOfIntegrationBook.getInstance(), "/data/" + Reference.MOD_ID + "/info/on_the_dynamics_of_integration.xml");
2✔
175

176
        IntegratedDynamicsSetupEvent integratedDynamicsSetupEvent = new IntegratedDynamicsSetupEvent(this.getContainer());
6✔
177
        ModList.get().forEachModContainer((name, container) -> {
4✔
178
            if (container instanceof FMLModContainer fmlModContainer) {
6✔
179
                fmlModContainer.getEventBus().post(integratedDynamicsSetupEvent);
5✔
180
            }
181
        });
1✔
182

183
        if(IModHelpers.get().getMinecraftHelpers().isClientSide()) {
4!
184
            PartOverlayRenderers.load();
×
185
            ValueTypeWorldRenderers.load();
×
186
            VariableModelProviders.load();
×
187
        }
188

189
        super.setup(event);
3✔
190
    }
1✔
191

192
    protected void onServerStartedLoadedGroups(ServerStartedEvent event) {
193
        PartTypeConnectorOmniDirectional.LOADED_GROUPS.onStartedEvent(event);
3✔
194
    }
1✔
195

196
    @Override
197
    protected IClientProxy constructClientProxy() {
198
        return new ClientProxy();
×
199
    }
200

201
    @Override
202
    protected ICommonProxy constructCommonProxy() {
203
        return new CommonProxy();
4✔
204
    }
205

206
    @Override
207
    protected CreativeModeTab.Builder constructDefaultCreativeModeTab(CreativeModeTab.Builder builder) {
208
        return super.constructDefaultCreativeModeTab(builder)
5✔
209
                .icon(() -> new ItemStack(RegistryEntries.ITEM_CABLE));
1✔
210
    }
211

212
    @Override
213
    protected void onConfigsRegister(ConfigHandlerCommon configHandler) {
214
        super.onConfigsRegister(configHandler);
3✔
215

216
        configHandler.addConfigurable(new GeneralConfig());
6✔
217
        Configs.registerBlocks(configHandler);
2✔
218
    }
1✔
219

220
    @Override
221
    public Class<?>[] getGameTestClasses() {
222
        return new Class[]{
107✔
223
                GameTestsAspectsReadAudio.class,
224
                GameTestsAspectsReadBlock.class,
225
                GameTestsAspectsReadEntity.class,
226
                GameTestsAspectsReadExtraDimensional.class,
227
                GameTestsAspectsReadFluid.class,
228
                GameTestsAspectsReadInventory.class,
229
                GameTestsAspectsReadMachine.class,
230
                GameTestsAspectsReadNetwork.class,
231
                GameTestsAspectsReadRedstone.class,
232
                GameTestsAspectsReadWorld.class,
233
                GameTestsAspectsWriteRedstone.class,
234
                GameTestsBattery.class,
235
                GameTestsCombinedAspects.class,
236
                GameTestsDelayer.class,
237
                GameTestsDryingBasin.class,
238
                GameTestsFacades.class,
239
                GameTestsGenerator.class,
240
                GameTestsMaterializer.class,
241
                GameTestsMechanicalDryingBasin.class,
242
                GameTestsMechanicalSqueezer.class,
243
                GameTestsNetwork.class,
244
                GameTestsOffsets.class,
245
                GameTestsParts.class,
246
                GameTestsProxy.class,
247
                GameTestsSqueezer.class,
248
                GameTestsWrench.class,
249
        };
250
    }
251

252
    protected void registerIntegrationGameTests(RegisterGameTestsEvent event) {
253
        try {
254
            Field field = RegisterGameTestsEvent.class.getDeclaredField("environmentsRegistry");
4✔
255
            field.setAccessible(true);
3✔
256
            Registry<TestEnvironmentDefinition> testEnvironmentRegistry = (Registry<TestEnvironmentDefinition>) field.get(event);
5✔
257
            GameTester.registerCommonTests(getModId(), event::registerTest, testEnvironmentRegistry);
9✔
258
        } catch (NoSuchFieldException | IllegalAccessException e) {
×
259
            throw new RuntimeException(e);
×
260
        }
1✔
261
    }
1✔
262

263
    /**
264
     * Log a new info message for this mod.
265
     * @param message The message to show.
266
     */
267
    public static void clog(String message) {
268
        IntegratedDynamics._instance.log(Level.INFO, message);
4✔
269
    }
1✔
270

271
    /**
272
     * Log a new message of the given level for this mod.
273
     * @param level The level in which the message must be shown.
274
     * @param message The message to show.
275
     */
276
    public static void clog(Level level, String message) {
277
        IntegratedDynamics._instance.log(level, message);
×
278
    }
×
279
}
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