Search in sources :

Example 1 with SlurryStack

use of mekanism.api.chemical.slurry.SlurryStack 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 SlurryStack

use of mekanism.api.chemical.slurry.SlurryStack in project Mekanism by mekanism.

the class FluidSlurryToSlurryRecipeSerializer method fromJson.

@Nonnull
@Override
public RECIPE fromJson(@Nonnull ResourceLocation recipeId, @Nonnull JsonObject json) {
    JsonElement fluidInput = JSONUtils.isArrayNode(json, JsonConstants.FLUID_INPUT) ? JSONUtils.getAsJsonArray(json, JsonConstants.FLUID_INPUT) : JSONUtils.getAsJsonObject(json, JsonConstants.FLUID_INPUT);
    FluidStackIngredient fluidIngredient = FluidStackIngredient.deserialize(fluidInput);
    JsonElement slurryInput = JSONUtils.isArrayNode(json, JsonConstants.SLURRY_INPUT) ? JSONUtils.getAsJsonArray(json, JsonConstants.SLURRY_INPUT) : JSONUtils.getAsJsonObject(json, JsonConstants.SLURRY_INPUT);
    SlurryStackIngredient slurryIngredient = SlurryStackIngredient.deserialize(slurryInput);
    SlurryStack output = SerializerHelper.getSlurryStack(json, JsonConstants.OUTPUT);
    if (output.isEmpty()) {
        throw new JsonSyntaxException("Recipe output must not be empty.");
    }
    return this.factory.create(recipeId, fluidIngredient, slurryIngredient, output);
}
Also used : JsonSyntaxException(com.google.gson.JsonSyntaxException) FluidStackIngredient(mekanism.api.recipes.inputs.FluidStackIngredient) JsonElement(com.google.gson.JsonElement) SlurryStackIngredient(mekanism.api.recipes.inputs.chemical.SlurryStackIngredient) SlurryStack(mekanism.api.chemical.slurry.SlurryStack) Nonnull(javax.annotation.Nonnull)

Example 3 with SlurryStack

use of mekanism.api.chemical.slurry.SlurryStack in project Mekanism by mekanism.

the class FluidSlurryToSlurryRecipeMapper method handleRecipe.

@Override
public boolean handleRecipe(IMappingCollector<NormalizedSimpleStack, Long> mapper, IRecipe<?> iRecipe, INSSFakeGroupManager groupManager) {
    if (!(iRecipe instanceof FluidSlurryToSlurryRecipe)) {
        // Double check that we have a type of recipe we know how to handle
        return false;
    }
    boolean handled = false;
    FluidSlurryToSlurryRecipe recipe = (FluidSlurryToSlurryRecipe) iRecipe;
    List<@NonNull FluidStack> fluidRepresentations = recipe.getFluidInput().getRepresentations();
    List<@NonNull SlurryStack> slurryRepresentations = recipe.getChemicalInput().getRepresentations();
    for (FluidStack fluidRepresentation : fluidRepresentations) {
        NormalizedSimpleStack nssFluid = NSSFluid.createFluid(fluidRepresentation);
        for (SlurryStack slurryRepresentation : slurryRepresentations) {
            SlurryStack output = recipe.getOutput(fluidRepresentation, slurryRepresentation);
            if (!output.isEmpty()) {
                IngredientHelper ingredientHelper = new IngredientHelper(mapper);
                ingredientHelper.put(nssFluid, fluidRepresentation.getAmount());
                ingredientHelper.put(slurryRepresentation);
                if (ingredientHelper.addAsConversion(output)) {
                    handled = true;
                }
            }
        }
    }
    return handled;
}
Also used : NormalizedSimpleStack(moze_intel.projecte.api.nss.NormalizedSimpleStack) FluidSlurryToSlurryRecipe(mekanism.api.recipes.FluidSlurryToSlurryRecipe) FluidStack(net.minecraftforge.fluids.FluidStack) IngredientHelper(mekanism.common.integration.projecte.IngredientHelper) SlurryStack(mekanism.api.chemical.slurry.SlurryStack)

Example 4 with SlurryStack

use of mekanism.api.chemical.slurry.SlurryStack 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)

Example 5 with SlurryStack

use of mekanism.api.chemical.slurry.SlurryStack in project Mekanism by mekanism.

the class FluidSlurryToSlurryRecipeSerializer method fromNetwork.

@Override
public RECIPE fromNetwork(@Nonnull ResourceLocation recipeId, @Nonnull PacketBuffer buffer) {
    try {
        FluidStackIngredient fluidInput = FluidStackIngredient.read(buffer);
        SlurryStackIngredient slurryInput = SlurryStackIngredient.read(buffer);
        SlurryStack output = SlurryStack.readFromPacket(buffer);
        return this.factory.create(recipeId, fluidInput, slurryInput, output);
    } catch (Exception e) {
        Mekanism.logger.error("Error reading fluid slurry to slurry recipe from packet.", e);
        throw e;
    }
}
Also used : FluidStackIngredient(mekanism.api.recipes.inputs.FluidStackIngredient) SlurryStackIngredient(mekanism.api.recipes.inputs.chemical.SlurryStackIngredient) SlurryStack(mekanism.api.chemical.slurry.SlurryStack) JsonSyntaxException(com.google.gson.JsonSyntaxException)

Aggregations

SlurryStack (mekanism.api.chemical.slurry.SlurryStack)9 GasStack (mekanism.api.chemical.gas.GasStack)5 InfusionStack (mekanism.api.chemical.infuse.InfusionStack)5 PigmentStack (mekanism.api.chemical.pigment.PigmentStack)5 Collections (java.util.Collections)4 ChemicalStack (mekanism.api.chemical.ChemicalStack)4 List (java.util.List)3 Collectors (java.util.stream.Collectors)3 Nonnull (javax.annotation.Nonnull)3 BoxedChemicalStack (mekanism.api.chemical.merged.BoxedChemicalStack)3 SlurryStackIngredient (mekanism.api.recipes.inputs.chemical.SlurryStackIngredient)3 GaugeType (mekanism.client.gui.element.gauge.GaugeType)3 GuiGasGauge (mekanism.client.gui.element.gauge.GuiGasGauge)3 GuiGauge (mekanism.client.gui.element.gauge.GuiGauge)3 ProgressType (mekanism.client.gui.element.progress.ProgressType)3 GuiSlot (mekanism.client.gui.element.slot.GuiSlot)3 SlotType (mekanism.client.gui.element.slot.SlotType)3 BaseRecipeCategory (mekanism.client.jei.BaseRecipeCategory)3 MekanismJEI (mekanism.client.jei.MekanismJEI)3 SlotOverlay (mekanism.common.inventory.container.slot.SlotOverlay)3