Search in sources :

Example 1 with IMaterialFilter

use of mekanism.common.content.filter.IMaterialFilter in project Mekanism by mekanism.

the class MovableFilterButton method drawBackground.

@Override
public void drawBackground(@Nonnull MatrixStack matrix, int mouseX, int mouseY, float partialTicks) {
    super.drawBackground(matrix, mouseX, mouseY, partialTicks);
    IFilter<?> filter = getFilter(filters, filterIndex, index);
    EnumColor color;
    if (filter instanceof IItemStackFilter) {
        color = EnumColor.INDIGO;
    } else if (filter instanceof ITagFilter) {
        color = EnumColor.BRIGHT_GREEN;
    } else if (filter instanceof IMaterialFilter) {
        color = EnumColor.PINK;
    } else if (filter instanceof IModIDFilter) {
        color = EnumColor.RED;
    } else {
        color = null;
    }
    if (color != null) {
        GuiUtils.fill(matrix, x, y, width, height, MekanismRenderer.getColorARGB(color, 0.5F));
        MekanismRenderer.resetColor();
    }
    updateButtonVisibility();
    // Render our sub buttons and our slot
    upButton.onDrawBackground(matrix, mouseX, mouseY, partialTicks);
    downButton.onDrawBackground(matrix, mouseX, mouseY, partialTicks);
}
Also used : EnumColor(mekanism.api.text.EnumColor) IItemStackFilter(mekanism.common.content.filter.IItemStackFilter) IMaterialFilter(mekanism.common.content.filter.IMaterialFilter) IModIDFilter(mekanism.common.content.filter.IModIDFilter) ITagFilter(mekanism.common.content.filter.ITagFilter)

Example 2 with IMaterialFilter

use of mekanism.common.content.filter.IMaterialFilter in project Mekanism by mekanism.

the class GuiFilterHolder method addGuiElements.

@Override
protected void addGuiElements() {
    super.addGuiElements();
    addButton(new GuiInnerScreen(this, 9, 17, 46, 140));
    // Filter holder
    addButton(new GuiElementHolder(this, 55, 17, 98, 118));
    // new filter button border
    addButton(new GuiElementHolder(this, 55, 135, 98, 22));
    scrollBar = addButton(new GuiScrollBar(this, 153, 17, 140, () -> getFilters().size(), () -> FILTER_COUNT));
    // Add each of the buttons and then just change visibility state to match filter info
    for (int i = 0; i < FILTER_COUNT; i++) {
        addFilterButton(new MovableFilterButton(this, 56, 18 + i * 29, i, scrollBar::getCurrentSelection, this::getFilters, index -> {
            if (index > 0) {
                Mekanism.packetHandler.sendToServer(new PacketGuiInteract(GuiInteraction.MOVE_FILTER_UP, tile, index));
            }
        }, index -> {
            if (index < getFilters().size() - 1) {
                Mekanism.packetHandler.sendToServer(new PacketGuiInteract(GuiInteraction.MOVE_FILTER_DOWN, tile, index));
            }
        }, this::onClick, filter -> {
            List<ItemStack> list = new ArrayList<>();
            if (filter != null) {
                if (filter instanceof IItemStackFilter) {
                    list.add(((IItemStackFilter<?>) filter).getItemStack());
                } else if (filter instanceof ITagFilter) {
                    list.addAll(getTagStacks(((ITagFilter<?>) filter).getTagName()));
                } else if (filter instanceof IMaterialFilter) {
                    list.addAll(TagCache.getMaterialStacks(((IMaterialFilter<?>) filter).getMaterialItem()));
                } else if (filter instanceof IModIDFilter) {
                    list.addAll(TagCache.getModIDStacks(((IModIDFilter<?>) filter).getModID(), false));
                }
            }
            return list;
        }));
    }
}
Also used : GuiElementHolder(mekanism.client.gui.element.GuiElementHolder) PacketGuiInteract(mekanism.common.network.to_server.PacketGuiInteract) FilterButton(mekanism.client.gui.element.button.FilterButton) ArrayList(java.util.ArrayList) ITextComponent(net.minecraft.util.text.ITextComponent) ITileFilterHolder(mekanism.common.tile.interfaces.ITileFilterHolder) ItemStack(net.minecraft.item.ItemStack) HashList(mekanism.common.lib.collection.HashList) GuiScrollBar(mekanism.client.gui.element.scroll.GuiScrollBar) Nonnull(javax.annotation.Nonnull) MovableFilterButton(mekanism.client.gui.element.button.MovableFilterButton) MatrixStack(com.mojang.blaze3d.matrix.MatrixStack) TileEntityMekanism(mekanism.common.tile.base.TileEntityMekanism) Mekanism(mekanism.common.Mekanism) PlayerInventory(net.minecraft.entity.player.PlayerInventory) IMaterialFilter(mekanism.common.content.filter.IMaterialFilter) ITagFilter(mekanism.common.content.filter.ITagFilter) GuiInnerScreen(mekanism.client.gui.element.GuiInnerScreen) List(java.util.List) IItemStackFilter(mekanism.common.content.filter.IItemStackFilter) IModIDFilter(mekanism.common.content.filter.IModIDFilter) MekanismTileContainer(mekanism.common.inventory.container.tile.MekanismTileContainer) GuiInteraction(mekanism.common.network.to_server.PacketGuiInteract.GuiInteraction) IFilter(mekanism.common.content.filter.IFilter) TagCache(mekanism.common.base.TagCache) IMaterialFilter(mekanism.common.content.filter.IMaterialFilter) GuiScrollBar(mekanism.client.gui.element.scroll.GuiScrollBar) PacketGuiInteract(mekanism.common.network.to_server.PacketGuiInteract) MovableFilterButton(mekanism.client.gui.element.button.MovableFilterButton) ITagFilter(mekanism.common.content.filter.ITagFilter) GuiInnerScreen(mekanism.client.gui.element.GuiInnerScreen) IItemStackFilter(mekanism.common.content.filter.IItemStackFilter) GuiElementHolder(mekanism.client.gui.element.GuiElementHolder) ArrayList(java.util.ArrayList) HashList(mekanism.common.lib.collection.HashList) List(java.util.List) IModIDFilter(mekanism.common.content.filter.IModIDFilter)

Example 3 with IMaterialFilter

use of mekanism.common.content.filter.IMaterialFilter in project Mekanism by mekanism.

the class CCArgumentWrapper method convertMapToFilter.

@Nullable
private static Object convertMapToFilter(Class<?> expectedType, Map<?, ?> map) {
    // We may want to try improving this at some point, or somehow making it slightly less hardcoded
    // but for now this will have to do
    Object type = map.get("type");
    if (type instanceof String) {
        // Handle filters as arguments, this may not be the best implementation, but it will do for now
        FilterType filterType = sanitizeStringToEnum(FilterType.class, (String) type);
        if (filterType != null) {
            IFilter<?> filter = BaseFilter.fromType(filterType);
            if (expectedType.isInstance(filter)) {
                // Validate the filter is of the type we expect
                if (filter instanceof IItemStackFilter) {
                    ItemStack stack = tryCreateFilterItem(map.get("item"), map.get("itemNBT"));
                    if (stack.isEmpty()) {
                        return null;
                    }
                    ((IItemStackFilter<?>) filter).setItemStack(stack);
                } else if (filter instanceof IMaterialFilter) {
                    ItemStack stack = tryCreateFilterItem(map.get("materialItem"), null);
                    if (stack.isEmpty()) {
                        return null;
                    }
                    ((IMaterialFilter<?>) filter).setMaterialItem(stack);
                } else if (filter instanceof IModIDFilter) {
                    String modId = tryGetFilterModId(map.get("modId"));
                    if (modId == null) {
                        return null;
                    }
                    ((IModIDFilter<?>) filter).setModID(modId);
                } else if (filter instanceof ITagFilter) {
                    String tag = tryGetFilterTag(map.get("tag"));
                    if (tag == null) {
                        return null;
                    }
                    ((ITagFilter<?>) filter).setTagName(tag);
                }
                if (filter instanceof MinerFilter) {
                    MinerFilter<?> minerFilter = (MinerFilter<?>) filter;
                    minerFilter.requiresReplacement = getBooleanFromRaw(map.get("requiresReplacement"));
                    minerFilter.replaceTarget = tryCreateItem(map.get("replaceTarget"));
                } else if (filter instanceof SorterFilter) {
                    SorterFilter<?> sorterFilter = (SorterFilter<?>) filter;
                    sorterFilter.allowDefault = getBooleanFromRaw(map.get("allowDefault"));
                    Object rawColor = map.get("color");
                    if (rawColor instanceof String) {
                        sorterFilter.color = sanitizeStringToEnum(EnumColor.class, (String) rawColor);
                    }
                    sorterFilter.sizeMode = getBooleanFromRaw(map.get("size"));
                    sorterFilter.min = getIntFromRaw(map.get("min"));
                    sorterFilter.max = getIntFromRaw(map.get("max"));
                    if (sorterFilter.min < 0 || sorterFilter.max < 0 || sorterFilter.min > sorterFilter.max || sorterFilter.max > 64) {
                        return null;
                    }
                    if (sorterFilter instanceof SorterItemStackFilter) {
                        SorterItemStackFilter sorterItemFilter = (SorterItemStackFilter) sorterFilter;
                        sorterItemFilter.fuzzyMode = getBooleanFromRaw(map.get("fuzzy"));
                    }
                } else if (filter instanceof QIOFilter) {
                    QIOFilter<?> qioFilter = (QIOFilter<?>) filter;
                    if (qioFilter instanceof QIOItemStackFilter) {
                        QIOItemStackFilter qioItemFilter = (QIOItemStackFilter) qioFilter;
                        qioItemFilter.fuzzyMode = getBooleanFromRaw(map.get("fuzzy"));
                    }
                } else if (filter instanceof OredictionificatorFilter) {
                    OredictionificatorFilter<?, ?, ?> oredictionificatorFilter = (OredictionificatorFilter<?, ?, ?>) filter;
                    Object rawTag = map.get("target");
                    if (!(rawTag instanceof String)) {
                        return null;
                    }
                    String tag = (String) rawTag;
                    if (tag.isEmpty()) {
                        return null;
                    }
                    ResourceLocation rl = ResourceLocation.tryParse(tag);
                    if (rl == null || !TileEntityOredictionificator.isValidTarget(rl)) {
                        return null;
                    }
                    oredictionificatorFilter.setFilter(rl);
                    if (oredictionificatorFilter instanceof OredictionificatorItemFilter) {
                        Item item = tryCreateItem(map.get("selected"));
                        if (item != Items.AIR) {
                            ((OredictionificatorItemFilter) oredictionificatorFilter).setSelectedOutput(item);
                        }
                    }
                }
                return filter;
            }
        }
    }
    return null;
}
Also used : SorterFilter(mekanism.common.content.transporter.SorterFilter) IMaterialFilter(mekanism.common.content.filter.IMaterialFilter) MinerFilter(mekanism.common.content.miner.MinerFilter) QIOItemStackFilter(mekanism.common.content.qio.filter.QIOItemStackFilter) ITagFilter(mekanism.common.content.filter.ITagFilter) Item(net.minecraft.item.Item) FilterType(mekanism.common.content.filter.FilterType) IItemStackFilter(mekanism.common.content.filter.IItemStackFilter) SorterItemStackFilter(mekanism.common.content.transporter.SorterItemStackFilter) ResourceLocation(net.minecraft.util.ResourceLocation) QIOFilter(mekanism.common.content.qio.filter.QIOFilter) OredictionificatorFilter(mekanism.common.content.oredictionificator.OredictionificatorFilter) ItemStack(net.minecraft.item.ItemStack) IModIDFilter(mekanism.common.content.filter.IModIDFilter) OredictionificatorItemFilter(mekanism.common.content.oredictionificator.OredictionificatorItemFilter) Nullable(javax.annotation.Nullable)

Example 4 with IMaterialFilter

use of mekanism.common.content.filter.IMaterialFilter in project Mekanism by mekanism.

the class CCArgumentWrapper method wrapReturnType.

private static Object wrapReturnType(Object result) {
    if (result == null || result instanceof Number || result instanceof Boolean || result instanceof String) {
        // Short circuit if it doesn't need wrapping
        return result;
    } else if (result instanceof ResourceLocation || result instanceof UUID) {
        return result.toString();
    } else if (result instanceof ForgeRegistryEntry<?>) {
        return getName((ForgeRegistryEntry<?>) result);
    } else if (result instanceof ChemicalStack<?>) {
        ChemicalStack<?> stack = (ChemicalStack<?>) result;
        Map<String, Object> wrapped = new HashMap<>(2);
        wrapped.put("name", getName(stack.getType()));
        wrapped.put("amount", stack.getAmount());
        return wrapped;
    } else if (result instanceof FluidStack) {
        FluidStack stack = (FluidStack) result;
        return wrapStack(stack.getFluid(), "amount", stack.getAmount(), stack.getTag());
    } else if (result instanceof ItemStack) {
        ItemStack stack = (ItemStack) result;
        return wrapStack(stack.getItem(), "count", stack.getCount(), stack.getTag());
    } else if (result instanceof INBT) {
        Object wrapped = wrapNBT((INBT) result);
        if (wrapped != null) {
            return wrapped;
        }
    } else if (result instanceof Vector3i) {
        // BlockPos is covered by this case
        Vector3i pos = (Vector3i) result;
        Map<String, Object> wrapped = new HashMap<>(3);
        wrapped.put("x", pos.getX());
        wrapped.put("y", pos.getY());
        wrapped.put("z", pos.getZ());
        return wrapped;
    } else if (result instanceof Coord4D) {
        // BlockPos is covered by this case
        Coord4D coord = (Coord4D) result;
        Map<String, Object> wrapped = new HashMap<>(4);
        wrapped.put("x", coord.getX());
        wrapped.put("y", coord.getY());
        wrapped.put("z", coord.getZ());
        wrapped.put("dimension", wrapReturnType(coord.dimension.location()));
        return wrapped;
    } else if (result instanceof Frequency) {
        FrequencyIdentity identity = ((Frequency) result).getIdentity();
        Map<String, Object> wrapped = new HashMap<>(2);
        wrapped.put("key", wrapReturnType(identity.getKey()));
        wrapped.put("public", identity.isPublic());
        return wrapped;
    } else if (result instanceof Enum) {
        return ((Enum<?>) result).name();
    } else if (result instanceof IFilter) {
        Map<String, Object> wrapped = new HashMap<>();
        wrapped.put("type", wrapReturnType(((IFilter<?>) result).getFilterType()));
        if (result instanceof IItemStackFilter) {
            ItemStack stack = ((IItemStackFilter<?>) result).getItemStack();
            wrapped.put("item", wrapReturnType(stack.getItem()));
            if (!stack.isEmpty()) {
                CompoundNBT tag = stack.getTag();
                if (tag != null && !tag.isEmpty()) {
                    wrapped.put("itemNBT", wrapNBT(tag));
                }
            }
        } else if (result instanceof IMaterialFilter) {
            wrapped.put("materialItem", wrapReturnType(((IMaterialFilter<?>) result).getMaterialItem().getItem()));
        } else if (result instanceof IModIDFilter) {
            wrapped.put("modId", ((IModIDFilter<?>) result).getModID());
        } else if (result instanceof ITagFilter) {
            wrapped.put("tag", ((ITagFilter<?>) result).getTagName());
        }
        if (result instanceof MinerFilter) {
            MinerFilter<?> minerFilter = (MinerFilter<?>) result;
            wrapped.put("requiresReplacement", minerFilter.requiresReplacement);
            wrapped.put("replaceTarget", wrapReturnType(minerFilter.replaceTarget));
        } else if (result instanceof SorterFilter) {
            SorterFilter<?> sorterFilter = (SorterFilter<?>) result;
            wrapped.put("allowDefault", sorterFilter.allowDefault);
            wrapped.put("color", wrapReturnType(sorterFilter.color));
            wrapped.put("size", sorterFilter.sizeMode);
            wrapped.put("min", sorterFilter.min);
            wrapped.put("max", sorterFilter.max);
            if (sorterFilter instanceof SorterItemStackFilter) {
                SorterItemStackFilter filter = (SorterItemStackFilter) sorterFilter;
                wrapped.put("fuzzy", filter.fuzzyMode);
            }
        } else if (result instanceof QIOFilter) {
            QIOFilter<?> qioFilter = (QIOFilter<?>) result;
            if (qioFilter instanceof QIOItemStackFilter) {
                QIOItemStackFilter filter = (QIOItemStackFilter) qioFilter;
                wrapped.put("fuzzy", filter.fuzzyMode);
            }
        } else if (result instanceof OredictionificatorFilter) {
            OredictionificatorFilter<?, ?, ?> filter = (OredictionificatorFilter<?, ?, ?>) result;
            wrapped.put("target", filter.getFilterText());
            wrapped.put("selected", wrapReturnType(filter.getResultElement()));
        }
        return wrapped;
    } else if (result instanceof Map) {
        return ((Map<?, ?>) result).entrySet().stream().collect(Collectors.toMap(entry -> wrapReturnType(entry.getKey()), entry -> wrapReturnType(entry.getValue()), (a, b) -> b));
    } else if (result instanceof Collection) {
        // so there is no real difference at that point about the type it is
        return ((Collection<?>) result).stream().map(CCArgumentWrapper::wrapReturnType).collect(Collectors.toList());
    } else if (result instanceof Object[]) {
        // Note: This doesn't handle/deal with primitive arrays
        return Arrays.stream((Object[]) result).map(CCArgumentWrapper::wrapReturnType).toArray();
    }
    return result;
}
Also used : SorterFilter(mekanism.common.content.transporter.SorterFilter) Arrays(java.util.Arrays) OredictionificatorFilter(mekanism.common.content.oredictionificator.OredictionificatorFilter) ByteArrayNBT(net.minecraft.nbt.ByteArrayNBT) ChemicalStack(mekanism.api.chemical.ChemicalStack) Item(net.minecraft.item.Item) BiFunction(java.util.function.BiFunction) Constants(net.minecraftforge.common.util.Constants) Frequency(mekanism.common.lib.frequency.Frequency) CompoundNBT(net.minecraft.nbt.CompoundNBT) FloatNBT(net.minecraft.nbt.FloatNBT) QIOItemStackFilter(mekanism.common.content.qio.filter.QIOItemStackFilter) InputValidator(mekanism.common.util.text.InputValidator) IArguments(dan200.computercraft.api.lua.IArguments) TileEntityOredictionificator(mekanism.common.tile.machine.TileEntityOredictionificator) Locale(java.util.Locale) Map(java.util.Map) QIOFilter(mekanism.common.content.qio.filter.QIOFilter) SorterFilter(mekanism.common.content.transporter.SorterFilter) ByteNBT(net.minecraft.nbt.ByteNBT) ListNBT(net.minecraft.nbt.ListNBT) ForgeRegistryEntry(net.minecraftforge.registries.ForgeRegistryEntry) FilterType(mekanism.common.content.filter.FilterType) Collection(java.util.Collection) Set(java.util.Set) UUID(java.util.UUID) Collectors(java.util.stream.Collectors) ITagFilter(mekanism.common.content.filter.ITagFilter) IntNBT(net.minecraft.nbt.IntNBT) BaseFilter(mekanism.common.content.filter.BaseFilter) IModIDFilter(mekanism.common.content.filter.IModIDFilter) Optional(java.util.Optional) Vector3i(net.minecraft.util.math.vector.Vector3i) FluidStack(net.minecraftforge.fluids.FluidStack) IFilter(mekanism.common.content.filter.IFilter) ForgeRegistries(net.minecraftforge.registries.ForgeRegistries) IntStream(java.util.stream.IntStream) MethodResult(dan200.computercraft.api.lua.MethodResult) EnumColor(mekanism.api.text.EnumColor) LuaException(dan200.computercraft.api.lua.LuaException) ComputerArgumentHandler(mekanism.common.integration.computer.ComputerArgumentHandler) HashMap(java.util.HashMap) OredictionificatorItemFilter(mekanism.common.content.oredictionificator.OredictionificatorItemFilter) ItemStack(net.minecraft.item.ItemStack) FloatingLong(mekanism.api.math.FloatingLong) BiConsumer(java.util.function.BiConsumer) NumberNBT(net.minecraft.nbt.NumberNBT) Nullable(javax.annotation.Nullable) INBT(net.minecraft.nbt.INBT) LongArrayNBT(net.minecraft.nbt.LongArrayNBT) StringNBT(net.minecraft.nbt.StringNBT) EndNBT(net.minecraft.nbt.EndNBT) DoubleNBT(net.minecraft.nbt.DoubleNBT) VisibleForTesting(org.jetbrains.annotations.VisibleForTesting) IMaterialFilter(mekanism.common.content.filter.IMaterialFilter) CollectionNBT(net.minecraft.nbt.CollectionNBT) ShortNBT(net.minecraft.nbt.ShortNBT) MinerFilter(mekanism.common.content.miner.MinerFilter) Items(net.minecraft.item.Items) IntArrayNBT(net.minecraft.nbt.IntArrayNBT) Coord4D(mekanism.api.Coord4D) SorterItemStackFilter(mekanism.common.content.transporter.SorterItemStackFilter) IItemStackFilter(mekanism.common.content.filter.IItemStackFilter) LongNBT(net.minecraft.nbt.LongNBT) ResourceLocation(net.minecraft.util.ResourceLocation) DoublePredicate(java.util.function.DoublePredicate) Collections(java.util.Collections) FrequencyIdentity(mekanism.common.lib.frequency.Frequency.FrequencyIdentity) HashMap(java.util.HashMap) FluidStack(net.minecraftforge.fluids.FluidStack) FrequencyIdentity(mekanism.common.lib.frequency.Frequency.FrequencyIdentity) QIOItemStackFilter(mekanism.common.content.qio.filter.QIOItemStackFilter) IItemStackFilter(mekanism.common.content.filter.IItemStackFilter) INBT(net.minecraft.nbt.INBT) SorterItemStackFilter(mekanism.common.content.transporter.SorterItemStackFilter) ResourceLocation(net.minecraft.util.ResourceLocation) Coord4D(mekanism.api.Coord4D) QIOFilter(mekanism.common.content.qio.filter.QIOFilter) UUID(java.util.UUID) ChemicalStack(mekanism.api.chemical.ChemicalStack) CompoundNBT(net.minecraft.nbt.CompoundNBT) IMaterialFilter(mekanism.common.content.filter.IMaterialFilter) MinerFilter(mekanism.common.content.miner.MinerFilter) ForgeRegistryEntry(net.minecraftforge.registries.ForgeRegistryEntry) ITagFilter(mekanism.common.content.filter.ITagFilter) IFilter(mekanism.common.content.filter.IFilter) Vector3i(net.minecraft.util.math.vector.Vector3i) Frequency(mekanism.common.lib.frequency.Frequency) OredictionificatorFilter(mekanism.common.content.oredictionificator.OredictionificatorFilter) Collection(java.util.Collection) ItemStack(net.minecraft.item.ItemStack) IModIDFilter(mekanism.common.content.filter.IModIDFilter) Map(java.util.Map) HashMap(java.util.HashMap)

Aggregations

IItemStackFilter (mekanism.common.content.filter.IItemStackFilter)4 IMaterialFilter (mekanism.common.content.filter.IMaterialFilter)4 IModIDFilter (mekanism.common.content.filter.IModIDFilter)4 ITagFilter (mekanism.common.content.filter.ITagFilter)4 ItemStack (net.minecraft.item.ItemStack)3 Nullable (javax.annotation.Nullable)2 EnumColor (mekanism.api.text.EnumColor)2 FilterType (mekanism.common.content.filter.FilterType)2 IFilter (mekanism.common.content.filter.IFilter)2 MinerFilter (mekanism.common.content.miner.MinerFilter)2 OredictionificatorFilter (mekanism.common.content.oredictionificator.OredictionificatorFilter)2 OredictionificatorItemFilter (mekanism.common.content.oredictionificator.OredictionificatorItemFilter)2 QIOFilter (mekanism.common.content.qio.filter.QIOFilter)2 QIOItemStackFilter (mekanism.common.content.qio.filter.QIOItemStackFilter)2 SorterFilter (mekanism.common.content.transporter.SorterFilter)2 SorterItemStackFilter (mekanism.common.content.transporter.SorterItemStackFilter)2 Item (net.minecraft.item.Item)2 ResourceLocation (net.minecraft.util.ResourceLocation)2 MatrixStack (com.mojang.blaze3d.matrix.MatrixStack)1 IArguments (dan200.computercraft.api.lua.IArguments)1