• 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

11.84
/src/main/java/org/cyclops/integrateddynamics/block/BlockDryingBasin.java
1
package org.cyclops.integrateddynamics.block;
2

3
import com.mojang.serialization.MapCodec;
4
import net.minecraft.core.BlockPos;
5
import net.minecraft.core.Direction;
6
import net.minecraft.server.level.ServerLevel;
7
import net.minecraft.world.Containers;
8
import net.minecraft.world.InteractionResult;
9
import net.minecraft.world.entity.player.Player;
10
import net.minecraft.world.item.ItemStack;
11
import net.minecraft.world.level.BlockGetter;
12
import net.minecraft.world.level.Level;
13
import net.minecraft.world.level.block.BaseEntityBlock;
14
import net.minecraft.world.level.block.entity.BlockEntity;
15
import net.minecraft.world.level.block.entity.BlockEntityTicker;
16
import net.minecraft.world.level.block.entity.BlockEntityType;
17
import net.minecraft.world.level.block.state.BlockState;
18
import net.minecraft.world.phys.BlockHitResult;
19
import net.minecraft.world.phys.shapes.BooleanOp;
20
import net.minecraft.world.phys.shapes.CollisionContext;
21
import net.minecraft.world.phys.shapes.Shapes;
22
import net.minecraft.world.phys.shapes.VoxelShape;
23
import net.neoforged.neoforge.capabilities.Capabilities;
24
import net.neoforged.neoforge.transfer.ResourceHandler;
25
import net.neoforged.neoforge.transfer.access.ItemAccess;
26
import net.neoforged.neoforge.transfer.fluid.FluidResource;
27
import org.cyclops.cyclopscore.block.BlockWithEntityGui;
28
import org.cyclops.cyclopscore.fluid.SingleUseTank;
29
import org.cyclops.cyclopscore.helper.IFluidHelpersNeoForge;
30
import org.cyclops.cyclopscore.helper.IModHelpers;
31
import org.cyclops.cyclopscore.helper.IModHelpersNeoForge;
32
import org.cyclops.integrateddynamics.RegistryEntries;
33
import org.cyclops.integrateddynamics.blockentity.BlockEntityDryingBasin;
34

35
import javax.annotation.Nullable;
36

37
/**
38
 * A block for drying stuff.
39
 * @author rubensworks
40
 */
41
public class BlockDryingBasin extends BlockWithEntityGui {
42

43
    public static final MapCodec<BlockDryingBasin> CODEC = simpleCodec(BlockDryingBasin::new);
3✔
44
    private static final VoxelShape SHAPE_RAYTRACE = box(2.0D, 4.0D, 2.0D, 14.0D, 16.0D, 14.0D);
8✔
45
    private static final VoxelShape SHAPE = Shapes.join(Shapes.block(), Shapes.or(
12✔
46
            box(0.0D, 0.0D, 4.0D, 16.0D, 3.0D, 12.0D),
11✔
47
            new VoxelShape[]{
48
                    box(4.0D, 0.0D, 0.0D, 12.0D, 3.0D, 16.0D),
10✔
49
                    box(2.0D, 0.0D, 2.0D, 14.0D, 3.0D, 14.0D),
6✔
50
                    SHAPE_RAYTRACE
51
            }), BooleanOp.ONLY_FIRST);
52

53
    public BlockDryingBasin(Properties properties) {
54
        super(properties, BlockEntityDryingBasin::new);
4✔
55
    }
1✔
56

57
    @Override
58
    protected MapCodec<? extends BaseEntityBlock> codec() {
59
        return CODEC;
×
60
    }
61

62
    @Override
63
    @Nullable
64
    public <T extends BlockEntity> BlockEntityTicker<T> getTicker(Level level, BlockState blockState, BlockEntityType<T> blockEntityType) {
65
        return createTickerHelper(blockEntityType, RegistryEntries.BLOCK_ENTITY_DRYING_BASIN.get(), level.isClientSide() ? new BlockEntityDryingBasin.TickerClient() : new BlockEntityDryingBasin.TickerServer());
×
66
    }
67

68
    @Override
69
    public InteractionResult useWithoutItem(BlockState blockState, Level world, BlockPos blockPos, Player player,
70
                                             BlockHitResult rayTraceResult) {
71
        return IModHelpers.get().getBlockEntityHelpers().get(world, blockPos, BlockEntityDryingBasin.class)
×
72
                .map(tile -> {
×
73
                    IFluidHelpersNeoForge fh = IModHelpersNeoForge.get().getFluidHelpers();
×
74
                    ItemAccess itemAccess = ItemAccess.forPlayerSlot(player, player.getInventory().getSelectedSlot());
×
75
                    ResourceHandler<FluidResource> itemFluidHandler = itemAccess.getCapability(Capabilities.Fluid.ITEM);
×
76
                    SingleUseTank tank = tile.getTank();
×
77
                    ItemStack tileStack = tile.getInventory().getItem(0);
×
78

79
                    if (itemAccess.getAmount() == 0 && !tileStack.isEmpty()) {
×
80
                        player.getInventory().setItem(player.getInventory().getSelectedSlot(), tileStack);
×
81
                        tile.getInventory().setItem(0, ItemStack.EMPTY);
×
82
                        tile.sendUpdate();
×
83
                        return InteractionResult.SUCCESS;
×
84
                    } else if(player.getInventory().add(tileStack)){
×
85
                        tile.getInventory().setItem(0, ItemStack.EMPTY);
×
86
                        tile.sendUpdate();
×
87
                        return InteractionResult.SUCCESS;
×
88
                    } else if (itemFluidHandler != null && !tank.isFull() && fh.canExtract(itemFluidHandler)) {
×
89
                        fh.move(itemFluidHandler, tank, Integer.MAX_VALUE, player, true, false);
×
90
                        return InteractionResult.SUCCESS;
×
91
                    } else if (itemFluidHandler != null && !tank.isEmpty() && fh.canInsert(itemFluidHandler, tank.getFluid())) {
×
92
                        fh.move(tank, itemFluidHandler, Integer.MAX_VALUE, player, false, false);
×
93
                        return InteractionResult.SUCCESS;
×
94
                    } else if (itemAccess.getAmount() > 0 && tileStack.isEmpty()) {
×
95
                        tile.getInventory().setItem(0, itemAccess.getResource().toStack());
×
96
                        if(itemAccess.getAmount() == 1) player.getInventory().setItem(player.getInventory().getSelectedSlot(), ItemStack.EMPTY);
×
97
                        tile.sendUpdate();
×
98
                        return InteractionResult.SUCCESS;
×
99
                    }
100
                    return InteractionResult.PASS;
×
101
                })
102
                .orElse(InteractionResult.PASS);
×
103
    }
104

105
    @SuppressWarnings("deprecation")
106
    @Override
107
    public boolean hasAnalogOutputSignal(BlockState blockState) {
108
        return true;
×
109
    }
110

111
    @Override
112
    protected int getAnalogOutputSignal(BlockState state, Level level, BlockPos pos, Direction direction) {
113
        return IModHelpers.get().getBlockEntityHelpers().get(level, pos, BlockEntityDryingBasin.class)
×
114
                .map(tile -> tile.getInventory().getItem(0) != null ? 15 : 0)
×
115
                .orElse(0);
×
116
    }
117

118
    @Override
119
    public VoxelShape getShape(BlockState blockState, BlockGetter world, BlockPos blockPos, CollisionContext selectionContext) {
120
        return SHAPE;
2✔
121
    }
122

123
    @Override
124
    public VoxelShape getInteractionShape(BlockState blockState, BlockGetter world, BlockPos blockPos) {
125
        return SHAPE_RAYTRACE;
×
126
    }
127

128
    @Override
129
    protected void affectNeighborsAfterRemoval(BlockState state, ServerLevel level, BlockPos pos, boolean movedByPiston) {
130
        super.affectNeighborsAfterRemoval(state, level, pos, movedByPiston);
×
131
        Containers.updateNeighboursAfterDestroy(state, level, pos);
×
132
    }
×
133
}
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