Search in sources :

Example 1 with PigmentStack

use of mekanism.api.chemical.pigment.PigmentStack in project Mekanism by mekanism.

the class GuiDictionaryTarget method setTargetSlot.

public void setTargetSlot(Object newTarget, boolean playSound) {
    // Clear cached tags
    tags.clear();
    if (newTarget == null) {
        target = null;
    } else if (newTarget instanceof ItemStack) {
        ItemStack itemStack = (ItemStack) newTarget;
        if (itemStack.isEmpty()) {
            target = null;
        } else {
            ItemStack stack = StackUtils.size(itemStack, 1);
            target = stack;
            Item item = stack.getItem();
            tags.put(DictionaryTagType.ITEM, TagCache.getItemTags(stack));
            if (item instanceof BlockItem) {
                Block block = ((BlockItem) item).getBlock();
                tags.put(DictionaryTagType.BLOCK, TagCache.getTagsAsStrings(block.getTags()));
                if (block instanceof IHasTileEntity || block.hasTileEntity(block.defaultBlockState())) {
                    tags.put(DictionaryTagType.TILE_ENTITY_TYPE, TagCache.getTileEntityTypeTags(block));
                }
            }
            // Entity type tags
            if (item instanceof SpawnEggItem) {
                tags.put(DictionaryTagType.ENTITY_TYPE, TagCache.getTagsAsStrings(((SpawnEggItem) item).getType(stack.getTag()).getTags()));
            }
            // Enchantment tags
            Map<Enchantment, Integer> enchantments = EnchantmentHelper.getEnchantments(stack);
            if (!enchantments.isEmpty()) {
                Set<ResourceLocation> enchantmentTags = new HashSet<>();
                for (Enchantment enchantment : enchantments.keySet()) {
                    enchantmentTags.addAll(enchantment.getTags());
                }
                tags.put(DictionaryTagType.ENCHANTMENT, TagCache.getTagsAsStrings(enchantmentTags));
            }
            // Get any potion tags
            Potion potion = PotionUtils.getPotion(itemStack);
            if (potion != Potions.EMPTY) {
                tags.put(DictionaryTagType.POTION, TagCache.getTagsAsStrings(potion.getTags()));
            }
            // Get tags of any contained fluids
            FluidUtil.getFluidHandler(stack).ifPresent(fluidHandler -> {
                Set<ResourceLocation> fluidTags = new HashSet<>();
                for (int tank = 0; tank < fluidHandler.getTanks(); tank++) {
                    FluidStack fluidInTank = fluidHandler.getFluidInTank(tank);
                    if (!fluidInTank.isEmpty()) {
                        fluidTags.addAll(fluidInTank.getFluid().getTags());
                    }
                }
                tags.put(DictionaryTagType.FLUID, TagCache.getTagsAsStrings(fluidTags));
            });
            // Get tags of any contained chemicals
            addChemicalTags(DictionaryTagType.GAS, stack, Capabilities.GAS_HANDLER_CAPABILITY);
            addChemicalTags(DictionaryTagType.INFUSE_TYPE, stack, Capabilities.INFUSION_HANDLER_CAPABILITY);
            addChemicalTags(DictionaryTagType.PIGMENT, stack, Capabilities.PIGMENT_HANDLER_CAPABILITY);
            addChemicalTags(DictionaryTagType.SLURRY, stack, Capabilities.SLURRY_HANDLER_CAPABILITY);
        // TODO: Support other types of things?
        }
    } else if (newTarget instanceof FluidStack) {
        FluidStack fluidStack = (FluidStack) newTarget;
        if (fluidStack.isEmpty()) {
            target = null;
        } else {
            target = fluidStack.copy();
            tags.put(DictionaryTagType.FLUID, TagCache.getTagsAsStrings(((FluidStack) target).getFluid().getTags()));
        }
    } else if (newTarget instanceof ChemicalStack) {
        ChemicalStack<?> chemicalStack = (ChemicalStack<?>) newTarget;
        if (chemicalStack.isEmpty()) {
            target = null;
        } else {
            target = chemicalStack.copy();
            List<String> chemicalTags = TagCache.getTagsAsStrings(((ChemicalStack<?>) target).getType().getTags());
            if (target instanceof GasStack) {
                tags.put(DictionaryTagType.GAS, chemicalTags);
            } else if (target instanceof InfusionStack) {
                tags.put(DictionaryTagType.INFUSE_TYPE, chemicalTags);
            } else if (target instanceof PigmentStack) {
                tags.put(DictionaryTagType.PIGMENT, chemicalTags);
            } else if (target instanceof SlurryStack) {
                tags.put(DictionaryTagType.SLURRY, chemicalTags);
            }
        }
    } else {
        Mekanism.logger.warn("Unable to get tags for unknown type: {}", newTarget);
        return;
    }
    // Update the list being viewed
    tagSetter.accept(tags.keySet());
    if (playSound) {
        playClickSound();
    }
}
Also used : Enchantment(net.minecraft.enchantment.Enchantment) FluidUtil(net.minecraftforge.fluids.FluidUtil) ChemicalStack(mekanism.api.chemical.ChemicalStack) GuiElement(mekanism.client.gui.element.GuiElement) Item(net.minecraft.item.Item) SlurryStack(mekanism.api.chemical.slurry.SlurryStack) HashSet(java.util.HashSet) FluidType(mekanism.client.render.MekanismRenderer.FluidType) ItemStack(net.minecraft.item.ItemStack) Block(net.minecraft.block.Block) Capabilities(mekanism.common.capabilities.Capabilities) Map(java.util.Map) IGuiWrapper(mekanism.client.gui.IGuiWrapper) GasStack(mekanism.api.chemical.gas.GasStack) IHasTileEntity(mekanism.common.block.interfaces.IHasTileEntity) Nonnull(javax.annotation.Nonnull) MatrixStack(com.mojang.blaze3d.matrix.MatrixStack) Nullable(javax.annotation.Nullable) PotionUtils(net.minecraft.potion.PotionUtils) Mekanism(mekanism.common.Mekanism) EnumMap(java.util.EnumMap) StackUtils(mekanism.common.util.StackUtils) Potions(net.minecraft.potion.Potions) Set(java.util.Set) IChemicalHandler(mekanism.api.chemical.IChemicalHandler) EnchantmentHelper(net.minecraft.enchantment.EnchantmentHelper) Capability(net.minecraftforge.common.capabilities.Capability) Consumer(java.util.function.Consumer) DictionaryTagType(mekanism.client.gui.item.GuiDictionary.DictionaryTagType) IJEIGhostTarget(mekanism.client.jei.interfaces.IJEIGhostTarget) List(java.util.List) InfusionStack(mekanism.api.chemical.infuse.InfusionStack) Screen(net.minecraft.client.gui.screen.Screen) MekanismRenderer(mekanism.client.render.MekanismRenderer) BlockItem(net.minecraft.item.BlockItem) ResourceLocation(net.minecraft.util.ResourceLocation) PigmentStack(mekanism.api.chemical.pigment.PigmentStack) SpawnEggItem(net.minecraft.item.SpawnEggItem) TilingDirection(mekanism.client.gui.GuiUtils.TilingDirection) FluidStack(net.minecraftforge.fluids.FluidStack) TextComponentUtil(mekanism.api.text.TextComponentUtil) Collections(java.util.Collections) Potion(net.minecraft.potion.Potion) TagCache(mekanism.common.base.TagCache) PigmentStack(mekanism.api.chemical.pigment.PigmentStack) HashSet(java.util.HashSet) Set(java.util.Set) IHasTileEntity(mekanism.common.block.interfaces.IHasTileEntity) Potion(net.minecraft.potion.Potion) FluidStack(net.minecraftforge.fluids.FluidStack) BlockItem(net.minecraft.item.BlockItem) Item(net.minecraft.item.Item) BlockItem(net.minecraft.item.BlockItem) SpawnEggItem(net.minecraft.item.SpawnEggItem) InfusionStack(mekanism.api.chemical.infuse.InfusionStack) SpawnEggItem(net.minecraft.item.SpawnEggItem) Block(net.minecraft.block.Block) List(java.util.List) GasStack(mekanism.api.chemical.gas.GasStack) ItemStack(net.minecraft.item.ItemStack) Enchantment(net.minecraft.enchantment.Enchantment) Map(java.util.Map) EnumMap(java.util.EnumMap) ChemicalStack(mekanism.api.chemical.ChemicalStack) SlurryStack(mekanism.api.chemical.slurry.SlurryStack)

Example 2 with PigmentStack

use of mekanism.api.chemical.pigment.PigmentStack in project Mekanism by mekanism.

the class PaintingRecipeCategory method setRecipe.

@Override
public void setRecipe(IRecipeLayout recipeLayout, PaintingRecipe recipe, IIngredients ingredients) {
    IGuiItemStackGroup itemStacks = recipeLayout.getItemStacks();
    initItem(itemStacks, 0, true, inputSlot, recipe.getItemInput().getRepresentations());
    initItem(itemStacks, 1, false, output, recipe.getOutputDefinition());
    IGuiIngredientGroup<PigmentStack> pigmentStacks = recipeLayout.getIngredientsGroup(MekanismJEI.TYPE_PIGMENT);
    initChemical(pigmentStacks, 0, true, inputPigment, recipe.getChemicalInput().getRepresentations());
    this.ingredients.put(recipe, pigmentStacks);
}
Also used : PigmentStack(mekanism.api.chemical.pigment.PigmentStack) IGuiItemStackGroup(mezz.jei.api.gui.ingredient.IGuiItemStackGroup)

Example 3 with PigmentStack

use of mekanism.api.chemical.pigment.PigmentStack in project Mekanism by mekanism.

the class PaintingMachineRecipeMapper method handleRecipe.

@Override
public boolean handleRecipe(IMappingCollector<NormalizedSimpleStack, Long> mapper, IRecipe<?> iRecipe, INSSFakeGroupManager groupManager) {
    if (!(iRecipe instanceof PaintingRecipe)) {
        // Double check that we have a type of recipe we know how to handle
        return false;
    }
    boolean handled = false;
    PaintingRecipe recipe = (PaintingRecipe) iRecipe;
    List<@NonNull PigmentStack> pigmentRepresentations = recipe.getChemicalInput().getRepresentations();
    List<@NonNull ItemStack> itemRepresentations = recipe.getItemInput().getRepresentations();
    for (PigmentStack pigmentRepresentation : pigmentRepresentations) {
        NormalizedSimpleStack nssPigment = NSSPigment.createPigment(pigmentRepresentation);
        for (ItemStack itemRepresentation : itemRepresentations) {
            ItemStack output = recipe.getOutput(itemRepresentation, pigmentRepresentation);
            if (!output.isEmpty()) {
                IngredientHelper ingredientHelper = new IngredientHelper(mapper);
                ingredientHelper.put(nssPigment, pigmentRepresentation.getAmount());
                ingredientHelper.put(itemRepresentation);
                if (ingredientHelper.addAsConversion(output)) {
                    handled = true;
                }
            }
        }
    }
    return handled;
}
Also used : NormalizedSimpleStack(moze_intel.projecte.api.nss.NormalizedSimpleStack) PigmentStack(mekanism.api.chemical.pigment.PigmentStack) ItemStack(net.minecraft.item.ItemStack) IngredientHelper(mekanism.common.integration.projecte.IngredientHelper) PaintingRecipe(mekanism.api.recipes.PaintingRecipe)

Example 4 with PigmentStack

use of mekanism.api.chemical.pigment.PigmentStack in project Mekanism by mekanism.

the class PigmentMixerRecipeMapper method handleRecipe.

@Override
public boolean handleRecipe(IMappingCollector<NormalizedSimpleStack, Long> mapper, IRecipe<?> iRecipe, INSSFakeGroupManager groupManager) {
    if (!(iRecipe instanceof PigmentMixingRecipe)) {
        // Double check that we have a type of recipe we know how to handle
        return false;
    }
    boolean handled = false;
    PigmentMixingRecipe recipe = (PigmentMixingRecipe) iRecipe;
    List<@NonNull PigmentStack> leftInputRepresentations = recipe.getLeftInput().getRepresentations();
    List<@NonNull PigmentStack> rightInputRepresentations = recipe.getRightInput().getRepresentations();
    for (PigmentStack leftRepresentation : leftInputRepresentations) {
        NormalizedSimpleStack nssLeft = NSSPigment.createPigment(leftRepresentation);
        for (PigmentStack rightRepresentation : rightInputRepresentations) {
            PigmentStack output = recipe.getOutput(leftRepresentation, rightRepresentation);
            if (!output.isEmpty()) {
                IngredientHelper ingredientHelper = new IngredientHelper(mapper);
                ingredientHelper.put(nssLeft, leftRepresentation.getAmount());
                ingredientHelper.put(rightRepresentation);
                if (ingredientHelper.addAsConversion(output)) {
                    handled = true;
                }
            }
        }
    }
    return handled;
}
Also used : NormalizedSimpleStack(moze_intel.projecte.api.nss.NormalizedSimpleStack) PigmentStack(mekanism.api.chemical.pigment.PigmentStack) IngredientHelper(mekanism.common.integration.projecte.IngredientHelper) PigmentMixingRecipe(mekanism.api.recipes.PigmentMixingRecipe)

Example 5 with PigmentStack

use of mekanism.api.chemical.pigment.PigmentStack in project Mekanism by mekanism.

the class ChemicalUtil method getRGBDurabilityForDisplay.

public static int getRGBDurabilityForDisplay(ItemStack stack) {
    GasStack gasStack = StorageUtils.getStoredGasFromNBT(stack);
    if (!gasStack.isEmpty()) {
        return gasStack.getChemicalColorRepresentation();
    }
    InfusionStack infusionStack = StorageUtils.getStoredInfusionFromNBT(stack);
    if (!infusionStack.isEmpty()) {
        return infusionStack.getChemicalColorRepresentation();
    }
    PigmentStack pigmentStack = StorageUtils.getStoredPigmentFromNBT(stack);
    if (!pigmentStack.isEmpty()) {
        return pigmentStack.getChemicalColorRepresentation();
    }
    SlurryStack slurryStack = StorageUtils.getStoredSlurryFromNBT(stack);
    if (!slurryStack.isEmpty()) {
        return slurryStack.getChemicalColorRepresentation();
    }
    return 0;
}
Also used : PigmentStack(mekanism.api.chemical.pigment.PigmentStack) InfusionStack(mekanism.api.chemical.infuse.InfusionStack) GasStack(mekanism.api.chemical.gas.GasStack) SlurryStack(mekanism.api.chemical.slurry.SlurryStack)

Aggregations

PigmentStack (mekanism.api.chemical.pigment.PigmentStack)10 GasStack (mekanism.api.chemical.gas.GasStack)6 InfusionStack (mekanism.api.chemical.infuse.InfusionStack)5 SlurryStack (mekanism.api.chemical.slurry.SlurryStack)5 Collections (java.util.Collections)3 List (java.util.List)3 ChemicalStack (mekanism.api.chemical.ChemicalStack)3 ChemicalType (mekanism.api.chemical.ChemicalType)3 IngredientHelper (mekanism.common.integration.projecte.IngredientHelper)3 ItemStack (net.minecraft.item.ItemStack)3 Collectors (java.util.stream.Collectors)2 NonNull (mekanism.api.annotations.NonNull)2 BoxedChemicalStack (mekanism.api.chemical.merged.BoxedChemicalStack)2 ChemicalDissolutionRecipe (mekanism.api.recipes.ChemicalDissolutionRecipe)2 GuiHorizontalPowerBar (mekanism.client.gui.element.bar.GuiHorizontalPowerBar)2 GaugeType (mekanism.client.gui.element.gauge.GaugeType)2 GuiGasGauge (mekanism.client.gui.element.gauge.GuiGasGauge)2 GuiGauge (mekanism.client.gui.element.gauge.GuiGauge)2 ProgressType (mekanism.client.gui.element.progress.ProgressType)2 GuiSlot (mekanism.client.gui.element.slot.GuiSlot)2