Skip to content

Commit 5309d47

Browse files
committed
add filtering to base handler classes
rename and rework IFilteredHandler for item handlers as well deprecate some classes
1 parent 642b702 commit 5309d47

15 files changed

+142
-102
lines changed

src/main/java/gregtech/api/capability/IFilteredFluidContainer.java renamed to src/main/java/gregtech/api/capability/IFilteredHandler.java

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package gregtech.api.capability;
22

3+
import net.minecraft.item.ItemStack;
34
import net.minecraftforge.fluids.FluidStack;
45

56
import org.jetbrains.annotations.Nullable;
@@ -10,18 +11,23 @@
1011
* Interface for fluid containers ({@link net.minecraftforge.fluids.IFluidTank IFluidTank} or
1112
* {@link net.minecraftforge.fluids.capability.IFluidHandler IFluidHandler}) associated with {@link IFilter}.
1213
*/
13-
public interface IFilteredFluidContainer {
14+
public interface IFilteredHandler<T> {
1415

1516
/**
1617
* Compare logic for filtered instances.
1718
*/
18-
Comparator<IFilteredFluidContainer> COMPARATOR = Comparator.nullsLast(
19-
Comparator.comparing(IFilteredFluidContainer::getFilter, IFilter.FILTER_COMPARATOR));
19+
Comparator<IFilteredHandler<?>> COMPARATOR = Comparator.nullsLast(
20+
Comparator.comparing(IFilteredHandler::getFilter, IFilter.FILTER_COMPARATOR));
2021

2122
/**
2223
* @return instance of {@link IFilter} associated to this object, or {@code null} if there's no filter
2324
* associated.
2425
*/
2526
@Nullable
26-
IFilter<FluidStack> getFilter();
27+
IFilter<T> getFilter();
28+
29+
// for type safe casting
30+
interface FluidHandler extends IFilteredHandler<FluidStack> {}
31+
32+
interface ItemHandler extends IFilteredHandler<ItemStack> {}
2733
}

src/main/java/gregtech/api/capability/MultipleTankHandler.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ public MultipleTankHandler addTanks(IFluidTank... tanks) {
102102
* Entry of multi fluid tanks. Retains reference to original {@link MultipleTankHandler} for accessing
103103
* information such as {@link MultipleTankHandler#allowSameFluidFill()}.
104104
*/
105-
public static class Entry implements IFluidTank, IFilteredFluidContainer, INBTSerializable<NBTTagCompound>,
105+
public static class Entry implements IFluidTank, IFilteredHandler<FluidStack>, INBTSerializable<NBTTagCompound>,
106106
IFluidTankProperties {
107107

108108
private final IFluidTank tank;
@@ -128,7 +128,7 @@ public boolean allowSameFluidFill() {
128128
@Nullable
129129
@Override
130130
public IFilter<FluidStack> getFilter() {
131-
return getDelegate() instanceof IFilteredFluidContainer filtered ? filtered.getFilter() : null;
131+
return getDelegate() instanceof IFilteredHandler.FluidHandler filter ? filter.getFilter() : null;
132132
}
133133

134134
@Nullable

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

Lines changed: 21 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,14 @@
1111

1212
import org.jetbrains.annotations.NotNull;
1313

14+
import static gregtech.api.capability.IFilter.*;
15+
1416
/**
1517
* Common fluid filter implementations.
1618
*/
17-
public enum CommonFluidFilters implements IFilter<FluidStack> {
19+
public class CommonFluidFilters {
1820

19-
ALLOW_ALL {
21+
public static final IFilter<FluidStack> ALLOW_ALL = new IFilter<>() {
2022

2123
@Override
2224
public boolean test(@NotNull FluidStack fluid) {
@@ -29,11 +31,12 @@ public int getPriority() {
2931
}
3032

3133
@Override
32-
public IFilter<FluidStack> negate() {
34+
public @NotNull IFilter<FluidStack> negate() {
3335
return DISALLOW_ALL;
3436
}
35-
},
36-
DISALLOW_ALL {
37+
};
38+
39+
public static final IFilter<FluidStack> DISALLOW_ALL = new IFilter<>() {
3740

3841
@Override
3942
public boolean test(@NotNull FluidStack fluid) {
@@ -46,11 +49,12 @@ public int getPriority() {
4649
}
4750

4851
@Override
49-
public IFilter<FluidStack> negate() {
52+
public @NotNull IFilter<FluidStack> negate() {
5053
return ALLOW_ALL;
5154
}
52-
},
53-
BOILER_FLUID {
55+
};
56+
57+
public static final IFilter<FluidStack> BOILER_FLUID = new IFilter<>() {
5458

5559
@Override
5660
public boolean test(@NotNull FluidStack fluid) {
@@ -69,10 +73,11 @@ public boolean test(@NotNull FluidStack fluid) {
6973

7074
@Override
7175
public int getPriority() {
72-
return IFilter.whitelistLikePriority();
76+
return whitelistLikePriority();
7377
}
74-
},
75-
STEAM {
78+
};
79+
80+
public static final IFilter<FluidStack> STEAM = new IFilter<>() {
7681

7782
@Override
7883
public boolean test(@NotNull FluidStack fluid) {
@@ -81,10 +86,11 @@ public boolean test(@NotNull FluidStack fluid) {
8186

8287
@Override
8388
public int getPriority() {
84-
return IFilter.whitelistPriority(1);
89+
return whitelistPriority(1);
8590
}
86-
},
87-
LIGHTER_FUEL {
91+
};
92+
93+
public static final IFilter<FluidStack> LIGHTER_FUEL = new IFilter<>() {
8894

8995
@Override
9096
public boolean test(@NotNull FluidStack fluidStack) {
@@ -93,7 +99,7 @@ public boolean test(@NotNull FluidStack fluidStack) {
9399

94100
@Override
95101
public int getPriority() {
96-
return IFilter.whitelistPriority(2);
102+
return whitelistPriority(2);
97103
}
98104
};
99105

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package gregtech.api.capability.impl;
22

33
import gregtech.api.capability.IFilter;
4-
import gregtech.api.capability.IFilteredFluidContainer;
4+
import gregtech.api.capability.IFilteredHandler;
55

66
import net.minecraftforge.fluids.Fluid;
77
import net.minecraftforge.fluids.FluidStack;
@@ -10,7 +10,8 @@
1010
import org.jetbrains.annotations.NotNull;
1111
import org.jetbrains.annotations.Nullable;
1212

13-
public class FilteredFluidHandler extends FluidTank implements IFilteredFluidContainer {
13+
@Deprecated
14+
public class FilteredFluidHandler extends FluidTank implements IFilteredHandler.FluidHandler {
1415

1516
@Nullable
1617
private IFilter<FluidStack> filter;

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

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package gregtech.api.capability.impl;
22

3+
import gregtech.api.capability.IFilter;
34
import gregtech.api.items.itemhandlers.GTItemStackHandler;
45
import gregtech.api.metatileentity.MetaTileEntity;
56

@@ -11,14 +12,13 @@
1112

1213
import java.util.function.Predicate;
1314

15+
@Deprecated
1416
public class FilteredItemHandler extends GTItemStackHandler {
1517

1618
public static Predicate<ItemStack> getCapabilityFilter(Capability<?> cap) {
1719
return stack -> stack.hasCapability(cap, null);
1820
}
1921

20-
private Predicate<ItemStack> fillPredicate;
21-
2222
public FilteredItemHandler(MetaTileEntity metaTileEntity) {
2323
super(metaTileEntity, 1);
2424
}
@@ -32,12 +32,18 @@ public FilteredItemHandler(MetaTileEntity metaTileEntity, NonNullList<ItemStack>
3232
}
3333

3434
public FilteredItemHandler setFillPredicate(Predicate<ItemStack> fillPredicate) {
35-
this.fillPredicate = fillPredicate;
35+
setFilter(new IFilter<>() {
36+
37+
@Override
38+
public boolean test(@NotNull ItemStack stack) {
39+
return fillPredicate.test(stack);
40+
}
41+
42+
@Override
43+
public int getPriority() {
44+
return IFilter.noPriority();
45+
}
46+
});
3647
return this;
3748
}
38-
39-
@Override
40-
public boolean isItemValid(int slot, @NotNull ItemStack stack) {
41-
return fillPredicate == null || fillPredicate.test(stack);
42-
}
4349
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package gregtech.api.capability.impl;
22

33
import gregtech.api.capability.IFilter;
4-
import gregtech.api.capability.IFilteredFluidContainer;
4+
import gregtech.api.capability.IFilteredHandler;
55

66
import net.minecraft.item.ItemStack;
77
import net.minecraftforge.fluids.FluidStack;
@@ -11,7 +11,7 @@
1111
import org.jetbrains.annotations.NotNull;
1212
import org.jetbrains.annotations.Nullable;
1313

14-
public class GTFluidHandlerItemStack extends FluidHandlerItemStack implements IFilteredFluidContainer {
14+
public class GTFluidHandlerItemStack extends FluidHandlerItemStack implements IFilteredHandler.FluidHandler {
1515

1616
@Nullable
1717
private IFilter<FluidStack> filter;

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package gregtech.api.capability.impl;
22

33
import gregtech.api.capability.IFilter;
4-
import gregtech.api.capability.IFilteredFluidContainer;
4+
import gregtech.api.capability.IFilteredHandler;
55

66
import net.minecraft.item.ItemStack;
77
import net.minecraftforge.fluids.FluidStack;
@@ -11,7 +11,8 @@
1111
import org.jetbrains.annotations.NotNull;
1212
import org.jetbrains.annotations.Nullable;
1313

14-
public class GTSimpleFluidHandlerItemStack extends FluidHandlerItemStackSimple implements IFilteredFluidContainer {
14+
public class GTSimpleFluidHandlerItemStack extends FluidHandlerItemStackSimple
15+
implements IFilteredHandler.FluidHandler {
1516

1617
@Nullable
1718
private IFilter<FluidStack> filter;
Lines changed: 3 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,39 +1,11 @@
11
package gregtech.api.capability.impl;
22

3-
import gregtech.api.capability.INotifiableHandler;
43
import gregtech.api.metatileentity.MetaTileEntity;
54

6-
import java.util.ArrayList;
7-
import java.util.List;
8-
9-
public class NotifiableFilteredFluidHandler extends FilteredFluidHandler implements INotifiableHandler {
10-
11-
List<MetaTileEntity> notifiableEntities = new ArrayList<>();
12-
private final boolean isExport;
5+
@Deprecated
6+
public class NotifiableFilteredFluidHandler extends NotifiableFluidTank {
137

148
public NotifiableFilteredFluidHandler(int capacity, MetaTileEntity entityToNotify, boolean isExport) {
15-
super(capacity);
16-
this.notifiableEntities.add(entityToNotify);
17-
this.isExport = isExport;
18-
}
19-
20-
@Override
21-
protected void onContentsChanged() {
22-
super.onContentsChanged();
23-
for (MetaTileEntity metaTileEntity : notifiableEntities) {
24-
if (metaTileEntity != null && metaTileEntity.isValid()) {
25-
addToNotifiedList(metaTileEntity, this, isExport);
26-
}
27-
}
28-
}
29-
30-
@Override
31-
public void addNotifiableMetaTileEntity(MetaTileEntity metaTileEntity) {
32-
this.notifiableEntities.add(metaTileEntity);
33-
}
34-
35-
@Override
36-
public void removeNotifiableMetaTileEntity(MetaTileEntity metaTileEntity) {
37-
this.notifiableEntities.remove(metaTileEntity);
9+
super(capacity, entityToNotify, isExport);
3810
}
3911
}

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

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,24 @@
11
package gregtech.api.capability.impl;
22

3+
import gregtech.api.capability.IFilter;
4+
import gregtech.api.capability.IFilteredHandler;
35
import gregtech.api.capability.INotifiableHandler;
46
import gregtech.api.metatileentity.MetaTileEntity;
57

8+
import net.minecraftforge.fluids.FluidStack;
69
import net.minecraftforge.fluids.FluidTank;
710

11+
import org.jetbrains.annotations.NotNull;
12+
import org.jetbrains.annotations.Nullable;
13+
814
import java.util.ArrayList;
915
import java.util.List;
1016

11-
public class NotifiableFluidTank extends FluidTank implements INotifiableHandler {
17+
public class NotifiableFluidTank extends FluidTank implements INotifiableHandler, IFilteredHandler.FluidHandler {
1218

1319
List<MetaTileEntity> notifiableEntities = new ArrayList<>();
1420
private final boolean isExport;
21+
private IFilter<FluidStack> filter;
1522

1623
public NotifiableFluidTank(int capacity, MetaTileEntity entityToNotify, boolean isExport) {
1724
super(capacity);
@@ -38,4 +45,27 @@ public void addNotifiableMetaTileEntity(MetaTileEntity metaTileEntity) {
3845
public void removeNotifiableMetaTileEntity(MetaTileEntity metaTileEntity) {
3946
this.notifiableEntities.remove(metaTileEntity);
4047
}
48+
49+
@Nullable
50+
@Override
51+
public IFilter<FluidStack> getFilter() {
52+
return this.filter;
53+
}
54+
55+
/**
56+
* Set filter instance. If {@code null} is given, then the filter is set to be
57+
*
58+
* @param filter new filter instance
59+
* @return this
60+
*/
61+
@NotNull
62+
public NotifiableFluidTank setFilter(@Nullable IFilter<FluidStack> filter) {
63+
this.filter = filter;
64+
return this;
65+
}
66+
67+
@Override
68+
public boolean canFillFluidType(FluidStack fluid) {
69+
return canFill() && (this.filter == null || this.filter.test(fluid));
70+
}
4171
}

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

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,10 @@
44
import gregtech.api.items.itemhandlers.GTItemStackHandler;
55
import gregtech.api.metatileentity.MetaTileEntity;
66

7-
import net.minecraftforge.items.IItemHandlerModifiable;
8-
97
import java.util.ArrayList;
108
import java.util.List;
119

12-
public class NotifiableItemStackHandler extends GTItemStackHandler
13-
implements IItemHandlerModifiable, INotifiableHandler {
10+
public class NotifiableItemStackHandler extends GTItemStackHandler implements INotifiableHandler {
1411

1512
List<MetaTileEntity> notifiableEntities = new ArrayList<>();
1613
private final boolean isExport;

0 commit comments

Comments
 (0)