Skip to content

Commit

Permalink
try to make failing to get a filter less aggressive
Browse files Browse the repository at this point in the history
  • Loading branch information
ghzdude committed Mar 20, 2024
1 parent c4d0d4d commit a0534e7
Show file tree
Hide file tree
Showing 5 changed files with 58 additions and 9 deletions.
5 changes: 4 additions & 1 deletion src/main/java/gregtech/common/covers/CoverFluidFilter.java
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
import gregtech.client.renderer.texture.cube.SimpleOverlayRenderer;
import gregtech.client.utils.TooltipHelper;
import gregtech.common.covers.filter.BaseFilter;
import gregtech.common.covers.filter.FilterTypeRegistry;
import gregtech.common.covers.filter.FluidFilterContainer;

import net.minecraft.entity.player.EntityPlayer;
Expand Down Expand Up @@ -109,7 +110,9 @@ public FluidFilterMode getFilterMode() {

@SuppressWarnings("DataFlowIssue") // this cover always has a filter
public @NotNull BaseFilter getFilter() {
return this.fluidFilterContainer.getFilter();
return this.fluidFilterContainer.hasFilter() ?
this.fluidFilterContainer.getFilter() :
FilterTypeRegistry.ERROR_FILTER;
}

@Override
Expand Down
7 changes: 5 additions & 2 deletions src/main/java/gregtech/common/covers/CoverItemFilter.java
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
import gregtech.client.renderer.texture.cube.SimpleOverlayRenderer;
import gregtech.client.utils.TooltipHelper;
import gregtech.common.covers.filter.BaseFilter;
import gregtech.common.covers.filter.FilterTypeRegistry;
import gregtech.common.covers.filter.ItemFilterContainer;

import net.minecraft.entity.player.EntityPlayer;
Expand Down Expand Up @@ -105,9 +106,11 @@ public ItemFilterMode getFilterMode() {
return filterMode;
}

@SuppressWarnings("DataFlowIssue") // this cover always has a filter
@SuppressWarnings("DataFlowIssue") // this cover should always have a filter
public @NotNull BaseFilter getFilter() {
return this.itemFilterContainer.getFilter();
return this.itemFilterContainer.hasFilter() ?
this.itemFilterContainer.getFilter() :
FilterTypeRegistry.ERROR_FILTER;
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -206,11 +206,11 @@ public IWidget initUI(ModularPanel main, GuiSyncManager manager) {
var panel = new PanelSyncHandler(main) {

// the panel can't be opened if there's no filter, so `getFilter()` will never be null
@SuppressWarnings("DataFlowIssue")
@Override
public ModularPanel createUI(ModularPanel mainPanel, GuiSyncManager syncManager) {
getFilter().setMaxTransferSize(getMaxTransferSize());
return getFilter().createPopupPanel(syncManager);
var filter = hasFilter() ? getFilter() : FilterTypeRegistry.ERROR_FILTER;
filter.setMaxTransferSize(getMaxTransferSize());
return filter.createPopupPanel(syncManager);
}
};
manager.syncValue("filter_panel", panel);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,18 @@
package gregtech.common.covers.filter;

import gregtech.api.mui.GTGuis;
import gregtech.api.util.GTLog;
import gregtech.api.util.ItemStackHashStrategy;
import gregtech.common.covers.filter.readers.BaseFilterReader;
import gregtech.common.items.MetaItems;

import net.minecraft.item.ItemStack;

import com.cleanroommc.modularui.api.drawable.IKey;
import com.cleanroommc.modularui.screen.ModularPanel;
import com.cleanroommc.modularui.utils.Alignment;
import com.cleanroommc.modularui.value.sync.GuiSyncManager;
import com.cleanroommc.modularui.widget.Widget;
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
import it.unimi.dsi.fastutil.objects.Object2IntOpenCustomHashMap;
import it.unimi.dsi.fastutil.objects.Object2ObjectOpenCustomHashMap;
Expand Down Expand Up @@ -40,6 +48,36 @@ public class FilterTypeRegistry {
private static final Map<Integer, FilterFactory> itemFilterById = new Int2ObjectOpenHashMap<>();
private static final Map<Integer, FilterFactory> fluidFilterById = new Int2ObjectOpenHashMap<>();

public static final BaseFilter ERROR_FILTER;

static {
ERROR_FILTER = new BaseFilter() {

@Override
public @NotNull ModularPanel createPopupPanel(GuiSyncManager syncManager) {
return GTGuis.createPopupPanel("error", 100, 100)
.child(createWidgets(syncManager));
}

@Override
public @NotNull ModularPanel createPanel(GuiSyncManager syncManager) {
return GTGuis.createPanel("error", 100, 100)
.child(createWidgets(syncManager));
}

@Override
public @NotNull Widget<?> createWidgets(GuiSyncManager syncManager) {
return IKey.lang("INVALID FILTER").alignment(Alignment.Center).asWidget();
}

@Override
public FilterType getType() {
return FilterType.ITEM;
}
};
ERROR_FILTER.setFilterReader(new BaseFilterReader(ItemStack.EMPTY, 0) {});
}

public static void init() {
// todo call this in MetaItems as a component or something
registerFilter(SimpleFluidFilter::new, MetaItems.FLUID_FILTER.getStackForm());
Expand Down Expand Up @@ -109,6 +147,8 @@ public static int getIdForFluidFilter(BaseFilter fluidFilter) {
@Deprecated
@ApiStatus.ScheduledForRemoval(inVersion = "2.10")
public static BaseFilter createItemFilterById(int filterId) {
if (!itemFilterById.containsKey(filterId))
return ERROR_FILTER;
var factory = itemFilterById.get(filterId);
return createNewFilterInstance(factory);
}
Expand All @@ -119,14 +159,17 @@ public static BaseFilter createItemFilterById(int filterId) {
@Deprecated
@ApiStatus.ScheduledForRemoval(inVersion = "2.10")
public static BaseFilter createFluidFilterById(int filterId) {
if (!fluidFilterById.containsKey(filterId))
return ERROR_FILTER;
var factory = fluidFilterById.get(filterId);
return createNewFilterInstance(factory);
}

public static @NotNull BaseFilter getFilterForStack(ItemStack stack) {
if (!filterByStack.containsKey(stack)) {
throw new IllegalArgumentException(
String.format("Failed to create filter instance for stack %s", stack));
GTLog.logger.warn(new IllegalArgumentException(
String.format("Failed to create filter instance for stack %s", stack)));
return ERROR_FILTER;
}
return filterByStack.get(stack).create(stack);
}
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/gregtech/common/covers/filter/IFilter.java
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
public interface IFilter {

@Deprecated
void initUI(Consumer<gregtech.api.gui.Widget> widgetGroup);
default void initUI(Consumer<gregtech.api.gui.Widget> widgetGroup) {}

/** Uses Cleanroom MUI */
@NotNull
Expand Down

0 comments on commit a0534e7

Please sign in to comment.