Search in sources :

Example 1 with ZenDoc

use of crafttweaker.annotations.ZenDoc in project MrCrayfishFurnitureMod by MrCrayfish.

the class Blender method remove.

@ZenMethod
@ZenDoc("Remove matching blended drinks.")
public static void remove(@Optional final String name, @Optional final IItemStack[] ingredients, @Optional final Integer food, @Optional final int[] colour) {
    final StringBuilder description = new StringBuilder();
    Predicate<RecipeData> matcher = recipeData -> true;
    boolean first = true;
    description.append("Remove drink(s) matching '");
    if (name != null) {
        matcher = matcher.and((data) -> data.getDrinkName().equals(name));
        if (first)
            first = false;
        else
            description.append(',');
        description.append("name=").append(name);
    }
    if (ingredients != null) {
        matcher = matcher.and((data) -> {
            if (data.getIngredients().size() != ingredients.length)
                return false;
            LinkedList<IItemStack> toCheck = new LinkedList<>();
            Collections.addAll(toCheck, ingredients);
            outer: for (ItemStack stack : data.getIngredients()) {
                for (Iterator<IItemStack> it = toCheck.iterator(); it.hasNext(); ) {
                    IItemStack checker = it.next();
                    if (CraftTweakerMC.matchesExact(checker, stack)) {
                        it.remove();
                        continue outer;
                    }
                }
                return false;
            }
            return true;
        });
        if (first)
            first = false;
        else
            description.append(',');
        description.append("ingredients=").append(Arrays.toString(ingredients));
    }
    if (food != null) {
        matcher = matcher.and((data) -> data.getHealAmount() == food);
        if (first)
            first = false;
        else
            description.append(',');
        description.append("food=").append(food);
    }
    if (colour != null) {
        if (colour.length != 3)
            throw new IllegalArgumentException("colour must have 3 components");
        for (int c : colour) if (c < 0 || c > 255)
            throw new IllegalArgumentException("colour components must be between 0 and 255 inclusive");
        matcher = matcher.and((data) -> data.getRed() == colour[0] && data.getGreen() == colour[1] && data.getBlue() == colour[2]);
        if (first)
            first = false;
        else
            description.append(',');
        description.append("colour=").append(Arrays.toString(colour));
    }
    description.append("' from Blender");
    if (first) {
        description.setLength(0);
        description.append("Remove all drinks from Blender");
    }
    final Predicate<RecipeData> finalMatcher = matcher;
    CraftTweakerIntegration.defer(description.toString(), () -> {
        if (!Recipes.localBlenderRecipes.removeIf((data) -> {
            if (finalMatcher.test(data)) {
                CraftTweakerAPI.logInfo("Blender: Removed blended drink " + data);
                return true;
            }
            return false;
        })) {
            CraftTweakerAPI.logError("Blender: No blended drinks matched");
        }
    });
}
Also used : Optional(stanhebben.zenscript.annotations.Optional) Arrays(java.util.Arrays) Iterator(java.util.Iterator) Predicate(java.util.function.Predicate) ZenDoc(crafttweaker.annotations.ZenDoc) ZenClass(stanhebben.zenscript.annotations.ZenClass) ItemStack(net.minecraft.item.ItemStack) CraftTweakerAPI(crafttweaker.CraftTweakerAPI) IItemStack(crafttweaker.api.item.IItemStack) CraftTweakerMC(crafttweaker.api.minecraft.CraftTweakerMC) ZenMethod(stanhebben.zenscript.annotations.ZenMethod) LinkedList(java.util.LinkedList) RecipeData(com.mrcrayfish.furniture.api.RecipeData) Recipes(com.mrcrayfish.furniture.api.Recipes) Nonnull(javax.annotation.Nonnull) Collections(java.util.Collections) ZenRegister(crafttweaker.annotations.ZenRegister) IItemStack(crafttweaker.api.item.IItemStack) ItemStack(net.minecraft.item.ItemStack) IItemStack(crafttweaker.api.item.IItemStack) LinkedList(java.util.LinkedList) RecipeData(com.mrcrayfish.furniture.api.RecipeData) ZenDoc(crafttweaker.annotations.ZenDoc) ZenMethod(stanhebben.zenscript.annotations.ZenMethod)

Example 2 with ZenDoc

use of crafttweaker.annotations.ZenDoc in project MrCrayfishFurnitureMod by MrCrayfish.

the class Blender method addDrink.

@ZenMethod
@ZenDoc("Add a blended drink.")
public static void addDrink(@Nonnull final String name, @Nonnull final IItemStack[] ingredients, final int food, @Nonnull final int[] colour) {
    if (name == null)
        throw new IllegalArgumentException("name cannot be null");
    if (ingredients == null)
        throw new IllegalArgumentException("ingredients cannot be null");
    if (food < 0)
        throw new IllegalArgumentException("food value must be non-negative");
    if (colour == null)
        throw new IllegalArgumentException("colour cannot be null");
    if (colour.length != 3)
        throw new IllegalArgumentException("colour must have 3 components");
    for (int c : colour) if (c < 0 || c > 255)
        throw new IllegalArgumentException("colour components must be between 0 and 255 inclusive");
    final RecipeData data = new RecipeData();
    data.setName(name);
    for (IItemStack i : ingredients) {
        data.addIngredient(CraftTweakerMC.getItemStack(i));
    }
    data.setHeal(food);
    data.setColour(colour[0], colour[1], colour[2]);
    CraftTweakerIntegration.defer("Add blended drink " + data + " to Blender", () -> {
        Recipes.localBlenderRecipes.add(data);
        CraftTweakerAPI.logInfo("Blender: Added trade " + data);
    });
}
Also used : IItemStack(crafttweaker.api.item.IItemStack) RecipeData(com.mrcrayfish.furniture.api.RecipeData) ZenDoc(crafttweaker.annotations.ZenDoc) ZenMethod(stanhebben.zenscript.annotations.ZenMethod)

Example 3 with ZenDoc

use of crafttweaker.annotations.ZenDoc in project MrCrayfishFurnitureMod by MrCrayfish.

the class MineBay method addTrade.

@ZenMethod
@ZenDoc("Add a trade.")
public static void addTrade(@Nonnull IItemStack item, @Nonnull IItemStack currency) {
    if (item == null)
        throw new IllegalArgumentException("item cannot be null");
    if (currency == null)
        throw new IllegalArgumentException("currency cannot be null");
    final RecipeData data = new RecipeData();
    // MineBay RecipeData uses setInput for the purchasable item
    data.setInput(CraftTweakerMC.getItemStack(item));
    // MineBar RecipeData uses setCurrency for the currency item and setPrice for the amount of that item
    data.setCurrency(CraftTweakerMC.getItemStack(currency.withAmount(1)));
    data.setPrice(currency.getAmount());
    CraftTweakerIntegration.defer("Add trade " + data + " to MineBay", () -> {
        if (data.getPrice() < 1 || data.getPrice() > 64) {
            CraftTweakerAPI.logError("MineBay: Invalid trade price. Must be from 1 to 64.");
            return;
        }
        Recipes.localMineBayRecipes.add(data);
        CraftTweakerAPI.logInfo("MineBay: Added trade " + data);
    });
}
Also used : RecipeData(com.mrcrayfish.furniture.api.RecipeData) ZenDoc(crafttweaker.annotations.ZenDoc) ZenMethod(stanhebben.zenscript.annotations.ZenMethod)

Example 4 with ZenDoc

use of crafttweaker.annotations.ZenDoc in project CraftTweaker by CraftTweaker.

the class DumpZsCommand method methodToString.

private String methodToString(IJavaMethod javaMethod) {
    if (javaMethod == null)
        return "";
    if (javaMethod instanceof JavaMethod) {
        Method jm = ((JavaMethod) javaMethod).getMethod();
        StringBuilder sb = new StringBuilder();
        ZenDoc[] doc = jm.getAnnotationsByType(ZenDoc.class);
        if (doc.length > 0) {
            sb.append(encaplseInSpan("########", "green"));
            for (ZenDoc zenDoc : doc) {
                sb.append("<br/>");
                sb.append(encaplseInSpan(zenDoc.value(), "green"));
            }
            sb.append(encaplseInSpan("<br/>########<br/>", "green"));
        }
        sb.append(Modifier.toString(jm.getModifiers()));
        sb.append(" ");
        sb.append(createHoverText(jm.getReturnType().getName(), jm.getReturnType().getSimpleName()));
        sb.append(" ");
        sb.append(encaplseInSpan(jm.getName(), "red"));
        sb.append("(");
        Class<?>[] paras = jm.getParameterTypes();
        Annotation[][] annos = jm.getParameterAnnotations();
        for (int i = 0; i < paras.length; i++) {
            for (int j = 0; j < annos[i].length; j++) {
                sb.append(encaplseInSpan("@" + annos[i][j].annotationType().getSimpleName() + " ", "gold"));
            }
            sb.append(createHoverText(paras[i].getName(), paras[i].getSimpleName()));
            if (i != paras.length - 1) {
                sb.append(", ");
            }
        }
        sb.append(")");
        return sb.toString();
    } else {
        return javaMethod.toString();
    }
}
Also used : ZenDoc(crafttweaker.annotations.ZenDoc)

Example 5 with ZenDoc

use of crafttweaker.annotations.ZenDoc in project MrCrayfishFurnitureMod by MrCrayfish.

the class MineBay method remove.

@ZenMethod
@ZenDoc("Remove matching trades.")
public static void remove(@Optional IIngredient item) {
    if (item == null)
        item = IngredientAny.INSTANCE;
    final IIngredient finalItem = item;
    CraftTweakerIntegration.defer("Remove trade(s) matching " + item + " from MineBay", () -> {
        if (!Recipes.localMineBayRecipes.removeIf((data) -> {
            if (finalItem.matchesExact(new MCItemStack(data.getInput()))) {
                CraftTweakerAPI.logInfo("MineBay: Removed trade " + data);
                return true;
            }
            return false;
        })) {
            CraftTweakerAPI.logError("MineBay: No trades matched " + finalItem);
        }
    });
}
Also used : Optional(stanhebben.zenscript.annotations.Optional) ZenDoc(crafttweaker.annotations.ZenDoc) ZenClass(stanhebben.zenscript.annotations.ZenClass) CraftTweakerAPI(crafttweaker.CraftTweakerAPI) IIngredient(crafttweaker.api.item.IIngredient) IngredientAny(crafttweaker.api.item.IngredientAny) IItemStack(crafttweaker.api.item.IItemStack) CraftTweakerMC(crafttweaker.api.minecraft.CraftTweakerMC) ZenMethod(stanhebben.zenscript.annotations.ZenMethod) RecipeData(com.mrcrayfish.furniture.api.RecipeData) Recipes(com.mrcrayfish.furniture.api.Recipes) MCItemStack(crafttweaker.mc1120.item.MCItemStack) Nonnull(javax.annotation.Nonnull) ZenRegister(crafttweaker.annotations.ZenRegister) IIngredient(crafttweaker.api.item.IIngredient) MCItemStack(crafttweaker.mc1120.item.MCItemStack) ZenDoc(crafttweaker.annotations.ZenDoc) ZenMethod(stanhebben.zenscript.annotations.ZenMethod)

Aggregations

ZenDoc (crafttweaker.annotations.ZenDoc)5 RecipeData (com.mrcrayfish.furniture.api.RecipeData)4 ZenMethod (stanhebben.zenscript.annotations.ZenMethod)4 IItemStack (crafttweaker.api.item.IItemStack)3 Recipes (com.mrcrayfish.furniture.api.Recipes)2 CraftTweakerAPI (crafttweaker.CraftTweakerAPI)2 ZenRegister (crafttweaker.annotations.ZenRegister)2 CraftTweakerMC (crafttweaker.api.minecraft.CraftTweakerMC)2 Nonnull (javax.annotation.Nonnull)2 Optional (stanhebben.zenscript.annotations.Optional)2 ZenClass (stanhebben.zenscript.annotations.ZenClass)2 IIngredient (crafttweaker.api.item.IIngredient)1 IngredientAny (crafttweaker.api.item.IngredientAny)1 MCItemStack (crafttweaker.mc1120.item.MCItemStack)1 Arrays (java.util.Arrays)1 Collections (java.util.Collections)1 Iterator (java.util.Iterator)1 LinkedList (java.util.LinkedList)1 Predicate (java.util.function.Predicate)1 ItemStack (net.minecraft.item.ItemStack)1