-
Notifications
You must be signed in to change notification settings - Fork 361
Expand file tree
/
Copy pathMachineCoverContainer.java
More file actions
105 lines (88 loc) · 3.38 KB
/
MachineCoverContainer.java
File metadata and controls
105 lines (88 loc) · 3.38 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
package com.gregtechceu.gtceu.api.machine;
import com.gregtechceu.gtceu.api.blockentity.IGregtechBlockEntity;
import com.gregtechceu.gtceu.api.capability.ICoverable;
import com.gregtechceu.gtceu.api.cover.CoverBehavior;
import com.gregtechceu.gtceu.api.cover.CoverDefinition;
import com.gregtechceu.gtceu.api.sync_system.ISyncManaged;
import com.gregtechceu.gtceu.api.sync_system.SyncDataHolder;
import com.gregtechceu.gtceu.api.sync_system.annotations.RerenderOnChanged;
import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField;
import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient;
import com.gregtechceu.gtceu.api.transfer.fluid.IFluidHandlerModifiable;
import net.minecraft.core.Direction;
import net.minecraft.world.phys.shapes.VoxelShape;
import net.minecraftforge.items.IItemHandlerModifiable;
import lombok.Getter;
import org.jetbrains.annotations.Nullable;
import java.util.ArrayList;
public class MachineCoverContainer implements ICoverable, ISyncManaged {
@Getter
private final SyncDataHolder syncDataHolder = new SyncDataHolder(this);
@Getter
private final MetaMachine machine;
@SyncToClient
@SaveField
@RerenderOnChanged
private @Nullable CoverBehavior up, down, north, south, west, east;
public MachineCoverContainer(MetaMachine machine) {
this.machine = machine;
}
@Override
public IGregtechBlockEntity getHolder() {
return machine;
}
@Override
public boolean canPlaceCoverOnSide(CoverDefinition definition, Direction side) {
ArrayList<VoxelShape> collisionList = new ArrayList<>();
machine.addCollisionBoundingBox(collisionList);
// noinspection RedundantIfStatement
if (ICoverable.doesCoverCollide(side, collisionList, getCoverPlateThickness())) {
// cover collision box overlaps with meta tile entity collision box
return false;
}
return true;
}
@Override
public double getCoverPlateThickness() {
return 0;
}
@Override
public Direction getFrontFacing() {
return machine.getFrontFacing();
}
@Override
public boolean shouldRenderBackSide() {
return !machine.getBlockState().canOcclude();
}
@Override
public @Nullable CoverBehavior getCoverAtSide(Direction side) {
return switch (side) {
case UP -> up;
case SOUTH -> south;
case WEST -> west;
case DOWN -> down;
case EAST -> east;
case NORTH -> north;
};
}
@Override
public void setCoverAtSide(@Nullable CoverBehavior coverBehavior, Direction side) {
switch (side) {
case UP -> up = coverBehavior;
case SOUTH -> south = coverBehavior;
case WEST -> west = coverBehavior;
case DOWN -> down = coverBehavior;
case EAST -> east = coverBehavior;
case NORTH -> north = coverBehavior;
}
getSyncDataHolder().resyncAllFields();
}
@Override
public @Nullable IItemHandlerModifiable getItemHandlerCap(@Nullable Direction side, boolean useCoverCapability) {
return machine.getItemHandlerCap(side, useCoverCapability);
}
@Override
public @Nullable IFluidHandlerModifiable getFluidHandlerCap(@Nullable Direction side, boolean useCoverCapability) {
return machine.getFluidHandlerCap(side, useCoverCapability);
}
}