• 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

0.0
/src/main/java/org/cyclops/integrateddynamics/core/network/PartOffsetsClientNotifier.java
1
package org.cyclops.integrateddynamics.core.network;
2

3
import com.google.common.collect.Lists;
4
import net.minecraft.core.BlockPos;
5
import net.minecraft.core.Direction;
6
import net.minecraft.core.Vec3i;
7
import net.minecraft.server.MinecraftServer;
8
import net.minecraft.server.level.ServerPlayer;
9
import net.neoforged.neoforge.server.ServerLifecycleHooks;
10
import org.cyclops.cyclopscore.helper.IModHelpers;
11
import org.cyclops.integrateddynamics.GeneralConfig;
12
import org.cyclops.integrateddynamics.IntegratedDynamics;
13
import org.cyclops.integrateddynamics.api.part.IPartState;
14
import org.cyclops.integrateddynamics.api.part.IPartType;
15
import org.cyclops.integrateddynamics.core.blockentity.BlockEntityMultipartTicking;
16
import org.cyclops.integrateddynamics.network.packet.PartOffsetsDataPacket;
17

18
import java.util.List;
19
import java.util.Map;
20
import java.util.Optional;
21
import java.util.UUID;
22

23
/**
24
 * A server-side handler that sends updates to clients listening to part offset updates.
25
 * @author rubensworks
26
 */
27
public class PartOffsetsClientNotifier {
28

29
    private static final PartOffsetsClientNotifier _INSTANCE = new PartOffsetsClientNotifier();
×
30

31
    private final List<UUID> players = Lists.newArrayList();
×
32

33
    private PartOffsetsClientNotifier() {
×
34

35
    }
×
36

37
    public static PartOffsetsClientNotifier getInstance() {
38
        return _INSTANCE;
×
39
    }
40

41
    protected ServerPlayer getPlayer(UUID uuid) {
42
        return ServerLifecycleHooks.getCurrentServer().getPlayerList().getPlayer(uuid);
×
43
    }
44

45
    public synchronized void registerPlayer(ServerPlayer player) {
46
        if (!players.contains(player.getUUID())) {
×
47
            players.add(player.getUUID());
×
48
            sendPartOffsetsToPlayer(player);
×
49
        }
50
    }
×
51

52
    public synchronized void unRegisterPlayer(ServerPlayer player) {
53
        players.remove(player.getUUID());
×
54
    }
×
55

56
    public void sendPartOffsetsToPlayer(ServerPlayer player) {
57
        BlockPos centerPos = player.getOnPos();
×
58
        List<PartOffsetsClientNotifier.Entry> offsets = IModHelpers.get().getWorldHelpers().foldArea(player.level(), GeneralConfig.partOffsetRenderDistance, centerPos, (list, world, pos) -> {
×
59
            IModHelpers.get().getBlockEntityHelpers().get(world, pos, BlockEntityMultipartTicking.class)
×
60
                    .ifPresent(blockEntity -> {
×
61
                        for (Map.Entry<Direction, IPartType<?, ?>> entry : blockEntity.getPartContainer().getParts().entrySet()) {
×
62
                            Direction sourceSide = entry.getKey();
×
63
                            IPartType partType = entry.getValue();
×
64
                            IPartState partState = blockEntity.getPartContainer().getPartState(entry.getKey());
×
65

66
                            Vec3i targetOffset = partType.getTargetOffset(partState);
×
67
                            Optional<Direction> targetSideOptional = Optional.ofNullable(partType.getTargetSideOverride(partState));
×
68
                            if (!targetOffset.equals(Vec3i.ZERO) || targetSideOptional.isPresent()) {
×
69
                                Direction targetSide = targetSideOptional.orElse(sourceSide.getOpposite());
×
70
                                targetOffset = targetOffset.offset(-sourceSide.getOpposite().getStepX(), -sourceSide.getOpposite().getStepY(), -sourceSide.getOpposite().getStepZ());
×
71
                                list.add(new PartOffsetsClientNotifier.Entry(pos, sourceSide, targetOffset, targetSide));
×
72
                            }
73
                        }
×
74
                    });
×
75
            return list;
×
76
        }, Lists.newArrayList());
×
77

78
        IntegratedDynamics._instance.getPacketHandler().sendToPlayer(new PartOffsetsDataPacket(offsets), player);
×
79
    }
×
80

81
    public void tick() {
82
        MinecraftServer server = ServerLifecycleHooks.getCurrentServer();
×
83
        for (UUID playerId : players) {
×
84
            ServerPlayer player = server.getPlayerList().getPlayer(playerId);
×
85
            if (player != null) {
×
86
                sendPartOffsetsToPlayer(player);
×
87
            }
88
        }
×
89
    }
×
90

91
    public static record Entry(BlockPos source, Direction sourceSide, Vec3i targetOffset, Direction targetSide) {}
×
92

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