Skip to content

Commit e1cd190

Browse files
committed
some work on combining abilities
1 parent 45fc376 commit e1cd190

File tree

8 files changed

+56
-12
lines changed

8 files changed

+56
-12
lines changed

src/main/java/gregtech/api/DualHandler.java

Lines changed: 32 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,39 @@
11
package gregtech.api;
22

3+
import gregtech.api.capability.IMultipleTankHandler;
34
import gregtech.api.capability.INotifiableHandler;
5+
import gregtech.api.capability.impl.FluidTankList;
46
import gregtech.api.metatileentity.MetaTileEntity;
57
import gregtech.api.util.IDirtyNotifiable;
68

79
import net.minecraft.item.ItemStack;
810
import net.minecraftforge.fluids.FluidStack;
11+
import net.minecraftforge.fluids.FluidTank;
912
import net.minecraftforge.fluids.capability.IFluidHandler;
1013
import net.minecraftforge.fluids.capability.IFluidTankProperties;
1114
import net.minecraftforge.items.IItemHandlerModifiable;
1215

16+
import org.jetbrains.annotations.NotNull;
1317
import org.jetbrains.annotations.Nullable;
1418

1519
import java.util.ArrayList;
20+
import java.util.Collections;
1621
import java.util.List;
1722

18-
public final class DualHandler implements IItemHandlerModifiable, IFluidHandler, INotifiableHandler {
23+
public final class DualHandler implements IItemHandlerModifiable, IMultipleTankHandler, INotifiableHandler {
1924

2025
@Nullable
2126
IItemHandlerModifiable itemDelegate;
2227
@Nullable
23-
IFluidHandler fluidDelegate;
28+
IMultipleTankHandler fluidDelegate;
2429
@Nullable
2530
IDirtyNotifiable dirtyNotifiable;
2631
private final boolean isExport;
32+
private static final MultiFluidTankEntry EMPTY = new MultiFluidTankEntry(new FluidTankList(false, new FluidTank[0]), new FluidTank(0));
2733

2834
private final List<MetaTileEntity> notifiables = new ArrayList<>();
2935

30-
public DualHandler(IItemHandlerModifiable itemDelegate, IFluidHandler fluidDelegate, IDirtyNotifiable notifiable,
36+
public DualHandler(IItemHandlerModifiable itemDelegate, IMultipleTankHandler fluidDelegate, IDirtyNotifiable notifiable,
3137
boolean isExport) {
3238
this.itemDelegate = itemDelegate;
3339
this.fluidDelegate = fluidDelegate;
@@ -121,18 +127,39 @@ public static Builder builder() {
121127
return new Builder();
122128
}
123129

130+
@Override
131+
public @NotNull List<MultiFluidTankEntry> getFluidTanks() {
132+
if (this.fluidDelegate == null) return Collections.emptyList();
133+
return this.fluidDelegate.getFluidTanks();
134+
}
135+
136+
@Override
137+
public int getTanks() {
138+
return this.fluidDelegate == null ? 0 : this.fluidDelegate.getTanks();
139+
}
140+
141+
@Override
142+
public @NotNull MultiFluidTankEntry getTankAt(int index) {
143+
return this.fluidDelegate == null ? EMPTY : this.fluidDelegate.getTankAt(index);
144+
}
145+
146+
@Override
147+
public boolean allowSameFluidFill() {
148+
return this.fluidDelegate != null && this.fluidDelegate.allowSameFluidFill();
149+
}
150+
124151
public static class Builder {
125152

126153
IItemHandlerModifiable itemHandler;
127-
IFluidHandler fluidHandler;
154+
IMultipleTankHandler fluidHandler;
128155
IDirtyNotifiable notifiable;
129156

130157
public Builder itemHandler(IItemHandlerModifiable itemHandler) {
131158
this.itemHandler = itemHandler;
132159
return this;
133160
}
134161

135-
public Builder fluidTank(IFluidHandler fluidTank) {
162+
public Builder fluidTank(IMultipleTankHandler fluidTank) {
136163
this.fluidHandler = fluidTank;
137164
return this;
138165
}

src/main/java/gregtech/api/capability/impl/MultiblockRecipeLogic.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import org.jetbrains.annotations.Nullable;
2323

2424
import java.util.ArrayList;
25+
import java.util.Collections;
2526
import java.util.Iterator;
2627
import java.util.List;
2728

@@ -88,7 +89,10 @@ protected IItemHandlerModifiable getInputInventory() {
8889
// Used for distinct bus recipe checking
8990
protected List<IItemHandlerModifiable> getInputBuses() {
9091
RecipeMapMultiblockController controller = (RecipeMapMultiblockController) metaTileEntity;
91-
return controller.getAbilities(MultiblockAbility.IMPORT_ITEMS);
92+
List<IItemHandlerModifiable> l = new ArrayList<>();
93+
l.addAll(controller.getAbilitiesModifiable(MultiblockAbility.IMPORT_ITEMS));
94+
l.addAll(controller.getAbilitiesModifiable(MultiblockAbility.IMPORT_DUAL));
95+
return Collections.unmodifiableList(l);
9296
}
9397

9498
@Override

src/main/java/gregtech/api/metatileentity/MetaTileEntity.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -371,7 +371,7 @@ public final String getMetaFullName() {
371371
return getMetaName() + ".name";
372372
}
373373

374-
public <T> void addNotifiedInput(T input) {
374+
public void addNotifiedInput(Object input) {
375375
if (input instanceof IItemHandlerModifiable) {
376376
if (!notifiedItemInputList.contains(input)) {
377377
this.notifiedItemInputList.add((IItemHandlerModifiable) input);
@@ -383,7 +383,7 @@ public <T> void addNotifiedInput(T input) {
383383
}
384384
}
385385

386-
public <T> void addNotifiedOutput(T output) {
386+
public void addNotifiedOutput(Object output) {
387387
if (output instanceof IItemHandlerModifiable) {
388388
if (!notifiedItemOutputList.contains(output)) {
389389
this.notifiedItemOutputList.add((IItemHandlerModifiable) output);

src/main/java/gregtech/api/metatileentity/multiblock/MultiblockControllerBase.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -380,10 +380,13 @@ public void onRemoval() {
380380
}
381381
}
382382

383-
@SuppressWarnings("unchecked")
384383
public <T> List<T> getAbilities(MultiblockAbility<T> ability) {
385-
List<T> rawList = (List<T>) multiblockAbilities.getOrDefault(ability, Collections.emptyList());
386-
return Collections.unmodifiableList(rawList);
384+
return Collections.unmodifiableList(getAbilitiesModifiable(ability));
385+
}
386+
387+
@SuppressWarnings("unchecked")
388+
public <T> List<T> getAbilitiesModifiable(MultiblockAbility<T> ability) {
389+
return (List<T>) multiblockAbilities.getOrDefault(ability, Collections.emptyList());
387390
}
388391

389392
public List<IMultiblockPart> getMultiblockParts() {

src/main/java/gregtech/api/metatileentity/multiblock/MultiblockWithDisplayBase.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -547,6 +547,7 @@ protected void setVoidingMode(int mode) {
547547
this.getNotifiedFluidInputList().add((IFluidHandler) tank);
548548
}
549549
this.getNotifiedItemInputList().addAll(this.getAbilities(MultiblockAbility.IMPORT_ITEMS));
550+
this.getNotifiedItemInputList().addAll(this.getAbilities(MultiblockAbility.IMPORT_DUAL));
550551

551552
markDirty();
552553
}

src/main/java/gregtech/api/metatileentity/multiblock/RecipeMapMultiblockController.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package gregtech.api.metatileentity.multiblock;
22

3+
import gregtech.api.DualHandler;
34
import gregtech.api.GTValues;
45
import gregtech.api.capability.IDistinctBusController;
56
import gregtech.api.capability.IEnergyContainer;
@@ -251,6 +252,7 @@ public void setDistinct(boolean isDistinct) {
251252
if (this.isDistinct) {
252253
// todo use dual handlers
253254
this.notifiedItemInputList.addAll(this.getAbilities(MultiblockAbility.IMPORT_ITEMS));
255+
this.notifiedItemInputList.addAll(this.getAbilities(MultiblockAbility.IMPORT_DUAL));
254256
} else {
255257
this.notifiedItemInputList.add(this.inputInventory);
256258
}

src/main/java/gregtech/api/recipes/Recipe.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package gregtech.api.recipes;
22

3+
import gregtech.api.DualHandler;
34
import gregtech.api.capability.IMultipleTankHandler;
5+
import gregtech.api.capability.impl.FluidTankList;
46
import gregtech.api.recipes.category.GTRecipeCategory;
57
import gregtech.api.recipes.chance.boost.ChanceBoostFunction;
68
import gregtech.api.recipes.chance.output.ChancedOutputList;
@@ -18,6 +20,8 @@
1820
import net.minecraft.item.ItemStack;
1921
import net.minecraft.util.NonNullList;
2022
import net.minecraftforge.fluids.FluidStack;
23+
import net.minecraftforge.fluids.IFluidTank;
24+
import net.minecraftforge.fluids.capability.IFluidHandler;
2125
import net.minecraftforge.items.IItemHandlerModifiable;
2226
import net.minecraftforge.items.ItemHandlerHelper;
2327
import net.minecraftforge.oredict.OreDictionary;
@@ -193,6 +197,9 @@ public final boolean matches(boolean consumeIfSuccessful, IItemHandlerModifiable
193197
IMultipleTankHandler fluidInputs) {
194198
Pair<Boolean, int[]> fluids = null;
195199
Pair<Boolean, int[]> items = null;
200+
if (inputs instanceof IFluidTank tank) {
201+
fluidInputs = new FluidTankList(false, tank);
202+
}
196203

197204
if (fluidInputs.getFluidTanks().size() > 0) {
198205
fluids = matchesFluid(GTUtility.fluidHandlerToList(fluidInputs));

src/main/java/gregtech/common/metatileentities/electric/MetaTileEntityRockBreaker.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ private void checkAdjacentFluids() {
7575
}
7676

7777
@Override
78-
public <T> void addNotifiedInput(T input) {
78+
public void addNotifiedInput(Object input) {
7979
super.addNotifiedInput(input);
8080
onNeighborChanged();
8181
}

0 commit comments

Comments
 (0)