diff --git a/.gitignore b/.gitignore index 2f86dba3f..d2a7e288d 100644 --- a/.gitignore +++ b/.gitignore @@ -10,6 +10,7 @@ /projects/*/build /buildSrc/build /out +/buildSrc/out /jars /doc/out/ /node_modules diff --git a/buildSrc/src/main/kotlin/cc-tweaked.java-convention.gradle.kts b/buildSrc/src/main/kotlin/cc-tweaked.java-convention.gradle.kts index c105636ad..9279f11aa 100644 --- a/buildSrc/src/main/kotlin/cc-tweaked.java-convention.gradle.kts +++ b/buildSrc/src/main/kotlin/cc-tweaked.java-convention.gradle.kts @@ -102,6 +102,10 @@ tasks.withType(JavaCompile::class.java).configureEach { options.encoding = "UTF-8" } +tasks.processResources { + exclude("**/*.license") +} + tasks.withType(AbstractArchiveTask::class.java).configureEach { isPreserveFileTimestamps = false isReproducibleFileOrder = true diff --git a/projects/common/src/client/java/dan200/computercraft/client/ClientRegistry.java b/projects/common/src/client/java/dan200/computercraft/client/ClientRegistry.java index 3fe549835..c3aead672 100644 --- a/projects/common/src/client/java/dan200/computercraft/client/ClientRegistry.java +++ b/projects/common/src/client/java/dan200/computercraft/client/ClientRegistry.java @@ -127,6 +127,8 @@ private static void registerItemProperty(String name, ClampedItemPropertyFunctio // Turtle block renderer "block/turtle_colour", "block/turtle_elf_overlay", + "block/turtle_rainbow_overlay", + "block/turtle_trans_overlay", }; public static void registerExtraModels(Consumer register) { diff --git a/projects/common/src/main/java/dan200/computercraft/data/RecipeProvider.java b/projects/common/src/main/java/dan200/computercraft/data/RecipeProvider.java index 38714b1d6..dd4da45cf 100644 --- a/projects/common/src/main/java/dan200/computercraft/data/RecipeProvider.java +++ b/projects/common/src/main/java/dan200/computercraft/data/RecipeProvider.java @@ -17,6 +17,7 @@ import dan200.computercraft.shared.platform.RegistryWrappers; import dan200.computercraft.shared.pocket.items.PocketComputerItemFactory; import dan200.computercraft.shared.turtle.items.TurtleItemFactory; +import dan200.computercraft.shared.util.ColourUtils; import net.minecraft.advancements.critereon.InventoryChangeTrigger; import net.minecraft.advancements.critereon.ItemPredicate; import net.minecraft.core.registries.Registries; @@ -60,6 +61,7 @@ public void buildRecipes(Consumer add) { diskColours(add); pocketUpgrades(add); turtleUpgrades(add); + turtleOverlays(add); addSpecial(add, ModRegistry.RecipeSerializers.PRINTOUT.get()); addSpecial(add, ModRegistry.RecipeSerializers.DISK.get()); @@ -156,6 +158,51 @@ private void pocketUpgrades(Consumer add) { } } + private void turtleOverlays(Consumer add) { + turtleOverlay(add, "turtle_trans_overlay", x -> x + .unlockedBy("has_dye", inventoryChange(itemPredicate(ingredients.dye()))) + .requires(ColourUtils.getDyeTag(DyeColor.LIGHT_BLUE)) + .requires(ColourUtils.getDyeTag(DyeColor.PINK)) + .requires(ColourUtils.getDyeTag(DyeColor.WHITE)) + .requires(Items.STICK) + ); + + turtleOverlay(add, "turtle_rainbow_overlay", x -> x + .unlockedBy("has_dye", inventoryChange(itemPredicate(ingredients.dye()))) + .requires(ColourUtils.getDyeTag(DyeColor.RED)) + .requires(ColourUtils.getDyeTag(DyeColor.ORANGE)) + .requires(ColourUtils.getDyeTag(DyeColor.YELLOW)) + .requires(ColourUtils.getDyeTag(DyeColor.GREEN)) + .requires(ColourUtils.getDyeTag(DyeColor.BLUE)) + .requires(ColourUtils.getDyeTag(DyeColor.PURPLE)) + .requires(Items.STICK) + ); + } + + private void turtleOverlay(Consumer add, String overlay, Consumer build) { + for (var family : ComputerFamily.values()) { + var base = TurtleItemFactory.create(-1, null, -1, family, null, null, 0, null); + if (base.isEmpty()) continue; + + var nameId = family.name().toLowerCase(Locale.ROOT); + var group = "%s:turtle_%s_overlay".formatted(ComputerCraftAPI.MOD_ID, nameId); + + var builder = ShapelessRecipeBuilder.shapeless(RecipeCategory.REDSTONE, base.getItem()) + .group(group) + .unlockedBy("has_turtle", inventoryChange(base.getItem())); + build.accept(builder); + builder + .requires(base.getItem()) + .save( + RecipeWrapper + .wrap(ModRegistry.RecipeSerializers.TURTLE_OVERLAY.get(), add) + .withExtraData(x -> x.addProperty("overlay", new ResourceLocation(ComputerCraftAPI.MOD_ID, "block/" + overlay).toString())), + new ResourceLocation(ComputerCraftAPI.MOD_ID, "turtle_%s_overlays/%s".formatted(nameId, overlay)) + ); + } + } + + private void basicRecipes(Consumer add) { ShapedRecipeBuilder .shaped(RecipeCategory.REDSTONE, ModRegistry.Items.CABLE.get(), 6) diff --git a/projects/common/src/main/java/dan200/computercraft/shared/ModRegistry.java b/projects/common/src/main/java/dan200/computercraft/shared/ModRegistry.java index 4b617d163..339769f9a 100644 --- a/projects/common/src/main/java/dan200/computercraft/shared/ModRegistry.java +++ b/projects/common/src/main/java/dan200/computercraft/shared/ModRegistry.java @@ -70,6 +70,7 @@ import dan200.computercraft.shared.turtle.blocks.TurtleBlockEntity; import dan200.computercraft.shared.turtle.inventory.TurtleMenu; import dan200.computercraft.shared.turtle.items.TurtleItem; +import dan200.computercraft.shared.turtle.recipes.TurtleOverlayRecipe; import dan200.computercraft.shared.turtle.recipes.TurtleRecipe; import dan200.computercraft.shared.turtle.recipes.TurtleUpgradeRecipe; import dan200.computercraft.shared.turtle.upgrades.*; @@ -355,6 +356,7 @@ private static RegistryEntry> DYEABLE_ITEM_CLEAR = simple("clear_colour", ClearColourRecipe::new); public static final RegistryEntry TURTLE = REGISTRY.register("turtle", TurtleRecipe.Serializer::new); public static final RegistryEntry> TURTLE_UPGRADE = simple("turtle_upgrade", TurtleUpgradeRecipe::new); + public static final RegistryEntry TURTLE_OVERLAY = REGISTRY.register("turtle_overlay", TurtleOverlayRecipe.Serializer::new); public static final RegistryEntry> POCKET_COMPUTER_UPGRADE = simple("pocket_computer_upgrade", PocketComputerUpgradeRecipe::new); public static final RegistryEntry> PRINTOUT = simple("printout", PrintoutRecipe::new); public static final RegistryEntry> DISK = simple("disk", DiskRecipe::new); diff --git a/projects/common/src/main/java/dan200/computercraft/shared/turtle/recipes/TurtleOverlayRecipe.java b/projects/common/src/main/java/dan200/computercraft/shared/turtle/recipes/TurtleOverlayRecipe.java new file mode 100644 index 000000000..4e6cf5c0b --- /dev/null +++ b/projects/common/src/main/java/dan200/computercraft/shared/turtle/recipes/TurtleOverlayRecipe.java @@ -0,0 +1,122 @@ +// SPDX-FileCopyrightText: 2023 The CC: Tweaked Developers +// +// SPDX-License-Identifier: MPL-2.0 + +package dan200.computercraft.shared.turtle.recipes; + +import com.google.gson.JsonArray; +import com.google.gson.JsonObject; +import com.google.gson.JsonParseException; +import dan200.computercraft.api.turtle.TurtleSide; +import dan200.computercraft.shared.ModRegistry; +import dan200.computercraft.shared.turtle.items.ITurtleItem; +import dan200.computercraft.shared.turtle.items.TurtleItem; +import dan200.computercraft.shared.turtle.items.TurtleItemFactory; +import net.minecraft.core.NonNullList; +import net.minecraft.core.RegistryAccess; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.GsonHelper; +import net.minecraft.world.inventory.CraftingContainer; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.crafting.*; + +/** + * A {@link ShapelessRecipe} which sets the {@linkplain ITurtleItem#getOverlay(ItemStack)} turtle's overlay} instead. + */ +public class TurtleOverlayRecipe extends ShapelessRecipe { + private final ResourceLocation overlay; + private final ItemStack result; + + public TurtleOverlayRecipe(ResourceLocation id, String group, CraftingBookCategory category, ItemStack result, NonNullList ingredients, ResourceLocation overlay) { + super(id, group, category, result, ingredients); + this.overlay = overlay; + this.result = result; + } + + private static ItemStack make(ItemStack stack, ResourceLocation overlay) { + var turtle = (ITurtleItem) stack.getItem(); + return TurtleItemFactory.create( + turtle.getComputerID(stack), + turtle.getLabel(stack), + turtle.getColour(stack), + turtle.getFamily(), + turtle.getUpgrade(stack, TurtleSide.LEFT), + turtle.getUpgrade(stack, TurtleSide.RIGHT), + turtle.getFuelLevel(stack), + overlay + ); + } + + @Override + public ItemStack assemble(CraftingContainer inventory, RegistryAccess registryAccess) { + for (var i = 0; i < inventory.getContainerSize(); i++) { + var stack = inventory.getItem(i); + if (stack.getItem() instanceof TurtleItem) return make(stack, overlay); + } + + return ItemStack.EMPTY; + } + + @Override + public RecipeSerializer getSerializer() { + return ModRegistry.RecipeSerializers.TURTLE_OVERLAY.get(); + } + + public static class Serializer implements RecipeSerializer { + @Override + public TurtleOverlayRecipe fromJson(ResourceLocation id, JsonObject json) { + var group = GsonHelper.getAsString(json, "group", ""); + var category = CraftingBookCategory.CODEC.byName(GsonHelper.getAsString(json, "category", null), CraftingBookCategory.MISC); + var ingredients = readIngredients(GsonHelper.getAsJsonArray(json, "ingredients")); + + if (ingredients.isEmpty()) throw new JsonParseException("No ingredients for shapeless recipe"); + if (ingredients.size() > 9) { + throw new JsonParseException("Too many ingredients for shapeless recipe the max is 9"); + } + + var overlay = new ResourceLocation(GsonHelper.getAsString(json, "overlay")); + + // We could derive this from the ingredients, but we want to avoid evaluating the ingredients too early, so + // it's easier to do this. + var result = make(ShapedRecipe.itemStackFromJson(GsonHelper.getAsJsonObject(json, "result")), overlay); + + return new TurtleOverlayRecipe(id, group, category, result, ingredients, overlay); + } + + private NonNullList readIngredients(JsonArray arrays) { + NonNullList items = NonNullList.create(); + for (var i = 0; i < arrays.size(); ++i) { + var ingredient = Ingredient.fromJson(arrays.get(i)); + if (!ingredient.isEmpty()) items.add(ingredient); + } + + return items; + } + + @Override + public TurtleOverlayRecipe fromNetwork(ResourceLocation id, FriendlyByteBuf buffer) { + var group = buffer.readUtf(); + var category = buffer.readEnum(CraftingBookCategory.class); + var count = buffer.readVarInt(); + var items = NonNullList.withSize(count, Ingredient.EMPTY); + + for (var j = 0; j < items.size(); j++) items.set(j, Ingredient.fromNetwork(buffer)); + var result = buffer.readItem(); + var overlay = buffer.readResourceLocation(); + + return new TurtleOverlayRecipe(id, group, category, result, items, overlay); + } + + @Override + public void toNetwork(FriendlyByteBuf buffer, TurtleOverlayRecipe recipe) { + buffer.writeUtf(recipe.getGroup()); + buffer.writeEnum(recipe.category()); + buffer.writeVarInt(recipe.getIngredients().size()); + + for (var ingredient : recipe.getIngredients()) ingredient.toNetwork(buffer); + buffer.writeItem(recipe.result); + buffer.writeResourceLocation(recipe.overlay); + } + } +} diff --git a/projects/common/src/main/java/dan200/computercraft/shared/util/ColourUtils.java b/projects/common/src/main/java/dan200/computercraft/shared/util/ColourUtils.java index 96be80c80..8f66a6a0a 100644 --- a/projects/common/src/main/java/dan200/computercraft/shared/util/ColourUtils.java +++ b/projects/common/src/main/java/dan200/computercraft/shared/util/ColourUtils.java @@ -19,6 +19,10 @@ public final class ColourUtils { private ColourUtils() { } + public static TagKey getDyeTag(DyeColor color) { + return DYES.get(color.getId()); + } + public static @Nullable DyeColor getStackColour(ItemStack stack) { if (stack.isEmpty()) return null; diff --git a/projects/common/src/main/resources/assets/computercraft/models/block/turtle_rainbow_overlay.json b/projects/common/src/main/resources/assets/computercraft/models/block/turtle_rainbow_overlay.json new file mode 100644 index 000000000..f397920a8 --- /dev/null +++ b/projects/common/src/main/resources/assets/computercraft/models/block/turtle_rainbow_overlay.json @@ -0,0 +1,38 @@ +{ + "parent": "block/block", + "textures": { + "particle": "computercraft:block/turtle_rainbow_overlay", + "texture": "computercraft:block/turtle_rainbow_overlay" + }, + "elements": [ + { + "name": "Flag", + "from": [1.5, 13, 10.5], + "to": [2, 16.5, 15.5], + "rotation": {"angle": 22.5, "axis": "x", "origin": [2, 11, 10.75]}, + "faces": { + "north": {"uv": [0, 0, 1, 6], "texture": "#texture"}, + "east": {"uv": [0, 0, 7, 6], "texture": "#texture"}, + "south": {"uv": [0, 0, 1, 6], "texture": "#texture"}, + "west": {"uv": [0, 0, 7, 6], "texture": "#texture"}, + "up": {"uv": [15, 0, 16, 6], "texture": "#texture"}, + "down": {"uv": [8, 0, 9, 6], "texture": "#texture"} + } + }, + { + "name": "Stick", + "from": [1.5, 10.5, 10.5], + "to": [2, 13, 11], + "rotation": {"angle": 22.5, "axis": "x", "origin": [2, 11, 10.75]}, + "faces": { + "north": {"uv": [12, 0, 13, 6], "texture": "#texture"}, + "east": {"uv": [13, 0, 14, 6], "texture": "#texture"}, + "south": {"uv": [12, 0, 13, 6], "texture": "#texture"}, + "west": {"uv": [13, 0, 14, 6], "texture": "#texture"}, + "up": {"uv": [12, 6, 13, 7], "texture": "#texture"}, + "down": {"uv": [13, 6, 14, 7], "texture": "#texture"} + } + } + ], + "display": {} +} diff --git a/projects/common/src/main/resources/assets/computercraft/models/block/turtle_rainbow_overlay.json.license b/projects/common/src/main/resources/assets/computercraft/models/block/turtle_rainbow_overlay.json.license new file mode 100644 index 000000000..05aed57f6 --- /dev/null +++ b/projects/common/src/main/resources/assets/computercraft/models/block/turtle_rainbow_overlay.json.license @@ -0,0 +1,3 @@ +SPDX-FileCopyrightText: 2023 The CC: Tweaked Developers + +SPDX-License-Identifier: MPL-2.0 diff --git a/projects/common/src/main/resources/assets/computercraft/models/block/turtle_trans_overlay.json b/projects/common/src/main/resources/assets/computercraft/models/block/turtle_trans_overlay.json new file mode 100644 index 000000000..4260d72e6 --- /dev/null +++ b/projects/common/src/main/resources/assets/computercraft/models/block/turtle_trans_overlay.json @@ -0,0 +1,38 @@ +{ + "parent": "block/block", + "textures": { + "particle": "computercraft:block/turtle_trans_overlay", + "texture": "computercraft:block/turtle_trans_overlay" + }, + "elements": [ + { + "name": "Flag", + "from": [1.5, 13.5, 10.5], + "to": [2, 16.5, 15.5], + "rotation": {"angle": 22.5, "axis": "x", "origin": [2, 11, 10.75]}, + "faces": { + "north": {"uv": [0, 0, 1, 5], "texture": "#texture"}, + "east": {"uv": [0, 0, 7, 5], "texture": "#texture"}, + "south": {"uv": [0, 0, 1, 5], "texture": "#texture"}, + "west": {"uv": [0, 0, 7, 5], "texture": "#texture"}, + "up": {"uv": [15, 0, 16, 5], "texture": "#texture"}, + "down": {"uv": [15, 0, 16, 5], "texture": "#texture"} + } + }, + { + "name": "Stick", + "from": [1.5, 10.5, 10.5], + "to": [2, 13.5, 11], + "rotation": {"angle": 22.5, "axis": "x", "origin": [2, 11, 10.75]}, + "faces": { + "north": {"uv": [12, 0, 13, 6], "texture": "#texture"}, + "east": {"uv": [13, 0, 14, 6], "texture": "#texture"}, + "south": {"uv": [12, 0, 13, 6], "texture": "#texture"}, + "west": {"uv": [13, 0, 14, 6], "texture": "#texture"}, + "up": {"uv": [12, 6, 13, 7], "texture": "#texture"}, + "down": {"uv": [13, 6, 14, 7], "texture": "#texture"} + } + } + ], + "display": {} +} diff --git a/projects/common/src/main/resources/assets/computercraft/models/block/turtle_trans_overlay.json.license b/projects/common/src/main/resources/assets/computercraft/models/block/turtle_trans_overlay.json.license new file mode 100644 index 000000000..05aed57f6 --- /dev/null +++ b/projects/common/src/main/resources/assets/computercraft/models/block/turtle_trans_overlay.json.license @@ -0,0 +1,3 @@ +SPDX-FileCopyrightText: 2023 The CC: Tweaked Developers + +SPDX-License-Identifier: MPL-2.0 diff --git a/projects/common/src/main/resources/assets/computercraft/textures/block/turtle_rainbow_overlay.png b/projects/common/src/main/resources/assets/computercraft/textures/block/turtle_rainbow_overlay.png new file mode 100644 index 000000000..0bd213590 Binary files /dev/null and b/projects/common/src/main/resources/assets/computercraft/textures/block/turtle_rainbow_overlay.png differ diff --git a/projects/common/src/main/resources/assets/computercraft/textures/block/turtle_rainbow_overlay.png.license b/projects/common/src/main/resources/assets/computercraft/textures/block/turtle_rainbow_overlay.png.license new file mode 100644 index 000000000..05aed57f6 --- /dev/null +++ b/projects/common/src/main/resources/assets/computercraft/textures/block/turtle_rainbow_overlay.png.license @@ -0,0 +1,3 @@ +SPDX-FileCopyrightText: 2023 The CC: Tweaked Developers + +SPDX-License-Identifier: MPL-2.0 diff --git a/projects/common/src/main/resources/assets/computercraft/textures/block/turtle_trans_overlay.png b/projects/common/src/main/resources/assets/computercraft/textures/block/turtle_trans_overlay.png new file mode 100644 index 000000000..e299a4a21 Binary files /dev/null and b/projects/common/src/main/resources/assets/computercraft/textures/block/turtle_trans_overlay.png differ diff --git a/projects/common/src/main/resources/assets/computercraft/textures/block/turtle_trans_overlay.png.license b/projects/common/src/main/resources/assets/computercraft/textures/block/turtle_trans_overlay.png.license new file mode 100644 index 000000000..05aed57f6 --- /dev/null +++ b/projects/common/src/main/resources/assets/computercraft/textures/block/turtle_trans_overlay.png.license @@ -0,0 +1,3 @@ +SPDX-FileCopyrightText: 2023 The CC: Tweaked Developers + +SPDX-License-Identifier: MPL-2.0 diff --git a/projects/fabric/src/generated/resources/assets/computercraft/lang/en_us.json b/projects/fabric/src/generated/resources/assets/computercraft/lang/en_us.json index 80bcc51be..da9579c83 100644 --- a/projects/fabric/src/generated/resources/assets/computercraft/lang/en_us.json +++ b/projects/fabric/src/generated/resources/assets/computercraft/lang/en_us.json @@ -196,8 +196,6 @@ "itemGroup.computercraft": "ComputerCraft", "tracking_field.computercraft.avg": "%s (avg)", "tracking_field.computercraft.computer_tasks.name": "Tasks", - "tracking_field.computercraft.coroutines_created.name": "Coroutines created", - "tracking_field.computercraft.coroutines_dead.name": "Coroutines disposed", "tracking_field.computercraft.count": "%s (count)", "tracking_field.computercraft.fs.name": "Filesystem operations", "tracking_field.computercraft.http_download.name": "HTTP download", diff --git a/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/turtle_advanced_overlays/turtle_rainbow_overlay.json b/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/turtle_advanced_overlays/turtle_rainbow_overlay.json new file mode 100644 index 000000000..d9edb47a7 --- /dev/null +++ b/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/turtle_advanced_overlays/turtle_rainbow_overlay.json @@ -0,0 +1,16 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_dye": {"conditions": {"items": [{"tag": "c:dyes"}]}, "trigger": "minecraft:inventory_changed"}, + "has_the_recipe": { + "conditions": {"recipe": "computercraft:turtle_advanced_overlays/turtle_rainbow_overlay"}, + "trigger": "minecraft:recipe_unlocked" + }, + "has_turtle": { + "conditions": {"items": [{"items": ["computercraft:turtle_advanced"]}]}, + "trigger": "minecraft:inventory_changed" + } + }, + "requirements": [["has_turtle", "has_dye", "has_the_recipe"]], + "rewards": {"recipes": ["computercraft:turtle_advanced_overlays/turtle_rainbow_overlay"]} +} diff --git a/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/turtle_advanced_overlays/turtle_trans_overlay.json b/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/turtle_advanced_overlays/turtle_trans_overlay.json new file mode 100644 index 000000000..ec6b8faa7 --- /dev/null +++ b/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/turtle_advanced_overlays/turtle_trans_overlay.json @@ -0,0 +1,16 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_dye": {"conditions": {"items": [{"tag": "c:dyes"}]}, "trigger": "minecraft:inventory_changed"}, + "has_the_recipe": { + "conditions": {"recipe": "computercraft:turtle_advanced_overlays/turtle_trans_overlay"}, + "trigger": "minecraft:recipe_unlocked" + }, + "has_turtle": { + "conditions": {"items": [{"items": ["computercraft:turtle_advanced"]}]}, + "trigger": "minecraft:inventory_changed" + } + }, + "requirements": [["has_turtle", "has_dye", "has_the_recipe"]], + "rewards": {"recipes": ["computercraft:turtle_advanced_overlays/turtle_trans_overlay"]} +} diff --git a/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/turtle_normal_overlays/turtle_rainbow_overlay.json b/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/turtle_normal_overlays/turtle_rainbow_overlay.json new file mode 100644 index 000000000..4491e3fab --- /dev/null +++ b/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/turtle_normal_overlays/turtle_rainbow_overlay.json @@ -0,0 +1,16 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_dye": {"conditions": {"items": [{"tag": "c:dyes"}]}, "trigger": "minecraft:inventory_changed"}, + "has_the_recipe": { + "conditions": {"recipe": "computercraft:turtle_normal_overlays/turtle_rainbow_overlay"}, + "trigger": "minecraft:recipe_unlocked" + }, + "has_turtle": { + "conditions": {"items": [{"items": ["computercraft:turtle_normal"]}]}, + "trigger": "minecraft:inventory_changed" + } + }, + "requirements": [["has_turtle", "has_dye", "has_the_recipe"]], + "rewards": {"recipes": ["computercraft:turtle_normal_overlays/turtle_rainbow_overlay"]} +} diff --git a/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/turtle_normal_overlays/turtle_trans_overlay.json b/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/turtle_normal_overlays/turtle_trans_overlay.json new file mode 100644 index 000000000..a2993b8fd --- /dev/null +++ b/projects/fabric/src/generated/resources/data/computercraft/advancements/recipes/redstone/turtle_normal_overlays/turtle_trans_overlay.json @@ -0,0 +1,16 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_dye": {"conditions": {"items": [{"tag": "c:dyes"}]}, "trigger": "minecraft:inventory_changed"}, + "has_the_recipe": { + "conditions": {"recipe": "computercraft:turtle_normal_overlays/turtle_trans_overlay"}, + "trigger": "minecraft:recipe_unlocked" + }, + "has_turtle": { + "conditions": {"items": [{"items": ["computercraft:turtle_normal"]}]}, + "trigger": "minecraft:inventory_changed" + } + }, + "requirements": [["has_turtle", "has_dye", "has_the_recipe"]], + "rewards": {"recipes": ["computercraft:turtle_normal_overlays/turtle_trans_overlay"]} +} diff --git a/projects/fabric/src/generated/resources/data/computercraft/recipes/turtle_advanced_overlays/turtle_rainbow_overlay.json b/projects/fabric/src/generated/resources/data/computercraft/recipes/turtle_advanced_overlays/turtle_rainbow_overlay.json new file mode 100644 index 000000000..e002322bd --- /dev/null +++ b/projects/fabric/src/generated/resources/data/computercraft/recipes/turtle_advanced_overlays/turtle_rainbow_overlay.json @@ -0,0 +1,17 @@ +{ + "type": "computercraft:turtle_overlay", + "category": "redstone", + "group": "computercraft:turtle_advanced_overlay", + "ingredients": [ + {"tag": "c:red_dyes"}, + {"tag": "c:orange_dyes"}, + {"tag": "c:yellow_dyes"}, + {"tag": "c:green_dyes"}, + {"tag": "c:blue_dyes"}, + {"tag": "c:purple_dyes"}, + {"item": "minecraft:stick"}, + {"item": "computercraft:turtle_advanced"} + ], + "overlay": "computercraft:block/turtle_rainbow_overlay", + "result": {"item": "computercraft:turtle_advanced"} +} diff --git a/projects/fabric/src/generated/resources/data/computercraft/recipes/turtle_advanced_overlays/turtle_trans_overlay.json b/projects/fabric/src/generated/resources/data/computercraft/recipes/turtle_advanced_overlays/turtle_trans_overlay.json new file mode 100644 index 000000000..739cd63ca --- /dev/null +++ b/projects/fabric/src/generated/resources/data/computercraft/recipes/turtle_advanced_overlays/turtle_trans_overlay.json @@ -0,0 +1,14 @@ +{ + "type": "computercraft:turtle_overlay", + "category": "redstone", + "group": "computercraft:turtle_advanced_overlay", + "ingredients": [ + {"tag": "c:light_blue_dyes"}, + {"tag": "c:pink_dyes"}, + {"tag": "c:white_dyes"}, + {"item": "minecraft:stick"}, + {"item": "computercraft:turtle_advanced"} + ], + "overlay": "computercraft:block/turtle_trans_overlay", + "result": {"item": "computercraft:turtle_advanced"} +} diff --git a/projects/fabric/src/generated/resources/data/computercraft/recipes/turtle_normal_overlays/turtle_rainbow_overlay.json b/projects/fabric/src/generated/resources/data/computercraft/recipes/turtle_normal_overlays/turtle_rainbow_overlay.json new file mode 100644 index 000000000..f5f8eb8fc --- /dev/null +++ b/projects/fabric/src/generated/resources/data/computercraft/recipes/turtle_normal_overlays/turtle_rainbow_overlay.json @@ -0,0 +1,17 @@ +{ + "type": "computercraft:turtle_overlay", + "category": "redstone", + "group": "computercraft:turtle_normal_overlay", + "ingredients": [ + {"tag": "c:red_dyes"}, + {"tag": "c:orange_dyes"}, + {"tag": "c:yellow_dyes"}, + {"tag": "c:green_dyes"}, + {"tag": "c:blue_dyes"}, + {"tag": "c:purple_dyes"}, + {"item": "minecraft:stick"}, + {"item": "computercraft:turtle_normal"} + ], + "overlay": "computercraft:block/turtle_rainbow_overlay", + "result": {"item": "computercraft:turtle_normal"} +} diff --git a/projects/fabric/src/generated/resources/data/computercraft/recipes/turtle_normal_overlays/turtle_trans_overlay.json b/projects/fabric/src/generated/resources/data/computercraft/recipes/turtle_normal_overlays/turtle_trans_overlay.json new file mode 100644 index 000000000..a64e2df11 --- /dev/null +++ b/projects/fabric/src/generated/resources/data/computercraft/recipes/turtle_normal_overlays/turtle_trans_overlay.json @@ -0,0 +1,14 @@ +{ + "type": "computercraft:turtle_overlay", + "category": "redstone", + "group": "computercraft:turtle_normal_overlay", + "ingredients": [ + {"tag": "c:light_blue_dyes"}, + {"tag": "c:pink_dyes"}, + {"tag": "c:white_dyes"}, + {"item": "minecraft:stick"}, + {"item": "computercraft:turtle_normal"} + ], + "overlay": "computercraft:block/turtle_trans_overlay", + "result": {"item": "computercraft:turtle_normal"} +} diff --git a/projects/forge/src/generated/resources/assets/computercraft/lang/en_us.json b/projects/forge/src/generated/resources/assets/computercraft/lang/en_us.json index 80bcc51be..da9579c83 100644 --- a/projects/forge/src/generated/resources/assets/computercraft/lang/en_us.json +++ b/projects/forge/src/generated/resources/assets/computercraft/lang/en_us.json @@ -196,8 +196,6 @@ "itemGroup.computercraft": "ComputerCraft", "tracking_field.computercraft.avg": "%s (avg)", "tracking_field.computercraft.computer_tasks.name": "Tasks", - "tracking_field.computercraft.coroutines_created.name": "Coroutines created", - "tracking_field.computercraft.coroutines_dead.name": "Coroutines disposed", "tracking_field.computercraft.count": "%s (count)", "tracking_field.computercraft.fs.name": "Filesystem operations", "tracking_field.computercraft.http_download.name": "HTTP download", diff --git a/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/turtle_advanced_overlays/turtle_rainbow_overlay.json b/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/turtle_advanced_overlays/turtle_rainbow_overlay.json new file mode 100644 index 000000000..f130b5bde --- /dev/null +++ b/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/turtle_advanced_overlays/turtle_rainbow_overlay.json @@ -0,0 +1,16 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_dye": {"conditions": {"items": [{"tag": "forge:dyes"}]}, "trigger": "minecraft:inventory_changed"}, + "has_the_recipe": { + "conditions": {"recipe": "computercraft:turtle_advanced_overlays/turtle_rainbow_overlay"}, + "trigger": "minecraft:recipe_unlocked" + }, + "has_turtle": { + "conditions": {"items": [{"items": ["computercraft:turtle_advanced"]}]}, + "trigger": "minecraft:inventory_changed" + } + }, + "requirements": [["has_turtle", "has_dye", "has_the_recipe"]], + "rewards": {"recipes": ["computercraft:turtle_advanced_overlays/turtle_rainbow_overlay"]} +} diff --git a/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/turtle_advanced_overlays/turtle_trans_overlay.json b/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/turtle_advanced_overlays/turtle_trans_overlay.json new file mode 100644 index 000000000..012b9ce3a --- /dev/null +++ b/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/turtle_advanced_overlays/turtle_trans_overlay.json @@ -0,0 +1,16 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_dye": {"conditions": {"items": [{"tag": "forge:dyes"}]}, "trigger": "minecraft:inventory_changed"}, + "has_the_recipe": { + "conditions": {"recipe": "computercraft:turtle_advanced_overlays/turtle_trans_overlay"}, + "trigger": "minecraft:recipe_unlocked" + }, + "has_turtle": { + "conditions": {"items": [{"items": ["computercraft:turtle_advanced"]}]}, + "trigger": "minecraft:inventory_changed" + } + }, + "requirements": [["has_turtle", "has_dye", "has_the_recipe"]], + "rewards": {"recipes": ["computercraft:turtle_advanced_overlays/turtle_trans_overlay"]} +} diff --git a/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/turtle_normal_overlays/turtle_rainbow_overlay.json b/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/turtle_normal_overlays/turtle_rainbow_overlay.json new file mode 100644 index 000000000..a6375ccdf --- /dev/null +++ b/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/turtle_normal_overlays/turtle_rainbow_overlay.json @@ -0,0 +1,16 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_dye": {"conditions": {"items": [{"tag": "forge:dyes"}]}, "trigger": "minecraft:inventory_changed"}, + "has_the_recipe": { + "conditions": {"recipe": "computercraft:turtle_normal_overlays/turtle_rainbow_overlay"}, + "trigger": "minecraft:recipe_unlocked" + }, + "has_turtle": { + "conditions": {"items": [{"items": ["computercraft:turtle_normal"]}]}, + "trigger": "minecraft:inventory_changed" + } + }, + "requirements": [["has_turtle", "has_dye", "has_the_recipe"]], + "rewards": {"recipes": ["computercraft:turtle_normal_overlays/turtle_rainbow_overlay"]} +} diff --git a/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/turtle_normal_overlays/turtle_trans_overlay.json b/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/turtle_normal_overlays/turtle_trans_overlay.json new file mode 100644 index 000000000..93e9b00b8 --- /dev/null +++ b/projects/forge/src/generated/resources/data/computercraft/advancements/recipes/redstone/turtle_normal_overlays/turtle_trans_overlay.json @@ -0,0 +1,16 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_dye": {"conditions": {"items": [{"tag": "forge:dyes"}]}, "trigger": "minecraft:inventory_changed"}, + "has_the_recipe": { + "conditions": {"recipe": "computercraft:turtle_normal_overlays/turtle_trans_overlay"}, + "trigger": "minecraft:recipe_unlocked" + }, + "has_turtle": { + "conditions": {"items": [{"items": ["computercraft:turtle_normal"]}]}, + "trigger": "minecraft:inventory_changed" + } + }, + "requirements": [["has_turtle", "has_dye", "has_the_recipe"]], + "rewards": {"recipes": ["computercraft:turtle_normal_overlays/turtle_trans_overlay"]} +} diff --git a/projects/forge/src/generated/resources/data/computercraft/recipes/turtle_advanced_overlays/turtle_rainbow_overlay.json b/projects/forge/src/generated/resources/data/computercraft/recipes/turtle_advanced_overlays/turtle_rainbow_overlay.json new file mode 100644 index 000000000..20658c238 --- /dev/null +++ b/projects/forge/src/generated/resources/data/computercraft/recipes/turtle_advanced_overlays/turtle_rainbow_overlay.json @@ -0,0 +1,17 @@ +{ + "type": "computercraft:turtle_overlay", + "category": "redstone", + "group": "computercraft:turtle_advanced_overlay", + "ingredients": [ + {"tag": "forge:dyes/red"}, + {"tag": "forge:dyes/orange"}, + {"tag": "forge:dyes/yellow"}, + {"tag": "forge:dyes/green"}, + {"tag": "forge:dyes/blue"}, + {"tag": "forge:dyes/purple"}, + {"item": "minecraft:stick"}, + {"item": "computercraft:turtle_advanced"} + ], + "overlay": "computercraft:block/turtle_rainbow_overlay", + "result": {"item": "computercraft:turtle_advanced"} +} diff --git a/projects/forge/src/generated/resources/data/computercraft/recipes/turtle_advanced_overlays/turtle_trans_overlay.json b/projects/forge/src/generated/resources/data/computercraft/recipes/turtle_advanced_overlays/turtle_trans_overlay.json new file mode 100644 index 000000000..fcfc71b45 --- /dev/null +++ b/projects/forge/src/generated/resources/data/computercraft/recipes/turtle_advanced_overlays/turtle_trans_overlay.json @@ -0,0 +1,14 @@ +{ + "type": "computercraft:turtle_overlay", + "category": "redstone", + "group": "computercraft:turtle_advanced_overlay", + "ingredients": [ + {"tag": "forge:dyes/light_blue"}, + {"tag": "forge:dyes/pink"}, + {"tag": "forge:dyes/white"}, + {"item": "minecraft:stick"}, + {"item": "computercraft:turtle_advanced"} + ], + "overlay": "computercraft:block/turtle_trans_overlay", + "result": {"item": "computercraft:turtle_advanced"} +} diff --git a/projects/forge/src/generated/resources/data/computercraft/recipes/turtle_normal_overlays/turtle_rainbow_overlay.json b/projects/forge/src/generated/resources/data/computercraft/recipes/turtle_normal_overlays/turtle_rainbow_overlay.json new file mode 100644 index 000000000..daa1fe729 --- /dev/null +++ b/projects/forge/src/generated/resources/data/computercraft/recipes/turtle_normal_overlays/turtle_rainbow_overlay.json @@ -0,0 +1,17 @@ +{ + "type": "computercraft:turtle_overlay", + "category": "redstone", + "group": "computercraft:turtle_normal_overlay", + "ingredients": [ + {"tag": "forge:dyes/red"}, + {"tag": "forge:dyes/orange"}, + {"tag": "forge:dyes/yellow"}, + {"tag": "forge:dyes/green"}, + {"tag": "forge:dyes/blue"}, + {"tag": "forge:dyes/purple"}, + {"item": "minecraft:stick"}, + {"item": "computercraft:turtle_normal"} + ], + "overlay": "computercraft:block/turtle_rainbow_overlay", + "result": {"item": "computercraft:turtle_normal"} +} diff --git a/projects/forge/src/generated/resources/data/computercraft/recipes/turtle_normal_overlays/turtle_trans_overlay.json b/projects/forge/src/generated/resources/data/computercraft/recipes/turtle_normal_overlays/turtle_trans_overlay.json new file mode 100644 index 000000000..247ec2fa3 --- /dev/null +++ b/projects/forge/src/generated/resources/data/computercraft/recipes/turtle_normal_overlays/turtle_trans_overlay.json @@ -0,0 +1,14 @@ +{ + "type": "computercraft:turtle_overlay", + "category": "redstone", + "group": "computercraft:turtle_normal_overlay", + "ingredients": [ + {"tag": "forge:dyes/light_blue"}, + {"tag": "forge:dyes/pink"}, + {"tag": "forge:dyes/white"}, + {"item": "minecraft:stick"}, + {"item": "computercraft:turtle_normal"} + ], + "overlay": "computercraft:block/turtle_trans_overlay", + "result": {"item": "computercraft:turtle_normal"} +}