diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 000000000..432130efe --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,130 @@ +# Contributor Covenant Code of Conduct + +## Our Pledge + +We as members, contributors, and leaders pledge to make participation in our +community a harassment-free experience for everyone, regardless of age, body +size, visible or invisible disability, ethnicity, sex characteristics, gender +identity and expression, level of experience, education, socio-economic status, +nationality, personal appearance, race, religion, or sexual identity +and orientation. + +We pledge to act and interact in ways that contribute to an open, welcoming, +diverse, inclusive, and healthy community. + +## Our Standards + +Examples of behavior that contributes to a positive environment for our +community include: + +* Demonstrating empathy and kindness toward other people +* Being respectful of differing opinions, viewpoints, and experiences +* Giving and gracefully accepting constructive feedback +* Accepting responsibility and apologizing to those affected by our mistakes, + and learning from the experience +* Focusing on what is best not just for us as individuals, but for the + overall community + +Examples of unacceptable behavior include: + +* The use of sexualized language or imagery, and sexual attention or + advances of any kind +* Trolling, insulting or derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or email + address, without their explicit permission +* Other conduct which could reasonably be considered inappropriate in a + professional setting + +## Enforcement Responsibilities + +Community leaders are responsible for clarifying and enforcing our standards of +acceptable behavior and will take appropriate and fair corrective action in +response to any behavior that they deem inappropriate, threatening, offensive, +or harmful. + +Community leaders have the right and responsibility to remove, edit, or reject +comments, commits, code, wiki edits, issues, and other contributions that are +not aligned to this Code of Conduct, and will communicate reasons for moderation +decisions when appropriate. + +## Scope + +This Code of Conduct applies within all community spaces, and also applies when +an individual is officially representing the community in public spaces. +Examples of representing our community include using an official e-mail address, +posting via an official social media account, or acting as an appointed +representative at an online or offline event. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported to the community admins. +All complaints will be reviewed and investigated promptly and fairly. + +All community leaders are obligated to respect the privacy and security of the +reporter of any incident. + +At the moment, enforcement may not be taken strictly under the circumference +of being a small public community project. + +## Enforcement Guidelines + +Community leaders will follow these Community Impact Guidelines in determining +the consequences for any action they deem in violation of this Code of Conduct: + +### 1. Correction + +**Community Impact**: Use of inappropriate language or other behavior deemed +unprofessional or unwelcome in the community. + +**Consequence**: A private, written warning from community leaders, providing +clarity around the nature of the violation and an explanation of why the +behavior was inappropriate. A public apology may be requested. + +### 2. Warning + +**Community Impact**: A violation through a single incident or series +of actions. + +**Consequence**: A warning with consequences for continued behavior. No +interaction with the people involved, including unsolicited interaction with +those enforcing the Code of Conduct, for a specified period of time. This +includes avoiding interactions in community spaces as well as external channels +like social media. Violating these terms may lead to a temporary or +permanent ban. + +### 3. Temporary Ban + +**Community Impact**: A serious violation of community standards, including +sustained inappropriate behavior. + +**Consequence**: A temporary ban from any sort of interaction or public +communication with the community for a specified period of time. No public or +private interaction with the people involved, including unsolicited interaction +with those enforcing the Code of Conduct, is allowed during this period. +Violating these terms may lead to a permanent ban. + +### 4. Permanent Ban + +**Community Impact**: Demonstrating a pattern of violation of community +standards, including sustained inappropriate behavior, harassment of an +individual, or aggression toward or disparagement of classes of individuals. + +**Consequence**: A permanent ban from any sort of public interaction within +the community. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], +version 2.0, available at +https://www.contributor-covenant.org/version/2/0/code_of_conduct.html. + +Community Impact Guidelines were inspired by [Mozilla's code of conduct +enforcement ladder](https://github.com/mozilla/diversity). + +[homepage]: https://www.contributor-covenant.org + +For answers to common questions about this code of conduct, see the FAQ at +https://www.contributor-covenant.org/faq. Translations are available at +https://www.contributor-covenant.org/translations. diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 000000000..01c67e307 --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,9 @@ +# Security Policy + +We take security vulnerability seriously. Only the vulnerabilities valid in the latest published build are considered. +Any resolved vulnerabilities in the latest version are considered resolved and anymore new duplicates are regarded as invalid. + +## Reporting a Vulnerability + +To report a vulnerability, go to [issues](https://github.com/MinicraftPlus/minicraft-plus-revived/issues) and report a bug. +If we see the bug report as a security vulnerability, we will categorize it so that it is in high priority. diff --git a/build.gradle b/build.gradle index 01be4c064..e3918b62a 100644 --- a/build.gradle +++ b/build.gradle @@ -6,7 +6,7 @@ plugins { allprojects { apply plugin: "java" - version = "2.2.1-dev1" + version = "2.2.1-dev2" sourceCompatibility = 8 [compileJava, compileTestJava]*.options*.encoding = 'UTF-8' diff --git a/src/client/java/minicraft/core/Game.java b/src/client/java/minicraft/core/Game.java index f2a97ab69..0be9e3420 100644 --- a/src/client/java/minicraft/core/Game.java +++ b/src/client/java/minicraft/core/Game.java @@ -25,7 +25,7 @@ protected Game() { public static final String NAME = "Minicraft Plus"; // This is the name on the application window. - public static final Version VERSION = new Version("2.2.1-dev1"); + public static final Version VERSION = new Version("2.2.1-dev2"); public static InputHandler input; // Input used in Game, Player, and just about all the *Menu classes. public static Player player; diff --git a/src/client/java/minicraft/entity/furniture/Bed.java b/src/client/java/minicraft/entity/furniture/Bed.java index f9515c00a..d385e937a 100644 --- a/src/client/java/minicraft/entity/furniture/Bed.java +++ b/src/client/java/minicraft/entity/furniture/Bed.java @@ -4,22 +4,45 @@ import minicraft.core.Updater; import minicraft.core.io.Localization; import minicraft.entity.mob.Player; +import minicraft.gfx.SpriteAnimation; import minicraft.gfx.SpriteLinker.LinkedSprite; import minicraft.gfx.SpriteLinker.SpriteType; +import minicraft.item.DyeItem; import minicraft.level.Level; +import minicraft.util.MyUtils; +import org.jetbrains.annotations.NotNull; import java.util.HashMap; public class Bed extends Furniture { + private static final HashMap sprites = new HashMap<>(); + private static final HashMap itemSprites = new HashMap<>(); + + @Override + public @NotNull Furniture copy() { + return new Bed(color); + } + + static { + for (DyeItem.DyeColor color : DyeItem.DyeColor.values()) { + sprites.put(color, new LinkedSprite(SpriteType.Entity, color.toString().toLowerCase() + "_bed")); + itemSprites.put(color, new LinkedSprite(SpriteType.Item, color.toString().toLowerCase() + "_bed")); + } + } + private static int playersAwake = 1; private static final HashMap sleepingPlayers = new HashMap<>(); + public final DyeItem.DyeColor color; + /** * Creates a new furniture with the name Bed and the bed sprite and color. */ - public Bed() { - super("Bed", new LinkedSprite(SpriteType.Entity, "bed"), new LinkedSprite(SpriteType.Item, "bed"), 3, 2); + public Bed() { this(DyeItem.DyeColor.RED); } + public Bed(DyeItem.DyeColor color) { + super(MyUtils.capitalizeFully(color.toString().replace('_', ' ')) + " Bed", sprites.get(color), itemSprites.get(color), 3, 2); + this.color = color; } /** diff --git a/src/client/java/minicraft/entity/furniture/Crafter.java b/src/client/java/minicraft/entity/furniture/Crafter.java index 9326b41b7..a3e2af5f2 100644 --- a/src/client/java/minicraft/entity/furniture/Crafter.java +++ b/src/client/java/minicraft/entity/furniture/Crafter.java @@ -19,7 +19,8 @@ public enum Type { Furnace(new LinkedSprite(SpriteType.Entity, "furnace"), new LinkedSprite(SpriteType.Item, "furnace"), 3, 2, Recipes.furnaceRecipes), Anvil(new LinkedSprite(SpriteType.Entity, "anvil"), new LinkedSprite(SpriteType.Item, "anvil"), 3, 2, Recipes.anvilRecipes), Enchanter(new LinkedSprite(SpriteType.Entity, "enchanter"), new LinkedSprite(SpriteType.Item, "enchanter"), 7, 2, Recipes.enchantRecipes), - Loom(new LinkedSprite(SpriteType.Entity, "loom"), new LinkedSprite(SpriteType.Item, "loom"), 7, 2, Recipes.loomRecipes); + Loom(new LinkedSprite(SpriteType.Entity, "loom"), new LinkedSprite(SpriteType.Item, "loom"), 7, 2, Recipes.loomRecipes), + DyeVat(new LinkedSprite(SpriteType.Entity, "dyevat"), new LinkedSprite(SpriteType.Item, "dyevat"), 0, 0, Recipes.dyeVatRecipes); public ArrayList recipes; protected LinkedSprite sprite; @@ -45,12 +46,12 @@ public enum Type { * @param type What type of crafter this is. */ public Crafter(Crafter.Type type) { - super(type.name(), type.sprite, type.itemSprite, type.xr, type.yr); + super((type.name().equalsIgnoreCase("DyeVat") ? "Dye Vat" : type.name()), type.sprite, type.itemSprite, type.xr, type.yr); this.type = type; } public boolean use(Player player) { - Game.setDisplay(new CraftingDisplay(type.recipes, type.name(), player)); + Game.setDisplay(new CraftingDisplay(type.recipes, (type.name().equalsIgnoreCase("DyeVat") ? "Dye Vat" : type.name()), player)); return true; } @@ -61,6 +62,6 @@ public boolean use(Player player) { @Override public String toString() { - return type.name() + getDataPrints(); + return (type.name().equalsIgnoreCase("DyeVat") ? "Dye Vat" : type.name()) + getDataPrints(); } } diff --git a/src/client/java/minicraft/entity/mob/Mob.java b/src/client/java/minicraft/entity/mob/Mob.java index bd2cd181e..c19efad36 100644 --- a/src/client/java/minicraft/entity/mob/Mob.java +++ b/src/client/java/minicraft/entity/mob/Mob.java @@ -196,7 +196,7 @@ public static LinkedSprite[][] compileMobSpriteAnimations(int sheetX, int sheetY private boolean isWooling() { // supposed to walk at half speed on wool if (level == null) return false; Tile tile = level.getTile(x >> 4, y >> 4); - return tile == Tiles.get("wool"); + return tile == Tiles.get("white wool"); } /** diff --git a/src/client/java/minicraft/entity/mob/Sheep.java b/src/client/java/minicraft/entity/mob/Sheep.java index f8c1dc583..63a18cc3a 100644 --- a/src/client/java/minicraft/entity/mob/Sheep.java +++ b/src/client/java/minicraft/entity/mob/Sheep.java @@ -1,5 +1,8 @@ package minicraft.entity.mob; +import minicraft.item.DyeItem; +import org.jetbrains.annotations.Nullable; + import minicraft.core.io.Settings; import minicraft.entity.Direction; import minicraft.gfx.Screen; @@ -11,19 +14,42 @@ import minicraft.level.tile.GrassTile; import minicraft.level.tile.Tile; import minicraft.level.tile.Tiles; -import org.jetbrains.annotations.Nullable; + +import java.util.HashMap; public class Sheep extends PassiveMob { - private static final LinkedSprite[][] sprites = Mob.compileMobSpriteAnimations(0, 0, "sheep"); - private static final LinkedSprite[][] cutSprites = Mob.compileMobSpriteAnimations(0, 2, "sheep"); + private static final HashMap sprites = new HashMap<>(); + private static final HashMap cutSprites = new HashMap<>(); + + static { + for (DyeItem.DyeColor color : DyeItem.DyeColor.values()) { + LinkedSprite[][] mobSprites = Mob.compileMobSpriteAnimations(0, 0, "sheep"); + for (LinkedSprite[] mobSprite : mobSprites) { + for (LinkedSprite linkedSprite : mobSprite) { + linkedSprite.setColor(color.color); + } + } + sprites.put(color, mobSprites); + mobSprites = Mob.compileMobSpriteAnimations(0, 2, "sheep"); + for (LinkedSprite[] mobSprite : mobSprites) { + for (LinkedSprite linkedSprite : mobSprite) { + linkedSprite.setColor(color.color); + } + } + cutSprites.put(color, mobSprites); + } + } public boolean cut = false; + public DyeItem.DyeColor color; /** * Creates a sheep entity. */ - public Sheep() { - super(sprites); + public Sheep() { this(DyeItem.DyeColor.WHITE); } + public Sheep(DyeItem.DyeColor color) { + super(null); + this.color = color; } @Override @@ -31,7 +57,7 @@ public void render(Screen screen) { int xo = x - 8; int yo = y - 11; - LinkedSprite[][] curAnim = cut ? cutSprites : sprites; + LinkedSprite[][] curAnim = cut ? cutSprites.get(color) : sprites.get(color); LinkedSprite curSprite = curAnim[dir.getDir()][(walkDist >> 3) % curAnim[dir.getDir()].length]; if (hurtTime > 0) { @@ -52,15 +78,17 @@ public void tick() { } public boolean interact(Player player, @Nullable Item item, Direction attackDir) { - if (cut) return false; - if (item instanceof ToolItem) { - if (((ToolItem) item).type == ToolType.Shears) { + if (!cut && ((ToolItem) item).type == ToolType.Shears) { cut = true; - dropItem(1, 3, Items.get("Wool")); + dropItem(1, 3, Items.get(color.toString().replace('_', ' ') + " Wool")); ((ToolItem) item).payDurability(); return true; } + } else if (item instanceof DyeItem) { + color = ((DyeItem) item).color; + ((DyeItem) item).count--; + return true; } return false; } @@ -80,7 +108,7 @@ public void die() { max = 2; } - if (!cut) dropItem(min, max, Items.get("wool")); + if (!cut) dropItem(min, max, Items.get(color.toString().replace('_', ' ') + " Wool")); dropItem(min, max, Items.get("Raw Beef")); super.die(); diff --git a/src/client/java/minicraft/gfx/Screen.java b/src/client/java/minicraft/gfx/Screen.java index dbc05cb22..2b1f72a01 100644 --- a/src/client/java/minicraft/gfx/Screen.java +++ b/src/client/java/minicraft/gfx/Screen.java @@ -513,7 +513,7 @@ public double getOverlayOpacity(int currentLevel, double darkFactor) { return 1; } else { // Outside the caves, not being lit simply means being darker. - return darkFactor / 128; // darkens the color one shade. + return darkFactor / 160; // darkens the color one shade. } } diff --git a/src/client/java/minicraft/item/ClothingItem.java b/src/client/java/minicraft/item/ClothingItem.java index 49711a92a..f23922640 100644 --- a/src/client/java/minicraft/item/ClothingItem.java +++ b/src/client/java/minicraft/item/ClothingItem.java @@ -25,7 +25,7 @@ protected static ArrayList getAllInstances() { items.add(new ClothingItem("Orange Clothes", new LinkedSprite(SpriteType.Item, "orange_clothes"), Color.get(1, 255, 102, 0))); items.add(new ClothingItem("Purple Clothes", new LinkedSprite(SpriteType.Item, "purple_clothes"), Color.get(1, 102, 0, 153))); items.add(new ClothingItem("Cyan Clothes", new LinkedSprite(SpriteType.Item, "cyan_clothes"), Color.get(1, 0, 102, 153))); - items.add(new ClothingItem("Reg Clothes", new LinkedSprite(SpriteType.Item, "reg_clothes"), Color.get(1, 51, 51, 0))); + items.add(new ClothingItem("Reg Clothes", new LinkedSprite(SpriteType.Item, "reg_clothes"), Color.get(1, 51, 51, 0))); // Dark Green return items; } diff --git a/src/client/java/minicraft/item/DyeItem.java b/src/client/java/minicraft/item/DyeItem.java new file mode 100644 index 000000000..923e905a1 --- /dev/null +++ b/src/client/java/minicraft/item/DyeItem.java @@ -0,0 +1,58 @@ +package minicraft.item; + +import minicraft.gfx.SpriteLinker; +import minicraft.util.MyUtils; +import org.jetbrains.annotations.NotNull; + +import java.util.ArrayList; + +public class DyeItem extends StackableItem { + + protected static ArrayList getAllInstances() { + ArrayList items = new ArrayList<>(); + + for (DyeColor color : DyeColor.values()) { + items.add(new DyeItem(MyUtils.capitalizeFully(color.toString().replace('_', ' ')) + " Dye", new SpriteLinker.LinkedSprite( + SpriteLinker.SpriteType.Item, color.toString().toLowerCase() + "_dye"), color)); + } + + return items; + } + + public final DyeColor color; + + protected DyeItem(String name, SpriteLinker.LinkedSprite sprite, DyeColor color) { + super(name, sprite); + this.color = color; + } + + public enum DyeColor { + BLACK(0x1_1D1D21), + RED(0x1_B02E26), + GREEN(0x1_5E7C16), + BROWN(0x1_835432), + BLUE(0x1_3C44AA), + PURPLE(0x1_8932B8), + CYAN(0x1_169C9C), + LIGHT_GRAY(0x1_9D9D97), + GRAY(0x1_474F52), + PINK(0x1_F38BAA), + LIME(0x1_80C71F), + YELLOW(0x1_FED83D), + LIGHT_BLUE(0x1_3AB3DA), + MAGENTA(0x1_C74EBD), + ORANGE(0x1_F9801D), + WHITE(0x1_F9FFFE); + + public final int color; + + DyeColor(int color) { + this.color = color; + } + } + + @Override + public @NotNull DyeItem copy() { + return new DyeItem(getName(), sprite, color); + } +} diff --git a/src/client/java/minicraft/item/FurnitureItem.java b/src/client/java/minicraft/item/FurnitureItem.java index 780edc594..a6bcb86df 100644 --- a/src/client/java/minicraft/item/FurnitureItem.java +++ b/src/client/java/minicraft/item/FurnitureItem.java @@ -51,13 +51,18 @@ protected static ArrayList getAllInstances() { for (Crafter.Type type : Crafter.Type.values()) { items.add(new FurnitureItem(new Crafter(type))); } + // Add the various lanterns for (Lantern.Type type : Lantern.Type.values()) { items.add(new FurnitureItem(new Lantern(type))); } + // Add the various colors of bed + for (DyeItem.DyeColor color : DyeItem.DyeColor.values()) { + items.add(new FurnitureItem(new Bed(color))); + } + items.add(new FurnitureItem(new Tnt())); - items.add(new FurnitureItem(new Bed())); items.add(new FurnitureItem(new Composter())); return items; diff --git a/src/client/java/minicraft/item/Items.java b/src/client/java/minicraft/item/Items.java index 1cd9a1860..b9ee58b36 100644 --- a/src/client/java/minicraft/item/Items.java +++ b/src/client/java/minicraft/item/Items.java @@ -44,6 +44,8 @@ private static void addAll(ArrayList items) { addAll(SummonItem.getAllInstances()); addAll(HeartItem.getAllInstances()); addAll(WateringCanItem.getAllInstances()); + addAll(DyeItem.getAllInstances()); + addAll(WoolItem.getAllInstances()); } public static ArrayList getAll() { diff --git a/src/client/java/minicraft/item/Recipe.java b/src/client/java/minicraft/item/Recipe.java index d50cdfe3e..3f0a415c7 100644 --- a/src/client/java/minicraft/item/Recipe.java +++ b/src/client/java/minicraft/item/Recipe.java @@ -4,6 +4,7 @@ import minicraft.entity.mob.Player; import java.util.HashMap; +import java.util.Iterator; import java.util.Map; import java.util.TreeMap; @@ -114,4 +115,10 @@ public int hashCode() { result = 31 * result + amount; return result; } + + @Override + public String toString() { + return product + ":" + amount + + "[" + String.join(";", costs.entrySet().stream().map(e -> e.getKey() + ":" + e.getValue())::iterator) + "]"; + } } diff --git a/src/client/java/minicraft/item/Recipes.java b/src/client/java/minicraft/item/Recipes.java index 64015de86..0a37f2a2f 100644 --- a/src/client/java/minicraft/item/Recipes.java +++ b/src/client/java/minicraft/item/Recipes.java @@ -1,6 +1,7 @@ package minicraft.item; import minicraft.entity.furniture.Bed; +import minicraft.level.tile.FlowerTile; import minicraft.saveload.Save; import org.json.JSONArray; import org.json.JSONObject; @@ -30,6 +31,7 @@ import java.io.File; import java.io.IOException; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collections; import java.util.HashMap; import java.util.HashSet; @@ -45,6 +47,7 @@ public class Recipes { public static final ArrayList enchantRecipes = new ArrayList<>(); public static final ArrayList craftRecipes = new ArrayList<>(); public static final ArrayList loomRecipes = new ArrayList<>(); + public static final ArrayList dyeVatRecipes = new ArrayList<>(); static { craftRecipes.add(new Recipe("Workbench_1", "Wood_10")); @@ -57,6 +60,7 @@ public class Recipes { workbenchRecipes.add(new Recipe("Workbench_1", "Wood_10")); workbenchRecipes.add(new Recipe("Torch_2", "Wood_1", "coal_1")); workbenchRecipes.add(new Recipe("plank_2", "Wood_1")); + workbenchRecipes.add(new Recipe("Ornate Wood_1", "Wood_1")); workbenchRecipes.add(new Recipe("Plank Wall_1", "plank_3")); workbenchRecipes.add(new Recipe("Wood Door_1", "plank_5")); workbenchRecipes.add(new Recipe("Wood Fence_1", "plank_3")); @@ -77,7 +81,8 @@ public class Recipes { workbenchRecipes.add(new Recipe("Chest_1", "Wood_20")); workbenchRecipes.add(new Recipe("Anvil_1", "iron_5")); workbenchRecipes.add(new Recipe("Tnt_1", "Gunpowder_10", "Sand_8")); - workbenchRecipes.add(new Recipe("Loom_1", "Wood_10", "Wool_5")); + workbenchRecipes.add(new Recipe("Loom_1", "Wood_10", "White Wool_5")); + workbenchRecipes.add(new Recipe("Dye Vat_1", "Stone_10", "iron_5")); workbenchRecipes.add(new Recipe("Wood Fishing Rod_1", "Wood_10", "String_3")); workbenchRecipes.add(new Recipe("Iron Fishing Rod_1", "Iron_10", "String_3")); workbenchRecipes.add(new Recipe("Gold Fishing Rod_1", "Gold_10", "String_3")); @@ -100,21 +105,100 @@ public class Recipes { workbenchRecipes.add(new Recipe("Leather Armor_1", "leather_10")); workbenchRecipes.add(new Recipe("Snake Armor_1", "scale_15")); - loomRecipes.add(new Recipe("String_2", "Wool_1")); - loomRecipes.add(new Recipe("red wool_1", "Wool_1", "rose_1")); - loomRecipes.add(new Recipe("blue wool_1", "Wool_1", "Lapis_1")); - loomRecipes.add(new Recipe("green wool_1", "Wool_1", "Cactus_1")); - loomRecipes.add(new Recipe("yellow wool_1", "Wool_1", "Flower_1")); - loomRecipes.add(new Recipe("black wool_1", "Wool_1", "coal_1")); - loomRecipes.add(new Recipe("Bed_1", "Wood_5", "Wool_3")); - - loomRecipes.add(new Recipe("blue clothes_1", "cloth_5", "Lapis_1")); - loomRecipes.add(new Recipe("green clothes_1", "cloth_5", "Cactus_1")); - loomRecipes.add(new Recipe("yellow clothes_1", "cloth_5", "Flower_1")); - loomRecipes.add(new Recipe("black clothes_1", "cloth_5", "coal_1")); - loomRecipes.add(new Recipe("orange clothes_1", "cloth_5", "rose_1", "Flower_1")); - loomRecipes.add(new Recipe("purple clothes_1", "cloth_5", "Lapis_1", "rose_1")); - loomRecipes.add(new Recipe("cyan clothes_1", "cloth_5", "Lapis_1", "Cactus_1")); + dyeVatRecipes.add(new Recipe("white dye_1", "White Lily_1")); + dyeVatRecipes.add(new Recipe("light gray dye_1", "Oxeye Daisy_1")); + dyeVatRecipes.add(new Recipe("light gray dye_1", "Hydrangea_1")); + dyeVatRecipes.add(new Recipe("light gray dye_1", "White Tulip_1")); + dyeVatRecipes.add(new Recipe("blue dye_1", "Lapis_1")); + dyeVatRecipes.add(new Recipe("blue dye_1", "Cornflower_1")); + dyeVatRecipes.add(new Recipe("blue dye_1", "Iris_1")); + dyeVatRecipes.add(new Recipe("green dye_1", "Cactus_1")); + dyeVatRecipes.add(new Recipe("yellow dye_1", "Sunflower_1")); + dyeVatRecipes.add(new Recipe("yellow dye_1", "Dandelion_1")); + dyeVatRecipes.add(new Recipe("light blue dye_1", "Blue Orchid_1")); + dyeVatRecipes.add(new Recipe("light blue dye_1", "Periwinkle_1")); + dyeVatRecipes.add(new Recipe("black dye_1", "Coal_1")); + dyeVatRecipes.add(new Recipe("red dye_1", "Rose_1")); + dyeVatRecipes.add(new Recipe("red dye_1", "Red Tulip_1")); + dyeVatRecipes.add(new Recipe("red dye_1", "Poppy_1")); + dyeVatRecipes.add(new Recipe("magenta dye_1", "Allium_1")); + dyeVatRecipes.add(new Recipe("orange dye_1", "Orange Tulip_1")); + dyeVatRecipes.add(new Recipe("pink dye_1", "Pink Tulip_1")); + dyeVatRecipes.add(new Recipe("pink dye_1", "Peony_1")); + dyeVatRecipes.add(new Recipe("pink dye_1", "Pink Lily_1")); + dyeVatRecipes.add(new Recipe("purple dye_1", "Violet_1")); + dyeVatRecipes.add(new Recipe("orange dye_2", "red dye_1", "yellow dye_1")); + dyeVatRecipes.add(new Recipe("purple dye_2", "blue dye_1", "red dye_1")); + dyeVatRecipes.add(new Recipe("cyan dye_2", "blue dye_1", "green dye_1")); + dyeVatRecipes.add(new Recipe("brown dye_2", "green dye_1", "red dye_1")); + dyeVatRecipes.add(new Recipe("pink dye_2", "white dye_1", "red dye_1")); + dyeVatRecipes.add(new Recipe("light blue dye_2", "white dye_1", "blue dye_1")); + dyeVatRecipes.add(new Recipe("lime dye_2", "white dye_1", "green dye_1")); + dyeVatRecipes.add(new Recipe("gray dye_2", "white dye_1", "black dye_1")); + dyeVatRecipes.add(new Recipe("light gray dye_2", "white dye_1", "gray dye_1")); + dyeVatRecipes.add(new Recipe("light gray dye_3", "white dye_2", "black dye_1")); + dyeVatRecipes.add(new Recipe("magenta dye_2", "purple dye_1", "pink dye_1")); + dyeVatRecipes.add(new Recipe("magenta dye_4", "red dye_2", "white dye_1", "blue dye_1")); + dyeVatRecipes.add(new Recipe("magenta dye_4", "pink dye_1", "red dye_1", "blue dye_1")); + + loomRecipes.add(new Recipe("String_2", "white wool_1")); + loomRecipes.add(new Recipe("white wool_1", "String_3")); + loomRecipes.add(new Recipe("black wool_1", "white wool_1", "black dye_1")); + loomRecipes.add(new Recipe("red wool_1", "white wool_1", "red dye_1")); + loomRecipes.add(new Recipe("green wool_1", "white wool_1", "green dye_1")); + loomRecipes.add(new Recipe("brown wool_1", "white wool_1", "brown dye_1")); + loomRecipes.add(new Recipe("blue wool_1", "white wool_1", "blue dye_1")); + loomRecipes.add(new Recipe("purple wool_1", "white wool_1", "purple dye_1")); + loomRecipes.add(new Recipe("cyan wool_1", "white wool_1", "cyan dye_1")); + loomRecipes.add(new Recipe("light gray wool_1", "white wool_1", "light gray dye_1")); + loomRecipes.add(new Recipe("gray wool_1", "white wool_1", "gray dye_1")); + loomRecipes.add(new Recipe("pink wool_1", "white wool_1", "pink dye_1")); + loomRecipes.add(new Recipe("lime wool_1", "white wool_1", "lime dye_1")); + loomRecipes.add(new Recipe("yellow wool_1", "white wool_1", "yellow dye_1")); + loomRecipes.add(new Recipe("light blue wool_1", "white wool_1", "light blue dye_1")); + loomRecipes.add(new Recipe("magenta wool_1", "white wool_1", "magenta dye_1")); + loomRecipes.add(new Recipe("orange wool_1", "white wool_1", "orange dye_1")); + + loomRecipes.add(new Recipe("white Bed_1", "Wood_5", "white wool_3")); + loomRecipes.add(new Recipe("black Bed_1", "Wood_5", "black wool_3")); + loomRecipes.add(new Recipe("red Bed_1", "Wood_5", "red wool_3")); + loomRecipes.add(new Recipe("green Bed_1", "Wood_5", "green wool_3")); + loomRecipes.add(new Recipe("brown Bed_1", "Wood_5", "brown wool_3")); + loomRecipes.add(new Recipe("blue Bed_1", "Wood_5", "blue wool_3")); + loomRecipes.add(new Recipe("purple Bed_1", "Wood_5", "purple wool_3")); + loomRecipes.add(new Recipe("cyan Bed_1", "Wood_5", "cyan wool_3")); + loomRecipes.add(new Recipe("light gray Bed_1", "Wood_5", "light gray wool_3")); + loomRecipes.add(new Recipe("gray Bed_1", "Wood_5", "gray wool_3")); + loomRecipes.add(new Recipe("pink Bed_1", "Wood_5", "pink wool_3")); + loomRecipes.add(new Recipe("lime Bed_1", "Wood_5", "lime wool_3")); + loomRecipes.add(new Recipe("yellow Bed_1", "Wood_5", "yellow wool_3")); + loomRecipes.add(new Recipe("light blue Bed_1", "Wood_5", "light blue wool_3")); + loomRecipes.add(new Recipe("magenta Bed_1", "Wood_5", "magenta wool_3")); + loomRecipes.add(new Recipe("orange Bed_1", "Wood_5", "orange wool_3")); + + loomRecipes.add(new Recipe("black Bed_1", "White Bed_1", "black dye_1")); + loomRecipes.add(new Recipe("red Bed_1", "White Bed_1", "red dye_1")); + loomRecipes.add(new Recipe("green Bed_1", "White Bed_1", "green dye_1")); + loomRecipes.add(new Recipe("brown Bed_1", "White Bed_1", "brown dye_1")); + loomRecipes.add(new Recipe("blue Bed_1", "White Bed_1", "blue dye_1")); + loomRecipes.add(new Recipe("purple Bed_1", "White Bed_1", "purple dye_1")); + loomRecipes.add(new Recipe("cyan Bed_1", "White Bed_1", "cyan dye_1")); + loomRecipes.add(new Recipe("light gray Bed_1", "White Bed_1", "light gray dye_1")); + loomRecipes.add(new Recipe("gray Bed_1", "White Bed_1", "gray dye_1")); + loomRecipes.add(new Recipe("pink Bed_1", "White Bed_1", "pink dye_1")); + loomRecipes.add(new Recipe("lime Bed_1", "White Bed_1", "lime dye_1")); + loomRecipes.add(new Recipe("yellow Bed_1", "White Bed_1", "yellow dye_1")); + loomRecipes.add(new Recipe("light blue Bed_1", "White Bed_1", "light blue dye_1")); + loomRecipes.add(new Recipe("magenta Bed_1", "White Bed_1", "magenta dye_1")); + loomRecipes.add(new Recipe("orange Bed_1", "White Bed_1", "orange dye_1")); + + loomRecipes.add(new Recipe("blue clothes_1", "cloth_5", "blue dye_1")); + loomRecipes.add(new Recipe("green clothes_1", "cloth_5", "green dye_1")); + loomRecipes.add(new Recipe("yellow clothes_1", "cloth_5", "yellow dye_1")); + loomRecipes.add(new Recipe("black clothes_1", "cloth_5", "black dye_1")); + loomRecipes.add(new Recipe("orange clothes_1", "cloth_5", "orange dye_1")); + loomRecipes.add(new Recipe("purple clothes_1", "cloth_5", "purple dye_1")); + loomRecipes.add(new Recipe("cyan clothes_1", "cloth_5", "cyan dye_1")); loomRecipes.add(new Recipe("reg clothes_1", "cloth_5")); loomRecipes.add(new Recipe("Leather Armor_1", "leather_10")); @@ -173,7 +257,6 @@ public class Recipes { enchantRecipes.add(new Recipe("Escape Potion_1", "awkward potion_1", "Gunpowder_3", "Lapis_7")); enchantRecipes.add(new Recipe("Totem of Air_1", "gold_10", "gem_10", "Lapis_5", "Cloud Ore_5")); enchantRecipes.add(new Recipe("Obsidian Poppet_1", "gold_10", "gem_10", "Lapis_5", "Shard_15")); - enchantRecipes.add(new Recipe("Arcane Fertilizer_3", "Lapis_6", "Bone_2")); } /** @@ -189,6 +272,7 @@ public static void main(String[] args) { recipes.addAll(enchantRecipes); recipes.addAll(craftRecipes); recipes.addAll(loomRecipes); + recipes.addAll(dyeVatRecipes); HashMap recipeMap = new HashMap<>(); HashMap> duplicatedRecipes = new HashMap<>(); Function itemNameFixer = item -> { @@ -197,15 +281,30 @@ public static void main(String[] args) { item instanceof ToolItem ? name.replaceAll("(?i)wood", "wooden").replaceAll("(?i)rock", "stone") : name) .toLowerCase().replace(' ', '_'); }; + String[] flowerNames = Arrays.stream(FlowerTile.FlowerVariant.values()).map(FlowerTile.FlowerVariant::getName).toArray(String[]::new); + HashMap resolvedRecipes = new HashMap<>(); // Directly hardcoded + resolvedRecipes.put(new Recipe("light gray dye_2", "white dye_1", "gray dye_1"), "light_gray_dye_from_gray_white_dye"); + resolvedRecipes.put(new Recipe("light gray dye_2", "white dye_1", "black dye_1"), "light_gray_dye_from_black_white_dye"); + resolvedRecipes.put(new Recipe("magenta dye_2", "purple dye_1", "pink dye_1"), "magenta_dye_from_purple_and_pink"); + resolvedRecipes.put(new Recipe("magenta dye_4", "red dye_2", "white dye_1", "blue dye_1"), "magenta_dye_from_blue_red_white_dye"); + resolvedRecipes.put(new Recipe("magenta dye_4", "pink dye_1", "red dye_1", "blue dye_1"), "magenta_dye_from_blue_red_pink"); Function recipeNameFixer = recipe -> { // This is applied when duplication occurs. Item item = recipe.getProduct(); String name = itemNameFixer.apply(item); - /*if (item instanceof DyeItem) { TODO + String resolved; + if ((resolved = resolvedRecipes.get(recipe)) != null) return resolved; + if (item instanceof DyeItem) { Map costs = recipe.getCosts(); - if (costs.size() == 2 && costs.containsKey("WHITE DYE")) + if (costs.size() == 2 && costs.containsKey("WHITE DYE") && + costs.keySet().stream().filter(c -> c.endsWith("DYE")).count() == 1) return name + "_from_white_dye"; - return name; - } else*/ if (item instanceof FurnitureItem && ((FurnitureItem) item).furniture instanceof Bed) { + if (costs.size() == 1) { + String cost = costs.keySet().iterator().next(); + if (Arrays.stream(flowerNames).anyMatch(n -> n.equalsIgnoreCase(cost))) { + return name + "_from_" + cost.toLowerCase().replace(' ', '_'); + } + } + } else if (item instanceof FurnitureItem && ((FurnitureItem) item).furniture instanceof Bed) { if (recipe.getCosts().containsKey("WHITE BED")) return name + "_from_white_bed"; return name; diff --git a/src/client/java/minicraft/item/StackableItem.java b/src/client/java/minicraft/item/StackableItem.java index b66dfac8b..74b931cf2 100644 --- a/src/client/java/minicraft/item/StackableItem.java +++ b/src/client/java/minicraft/item/StackableItem.java @@ -28,7 +28,6 @@ protected static ArrayList getAllInstances() { items.add(new StackableItem("Gold Ore", new LinkedSprite(SpriteType.Item, "gold_ore"))); items.add(new StackableItem("Iron", new LinkedSprite(SpriteType.Item, "iron_ingot"))); items.add(new StackableItem("Gold", new LinkedSprite(SpriteType.Item, "gold_ingot"))); - items.add(new StackableItem("Rose", new LinkedSprite(SpriteType.Item, "red_flower"))); items.add(new StackableItem("Gunpowder", new LinkedSprite(SpriteType.Item, "gunpowder"))); items.add(new StackableItem("Slime", new LinkedSprite(SpriteType.Item, "slime"))); items.add(new StackableItem("Glass", new LinkedSprite(SpriteType.Item, "glass"))); diff --git a/src/client/java/minicraft/item/TileItem.java b/src/client/java/minicraft/item/TileItem.java index 4c4ea0d3e..c6e1d87b4 100644 --- a/src/client/java/minicraft/item/TileItem.java +++ b/src/client/java/minicraft/item/TileItem.java @@ -9,6 +9,7 @@ import minicraft.gfx.SpriteLinker.LinkedSprite; import minicraft.gfx.SpriteLinker.SpriteType; import minicraft.level.Level; +import minicraft.level.tile.FlowerTile; import minicraft.level.tile.Tile; import minicraft.level.tile.Tiles; import minicraft.screen.AchievementsDisplay; @@ -21,6 +22,8 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import java.util.function.Function; +import java.util.function.IntFunction; public class TileItem extends StackableItem { @@ -28,7 +31,6 @@ protected static ArrayList getAllInstances() { ArrayList items = new ArrayList<>(); /// TileItem sprites all have 1x1 sprites. - items.add(new TileItem("Flower", new LinkedSprite(SpriteType.Item, "white_flower"), new TileModel("flower"), "grass")); items.add(new TileItem("Acorn", new LinkedSprite(SpriteType.Item, "acorn"), new TileModel("tree Sapling"), "grass")); items.add(new TileItem("Dirt", new LinkedSprite(SpriteType.Item, "dirt"), new TileModel("dirt"), "hole", "water", "lava")); items.add(new TileItem("Natural Rock", new LinkedSprite(SpriteType.Item, "stone"), new TileModel("rock"), "hole", "dirt", "sand", "grass", "path", "water", "lava")); @@ -55,13 +57,6 @@ protected static ArrayList getAllInstances() { items.add(new TileItem("Obsidian Door", new LinkedSprite(SpriteType.Item, "obsidian_door"), new TileModel("Obsidian Door"), "Obsidian")); items.add(new TileItem("Obsidian Fence", new LinkedSprite(SpriteType.Item, "obsidian_fence"), new TileModel("Obsidian Fence", placeOverWithID), solidTiles)); - items.add(new TileItem("Wool", new LinkedSprite(SpriteType.Item, "wool"), new TileModel("Wool"), "hole", "water")); - items.add(new TileItem("Red Wool", new LinkedSprite(SpriteType.Item, "red_wool"), new TileModel("Red Wool"), "hole", "water")); - items.add(new TileItem("Blue Wool", new LinkedSprite(SpriteType.Item, "blue_wool"), new TileModel("Blue Wool"), "hole", "water")); - items.add(new TileItem("Green Wool", new LinkedSprite(SpriteType.Item, "green_wool"), new TileModel("Green Wool"), "hole", "water")); - items.add(new TileItem("Yellow Wool", new LinkedSprite(SpriteType.Item, "yellow_wool"), new TileModel("Yellow Wool"), "hole", "water")); - items.add(new TileItem("Black Wool", new LinkedSprite(SpriteType.Item, "black_wool"), new TileModel("Black Wool"), "hole", "water")); - items.add(new TileItem("Sand", new LinkedSprite(SpriteType.Item, "sand"), new TileModel("sand"), "hole", "water", "lava")); items.add(new TileItem("Cactus", new LinkedSprite(SpriteType.Item, "cactus"), new TileModel("cactus Sapling"), "sand")); items.add(new TileItem("Cloud", new LinkedSprite(SpriteType.Item, "cloud"), new TileModel("cloud"), "Infinite Fall")); @@ -84,6 +79,27 @@ protected static ArrayList getAllInstances() { return placeOverWithID.getTileData(model1, target, level, xt, yt, player, attackDir); }), solidTiles)); + Function flowerModelGenerator = variant -> (model1, target, level, xt, yt, player, attackDir) -> variant.ordinal(); + items.add(new TileItem("Rose", new LinkedSprite(SpriteType.Item, "rose"), new TileModel("flower", flowerModelGenerator.apply(FlowerTile.FlowerVariant.ROSE)), "grass")); + items.add(new TileItem("Oxeye Daisy", new LinkedSprite(SpriteType.Item, "oxeye_daisy"), new TileModel("flower", flowerModelGenerator.apply(FlowerTile.FlowerVariant.OXEYE_DAISY)), "grass")); + items.add(new TileItem("Sunflower", new LinkedSprite(SpriteType.Item, "sunflower"), new TileModel("flower", flowerModelGenerator.apply(FlowerTile.FlowerVariant.SUNFLOWER)), "grass")); + items.add(new TileItem("Allium", new LinkedSprite(SpriteType.Item, "allium"), new TileModel("flower", flowerModelGenerator.apply(FlowerTile.FlowerVariant.ALLIUM)), "grass")); + items.add(new TileItem("Blue Orchid", new LinkedSprite(SpriteType.Item, "blue_orchid"), new TileModel("flower", flowerModelGenerator.apply(FlowerTile.FlowerVariant.BLUE_ORCHID)), "grass")); + items.add(new TileItem("Cornflower", new LinkedSprite(SpriteType.Item, "cornflower"), new TileModel("flower", flowerModelGenerator.apply(FlowerTile.FlowerVariant.CORNFLOWER)), "grass")); + items.add(new TileItem("Dandelion", new LinkedSprite(SpriteType.Item, "dandelion"), new TileModel("flower", flowerModelGenerator.apply(FlowerTile.FlowerVariant.DANDELION)), "grass")); + items.add(new TileItem("Hydrangea", new LinkedSprite(SpriteType.Item, "hydrangea"), new TileModel("flower", flowerModelGenerator.apply(FlowerTile.FlowerVariant.HYDRANGEA)), "grass")); + items.add(new TileItem("Iris", new LinkedSprite(SpriteType.Item, "iris"), new TileModel("flower", flowerModelGenerator.apply(FlowerTile.FlowerVariant.IRIS)), "grass")); + items.add(new TileItem("Orange Tulip", new LinkedSprite(SpriteType.Item, "orange_tulip"), new TileModel("flower", flowerModelGenerator.apply(FlowerTile.FlowerVariant.ORANGE_TULIP)), "grass")); + items.add(new TileItem("Pink Tulip", new LinkedSprite(SpriteType.Item, "pink_tulip"), new TileModel("flower", flowerModelGenerator.apply(FlowerTile.FlowerVariant.PINK_TULIP)), "grass")); + items.add(new TileItem("Red Tulip", new LinkedSprite(SpriteType.Item, "red_tulip"), new TileModel("flower", flowerModelGenerator.apply(FlowerTile.FlowerVariant.RED_TULIP)), "grass")); + items.add(new TileItem("White Tulip", new LinkedSprite(SpriteType.Item, "white_tulip"), new TileModel("flower", flowerModelGenerator.apply(FlowerTile.FlowerVariant.WHITE_TULIP)), "grass")); + items.add(new TileItem("Peony", new LinkedSprite(SpriteType.Item, "peony"), new TileModel("flower", flowerModelGenerator.apply(FlowerTile.FlowerVariant.PEONY)), "grass")); + items.add(new TileItem("Periwinkle", new LinkedSprite(SpriteType.Item, "periwinkle"), new TileModel("flower", flowerModelGenerator.apply(FlowerTile.FlowerVariant.PERIWINKLE)), "grass")); + items.add(new TileItem("Pink Lily", new LinkedSprite(SpriteType.Item, "pink_lily"), new TileModel("flower", flowerModelGenerator.apply(FlowerTile.FlowerVariant.PINK_LILY)), "grass")); + items.add(new TileItem("White Lily", new LinkedSprite(SpriteType.Item, "white_lily"), new TileModel("flower", flowerModelGenerator.apply(FlowerTile.FlowerVariant.WHITE_LILY)), "grass")); + items.add(new TileItem("Poppy", new LinkedSprite(SpriteType.Item, "poppy"), new TileModel("flower", flowerModelGenerator.apply(FlowerTile.FlowerVariant.POPPY)), "grass")); + items.add(new TileItem("Violet", new LinkedSprite(SpriteType.Item, "violet"), new TileModel("flower", flowerModelGenerator.apply(FlowerTile.FlowerVariant.VIOLET)), "grass")); + // Creative mode available tiles: items.add(new TileItem("Farmland", SpriteLinker.missingTexture(SpriteType.Item), new TileModel("farmland"), "dirt", "grass", "hole")); items.add(new TileItem("Hole", SpriteLinker.missingTexture(SpriteType.Item), new TileModel("hole"), "dirt", "grass")); diff --git a/src/client/java/minicraft/item/WateringCanItem.java b/src/client/java/minicraft/item/WateringCanItem.java index 486d1c218..8786ab011 100644 --- a/src/client/java/minicraft/item/WateringCanItem.java +++ b/src/client/java/minicraft/item/WateringCanItem.java @@ -8,6 +8,7 @@ import minicraft.gfx.SpriteLinker; import minicraft.level.Level; import minicraft.level.tile.DirtTile; +import minicraft.level.tile.FlowerTile; import minicraft.level.tile.GrassTile; import minicraft.level.tile.Tile; import minicraft.level.tile.Tiles; @@ -85,7 +86,8 @@ public boolean interactOn(Tile tile, Level level, int xt, int yt, Player player, level.add(new Particle((int) x, (int) y, 120 + random.nextInt(21) - 40, particleSprite)); } if (random.nextInt(60) == 0) { // Small chance for growing flowers - level.setTile(xt, yt, Tiles.get((short) 2), random.nextInt(2)); + level.setTile(xt, yt, Tiles.get((short) 2), + random.nextInt(FlowerTile.FlowerVariant.values().length)); } } diff --git a/src/client/java/minicraft/item/WoolItem.java b/src/client/java/minicraft/item/WoolItem.java new file mode 100644 index 000000000..ce5f3321b --- /dev/null +++ b/src/client/java/minicraft/item/WoolItem.java @@ -0,0 +1,32 @@ +package minicraft.item; + +import minicraft.gfx.SpriteLinker; +import minicraft.util.MyUtils; +import org.jetbrains.annotations.NotNull; + +import java.util.ArrayList; + +public class WoolItem extends TileItem { + protected static ArrayList getAllInstances() { + ArrayList items = new ArrayList<>(); + + for (DyeItem.DyeColor color : DyeItem.DyeColor.values()) { + items.add(new WoolItem(MyUtils.capitalizeFully(color.toString().replace('_', ' ')) + " Wool", new SpriteLinker.LinkedSprite( + SpriteLinker.SpriteType.Item, color.toString().toLowerCase() + "_wool"), color)); + } + + return items; + } + + public final DyeItem.DyeColor color; + + protected WoolItem(String name, SpriteLinker.LinkedSprite sprite, DyeItem.DyeColor color) { + super(name, sprite, new TileModel(name), "hole", "water"); + this.color = color; + } + + @Override + public @NotNull TileItem copy() { + return new WoolItem(getName(), sprite, color); + } +} diff --git a/src/client/java/minicraft/level/Level.java b/src/client/java/minicraft/level/Level.java index 791ccdaa1..17e2c666f 100644 --- a/src/client/java/minicraft/level/Level.java +++ b/src/client/java/minicraft/level/Level.java @@ -28,6 +28,7 @@ import minicraft.gfx.Point; import minicraft.gfx.Rectangle; import minicraft.gfx.Screen; +import minicraft.item.DyeItem; import minicraft.item.Item; import minicraft.level.tile.Tile; import minicraft.level.tile.Tiles; @@ -672,7 +673,22 @@ private void trySpawn() { // Spawns the friendly mobs. if (rnd <= (Updater.getTime() == Updater.Time.Night ? 22 : 33)) add((new Cow()), nx, ny); else if (rnd >= 68) add((new Pig()), nx, ny); - else add((new Sheep()), nx, ny); + else { // Sheep spawning + double colorRnd = random.nextDouble(); + if (colorRnd < 0.8) { // 80% for default color, i.e. white + add((new Sheep()), nx, ny); + } else if (colorRnd < 0.85) { // 5% for black + add((new Sheep(DyeItem.DyeColor.BLACK)), nx, ny); + } else if (colorRnd < 0.9) { // 5% for gray + add((new Sheep(DyeItem.DyeColor.GRAY)), nx, ny); + } else if (colorRnd < 0.95) { // 5% for light gray + add((new Sheep(DyeItem.DyeColor.LIGHT_GRAY)), nx, ny); + } else if (colorRnd < 0.98) { // 3% for brown + add((new Sheep(DyeItem.DyeColor.BROWN)), nx, ny); + } else { // 2% for pink + add((new Sheep(DyeItem.DyeColor.PINK)), nx, ny); + } + } spawned = true; } diff --git a/src/client/java/minicraft/level/LevelGen.java b/src/client/java/minicraft/level/LevelGen.java index 613073d5e..79ead4fe6 100644 --- a/src/client/java/minicraft/level/LevelGen.java +++ b/src/client/java/minicraft/level/LevelGen.java @@ -2,6 +2,7 @@ import minicraft.core.io.Settings; import minicraft.gfx.Rectangle; +import minicraft.level.tile.FlowerTile; import minicraft.level.tile.Tiles; import minicraft.screen.RelPos; import minicraft.util.Logging; @@ -468,14 +469,14 @@ private static short[][] createTopMap(int w, int h) { // Create surface map for (int i = 0; i < w * h / 600; i++) { int x = random.nextInt(w); int y = random.nextInt(h); - int col = random.nextInt(4); + int col = random.nextInt(4) * random.nextInt(4); for (int j = 0; j < 20; j++) { int xx = x + random.nextInt(5) - random.nextInt(5); int yy = y + random.nextInt(5) - random.nextInt(5); if (xx >= 0 && yy >= 0 && xx < w && yy < h) { if (map[xx + yy * w] == Tiles.get("grass").id) { map[xx + yy * w] = Tiles.get("flower").id; - data[xx + yy * w] = (short) (col + random.nextInt(4) * 16); // Data determines which way the flower faces + data[xx + yy * w] = (short) (col + random.nextInt(3)); // Data determines what the flower is } } } diff --git a/src/client/java/minicraft/level/tile/FlowerTile.java b/src/client/java/minicraft/level/tile/FlowerTile.java index 0fadc749e..eb34b1097 100644 --- a/src/client/java/minicraft/level/tile/FlowerTile.java +++ b/src/client/java/minicraft/level/tile/FlowerTile.java @@ -15,8 +15,39 @@ import minicraft.util.AdvancementElement; public class FlowerTile extends Tile { - private static final SpriteAnimation flowerSprite0 = new SpriteAnimation(SpriteType.Tile, "flower_shape0"); - private static final SpriteAnimation flowerSprite1 = new SpriteAnimation(SpriteType.Tile, "flower_shape1"); + public enum FlowerVariant { + OXEYE_DAISY("Oxeye Daisy", new SpriteAnimation(SpriteType.Tile, "oxeye_daisy")), + ROSE("Rose", new SpriteAnimation(SpriteType.Tile, "rose")), + SUNFLOWER("Sunflower", new SpriteAnimation(SpriteType.Tile, "sunflower")), + ALLIUM("Allium", new SpriteAnimation(SpriteType.Tile, "allium")), + BLUE_ORCHID("Blue Orchid", new SpriteAnimation(SpriteType.Tile, "blue_orchid")), + CORNFLOWER("Cornflower", new SpriteAnimation(SpriteType.Tile, "cornflower")), + DANDELION("Dandelion", new SpriteAnimation(SpriteType.Tile, "dandelion")), + HYDRANGEA("Hydrangea", new SpriteAnimation(SpriteType.Tile, "hydrangea")), + IRIS("Iris", new SpriteAnimation(SpriteType.Tile, "iris")), + ORANGE_TULIP("Orange Tulip", new SpriteAnimation(SpriteType.Tile, "orange_tulip")), + PINK_TULIP("Pink Tulip", new SpriteAnimation(SpriteType.Tile, "pink_tulip")), + RED_TULIP("Red Tulip", new SpriteAnimation(SpriteType.Tile, "red_tulip")), + WHITE_TULIP("White Tulip", new SpriteAnimation(SpriteType.Tile, "white_tulip")), + PEONY("Peony", new SpriteAnimation(SpriteType.Tile, "peony")), + PERIWINKLE("Periwinkle", new SpriteAnimation(SpriteType.Tile, "periwinkle")), + PINK_LILY("Pink Lily", new SpriteAnimation(SpriteType.Tile, "pink_lily")), + WHITE_LILY("White Lily", new SpriteAnimation(SpriteType.Tile, "white_lily")), + POPPY("Poppy", new SpriteAnimation(SpriteType.Tile, "poppy")), + VIOLET("Violet", new SpriteAnimation(SpriteType.Tile, "violet")); + + private final String name; + private final SpriteAnimation sprite; + + FlowerVariant(String name, SpriteAnimation sprite) { + this.name = name; + this.sprite = sprite; + } + + public String getName() { + return name; + } + } protected FlowerTile(String name) { super(name, null); @@ -46,9 +77,7 @@ public boolean tick(Level level, int xt, int yt) { public void render(Screen screen, Level level, int x, int y) { Tiles.get("Grass").render(screen, level, x, y); - int data = level.getData(x, y); - int shape = (data >> 4) % 2; - (shape == 0 ? flowerSprite0 : flowerSprite1).render(screen, level, x, y); + FlowerVariant.values()[level.getData(x, y)].sprite.render(screen, level, x, y); } public boolean interact(Level level, int x, int y, Player player, Item item, Direction attackDir) { @@ -59,8 +88,7 @@ public boolean interact(Level level, int x, int y, Player player, Item item, Dir int data = level.getData(x, y); level.setTile(x, y, Tiles.get("Grass")); Sound.play("monsterhurt"); - level.dropItem((x << 4) + 8, (y << 4) + 8, Items.get("Flower")); - level.dropItem((x << 4) + 8, (y << 4) + 8, Items.get("Rose")); + level.dropItem((x << 4) + 8, (y << 4) + 8, Items.get(FlowerVariant.values()[level.getData(x, y)].name)); AdvancementElement.AdvancementTrigger.ItemUsedOnTileTrigger.INSTANCE.trigger( new AdvancementElement.AdvancementTrigger.ItemUsedOnTileTrigger.ItemUsedOnTileTriggerConditionHandler.ItemUsedOnTileTriggerConditions( item, this, data, x, y, level.depth)); @@ -72,8 +100,7 @@ public boolean interact(Level level, int x, int y, Player player, Item item, Dir } public boolean hurt(Level level, int x, int y, Mob source, int dmg, Direction attackDir) { - level.dropItem((x << 4) + 8, (y << 4) + 8, 0, 1, Items.get("Flower")); - level.dropItem((x << 4) + 8, (y << 4) + 8, 0, 1, Items.get("Rose")); + level.dropItem((x << 4) + 8, (y << 4) + 8, Items.get(FlowerVariant.values()[level.getData(x, y)].name)); level.setTile(x, y, Tiles.get("Grass")); return true; } diff --git a/src/client/java/minicraft/level/tile/Tiles.java b/src/client/java/minicraft/level/tile/Tiles.java index d9695a044..6d1e58a20 100644 --- a/src/client/java/minicraft/level/tile/Tiles.java +++ b/src/client/java/minicraft/level/tile/Tiles.java @@ -1,6 +1,7 @@ package minicraft.level.tile; import minicraft.core.CrashHandler; +import minicraft.item.DyeItem; import minicraft.level.tile.farming.CarrotTile; import minicraft.level.tile.farming.FarmTile; import minicraft.level.tile.farming.HeavenlyBerriesTile; @@ -52,6 +53,7 @@ public static void initTileList() { tiles.put((short) 14, new OreTile(OreTile.OreType.Gold)); tiles.put((short) 15, new OreTile(OreTile.OreType.Gem)); tiles.put((short) 16, new OreTile(OreTile.OreType.Lapis)); + tiles.put((short) 18, new LavaBrickTile("Lava Brick")); tiles.put((short) 19, new ExplodedTile("Explode")); tiles.put((short) 20, new FarmTile("Farmland")); @@ -69,13 +71,26 @@ public static void initTileList() { tiles.put((short) 32, new WallTile(Tile.Material.Wood)); tiles.put((short) 33, new WallTile(Tile.Material.Stone)); tiles.put((short) 34, new WallTile(Tile.Material.Obsidian)); - tiles.put((short) 35, new WoolTile(WoolTile.WoolType.NORMAL)); + tiles.put((short) 35, new WoolTile(DyeItem.DyeColor.WHITE)); + // These are out of order because of the changes on wool and color system. + tiles.put((short) 37, new WoolTile(DyeItem.DyeColor.RED)); + tiles.put((short) 38, new WoolTile(DyeItem.DyeColor.BLUE)); + tiles.put((short) 39, new WoolTile(DyeItem.DyeColor.GREEN)); + tiles.put((short) 40, new WoolTile(DyeItem.DyeColor.YELLOW)); + tiles.put((short) 41, new WoolTile(DyeItem.DyeColor.BLACK)); + tiles.put((short) 60, new WoolTile(DyeItem.DyeColor.BROWN)); + tiles.put((short) 61, new WoolTile(DyeItem.DyeColor.PURPLE)); + tiles.put((short) 62, new WoolTile(DyeItem.DyeColor.CYAN)); + tiles.put((short) 63, new WoolTile(DyeItem.DyeColor.LIGHT_GRAY)); + tiles.put((short) 64, new WoolTile(DyeItem.DyeColor.GRAY)); + tiles.put((short) 65, new WoolTile(DyeItem.DyeColor.PINK)); + tiles.put((short) 66, new WoolTile(DyeItem.DyeColor.LIME)); + tiles.put((short) 67, new WoolTile(DyeItem.DyeColor.LIGHT_BLUE)); + tiles.put((short) 68, new WoolTile(DyeItem.DyeColor.MAGENTA)); + tiles.put((short) 69, new WoolTile(DyeItem.DyeColor.ORANGE)); + tiles.put((short) 36, new PathTile("Path")); - tiles.put((short) 37, new WoolTile(WoolTile.WoolType.RED)); - tiles.put((short) 38, new WoolTile(WoolTile.WoolType.BLUE)); - tiles.put((short) 39, new WoolTile(WoolTile.WoolType.GREEN)); - tiles.put((short) 40, new WoolTile(WoolTile.WoolType.YELLOW)); - tiles.put((short) 41, new WoolTile(WoolTile.WoolType.BLACK)); + tiles.put((short) 42, new PotatoTile("Potato")); tiles.put((short) 43, new MaterialTile(Tile.Material.Stone)); tiles.put((short) 44, new MaterialTile(Tile.Material.Obsidian)); @@ -121,7 +136,7 @@ static void add(int id, Tile tile) { oldids.set(3, "flower"); oldids.set(4, "tree"); oldids.set(5, "dirt"); - oldids.set(41, "wool"); + oldids.set(41, "white wool"); oldids.set(42, "red wool"); oldids.set(43, "blue wool"); oldids.set(45, "green wool"); @@ -179,7 +194,7 @@ static void add(int id, Tile tile) { oldids.set(116, "Obsidian door"); oldids.set(117, "Obsidian door"); oldids.set(119, "hole"); - oldids.set(57, "wool"); + oldids.set(57, "white wool"); oldids.set(58, "red wool"); oldids.set(59, "blue wool"); oldids.set(60, "green wool"); diff --git a/src/client/java/minicraft/level/tile/WoolTile.java b/src/client/java/minicraft/level/tile/WoolTile.java index f269e90b5..a7a7d2ac1 100644 --- a/src/client/java/minicraft/level/tile/WoolTile.java +++ b/src/client/java/minicraft/level/tile/WoolTile.java @@ -6,6 +6,7 @@ import minicraft.entity.mob.Player; import minicraft.gfx.SpriteAnimation; import minicraft.gfx.SpriteLinker.SpriteType; +import minicraft.item.DyeItem; import minicraft.item.Item; import minicraft.item.Items; import minicraft.item.ToolItem; @@ -13,10 +14,19 @@ import minicraft.level.Level; import minicraft.util.AdvancementElement; +import java.util.HashMap; + public class WoolTile extends Tile { + private static final HashMap sprites = new HashMap<>(); - public WoolTile(WoolType woolType) { - super(woolType.name, woolType.sprite); + static { + for (DyeItem.DyeColor color : DyeItem.DyeColor.values()) { + sprites.put(color, new SpriteAnimation(SpriteType.Tile, color.toString().toLowerCase() + "_wool")); + } + } + + public WoolTile(DyeItem.DyeColor color) { + super(color.toString().replace('_', ' ') + " Wool", sprites.get(color)); } public boolean interact(Level level, int xt, int yt, Player player, Item item, Direction attackDir) { @@ -41,25 +51,4 @@ public boolean interact(Level level, int xt, int yt, Player player, Item item, D public boolean mayPass(Level level, int x, int y, Entity e) { return e.canWool(); } - - public enum WoolType { - BLACK("Black Wool", new SpriteAnimation(SpriteType.Tile, "black_wool")), - BLUE("Blue Wool", new SpriteAnimation(SpriteType.Tile, "blue_wool")), - GREEN("Green Wool", new SpriteAnimation(SpriteType.Tile, "green_wool")), - NORMAL("Wool", new SpriteAnimation(SpriteType.Tile, "white_wool")), - RED("Red Wool", new SpriteAnimation(SpriteType.Tile, "red_wool")), - YELLOW("Yellow Wool", new SpriteAnimation(SpriteType.Tile, "yellow_wool")); - - public final SpriteAnimation sprite; - public final String name; - - /** - * Create a type of wool. - * @param sprite The sprite for the type of wool. - */ - WoolType(String name, SpriteAnimation sprite) { - this.sprite = sprite; - this.name = name; - } - } } diff --git a/src/client/java/minicraft/saveload/LegacyLoad.java b/src/client/java/minicraft/saveload/LegacyLoad.java index d79df91ac..033679079 100644 --- a/src/client/java/minicraft/saveload/LegacyLoad.java +++ b/src/client/java/minicraft/saveload/LegacyLoad.java @@ -231,7 +231,7 @@ public void loadWorld(String filename) { for (int y = 0; y < lvlh - 1; y++) { int tileArrIdx = y + x * lvlw; int tileidx = x + y * lvlw; // The tiles are saved with x outer loop, and y inner loop, meaning that the list reads down, then right one, rather than right, then down one. - Load.loadTile(tiles, tdata, tileArrIdx, Tiles.oldids.get(Integer.parseInt(data.get(tileidx + 3))), + Load.loadTile(worldVer, tiles, tdata, tileArrIdx, Tiles.oldids.get(Integer.parseInt(data.get(tileidx + 3))), extradata.get(tileidx)); } } diff --git a/src/client/java/minicraft/saveload/Load.java b/src/client/java/minicraft/saveload/Load.java index 787be58dc..ebf995c6a 100644 --- a/src/client/java/minicraft/saveload/Load.java +++ b/src/client/java/minicraft/saveload/Load.java @@ -42,6 +42,7 @@ import minicraft.gfx.Color; import minicraft.gfx.Point; import minicraft.item.ArmorItem; +import minicraft.item.DyeItem; import minicraft.item.Inventory; import minicraft.item.Item; import minicraft.item.Items; @@ -62,6 +63,7 @@ import minicraft.screen.SignDisplay; import minicraft.screen.SkinDisplay; import minicraft.screen.TutorialDisplayHandler; +import minicraft.screen.WorldSelectDisplay; import minicraft.screen.entry.ListEntry; import minicraft.screen.entry.StringEntry; import minicraft.util.AdvancementElement; @@ -128,6 +130,87 @@ public Load(String worldname, boolean loadGame) { if (!loadGame) return; + // Is dev build + if (Game.VERSION.isDev() && worldVer.compareTo(Game.VERSION) < 0) { + Logging.SAVELOAD.info("Old world detected, backup prompting..."); + ArrayList entries = new ArrayList<>(); + entries.addAll(Arrays.asList(StringEntry.useLines(Color.WHITE, false, + Localization.getLocalized("minicraft.displays.save.popup_display.world_backup_prompt.msg", + worldVer, Game.VERSION)))); + entries.addAll(Arrays.asList(StringEntry.useLines("minicraft.display.popup.escape_cancel"))); + + AtomicBoolean acted = new AtomicBoolean(false); + AtomicBoolean continues = new AtomicBoolean(false); + AtomicBoolean doBackup = new AtomicBoolean(false); + + ArrayList callbacks = new ArrayList<>(); + callbacks.add(new PopupDisplay.PopupActionCallback("EXIT", m -> { + Game.exitDisplay(); + acted.set(true); + return true; + })); + + callbacks.add(new PopupDisplay.PopupActionCallback("ENTER|Y", m -> { + Game.exitDisplay(); + continues.set(true); + doBackup.set(true); + acted.set(true); + return true; + })); + + callbacks.add(new PopupDisplay.PopupActionCallback("N", m -> { + Game.exitDisplay(); + continues.set(true); + acted.set(true); + return true; + })); + + Game.setDisplay(new PopupDisplay(new PopupDisplay.PopupConfig( + "minicraft.displays.save.popup_display.world_backup_prompt", callbacks, 2), + entries.toArray(new ListEntry[0]))); + + while (true) { + if (acted.get()) { + if (continues.get()) { + if (doBackup.get()) { + Logging.SAVELOAD.info("Performing world backup..."); + int i = 0; + String filename = worldname; + File f = new File(location + "/saves/", filename); + while (f.exists()) { // Increments world name if world exists + i++; + filename = worldname + " (" + i + ")"; + f = new File(location + "/saves/", filename); + } + f.mkdirs(); + try { + FileHandler.copyFolderContents(Paths.get(location, "saves", worldname), + f.toPath(), FileHandler.SKIP, false); + } catch (IOException e) { + Logging.SAVELOAD.error(e, "Error occurs while performing world backup, loading aborted"); + throw new RuntimeException(new InterruptedException("World loading interrupted.")); + } + + Logging.SAVELOAD.info("World backup \"{}\" is created.", filename); + WorldSelectDisplay.updateWorlds(); + } else + Logging.SAVELOAD.warn("World backup is skipped."); + Logging.SAVELOAD.debug("World loading continues..."); + } else { + Logging.SAVELOAD.info("User cancelled world loading, loading aborted."); + throw new RuntimeException(new InterruptedException("World loading interrupted.")); + } + + break; + } + + try { + //noinspection BusyWait + Thread.sleep(10); + } catch (InterruptedException ignored) {} + } + } + if (worldVer.compareTo(new Version("1.9.2")) < 0) new LegacyLoad(worldname); else { @@ -198,6 +281,11 @@ public Load(String worldname, boolean loadGame) { break; } + + try { + //noinspection BusyWait + Thread.sleep(10); + } catch (InterruptedException ignored) {} } } } @@ -646,25 +734,29 @@ private void loadWorld(String filename) { } } - if (tilename.equalsIgnoreCase("Wool") && worldVer.compareTo(new Version("2.0.6-dev4")) < 0) { - switch (Integer.parseInt(extradata.get(tileidx))) { - case 1: - tilename = "Red Wool"; - break; - case 2: - tilename = "Yellow Wool"; - break; - case 3: - tilename = "Green Wool"; - break; - case 4: - tilename = "Blue Wool"; - break; - case 5: - tilename = "Black Wool"; - break; - default: - tilename = "Wool"; + if (tilename.equalsIgnoreCase("Wool")) { + if (worldVer.compareTo(new Version("2.0.6-dev4")) < 0) { + switch (Integer.parseInt(extradata.get(tileidx))) { + case 1: + tilename = "Red Wool"; + break; + case 2: + tilename = "Yellow Wool"; + break; + case 3: + tilename = "Green Wool"; + break; + case 4: + tilename = "Blue Wool"; + break; + case 5: + tilename = "Black Wool"; + break; + default: + tilename = "White Wool"; + } + } else if (worldVer.compareTo(new Version("2.2.1-dev2")) < 0) { + tilename = "White Wool"; } } else if (l == World.minLevelDepth + 1 && tilename.equalsIgnoreCase("Lapis") && worldVer.compareTo(new Version("2.0.3-dev6")) < 0) { if (Math.random() < 0.8) // don't replace *all* the lapis @@ -682,7 +774,7 @@ private void loadWorld(String filename) { } } - loadTile(tiles, tdata, tileArrIdx, tilename, extradata.get(tileidx)); + loadTile(worldVer, tiles, tdata, tileArrIdx, tilename, extradata.get(tileidx)); } } @@ -753,7 +845,7 @@ private void loadWorld(String filename) { } boolean signsLoadSucceeded = false; - if (new File(location+"signs.json").exists()) { + if (new File(location + "signs.json").exists()) { try { JSONObject fileObj = new JSONObject(loadFromFile(location + "signs.json", true)); @SuppressWarnings("unused") @@ -784,14 +876,18 @@ private void loadWorld(String filename) { private static final Pattern OLD_TORCH_TILE_REGEX = Pattern.compile("TORCH ([\\w ]+)"); - public static void loadTile(short[] tiles, short[] data, int idx, String tileName, String tileData) { + public static void loadTile(Version worldVer, short[] tiles, short[] data, int idx, String tileName, String tileData) { Matcher matcher; if ((matcher = OLD_TORCH_TILE_REGEX.matcher(tileName.toUpperCase())).matches()) { tiles[idx] = 57; // ID of TORCH tile data[idx] = Tiles.get(matcher.group(1)).id; } else { tiles[idx] = Tiles.get(tileName).id; - data[idx] = Short.parseShort(tileData); + if (worldVer.compareTo(new Version("2.2.1-dev1")) <= 0 && tileName.equalsIgnoreCase("FLOWER")) { + data[idx] = 0; + } else { + data[idx] = Short.parseShort(tileData); + } } } @@ -950,6 +1046,16 @@ protected static String subOldName(String name, Version worldVer) { name = name.replace("Potion", "Awkward Potion"); } + if (worldVer.compareTo(new Version("2.2.1-dev2")) < 0) { + if (name.startsWith("Wool")) + name = name.replace("Wool", "White Wool"); + } + + if (worldVer.compareTo(new Version("2.2.1-dev2")) < 0) { + if (name.startsWith("Flower")) + name = name.replace("Flower", "Oxeye Daisy"); + } + return name; } @@ -1057,6 +1163,14 @@ public static Entity loadEntity(String entityData, Version worldVer, boolean isL Logging.SAVELOAD.error("Failed to load Spark; owner id doesn't point to a correct entity"); return null; } + } else if (entityName.contains(" Bed")) { // with a space, meaning that the bed has a color name in the front + String colorName = entityName.substring(0, entityName.length() - 4).toUpperCase().replace(' ', '_'); + try { + newEntity = new Bed(DyeItem.DyeColor.valueOf(colorName)); + } catch (IllegalArgumentException e) { + Logging.SAVELOAD.error("Invalid bed variant: `{}`, skipping.", entityName); + return null; + } } else { int mobLvl = 1; if (!Crafter.names.contains(entityName)) { // Entity missing debugging @@ -1204,7 +1318,6 @@ public static Entity loadEntity(String entityData, Version worldVer, boolean isL private static Entity getEntity(String string, int mobLevel) { switch (string) { case "Player": - return null; case "RemotePlayer": return null; case "Cow": @@ -1268,6 +1381,8 @@ private static Entity getEntity(String string, int mobLevel) { return new KnightStatue(0); case "ObsidianKnight": return new ObsidianKnight(0); + case "DyeVat": + return new Crafter(Crafter.Type.DyeVat); default: Logging.SAVELOAD.error("LOAD ERROR: Unknown or outdated entity requested: " + string); return null; diff --git a/src/client/java/minicraft/saveload/Save.java b/src/client/java/minicraft/saveload/Save.java index 43d827550..d1e52a678 100644 --- a/src/client/java/minicraft/saveload/Save.java +++ b/src/client/java/minicraft/saveload/Save.java @@ -11,6 +11,7 @@ import minicraft.entity.FireSpark; import minicraft.entity.ItemEntity; import minicraft.entity.Spark; +import minicraft.entity.furniture.Bed; import minicraft.entity.furniture.Chest; import minicraft.entity.furniture.Crafter; import minicraft.entity.furniture.DeathChest; @@ -48,6 +49,7 @@ import java.io.BufferedWriter; import java.io.File; +import java.io.FileNotFoundException; import java.io.FileWriter; import java.io.IOException; import java.util.ArrayList; @@ -119,6 +121,36 @@ public Save(String worldname) { */ public Save() { this(new File(Game.gameDir + "/")); + + if (Game.VERSION.isDev()) { // Is dev build + Logging.SAVELOAD.debug("In dev build: Searching for old preferences..."); + Version prefVer; + File prefFile = new File(location, "Preferences.json"); // Only this is checked when checking existence. + File unlocFile = new File(location, "Unlocks.json"); + try { + JSONObject json = new JSONObject(Load.loadFromFile(location + "Preferences.json", false)); + prefVer = new Version(json.getString("version")); + } catch (FileNotFoundException e) { + Logging.SAVELOAD.debug("Preferences.json is not found, ignoring..."); + prefVer = null; + } catch (IOException e) { + Logging.SAVELOAD.error(e, "Unable to load Preferences.json, saving aborted"); + return; + } + + if (prefVer != null && prefVer.compareTo(Game.VERSION) < 0) { + Logging.SAVELOAD.info("Old preferences detected, backup performing..."); + File prefBackupFile = new File(location + "Preferences.json.bak"); + if (prefBackupFile.exists()) Logging.SAVELOAD.info("Overwriting old Preferences.json backup..."); + if (prefBackupFile.delete()) Logging.SAVELOAD.trace("Preferences.json.bak is deleted."); + if (prefFile.renameTo(prefBackupFile)) Logging.SAVELOAD.trace("Preferences.json is renamed to Preferences.json.bak"); + File unlocBackupFile = new File(location + "Unlocks.json.bak"); + if (unlocBackupFile.exists()) Logging.SAVELOAD.info("Overwriting old Unlocks.json backup..."); + if (unlocBackupFile.delete()) Logging.SAVELOAD.trace("Unlocks.json.bak is deleted."); + if (unlocFile.renameTo(unlocBackupFile)) Logging.SAVELOAD.trace("Unlocks.json is renamed to Unlocks.json.bak"); + } + } + Logging.SAVELOAD.debug("Writing preferences and unlocks..."); writePrefs(); writeUnlocks(); @@ -389,9 +421,7 @@ public static String writeEntity(Entity e, boolean isLocalSave) { extradata.append(":").append(((EnemyMob) m).lvl); else if (e instanceof Sheep) extradata.append(":").append(((Sheep) m).cut); // Saves if the sheep is cut. If not, we could reload the save and the wool would regenerate. - } - - if (e instanceof Chest) { + } else if (e instanceof Chest) { Chest chest = (Chest) e; for (int ii = 0; ii < chest.getInventory().invSize(); ii++) { @@ -401,25 +431,19 @@ else if (e instanceof Sheep) if (chest instanceof DeathChest) extradata.append(":").append(((DeathChest) chest).time); if (chest instanceof DungeonChest) extradata.append(":").append(((DungeonChest) chest).isLocked()); - } - - if (e instanceof Spawner) { + } else if (e instanceof Spawner) { Spawner egg = (Spawner) e; String mobname = egg.mob.getClass().getName(); mobname = mobname.substring(mobname.lastIndexOf(".") + 1); extradata.append(":").append(mobname).append(":").append(egg.mob instanceof EnemyMob ? ((EnemyMob) egg.mob).lvl : 1); - } - - if (e instanceof Lantern) { + } else if (e instanceof Lantern) { extradata.append(":").append(((Lantern) e).type.ordinal()); - } - - if (e instanceof Crafter) { + } else if (e instanceof Crafter) { name = ((Crafter) e).type.name(); - } - - if (e instanceof KnightStatue) { + } else if (e instanceof KnightStatue) { extradata.append(":").append(((KnightStatue) e).getBossHealth()); + } else if (e instanceof Bed) { + name = ((Bed) e).name; } if (!isLocalSave) { diff --git a/src/client/java/minicraft/saveload/Version.java b/src/client/java/minicraft/saveload/Version.java index 4e10f2d8e..001911c59 100644 --- a/src/client/java/minicraft/saveload/Version.java +++ b/src/client/java/minicraft/saveload/Version.java @@ -80,6 +80,10 @@ public int compareTo(@NotNull Version ov, boolean ignoreDev) { return 0; // The versions are equal. } + public boolean isDev() { + return dev != 0; + } + @Override public String toString() { return make + "." + major + "." + minor + (dev == 0 ? "" : "-dev" + dev); diff --git a/src/client/java/minicraft/util/MyUtils.java b/src/client/java/minicraft/util/MyUtils.java index 6a0f78614..6dfe6b8b2 100644 --- a/src/client/java/minicraft/util/MyUtils.java +++ b/src/client/java/minicraft/util/MyUtils.java @@ -1,5 +1,7 @@ package minicraft.util; +import org.jetbrains.annotations.NotNull; + public final class MyUtils { private MyUtils() { @@ -24,6 +26,89 @@ public static String plural(int num, String word) { return num + " " + word + p; } + /** + *

Capitalizes all the delimiter separated words in a String. + * Only the first letter of each word is changed. To convert the + * rest of each word to lowercase at the same time, + * use {@link #capitalizeFully(String)}.

+ * + *

The delimiters represent a set of characters understood to separate words. + * The first string character and the first non-delimiter character after a + * delimiter will be capitalized.

+ * + *

A null input String returns null. + * Capitalization uses the unicode title case, normally equivalent to + * upper case.

+ * + *
+	 * WordUtils.capitalize(null, *)            = null
+	 * WordUtils.capitalize("", *)              = ""
+	 * WordUtils.capitalize(*, new char[0])     = *
+	 * WordUtils.capitalize("i am fine", null)  = "I Am Fine"
+	 * WordUtils.capitalize("i aM.fine", {'.'}) = "I aM.Fine"
+	 * 
+ * + * Source: modified and copied from Apache commons-lang WordUtils#capitalize + * + * @param str the String to capitalize, may be null + * @return capitalized String, null if null String input + */ + public static String capitalize(@NotNull String str) { + if (str.isEmpty()) { + return str; + } + int strLen = str.length(); + StringBuffer buffer = new StringBuffer(strLen); + boolean capitalizeNext = true; + for (int i = 0; i < strLen; i++) { + char ch = str.charAt(i); + if (Character.isWhitespace(ch)) { + buffer.append(ch); + capitalizeNext = true; + } else if (capitalizeNext) { + buffer.append(Character.toTitleCase(ch)); + capitalizeNext = false; + } else { + buffer.append(ch); + } + } + return buffer.toString(); + } + + /** + *

Converts all the delimiter separated words in a String into capitalized words, + * that is each word is made up of a titlecase character and then a series of + * lowercase characters.

+ * + *

The delimiters represent a set of characters understood to separate words. + * The first string character and the first non-delimiter character after a + * delimiter will be capitalized.

+ * + *

A null input String returns null. + * Capitalization uses the unicode title case, normally equivalent to + * upper case.

+ * + *
+	 * WordUtils.capitalizeFully(null, *)            = null
+	 * WordUtils.capitalizeFully("", *)              = ""
+	 * WordUtils.capitalizeFully(*, null)            = *
+	 * WordUtils.capitalizeFully(*, new char[0])     = *
+	 * WordUtils.capitalizeFully("i aM.fine", {'.'}) = "I am.Fine"
+	 * 
+ * + * Source: modified and copied from Apache commons-lang WordUtils#capitalizeFully + * + * @param str the String to capitalize, may be null + * @return capitalized String, null if null String input + */ + public static String capitalizeFully(@NotNull String str) { + if (str.isEmpty()) { + return str; + } + str = str.toLowerCase(); + return capitalize(str); + } + public static void sleep(int millis) { try { Thread.sleep(millis); diff --git a/src/client/resources/assets/localization/en-us.json b/src/client/resources/assets/localization/en-us.json index 60c374467..fc93e9888 100644 --- a/src/client/resources/assets/localization/en-us.json +++ b/src/client/resources/assets/localization/en-us.json @@ -356,6 +356,8 @@ "minicraft.displays.resource_packs.display.help.position": "SHIFT-[LEFT|RIGHT|UP|DOWN] to move packs. ", "minicraft.displays.resource_packs.display.help.select": "%s to examine.", "minicraft.displays.resource_packs.display.title": "Resource Packs", + "minicraft.displays.save.popup_display.world_backup_prompt": "World Backup Prompt", + "minicraft.displays.save.popup_display.world_backup_prompt.msg": "The world is on version %s while you are on version %s. You are advised to perform a backup in case of irreversible world corruption. Should you like to perform a backup before continuing? (Y|N)", "minicraft.displays.skin": "Skins", "minicraft.displays.skin.display.help.move": "Use %s and %s to move.", "minicraft.displays.skin.display.help.select": "%s to select, and %s to cancel.", diff --git a/src/client/resources/assets/textures/entity/bed.png b/src/client/resources/assets/textures/entity/bed.png deleted file mode 100644 index 760cb3d21..000000000 Binary files a/src/client/resources/assets/textures/entity/bed.png and /dev/null differ diff --git a/src/client/resources/assets/textures/entity/black_bed.png b/src/client/resources/assets/textures/entity/black_bed.png new file mode 100644 index 000000000..3b5a3fbba Binary files /dev/null and b/src/client/resources/assets/textures/entity/black_bed.png differ diff --git a/src/client/resources/assets/textures/entity/blue_bed.png b/src/client/resources/assets/textures/entity/blue_bed.png new file mode 100644 index 000000000..8a8e0db37 Binary files /dev/null and b/src/client/resources/assets/textures/entity/blue_bed.png differ diff --git a/src/client/resources/assets/textures/entity/brown_bed.png b/src/client/resources/assets/textures/entity/brown_bed.png new file mode 100644 index 000000000..aeb9e33da Binary files /dev/null and b/src/client/resources/assets/textures/entity/brown_bed.png differ diff --git a/src/client/resources/assets/textures/entity/cyan_bed.png b/src/client/resources/assets/textures/entity/cyan_bed.png new file mode 100644 index 000000000..49eb6e782 Binary files /dev/null and b/src/client/resources/assets/textures/entity/cyan_bed.png differ diff --git a/src/client/resources/assets/textures/entity/dyevat.png b/src/client/resources/assets/textures/entity/dyevat.png new file mode 100644 index 000000000..e4b52a65f Binary files /dev/null and b/src/client/resources/assets/textures/entity/dyevat.png differ diff --git a/src/client/resources/assets/textures/entity/gray_bed.png b/src/client/resources/assets/textures/entity/gray_bed.png new file mode 100644 index 000000000..fb68263c8 Binary files /dev/null and b/src/client/resources/assets/textures/entity/gray_bed.png differ diff --git a/src/client/resources/assets/textures/entity/green_bed.png b/src/client/resources/assets/textures/entity/green_bed.png new file mode 100644 index 000000000..12bfbfa2a Binary files /dev/null and b/src/client/resources/assets/textures/entity/green_bed.png differ diff --git a/src/client/resources/assets/textures/entity/light_blue_bed.png b/src/client/resources/assets/textures/entity/light_blue_bed.png new file mode 100644 index 000000000..6899b704f Binary files /dev/null and b/src/client/resources/assets/textures/entity/light_blue_bed.png differ diff --git a/src/client/resources/assets/textures/entity/light_gray_bed.png b/src/client/resources/assets/textures/entity/light_gray_bed.png new file mode 100644 index 000000000..7047583dd Binary files /dev/null and b/src/client/resources/assets/textures/entity/light_gray_bed.png differ diff --git a/src/client/resources/assets/textures/entity/lime_bed.png b/src/client/resources/assets/textures/entity/lime_bed.png new file mode 100644 index 000000000..f9dd4781e Binary files /dev/null and b/src/client/resources/assets/textures/entity/lime_bed.png differ diff --git a/src/client/resources/assets/textures/entity/magenta_bed.png b/src/client/resources/assets/textures/entity/magenta_bed.png new file mode 100644 index 000000000..20faf482b Binary files /dev/null and b/src/client/resources/assets/textures/entity/magenta_bed.png differ diff --git a/src/client/resources/assets/textures/entity/orange_bed.png b/src/client/resources/assets/textures/entity/orange_bed.png new file mode 100644 index 000000000..fbb77e191 Binary files /dev/null and b/src/client/resources/assets/textures/entity/orange_bed.png differ diff --git a/src/client/resources/assets/textures/entity/pink_bed.png b/src/client/resources/assets/textures/entity/pink_bed.png new file mode 100644 index 000000000..04f5a25eb Binary files /dev/null and b/src/client/resources/assets/textures/entity/pink_bed.png differ diff --git a/src/client/resources/assets/textures/entity/purple_bed.png b/src/client/resources/assets/textures/entity/purple_bed.png new file mode 100644 index 000000000..e3e190319 Binary files /dev/null and b/src/client/resources/assets/textures/entity/purple_bed.png differ diff --git a/src/client/resources/assets/textures/entity/red_bed.png b/src/client/resources/assets/textures/entity/red_bed.png new file mode 100644 index 000000000..c81086170 Binary files /dev/null and b/src/client/resources/assets/textures/entity/red_bed.png differ diff --git a/src/client/resources/assets/textures/entity/sheep.png b/src/client/resources/assets/textures/entity/sheep.png index caab8c214..c422f3366 100644 Binary files a/src/client/resources/assets/textures/entity/sheep.png and b/src/client/resources/assets/textures/entity/sheep.png differ diff --git a/src/client/resources/assets/textures/entity/white_bed.png b/src/client/resources/assets/textures/entity/white_bed.png new file mode 100644 index 000000000..6ebe08ac3 Binary files /dev/null and b/src/client/resources/assets/textures/entity/white_bed.png differ diff --git a/src/client/resources/assets/textures/entity/yellow_bed.png b/src/client/resources/assets/textures/entity/yellow_bed.png new file mode 100644 index 000000000..c20945343 Binary files /dev/null and b/src/client/resources/assets/textures/entity/yellow_bed.png differ diff --git a/src/client/resources/assets/textures/item/allium.png b/src/client/resources/assets/textures/item/allium.png new file mode 100644 index 000000000..c43f6ccdf Binary files /dev/null and b/src/client/resources/assets/textures/item/allium.png differ diff --git a/src/client/resources/assets/textures/item/bed.png b/src/client/resources/assets/textures/item/bed.png deleted file mode 100644 index 1f51b8096..000000000 Binary files a/src/client/resources/assets/textures/item/bed.png and /dev/null differ diff --git a/src/client/resources/assets/textures/item/black_bed.png b/src/client/resources/assets/textures/item/black_bed.png new file mode 100644 index 000000000..e1d8ea8b5 Binary files /dev/null and b/src/client/resources/assets/textures/item/black_bed.png differ diff --git a/src/client/resources/assets/textures/item/black_dye.png b/src/client/resources/assets/textures/item/black_dye.png new file mode 100644 index 000000000..bc10f09b3 Binary files /dev/null and b/src/client/resources/assets/textures/item/black_dye.png differ diff --git a/src/client/resources/assets/textures/item/black_wool.png b/src/client/resources/assets/textures/item/black_wool.png index 5e59e97ee..fb56015fd 100644 Binary files a/src/client/resources/assets/textures/item/black_wool.png and b/src/client/resources/assets/textures/item/black_wool.png differ diff --git a/src/client/resources/assets/textures/item/blue_bed.png b/src/client/resources/assets/textures/item/blue_bed.png new file mode 100644 index 000000000..d6db798bc Binary files /dev/null and b/src/client/resources/assets/textures/item/blue_bed.png differ diff --git a/src/client/resources/assets/textures/item/blue_dye.png b/src/client/resources/assets/textures/item/blue_dye.png new file mode 100644 index 000000000..947e9d32a Binary files /dev/null and b/src/client/resources/assets/textures/item/blue_dye.png differ diff --git a/src/client/resources/assets/textures/item/blue_orchid.png b/src/client/resources/assets/textures/item/blue_orchid.png new file mode 100644 index 000000000..a273cbc2e Binary files /dev/null and b/src/client/resources/assets/textures/item/blue_orchid.png differ diff --git a/src/client/resources/assets/textures/item/blue_wool.png b/src/client/resources/assets/textures/item/blue_wool.png index 8b1fd527f..1af70ccd0 100644 Binary files a/src/client/resources/assets/textures/item/blue_wool.png and b/src/client/resources/assets/textures/item/blue_wool.png differ diff --git a/src/client/resources/assets/textures/item/brown_bed.png b/src/client/resources/assets/textures/item/brown_bed.png new file mode 100644 index 000000000..6bd2adbb6 Binary files /dev/null and b/src/client/resources/assets/textures/item/brown_bed.png differ diff --git a/src/client/resources/assets/textures/item/brown_dye.png b/src/client/resources/assets/textures/item/brown_dye.png new file mode 100644 index 000000000..06b025ae4 Binary files /dev/null and b/src/client/resources/assets/textures/item/brown_dye.png differ diff --git a/src/client/resources/assets/textures/item/brown_wool.png b/src/client/resources/assets/textures/item/brown_wool.png new file mode 100644 index 000000000..043cbde0d Binary files /dev/null and b/src/client/resources/assets/textures/item/brown_wool.png differ diff --git a/src/client/resources/assets/textures/item/cornflower.png b/src/client/resources/assets/textures/item/cornflower.png new file mode 100644 index 000000000..2968746b6 Binary files /dev/null and b/src/client/resources/assets/textures/item/cornflower.png differ diff --git a/src/client/resources/assets/textures/item/cyan_bed.png b/src/client/resources/assets/textures/item/cyan_bed.png new file mode 100644 index 000000000..f8a055d50 Binary files /dev/null and b/src/client/resources/assets/textures/item/cyan_bed.png differ diff --git a/src/client/resources/assets/textures/item/cyan_dye.png b/src/client/resources/assets/textures/item/cyan_dye.png new file mode 100644 index 000000000..359787ba4 Binary files /dev/null and b/src/client/resources/assets/textures/item/cyan_dye.png differ diff --git a/src/client/resources/assets/textures/item/cyan_wool.png b/src/client/resources/assets/textures/item/cyan_wool.png new file mode 100644 index 000000000..17c516c6a Binary files /dev/null and b/src/client/resources/assets/textures/item/cyan_wool.png differ diff --git a/src/client/resources/assets/textures/item/dandelion.png b/src/client/resources/assets/textures/item/dandelion.png new file mode 100644 index 000000000..3fa213225 Binary files /dev/null and b/src/client/resources/assets/textures/item/dandelion.png differ diff --git a/src/client/resources/assets/textures/item/dyevat.png b/src/client/resources/assets/textures/item/dyevat.png new file mode 100644 index 000000000..b4d207da9 Binary files /dev/null and b/src/client/resources/assets/textures/item/dyevat.png differ diff --git a/src/client/resources/assets/textures/item/gray_bed.png b/src/client/resources/assets/textures/item/gray_bed.png new file mode 100644 index 000000000..33cc7c10b Binary files /dev/null and b/src/client/resources/assets/textures/item/gray_bed.png differ diff --git a/src/client/resources/assets/textures/item/gray_dye.png b/src/client/resources/assets/textures/item/gray_dye.png new file mode 100644 index 000000000..e63e9a6fc Binary files /dev/null and b/src/client/resources/assets/textures/item/gray_dye.png differ diff --git a/src/client/resources/assets/textures/item/gray_wool.png b/src/client/resources/assets/textures/item/gray_wool.png new file mode 100644 index 000000000..04f887148 Binary files /dev/null and b/src/client/resources/assets/textures/item/gray_wool.png differ diff --git a/src/client/resources/assets/textures/item/green_bed.png b/src/client/resources/assets/textures/item/green_bed.png new file mode 100644 index 000000000..9838c477d Binary files /dev/null and b/src/client/resources/assets/textures/item/green_bed.png differ diff --git a/src/client/resources/assets/textures/item/green_dye.png b/src/client/resources/assets/textures/item/green_dye.png new file mode 100644 index 000000000..ada3af85b Binary files /dev/null and b/src/client/resources/assets/textures/item/green_dye.png differ diff --git a/src/client/resources/assets/textures/item/green_wool.png b/src/client/resources/assets/textures/item/green_wool.png index 63e56b85a..b27dde8f6 100644 Binary files a/src/client/resources/assets/textures/item/green_wool.png and b/src/client/resources/assets/textures/item/green_wool.png differ diff --git a/src/client/resources/assets/textures/item/hydrangea.png b/src/client/resources/assets/textures/item/hydrangea.png new file mode 100644 index 000000000..7d3810a34 Binary files /dev/null and b/src/client/resources/assets/textures/item/hydrangea.png differ diff --git a/src/client/resources/assets/textures/item/iris.png b/src/client/resources/assets/textures/item/iris.png new file mode 100644 index 000000000..8eaf49ee9 Binary files /dev/null and b/src/client/resources/assets/textures/item/iris.png differ diff --git a/src/client/resources/assets/textures/item/light_blue_bed.png b/src/client/resources/assets/textures/item/light_blue_bed.png new file mode 100644 index 000000000..6d9727126 Binary files /dev/null and b/src/client/resources/assets/textures/item/light_blue_bed.png differ diff --git a/src/client/resources/assets/textures/item/light_blue_dye.png b/src/client/resources/assets/textures/item/light_blue_dye.png new file mode 100644 index 000000000..7fb58a48d Binary files /dev/null and b/src/client/resources/assets/textures/item/light_blue_dye.png differ diff --git a/src/client/resources/assets/textures/item/light_blue_wool.png b/src/client/resources/assets/textures/item/light_blue_wool.png new file mode 100644 index 000000000..9840265fa Binary files /dev/null and b/src/client/resources/assets/textures/item/light_blue_wool.png differ diff --git a/src/client/resources/assets/textures/item/light_gray_bed.png b/src/client/resources/assets/textures/item/light_gray_bed.png new file mode 100644 index 000000000..3863dd704 Binary files /dev/null and b/src/client/resources/assets/textures/item/light_gray_bed.png differ diff --git a/src/client/resources/assets/textures/item/light_gray_dye.png b/src/client/resources/assets/textures/item/light_gray_dye.png new file mode 100644 index 000000000..405125115 Binary files /dev/null and b/src/client/resources/assets/textures/item/light_gray_dye.png differ diff --git a/src/client/resources/assets/textures/item/light_gray_wool.png b/src/client/resources/assets/textures/item/light_gray_wool.png new file mode 100644 index 000000000..3b7b6b8dc Binary files /dev/null and b/src/client/resources/assets/textures/item/light_gray_wool.png differ diff --git a/src/client/resources/assets/textures/item/lime_bed.png b/src/client/resources/assets/textures/item/lime_bed.png new file mode 100644 index 000000000..f8d98a34f Binary files /dev/null and b/src/client/resources/assets/textures/item/lime_bed.png differ diff --git a/src/client/resources/assets/textures/item/lime_dye.png b/src/client/resources/assets/textures/item/lime_dye.png new file mode 100644 index 000000000..8d1c05f32 Binary files /dev/null and b/src/client/resources/assets/textures/item/lime_dye.png differ diff --git a/src/client/resources/assets/textures/item/lime_wool.png b/src/client/resources/assets/textures/item/lime_wool.png new file mode 100644 index 000000000..121b0c542 Binary files /dev/null and b/src/client/resources/assets/textures/item/lime_wool.png differ diff --git a/src/client/resources/assets/textures/item/magenta_bed.png b/src/client/resources/assets/textures/item/magenta_bed.png new file mode 100644 index 000000000..e6f0d2a55 Binary files /dev/null and b/src/client/resources/assets/textures/item/magenta_bed.png differ diff --git a/src/client/resources/assets/textures/item/magenta_dye.png b/src/client/resources/assets/textures/item/magenta_dye.png new file mode 100644 index 000000000..0a0079dd1 Binary files /dev/null and b/src/client/resources/assets/textures/item/magenta_dye.png differ diff --git a/src/client/resources/assets/textures/item/magenta_wool.png b/src/client/resources/assets/textures/item/magenta_wool.png new file mode 100644 index 000000000..b377fc4c2 Binary files /dev/null and b/src/client/resources/assets/textures/item/magenta_wool.png differ diff --git a/src/client/resources/assets/textures/item/orange_bed.png b/src/client/resources/assets/textures/item/orange_bed.png new file mode 100644 index 000000000..626adad73 Binary files /dev/null and b/src/client/resources/assets/textures/item/orange_bed.png differ diff --git a/src/client/resources/assets/textures/item/orange_dye.png b/src/client/resources/assets/textures/item/orange_dye.png new file mode 100644 index 000000000..79fd7966c Binary files /dev/null and b/src/client/resources/assets/textures/item/orange_dye.png differ diff --git a/src/client/resources/assets/textures/item/orange_tulip.png b/src/client/resources/assets/textures/item/orange_tulip.png new file mode 100644 index 000000000..0119f5eb1 Binary files /dev/null and b/src/client/resources/assets/textures/item/orange_tulip.png differ diff --git a/src/client/resources/assets/textures/item/orange_wool.png b/src/client/resources/assets/textures/item/orange_wool.png new file mode 100644 index 000000000..9a3eaf8a6 Binary files /dev/null and b/src/client/resources/assets/textures/item/orange_wool.png differ diff --git a/src/client/resources/assets/textures/item/oxeye_daisy.png b/src/client/resources/assets/textures/item/oxeye_daisy.png new file mode 100644 index 000000000..65e1f502b Binary files /dev/null and b/src/client/resources/assets/textures/item/oxeye_daisy.png differ diff --git a/src/client/resources/assets/textures/item/peony.png b/src/client/resources/assets/textures/item/peony.png new file mode 100644 index 000000000..c3a12379f Binary files /dev/null and b/src/client/resources/assets/textures/item/peony.png differ diff --git a/src/client/resources/assets/textures/item/periwinkle.png b/src/client/resources/assets/textures/item/periwinkle.png new file mode 100644 index 000000000..9231dd40d Binary files /dev/null and b/src/client/resources/assets/textures/item/periwinkle.png differ diff --git a/src/client/resources/assets/textures/item/pink_bed.png b/src/client/resources/assets/textures/item/pink_bed.png new file mode 100644 index 000000000..759230dd2 Binary files /dev/null and b/src/client/resources/assets/textures/item/pink_bed.png differ diff --git a/src/client/resources/assets/textures/item/pink_dye.png b/src/client/resources/assets/textures/item/pink_dye.png new file mode 100644 index 000000000..70597b72d Binary files /dev/null and b/src/client/resources/assets/textures/item/pink_dye.png differ diff --git a/src/client/resources/assets/textures/item/pink_lily.png b/src/client/resources/assets/textures/item/pink_lily.png new file mode 100644 index 000000000..737cf0482 Binary files /dev/null and b/src/client/resources/assets/textures/item/pink_lily.png differ diff --git a/src/client/resources/assets/textures/item/pink_tulip.png b/src/client/resources/assets/textures/item/pink_tulip.png new file mode 100644 index 000000000..5887dad33 Binary files /dev/null and b/src/client/resources/assets/textures/item/pink_tulip.png differ diff --git a/src/client/resources/assets/textures/item/pink_wool.png b/src/client/resources/assets/textures/item/pink_wool.png new file mode 100644 index 000000000..278904409 Binary files /dev/null and b/src/client/resources/assets/textures/item/pink_wool.png differ diff --git a/src/client/resources/assets/textures/item/poppy.png b/src/client/resources/assets/textures/item/poppy.png new file mode 100644 index 000000000..342ba177d Binary files /dev/null and b/src/client/resources/assets/textures/item/poppy.png differ diff --git a/src/client/resources/assets/textures/item/purple_bed.png b/src/client/resources/assets/textures/item/purple_bed.png new file mode 100644 index 000000000..d4ecad6be Binary files /dev/null and b/src/client/resources/assets/textures/item/purple_bed.png differ diff --git a/src/client/resources/assets/textures/item/purple_dye.png b/src/client/resources/assets/textures/item/purple_dye.png new file mode 100644 index 000000000..549595b2f Binary files /dev/null and b/src/client/resources/assets/textures/item/purple_dye.png differ diff --git a/src/client/resources/assets/textures/item/purple_wool.png b/src/client/resources/assets/textures/item/purple_wool.png new file mode 100644 index 000000000..39f581597 Binary files /dev/null and b/src/client/resources/assets/textures/item/purple_wool.png differ diff --git a/src/client/resources/assets/textures/item/red_bed.png b/src/client/resources/assets/textures/item/red_bed.png new file mode 100644 index 000000000..29efdf8d9 Binary files /dev/null and b/src/client/resources/assets/textures/item/red_bed.png differ diff --git a/src/client/resources/assets/textures/item/red_dye.png b/src/client/resources/assets/textures/item/red_dye.png new file mode 100644 index 000000000..1156a4f72 Binary files /dev/null and b/src/client/resources/assets/textures/item/red_dye.png differ diff --git a/src/client/resources/assets/textures/item/red_flower.png b/src/client/resources/assets/textures/item/red_flower.png deleted file mode 100644 index 10cc6290b..000000000 Binary files a/src/client/resources/assets/textures/item/red_flower.png and /dev/null differ diff --git a/src/client/resources/assets/textures/item/red_tulip.png b/src/client/resources/assets/textures/item/red_tulip.png new file mode 100644 index 000000000..17b0b1f6f Binary files /dev/null and b/src/client/resources/assets/textures/item/red_tulip.png differ diff --git a/src/client/resources/assets/textures/item/red_wool.png b/src/client/resources/assets/textures/item/red_wool.png index fb9cf26c5..e951f871f 100644 Binary files a/src/client/resources/assets/textures/item/red_wool.png and b/src/client/resources/assets/textures/item/red_wool.png differ diff --git a/src/client/resources/assets/textures/item/rose.png b/src/client/resources/assets/textures/item/rose.png new file mode 100644 index 000000000..ebb5bd99e Binary files /dev/null and b/src/client/resources/assets/textures/item/rose.png differ diff --git a/src/client/resources/assets/textures/item/sunflower.png b/src/client/resources/assets/textures/item/sunflower.png new file mode 100644 index 000000000..c020c15dc Binary files /dev/null and b/src/client/resources/assets/textures/item/sunflower.png differ diff --git a/src/client/resources/assets/textures/item/violet.png b/src/client/resources/assets/textures/item/violet.png new file mode 100644 index 000000000..f94b60344 Binary files /dev/null and b/src/client/resources/assets/textures/item/violet.png differ diff --git a/src/client/resources/assets/textures/item/white_bed.png b/src/client/resources/assets/textures/item/white_bed.png new file mode 100644 index 000000000..2c13b83dc Binary files /dev/null and b/src/client/resources/assets/textures/item/white_bed.png differ diff --git a/src/client/resources/assets/textures/item/white_dye.png b/src/client/resources/assets/textures/item/white_dye.png new file mode 100644 index 000000000..e4e84bab0 Binary files /dev/null and b/src/client/resources/assets/textures/item/white_dye.png differ diff --git a/src/client/resources/assets/textures/item/white_flower.png b/src/client/resources/assets/textures/item/white_flower.png deleted file mode 100644 index b865d1e3a..000000000 Binary files a/src/client/resources/assets/textures/item/white_flower.png and /dev/null differ diff --git a/src/client/resources/assets/textures/item/white_lily.png b/src/client/resources/assets/textures/item/white_lily.png new file mode 100644 index 000000000..ada7dd66d Binary files /dev/null and b/src/client/resources/assets/textures/item/white_lily.png differ diff --git a/src/client/resources/assets/textures/item/white_tulip.png b/src/client/resources/assets/textures/item/white_tulip.png new file mode 100644 index 000000000..0cddbf24e Binary files /dev/null and b/src/client/resources/assets/textures/item/white_tulip.png differ diff --git a/src/client/resources/assets/textures/item/white_wool.png b/src/client/resources/assets/textures/item/white_wool.png new file mode 100644 index 000000000..402e5293c Binary files /dev/null and b/src/client/resources/assets/textures/item/white_wool.png differ diff --git a/src/client/resources/assets/textures/item/wool.png b/src/client/resources/assets/textures/item/wool.png deleted file mode 100644 index f1f78c58b..000000000 Binary files a/src/client/resources/assets/textures/item/wool.png and /dev/null differ diff --git a/src/client/resources/assets/textures/item/yellow_bed.png b/src/client/resources/assets/textures/item/yellow_bed.png new file mode 100644 index 000000000..b4a36936e Binary files /dev/null and b/src/client/resources/assets/textures/item/yellow_bed.png differ diff --git a/src/client/resources/assets/textures/item/yellow_dye.png b/src/client/resources/assets/textures/item/yellow_dye.png new file mode 100644 index 000000000..715662753 Binary files /dev/null and b/src/client/resources/assets/textures/item/yellow_dye.png differ diff --git a/src/client/resources/assets/textures/item/yellow_wool.png b/src/client/resources/assets/textures/item/yellow_wool.png index 1c68e284c..9190b4c5f 100644 Binary files a/src/client/resources/assets/textures/item/yellow_wool.png and b/src/client/resources/assets/textures/item/yellow_wool.png differ diff --git a/src/client/resources/assets/textures/tile/allium.png b/src/client/resources/assets/textures/tile/allium.png new file mode 100644 index 000000000..ecdb27de7 Binary files /dev/null and b/src/client/resources/assets/textures/tile/allium.png differ diff --git a/src/client/resources/assets/textures/tile/black_wool.png b/src/client/resources/assets/textures/tile/black_wool.png index 1c56b01b6..7d126d553 100644 Binary files a/src/client/resources/assets/textures/tile/black_wool.png and b/src/client/resources/assets/textures/tile/black_wool.png differ diff --git a/src/client/resources/assets/textures/tile/blue_orchid.png b/src/client/resources/assets/textures/tile/blue_orchid.png new file mode 100644 index 000000000..21c3f8142 Binary files /dev/null and b/src/client/resources/assets/textures/tile/blue_orchid.png differ diff --git a/src/client/resources/assets/textures/tile/blue_wool.png b/src/client/resources/assets/textures/tile/blue_wool.png index 51eb7ec89..87a93c3c9 100644 Binary files a/src/client/resources/assets/textures/tile/blue_wool.png and b/src/client/resources/assets/textures/tile/blue_wool.png differ diff --git a/src/client/resources/assets/textures/tile/brown_wool.png b/src/client/resources/assets/textures/tile/brown_wool.png new file mode 100644 index 000000000..10f3a6910 Binary files /dev/null and b/src/client/resources/assets/textures/tile/brown_wool.png differ diff --git a/src/client/resources/assets/textures/tile/cornflower.png b/src/client/resources/assets/textures/tile/cornflower.png new file mode 100644 index 000000000..905b7f112 Binary files /dev/null and b/src/client/resources/assets/textures/tile/cornflower.png differ diff --git a/src/client/resources/assets/textures/tile/cyan_wool.png b/src/client/resources/assets/textures/tile/cyan_wool.png new file mode 100644 index 000000000..54cea062d Binary files /dev/null and b/src/client/resources/assets/textures/tile/cyan_wool.png differ diff --git a/src/client/resources/assets/textures/tile/dandelion.png b/src/client/resources/assets/textures/tile/dandelion.png new file mode 100644 index 000000000..b4f2a5b94 Binary files /dev/null and b/src/client/resources/assets/textures/tile/dandelion.png differ diff --git a/src/client/resources/assets/textures/tile/gray_wool.png b/src/client/resources/assets/textures/tile/gray_wool.png new file mode 100644 index 000000000..06e3da118 Binary files /dev/null and b/src/client/resources/assets/textures/tile/gray_wool.png differ diff --git a/src/client/resources/assets/textures/tile/green_wool.png b/src/client/resources/assets/textures/tile/green_wool.png index 1f448ed38..928ebdc9c 100644 Binary files a/src/client/resources/assets/textures/tile/green_wool.png and b/src/client/resources/assets/textures/tile/green_wool.png differ diff --git a/src/client/resources/assets/textures/tile/hydrangea.png b/src/client/resources/assets/textures/tile/hydrangea.png new file mode 100644 index 000000000..aa766c1fd Binary files /dev/null and b/src/client/resources/assets/textures/tile/hydrangea.png differ diff --git a/src/client/resources/assets/textures/tile/iris.png b/src/client/resources/assets/textures/tile/iris.png new file mode 100644 index 000000000..f1d9d1d01 Binary files /dev/null and b/src/client/resources/assets/textures/tile/iris.png differ diff --git a/src/client/resources/assets/textures/tile/light_blue_wool.png b/src/client/resources/assets/textures/tile/light_blue_wool.png new file mode 100644 index 000000000..af710f4ac Binary files /dev/null and b/src/client/resources/assets/textures/tile/light_blue_wool.png differ diff --git a/src/client/resources/assets/textures/tile/light_gray_wool.png b/src/client/resources/assets/textures/tile/light_gray_wool.png new file mode 100644 index 000000000..37b2a4720 Binary files /dev/null and b/src/client/resources/assets/textures/tile/light_gray_wool.png differ diff --git a/src/client/resources/assets/textures/tile/lime_wool.png b/src/client/resources/assets/textures/tile/lime_wool.png new file mode 100644 index 000000000..c62c69bf8 Binary files /dev/null and b/src/client/resources/assets/textures/tile/lime_wool.png differ diff --git a/src/client/resources/assets/textures/tile/magenta_wool.png b/src/client/resources/assets/textures/tile/magenta_wool.png new file mode 100644 index 000000000..9f3037c38 Binary files /dev/null and b/src/client/resources/assets/textures/tile/magenta_wool.png differ diff --git a/src/client/resources/assets/textures/tile/orange_tulip.png b/src/client/resources/assets/textures/tile/orange_tulip.png new file mode 100644 index 000000000..6cffdcecf Binary files /dev/null and b/src/client/resources/assets/textures/tile/orange_tulip.png differ diff --git a/src/client/resources/assets/textures/tile/orange_wool.png b/src/client/resources/assets/textures/tile/orange_wool.png new file mode 100644 index 000000000..a6a9e6d68 Binary files /dev/null and b/src/client/resources/assets/textures/tile/orange_wool.png differ diff --git a/src/client/resources/assets/textures/tile/oxeye_daisy.png b/src/client/resources/assets/textures/tile/oxeye_daisy.png new file mode 100644 index 000000000..f6b3b4efb Binary files /dev/null and b/src/client/resources/assets/textures/tile/oxeye_daisy.png differ diff --git a/src/client/resources/assets/textures/tile/peony.png b/src/client/resources/assets/textures/tile/peony.png new file mode 100644 index 000000000..0e1296d5d Binary files /dev/null and b/src/client/resources/assets/textures/tile/peony.png differ diff --git a/src/client/resources/assets/textures/tile/periwinkle.png b/src/client/resources/assets/textures/tile/periwinkle.png new file mode 100644 index 000000000..0e5f7b3f6 Binary files /dev/null and b/src/client/resources/assets/textures/tile/periwinkle.png differ diff --git a/src/client/resources/assets/textures/tile/pink_lily.png b/src/client/resources/assets/textures/tile/pink_lily.png new file mode 100644 index 000000000..4d4a49c9c Binary files /dev/null and b/src/client/resources/assets/textures/tile/pink_lily.png differ diff --git a/src/client/resources/assets/textures/tile/pink_tulip.png b/src/client/resources/assets/textures/tile/pink_tulip.png new file mode 100644 index 000000000..4bf18aaae Binary files /dev/null and b/src/client/resources/assets/textures/tile/pink_tulip.png differ diff --git a/src/client/resources/assets/textures/tile/pink_wool.png b/src/client/resources/assets/textures/tile/pink_wool.png new file mode 100644 index 000000000..3a393eba3 Binary files /dev/null and b/src/client/resources/assets/textures/tile/pink_wool.png differ diff --git a/src/client/resources/assets/textures/tile/poppy.png b/src/client/resources/assets/textures/tile/poppy.png new file mode 100644 index 000000000..9ef5e54c4 Binary files /dev/null and b/src/client/resources/assets/textures/tile/poppy.png differ diff --git a/src/client/resources/assets/textures/tile/purple_wool.png b/src/client/resources/assets/textures/tile/purple_wool.png new file mode 100644 index 000000000..c0fd23277 Binary files /dev/null and b/src/client/resources/assets/textures/tile/purple_wool.png differ diff --git a/src/client/resources/assets/textures/tile/red_tulip.png b/src/client/resources/assets/textures/tile/red_tulip.png new file mode 100644 index 000000000..56f5ada82 Binary files /dev/null and b/src/client/resources/assets/textures/tile/red_tulip.png differ diff --git a/src/client/resources/assets/textures/tile/red_wool.png b/src/client/resources/assets/textures/tile/red_wool.png index 74e97051d..7c2417885 100644 Binary files a/src/client/resources/assets/textures/tile/red_wool.png and b/src/client/resources/assets/textures/tile/red_wool.png differ diff --git a/src/client/resources/assets/textures/tile/rose.png b/src/client/resources/assets/textures/tile/rose.png new file mode 100644 index 000000000..bb9527a21 Binary files /dev/null and b/src/client/resources/assets/textures/tile/rose.png differ diff --git a/src/client/resources/assets/textures/tile/sunflower.png b/src/client/resources/assets/textures/tile/sunflower.png new file mode 100644 index 000000000..6bf603cdd Binary files /dev/null and b/src/client/resources/assets/textures/tile/sunflower.png differ diff --git a/src/client/resources/assets/textures/tile/violet.png b/src/client/resources/assets/textures/tile/violet.png new file mode 100644 index 000000000..27e25caba Binary files /dev/null and b/src/client/resources/assets/textures/tile/violet.png differ diff --git a/src/client/resources/assets/textures/tile/white_lily.png b/src/client/resources/assets/textures/tile/white_lily.png new file mode 100644 index 000000000..7affae461 Binary files /dev/null and b/src/client/resources/assets/textures/tile/white_lily.png differ diff --git a/src/client/resources/assets/textures/tile/white_tulip.png b/src/client/resources/assets/textures/tile/white_tulip.png new file mode 100644 index 000000000..efca08795 Binary files /dev/null and b/src/client/resources/assets/textures/tile/white_tulip.png differ diff --git a/src/client/resources/assets/textures/tile/white_wool.png b/src/client/resources/assets/textures/tile/white_wool.png index 06a15a725..e87eab913 100644 Binary files a/src/client/resources/assets/textures/tile/white_wool.png and b/src/client/resources/assets/textures/tile/white_wool.png differ diff --git a/src/client/resources/assets/textures/tile/yellow_wool.png b/src/client/resources/assets/textures/tile/yellow_wool.png index aad70306b..2c5a90093 100644 Binary files a/src/client/resources/assets/textures/tile/yellow_wool.png and b/src/client/resources/assets/textures/tile/yellow_wool.png differ diff --git a/src/client/resources/resources/data/chestloot/dungeonchest.txt b/src/client/resources/resources/data/chestloot/dungeonchest.txt index 1f5769f9d..6d80237ef 100644 --- a/src/client/resources/resources/data/chestloot/dungeonchest.txt +++ b/src/client/resources/resources/data/chestloot/dungeonchest.txt @@ -1,7 +1,7 @@ 5,steak,6 5,cooked pork,6 4,wood,20 -4,wool,12 +4,white wool,12 2,coal,4 5,gem,7 5,gem,8 diff --git a/src/client/resources/resources/recipes.json b/src/client/resources/resources/recipes.json index f627cefbe..9b9ab13ab 100644 --- a/src/client/resources/resources/recipes.json +++ b/src/client/resources/resources/recipes.json @@ -1,4356 +1,3112 @@ { "minicraft.advancements.recipes.gem_fishing_rod": { - "requirements": [ - [ - "has_gem", - "has_string" - ] - ], + "requirements": [[ + "has_gem", + "has_string" + ]], "criteria": { "has_gem": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Gem" - ] - } - ] - } + "conditions": {"items": [{"items": ["Gem"]}]} }, "has_string": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "String" - ] - } - ] - } + "conditions": {"items": [{"items": ["String"]}]} } }, - "rewards": { - "recipes": { - "Gem Fishing Rod_1": [ - "String_3", - "Gem_10" - ] + "rewards": {"recipes": {"Gem Fishing Rod_1": [ + "String_3", + "Gem_10" + ]}} + }, + "minicraft.advancements.recipes.gray_bed_from_white_bed": { + "requirements": [[ + "has_gray_dye", + "has_white_bed" + ]], + "criteria": { + "has_gray_dye": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Gray Dye"]}]} + }, + "has_white_bed": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["White Bed"]}]} } - } + }, + "rewards": {"recipes": {"Gray Bed_1": [ + "Gray Dye_1", + "White Bed_1" + ]}} }, "minicraft.advancements.recipes.health_potion": { - "requirements": [ - [ - "has_leather_armor", - "has_gunpowder", - "has_awkward_potion" - ] - ], + "requirements": [[ + "has_leather_armor", + "has_gunpowder", + "has_awkward_potion" + ]], "criteria": { "has_leather_armor": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Leather Armor" - ] - } - ] - } + "conditions": {"items": [{"items": ["Leather Armor"]}]} }, "has_gunpowder": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Gunpowder" - ] - } - ] - } + "conditions": {"items": [{"items": ["Gunpowder"]}]} }, "has_awkward_potion": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Awkward Potion" - ] - } - ] - } + "conditions": {"items": [{"items": ["Awkward Potion"]}]} } }, - "rewards": { - "recipes": { - "Health Potion_1": [ - "Awkward Potion_1", - "Gunpowder_2", - "Leather Armor_1" - ] - } - } + "rewards": {"recipes": {"Health Potion_1": [ + "Awkward Potion_1", + "Gunpowder_2", + "Leather Armor_1" + ]}} }, "minicraft.advancements.recipes.green_wool": { - "requirements": [ - [ - "has_cactus", - "has_wool" - ] - ], + "requirements": [[ + "has_green_dye", + "has_white_wool" + ]], "criteria": { - "has_cactus": { + "has_green_dye": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Cactus" - ] - } - ] - } - }, - "has_wool": { - "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Wool" - ] - } - ] - } + "conditions": {"items": [{"items": ["Green Dye"]}]} + }, + "has_white_wool": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["White Wool"]}]} } }, - "rewards": { - "recipes": { - "Green Wool_1": [ - "Cactus_1", - "Wool_1" - ] - } - } + "rewards": {"recipes": {"Green Wool_1": [ + "Green Dye_1", + "White Wool_1" + ]}} }, "minicraft.advancements.recipes.obsidian_brick": { - "requirements": [ - [ - "has_raw_obsidian" - ] - ], + "requirements": [["has_raw_obsidian"]], + "criteria": {"has_raw_obsidian": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Raw Obsidian"]}]} + }}, + "rewards": {"recipes": {"Obsidian Brick_1": ["Raw Obsidian_2"]}} + }, + "minicraft.advancements.recipes.magenta_dye_from_purple_and_pink": { + "requirements": [[ + "has_pink_dye", + "has_purple_dye" + ]], "criteria": { - "has_raw_obsidian": { - "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Raw Obsidian" - ] - } - ] - } + "has_pink_dye": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Pink Dye"]}]} + }, + "has_purple_dye": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Purple Dye"]}]} } }, - "rewards": { - "recipes": { - "Obsidian Brick_1": [ - "Raw Obsidian_2" - ] - } - } + "rewards": {"recipes": {"Magenta Dye_2": [ + "Pink Dye_1", + "Purple Dye_1" + ]}} + }, + "minicraft.advancements.recipes.light_gray_dye_from_oxeye_daisy": { + "requirements": [["has_oxeye_daisy"]], + "criteria": {"has_oxeye_daisy": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Oxeye Daisy"]}]} + }}, + "rewards": {"recipes": {"Light Gray Dye_1": ["Oxeye Daisy_1"]}} }, "minicraft.advancements.recipes.plank": { - "requirements": [ - [ - "has_wood" - ] - ], + "requirements": [["has_wood"]], + "criteria": {"has_wood": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Wood"]}]} + }}, + "rewards": {"recipes": {"Plank_2": ["Wood_1"]}} + }, + "minicraft.advancements.recipes.red_bed_from_white_bed": { + "requirements": [[ + "has_red_dye", + "has_white_bed" + ]], "criteria": { - "has_wood": { + "has_red_dye": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Red Dye"]}]} + }, + "has_white_bed": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Wood" - ] - } - ] - } + "conditions": {"items": [{"items": ["White Bed"]}]} } }, - "rewards": { - "recipes": { - "Plank_2": [ - "Wood_1" - ] - } - } + "rewards": {"recipes": {"Red Bed_1": [ + "Red Dye_1", + "White Bed_1" + ]}} }, - "minicraft.advancements.recipes.leather_armor": { - "requirements": [ - [ - "has_leather" - ] - ], + "minicraft.advancements.recipes.purple_wool": { + "requirements": [[ + "has_white_wool", + "has_purple_dye" + ]], "criteria": { - "has_leather": { - "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Leather" - ] - } - ] - } + "has_white_wool": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["White Wool"]}]} + }, + "has_purple_dye": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Purple Dye"]}]} } }, - "rewards": { - "recipes": { - "Leather Armor_1": [ - "Leather_10" - ] - } - } + "rewards": {"recipes": {"Purple Wool_1": [ + "Purple Dye_1", + "White Wool_1" + ]}} + }, + "minicraft.advancements.recipes.black_dye": { + "requirements": [["has_coal"]], + "criteria": {"has_coal": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Coal"]}]} + }}, + "rewards": {"recipes": {"Black Dye_1": ["Coal_1"]}} + }, + "minicraft.advancements.recipes.leather_armor": { + "requirements": [["has_leather"]], + "criteria": {"has_leather": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Leather"]}]} + }}, + "rewards": {"recipes": {"Leather Armor_1": ["Leather_10"]}} }, "minicraft.advancements.recipes.lava_potion": { - "requirements": [ - [ - "has_awkward_potion", - "has_lava_bucket" - ] - ], + "requirements": [[ + "has_awkward_potion", + "has_lava_bucket" + ]], "criteria": { "has_awkward_potion": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Awkward Potion" - ] - } - ] - } + "conditions": {"items": [{"items": ["Awkward Potion"]}]} }, "has_lava_bucket": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Lava Bucket" - ] - } - ] - } + "conditions": {"items": [{"items": ["Lava Bucket"]}]} } }, - "rewards": { - "recipes": { - "Lava Potion_1": [ - "Awkward Potion_1", - "Lava Bucket_1" - ] - } - } + "rewards": {"recipes": {"Lava Potion_1": [ + "Awkward Potion_1", + "Lava Bucket_1" + ]}} }, "minicraft.advancements.recipes.iron_axe": { - "requirements": [ - [ - "has_wood", - "has_iron" - ] - ], + "requirements": [[ + "has_wood", + "has_iron" + ]], "criteria": { "has_wood": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Wood" - ] - } - ] - } + "conditions": {"items": [{"items": ["Wood"]}]} }, "has_iron": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Iron" - ] - } - ] - } + "conditions": {"items": [{"items": ["Iron"]}]} } }, - "rewards": { - "recipes": { - "Iron Axe_1": [ - "Wood_5", - "Iron_5" - ] - } - } + "rewards": {"recipes": {"Iron Axe_1": [ + "Wood_5", + "Iron_5" + ]}} }, "minicraft.advancements.recipes.black_wool": { - "requirements": [ - [ - "has_coal", - "has_wool" - ] - ], + "requirements": [[ + "has_white_wool", + "has_black_dye" + ]], "criteria": { - "has_coal": { + "has_white_wool": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["White Wool"]}]} + }, + "has_black_dye": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Coal" - ] - } - ] - } - }, - "has_wool": { - "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Wool" - ] - } - ] - } + "conditions": {"items": [{"items": ["Black Dye"]}]} } }, - "rewards": { - "recipes": { - "Black Wool_1": [ - "Coal_1", - "Wool_1" - ] + "rewards": {"recipes": {"Black Wool_1": [ + "Black Dye_1", + "White Wool_1" + ]}} + }, + "minicraft.advancements.recipes.light_gray_dye": { + "requirements": [[ + "has_white_dye", + "has_black_dye" + ]], + "criteria": { + "has_white_dye": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["White Dye"]}]} + }, + "has_black_dye": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Black Dye"]}]} } - } + }, + "rewards": {"recipes": {"Light Gray Dye_3": [ + "White Dye_2", + "Black Dye_1" + ]}} + }, + "minicraft.advancements.recipes.white_wool": { + "requirements": [["has_string"]], + "criteria": {"has_string": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["String"]}]} + }}, + "rewards": {"recipes": {"White Wool_1": ["String_3"]}} + }, + "minicraft.advancements.recipes.pink_dye_from_pink_lily": { + "requirements": [["has_pink_lily"]], + "criteria": {"has_pink_lily": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Pink Lily"]}]} + }}, + "rewards": {"recipes": {"Pink Dye_1": ["Pink Lily_1"]}} }, "minicraft.advancements.recipes.cooked_pork": { - "requirements": [ - [ - "has_coal", - "has_raw_pork" - ] - ], + "requirements": [[ + "has_coal", + "has_raw_pork" + ]], "criteria": { "has_coal": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Coal" - ] - } - ] - } + "conditions": {"items": [{"items": ["Coal"]}]} }, "has_raw_pork": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Raw Pork" - ] - } - ] - } + "conditions": {"items": [{"items": ["Raw Pork"]}]} } }, - "rewards": { - "recipes": { - "Cooked Pork_1": [ - "Coal_1", - "Raw Pork_1" - ] - } - } + "rewards": {"recipes": {"Cooked Pork_1": [ + "Coal_1", + "Raw Pork_1" + ]}} }, - "minicraft.advancements.recipes.wooden_hoe": { - "requirements": [ - [ - "has_wood" - ] - ], + "minicraft.advancements.recipes.light_gray_dye_from_gray_white_dye": { + "requirements": [[ + "has_gray_dye", + "has_white_dye" + ]], "criteria": { - "has_wood": { + "has_gray_dye": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Gray Dye"]}]} + }, + "has_white_dye": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Wood" - ] - } - ] - } + "conditions": {"items": [{"items": ["White Dye"]}]} } }, - "rewards": { - "recipes": { - "Wood Hoe_1": [ - "Wood_5" - ] + "rewards": {"recipes": {"Light Gray Dye_2": [ + "Gray Dye_1", + "White Dye_1" + ]}} + }, + "minicraft.advancements.recipes.pink_bed_from_white_bed": { + "requirements": [[ + "has_pink_dye", + "has_white_bed" + ]], + "criteria": { + "has_pink_dye": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Pink Dye"]}]} + }, + "has_white_bed": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["White Bed"]}]} } - } + }, + "rewards": {"recipes": {"Pink Bed_1": [ + "Pink Dye_1", + "White Bed_1" + ]}} + }, + "minicraft.advancements.recipes.wooden_hoe": { + "requirements": [["has_wood"]], + "criteria": {"has_wood": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Wood"]}]} + }}, + "rewards": {"recipes": {"Wood Hoe_1": ["Wood_5"]}} }, "minicraft.advancements.recipes.stone_sword": { - "requirements": [ - [ - "has_stone", - "has_wood" - ] - ], + "requirements": [[ + "has_stone", + "has_wood" + ]], "criteria": { "has_stone": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Stone" - ] - } - ] - } + "conditions": {"items": [{"items": ["Stone"]}]} }, "has_wood": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Wood" - ] - } - ] - } + "conditions": {"items": [{"items": ["Wood"]}]} } }, - "rewards": { - "recipes": { - "Rock Sword_1": [ - "Stone_5", - "Wood_5" - ] - } - } + "rewards": {"recipes": {"Rock Sword_1": [ + "Stone_5", + "Wood_5" + ]}} }, - "minicraft.advancements.recipes.snake_armor": { - "requirements": [ - [ - "has_scale" - ] - ], + "minicraft.advancements.recipes.brown_wool": { + "requirements": [[ + "has_white_wool", + "has_brown_dye" + ]], "criteria": { - "has_scale": { - "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Scale" - ] - } - ] - } + "has_white_wool": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["White Wool"]}]} + }, + "has_brown_dye": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Brown Dye"]}]} } }, - "rewards": { - "recipes": { - "Snake Armor_1": [ - "Scale_15" - ] - } - } + "rewards": {"recipes": {"Brown Wool_1": [ + "Brown Dye_1", + "White Wool_1" + ]}} + }, + "minicraft.advancements.recipes.snake_armor": { + "requirements": [["has_scale"]], + "criteria": {"has_scale": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Scale"]}]} + }}, + "rewards": {"recipes": {"Snake Armor_1": ["Scale_15"]}} }, "minicraft.advancements.recipes.shears": { - "requirements": [ - [ - "has_iron" - ] - ], - "criteria": { - "has_iron": { - "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Iron" - ] - } - ] - } - } - }, - "rewards": { - "recipes": { - "Shears_1": [ - "Iron_4" - ] - } - } + "requirements": [["has_iron"]], + "criteria": {"has_iron": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Iron"]}]} + }}, + "rewards": {"recipes": {"Shears_1": ["Iron_4"]}} }, "minicraft.advancements.recipes.wood_door": { - "requirements": [ - [ - "has_plank" - ] - ], - "criteria": { - "has_plank": { - "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Plank" - ] - } - ] - } - } - }, - "rewards": { - "recipes": { - "Wood Door_1": [ - "Plank_5" - ] - } - } + "requirements": [["has_plank"]], + "criteria": {"has_plank": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Plank"]}]} + }}, + "rewards": {"recipes": {"Wood Door_1": ["Plank_5"]}} }, "minicraft.advancements.recipes.stone_fence": { - "requirements": [ - [ - "has_stone_brick" - ] - ], - "criteria": { - "has_stone_brick": { - "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Stone Brick" - ] - } - ] - } - } - }, - "rewards": { - "recipes": { - "Stone Fence_1": [ - "Stone Brick_3" - ] - } - } + "requirements": [["has_stone_brick"]], + "criteria": {"has_stone_brick": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Stone Brick"]}]} + }}, + "rewards": {"recipes": {"Stone Fence_1": ["Stone Brick_3"]}} }, "minicraft.advancements.recipes.green_clothes": { - "requirements": [ - [ - "has_cactus", - "has_cloth" - ] - ], + "requirements": [[ + "has_green_dye", + "has_cloth" + ]], "criteria": { - "has_cactus": { + "has_green_dye": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Cactus" - ] - } - ] - } + "conditions": {"items": [{"items": ["Green Dye"]}]} }, "has_cloth": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Cloth" - ] - } - ] - } + "conditions": {"items": [{"items": ["Cloth"]}]} } }, - "rewards": { - "recipes": { - "Green Clothes_1": [ - "Cactus_1", - "Cloth_5" - ] - } - } + "rewards": {"recipes": {"Green Clothes_1": [ + "Cloth_5", + "Green Dye_1" + ]}} }, "minicraft.advancements.recipes.red_wool": { - "requirements": [ - [ - "has_rose", - "has_wool" - ] - ], + "requirements": [[ + "has_white_wool", + "has_red_dye" + ]], "criteria": { - "has_rose": { - "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Rose" - ] - } - ] - } - }, - "has_wool": { - "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Wool" - ] - } - ] - } + "has_white_wool": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["White Wool"]}]} + }, + "has_red_dye": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Red Dye"]}]} } }, - "rewards": { - "recipes": { - "Red Wool_1": [ - "Rose_1", - "Wool_1" - ] - } - } + "rewards": {"recipes": {"Red Wool_1": [ + "Red Dye_1", + "White Wool_1" + ]}} }, "minicraft.advancements.recipes.stone_bow": { - "requirements": [ - [ - "has_stone", - "has_wood", - "has_string" - ] - ], + "requirements": [[ + "has_stone", + "has_wood", + "has_string" + ]], "criteria": { "has_stone": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Stone" - ] - } - ] - } + "conditions": {"items": [{"items": ["Stone"]}]} }, "has_wood": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Wood" - ] - } - ] - } + "conditions": {"items": [{"items": ["Wood"]}]} }, "has_string": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "String" - ] - } - ] - } + "conditions": {"items": [{"items": ["String"]}]} } }, - "rewards": { - "recipes": { - "Rock Bow_1": [ - "String_2", - "Stone_5", - "Wood_5" - ] - } - } + "rewards": {"recipes": {"Rock Bow_1": [ + "String_2", + "Stone_5", + "Wood_5" + ]}} }, "minicraft.advancements.recipes.gem_bow": { - "requirements": [ - [ - "has_wood", - "has_gem", - "has_string" - ] - ], + "requirements": [[ + "has_wood", + "has_gem", + "has_string" + ]], "criteria": { "has_wood": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Wood" - ] - } - ] - } + "conditions": {"items": [{"items": ["Wood"]}]} }, "has_gem": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Gem" - ] - } - ] - } + "conditions": {"items": [{"items": ["Gem"]}]} }, "has_string": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "String" - ] - } - ] - } + "conditions": {"items": [{"items": ["String"]}]} } }, - "rewards": { - "recipes": { - "Gem Bow_1": [ - "String_2", - "Wood_5", - "Gem_50" - ] - } - } + "rewards": {"recipes": {"Gem Bow_1": [ + "String_2", + "Wood_5", + "Gem_50" + ]}} }, - "minicraft.advancements.recipes.wooden_axe": { - "requirements": [ - [ - "has_wood" - ] - ], + "minicraft.advancements.recipes.cyan_dye": { + "requirements": [[ + "has_green_dye", + "has_blue_dye" + ]], "criteria": { - "has_wood": { + "has_green_dye": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Wood" - ] - } - ] - } + "conditions": {"items": [{"items": ["Green Dye"]}]} + }, + "has_blue_dye": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Blue Dye"]}]} } }, - "rewards": { - "recipes": { - "Wood Axe_1": [ - "Wood_5" - ] - } - } + "rewards": {"recipes": {"Cyan Dye_2": [ + "Blue Dye_1", + "Green Dye_1" + ]}} }, - "minicraft.advancements.recipes.stone_brick": { - "requirements": [ - [ - "has_stone" - ] - ], + "minicraft.advancements.recipes.dye_vat": { + "requirements": [[ + "has_stone", + "has_iron" + ]], "criteria": { "has_stone": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Stone" - ] - } - ] - } + "conditions": {"items": [{"items": ["Stone"]}]} + }, + "has_iron": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Iron"]}]} } }, - "rewards": { - "recipes": { - "Stone Brick_1": [ - "Stone_2" - ] - } - } + "rewards": {"recipes": {"Dye Vat_1": [ + "Stone_10", + "Iron_5" + ]}} }, - "minicraft.advancements.recipes.workbench": { - "requirements": [ - [ - "has_wood" - ] - ], + "minicraft.advancements.recipes.wooden_axe": { + "requirements": [["has_wood"]], + "criteria": {"has_wood": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Wood"]}]} + }}, + "rewards": {"recipes": {"Wood Axe_1": ["Wood_5"]}} + }, + "minicraft.advancements.recipes.magenta_bed": { + "requirements": [[ + "has_wood", + "has_magenta_wool" + ]], "criteria": { "has_wood": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Wood" - ] - } - ] - } + "conditions": {"items": [{"items": ["Wood"]}]} + }, + "has_magenta_wool": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Magenta Wool"]}]} } }, - "rewards": { - "recipes": { - "Workbench_1": [ - "Wood_10" - ] + "rewards": {"recipes": {"Magenta Bed_1": [ + "Wood_5", + "Magenta Wool_3" + ]}} + }, + "minicraft.advancements.recipes.pink_dye_from_peony": { + "requirements": [["has_peony"]], + "criteria": {"has_peony": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Peony"]}]} + }}, + "rewards": {"recipes": {"Pink Dye_1": ["Peony_1"]}} + }, + "minicraft.advancements.recipes.stone_brick": { + "requirements": [["has_stone"]], + "criteria": {"has_stone": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Stone"]}]} + }}, + "rewards": {"recipes": {"Stone Brick_1": ["Stone_2"]}} + }, + "minicraft.advancements.recipes.pink_dye": { + "requirements": [[ + "has_white_dye", + "has_red_dye" + ]], + "criteria": { + "has_white_dye": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["White Dye"]}]} + }, + "has_red_dye": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Red Dye"]}]} } - } + }, + "rewards": {"recipes": {"Pink Dye_2": [ + "White Dye_1", + "Red Dye_1" + ]}} + }, + "minicraft.advancements.recipes.workbench": { + "requirements": [["has_wood"]], + "criteria": {"has_wood": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Wood"]}]} + }}, + "rewards": {"recipes": {"Workbench_1": ["Wood_10"]}} }, "minicraft.advancements.recipes.lantern": { - "requirements": [ - [ - "has_glass", - "has_wood", - "has_slime" - ] - ], + "requirements": [[ + "has_glass", + "has_wood", + "has_slime" + ]], "criteria": { "has_glass": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Glass" - ] - } - ] - } + "conditions": {"items": [{"items": ["Glass"]}]} }, "has_wood": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Wood" - ] - } - ] - } + "conditions": {"items": [{"items": ["Wood"]}]} }, "has_slime": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Slime" - ] - } - ] - } + "conditions": {"items": [{"items": ["Slime"]}]} } }, - "rewards": { - "recipes": { - "Lantern_1": [ - "Glass_3", - "Slime_4", - "Wood_8" - ] - } - } + "rewards": {"recipes": {"Lantern_1": [ + "Glass_3", + "Slime_4", + "Wood_8" + ]}} }, - "minicraft.advancements.recipes.gold_armor": { - "requirements": [ - [ - "has_gold" - ] - ], + "minicraft.advancements.recipes.green_dye": { + "requirements": [["has_cactus"]], + "criteria": {"has_cactus": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Cactus"]}]} + }}, + "rewards": {"recipes": {"Green Dye_1": ["Cactus_1"]}} + }, + "minicraft.advancements.recipes.orange_dye": { + "requirements": [[ + "has_red_dye", + "has_yellow_dye" + ]], "criteria": { - "has_gold": { + "has_red_dye": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Red Dye"]}]} + }, + "has_yellow_dye": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Gold" - ] - } - ] - } + "conditions": {"items": [{"items": ["Yellow Dye"]}]} } }, - "rewards": { - "recipes": { - "Gold Armor_1": [ - "Gold_10" - ] - } - } + "rewards": {"recipes": {"Orange Dye_2": [ + "Yellow Dye_1", + "Red Dye_1" + ]}} }, - "minicraft.advancements.recipes.yellow_clothes": { - "requirements": [ - [ - "has_cloth", - "has_flower" - ] - ], + "minicraft.advancements.recipes.magenta_bed_from_white_bed": { + "requirements": [[ + "has_white_bed", + "has_magenta_dye" + ]], "criteria": { - "has_cloth": { + "has_white_bed": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Cloth" - ] - } - ] - } - }, - "has_flower": { - "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Flower" - ] - } - ] - } + "conditions": {"items": [{"items": ["White Bed"]}]} + }, + "has_magenta_dye": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Magenta Dye"]}]} } }, - "rewards": { - "recipes": { - "Yellow Clothes_1": [ - "Flower_1", - "Cloth_5" - ] - } - } + "rewards": {"recipes": {"Magenta Bed_1": [ + "Magenta Dye_1", + "White Bed_1" + ]}} }, - "minicraft.advancements.recipes.glass_bottle": { - "requirements": [ - [ - "has_glass" - ] - ], + "minicraft.advancements.recipes.gold_armor": { + "requirements": [["has_gold"]], + "criteria": {"has_gold": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Gold"]}]} + }}, + "rewards": {"recipes": {"Gold Armor_1": ["Gold_10"]}} + }, + "minicraft.advancements.recipes.yellow_clothes": { + "requirements": [[ + "has_cloth", + "has_yellow_dye" + ]], "criteria": { - "has_glass": { + "has_cloth": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Cloth"]}]} + }, + "has_yellow_dye": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Glass" - ] - } - ] - } + "conditions": {"items": [{"items": ["Yellow Dye"]}]} } }, - "rewards": { - "recipes": { - "Glass Bottle_1": [ - "Glass_3" - ] - } - } + "rewards": {"recipes": {"Yellow Clothes_1": [ + "Cloth_5", + "Yellow Dye_1" + ]}} + }, + "minicraft.advancements.recipes.glass_bottle": { + "requirements": [["has_glass"]], + "criteria": {"has_glass": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Glass"]}]} + }}, + "rewards": {"recipes": {"Glass Bottle_1": ["Glass_3"]}} }, "minicraft.advancements.recipes.gem_claymore": { - "requirements": [ - [ - "has_shard", - "has_gem_sword" - ] - ], + "requirements": [[ + "has_shard", + "has_gem_sword" + ]], "criteria": { "has_shard": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Shard" - ] - } - ] - } + "conditions": {"items": [{"items": ["Shard"]}]} }, "has_gem_sword": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Gem Sword" - ] - } - ] - } + "conditions": {"items": [{"items": ["Gem Sword"]}]} } }, - "rewards": { - "recipes": { - "Gem Claymore_1": [ - "Gem Sword_1", - "Shard_15" - ] - } - } + "rewards": {"recipes": {"Gem Claymore_1": [ + "Gem Sword_1", + "Shard_15" + ]}} }, - "minicraft.advancements.recipes.wood_fence": { - "requirements": [ - [ - "has_plank" - ] - ], + "minicraft.advancements.recipes.lime_wool": { + "requirements": [[ + "has_lime_dye", + "has_white_wool" + ]], "criteria": { - "has_plank": { - "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Plank" - ] - } - ] - } + "has_lime_dye": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Lime Dye"]}]} + }, + "has_white_wool": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["White Wool"]}]} } }, - "rewards": { - "recipes": { - "Wood Fence_1": [ - "Plank_3" - ] - } - } + "rewards": {"recipes": {"Lime Wool_1": [ + "Lime Dye_1", + "White Wool_1" + ]}} + }, + "minicraft.advancements.recipes.wood_fence": { + "requirements": [["has_plank"]], + "criteria": {"has_plank": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Plank"]}]} + }}, + "rewards": {"recipes": {"Wood Fence_1": ["Plank_3"]}} + }, + "minicraft.advancements.recipes.light_gray_dye_from_white_tulip": { + "requirements": [["has_white_tulip"]], + "criteria": {"has_white_tulip": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["White Tulip"]}]} + }}, + "rewards": {"recipes": {"Light Gray Dye_1": ["White Tulip_1"]}} + }, + "minicraft.advancements.recipes.yellow_dye_from_dandelion": { + "requirements": [["has_dandelion"]], + "criteria": {"has_dandelion": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Dandelion"]}]} + }}, + "rewards": {"recipes": {"Yellow Dye_1": ["Dandelion_1"]}} }, "minicraft.advancements.recipes.wood_fishing_rod": { - "requirements": [ - [ - "has_wood", - "has_string" - ] - ], + "requirements": [[ + "has_wood", + "has_string" + ]], "criteria": { "has_wood": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Wood" - ] - } - ] - } + "conditions": {"items": [{"items": ["Wood"]}]} }, "has_string": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "String" - ] - } - ] - } + "conditions": {"items": [{"items": ["String"]}]} } }, - "rewards": { - "recipes": { - "Wood Fishing Rod_1": [ - "String_3", - "Wood_10" - ] + "rewards": {"recipes": {"Wood Fishing Rod_1": [ + "String_3", + "Wood_10" + ]}} + }, + "minicraft.advancements.recipes.red_dye_from_rose": { + "requirements": [["has_rose"]], + "criteria": {"has_rose": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Rose"]}]} + }}, + "rewards": {"recipes": {"Red Dye_1": ["Rose_1"]}} + }, + "minicraft.advancements.recipes.pink_bed": { + "requirements": [[ + "has_pink_wool", + "has_wood" + ]], + "criteria": { + "has_pink_wool": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Pink Wool"]}]} + }, + "has_wood": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Wood"]}]} } - } + }, + "rewards": {"recipes": {"Pink Bed_1": [ + "Wood_5", + "Pink Wool_3" + ]}} }, "minicraft.advancements.recipes.gold_fishing_rod": { - "requirements": [ - [ - "has_string", - "has_gold" - ] - ], + "requirements": [[ + "has_string", + "has_gold" + ]], "criteria": { "has_string": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "String" - ] - } - ] - } + "conditions": {"items": [{"items": ["String"]}]} }, "has_gold": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Gold" - ] - } - ] - } + "conditions": {"items": [{"items": ["Gold"]}]} } }, - "rewards": { - "recipes": { - "Gold Fishing Rod_1": [ - "Gold_10", - "String_3" - ] - } - } + "rewards": {"recipes": {"Gold Fishing Rod_1": [ + "Gold_10", + "String_3" + ]}} + }, + "minicraft.advancements.recipes.blue_dye": { + "requirements": [["has_lapis"]], + "criteria": {"has_lapis": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Lapis"]}]} + }}, + "rewards": {"recipes": {"Blue Dye_1": ["Lapis_1"]}} }, "minicraft.advancements.recipes.purple_clothes": { - "requirements": [ - [ - "has_rose", - "has_lapis", - "has_cloth" - ] - ], + "requirements": [[ + "has_cloth", + "has_purple_dye" + ]], "criteria": { - "has_rose": { - "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Rose" - ] - } - ] - } - }, - "has_lapis": { + "has_cloth": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Lapis" - ] - } - ] - } + "conditions": {"items": [{"items": ["Cloth"]}]} }, - "has_cloth": { + "has_purple_dye": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Cloth" - ] - } - ] - } + "conditions": {"items": [{"items": ["Purple Dye"]}]} } }, - "rewards": { - "recipes": { - "Purple Clothes_1": [ - "Lapis_1", - "Cloth_5", - "Rose_1" - ] - } - } + "rewards": {"recipes": {"Purple Clothes_1": [ + "Cloth_5", + "Purple Dye_1" + ]}} }, "minicraft.advancements.recipes.stone_pickaxe": { - "requirements": [ - [ - "has_stone", - "has_wood" - ] - ], + "requirements": [[ + "has_stone", + "has_wood" + ]], "criteria": { "has_stone": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Stone" - ] - } - ] - } + "conditions": {"items": [{"items": ["Stone"]}]} }, "has_wood": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Wood" - ] - } - ] - } + "conditions": {"items": [{"items": ["Wood"]}]} } }, - "rewards": { - "recipes": { - "Rock Pickaxe_1": [ - "Stone_5", - "Wood_5" - ] - } - } + "rewards": {"recipes": {"Rock Pickaxe_1": [ + "Stone_5", + "Wood_5" + ]}} }, - "minicraft.advancements.recipes.blue_clothes": { - "requirements": [ - [ - "has_lapis", - "has_cloth" - ] - ], + "minicraft.advancements.recipes.orange_bed": { + "requirements": [[ + "has_wood", + "has_orange_wool" + ]], "criteria": { - "has_lapis": { + "has_wood": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Lapis" - ] - } - ] - } + "conditions": {"items": [{"items": ["Wood"]}]} }, - "has_cloth": { + "has_orange_wool": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Cloth" - ] - } - ] - } + "conditions": {"items": [{"items": ["Orange Wool"]}]} } }, - "rewards": { - "recipes": { - "Blue Clothes_1": [ - "Lapis_1", - "Cloth_5" - ] - } - } + "rewards": {"recipes": {"Orange Bed_1": [ + "Wood_5", + "Orange Wool_3" + ]}} }, - "minicraft.advancements.recipes.watering_can": { - "requirements": [ - [ - "has_iron" - ] - ], + "minicraft.advancements.recipes.light_blue_dye_from_periwinkle": { + "requirements": [["has_periwinkle"]], + "criteria": {"has_periwinkle": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Periwinkle"]}]} + }}, + "rewards": {"recipes": {"Light Blue Dye_1": ["Periwinkle_1"]}} + }, + "minicraft.advancements.recipes.blue_clothes": { + "requirements": [[ + "has_cloth", + "has_blue_dye" + ]], "criteria": { - "has_iron": { + "has_cloth": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Iron" - ] - } - ] - } + "conditions": {"items": [{"items": ["Cloth"]}]} + }, + "has_blue_dye": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Blue Dye"]}]} } }, - "rewards": { - "recipes": { - "Watering Can_1": [ - "Iron_3" - ] - } - } + "rewards": {"recipes": {"Blue Clothes_1": [ + "Blue Dye_1", + "Cloth_5" + ]}} }, - "minicraft.advancements.recipes.gem_sword": { - "requirements": [ - [ - "has_wood", - "has_gem" - ] - ], + "minicraft.advancements.recipes.watering_can": { + "requirements": [["has_iron"]], + "criteria": {"has_iron": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Iron"]}]} + }}, + "rewards": {"recipes": {"Watering Can_1": ["Iron_3"]}} + }, + "minicraft.advancements.recipes.pink_wool": { + "requirements": [[ + "has_pink_dye", + "has_white_wool" + ]], + "criteria": { + "has_pink_dye": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Pink Dye"]}]} + }, + "has_white_wool": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["White Wool"]}]} + } + }, + "rewards": {"recipes": {"Pink Wool_1": [ + "Pink Dye_1", + "White Wool_1" + ]}} + }, + "minicraft.advancements.recipes.purple_dye_from_violet": { + "requirements": [["has_violet"]], + "criteria": {"has_violet": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Violet"]}]} + }}, + "rewards": {"recipes": {"Purple Dye_1": ["Violet_1"]}} + }, + "minicraft.advancements.recipes.blue_dye_from_iris": { + "requirements": [["has_iris"]], + "criteria": {"has_iris": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Iris"]}]} + }}, + "rewards": {"recipes": {"Blue Dye_1": ["Iris_1"]}} + }, + "minicraft.advancements.recipes.blue_dye_from_cornflower": { + "requirements": [["has_cornflower"]], + "criteria": {"has_cornflower": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Cornflower"]}]} + }}, + "rewards": {"recipes": {"Blue Dye_1": ["Cornflower_1"]}} + }, + "minicraft.advancements.recipes.blue_bed": { + "requirements": [[ + "has_wood", + "has_blue_wool" + ]], "criteria": { "has_wood": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Wood" - ] - } - ] - } + "conditions": {"items": [{"items": ["Wood"]}]} }, - "has_gem": { + "has_blue_wool": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Gem" - ] - } - ] - } + "conditions": {"items": [{"items": ["Blue Wool"]}]} } }, - "rewards": { - "recipes": { - "Gem Sword_1": [ - "Wood_5", - "Gem_50" - ] - } - } - }, - "minicraft.advancements.recipes.bed": { - "requirements": [ - [ - "has_wood", - "has_wool" - ] - ], + "rewards": {"recipes": {"Blue Bed_1": [ + "Wood_5", + "Blue Wool_3" + ]}} + }, + "minicraft.advancements.recipes.gem_sword": { + "requirements": [[ + "has_wood", + "has_gem" + ]], "criteria": { "has_wood": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Wood" - ] - } - ] - } - }, - "has_wool": { - "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Wool" - ] - } - ] - } + "conditions": {"items": [{"items": ["Wood"]}]} + }, + "has_gem": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Gem"]}]} } }, - "rewards": { - "recipes": { - "Bed_1": [ - "Wood_5", - "Wool_3" - ] - } - } + "rewards": {"recipes": {"Gem Sword_1": [ + "Wood_5", + "Gem_50" + ]}} }, "minicraft.advancements.recipes.swim_potion": { - "requirements": [ - [ - "has_raw_fish", - "has_awkward_potion" - ] - ], + "requirements": [[ + "has_raw_fish", + "has_awkward_potion" + ]], "criteria": { "has_raw_fish": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Raw Fish" - ] - } - ] - } + "conditions": {"items": [{"items": ["Raw Fish"]}]} }, "has_awkward_potion": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Awkward Potion" - ] - } - ] - } + "conditions": {"items": [{"items": ["Awkward Potion"]}]} } }, - "rewards": { - "recipes": { - "Swim Potion_1": [ - "Awkward Potion_1", - "Raw Fish_5" - ] + "rewards": {"recipes": {"Swim Potion_1": [ + "Awkward Potion_1", + "Raw Fish_5" + ]}} + }, + "minicraft.advancements.recipes.gray_wool": { + "requirements": [[ + "has_white_wool", + "has_gray_dye" + ]], + "criteria": { + "has_white_wool": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["White Wool"]}]} + }, + "has_gray_dye": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Gray Dye"]}]} } - } + }, + "rewards": {"recipes": {"Gray Wool_1": [ + "Gray Dye_1", + "White Wool_1" + ]}} }, "minicraft.advancements.recipes.steak": { - "requirements": [ - [ - "has_coal", - "has_raw_beef" - ] - ], + "requirements": [[ + "has_coal", + "has_raw_beef" + ]], "criteria": { "has_coal": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Coal" - ] - } - ] - } + "conditions": {"items": [{"items": ["Coal"]}]} }, "has_raw_beef": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Raw Beef" - ] - } - ] - } + "conditions": {"items": [{"items": ["Raw Beef"]}]} } }, - "rewards": { - "recipes": { - "Steak_1": [ - "Coal_1", - "Raw Beef_1" - ] - } - } + "rewards": {"recipes": {"Steak_1": [ + "Coal_1", + "Raw Beef_1" + ]}} }, "minicraft.advancements.recipes.gem_pickaxe": { - "requirements": [ - [ - "has_wood", - "has_gem" - ] - ], + "requirements": [[ + "has_wood", + "has_gem" + ]], "criteria": { "has_wood": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Wood" - ] - } - ] - } + "conditions": {"items": [{"items": ["Wood"]}]} }, "has_gem": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Gem" - ] - } - ] - } + "conditions": {"items": [{"items": ["Gem"]}]} } }, - "rewards": { - "recipes": { - "Gem Pickaxe_1": [ - "Wood_5", - "Gem_50" - ] - } - } + "rewards": {"recipes": {"Gem Pickaxe_1": [ + "Wood_5", + "Gem_50" + ]}} }, - "minicraft.advancements.recipes.obsidian_fence": { - "requirements": [ - [ - "has_obsidian_brick" - ] - ], + "minicraft.advancements.recipes.light_blue_dye": { + "requirements": [[ + "has_white_dye", + "has_blue_dye" + ]], "criteria": { - "has_obsidian_brick": { - "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Obsidian Brick" - ] - } - ] - } + "has_white_dye": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["White Dye"]}]} + }, + "has_blue_dye": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Blue Dye"]}]} } }, - "rewards": { - "recipes": { - "Obsidian Fence_1": [ - "Obsidian Brick_3" - ] - } - } + "rewards": {"recipes": {"Light Blue Dye_2": [ + "Blue Dye_1", + "White Dye_1" + ]}} + }, + "minicraft.advancements.recipes.obsidian_fence": { + "requirements": [["has_obsidian_brick"]], + "criteria": {"has_obsidian_brick": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Obsidian Brick"]}]} + }}, + "rewards": {"recipes": {"Obsidian Fence_1": ["Obsidian Brick_3"]}} }, "minicraft.advancements.recipes.iron_hoe": { - "requirements": [ - [ - "has_wood", - "has_iron" - ] - ], + "requirements": [[ + "has_wood", + "has_iron" + ]], "criteria": { "has_wood": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Wood" - ] - } - ] - } + "conditions": {"items": [{"items": ["Wood"]}]} }, "has_iron": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Iron" - ] - } - ] - } + "conditions": {"items": [{"items": ["Iron"]}]} } }, - "rewards": { - "recipes": { - "Iron Hoe_1": [ - "Wood_5", - "Iron_5" - ] - } - } + "rewards": {"recipes": {"Iron Hoe_1": [ + "Wood_5", + "Iron_5" + ]}} }, "minicraft.advancements.recipes.iron_claymore": { - "requirements": [ - [ - "has_shard", - "has_iron_sword" - ] - ], + "requirements": [[ + "has_shard", + "has_iron_sword" + ]], "criteria": { "has_shard": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Shard" - ] - } - ] - } + "conditions": {"items": [{"items": ["Shard"]}]} }, "has_iron_sword": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Iron Sword" - ] - } - ] - } + "conditions": {"items": [{"items": ["Iron Sword"]}]} } }, - "rewards": { - "recipes": { - "Iron Claymore_1": [ - "Iron Sword_1", - "Shard_15" - ] - } - } + "rewards": {"recipes": {"Iron Claymore_1": [ + "Iron Sword_1", + "Shard_15" + ]}} }, "minicraft.advancements.recipes.wooden_pickaxe": { - "requirements": [ - [ - "has_wood" - ] - ], - "criteria": { - "has_wood": { - "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Wood" - ] - } - ] - } - } - }, - "rewards": { - "recipes": { - "Wood Pickaxe_1": [ - "Wood_5" - ] - } - } + "requirements": [["has_wood"]], + "criteria": {"has_wood": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Wood"]}]} + }}, + "rewards": {"recipes": {"Wood Pickaxe_1": ["Wood_5"]}} }, "minicraft.advancements.recipes.stone_axe": { - "requirements": [ - [ - "has_stone", - "has_wood" - ] - ], + "requirements": [[ + "has_stone", + "has_wood" + ]], "criteria": { "has_stone": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Stone" - ] - } - ] - } + "conditions": {"items": [{"items": ["Stone"]}]} }, "has_wood": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Wood" - ] - } - ] - } + "conditions": {"items": [{"items": ["Wood"]}]} } }, - "rewards": { - "recipes": { - "Rock Axe_1": [ - "Stone_5", - "Wood_5" - ] - } - } + "rewards": {"recipes": {"Rock Axe_1": [ + "Stone_5", + "Wood_5" + ]}} }, "minicraft.advancements.recipes.orange_clothes": { - "requirements": [ - [ - "has_rose", - "has_cloth", - "has_flower" - ] - ], + "requirements": [[ + "has_cloth", + "has_orange_dye" + ]], "criteria": { - "has_rose": { - "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Rose" - ] - } - ] - } - }, "has_cloth": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Cloth" - ] - } - ] - } - }, - "has_flower": { - "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Flower" - ] - } - ] - } + "conditions": {"items": [{"items": ["Cloth"]}]} + }, + "has_orange_dye": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Orange Dye"]}]} } }, - "rewards": { - "recipes": { - "Orange Clothes_1": [ - "Cloth_5", - "Rose_1", - "Flower_1" - ] - } - } + "rewards": {"recipes": {"Orange Clothes_1": [ + "Cloth_5", + "Orange Dye_1" + ]}} }, "minicraft.advancements.recipes.iron_fishing_rod": { - "requirements": [ - [ - "has_string", - "has_iron" - ] - ], + "requirements": [[ + "has_string", + "has_iron" + ]], "criteria": { "has_string": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "String" - ] - } - ] - } + "conditions": {"items": [{"items": ["String"]}]} }, "has_iron": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Iron" - ] - } - ] - } + "conditions": {"items": [{"items": ["Iron"]}]} } }, - "rewards": { - "recipes": { - "Iron Fishing Rod_1": [ - "String_3", - "Iron_10" - ] - } - } + "rewards": {"recipes": {"Iron Fishing Rod_1": [ + "String_3", + "Iron_10" + ]}} }, "minicraft.advancements.recipes.iron_pickaxe": { - "requirements": [ - [ - "has_wood", - "has_iron" - ] - ], + "requirements": [[ + "has_wood", + "has_iron" + ]], "criteria": { "has_wood": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Wood" - ] - } - ] - } + "conditions": {"items": [{"items": ["Wood"]}]} }, "has_iron": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Iron" - ] - } - ] - } + "conditions": {"items": [{"items": ["Iron"]}]} } }, - "rewards": { - "recipes": { - "Iron Pickaxe_1": [ - "Wood_5", - "Iron_5" - ] - } - } - }, - "minicraft.advancements.recipes.arcane_fertilizer": { - "requirements": [ - [ - "has_bone", - "has_lapis" - ] - ], + "rewards": {"recipes": {"Iron Pickaxe_1": [ + "Wood_5", + "Iron_5" + ]}} + }, + "minicraft.advancements.recipes.yellow_bed": { + "requirements": [[ + "has_yellow_wool", + "has_wood" + ]], "criteria": { - "has_bone": { - "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Bone" - ] - } - ] - } + "has_yellow_wool": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Yellow Wool"]}]} }, - "has_lapis": { + "has_wood": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Lapis" - ] - } - ] - } + "conditions": {"items": [{"items": ["Wood"]}]} } }, - "rewards": { - "recipes": { - "ARCANE FERTILIZER_3": [ - "Lapis_6", - "Bone_2" - ] - } - } + "rewards": {"recipes": {"Yellow Bed_1": [ + "Yellow Wool_3", + "Wood_5" + ]}} }, "minicraft.advancements.recipes.ornate_stone": { - "requirements": [ - [ - "has_stone" - ] - ], - "criteria": { - "has_stone": { - "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Stone" - ] - } - ] - } - } - }, - "rewards": { - "recipes": { - "Ornate Stone_1": [ - "Stone_2" - ] - } - } + "requirements": [["has_stone"]], + "criteria": {"has_stone": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Stone"]}]} + }}, + "rewards": {"recipes": {"Ornate Stone_1": ["Stone_2"]}} + }, + "minicraft.advancements.recipes.light_gray_dye_from_hydrangea": { + "requirements": [["has_hydrangea"]], + "criteria": {"has_hydrangea": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Hydrangea"]}]} + }}, + "rewards": {"recipes": {"Light Gray Dye_1": ["Hydrangea_1"]}} }, "minicraft.advancements.recipes.wooden_bow": { - "requirements": [ - [ - "has_wood", - "has_string" - ] - ], + "requirements": [[ + "has_wood", + "has_string" + ]], "criteria": { "has_wood": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Wood" - ] - } - ] - } + "conditions": {"items": [{"items": ["Wood"]}]} }, "has_string": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "String" - ] - } - ] - } + "conditions": {"items": [{"items": ["String"]}]} } }, - "rewards": { - "recipes": { - "Wood Bow_1": [ - "String_2", - "Wood_5" - ] - } - } + "rewards": {"recipes": {"Wood Bow_1": [ + "String_2", + "Wood_5" + ]}} + }, + "minicraft.advancements.recipes.light_blue_dye_from_blue_orchid": { + "requirements": [["has_blue_orchid"]], + "criteria": {"has_blue_orchid": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Blue Orchid"]}]} + }}, + "rewards": {"recipes": {"Light Blue Dye_1": ["Blue Orchid_1"]}} }, "minicraft.advancements.recipes.gold_pickaxe": { - "requirements": [ - [ - "has_wood", - "has_gold" - ] - ], + "requirements": [[ + "has_wood", + "has_gold" + ]], "criteria": { "has_wood": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Wood" - ] - } - ] - } + "conditions": {"items": [{"items": ["Wood"]}]} }, "has_gold": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Gold" - ] - } - ] - } + "conditions": {"items": [{"items": ["Gold"]}]} } }, - "rewards": { - "recipes": { - "Gold Pickaxe_1": [ - "Gold_5", - "Wood_5" - ] + "rewards": {"recipes": {"Gold Pickaxe_1": [ + "Gold_5", + "Wood_5" + ]}} + }, + "minicraft.advancements.recipes.black_bed_from_white_bed": { + "requirements": [[ + "has_white_bed", + "has_black_dye" + ]], + "criteria": { + "has_white_bed": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["White Bed"]}]} + }, + "has_black_dye": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Black Dye"]}]} } - } + }, + "rewards": {"recipes": {"Black Bed_1": [ + "White Bed_1", + "Black Dye_1" + ]}} + }, + "minicraft.advancements.recipes.red_dye_from_poppy": { + "requirements": [["has_poppy"]], + "criteria": {"has_poppy": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Poppy"]}]} + }}, + "rewards": {"recipes": {"Red Dye_1": ["Poppy_1"]}} }, "minicraft.advancements.recipes.gold": { - "requirements": [ - [ - "has_coal", - "has_gold_ore" - ] - ], + "requirements": [[ + "has_coal", + "has_gold_ore" + ]], "criteria": { "has_coal": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Coal" - ] - } - ] - } + "conditions": {"items": [{"items": ["Coal"]}]} }, "has_gold_ore": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Gold Ore" - ] - } - ] - } + "conditions": {"items": [{"items": ["Gold Ore"]}]} } }, - "rewards": { - "recipes": { - "Gold_1": [ - "Coal_1", - "Gold Ore_3" - ] - } - } + "rewards": {"recipes": {"Gold_1": [ + "Coal_1", + "Gold Ore_3" + ]}} }, "minicraft.advancements.recipes.cooked_fish": { - "requirements": [ - [ - "has_coal", - "has_raw_fish" - ] - ], + "requirements": [[ + "has_coal", + "has_raw_fish" + ]], "criteria": { "has_coal": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Coal" - ] - } - ] - } + "conditions": {"items": [{"items": ["Coal"]}]} }, "has_raw_fish": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Raw Fish" - ] - } - ] - } + "conditions": {"items": [{"items": ["Raw Fish"]}]} } }, - "rewards": { - "recipes": { - "Cooked Fish_1": [ - "Coal_1", - "Raw Fish_1" - ] - } - } + "rewards": {"recipes": {"Cooked Fish_1": [ + "Coal_1", + "Raw Fish_1" + ]}} }, "minicraft.advancements.recipes.light_potion": { - "requirements": [ - [ - "has_slime", - "has_awkward_potion" - ] - ], + "requirements": [[ + "has_slime", + "has_awkward_potion" + ]], "criteria": { "has_slime": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Slime" - ] - } - ] - } + "conditions": {"items": [{"items": ["Slime"]}]} }, "has_awkward_potion": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Awkward Potion" - ] - } - ] - } + "conditions": {"items": [{"items": ["Awkward Potion"]}]} } }, - "rewards": { - "recipes": { - "Light Potion_1": [ - "Slime_5", - "Awkward Potion_1" - ] - } - } + "rewards": {"recipes": {"Light Potion_1": [ + "Slime_5", + "Awkward Potion_1" + ]}} }, "minicraft.advancements.recipes.gold_sword": { - "requirements": [ - [ - "has_wood", - "has_gold" - ] - ], + "requirements": [[ + "has_wood", + "has_gold" + ]], "criteria": { "has_wood": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Wood" - ] - } - ] - } + "conditions": {"items": [{"items": ["Wood"]}]} }, "has_gold": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Gold" - ] - } - ] - } + "conditions": {"items": [{"items": ["Gold"]}]} } }, - "rewards": { - "recipes": { - "Gold Sword_1": [ - "Gold_5", - "Wood_5" - ] - } - } + "rewards": {"recipes": {"Gold Sword_1": [ + "Gold_5", + "Wood_5" + ]}} }, "minicraft.advancements.recipes.gold_shovel": { - "requirements": [ - [ - "has_wood", - "has_gold" - ] - ], + "requirements": [[ + "has_wood", + "has_gold" + ]], "criteria": { "has_wood": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Wood" - ] - } - ] - } + "conditions": {"items": [{"items": ["Wood"]}]} }, "has_gold": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Gold" - ] - } - ] - } + "conditions": {"items": [{"items": ["Gold"]}]} } }, - "rewards": { - "recipes": { - "Gold Shovel_1": [ - "Gold_5", - "Wood_5" - ] - } - } + "rewards": {"recipes": {"Gold Shovel_1": [ + "Gold_5", + "Wood_5" + ]}} }, "minicraft.advancements.recipes.stone_shovel": { - "requirements": [ - [ - "has_stone", - "has_wood" - ] - ], + "requirements": [[ + "has_stone", + "has_wood" + ]], "criteria": { "has_stone": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Stone" - ] - } - ] - } + "conditions": {"items": [{"items": ["Stone"]}]} }, "has_wood": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Wood" - ] - } - ] - } + "conditions": {"items": [{"items": ["Wood"]}]} } }, - "rewards": { - "recipes": { - "Rock Shovel_1": [ - "Stone_5", - "Wood_5" - ] - } - } + "rewards": {"recipes": {"Rock Shovel_1": [ + "Stone_5", + "Wood_5" + ]}} }, "minicraft.advancements.recipes.escape_potion": { - "requirements": [ - [ - "has_lapis", - "has_gunpowder", - "has_awkward_potion" - ] - ], + "requirements": [[ + "has_lapis", + "has_gunpowder", + "has_awkward_potion" + ]], "criteria": { "has_lapis": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Lapis" - ] - } - ] - } + "conditions": {"items": [{"items": ["Lapis"]}]} }, "has_gunpowder": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Gunpowder" - ] - } - ] - } + "conditions": {"items": [{"items": ["Gunpowder"]}]} }, "has_awkward_potion": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Awkward Potion" - ] - } - ] - } + "conditions": {"items": [{"items": ["Awkward Potion"]}]} } }, - "rewards": { - "recipes": { - "Escape Potion_1": [ - "Lapis_7", - "Awkward Potion_1", - "Gunpowder_3" - ] - } - } + "rewards": {"recipes": {"Escape Potion_1": [ + "Lapis_7", + "Awkward Potion_1", + "Gunpowder_3" + ]}} }, - "minicraft.advancements.recipes.obsidian_wall": { - "requirements": [ - [ - "has_obsidian_brick" - ] - ], + "minicraft.advancements.recipes.orange_bed_from_white_bed": { + "requirements": [[ + "has_white_bed", + "has_orange_dye" + ]], "criteria": { - "has_obsidian_brick": { - "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Obsidian Brick" - ] - } - ] - } + "has_white_bed": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["White Bed"]}]} + }, + "has_orange_dye": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Orange Dye"]}]} } }, - "rewards": { - "recipes": { - "Obsidian Wall_1": [ - "Obsidian Brick_3" - ] - } - } + "rewards": {"recipes": {"Orange Bed_1": [ + "Orange Dye_1", + "White Bed_1" + ]}} }, - "minicraft.advancements.recipes.cyan_clothes": { - "requirements": [ - [ - "has_cactus", - "has_lapis", - "has_cloth" - ] - ], + "minicraft.advancements.recipes.lime_bed_from_white_bed": { + "requirements": [[ + "has_lime_dye", + "has_white_bed" + ]], "criteria": { - "has_cactus": { + "has_lime_dye": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Cactus" - ] - } - ] - } + "conditions": {"items": [{"items": ["Lime Dye"]}]} }, - "has_lapis": { + "has_white_bed": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["White Bed"]}]} + } + }, + "rewards": {"recipes": {"Lime Bed_1": [ + "Lime Dye_1", + "White Bed_1" + ]}} + }, + "minicraft.advancements.recipes.obsidian_wall": { + "requirements": [["has_obsidian_brick"]], + "criteria": {"has_obsidian_brick": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Obsidian Brick"]}]} + }}, + "rewards": {"recipes": {"Obsidian Wall_1": ["Obsidian Brick_3"]}} + }, + "minicraft.advancements.recipes.magenta_dye_from_allium": { + "requirements": [["has_allium"]], + "criteria": {"has_allium": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Allium"]}]} + }}, + "rewards": {"recipes": {"Magenta Dye_1": ["Allium_1"]}} + }, + "minicraft.advancements.recipes.cyan_clothes": { + "requirements": [[ + "has_cyan_dye", + "has_cloth" + ]], + "criteria": { + "has_cyan_dye": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Lapis" - ] - } - ] - } + "conditions": {"items": [{"items": ["Cyan Dye"]}]} }, "has_cloth": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Cloth" - ] - } - ] - } + "conditions": {"items": [{"items": ["Cloth"]}]} } }, - "rewards": { - "recipes": { - "Cyan Clothes_1": [ - "Lapis_1", - "Cloth_5", - "Cactus_1" - ] - } - } + "rewards": {"recipes": {"Cyan Clothes_1": [ + "Cyan Dye_1", + "Cloth_5" + ]}} }, - "minicraft.advancements.recipes.gem_armor": { - "requirements": [ - [ - "has_gem" - ] - ], + "minicraft.advancements.recipes.brown_bed_from_white_bed": { + "requirements": [[ + "has_white_bed", + "has_brown_dye" + ]], "criteria": { - "has_gem": { + "has_white_bed": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["White Bed"]}]} + }, + "has_brown_dye": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Brown Dye"]}]} + } + }, + "rewards": {"recipes": {"Brown Bed_1": [ + "White Bed_1", + "Brown Dye_1" + ]}} + }, + "minicraft.advancements.recipes.gem_armor": { + "requirements": [["has_gem"]], + "criteria": {"has_gem": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Gem"]}]} + }}, + "rewards": {"recipes": {"Gem Armor_1": ["Gem_65"]}} + }, + "minicraft.advancements.recipes.brown_dye": { + "requirements": [[ + "has_green_dye", + "has_red_dye" + ]], + "criteria": { + "has_green_dye": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Green Dye"]}]} + }, + "has_red_dye": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Red Dye"]}]} + } + }, + "rewards": {"recipes": {"Brown Dye_2": [ + "Green Dye_1", + "Red Dye_1" + ]}} + }, + "minicraft.advancements.recipes.red_bed": { + "requirements": [[ + "has_red_wool", + "has_wood" + ]], + "criteria": { + "has_red_wool": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Gem" - ] - } - ] - } + "conditions": {"items": [{"items": ["Red Wool"]}]} + }, + "has_wood": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Wood"]}]} } }, - "rewards": { - "recipes": { - "Gem Armor_1": [ - "Gem_65" - ] + "rewards": {"recipes": {"Red Bed_1": [ + "Wood_5", + "Red Wool_3" + ]}} + }, + "minicraft.advancements.recipes.green_bed_from_white_bed": { + "requirements": [[ + "has_green_dye", + "has_white_bed" + ]], + "criteria": { + "has_green_dye": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Green Dye"]}]} + }, + "has_white_bed": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["White Bed"]}]} } - } + }, + "rewards": {"recipes": {"Green Bed_1": [ + "Green Dye_1", + "White Bed_1" + ]}} }, "minicraft.advancements.recipes.golden_apple": { - "requirements": [ - [ - "has_apple", - "has_gold" - ] - ], + "requirements": [[ + "has_apple", + "has_gold" + ]], "criteria": { "has_apple": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Apple" - ] - } - ] - } + "conditions": {"items": [{"items": ["Apple"]}]} }, "has_gold": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Gold" - ] - } - ] - } + "conditions": {"items": [{"items": ["Gold"]}]} } }, - "rewards": { - "recipes": { - "Gold Apple_1": [ - "Gold_8", - "Apple_1" - ] - } - } + "rewards": {"recipes": {"Gold Apple_1": [ + "Gold_8", + "Apple_1" + ]}} }, "minicraft.advancements.recipes.arrow": { - "requirements": [ - [ - "has_stone", - "has_wood" - ] - ], + "requirements": [[ + "has_stone", + "has_wood" + ]], "criteria": { "has_stone": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Stone" - ] - } - ] - } + "conditions": {"items": [{"items": ["Stone"]}]} }, "has_wood": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Wood" - ] - } - ] - } + "conditions": {"items": [{"items": ["Wood"]}]} } }, - "rewards": { - "recipes": { - "Arrow_3": [ - "Stone_2", - "Wood_2" - ] - } - } + "rewards": {"recipes": {"Arrow_3": [ + "Stone_2", + "Wood_2" + ]}} }, - "minicraft.advancements.recipes.stone_wall": { - "requirements": [ - [ - "has_stone_brick" - ] - ], + "minicraft.advancements.recipes.yellow_bed_from_white_bed": { + "requirements": [[ + "has_white_bed", + "has_yellow_dye" + ]], "criteria": { - "has_stone_brick": { - "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Stone Brick" - ] - } - ] - } + "has_white_bed": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["White Bed"]}]} + }, + "has_yellow_dye": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Yellow Dye"]}]} } }, - "rewards": { - "recipes": { - "Stone Wall_1": [ - "Stone Brick_3" - ] - } - } + "rewards": {"recipes": {"Yellow Bed_1": [ + "Yellow Dye_1", + "White Bed_1" + ]}} + }, + "minicraft.advancements.recipes.stone_wall": { + "requirements": [["has_stone_brick"]], + "criteria": {"has_stone_brick": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Stone Brick"]}]} + }}, + "rewards": {"recipes": {"Stone Wall_1": ["Stone Brick_3"]}} }, "minicraft.advancements.recipes.glass": { - "requirements": [ - [ - "has_coal", - "has_sand" - ] - ], + "requirements": [[ + "has_coal", + "has_sand" + ]], "criteria": { "has_coal": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Coal" - ] - } - ] - } + "conditions": {"items": [{"items": ["Coal"]}]} }, "has_sand": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Sand" - ] - } - ] - } + "conditions": {"items": [{"items": ["Sand"]}]} } }, - "rewards": { - "recipes": { - "Glass_1": [ - "Coal_1", - "Sand_4" - ] - } - } + "rewards": {"recipes": {"Glass_1": [ + "Coal_1", + "Sand_4" + ]}} }, "minicraft.advancements.recipes.speed_potion": { - "requirements": [ - [ - "has_cactus", - "has_awkward_potion" - ] - ], + "requirements": [[ + "has_cactus", + "has_awkward_potion" + ]], "criteria": { "has_cactus": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Cactus" - ] - } - ] - } + "conditions": {"items": [{"items": ["Cactus"]}]} }, "has_awkward_potion": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Awkward Potion" - ] - } - ] - } + "conditions": {"items": [{"items": ["Awkward Potion"]}]} } }, - "rewards": { - "recipes": { - "Speed Potion_1": [ - "Cactus_5", - "Awkward Potion_1" - ] + "rewards": {"recipes": {"Speed Potion_1": [ + "Cactus_5", + "Awkward Potion_1" + ]}} + }, + "minicraft.advancements.recipes.brown_bed": { + "requirements": [[ + "has_brown_wool", + "has_wood" + ]], + "criteria": { + "has_brown_wool": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Brown Wool"]}]} + }, + "has_wood": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Wood"]}]} } - } + }, + "rewards": {"recipes": {"Brown Bed_1": [ + "Brown Wool_3", + "Wood_5" + ]}} }, "minicraft.advancements.recipes.gold_bow": { - "requirements": [ - [ - "has_wood", - "has_string", - "has_gold" - ] - ], + "requirements": [[ + "has_wood", + "has_string", + "has_gold" + ]], "criteria": { "has_wood": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Wood" - ] - } - ] - } + "conditions": {"items": [{"items": ["Wood"]}]} }, "has_string": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "String" - ] - } - ] - } + "conditions": {"items": [{"items": ["String"]}]} }, "has_gold": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Gold" - ] - } - ] - } + "conditions": {"items": [{"items": ["Gold"]}]} } }, - "rewards": { - "recipes": { - "Gold Bow_1": [ - "Gold_5", - "String_2", - "Wood_5" - ] - } - } + "rewards": {"recipes": {"Gold Bow_1": [ + "Gold_5", + "String_2", + "Wood_5" + ]}} + }, + "minicraft.advancements.recipes.yellow_dye_from_sunflower": { + "requirements": [["has_sunflower"]], + "criteria": {"has_sunflower": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Sunflower"]}]} + }}, + "rewards": {"recipes": {"Yellow Dye_1": ["Sunflower_1"]}} }, "minicraft.advancements.recipes.gold_lantern": { - "requirements": [ - [ - "has_glass", - "has_gold", - "has_slime" - ] - ], + "requirements": [[ + "has_glass", + "has_gold", + "has_slime" + ]], "criteria": { "has_glass": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Glass" - ] - } - ] - } + "conditions": {"items": [{"items": ["Glass"]}]} }, "has_gold": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Gold" - ] - } - ] - } + "conditions": {"items": [{"items": ["Gold"]}]} }, "has_slime": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Slime" - ] - } - ] - } + "conditions": {"items": [{"items": ["Slime"]}]} } }, - "rewards": { - "recipes": { - "Gold Lantern_1": [ - "Glass_4", - "Gold_10", - "Slime_5" - ] + "rewards": {"recipes": {"Gold Lantern_1": [ + "Glass_4", + "Gold_10", + "Slime_5" + ]}} + }, + "minicraft.advancements.recipes.red_dye_from_red_tulip": { + "requirements": [["has_red_tulip"]], + "criteria": {"has_red_tulip": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Red Tulip"]}]} + }}, + "rewards": {"recipes": {"Red Dye_1": ["Red Tulip_1"]}} + }, + "minicraft.advancements.recipes.gray_dye": { + "requirements": [[ + "has_white_dye", + "has_black_dye" + ]], + "criteria": { + "has_white_dye": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["White Dye"]}]} + }, + "has_black_dye": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Black Dye"]}]} } - } + }, + "rewards": {"recipes": {"Gray Dye_2": [ + "White Dye_1", + "Black Dye_1" + ]}} }, "minicraft.advancements.recipes.plank_wall": { - "requirements": [ - [ - "has_plank" - ] - ], + "requirements": [["has_plank"]], + "criteria": {"has_plank": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Plank"]}]} + }}, + "rewards": {"recipes": {"Plank Wall_1": ["Plank_3"]}} + }, + "minicraft.advancements.recipes.purple_dye": { + "requirements": [[ + "has_red_dye", + "has_blue_dye" + ]], "criteria": { - "has_plank": { - "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Plank" - ] - } - ] - } + "has_red_dye": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Red Dye"]}]} + }, + "has_blue_dye": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Blue Dye"]}]} } }, - "rewards": { - "recipes": { - "Plank Wall_1": [ - "Plank_3" - ] + "rewards": {"recipes": {"Purple Dye_2": [ + "Blue Dye_1", + "Red Dye_1" + ]}} + }, + "minicraft.advancements.recipes.ornate_wood": { + "requirements": [["has_wood"]], + "criteria": {"has_wood": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Wood"]}]} + }}, + "rewards": {"recipes": {"Ornate Wood_1": ["Wood_1"]}} + }, + "minicraft.advancements.recipes.light_blue_wool": { + "requirements": [[ + "has_light_blue_dye", + "has_white_wool" + ]], + "criteria": { + "has_light_blue_dye": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Light Blue Dye"]}]} + }, + "has_white_wool": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["White Wool"]}]} } - } + }, + "rewards": {"recipes": {"Light Blue Wool_1": [ + "Light Blue Dye_1", + "White Wool_1" + ]}} }, - "minicraft.advancements.recipes.iron_armor": { - "requirements": [ - [ - "has_iron" - ] - ], + "minicraft.advancements.recipes.light_blue_bed": { + "requirements": [[ + "has_wood", + "has_light_blue_wool" + ]], "criteria": { - "has_iron": { + "has_wood": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Wood"]}]} + }, + "has_light_blue_wool": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Iron" - ] - } - ] - } + "conditions": {"items": [{"items": ["Light Blue Wool"]}]} } }, - "rewards": { - "recipes": { - "Iron Armor_1": [ - "Iron_10" - ] + "rewards": {"recipes": {"Light Blue Bed_1": [ + "Light Blue Wool_3", + "Wood_5" + ]}} + }, + "minicraft.advancements.recipes.iron_armor": { + "requirements": [["has_iron"]], + "criteria": {"has_iron": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Iron"]}]} + }}, + "rewards": {"recipes": {"Iron Armor_1": ["Iron_10"]}} + }, + "minicraft.advancements.recipes.magenta_dye_from_blue_red_white_dye": { + "requirements": [[ + "has_white_dye", + "has_red_dye", + "has_blue_dye" + ]], + "criteria": { + "has_white_dye": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["White Dye"]}]} + }, + "has_red_dye": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Red Dye"]}]} + }, + "has_blue_dye": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Blue Dye"]}]} } - } + }, + "rewards": {"recipes": {"Magenta Dye_4": [ + "White Dye_1", + "Red Dye_2", + "Blue Dye_1" + ]}} }, "minicraft.advancements.recipes.iron_shovel": { - "requirements": [ - [ - "has_wood", - "has_iron" - ] - ], + "requirements": [[ + "has_wood", + "has_iron" + ]], "criteria": { "has_wood": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Wood" - ] - } - ] - } + "conditions": {"items": [{"items": ["Wood"]}]} }, "has_iron": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Iron" - ] - } - ] - } + "conditions": {"items": [{"items": ["Iron"]}]} } }, - "rewards": { - "recipes": { - "Iron Shovel_1": [ - "Wood_5", - "Iron_5" - ] - } - } + "rewards": {"recipes": {"Iron Shovel_1": [ + "Wood_5", + "Iron_5" + ]}} }, "minicraft.advancements.recipes.yellow_wool": { - "requirements": [ - [ - "has_wool", - "has_flower" - ] - ], + "requirements": [[ + "has_white_wool", + "has_yellow_dye" + ]], "criteria": { - "has_wool": { - "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Wool" - ] - } - ] - } - }, - "has_flower": { - "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Flower" - ] - } - ] - } + "has_white_wool": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["White Wool"]}]} + }, + "has_yellow_dye": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Yellow Dye"]}]} } }, - "rewards": { - "recipes": { - "Yellow Wool_1": [ - "Flower_1", - "Wool_1" - ] - } - } + "rewards": {"recipes": {"Yellow Wool_1": [ + "Yellow Dye_1", + "White Wool_1" + ]}} }, "minicraft.advancements.recipes.obsidian_door": { - "requirements": [ - [ - "has_obsidian_brick" - ] - ], - "criteria": { - "has_obsidian_brick": { - "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Obsidian Brick" - ] - } - ] - } - } - }, - "rewards": { - "recipes": { - "Obsidian Door_1": [ - "Obsidian Brick_5" - ] - } - } + "requirements": [["has_obsidian_brick"]], + "criteria": {"has_obsidian_brick": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Obsidian Brick"]}]} + }}, + "rewards": {"recipes": {"Obsidian Door_1": ["Obsidian Brick_5"]}} }, "minicraft.advancements.recipes.stone_hoe": { - "requirements": [ - [ - "has_stone", - "has_wood" - ] - ], + "requirements": [[ + "has_stone", + "has_wood" + ]], "criteria": { "has_stone": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Stone" - ] - } - ] - } + "conditions": {"items": [{"items": ["Stone"]}]} }, "has_wood": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Wood" - ] - } - ] - } + "conditions": {"items": [{"items": ["Wood"]}]} } }, - "rewards": { - "recipes": { - "Rock Hoe_1": [ - "Stone_5", - "Wood_5" - ] - } - } + "rewards": {"recipes": {"Rock Hoe_1": [ + "Stone_5", + "Wood_5" + ]}} }, "minicraft.advancements.recipes.chest": { - "requirements": [ - [ - "has_wood" - ] - ], + "requirements": [["has_wood"]], + "criteria": {"has_wood": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Wood"]}]} + }}, + "rewards": {"recipes": {"Chest_1": ["Wood_20"]}} + }, + "minicraft.advancements.recipes.purple_bed": { + "requirements": [[ + "has_wood", + "has_purple_wool" + ]], "criteria": { "has_wood": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Wood" - ] - } - ] - } + "conditions": {"items": [{"items": ["Wood"]}]} + }, + "has_purple_wool": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Purple Wool"]}]} } }, - "rewards": { - "recipes": { - "Chest_1": [ - "Wood_20" - ] + "rewards": {"recipes": {"Purple Bed_1": [ + "Wood_5", + "Purple Wool_3" + ]}} + }, + "minicraft.advancements.recipes.purple_bed_from_white_bed": { + "requirements": [[ + "has_purple_dye", + "has_white_bed" + ]], + "criteria": { + "has_purple_dye": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Purple Dye"]}]} + }, + "has_white_bed": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["White Bed"]}]} } - } + }, + "rewards": {"recipes": {"Purple Bed_1": [ + "White Bed_1", + "Purple Dye_1" + ]}} }, "minicraft.advancements.recipes.gem_hoe": { - "requirements": [ - [ - "has_wood", - "has_gem" - ] - ], + "requirements": [[ + "has_wood", + "has_gem" + ]], "criteria": { "has_wood": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Wood" - ] - } - ] - } + "conditions": {"items": [{"items": ["Wood"]}]} }, "has_gem": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Gem" - ] - } - ] - } + "conditions": {"items": [{"items": ["Gem"]}]} + } + }, + "rewards": {"recipes": {"Gem Hoe_1": [ + "Wood_5", + "Gem_50" + ]}} + }, + "minicraft.advancements.recipes.light_blue_bed_from_white_bed": { + "requirements": [[ + "has_light_blue_dye", + "has_white_bed" + ]], + "criteria": { + "has_light_blue_dye": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Light Blue Dye"]}]} + }, + "has_white_bed": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["White Bed"]}]} } }, - "rewards": { - "recipes": { - "Gem Hoe_1": [ - "Wood_5", - "Gem_50" - ] + "rewards": {"recipes": {"Light Blue Bed_1": [ + "Light Blue Dye_1", + "White Bed_1" + ]}} + }, + "minicraft.advancements.recipes.blue_bed_from_white_bed": { + "requirements": [[ + "has_white_bed", + "has_blue_dye" + ]], + "criteria": { + "has_white_bed": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["White Bed"]}]} + }, + "has_blue_dye": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Blue Dye"]}]} } - } + }, + "rewards": {"recipes": {"Blue Bed_1": [ + "Blue Dye_1", + "White Bed_1" + ]}} }, "minicraft.advancements.recipes.awkward_potion": { - "requirements": [ - [ - "has_lapis", - "has_glass_bottle" - ] - ], + "requirements": [[ + "has_lapis", + "has_glass_bottle" + ]], "criteria": { "has_lapis": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Lapis" - ] - } - ] - } + "conditions": {"items": [{"items": ["Lapis"]}]} }, "has_glass_bottle": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Glass Bottle" - ] - } - ] - } + "conditions": {"items": [{"items": ["Glass Bottle"]}]} } }, - "rewards": { - "recipes": { - "Awkward Potion_1": [ - "Lapis_3", - "Glass Bottle_1" - ] - } - } + "rewards": {"recipes": {"Awkward Potion_1": [ + "Lapis_3", + "Glass Bottle_1" + ]}} }, - "minicraft.advancements.recipes.reg_clothes": { - "requirements": [ - [ - "has_cloth" - ] - ], + "minicraft.advancements.recipes.magenta_wool": { + "requirements": [[ + "has_white_wool", + "has_magenta_dye" + ]], "criteria": { - "has_cloth": { + "has_white_wool": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["White Wool"]}]} + }, + "has_magenta_dye": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Cloth" - ] - } - ] - } + "conditions": {"items": [{"items": ["Magenta Dye"]}]} } }, - "rewards": { - "recipes": { - "Reg Clothes_1": [ - "Cloth_5" - ] + "rewards": {"recipes": {"Magenta Wool_1": [ + "Magenta Dye_1", + "White Wool_1" + ]}} + }, + "minicraft.advancements.recipes.green_bed": { + "requirements": [[ + "has_green_wool", + "has_wood" + ]], + "criteria": { + "has_green_wool": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Green Wool"]}]} + }, + "has_wood": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Wood"]}]} } - } + }, + "rewards": {"recipes": {"Green Bed_1": [ + "Green Wool_3", + "Wood_5" + ]}} + }, + "minicraft.advancements.recipes.reg_clothes": { + "requirements": [["has_cloth"]], + "criteria": {"has_cloth": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Cloth"]}]} + }}, + "rewards": {"recipes": {"Reg Clothes_1": ["Cloth_5"]}} }, "minicraft.advancements.recipes.totem_of_air": { - "requirements": [ - [ - "has_gem", - "has_cloud_ore", - "has_lapis", - "has_gold" - ] - ], + "requirements": [[ + "has_gem", + "has_cloud_ore", + "has_lapis", + "has_gold" + ]], "criteria": { "has_gem": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Gem" - ] - } - ] - } + "conditions": {"items": [{"items": ["Gem"]}]} }, "has_cloud_ore": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Cloud Ore" - ] - } - ] - } + "conditions": {"items": [{"items": ["Cloud Ore"]}]} }, "has_lapis": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Lapis" - ] - } - ] - } + "conditions": {"items": [{"items": ["Lapis"]}]} }, "has_gold": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Gold" - ] - } - ] - } + "conditions": {"items": [{"items": ["Gold"]}]} } }, - "rewards": { - "recipes": { - "Totem of Air_1": [ - "Lapis_5", - "Gold_10", - "Gem_10", - "Cloud Ore_5" - ] + "rewards": {"recipes": {"Totem of Air_1": [ + "Lapis_5", + "Gold_10", + "Gem_10", + "Cloud Ore_5" + ]}} + }, + "minicraft.advancements.recipes.cyan_wool": { + "requirements": [[ + "has_cyan_dye", + "has_white_wool" + ]], + "criteria": { + "has_cyan_dye": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Cyan Dye"]}]} + }, + "has_white_wool": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["White Wool"]}]} } - } + }, + "rewards": {"recipes": {"Cyan Wool_1": [ + "Cyan Dye_1", + "White Wool_1" + ]}} }, "minicraft.advancements.recipes.iron_bow": { - "requirements": [ - [ - "has_wood", - "has_string", - "has_iron" - ] - ], + "requirements": [[ + "has_wood", + "has_string", + "has_iron" + ]], "criteria": { "has_wood": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Wood" - ] - } - ] - } + "conditions": {"items": [{"items": ["Wood"]}]} }, "has_string": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "String" - ] - } - ] - } + "conditions": {"items": [{"items": ["String"]}]} }, "has_iron": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Iron" - ] - } - ] - } + "conditions": {"items": [{"items": ["Iron"]}]} } }, - "rewards": { - "recipes": { - "Iron Bow_1": [ - "String_2", - "Iron_5", - "Wood_5" - ] - } - } + "rewards": {"recipes": {"Iron Bow_1": [ + "String_2", + "Iron_5", + "Wood_5" + ]}} }, "minicraft.advancements.recipes.wooden_shovel": { - "requirements": [ - [ - "has_wood" - ] - ], - "criteria": { - "has_wood": { - "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Wood" - ] - } - ] - } - } - }, - "rewards": { - "recipes": { - "Wood Shovel_1": [ - "Wood_5" - ] - } - } + "requirements": [["has_wood"]], + "criteria": {"has_wood": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Wood"]}]} + }}, + "rewards": {"recipes": {"Wood Shovel_1": ["Wood_5"]}} }, "minicraft.advancements.recipes.string": { - "requirements": [ - [ - "has_wool" - ] - ], - "criteria": { - "has_wool": { - "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Wool" - ] - } - ] - } - } - }, - "rewards": { - "recipes": { - "String_2": [ - "Wool_1" - ] - } - } + "requirements": [["has_white_wool"]], + "criteria": {"has_white_wool": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["White Wool"]}]} + }}, + "rewards": {"recipes": {"String_2": ["White Wool_1"]}} }, "minicraft.advancements.recipes.loom": { - "requirements": [ - [ - "has_wood", - "has_wool" - ] - ], + "requirements": [[ + "has_wood", + "has_white_wool" + ]], "criteria": { "has_wood": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Wood" - ] - } - ] - } - }, - "has_wool": { - "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Wool" - ] - } - ] - } + "conditions": {"items": [{"items": ["Wood"]}]} + }, + "has_white_wool": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["White Wool"]}]} } }, - "rewards": { - "recipes": { - "Loom_1": [ - "Wood_10", - "Wool_5" - ] - } - } + "rewards": {"recipes": {"Loom_1": [ + "Wood_10", + "White Wool_5" + ]}} }, - "minicraft.advancements.recipes.bread": { - "requirements": [ - [ - "has_wheat" - ] - ], + "minicraft.advancements.recipes.light_gray_bed_from_white_bed": { + "requirements": [[ + "has_white_bed", + "has_light_gray_dye" + ]], "criteria": { - "has_wheat": { - "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Wheat" - ] - } - ] - } + "has_white_bed": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["White Bed"]}]} + }, + "has_light_gray_dye": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Light Gray Dye"]}]} } }, - "rewards": { - "recipes": { - "Bread_1": [ - "Wheat_4" - ] - } - } + "rewards": {"recipes": {"Light Gray Bed_1": [ + "White Bed_1", + "Light Gray Dye_1" + ]}} + }, + "minicraft.advancements.recipes.bread": { + "requirements": [["has_wheat"]], + "criteria": {"has_wheat": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Wheat"]}]} + }}, + "rewards": {"recipes": {"Bread_1": ["Wheat_4"]}} }, "minicraft.advancements.recipes.anvil": { - "requirements": [ - [ - "has_iron" - ] - ], - "criteria": { - "has_iron": { - "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Iron" - ] - } - ] - } - } - }, - "rewards": { - "recipes": { - "Anvil_1": [ - "Iron_5" - ] - } - } + "requirements": [["has_iron"]], + "criteria": {"has_iron": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Iron"]}]} + }}, + "rewards": {"recipes": {"Anvil_1": ["Iron_5"]}} }, "minicraft.advancements.recipes.torch": { - "requirements": [ - [ - "has_coal", - "has_wood" - ] - ], + "requirements": [[ + "has_coal", + "has_wood" + ]], "criteria": { "has_coal": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Coal" - ] - } - ] - } + "conditions": {"items": [{"items": ["Coal"]}]} }, "has_wood": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Wood" - ] - } - ] - } + "conditions": {"items": [{"items": ["Wood"]}]} } }, - "rewards": { - "recipes": { - "Torch_2": [ - "Coal_1", - "Wood_1" - ] - } - } + "rewards": {"recipes": {"Torch_2": [ + "Coal_1", + "Wood_1" + ]}} }, "minicraft.advancements.recipes.gold_axe": { - "requirements": [ - [ - "has_wood", - "has_gold" - ] - ], + "requirements": [[ + "has_wood", + "has_gold" + ]], "criteria": { "has_wood": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Wood" - ] - } - ] - } + "conditions": {"items": [{"items": ["Wood"]}]} }, "has_gold": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Gold" - ] - } - ] - } + "conditions": {"items": [{"items": ["Gold"]}]} } }, - "rewards": { - "recipes": { - "Gold Axe_1": [ - "Gold_5", - "Wood_5" - ] - } - } + "rewards": {"recipes": {"Gold Axe_1": [ + "Gold_5", + "Wood_5" + ]}} }, "minicraft.advancements.recipes.iron_lantern": { - "requirements": [ - [ - "has_glass", - "has_slime", - "has_iron" - ] - ], + "requirements": [[ + "has_glass", + "has_slime", + "has_iron" + ]], "criteria": { "has_glass": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Glass" - ] - } - ] - } + "conditions": {"items": [{"items": ["Glass"]}]} }, "has_slime": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Slime" - ] - } - ] - } + "conditions": {"items": [{"items": ["Slime"]}]} }, "has_iron": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Iron" - ] - } - ] - } + "conditions": {"items": [{"items": ["Iron"]}]} + } + }, + "rewards": {"recipes": {"Iron Lantern_1": [ + "Glass_4", + "Iron_8", + "Slime_5" + ]}} + }, + "minicraft.advancements.recipes.cyan_bed": { + "requirements": [[ + "has_wood", + "has_cyan_wool" + ]], + "criteria": { + "has_wood": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Wood"]}]} + }, + "has_cyan_wool": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Cyan Wool"]}]} + } + }, + "rewards": {"recipes": {"Cyan Bed_1": [ + "Wood_5", + "Cyan Wool_3" + ]}} + }, + "minicraft.advancements.recipes.magenta_dye_from_blue_red_pink": { + "requirements": [[ + "has_pink_dye", + "has_red_dye", + "has_blue_dye" + ]], + "criteria": { + "has_pink_dye": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Pink Dye"]}]} + }, + "has_red_dye": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Red Dye"]}]} + }, + "has_blue_dye": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Blue Dye"]}]} } }, - "rewards": { - "recipes": { - "Iron Lantern_1": [ - "Glass_4", - "Iron_8", - "Slime_5" - ] + "rewards": {"recipes": {"Magenta Dye_4": [ + "Pink Dye_1", + "Red Dye_1", + "Blue Dye_1" + ]}} + }, + "minicraft.advancements.recipes.white_bed": { + "requirements": [[ + "has_wood", + "has_white_wool" + ]], + "criteria": { + "has_wood": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Wood"]}]} + }, + "has_white_wool": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["White Wool"]}]} } - } + }, + "rewards": {"recipes": {"White Bed_1": [ + "Wood_5", + "White Wool_3" + ]}} }, "minicraft.advancements.recipes.enchanter": { - "requirements": [ - [ - "has_wood", - "has_string", - "has_lapis" - ] - ], + "requirements": [[ + "has_wood", + "has_string", + "has_lapis" + ]], "criteria": { "has_wood": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Wood" - ] - } - ] - } + "conditions": {"items": [{"items": ["Wood"]}]} }, "has_string": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "String" - ] - } - ] - } + "conditions": {"items": [{"items": ["String"]}]} }, "has_lapis": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Lapis" - ] - } - ] - } + "conditions": {"items": [{"items": ["Lapis"]}]} } }, - "rewards": { - "recipes": { - "Enchanter_1": [ - "Lapis_10", - "String_2", - "Wood_5" - ] + "rewards": {"recipes": {"Enchanter_1": [ + "Lapis_10", + "String_2", + "Wood_5" + ]}} + }, + "minicraft.advancements.recipes.light_gray_wool": { + "requirements": [[ + "has_white_wool", + "has_light_gray_dye" + ]], + "criteria": { + "has_white_wool": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["White Wool"]}]} + }, + "has_light_gray_dye": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Light Gray Dye"]}]} } - } + }, + "rewards": {"recipes": {"Light Gray Wool_1": [ + "Light Gray Dye_1", + "White Wool_1" + ]}} }, "minicraft.advancements.recipes.gold_claymore": { - "requirements": [ - [ - "has_shard", - "has_gold_sword" - ] - ], + "requirements": [[ + "has_shard", + "has_gold_sword" + ]], "criteria": { "has_shard": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Shard" - ] - } - ] - } + "conditions": {"items": [{"items": ["Shard"]}]} }, "has_gold_sword": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Gold Sword" - ] - } - ] - } + "conditions": {"items": [{"items": ["Gold Sword"]}]} } }, - "rewards": { - "recipes": { - "Gold Claymore_1": [ - "Shard_15", - "Gold Sword_1" - ] - } - } + "rewards": {"recipes": {"Gold Claymore_1": [ + "Shard_15", + "Gold Sword_1" + ]}} }, "minicraft.advancements.recipes.baked_potato": { - "requirements": [ - [ - "has_potato" - ] - ], - "criteria": { - "has_potato": { - "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Potato" - ] - } - ] - } - } - }, - "rewards": { - "recipes": { - "Baked Potato_1": [ - "Potato_1" - ] - } - } + "requirements": [["has_potato"]], + "criteria": {"has_potato": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Potato"]}]} + }}, + "rewards": {"recipes": {"Baked Potato_1": ["Potato_1"]}} }, - "minicraft.advancements.recipes.empty_bucket": { - "requirements": [ - [ - "has_iron" - ] - ], + "minicraft.advancements.recipes.orange_wool": { + "requirements": [[ + "has_white_wool", + "has_orange_dye" + ]], "criteria": { - "has_iron": { + "has_white_wool": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Iron" - ] - } - ] - } + "conditions": {"items": [{"items": ["White Wool"]}]} + }, + "has_orange_dye": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Orange Dye"]}]} } }, - "rewards": { - "recipes": { - "Empty Bucket_1": [ - "Iron_5" - ] - } - } + "rewards": {"recipes": {"Orange Wool_1": [ + "Orange Dye_1", + "White Wool_1" + ]}} + }, + "minicraft.advancements.recipes.empty_bucket": { + "requirements": [["has_iron"]], + "criteria": {"has_iron": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Iron"]}]} + }}, + "rewards": {"recipes": {"Empty Bucket_1": ["Iron_5"]}} }, "minicraft.advancements.recipes.gold_hoe": { - "requirements": [ - [ - "has_wood", - "has_gold" - ] - ], + "requirements": [[ + "has_wood", + "has_gold" + ]], "criteria": { "has_wood": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Wood" - ] - } - ] - } + "conditions": {"items": [{"items": ["Wood"]}]} }, "has_gold": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Gold" - ] - } - ] - } + "conditions": {"items": [{"items": ["Gold"]}]} } }, - "rewards": { - "recipes": { - "Gold Hoe_1": [ - "Gold_5", - "Wood_5" - ] + "rewards": {"recipes": {"Gold Hoe_1": [ + "Gold_5", + "Wood_5" + ]}} + }, + "minicraft.advancements.recipes.white_dye": { + "requirements": [["has_white_lily"]], + "criteria": {"has_white_lily": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["White Lily"]}]} + }}, + "rewards": {"recipes": {"White Dye_1": ["White Lily_1"]}} + }, + "minicraft.advancements.recipes.gray_bed": { + "requirements": [[ + "has_gray_wool", + "has_wood" + ]], + "criteria": { + "has_gray_wool": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Gray Wool"]}]} + }, + "has_wood": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Wood"]}]} } - } + }, + "rewards": {"recipes": {"Gray Bed_1": [ + "Gray Wool_3", + "Wood_5" + ]}} }, "minicraft.advancements.recipes.iron": { - "requirements": [ - [ - "has_coal", - "has_iron_ore" - ] - ], + "requirements": [[ + "has_coal", + "has_iron_ore" + ]], "criteria": { "has_coal": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Coal" - ] - } - ] - } + "conditions": {"items": [{"items": ["Coal"]}]} }, "has_iron_ore": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Iron Ore" - ] - } - ] - } + "conditions": {"items": [{"items": ["Iron Ore"]}]} } }, - "rewards": { - "recipes": { - "Iron_1": [ - "Coal_1", - "Iron Ore_3" - ] - } - } + "rewards": {"recipes": {"Iron_1": [ + "Coal_1", + "Iron Ore_3" + ]}} }, "minicraft.advancements.recipes.stone_door": { - "requirements": [ - [ - "has_stone_brick" - ] - ], - "criteria": { - "has_stone_brick": { - "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Stone Brick" - ] - } - ] - } - } - }, - "rewards": { - "recipes": { - "Stone Door_1": [ - "Stone Brick_5" - ] - } - } + "requirements": [["has_stone_brick"]], + "criteria": {"has_stone_brick": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Stone Brick"]}]} + }}, + "rewards": {"recipes": {"Stone Door_1": ["Stone Brick_5"]}} }, "minicraft.advancements.recipes.obsidian_poppet": { - "requirements": [ - [ - "has_shard", - "has_gem", - "has_lapis", - "has_gold" - ] - ], + "requirements": [[ + "has_shard", + "has_gem", + "has_lapis", + "has_gold" + ]], "criteria": { "has_shard": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Shard" - ] - } - ] - } + "conditions": {"items": [{"items": ["Shard"]}]} }, "has_gem": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Gem" - ] - } - ] - } + "conditions": {"items": [{"items": ["Gem"]}]} }, "has_lapis": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Lapis" - ] - } - ] - } + "conditions": {"items": [{"items": ["Lapis"]}]} }, "has_gold": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Gold" - ] - } - ] - } + "conditions": {"items": [{"items": ["Gold"]}]} } }, - "rewards": { - "recipes": { - "Obsidian Poppet_1": [ - "Lapis_5", - "Gold_10", - "Shard_15", - "Gem_10" - ] - } - } + "rewards": {"recipes": {"Obsidian Poppet_1": [ + "Lapis_5", + "Gold_10", + "Shard_15", + "Gem_10" + ]}} }, "minicraft.advancements.recipes.gem_axe": { - "requirements": [ - [ - "has_wood", - "has_gem" - ] - ], + "requirements": [[ + "has_wood", + "has_gem" + ]], "criteria": { "has_wood": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Wood" - ] - } - ] - } + "conditions": {"items": [{"items": ["Wood"]}]} }, "has_gem": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Gem" - ] - } - ] - } + "conditions": {"items": [{"items": ["Gem"]}]} } }, - "rewards": { - "recipes": { - "Gem Axe_1": [ - "Wood_5", - "Gem_50" - ] - } - } + "rewards": {"recipes": {"Gem Axe_1": [ + "Wood_5", + "Gem_50" + ]}} }, "minicraft.advancements.recipes.tnt": { - "requirements": [ - [ - "has_sand", - "has_gunpowder" - ] - ], + "requirements": [[ + "has_sand", + "has_gunpowder" + ]], "criteria": { "has_sand": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Sand" - ] - } - ] - } + "conditions": {"items": [{"items": ["Sand"]}]} }, "has_gunpowder": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Gunpowder" - ] - } - ] - } + "conditions": {"items": [{"items": ["Gunpowder"]}]} } }, - "rewards": { - "recipes": { - "Tnt_1": [ - "Sand_8", - "Gunpowder_10" - ] - } - } + "rewards": {"recipes": {"Tnt_1": [ + "Sand_8", + "Gunpowder_10" + ]}} }, - "minicraft.advancements.recipes.iron_sword": { - "requirements": [ - [ - "has_wood", - "has_iron" - ] - ], + "minicraft.advancements.recipes.lime_bed": { + "requirements": [[ + "has_wood", + "has_lime_wool" + ]], "criteria": { "has_wood": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Wood" - ] - } - ] - } + "conditions": {"items": [{"items": ["Wood"]}]} }, - "has_iron": { + "has_lime_wool": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Iron" - ] - } - ] - } + "conditions": {"items": [{"items": ["Lime Wool"]}]} } }, - "rewards": { - "recipes": { - "Iron Sword_1": [ - "Wood_5", - "Iron_5" - ] - } - } + "rewards": {"recipes": {"Lime Bed_1": [ + "Lime Wool_3", + "Wood_5" + ]}} }, - "minicraft.advancements.recipes.wooden_sword": { - "requirements": [ - [ - "has_wood" - ] - ], + "minicraft.advancements.recipes.iron_sword": { + "requirements": [[ + "has_wood", + "has_iron" + ]], "criteria": { "has_wood": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Wood" - ] - } - ] - } + "conditions": {"items": [{"items": ["Wood"]}]} + }, + "has_iron": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Iron"]}]} } }, - "rewards": { - "recipes": { - "Wood Sword_1": [ - "Wood_5" - ] - } - } + "rewards": {"recipes": {"Iron Sword_1": [ + "Wood_5", + "Iron_5" + ]}} }, - "minicraft.advancements.recipes.furnace": { - "requirements": [ - [ - "has_stone" - ] - ], + "minicraft.advancements.recipes.cyan_bed_from_white_bed": { + "requirements": [[ + "has_cyan_dye", + "has_white_bed" + ]], "criteria": { - "has_stone": { + "has_cyan_dye": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Cyan Dye"]}]} + }, + "has_white_bed": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Stone" - ] - } - ] - } + "conditions": {"items": [{"items": ["White Bed"]}]} } }, - "rewards": { - "recipes": { - "Furnace_1": [ - "Stone_20" - ] - } - } + "rewards": {"recipes": {"Cyan Bed_1": [ + "Cyan Dye_1", + "White Bed_1" + ]}} + }, + "minicraft.advancements.recipes.pink_dye_from_pink_tulip": { + "requirements": [["has_pink_tulip"]], + "criteria": {"has_pink_tulip": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Pink Tulip"]}]} + }}, + "rewards": {"recipes": {"Pink Dye_1": ["Pink Tulip_1"]}} + }, + "minicraft.advancements.recipes.wooden_sword": { + "requirements": [["has_wood"]], + "criteria": {"has_wood": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Wood"]}]} + }}, + "rewards": {"recipes": {"Wood Sword_1": ["Wood_5"]}} + }, + "minicraft.advancements.recipes.furnace": { + "requirements": [["has_stone"]], + "criteria": {"has_stone": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Stone"]}]} + }}, + "rewards": {"recipes": {"Furnace_1": ["Stone_20"]}} }, "minicraft.advancements.recipes.gem_shovel": { - "requirements": [ - [ - "has_wood", - "has_gem" - ] - ], + "requirements": [[ + "has_wood", + "has_gem" + ]], "criteria": { "has_wood": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Wood" - ] - } - ] - } + "conditions": {"items": [{"items": ["Wood"]}]} }, "has_gem": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Gem" - ] - } - ] - } + "conditions": {"items": [{"items": ["Gem"]}]} } }, - "rewards": { - "recipes": { - "Gem Shovel_1": [ - "Wood_5", - "Gem_50" - ] - } - } + "rewards": {"recipes": {"Gem Shovel_1": [ + "Wood_5", + "Gem_50" + ]}} }, "minicraft.advancements.recipes.black_clothes": { - "requirements": [ - [ - "has_coal", - "has_cloth" - ] - ], + "requirements": [[ + "has_cloth", + "has_black_dye" + ]], "criteria": { - "has_coal": { + "has_cloth": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Coal" - ] - } - ] - } + "conditions": {"items": [{"items": ["Cloth"]}]} }, - "has_cloth": { + "has_black_dye": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Cloth" - ] - } - ] - } + "conditions": {"items": [{"items": ["Black Dye"]}]} } }, - "rewards": { - "recipes": { - "Black Clothes_1": [ - "Coal_1", - "Cloth_5" - ] - } - } + "rewards": {"recipes": {"Black Clothes_1": [ + "Cloth_5", + "Black Dye_1" + ]}} }, "minicraft.advancements.recipes.haste_potion": { - "requirements": [ - [ - "has_stone", - "has_wood", - "has_awkward_potion" - ] - ], + "requirements": [[ + "has_stone", + "has_wood", + "has_awkward_potion" + ]], "criteria": { "has_stone": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Stone" - ] - } - ] - } + "conditions": {"items": [{"items": ["Stone"]}]} }, "has_wood": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Wood" - ] - } - ] - } + "conditions": {"items": [{"items": ["Wood"]}]} }, "has_awkward_potion": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Awkward Potion" - ] - } - ] - } + "conditions": {"items": [{"items": ["Awkward Potion"]}]} } }, - "rewards": { - "recipes": { - "Haste Potion_1": [ - "Awkward Potion_1", - "Stone_5", - "Wood_5" - ] - } - } + "rewards": {"recipes": {"Haste Potion_1": [ + "Awkward Potion_1", + "Stone_5", + "Wood_5" + ]}} }, - "minicraft.advancements.recipes.blue_wool": { - "requirements": [ - [ - "has_lapis", - "has_wool" - ] - ], + "minicraft.advancements.recipes.black_bed": { + "requirements": [[ + "has_black_wool", + "has_wood" + ]], "criteria": { - "has_lapis": { + "has_black_wool": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Lapis" - ] - } - ] - } - }, - "has_wool": { - "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Wool" - ] - } - ] - } + "conditions": {"items": [{"items": ["Black Wool"]}]} + }, + "has_wood": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Wood"]}]} } }, - "rewards": { - "recipes": { - "Blue Wool_1": [ - "Lapis_1", - "Wool_1" - ] - } - } + "rewards": {"recipes": {"Black Bed_1": [ + "Wood_5", + "Black Wool_3" + ]}} }, - "minicraft.advancements.recipes.ornate_obsidian": { - "requirements": [ - [ - "has_raw_obsidian" - ] - ], + "minicraft.advancements.recipes.blue_wool": { + "requirements": [[ + "has_white_wool", + "has_blue_dye" + ]], "criteria": { - "has_raw_obsidian": { - "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Raw Obsidian" - ] - } - ] - } + "has_white_wool": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["White Wool"]}]} + }, + "has_blue_dye": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Blue Dye"]}]} } }, - "rewards": { - "recipes": { - "Ornate Obsidian_1": [ - "Raw Obsidian_2" - ] - } - } + "rewards": {"recipes": {"Blue Wool_1": [ + "Blue Dye_1", + "White Wool_1" + ]}} + }, + "minicraft.advancements.recipes.ornate_obsidian": { + "requirements": [["has_raw_obsidian"]], + "criteria": {"has_raw_obsidian": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Raw Obsidian"]}]} + }}, + "rewards": {"recipes": {"Ornate Obsidian_1": ["Raw Obsidian_2"]}} }, "minicraft.advancements.recipes.energy_potion": { - "requirements": [ - [ - "has_gem", - "has_awkward_potion" - ] - ], + "requirements": [[ + "has_gem", + "has_awkward_potion" + ]], "criteria": { "has_gem": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Gem" - ] - } - ] - } + "conditions": {"items": [{"items": ["Gem"]}]} }, "has_awkward_potion": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Awkward Potion" - ] - } - ] - } + "conditions": {"items": [{"items": ["Awkward Potion"]}]} } }, - "rewards": { - "recipes": { - "Energy Potion_1": [ - "Awkward Potion_1", - "Gem_25" - ] - } - } + "rewards": {"recipes": {"Energy Potion_1": [ + "Awkward Potion_1", + "Gem_25" + ]}} }, - "minicraft.advancements.recipes.oven": { - "requirements": [ - [ - "has_stone" - ] - ], + "minicraft.advancements.recipes.orange_dye_from_orange_tulip": { + "requirements": [["has_orange_tulip"]], + "criteria": {"has_orange_tulip": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Orange Tulip"]}]} + }}, + "rewards": {"recipes": {"Orange Dye_1": ["Orange Tulip_1"]}} + }, + "minicraft.advancements.recipes.lime_dye": { + "requirements": [[ + "has_green_dye", + "has_white_dye" + ]], "criteria": { - "has_stone": { + "has_green_dye": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Stone" - ] - } - ] - } + "conditions": {"items": [{"items": ["Green Dye"]}]} + }, + "has_white_dye": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["White Dye"]}]} } }, - "rewards": { - "recipes": { - "Oven_1": [ - "Stone_15" - ] - } - } + "rewards": {"recipes": {"Lime Dye_2": [ + "Green Dye_1", + "White Dye_1" + ]}} + }, + "minicraft.advancements.recipes.oven": { + "requirements": [["has_stone"]], + "criteria": {"has_stone": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Stone"]}]} + }}, + "rewards": {"recipes": {"Oven_1": ["Stone_15"]}} }, "minicraft.advancements.recipes.regen_potion": { - "requirements": [ - [ - "has_golden_apple", - "has_awkward_potion" - ] - ], + "requirements": [[ + "has_golden_apple", + "has_awkward_potion" + ]], "criteria": { "has_golden_apple": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Gold Apple" - ] - } - ] - } + "conditions": {"items": [{"items": ["Gold Apple"]}]} }, "has_awkward_potion": { "trigger": "inventory_changed", - "conditions": { - "items": [ - { - "items": [ - "Awkward Potion" - ] - } - ] - } + "conditions": {"items": [{"items": ["Awkward Potion"]}]} } }, - "rewards": { - "recipes": { - "Regen Potion_1": [ - "Gold Apple_1", - "Awkward Potion_1" - ] + "rewards": {"recipes": {"Regen Potion_1": [ + "Gold Apple_1", + "Awkward Potion_1" + ]}} + }, + "minicraft.advancements.recipes.light_gray_bed": { + "requirements": [[ + "has_light_gray_wool", + "has_wood" + ]], + "criteria": { + "has_light_gray_wool": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Light Gray Wool"]}]} + }, + "has_wood": { + "trigger": "inventory_changed", + "conditions": {"items": [{"items": ["Wood"]}]} } - } + }, + "rewards": {"recipes": {"Light Gray Bed_1": [ + "Wood_5", + "Light Gray Wool_3" + ]}} } -} +} \ No newline at end of file