|
1 | 1 | package gregtech.common.metatileentities.multi.multiblockpart; |
2 | 2 |
|
3 | 3 | import gregtech.api.GTValues; |
| 4 | +import gregtech.api.capability.IGhostSlotConfigurable; |
4 | 5 | import gregtech.api.capability.impl.FilteredItemHandler; |
5 | 6 | import gregtech.api.capability.impl.FluidTankList; |
| 7 | +import gregtech.api.capability.impl.GhostCircuitItemStackHandler; |
6 | 8 | import gregtech.api.capability.impl.NotifiableFluidTank; |
7 | 9 | import gregtech.api.metatileentity.MetaTileEntity; |
8 | 10 | import gregtech.api.metatileentity.interfaces.IGregTechTileEntity; |
|
47 | 49 | import org.jetbrains.annotations.NotNull; |
48 | 50 | import org.jetbrains.annotations.Nullable; |
49 | 51 |
|
| 52 | +import java.util.Arrays; |
50 | 53 | import java.util.List; |
51 | 54 |
|
52 | 55 | public class MetaTileEntityReservoirHatch extends MetaTileEntityMultiblockNotifiablePart |
53 | | - implements IMultiblockAbilityPart<IFluidTank> { |
| 56 | + implements IMultiblockAbilityPart<IFluidTank>, |
| 57 | + IGhostSlotConfigurable { |
54 | 58 |
|
55 | 59 | private static final int FLUID_AMOUNT = 2_000_000_000; |
56 | 60 | private final InfiniteWaterTank fluidTank; |
| 61 | + private GhostCircuitItemStackHandler circuitInventory; |
57 | 62 |
|
58 | 63 | public MetaTileEntityReservoirHatch(ResourceLocation metaTileEntityId) { |
59 | 64 | super(metaTileEntityId, GTValues.EV, false); |
60 | 65 | this.fluidTank = new InfiniteWaterTank(getInventorySize(), this); |
| 66 | + if (this.hasGhostCircuitInventory()) { |
| 67 | + this.circuitInventory = new GhostCircuitItemStackHandler(this); |
| 68 | + this.circuitInventory.addNotifiableMetaTileEntity(this); |
| 69 | + } |
61 | 70 | initializeInventory(); |
62 | 71 | } |
63 | 72 |
|
@@ -115,13 +124,17 @@ protected IItemHandlerModifiable createExportItemHandler() { |
115 | 124 | } |
116 | 125 |
|
117 | 126 | @Override |
118 | | - public MultiblockAbility<IFluidTank> getAbility() { |
119 | | - return MultiblockAbility.IMPORT_FLUIDS; |
| 127 | + public @NotNull List<MultiblockAbility<?>> getAbilities() { |
| 128 | + return Arrays.asList(MultiblockAbility.IMPORT_FLUIDS, MultiblockAbility.IMPORT_ITEMS); |
120 | 129 | } |
121 | 130 |
|
122 | 131 | @Override |
123 | 132 | public void registerAbilities(@NotNull AbilityInstances abilityInstances) { |
124 | | - abilityInstances.add(fluidTank); |
| 133 | + if (abilityInstances.isKey(MultiblockAbility.IMPORT_FLUIDS)) |
| 134 | + abilityInstances.add(fluidTank); |
| 135 | + else if (abilityInstances.isKey(MultiblockAbility.IMPORT_ITEMS)) { |
| 136 | + abilityInstances.add(circuitInventory); |
| 137 | + } |
125 | 138 | } |
126 | 139 |
|
127 | 140 | @Override |
@@ -189,6 +202,22 @@ public void addToolUsages(ItemStack stack, @Nullable World world, List<String> t |
189 | 202 | super.addToolUsages(stack, world, tooltip, advanced); |
190 | 203 | } |
191 | 204 |
|
| 205 | + @Override |
| 206 | + public boolean hasGhostCircuitInventory() { |
| 207 | + return true; |
| 208 | + } |
| 209 | + |
| 210 | + @Override |
| 211 | + public void setGhostCircuitConfig(int config) { |
| 212 | + if (this.circuitInventory.getCircuitValue() == config) { |
| 213 | + return; |
| 214 | + } |
| 215 | + this.circuitInventory.setCircuitValue(config); |
| 216 | + if (!getWorld().isRemote) { |
| 217 | + markDirty(); |
| 218 | + } |
| 219 | + } |
| 220 | + |
192 | 221 | private static class InfiniteWaterTank extends NotifiableFluidTank { |
193 | 222 |
|
194 | 223 | public InfiniteWaterTank(int capacity, MetaTileEntity entityToNotify) { |
|
0 commit comments