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");
}
});
}
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);
});
}
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);
});
}
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();
}
}
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);
}
});
}
Aggregations