• 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

12.73
/src/main/java/org/cyclops/integrateddynamics/block/shapes/VoxelShapeComponentsFactoryHandlerFacade.java
1
package org.cyclops.integrateddynamics.block.shapes;
2

3
import net.minecraft.core.BlockPos;
4
import net.minecraft.core.Direction;
5
import net.minecraft.world.InteractionHand;
6
import net.minecraft.world.InteractionResult;
7
import net.minecraft.world.entity.player.Player;
8
import net.minecraft.world.item.ItemStack;
9
import net.minecraft.world.level.BlockGetter;
10
import net.minecraft.world.level.Level;
11
import net.minecraft.world.level.block.state.BlockState;
12
import net.minecraft.world.phys.AABB;
13
import net.minecraft.world.phys.shapes.CollisionContext;
14
import net.minecraft.world.phys.shapes.Shapes;
15
import net.minecraft.world.phys.shapes.VoxelShape;
16
import net.neoforged.neoforge.common.extensions.ILevelExtension;
17
import org.cyclops.cyclopscore.helper.IModHelpers;
18
import org.cyclops.cyclopscore.helper.IModHelpersNeoForge;
19
import org.cyclops.integrateddynamics.Capabilities;
20
import org.cyclops.integrateddynamics.RegistryEntries;
21
import org.cyclops.integrateddynamics.core.block.BlockRayTraceResultComponent;
22
import org.cyclops.integrateddynamics.core.block.VoxelShapeComponents;
23
import org.cyclops.integrateddynamics.core.block.VoxelShapeComponentsFactory;
24
import org.cyclops.integrateddynamics.core.helper.CableHelpers;
25
import org.cyclops.integrateddynamics.core.helper.WrenchHelpers;
26

27
import javax.annotation.Nullable;
28
import java.util.Collection;
29
import java.util.Collections;
30
import java.util.Optional;
31

32
/**
33
 * Shape handler for facades.
34
 * @author rubensworks
35
 */
36
public class VoxelShapeComponentsFactoryHandlerFacade implements VoxelShapeComponentsFactory.IHandler {
3✔
37

38
    private static final VoxelShape BOUNDS = Shapes.create(new AABB(
11✔
39
            0, 0, 0,
40
            1, 1, 1));
41
    private static final VoxelShapeComponentsFactoryHandlerFacade.Component COMPONENT = new Component();
5✔
42

43
    @Override
44
    public Collection<VoxelShapeComponents.IComponent> createComponents(BlockState blockState, BlockGetter world, BlockPos blockPos, CollisionContext selectionContext) {
45
        if (world instanceof ILevelExtension level) {
3!
46
            if (CableHelpers.hasFacade(level, blockPos, blockState)) {
×
47
                return Collections.singletonList(COMPONENT);
×
48
            }
49
        }
50
        return Collections.emptyList();
2✔
51
    }
52

53
    public static class Component implements VoxelShapeComponents.IComponent {
3✔
54

55
        @Override
56
        public String getStateId(BlockState blockState, BlockGetter world, BlockPos blockPos) {
57
            String id = "fac";
×
58
            Optional<BlockState> optionalFacade = CableHelpers.getFacade((Level) world, blockPos, blockState);
×
59
            if (optionalFacade.isPresent()) {
×
60
                id += "(" + optionalFacade.get().toString() + ")";
×
61
            }
62
            return id;
×
63
        }
64

65
        @Override
66
        public VoxelShape getShape(BlockState blockState, BlockGetter world, BlockPos blockPos, CollisionContext selectionContext) {
67
            return BOUNDS;
×
68
        }
69

70
        @Override
71
        public ItemStack getCloneItemStack(Level world, BlockPos pos) {
72
            ItemStack itemStack = new ItemStack(RegistryEntries.ITEM_FACADE);
×
73
            CableHelpers.getFacade(world, pos, world.getBlockState(pos))
×
74
                    .ifPresent(facade -> RegistryEntries.ITEM_FACADE.get().writeFacadeBlock(itemStack, facade));
×
75
            return itemStack;
×
76
        }
77

78
        @Override
79
        public boolean destroy(Level world, BlockPos pos, Player player, boolean saveState) {
80
            if(!world.isClientSide()) {
×
81
                IModHelpersNeoForge.get().getCapabilityHelpers().getCapability(world, pos, Capabilities.Facadeable.BLOCK)
×
82
                        .ifPresent(facadeable -> {
×
83
                            BlockState blockState = facadeable.getFacade();
×
84
                            ItemStack itemStack = new ItemStack(RegistryEntries.ITEM_FACADE);
×
85
                            RegistryEntries.ITEM_FACADE.get().writeFacadeBlock(itemStack, blockState);
×
86
                            facadeable.setFacade(null);
×
87
                            if (!player.isCreative()) {
×
88
                                IModHelpers.get().getItemStackHelpers().spawnItemStackToPlayer(world, pos, itemStack, player);
×
89
                            }
90
                        });
×
91
                return true;
×
92
            }
93
            return false;
×
94
        }
95

96
        @Override
97
        public InteractionResult onBlockActivated(BlockState state, Level world, BlockPos blockPos, Player player, InteractionHand hand, BlockRayTraceResultComponent hit) {
98
            ItemStack heldItem = player.getItemInHand(hand);
×
99
            if(WrenchHelpers.isWrench(player, heldItem, world, blockPos, hit.getDirection()) && player.isSecondaryUseActive()) {
×
100
                if (!world.isClientSide()) {
×
101
                    destroy(world, blockPos, player, true);
×
102
                    world.updateNeighborsAt(blockPos, state.getBlock());
×
103
                }
104
                return InteractionResult.SUCCESS;
×
105
            }
106
            return InteractionResult.PASS;
×
107
        }
108

109
        @Nullable
110
        @Override
111
        public Direction getRaytraceDirection() {
112
            return null;
×
113
        }
114

115
        @Override
116
        public boolean isRaytraceLastForFace() {
117
            return true;
×
118
        }
119

120
    }
121

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