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

CyclopsMC / IntegratedDynamics / 24313951665

12 Apr 2026 06:55PM UTC coverage: 53.986% (+0.07%) from 53.92%
24313951665

Pull #1658

github

web-flow
Update replaceable fluid tests to place block as player via ItemStack, triggering actual replaceable check

Agent-Logs-Url: https://github.com/CyclopsMC/IntegratedDynamics/sessions/466f2fc5-34d9-429c-a672-a72b3931d363

Co-authored-by: rubensworks <440384+rubensworks@users.noreply.github.com>
Pull Request #1658: Fix Menril Resin and Liquid Chorus fluids being non-interactable in world

3096 of 8971 branches covered (34.51%)

Branch coverage included in aggregate %.

18906 of 31784 relevant lines covered (59.48%)

3.08 hits per line

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

86.73
/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.gametest.GameTestLoaderHelpers;
24
import org.cyclops.cyclopscore.helper.IModHelpers;
25
import org.cyclops.cyclopscore.infobook.IInfoBookRegistry;
26
import org.cyclops.cyclopscore.infobook.InfoBookRegistry;
27
import org.cyclops.cyclopscore.init.ModBaseNeoForge;
28
import org.cyclops.cyclopscore.persist.world.GlobalCounters;
29
import org.cyclops.cyclopscore.proxy.IClientProxy;
30
import org.cyclops.cyclopscore.proxy.ICommonProxy;
31
import org.cyclops.integrateddynamics.api.client.model.IVariableModelProviderRegistry;
32
import org.cyclops.integrateddynamics.api.client.render.part.IPartOverlayRendererRegistry;
33
import org.cyclops.integrateddynamics.api.client.render.valuetype.IValueTypeWorldRendererRegistry;
34
import org.cyclops.integrateddynamics.api.evaluate.operator.IOperatorRegistry;
35
import org.cyclops.integrateddynamics.api.evaluate.variable.IValueCastRegistry;
36
import org.cyclops.integrateddynamics.api.evaluate.variable.IValueTypeLightLevelRegistry;
37
import org.cyclops.integrateddynamics.api.evaluate.variable.IValueTypeListProxyFactoryTypeRegistry;
38
import org.cyclops.integrateddynamics.api.evaluate.variable.IValueTypeRegistry;
39
import org.cyclops.integrateddynamics.api.ingredient.IIngredientComponentHandlerRegistry;
40
import org.cyclops.integrateddynamics.api.item.IVariableFacadeHandlerRegistry;
41
import org.cyclops.integrateddynamics.api.logicprogrammer.ILogicProgrammerElementTypeRegistry;
42
import org.cyclops.integrateddynamics.api.network.INetworkCraftingHandlerRegistry;
43
import org.cyclops.integrateddynamics.api.part.IPartTypeRegistry;
44
import org.cyclops.integrateddynamics.api.part.aspect.IAspectRegistry;
45
import org.cyclops.integrateddynamics.capability.ingredient.IngredientComponentCapabilities;
46
import org.cyclops.integrateddynamics.capability.network.NetworkCapabilityConstructors;
47
import org.cyclops.integrateddynamics.client.render.part.PartOverlayRendererRegistry;
48
import org.cyclops.integrateddynamics.client.render.part.PartOverlayRenderers;
49
import org.cyclops.integrateddynamics.client.render.valuetype.ValueTypeWorldRendererRegistry;
50
import org.cyclops.integrateddynamics.client.render.valuetype.ValueTypeWorldRenderers;
51
import org.cyclops.integrateddynamics.command.CommandCrash;
52
import org.cyclops.integrateddynamics.command.CommandGenerateNetwork;
53
import org.cyclops.integrateddynamics.command.CommandNetworkDiagnostics;
54
import org.cyclops.integrateddynamics.command.CommandTest;
55
import org.cyclops.integrateddynamics.core.NoteBlockEventReceiver;
56
import org.cyclops.integrateddynamics.core.TickHandler;
57
import org.cyclops.integrateddynamics.core.client.model.VariableModelProviderRegistry;
58
import org.cyclops.integrateddynamics.core.client.model.VariableModelProviders;
59
import org.cyclops.integrateddynamics.core.evaluate.DelayVariableFacadeHandler;
60
import org.cyclops.integrateddynamics.core.evaluate.ProxyVariableFacadeHandler;
61
import org.cyclops.integrateddynamics.core.evaluate.operator.OperatorRegistry;
62
import org.cyclops.integrateddynamics.core.evaluate.operator.Operators;
63
import org.cyclops.integrateddynamics.core.evaluate.variable.*;
64
import org.cyclops.integrateddynamics.core.event.IntegratedDynamicsSetupEvent;
65
import org.cyclops.integrateddynamics.core.ingredient.IngredientComponentHandlerRegistry;
66
import org.cyclops.integrateddynamics.core.ingredient.IngredientComponentHandlers;
67
import org.cyclops.integrateddynamics.core.item.VariableFacadeHandlerRegistry;
68
import org.cyclops.integrateddynamics.core.logicprogrammer.LogicProgrammerElementTypeRegistry;
69
import org.cyclops.integrateddynamics.core.logicprogrammer.LogicProgrammerElementTypes;
70
import org.cyclops.integrateddynamics.core.network.NetworkCraftingHandlerRegistry;
71
import org.cyclops.integrateddynamics.core.part.PartTypeRegistry;
72
import org.cyclops.integrateddynamics.core.part.PartTypes;
73
import org.cyclops.integrateddynamics.core.part.aspect.AspectRegistry;
74
import org.cyclops.integrateddynamics.core.persist.world.LabelsWorldStorage;
75
import org.cyclops.integrateddynamics.core.persist.world.NetworkWorldStorage;
76
import org.cyclops.integrateddynamics.gametest.*;
77
import org.cyclops.integrateddynamics.gametest.integration.GameTester;
78
import org.cyclops.integrateddynamics.infobook.OnTheDynamicsOfIntegrationBook;
79
import org.cyclops.integrateddynamics.item.ItemOnTheDynamicsOfIntegrationConfig;
80
import org.cyclops.integrateddynamics.metadata.RegistryExportables;
81
import org.cyclops.integrateddynamics.part.PartTypeConnectorOmniDirectional;
82
import org.cyclops.integrateddynamics.part.aspect.Aspects;
83
import org.cyclops.integrateddynamics.proxy.ClientProxy;
84
import org.cyclops.integrateddynamics.proxy.CommonProxy;
85

86
import java.lang.reflect.Field;
87

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

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

101
    public static GlobalCounters.Access globalCounters = null;
3✔
102

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

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

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

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

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

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

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

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

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

153
        root.then(CommandCrash.make());
4✔
154
        root.then(CommandGenerateNetwork.make());
4✔
155
        root.then(CommandNetworkDiagnostics.make());
4✔
156
        root.then(CommandTest.make());
4✔
157

158
        return root;
2✔
159
    }
160

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

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

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

186
        if(IModHelpers.get().getMinecraftHelpers().isClientSide()) {
4!
187
            PartOverlayRenderers.load();
×
188
            ValueTypeWorldRenderers.load();
×
189
            VariableModelProviders.load();
×
190
        }
191

192
        super.setup(event);
3✔
193
    }
1✔
194

195
    protected void onServerStartedLoadedGroups(ServerStartedEvent event) {
196
        PartTypeConnectorOmniDirectional.LOADED_GROUPS.onStartedEvent(event);
3✔
197
    }
1✔
198

199
    @Override
200
    protected IClientProxy constructClientProxy() {
201
        return new ClientProxy();
×
202
    }
203

204
    @Override
205
    protected ICommonProxy constructCommonProxy() {
206
        return new CommonProxy();
4✔
207
    }
208

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

215
    @Override
216
    protected void onConfigsRegister(ConfigHandlerCommon configHandler) {
217
        super.onConfigsRegister(configHandler);
3✔
218

219
        configHandler.addConfigurable(new GeneralConfig());
6✔
220
        Configs.registerBlocks(configHandler);
2✔
221
    }
1✔
222

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

259
    protected void registerIntegrationGameTests(RegisterGameTestsEvent event) {
260
        if (!GameTestLoaderHelpers.areGameTestsEnabled(getModId())) {
4!
261
            return;
×
262
        }
263
        try {
264
            Field field = RegisterGameTestsEvent.class.getDeclaredField("environmentsRegistry");
4✔
265
            field.setAccessible(true);
3✔
266
            Registry<TestEnvironmentDefinition<?>> testEnvironmentRegistry = (Registry<TestEnvironmentDefinition<?>>) field.get(event);
5✔
267
            GameTester.registerCommonTests(getModId(), event::registerTest, testEnvironmentRegistry);
9✔
268
            GameTestsFuzzing.registerCommonTests(getModId(), event::registerTest, testEnvironmentRegistry);
9✔
269
        } catch (NoSuchFieldException | IllegalAccessException e) {
×
270
            throw new RuntimeException(e);
×
271
        }
1✔
272
    }
1✔
273

274
    /**
275
     * Log a new info message for this mod.
276
     * @param message The message to show.
277
     */
278
    public static void clog(String message) {
279
        IntegratedDynamics._instance.log(Level.INFO, message);
4✔
280
    }
1✔
281

282
    /**
283
     * Log a new message of the given level for this mod.
284
     * @param level The level in which the message must be shown.
285
     * @param message The message to show.
286
     */
287
    public static void clog(Level level, String message) {
288
        IntegratedDynamics._instance.log(level, message);
4✔
289
    }
1✔
290
}
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