-
Notifications
You must be signed in to change notification settings - Fork 211
Expand file tree
/
Copy pathCoverItemVoiding.java
More file actions
171 lines (147 loc) · 6.13 KB
/
Copy pathCoverItemVoiding.java
File metadata and controls
171 lines (147 loc) · 6.13 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
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
package gregtech.common.covers;
import gregtech.api.capability.GregtechTileCapabilities;
import gregtech.api.cover.CoverDefinition;
import gregtech.api.cover.CoverableView;
import gregtech.client.renderer.texture.Textures;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.util.BlockRenderLayer;
import net.minecraft.util.EnumActionResult;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.EnumHand;
import net.minecraft.util.text.TextComponentTranslation;
import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.items.CapabilityItemHandler;
import net.minecraftforge.items.IItemHandler;
import codechicken.lib.raytracer.CuboidRayTraceResult;
import codechicken.lib.render.CCRenderState;
import codechicken.lib.render.pipeline.IVertexOperation;
import codechicken.lib.vec.Cuboid6;
import codechicken.lib.vec.Matrix4;
import com.cleanroommc.modularui.factory.GuiData;
import com.cleanroommc.modularui.factory.SidedPosGuiData;
import com.cleanroommc.modularui.screen.ModularPanel;
import com.cleanroommc.modularui.screen.UISettings;
import com.cleanroommc.modularui.utils.Color;
import com.cleanroommc.modularui.value.sync.BooleanSyncValue;
import com.cleanroommc.modularui.value.sync.PanelSyncManager;
import com.cleanroommc.modularui.widget.ParentWidget;
import com.cleanroommc.modularui.widgets.ToggleButton;
import com.cleanroommc.modularui.widgets.layout.Flow;
import org.jetbrains.annotations.NotNull;
public class CoverItemVoiding extends CoverConveyor {
protected final NullItemHandler nullItemHandler = new NullItemHandler();
public CoverItemVoiding(@NotNull CoverDefinition definition, @NotNull CoverableView coverableView,
@NotNull EnumFacing attachedSide) {
super(definition, coverableView, attachedSide, 0, Integer.MAX_VALUE);
this.isWorkingAllowed = false;
}
@Override
public void update() {
if (isWorkingAllowed && getCoverableView().getOffsetTimer() % 20 == 0) {
doTransferItems();
}
}
protected void doTransferItems() {
IItemHandler myItemHandler = getCoverableView().getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY,
getAttachedSide());
if (myItemHandler == null) {
return;
}
voidAny(myItemHandler);
}
void voidAny(IItemHandler myItemHandler) {
for (int srcIndex = 0; srcIndex < myItemHandler.getSlots(); srcIndex++) {
ItemStack sourceStack = myItemHandler.extractItem(srcIndex, Integer.MAX_VALUE, true);
if (sourceStack.isEmpty()) {
continue;
}
if (!itemFilterContainer.test(sourceStack)) {
continue;
}
myItemHandler.extractItem(srcIndex, Integer.MAX_VALUE, false);
}
}
@Override
public ModularPanel buildUI(SidedPosGuiData guiData, PanelSyncManager guiSyncManager, UISettings settings) {
return super.buildUI(guiData, guiSyncManager, settings).height(192 - 22);
}
@Override
protected ParentWidget<Flow> createUI(GuiData data, PanelSyncManager guiSyncManager) {
BooleanSyncValue isWorking = new BooleanSyncValue(this::isWorkingEnabled, this::setWorkingEnabled);
return super.createUI(data, guiSyncManager)
.child(Flow.row().height(18).widthRel(1f)
.marginBottom(2)
.child(new ToggleButton()
.value(isWorking)
.overlay(createEnabledKey("behaviour.soft_hammer", () -> this.isWorkingAllowed)
.color(Color.WHITE.darker(1)))
.widthRel(0.6f)
.left(0)));
}
@Override
protected boolean createThroughputRow() {
return false;
}
@Override
protected boolean createConveyorModeRow() {
return false;
}
@Override
protected boolean createDistributionModeRow() {
return false;
}
@Override
public void renderCover(CCRenderState renderState, Matrix4 translation, IVertexOperation[] pipeline,
Cuboid6 plateBox, BlockRenderLayer layer) {
Textures.ITEM_VOIDING.renderSided(getAttachedSide(), plateBox, renderState, pipeline, translation);
}
@Override
public @NotNull EnumActionResult onSoftMalletClick(@NotNull EntityPlayer playerIn, @NotNull EnumHand hand,
@NotNull CuboidRayTraceResult hitResult) {
this.isWorkingAllowed = !this.isWorkingAllowed;
if (!playerIn.world.isRemote) {
playerIn.sendStatusMessage(new TextComponentTranslation(isWorkingEnabled() ?
"cover.voiding.message.enabled" : "cover.voiding.message.disabled"), true);
}
return EnumActionResult.SUCCESS;
}
@Override
public <T> T getCapability(Capability<T> capability, T defaultValue) {
if (capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) {
return CapabilityItemHandler.ITEM_HANDLER_CAPABILITY.cast(nullItemHandler);
}
if (capability == GregtechTileCapabilities.CAPABILITY_CONTROLLABLE) {
return GregtechTileCapabilities.CAPABILITY_CONTROLLABLE.cast(this);
}
return defaultValue;
}
class NullItemHandler implements IItemHandler {
@Override
public int getSlots() {
return 9;
}
@NotNull
@Override
public ItemStack getStackInSlot(int slot) {
return ItemStack.EMPTY;
}
@NotNull
@Override
public ItemStack insertItem(int slot, @NotNull ItemStack stack, boolean simulate) {
if (!itemFilterContainer.test(stack)) {
return stack;
}
return ItemStack.EMPTY;
}
@NotNull
@Override
public ItemStack extractItem(int slot, int amount, boolean simulate) {
return ItemStack.EMPTY;
}
@Override
public int getSlotLimit(int slot) {
return 64;
}
}
}