From f0305d702743ebcf798393ac7ebc336a60fb1a6f Mon Sep 17 00:00:00 2001 From: lcy0x1 Date: Sun, 9 Jan 2022 18:02:21 -0800 Subject: [PATCH 01/29] check funnel first to fix bug --- .../relays/belt/transport/BeltInventory.java | 21 ++++++++++--------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/transport/BeltInventory.java b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/transport/BeltInventory.java index f431cdeab..6ba231609 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/transport/BeltInventory.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/transport/BeltInventory.java @@ -58,10 +58,10 @@ public class BeltInventory { belt.setChanged(); belt.sendData(); } - + if (belt.getSpeed() == 0) return; - + // Reverse item collection if belt just reversed if (beltMovementPositive != belt.getDirectionAwareBeltMovementSpeed() > 0) { beltMovementPositive = !beltMovementPositive; @@ -107,7 +107,7 @@ public class BeltInventory { // Don't move if held by processing (client) if (world.isClientSide && currentItem.locked) continue; - + // Don't move if held by external components if (currentItem.lockedExternally) { currentItem.lockedExternally = false; @@ -149,7 +149,12 @@ public class BeltInventory { if (currentItem.locked) continue; } - + + + // Belt Funnels + if (BeltFunnelInteractionHandler.checkForFunnels(this, currentItem, nextOffset)) + continue; + if (noMovement) continue; @@ -157,10 +162,6 @@ public class BeltInventory { if (BeltTunnelInteractionHandler.flapTunnelsAndCheckIfStuck(this, currentItem, nextOffset)) continue; - // Belt Funnels - if (BeltFunnelInteractionHandler.checkForFunnels(this, currentItem, nextOffset)) - continue; - // Horizontal Crushing Wheels if (BeltCrusherInteractionHandler.checkForCrushers(this, currentItem, nextOffset)) continue; @@ -243,7 +244,7 @@ public class BeltInventory { belt.sendData(); return false; } - + if (noMovement) return false; @@ -449,5 +450,5 @@ public class BeltInventory { public List getTransportedItems() { return items; } - + } From 1129b04843697715f9ae68e3c73434738195f772 Mon Sep 17 00:00:00 2001 From: Amelia Clarke Date: Fri, 21 Jan 2022 18:36:08 -0600 Subject: [PATCH 02/29] Improve consistency in advancement texts This commit fixes issues with inconsistent capitalization in advancement names and descriptions. It also fixes miscellaneous other minor typos and inconsistencies. --- .../create/lang/default/advancements.json | 84 +++++++++---------- 1 file changed, 42 insertions(+), 42 deletions(-) diff --git a/src/main/resources/assets/create/lang/default/advancements.json b/src/main/resources/assets/create/lang/default/advancements.json index 6e86889c9..d931bcca4 100644 --- a/src/main/resources/assets/create/lang/default/advancements.json +++ b/src/main/resources/assets/create/lang/default/advancements.json @@ -8,23 +8,23 @@ "advancement.create.its_alive": "It's Alive!", "advancement.create.its_alive.desc": "Watch your first kinetic component spin.", "advancement.create.shifting_gears": "Shifting Gears", - "advancement.create.shifting_gears.desc": "Connect a Large Cogwheel to a Small Cogwheel, allowing you to change the speed of your contraption.", + "advancement.create.shifting_gears.desc": "Connect a Large Cogwheel to a Small Cogwheel, allowing you to change the speed of your Contraption.", "advancement.create.overstressed": "Overstressed", "advancement.create.overstressed.desc": "Experience the limits of stress firsthand.", "advancement.create.belt": "Kelp Drive", "advancement.create.belt.desc": "Connect two shafts with a Mechanical Belt.", - "advancement.create.tunnel": "Take cover!", - "advancement.create.tunnel.desc": "Embellish your mechanical belt with a Tunnel.", + "advancement.create.tunnel": "Take Cover!", + "advancement.create.tunnel.desc": "Embellish your Mechanical Belt with a Tunnel.", "advancement.create.splitter_tunnel": "Divide and Conquer", "advancement.create.splitter_tunnel.desc": "Create a splitter with a group of Brass Tunnels.", - "advancement.create.chute": "Tumbling down", - "advancement.create.chute.desc": "Place a chute, the vertical counterpart of the belt.", + "advancement.create.chute": "Tumbling Down", + "advancement.create.chute.desc": "Place a Chute, the vertical counterpart of the Belt.", "advancement.create.upward_chute": "Aerial Abduction", - "advancement.create.upward_chute.desc": "Watch a thrown item fly up into a fan-powered chute.", + "advancement.create.upward_chute.desc": "Watch a thrown item fly up into a Fan-powered Chute.", "advancement.create.belt_funnel": "Funnels' Flappy Danglers", - "advancement.create.belt_funnel.desc": "Place a sideways funnel on top of a belt or depot to create a special type.", + "advancement.create.belt_funnel.desc": "Place a sideways Funnel on top of a Belt or Depot to create a special type.", "advancement.create.belt_funnel_kiss": "The Parrots and the Flaps", - "advancement.create.belt_funnel_kiss.desc": "Make two belt mounted funnels kiss.", + "advancement.create.belt_funnel_kiss.desc": "Make two Belt-mounted Funnels kiss.", "advancement.create.fan": "Mechanical Airbender", "advancement.create.fan.desc": "Ride the stream of air provided by an Encased Fan.", "advancement.create.fan_lava": "Geothermal Space Heater", @@ -32,33 +32,33 @@ "advancement.create.fan_water": "Wacky Washing", "advancement.create.fan_water.desc": "Get caught in a stream of air that washes things.", "advancement.create.fan_smoke": "Mechanical Bellows", - "advancement.create.fan_smoke.desc": "Get caught in a stream of air that smokes items.", + "advancement.create.fan_smoke.desc": "Get caught in a stream of air that smokes things.", "advancement.create.wrench": "Configure Conveniently", - "advancement.create.wrench.desc": "Create a Wrench to aid you in building your contraptions.", + "advancement.create.wrench.desc": "Create a Wrench to aid you in building your Contraptions.", "advancement.create.goggles": "Stress-O-Vision", "advancement.create.goggles.desc": "Create some Engineer's Goggles to aid you in getting more kinetic information from components.", "advancement.create.speedometer": "But How Fast Exactly?", - "advancement.create.speedometer.desc": "Place and power a Speedometer. Look at it through your goggles to read its exact value.", + "advancement.create.speedometer.desc": "Place and power a Speedometer. Look at it through your Goggles to read its exact value.", "advancement.create.stressometer": "But How Stressed Exactly?", - "advancement.create.stressometer.desc": "Place and power a Stressometer. Look at it through your goggles to read its exact value.", + "advancement.create.stressometer.desc": "Place and power a Stressometer. Look at it through your Goggles to read its exact value.", "advancement.create.aesthetics": "Boom, Aesthetics!", - "advancement.create.aesthetics.desc": "Place brackets on a shaft, pipe and cogwheel.", + "advancement.create.aesthetics.desc": "Place Brackets on a Shaft, Pipe, and Cogwheel.", "advancement.create.reinforced": "Boom, Reinforced!", - "advancement.create.reinforced.desc": "Use fitting casing blocks on a shaft, pipe and mechanical belt.", + "advancement.create.reinforced.desc": "Use fitting Casing blocks on a Shaft, Pipe, and Mechanical Belt.", "advancement.create.water_wheel": "Harnessing Hydraulics", "advancement.create.water_wheel.desc": "Place a Water Wheel and try getting it to spin!", - "advancement.create.chocolate_wheel": "Tasteful power", - "advancement.create.chocolate_wheel.desc": "Run a Water Wheel with molten Chocolate.", + "advancement.create.chocolate_wheel": "Tasteful Power", + "advancement.create.chocolate_wheel.desc": "Run a Water Wheel with Molten Chocolate.", "advancement.create.lava_wheel": "Magma Wheel", "advancement.create.lava_wheel.desc": "This shouldn't have worked.", - "advancement.create.cuckoo": "Is it time?", - "advancement.create.cuckoo.desc": "Witness a cuckhoo clock announce bedtime.", + "advancement.create.cuckoo": "Is It Time?", + "advancement.create.cuckoo.desc": "Witness a Cuckoo Clock announce bedtime.", "advancement.create.millstone": "Pocket Crusher", "advancement.create.millstone.desc": "Place and power a Millstone.", - "advancement.create.windmill": "A mild Breeze", + "advancement.create.windmill": "A Mild Breeze", "advancement.create.windmill.desc": "Assemble a windmill.", - "advancement.create.maxed_windmill": "A strong breeze", + "advancement.create.maxed_windmill": "A Strong Breeze", "advancement.create.maxed_windmill.desc": "Assemble a windmill of maximum strength.", "advancement.create.andesite_casing": "The Andesite Age", "advancement.create.andesite_casing.desc": "Use some Andesite Alloy and Wood to create a basic Casing.", @@ -76,7 +76,7 @@ "advancement.create.basin.desc": "Place a Basin and try throwing items into it.", "advancement.create.mixer": "Mixin' It Up", "advancement.create.mixer.desc": "Place a Mechanical Mixer above the Basin, power it, and start mixing some ingredients.", - "advancement.create.blaze_burner": "A living Fireplace", + "advancement.create.blaze_burner": "A Living Fireplace", "advancement.create.blaze_burner.desc": "Obtain a Blaze Burner.", "advancement.create.compact": "Automated Compacting", "advancement.create.compact.desc": "Use a Press and a Basin to compact some items.", @@ -89,43 +89,43 @@ "advancement.create.copper_casing.desc": "Use some Copper Sheets and Wood to create some Copper Casings.", "advancement.create.spout": "Sploosh", - "advancement.create.spout.desc": "Watch a fluid item being filled using a spout.", + "advancement.create.spout.desc": "Watch a fluid item being filled using a Spout.", "advancement.create.spout_potion": "Global Brewery", - "advancement.create.spout_potion.desc": "Watch a spout fill a bottle with potion fluid.", - "advancement.create.chocolate": "A world of Imagination", - "advancement.create.chocolate.desc": "Obtain a bucket of Molten Chocolate.", + "advancement.create.spout_potion.desc": "Watch a Spout fill a Bottle with potion fluid.", + "advancement.create.chocolate": "A World of Imagination", + "advancement.create.chocolate.desc": "Obtain a Bucket of Molten Chocolate.", "advancement.create.item_drain": "Tumble Draining", - "advancement.create.item_drain.desc": "Watch a fluid item being emptied by an item drain.", - "advancement.create.chained_item_drain": "Let it roll!", - "advancement.create.chained_item_drain.desc": "Watch an item roll across several chained item drains.", + "advancement.create.item_drain.desc": "Watch a fluid item being emptied by an Item Drain.", + "advancement.create.chained_item_drain": "Let It Roll!", + "advancement.create.chained_item_drain.desc": "Watch an item roll across several chained Item Drains.", "advancement.create.glass_pipe": "Flow Spy", - "advancement.create.glass_pipe.desc": "Watch fluid propagate through a windowed fluid pipe. Straight fluid pipes become windowed when a wrench is used on them.", - "advancement.create.pipe_collision": "Never cross the Streams!", + "advancement.create.glass_pipe.desc": "Watch fluid propagate through a windowed Fluid Pipe. Straight Fluid Pipes become windowed when a Wrench is used on them.", + "advancement.create.pipe_collision": "Never Cross the Streams!", "advancement.create.pipe_collision.desc": "Watch two fluids meet in your pipe network.", - "advancement.create.pipe_spill": "There's a leak!", - "advancement.create.pipe_spill.desc": "Watch an open end of a pipe take or place fluids into the world.", + "advancement.create.pipe_spill": "There's a Leak!", + "advancement.create.pipe_spill.desc": "Watch an open end of a Pipe take or place fluids into the world.", "advancement.create.hose_pulley": "Industrial Spillage", - "advancement.create.hose_pulley.desc": "Lower a hose pulley and watch it drain or fill a body of fluid.", + "advancement.create.hose_pulley.desc": "Lower a Hose Pulley and watch it drain or fill a body of fluid.", "advancement.create.infinite_water": "Draining the Ocean", - "advancement.create.infinite_water.desc": "Pump from a body of Water large enough to be considered Infinite.", + "advancement.create.infinite_water.desc": "Pump from a body of Water large enough to be considered infinite.", "advancement.create.infinite_lava": "Draining the Planets' Core", - "advancement.create.infinite_lava.desc": "Pump from a body of Lava large enough to be considered Infinite.", + "advancement.create.infinite_lava.desc": "Pump from a body of Lava large enough to be considered infinite.", "advancement.create.infinite_chocolate": "Drowning in Imagination", - "advancement.create.infinite_chocolate.desc": "Pump from a body of Molten Chocolate large enough to be considered Infinite.", + "advancement.create.infinite_chocolate.desc": "Pump from a body of Molten Chocolate large enough to be considered infinite.", "advancement.create.crafter": "Automated Assembly", "advancement.create.crafter.desc": "Place and power some Mechanical Crafters.", - "advancement.create.clockwork_bearing": "Contraption o'clock", - "advancement.create.clockwork_bearing.desc": "Assemble a Structure mounted on a Clockwork Bearing.", + "advancement.create.clockwork_bearing": "Contraption O'Clock", + "advancement.create.clockwork_bearing.desc": "Assemble a structure mounted on a Clockwork Bearing.", "advancement.create.nixie_tube": "Signs of Style", "advancement.create.nixie_tube.desc": "Obtain and place down a pair of Nixie Tubes.", "advancement.create.deployer": "Poke, Place, and Attack", "advancement.create.deployer.desc": "Place and power a Deployer, the perfect reflection of yourself.", - "advancement.create.speed_controller": "Engineers hate him!", + "advancement.create.speed_controller": "Engineers Hate Him!", "advancement.create.speed_controller.desc": "Place a Rotation Speed Controller, the ultimate device for changing gear.", "advancement.create.flywheel": "Heart of the Factory", - "advancement.create.flywheel.desc": "Successfully connect an engine to the Flywheel.", - "advancement.create.overstress_flywheel": "High levels of Stress", + "advancement.create.flywheel.desc": "Successfully connect a Furnace Engine to the Flywheel.", + "advancement.create.overstress_flywheel": "High Levels of Stress", "advancement.create.overstress_flywheel.desc": "Overstress a Furnace Engine.", "advancement.create.precision_mechanism": "Complex Curiosities", "advancement.create.precision_mechanism.desc": "Assemble a Precision Mechanism.", @@ -142,7 +142,7 @@ "advancement.create.crushing_wheel": "A Pair of Giants", "advancement.create.crushing_wheel.desc": "Create some Crushing Wheels to break down more materials more effectively.", "advancement.create.blaze_cake": "Sugar Rush", - "advancement.create.blaze_cake.desc": "Bake your blaze burner a special cake.", + "advancement.create.blaze_cake.desc": "Bake your Blaze Burner a special cake.", "advancement.create.wand_of_symmetry": "Radiant Mirrors", "advancement.create.wand_of_symmetry.desc": "Craft a Staff of Symmetry.", From f86149b66a7e1e7ec27c2a1b63aa88b7a8b84870 Mon Sep 17 00:00:00 2001 From: FortressNebula Date: Thu, 3 Feb 2022 20:18:27 +0000 Subject: [PATCH 03/29] Change the way CopperBlockSet generates block models - If the specified name and end texture name are equal, then generate a cube_all model instead. Purely for neatness' sake. --- .../create/foundation/block/CopperBlockSet.java | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/simibubi/create/foundation/block/CopperBlockSet.java b/src/main/java/com/simibubi/create/foundation/block/CopperBlockSet.java index fe3dc7ceb..969c0a886 100644 --- a/src/main/java/com/simibubi/create/foundation/block/CopperBlockSet.java +++ b/src/main/java/com/simibubi/create/foundation/block/CopperBlockSet.java @@ -4,6 +4,7 @@ import java.util.EnumMap; import java.util.HashMap; import java.util.Locale; import java.util.Map; +import java.util.Objects; import java.util.function.Supplier; import org.apache.commons.lang3.ArrayUtils; @@ -228,10 +229,18 @@ public class CopperBlockSet { String path = block.getRegistryName() .getPath(); String baseLoc = ModelProvider.BLOCK_FOLDER + "/" + blocks.generalDirectory + getWeatherStatePrefix(state); + ResourceLocation texture = prov.modLoc(baseLoc + blocks.getName()); - ResourceLocation endTexture = prov.modLoc(baseLoc + blocks.getEndTextureName()); - prov.simpleBlock(block, prov.models() - .cubeColumn(path, texture, endTexture)); + if (Objects.equals(blocks.getName(), blocks.getEndTextureName())) { + // End texture and base texture are equal, so we should use cube_all. + prov.simpleBlock(block, prov.models().cubeAll(path, texture)); + } else { + // End texture and base texture aren't equal, so we should use cube_column. + ResourceLocation endTexture = prov.modLoc(baseLoc + blocks.getEndTextureName()); + prov.simpleBlock(block, prov.models() + .cubeColumn(path, texture, endTexture)); + } + } @Override From c23cbbb4be11266fa874124c0603cd4c304063d0 Mon Sep 17 00:00:00 2001 From: FortressNebula Date: Sat, 12 Feb 2022 12:27:30 +0000 Subject: [PATCH 04/29] Add condition support for mechanical crafting recipes - Copied over the condition functions from ProcessingRecipeBuilder - Added recipeConditions variable - Copied over json section for dealing with conditions from ProcessingRecipeBuilder --- .../MechanicalCraftingRecipeBuilder.java | 35 +++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/simibubi/create/foundation/data/recipe/MechanicalCraftingRecipeBuilder.java b/src/main/java/com/simibubi/create/foundation/data/recipe/MechanicalCraftingRecipeBuilder.java index c85d4ecdf..cf8fb24f1 100644 --- a/src/main/java/com/simibubi/create/foundation/data/recipe/MechanicalCraftingRecipeBuilder.java +++ b/src/main/java/com/simibubi/create/foundation/data/recipe/MechanicalCraftingRecipeBuilder.java @@ -1,5 +1,6 @@ package com.simibubi.create.foundation.data.recipe; +import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Map.Entry; @@ -15,6 +16,8 @@ import com.google.gson.JsonArray; import com.google.gson.JsonObject; import com.simibubi.create.AllRecipeTypes; +import com.simibubi.create.content.contraptions.processing.ProcessingRecipeBuilder; + import net.minecraft.data.recipes.FinishedRecipe; import net.minecraft.resources.ResourceLocation; import net.minecraft.tags.SetTag; @@ -22,6 +25,10 @@ import net.minecraft.world.item.Item; import net.minecraft.world.item.crafting.Ingredient; import net.minecraft.world.item.crafting.RecipeSerializer; import net.minecraft.world.level.ItemLike; +import net.minecraftforge.common.crafting.CraftingHelper; +import net.minecraftforge.common.crafting.conditions.ICondition; +import net.minecraftforge.common.crafting.conditions.ModLoadedCondition; +import net.minecraftforge.common.crafting.conditions.NotCondition; import net.minecraftforge.registries.ForgeRegistries; public class MechanicalCraftingRecipeBuilder { @@ -31,11 +38,13 @@ public class MechanicalCraftingRecipeBuilder { private final List pattern = Lists.newArrayList(); private final Map key = Maps.newLinkedHashMap(); private boolean acceptMirrored; + private List recipeConditions; public MechanicalCraftingRecipeBuilder(ItemLike p_i48261_1_, int p_i48261_2_) { result = p_i48261_1_.asItem(); count = p_i48261_2_; acceptMirrored = true; + recipeConditions = new ArrayList<>(); } /** @@ -127,7 +136,7 @@ public class MechanicalCraftingRecipeBuilder { public void build(Consumer p_200467_1_, ResourceLocation p_200467_2_) { validate(p_200467_2_); p_200467_1_ - .accept(new MechanicalCraftingRecipeBuilder.Result(p_200467_2_, result, count, pattern, key, acceptMirrored)); + .accept(new MechanicalCraftingRecipeBuilder.Result(p_200467_2_, result, count, pattern, key, acceptMirrored, recipeConditions)); } /** @@ -156,6 +165,19 @@ public class MechanicalCraftingRecipeBuilder { } } + public MechanicalCraftingRecipeBuilder whenModLoaded(String modid) { + return withCondition(new ModLoadedCondition(modid)); + } + + public MechanicalCraftingRecipeBuilder whenModMissing(String modid) { + return withCondition(new NotCondition(new ModLoadedCondition(modid))); + } + + public MechanicalCraftingRecipeBuilder withCondition(ICondition condition) { + recipeConditions.add(condition); + return this; + } + public class Result implements FinishedRecipe { private final ResourceLocation id; private final Item result; @@ -163,15 +185,17 @@ public class MechanicalCraftingRecipeBuilder { private final List pattern; private final Map key; private final boolean acceptMirrored; + private List recipeConditions; public Result(ResourceLocation p_i48271_2_, Item p_i48271_3_, int p_i48271_4_, List p_i48271_6_, - Map p_i48271_7_, boolean asymmetrical) { + Map p_i48271_7_, boolean asymmetrical, List recipeConditions) { this.id = p_i48271_2_; this.result = p_i48271_3_; this.count = p_i48271_4_; this.pattern = p_i48271_6_; this.key = p_i48271_7_; this.acceptMirrored = asymmetrical; + this.recipeConditions = recipeConditions; } public void serializeRecipeData(JsonObject p_218610_1_) { @@ -194,6 +218,13 @@ public class MechanicalCraftingRecipeBuilder { p_218610_1_.add("result", jsonobject1); p_218610_1_.addProperty("acceptMirrored", acceptMirrored); + + if (recipeConditions.isEmpty()) + return; + + JsonArray conds = new JsonArray(); + recipeConditions.forEach(c -> conds.add(CraftingHelper.serialize(c))); + p_218610_1_.add("conditions", conds); } public RecipeSerializer getType() { From 0220b32faf9ab9023a1dcd9d5bc4e2aca4e7ba9b Mon Sep 17 00:00:00 2001 From: FortressNebula Date: Sat, 12 Feb 2022 12:28:26 +0000 Subject: [PATCH 05/29] Revert "Add condition support for mechanical crafting recipes" This reverts commit c23cbbb4be11266fa874124c0603cd4c304063d0. --- .../MechanicalCraftingRecipeBuilder.java | 35 ++----------------- 1 file changed, 2 insertions(+), 33 deletions(-) diff --git a/src/main/java/com/simibubi/create/foundation/data/recipe/MechanicalCraftingRecipeBuilder.java b/src/main/java/com/simibubi/create/foundation/data/recipe/MechanicalCraftingRecipeBuilder.java index cf8fb24f1..c85d4ecdf 100644 --- a/src/main/java/com/simibubi/create/foundation/data/recipe/MechanicalCraftingRecipeBuilder.java +++ b/src/main/java/com/simibubi/create/foundation/data/recipe/MechanicalCraftingRecipeBuilder.java @@ -1,6 +1,5 @@ package com.simibubi.create.foundation.data.recipe; -import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Map.Entry; @@ -16,8 +15,6 @@ import com.google.gson.JsonArray; import com.google.gson.JsonObject; import com.simibubi.create.AllRecipeTypes; -import com.simibubi.create.content.contraptions.processing.ProcessingRecipeBuilder; - import net.minecraft.data.recipes.FinishedRecipe; import net.minecraft.resources.ResourceLocation; import net.minecraft.tags.SetTag; @@ -25,10 +22,6 @@ import net.minecraft.world.item.Item; import net.minecraft.world.item.crafting.Ingredient; import net.minecraft.world.item.crafting.RecipeSerializer; import net.minecraft.world.level.ItemLike; -import net.minecraftforge.common.crafting.CraftingHelper; -import net.minecraftforge.common.crafting.conditions.ICondition; -import net.minecraftforge.common.crafting.conditions.ModLoadedCondition; -import net.minecraftforge.common.crafting.conditions.NotCondition; import net.minecraftforge.registries.ForgeRegistries; public class MechanicalCraftingRecipeBuilder { @@ -38,13 +31,11 @@ public class MechanicalCraftingRecipeBuilder { private final List pattern = Lists.newArrayList(); private final Map key = Maps.newLinkedHashMap(); private boolean acceptMirrored; - private List recipeConditions; public MechanicalCraftingRecipeBuilder(ItemLike p_i48261_1_, int p_i48261_2_) { result = p_i48261_1_.asItem(); count = p_i48261_2_; acceptMirrored = true; - recipeConditions = new ArrayList<>(); } /** @@ -136,7 +127,7 @@ public class MechanicalCraftingRecipeBuilder { public void build(Consumer p_200467_1_, ResourceLocation p_200467_2_) { validate(p_200467_2_); p_200467_1_ - .accept(new MechanicalCraftingRecipeBuilder.Result(p_200467_2_, result, count, pattern, key, acceptMirrored, recipeConditions)); + .accept(new MechanicalCraftingRecipeBuilder.Result(p_200467_2_, result, count, pattern, key, acceptMirrored)); } /** @@ -165,19 +156,6 @@ public class MechanicalCraftingRecipeBuilder { } } - public MechanicalCraftingRecipeBuilder whenModLoaded(String modid) { - return withCondition(new ModLoadedCondition(modid)); - } - - public MechanicalCraftingRecipeBuilder whenModMissing(String modid) { - return withCondition(new NotCondition(new ModLoadedCondition(modid))); - } - - public MechanicalCraftingRecipeBuilder withCondition(ICondition condition) { - recipeConditions.add(condition); - return this; - } - public class Result implements FinishedRecipe { private final ResourceLocation id; private final Item result; @@ -185,17 +163,15 @@ public class MechanicalCraftingRecipeBuilder { private final List pattern; private final Map key; private final boolean acceptMirrored; - private List recipeConditions; public Result(ResourceLocation p_i48271_2_, Item p_i48271_3_, int p_i48271_4_, List p_i48271_6_, - Map p_i48271_7_, boolean asymmetrical, List recipeConditions) { + Map p_i48271_7_, boolean asymmetrical) { this.id = p_i48271_2_; this.result = p_i48271_3_; this.count = p_i48271_4_; this.pattern = p_i48271_6_; this.key = p_i48271_7_; this.acceptMirrored = asymmetrical; - this.recipeConditions = recipeConditions; } public void serializeRecipeData(JsonObject p_218610_1_) { @@ -218,13 +194,6 @@ public class MechanicalCraftingRecipeBuilder { p_218610_1_.add("result", jsonobject1); p_218610_1_.addProperty("acceptMirrored", acceptMirrored); - - if (recipeConditions.isEmpty()) - return; - - JsonArray conds = new JsonArray(); - recipeConditions.forEach(c -> conds.add(CraftingHelper.serialize(c))); - p_218610_1_.add("conditions", conds); } public RecipeSerializer getType() { From 219cf455c3c1f9ba8870a7d34747eb153c5e802f Mon Sep 17 00:00:00 2001 From: FortressNebula Date: Sat, 12 Feb 2022 12:31:19 +0000 Subject: [PATCH 06/29] Revert "Revert "Add condition support for mechanical crafting recipes"" This reverts commit 0220b32faf9ab9023a1dcd9d5bc4e2aca4e7ba9b. --- .../MechanicalCraftingRecipeBuilder.java | 35 +++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/simibubi/create/foundation/data/recipe/MechanicalCraftingRecipeBuilder.java b/src/main/java/com/simibubi/create/foundation/data/recipe/MechanicalCraftingRecipeBuilder.java index c85d4ecdf..cf8fb24f1 100644 --- a/src/main/java/com/simibubi/create/foundation/data/recipe/MechanicalCraftingRecipeBuilder.java +++ b/src/main/java/com/simibubi/create/foundation/data/recipe/MechanicalCraftingRecipeBuilder.java @@ -1,5 +1,6 @@ package com.simibubi.create.foundation.data.recipe; +import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Map.Entry; @@ -15,6 +16,8 @@ import com.google.gson.JsonArray; import com.google.gson.JsonObject; import com.simibubi.create.AllRecipeTypes; +import com.simibubi.create.content.contraptions.processing.ProcessingRecipeBuilder; + import net.minecraft.data.recipes.FinishedRecipe; import net.minecraft.resources.ResourceLocation; import net.minecraft.tags.SetTag; @@ -22,6 +25,10 @@ import net.minecraft.world.item.Item; import net.minecraft.world.item.crafting.Ingredient; import net.minecraft.world.item.crafting.RecipeSerializer; import net.minecraft.world.level.ItemLike; +import net.minecraftforge.common.crafting.CraftingHelper; +import net.minecraftforge.common.crafting.conditions.ICondition; +import net.minecraftforge.common.crafting.conditions.ModLoadedCondition; +import net.minecraftforge.common.crafting.conditions.NotCondition; import net.minecraftforge.registries.ForgeRegistries; public class MechanicalCraftingRecipeBuilder { @@ -31,11 +38,13 @@ public class MechanicalCraftingRecipeBuilder { private final List pattern = Lists.newArrayList(); private final Map key = Maps.newLinkedHashMap(); private boolean acceptMirrored; + private List recipeConditions; public MechanicalCraftingRecipeBuilder(ItemLike p_i48261_1_, int p_i48261_2_) { result = p_i48261_1_.asItem(); count = p_i48261_2_; acceptMirrored = true; + recipeConditions = new ArrayList<>(); } /** @@ -127,7 +136,7 @@ public class MechanicalCraftingRecipeBuilder { public void build(Consumer p_200467_1_, ResourceLocation p_200467_2_) { validate(p_200467_2_); p_200467_1_ - .accept(new MechanicalCraftingRecipeBuilder.Result(p_200467_2_, result, count, pattern, key, acceptMirrored)); + .accept(new MechanicalCraftingRecipeBuilder.Result(p_200467_2_, result, count, pattern, key, acceptMirrored, recipeConditions)); } /** @@ -156,6 +165,19 @@ public class MechanicalCraftingRecipeBuilder { } } + public MechanicalCraftingRecipeBuilder whenModLoaded(String modid) { + return withCondition(new ModLoadedCondition(modid)); + } + + public MechanicalCraftingRecipeBuilder whenModMissing(String modid) { + return withCondition(new NotCondition(new ModLoadedCondition(modid))); + } + + public MechanicalCraftingRecipeBuilder withCondition(ICondition condition) { + recipeConditions.add(condition); + return this; + } + public class Result implements FinishedRecipe { private final ResourceLocation id; private final Item result; @@ -163,15 +185,17 @@ public class MechanicalCraftingRecipeBuilder { private final List pattern; private final Map key; private final boolean acceptMirrored; + private List recipeConditions; public Result(ResourceLocation p_i48271_2_, Item p_i48271_3_, int p_i48271_4_, List p_i48271_6_, - Map p_i48271_7_, boolean asymmetrical) { + Map p_i48271_7_, boolean asymmetrical, List recipeConditions) { this.id = p_i48271_2_; this.result = p_i48271_3_; this.count = p_i48271_4_; this.pattern = p_i48271_6_; this.key = p_i48271_7_; this.acceptMirrored = asymmetrical; + this.recipeConditions = recipeConditions; } public void serializeRecipeData(JsonObject p_218610_1_) { @@ -194,6 +218,13 @@ public class MechanicalCraftingRecipeBuilder { p_218610_1_.add("result", jsonobject1); p_218610_1_.addProperty("acceptMirrored", acceptMirrored); + + if (recipeConditions.isEmpty()) + return; + + JsonArray conds = new JsonArray(); + recipeConditions.forEach(c -> conds.add(CraftingHelper.serialize(c))); + p_218610_1_.add("conditions", conds); } public RecipeSerializer getType() { From 379c24313347fba499a0a4890ddfa2f8e67b14e5 Mon Sep 17 00:00:00 2001 From: Jared Date: Tue, 15 Feb 2022 05:01:31 +0200 Subject: [PATCH 07/29] Fixed non ShapedRecipe / ShapelessRecipe recipes not being shown in JEI. Fixes #1112 --- .../com/simibubi/create/compat/jei/CreateJEI.java | 9 +++++---- .../jei/category/MechanicalCraftingCategory.java | 5 +++-- .../content/curiosities/tools/BlueprintItem.java | 11 ++++++----- 3 files changed, 14 insertions(+), 11 deletions(-) diff --git a/src/main/java/com/simibubi/create/compat/jei/CreateJEI.java b/src/main/java/com/simibubi/create/compat/jei/CreateJEI.java index 785b233b7..fb7aedf05 100644 --- a/src/main/java/com/simibubi/create/compat/jei/CreateJEI.java +++ b/src/main/java/com/simibubi/create/compat/jei/CreateJEI.java @@ -31,6 +31,7 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.item.crafting.*; import net.minecraft.world.level.ItemLike; +import net.minecraftforge.common.crafting.IShapedRecipe; import net.minecraftforge.fml.ModList; import javax.annotation.Nonnull; @@ -94,7 +95,7 @@ public class CreateJEI implements IModPlugin { .build(), autoShapeless = register("automatic_shapeless", MixingCategory::autoShapeless) - .recipes(r -> r.getSerializer() == RecipeSerializer.SHAPELESS_RECIPE && r.getIngredients() + .recipes(r -> r instanceof CraftingRecipe && !(r instanceof IShapedRecipe) && r.getIngredients() .size() > 1 && !MechanicalPressTileEntity.canCompress(r) && !AllRecipeTypes.isManualRecipe(r), BasinRecipe::convertShapeless) .catalyst(AllBlocks.MECHANICAL_MIXER::get) @@ -173,11 +174,11 @@ public class CreateJEI implements IModPlugin { .build(), autoShaped = register("automatic_shaped", MechanicalCraftingCategory::new) - .recipes(r -> r.getSerializer() == RecipeSerializer.SHAPELESS_RECIPE && r.getIngredients() + .recipes(r -> r instanceof CraftingRecipe && !(r instanceof IShapedRecipe) && r.getIngredients() .size() == 1) .recipes(r -> (r.getType() == RecipeType.CRAFTING - && r.getType() != AllRecipeTypes.MECHANICAL_CRAFTING.getType()) && (r instanceof ShapedRecipe) - && !AllRecipeTypes.isManualRecipe(r)) + && r.getType() != AllRecipeTypes.MECHANICAL_CRAFTING.getType()) && (r instanceof IShapedRecipe) + && !AllRecipeTypes.isManualRecipe(r)) .catalyst(AllBlocks.MECHANICAL_CRAFTER::get) .enableWhen(c -> c.allowRegularCraftingInCrafter) .build(), diff --git a/src/main/java/com/simibubi/create/compat/jei/category/MechanicalCraftingCategory.java b/src/main/java/com/simibubi/create/compat/jei/category/MechanicalCraftingCategory.java index fe5b7fa48..9aafdb81b 100644 --- a/src/main/java/com/simibubi/create/compat/jei/category/MechanicalCraftingCategory.java +++ b/src/main/java/com/simibubi/create/compat/jei/category/MechanicalCraftingCategory.java @@ -28,6 +28,7 @@ import net.minecraft.world.item.TooltipFlag; import net.minecraft.world.item.crafting.CraftingRecipe; import net.minecraft.world.item.crafting.Ingredient; import net.minecraft.world.item.crafting.ShapedRecipe; +import net.minecraftforge.common.crafting.IShapedRecipe; public class MechanicalCraftingCategory extends CreateRecipeCategory { @@ -86,11 +87,11 @@ public class MechanicalCraftingCategory extends CreateRecipeCategory ? ((IShapedRecipe) recipe).getRecipeWidth() : 1; } private static int getHeight(CraftingRecipe recipe) { - return recipe instanceof ShapedRecipe ? ((ShapedRecipe) recipe).getHeight() : 1; + return recipe instanceof IShapedRecipe ? ((IShapedRecipe) recipe).getRecipeHeight() : 1; } @Override diff --git a/src/main/java/com/simibubi/create/content/curiosities/tools/BlueprintItem.java b/src/main/java/com/simibubi/create/content/curiosities/tools/BlueprintItem.java index bd5eb9ecf..f4d9d4019 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/tools/BlueprintItem.java +++ b/src/main/java/com/simibubi/create/content/curiosities/tools/BlueprintItem.java @@ -28,6 +28,7 @@ import net.minecraft.world.item.crafting.Ingredient.Value; import net.minecraft.world.item.crafting.Recipe; import net.minecraft.world.item.crafting.ShapedRecipe; import net.minecraft.world.level.Level; +import net.minecraftforge.common.crafting.IShapedRecipe; import net.minecraftforge.common.crafting.MultiItemValue; import net.minecraftforge.fml.util.ObfuscationReflectionHelper; import net.minecraftforge.items.ItemStackHandler; @@ -79,12 +80,12 @@ public class BlueprintItem extends Item { inv.setStackInSlot(i, ItemStack.EMPTY); inv.setStackInSlot(9, recipe.getResultItem()); - if (recipe instanceof ShapedRecipe) { - ShapedRecipe shapedRecipe = (ShapedRecipe) recipe; - for (int row = 0; row < shapedRecipe.getHeight(); row++) - for (int col = 0; col < shapedRecipe.getWidth(); col++) + if (recipe instanceof IShapedRecipe) { + IShapedRecipe shapedRecipe = (IShapedRecipe) recipe; + for (int row = 0; row < shapedRecipe.getRecipeHeight(); row++) + for (int col = 0; col < shapedRecipe.getRecipeWidth(); col++) inv.setStackInSlot(row * 3 + col, - convertIngredientToFilter(ingredients.get(row * shapedRecipe.getWidth() + col))); + convertIngredientToFilter(ingredients.get(row * shapedRecipe.getRecipeWidth() + col))); } else { for (int i = 0; i < ingredients.size(); i++) inv.setStackInSlot(i, convertIngredientToFilter(ingredients.get(i))); From 51197d20341b5b3caf3d27e113c595e2f3f2cc96 Mon Sep 17 00:00:00 2001 From: Jared Date: Tue, 15 Feb 2022 05:17:31 +0200 Subject: [PATCH 08/29] Fix mechanical mixer not working for all non shaped recipes. Fixes #1424 --- .../components/mixer/MechanicalMixerTileEntity.java | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/mixer/MechanicalMixerTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/mixer/MechanicalMixerTileEntity.java index 53587571f..97c67f55c 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/mixer/MechanicalMixerTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/mixer/MechanicalMixerTileEntity.java @@ -32,6 +32,7 @@ import net.minecraft.sounds.SoundSource; import net.minecraft.util.Mth; import net.minecraft.world.Container; import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.crafting.CraftingRecipe; import net.minecraft.world.item.crafting.Recipe; import net.minecraft.world.item.crafting.RecipeSerializer; import net.minecraft.world.level.block.entity.BlockEntityType; @@ -40,6 +41,7 @@ import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.Vec3; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.common.crafting.IShapedRecipe; import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.IItemHandler; @@ -237,10 +239,10 @@ public class MechanicalMixerTileEntity extends BasinOperatingTileEntity { @Override protected boolean matchStaticFilters(Recipe r) { - return ((r.getSerializer() == RecipeSerializer.SHAPELESS_RECIPE - && AllConfigs.SERVER.recipes.allowShapelessInMixer.get() && r.getIngredients() + return ((r instanceof CraftingRecipe && !(r instanceof IShapedRecipe) + && AllConfigs.SERVER.recipes.allowShapelessInMixer.get() && r.getIngredients() .size() > 1 - && !MechanicalPressTileEntity.canCompress(r)) && !AllRecipeTypes.isManualRecipe(r) + && !MechanicalPressTileEntity.canCompress(r)) && !AllRecipeTypes.isManualRecipe(r) || r.getType() == AllRecipeTypes.MIXING.getType()); } @@ -289,9 +291,9 @@ public class MechanicalMixerTileEntity extends BasinOperatingTileEntity { // SoundEvents.BLOCK_STONE_BREAK boolean slow = Math.abs(getSpeed()) < 65; - if (slow && AnimationTickHolder.getTicks() % 2 == 0) + if (slow && AnimationTickHolder.getTicks() % 2 == 0) return; - if (runningTicks == 20) + if (runningTicks == 20) AllSoundEvents.MIXING.playAt(level, worldPosition, .75f, 1, true); } From 6420f541946c6459a4a964e74e3fa32680110755 Mon Sep 17 00:00:00 2001 From: PepperCode1 <44146161+PepperCode1@users.noreply.github.com> Date: Thu, 24 Feb 2022 17:32:33 -0800 Subject: [PATCH 09/29] Add tags for blaze burner fuel - `#create:blaze_burner_regular_fuel`: these items are treated like coal by the blaze burner if they cannot be used as fuel in a furnace - `#create:blaze_burner_special_fuel`: these items cause the blaze burner to become superheated - Fix equipable item attribute - Fix SandPaperItem overriding both getItemEnchantability and getEnchantmentValue --- src/generated/resources/.cache/cache | 2 + .../tags/items/blaze_burner_regular_fuel.json | 4 + .../tags/items/blaze_burner_special_fuel.json | 6 + .../java/com/simibubi/create/AllItems.java | 2 +- .../java/com/simibubi/create/AllTags.java | 5 +- .../base/KineticTileInstance.java | 120 +++++++++--------- .../base/SingleRotatingInstance.java | 46 +++---- .../burner/BlazeBurnerTileEntity.java | 7 +- .../curiosities/tools/SandPaperItem.java | 7 +- .../logistics/item/filter/ItemAttribute.java | 4 +- .../foundation/render/AllInstanceFormats.java | 8 +- .../foundation/render/AllProgramSpecs.java | 1 - 12 files changed, 113 insertions(+), 99 deletions(-) create mode 100644 src/generated/resources/data/create/tags/items/blaze_burner_regular_fuel.json create mode 100644 src/generated/resources/data/create/tags/items/blaze_burner_special_fuel.json diff --git a/src/generated/resources/.cache/cache b/src/generated/resources/.cache/cache index a1855cc4f..5189526df 100644 --- a/src/generated/resources/.cache/cache +++ b/src/generated/resources/.cache/cache @@ -5194,6 +5194,8 @@ d063e12c9ef75f39518c6d129ea35d833464d547 data/create/tags/blocks/toolboxes.json eac71740fb12bdb38b5dfaa2268613d7ba82b809 data/create/tags/blocks/windmill_sails.json 74700d556ca80c7a1db5fd4efb09c3ddb26cad66 data/create/tags/blocks/windowable.json 893a01e6004d6d8272bd1658e98da88bb572ee57 data/create/tags/blocks/wrench_pickup.json +74700d556ca80c7a1db5fd4efb09c3ddb26cad66 data/create/tags/items/blaze_burner_regular_fuel.json +97061ef67cac1fafd869493d06115b968bcb99bf data/create/tags/items/blaze_burner_special_fuel.json 5212172aee2239136c94f9868ad39ec2e17cf1c6 data/create/tags/items/create_ingots.json 4480f211f4a37bfee193eba945bc9f5a8d2c6e34 data/create/tags/items/crushed_ores.json bce28787b0271382842823d04a977912a88b01c2 data/create/tags/items/sandpaper.json diff --git a/src/generated/resources/data/create/tags/items/blaze_burner_regular_fuel.json b/src/generated/resources/data/create/tags/items/blaze_burner_regular_fuel.json new file mode 100644 index 000000000..5e8aecc98 --- /dev/null +++ b/src/generated/resources/data/create/tags/items/blaze_burner_regular_fuel.json @@ -0,0 +1,4 @@ +{ + "replace": false, + "values": [] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/tags/items/blaze_burner_special_fuel.json b/src/generated/resources/data/create/tags/items/blaze_burner_special_fuel.json new file mode 100644 index 000000000..db4cbee8b --- /dev/null +++ b/src/generated/resources/data/create/tags/items/blaze_burner_special_fuel.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "create:blaze_cake" + ] +} \ No newline at end of file diff --git a/src/main/java/com/simibubi/create/AllItems.java b/src/main/java/com/simibubi/create/AllItems.java index 84f52369b..cbdb13591 100644 --- a/src/main/java/com/simibubi/create/AllItems.java +++ b/src/main/java/com/simibubi/create/AllItems.java @@ -100,7 +100,7 @@ public class AllItems { .register(); public static final ItemEntry BLAZE_CAKE = REGISTRATE.item("blaze_cake", CombustibleItem::new) - .tag(AllItemTags.UPRIGHT_ON_BELT.tag) + .tag(AllItemTags.BLAZE_BURNER_SPECIAL_FUEL.tag, AllItemTags.UPRIGHT_ON_BELT.tag) .onRegister(i -> i.setBurnTime(6400)) .register(); diff --git a/src/main/java/com/simibubi/create/AllTags.java b/src/main/java/com/simibubi/create/AllTags.java index c7922a7f9..27e7a6457 100644 --- a/src/main/java/com/simibubi/create/AllTags.java +++ b/src/main/java/com/simibubi/create/AllTags.java @@ -106,6 +106,7 @@ public class AllTags { BRITTLE, FAN_HEATERS, FAN_TRANSPARENT, + ORE_OVERRIDE_STONE, SAFE_NBT, SAILS, SEATS, @@ -114,8 +115,6 @@ public class AllTags { WINDMILL_SAILS, WINDOWABLE, WRENCH_PICKUP, - - ORE_OVERRIDE_STONE, WG_STONE(FORGE), @@ -184,6 +183,8 @@ public class AllTags { public enum AllItemTags { + BLAZE_BURNER_REGULAR_FUEL, + BLAZE_BURNER_SPECIAL_FUEL, CREATE_INGOTS, CRUSHED_ORES, SANDPAPER, diff --git a/src/main/java/com/simibubi/create/content/contraptions/base/KineticTileInstance.java b/src/main/java/com/simibubi/create/content/contraptions/base/KineticTileInstance.java index a0553a25e..b580a5f61 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/base/KineticTileInstance.java +++ b/src/main/java/com/simibubi/create/content/contraptions/base/KineticTileInstance.java @@ -14,84 +14,84 @@ import net.minecraft.world.level.block.state.BlockState; public abstract class KineticTileInstance extends BlockEntityInstance { - protected final Direction.Axis axis; + protected final Direction.Axis axis; - public KineticTileInstance(MaterialManager modelManager, T tile) { - super(modelManager, tile); + public KineticTileInstance(MaterialManager modelManager, T tile) { + super(modelManager, tile); - axis = ((IRotate) blockState.getBlock()).getRotationAxis(blockState); - } + axis = ((IRotate) blockState.getBlock()).getRotationAxis(blockState); + } - protected final void updateRotation(RotatingData instance) { - updateRotation(instance, getRotationAxis(), getTileSpeed()); - } + protected final void updateRotation(RotatingData instance) { + updateRotation(instance, getRotationAxis(), getTileSpeed()); + } - protected final void updateRotation(RotatingData instance, Direction.Axis axis) { - updateRotation(instance, axis, getTileSpeed()); - } + protected final void updateRotation(RotatingData instance, Direction.Axis axis) { + updateRotation(instance, axis, getTileSpeed()); + } - protected final void updateRotation(RotatingData instance, float speed) { - updateRotation(instance, getRotationAxis(), speed); - } + protected final void updateRotation(RotatingData instance, float speed) { + updateRotation(instance, getRotationAxis(), speed); + } - protected final void updateRotation(RotatingData instance, Direction.Axis axis, float speed) { - instance.setRotationAxis(axis) - .setRotationOffset(getRotationOffset(axis)) - .setRotationalSpeed(speed) - .setColor(blockEntity); - } + protected final void updateRotation(RotatingData instance, Direction.Axis axis, float speed) { + instance.setRotationAxis(axis) + .setRotationOffset(getRotationOffset(axis)) + .setRotationalSpeed(speed) + .setColor(blockEntity); + } - protected final RotatingData setup(RotatingData key) { - return setup(key, getRotationAxis(), getTileSpeed()); - } + protected final RotatingData setup(RotatingData key) { + return setup(key, getRotationAxis(), getTileSpeed()); + } - protected final RotatingData setup(RotatingData key, Direction.Axis axis) { - return setup(key, axis, getTileSpeed()); - } + protected final RotatingData setup(RotatingData key, Direction.Axis axis) { + return setup(key, axis, getTileSpeed()); + } - protected final RotatingData setup(RotatingData key, float speed) { - return setup(key, getRotationAxis(), speed); - } + protected final RotatingData setup(RotatingData key, float speed) { + return setup(key, getRotationAxis(), speed); + } - protected final RotatingData setup(RotatingData key, Direction.Axis axis, float speed) { - key.setRotationAxis(axis) - .setRotationalSpeed(speed) - .setRotationOffset(getRotationOffset(axis)) - .setColor(blockEntity) - .setPosition(getInstancePosition()); + protected final RotatingData setup(RotatingData key, Direction.Axis axis, float speed) { + key.setRotationAxis(axis) + .setRotationalSpeed(speed) + .setRotationOffset(getRotationOffset(axis)) + .setColor(blockEntity) + .setPosition(getInstancePosition()); - return key; - } + return key; + } - protected float getRotationOffset(final Direction.Axis axis) { - float offset = ICogWheel.isLargeCog(blockState) ? 11.25f : 0; - double d = (((axis == Direction.Axis.X) ? 0 : pos.getX()) + ((axis == Direction.Axis.Y) ? 0 : pos.getY()) - + ((axis == Direction.Axis.Z) ? 0 : pos.getZ())) % 2; - if (d == 0) { - offset = 22.5f; - } - return offset; - } + protected float getRotationOffset(final Direction.Axis axis) { + float offset = ICogWheel.isLargeCog(blockState) ? 11.25f : 0; + double d = (((axis == Direction.Axis.X) ? 0 : pos.getX()) + ((axis == Direction.Axis.Y) ? 0 : pos.getY()) + + ((axis == Direction.Axis.Z) ? 0 : pos.getZ())) % 2; + if (d == 0) { + offset = 22.5f; + } + return offset; + } - protected Direction.Axis getRotationAxis() { - return axis; - } + protected Direction.Axis getRotationAxis() { + return axis; + } - protected float getTileSpeed() { - return blockEntity.getSpeed(); - } + protected float getTileSpeed() { + return blockEntity.getSpeed(); + } - protected BlockState shaft() { - return shaft(getRotationAxis()); - } + protected BlockState shaft() { + return shaft(getRotationAxis()); + } - protected Material getRotatingMaterial() { + protected Material getRotatingMaterial() { return materialManager.defaultSolid() .material(AllMaterialSpecs.ROTATING); } - public static BlockState shaft(Direction.Axis axis) { - return AllBlocks.SHAFT.getDefaultState() - .setValue(ShaftBlock.AXIS, axis); - } + public static BlockState shaft(Direction.Axis axis) { + return AllBlocks.SHAFT.getDefaultState() + .setValue(ShaftBlock.AXIS, axis); + } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/base/SingleRotatingInstance.java b/src/main/java/com/simibubi/create/content/contraptions/base/SingleRotatingInstance.java index e708b85c5..d103b26b5 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/base/SingleRotatingInstance.java +++ b/src/main/java/com/simibubi/create/content/contraptions/base/SingleRotatingInstance.java @@ -10,35 +10,35 @@ public class SingleRotatingInstance extends KineticTileInstance getModel() { - return getRotatingMaterial().getModel(getRenderedBlockState()); - } + protected Instancer getModel() { + return getRotatingMaterial().getModel(getRenderedBlockState()); + } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/processing/burner/BlazeBurnerTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/processing/burner/BlazeBurnerTileEntity.java index 934dc3504..f1e861dae 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/processing/burner/BlazeBurnerTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/processing/burner/BlazeBurnerTileEntity.java @@ -4,6 +4,7 @@ import java.util.List; import java.util.Random; import com.simibubi.create.AllItems; +import com.simibubi.create.AllTags.AllItemTags; import com.simibubi.create.content.contraptions.particle.CubeParticleData; import com.simibubi.create.content.contraptions.processing.burner.BlazeBurnerBlock.HeatLevel; import com.simibubi.create.foundation.tileEntity.SmartTileEntity; @@ -169,13 +170,17 @@ public class BlazeBurnerTileEntity extends SmartTileEntity { FuelType newFuel = FuelType.NONE; int newBurnTime; - if (AllItems.BLAZE_CAKE.isIn(itemStack)) { + if (AllItemTags.BLAZE_BURNER_SPECIAL_FUEL.matches(itemStack)) { newBurnTime = 1000; newFuel = FuelType.SPECIAL; } else { newBurnTime = ForgeHooks.getBurnTime(itemStack, null); if (newBurnTime > 0) newFuel = FuelType.NORMAL; + else if (AllItemTags.BLAZE_BURNER_REGULAR_FUEL.matches(itemStack)) { + newBurnTime = 1600; // Same as coal + newFuel = FuelType.NORMAL; + } } if (newFuel == FuelType.NONE) diff --git a/src/main/java/com/simibubi/create/content/curiosities/tools/SandPaperItem.java b/src/main/java/com/simibubi/create/content/curiosities/tools/SandPaperItem.java index d8749856d..8963d5f5f 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/tools/SandPaperItem.java +++ b/src/main/java/com/simibubi/create/content/curiosities/tools/SandPaperItem.java @@ -238,14 +238,9 @@ public class SandPaperItem extends Item implements CustomUseEffectsItem { return 32; } - @Override - public int getItemEnchantability(ItemStack stack) { - return 1; - } - @Override public int getEnchantmentValue() { - return 5; + return 1; } @Override diff --git a/src/main/java/com/simibubi/create/content/logistics/item/filter/ItemAttribute.java b/src/main/java/com/simibubi/create/content/logistics/item/filter/ItemAttribute.java index 5a3f886a4..6a2e7e982 100644 --- a/src/main/java/com/simibubi/create/content/logistics/item/filter/ItemAttribute.java +++ b/src/main/java/com/simibubi/create/content/logistics/item/filter/ItemAttribute.java @@ -30,6 +30,8 @@ import net.minecraft.nbt.CompoundTag; import net.minecraft.network.chat.TranslatableComponent; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.Container; +import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.item.BlockItem; import net.minecraft.world.item.CreativeModeTab; import net.minecraft.world.item.Item; @@ -136,7 +138,7 @@ public interface ItemAttribute { DAMAGED(ItemStack::isDamaged), BADLY_DAMAGED(s -> s.isDamaged() && s.getDamageValue() / s.getMaxDamage() > 3 / 4f), NOT_STACKABLE(((Predicate) ItemStack::isStackable).negate()), - EQUIPABLE(s -> s.getEquipmentSlot() != null), + EQUIPABLE(s -> LivingEntity.getEquipmentSlotForItem(s).getType() != EquipmentSlot.Type.HAND), FURNACE_FUEL(AbstractFurnaceBlockEntity::isFuel), WASHABLE(InWorldProcessing::isWashable), HAUNTABLE(InWorldProcessing::isHauntable), diff --git a/src/main/java/com/simibubi/create/foundation/render/AllInstanceFormats.java b/src/main/java/com/simibubi/create/foundation/render/AllInstanceFormats.java index db8dddb0a..bcdfc481e 100644 --- a/src/main/java/com/simibubi/create/foundation/render/AllInstanceFormats.java +++ b/src/main/java/com/simibubi/create/foundation/render/AllInstanceFormats.java @@ -5,22 +5,22 @@ import com.jozufozu.flywheel.core.layout.CommonItems; public class AllInstanceFormats { - public static BufferLayout ROTATING = kineticInstance() + public static final BufferLayout ROTATING = kineticInstance() .addItems(CommonItems.NORMAL) .build(); - public static BufferLayout BELT = kineticInstance() + public static final BufferLayout BELT = kineticInstance() .addItems(CommonItems.QUATERNION, CommonItems.UV, CommonItems.VEC4, CommonItems.NORMALIZED_BYTE) .build(); - public static BufferLayout ACTOR = BufferLayout.builder() + public static final BufferLayout ACTOR = BufferLayout.builder() .addItems(CommonItems.VEC3, CommonItems.LIGHT, CommonItems.FLOAT, CommonItems.NORMAL, CommonItems.QUATERNION, CommonItems.NORMAL, CommonItems.FLOAT) .build(); - public static BufferLayout FLAP = BufferLayout.builder() + public static final BufferLayout FLAP = BufferLayout.builder() .addItems(CommonItems.VEC3, CommonItems.LIGHT, CommonItems.VEC3, CommonItems.VEC3, CommonItems.FLOAT, CommonItems.FLOAT, CommonItems.FLOAT, CommonItems.FLOAT) .build(); diff --git a/src/main/java/com/simibubi/create/foundation/render/AllProgramSpecs.java b/src/main/java/com/simibubi/create/foundation/render/AllProgramSpecs.java index d4fdc776e..ccf81b94f 100644 --- a/src/main/java/com/simibubi/create/foundation/render/AllProgramSpecs.java +++ b/src/main/java/com/simibubi/create/foundation/render/AllProgramSpecs.java @@ -7,7 +7,6 @@ import net.minecraft.resources.ResourceLocation; public class AllProgramSpecs { public static final ResourceLocation ROTATING = asResource("rotating"); - public static final ResourceLocation CHROMATIC = asResource("chromatic"); public static final ResourceLocation BELT = asResource("belt"); public static final ResourceLocation FLAPS = asResource("flap"); public static final ResourceLocation ACTOR = asResource("contraption_actor"); From ccd4833148d2d2352bceb01f3f29e27f2c791809 Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Thu, 3 Mar 2022 14:51:27 +0100 Subject: [PATCH 10/29] Splash of Smoke - Removed nbt side-effects of the fan processing recipe check for ground items - Fixes intersecting fan streams making passing ground items unable to be processed --- .../processing/InWorldProcessing.java | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/src/main/java/com/simibubi/create/content/contraptions/processing/InWorldProcessing.java b/src/main/java/com/simibubi/create/content/contraptions/processing/InWorldProcessing.java index e583284c0..47c42026d 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/processing/InWorldProcessing.java +++ b/src/main/java/com/simibubi/create/content/contraptions/processing/InWorldProcessing.java @@ -76,13 +76,9 @@ public class InWorldProcessing { if (compound.contains("Processing")) { CompoundTag processing = compound.getCompound("Processing"); - if (Type.valueOf(processing.getString("Type")) != type) { - boolean canProcess = type.canProcess(entity.getItem(), entity.level); - processing.putString("Type", type.name()); - if (!canProcess) - processing.putInt("Time", -1); - return canProcess; - } else if (processing.getInt("Time") >= 0) + if (Type.valueOf(processing.getString("Type")) != type) + return type.canProcess(entity.getItem(), entity.level); + else if (processing.getInt("Time") >= 0) return true; else if (processing.getInt("Time") == -1) return false; @@ -445,12 +441,10 @@ public class InWorldProcessing { }, NONE { @Override - public void spawnParticlesForProcessing(Level level, Vec3 pos) { - } + public void spawnParticlesForProcessing(Level level, Vec3 pos) {} @Override - public void affectEntity(Entity entity, Level level) { - } + public void affectEntity(Entity entity, Level level) {} @Override public boolean canProcess(ItemStack stack, Level level) { From 596802d3cce236b95d6b2047707ee633151e1a5d Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Thu, 3 Mar 2022 15:42:00 +0100 Subject: [PATCH 11/29] Phantom Slots - Corrected DeployerItemHandler to reserve slots for overflow items - Fixed Deployer not allowing overflow items to be extracted in some cases --- .../deployer/DeployerItemHandler.java | 56 ++++++++----------- .../relays/belt/transport/BeltInventory.java | 17 +++--- 2 files changed, 32 insertions(+), 41 deletions(-) diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerItemHandler.java b/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerItemHandler.java index ebd925df2..5d8b00047 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerItemHandler.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerItemHandler.java @@ -1,7 +1,5 @@ package com.simibubi.create.content.contraptions.components.deployer; -import java.util.Iterator; - import com.simibubi.create.foundation.tileEntity.behaviour.filtering.FilteringBehaviour; import net.minecraft.world.InteractionHand; @@ -21,12 +19,12 @@ public class DeployerItemHandler implements IItemHandlerModifiable { @Override public int getSlots() { - return 1; + return 1 + te.overflowItems.size(); } @Override public ItemStack getStackInSlot(int slot) { - return getHeld(); + return slot >= te.overflowItems.size() ? getHeld() : te.overflowItems.get(slot); } public ItemStack getHeld() { @@ -47,14 +45,18 @@ public class DeployerItemHandler implements IItemHandlerModifiable { @Override public ItemStack insertItem(int slot, ItemStack stack, boolean simulate) { - ItemStack held = getHeld(); + if (slot < te.overflowItems.size()) + return stack; if (!isItemValid(slot, stack)) return stack; + + ItemStack held = getHeld(); if (held.isEmpty()) { if (!simulate) set(stack); return ItemStack.EMPTY; } + if (!ItemHandlerHelper.canItemStacksStack(held, stack)) return stack; @@ -78,36 +80,18 @@ public class DeployerItemHandler implements IItemHandlerModifiable { if (amount == 0) return ItemStack.EMPTY; - ItemStack extractedFromOverflow = ItemStack.EMPTY; - ItemStack returnToOverflow = ItemStack.EMPTY; - - for (Iterator iterator = te.overflowItems.iterator(); iterator.hasNext();) { - ItemStack existing = iterator.next(); - if (existing.isEmpty()) { - iterator.remove(); - continue; - } - - int toExtract = Math.min(amount, existing.getMaxStackSize()); - if (existing.getCount() <= toExtract) { - if (!simulate) - iterator.remove(); - extractedFromOverflow = existing; - break; - } - if (!simulate) { - iterator.remove(); - returnToOverflow = ItemHandlerHelper.copyStackWithSize(existing, existing.getCount() - toExtract); - } - extractedFromOverflow = ItemHandlerHelper.copyStackWithSize(existing, toExtract); - break; + if (slot < te.overflowItems.size()) { + ItemStack itemStack = te.overflowItems.get(slot); + int toExtract = Math.min(amount, itemStack.getCount()); + ItemStack extracted = simulate ? itemStack.copy() : itemStack.split(toExtract); + extracted.setCount(toExtract); + if (!simulate && itemStack.isEmpty()) + te.overflowItems.remove(slot); + if (!simulate && !extracted.isEmpty()) + te.setChanged(); + return extracted; } - if (!returnToOverflow.isEmpty()) - te.overflowItems.add(returnToOverflow); - if (!extractedFromOverflow.isEmpty()) - return extractedFromOverflow; - ItemStack held = getHeld(); if (amount == 0 || held.isEmpty()) return ItemStack.EMPTY; @@ -126,7 +110,7 @@ public class DeployerItemHandler implements IItemHandlerModifiable { @Override public int getSlotLimit(int slot) { - return Math.min(getHeld().getMaxStackSize(), 64); + return Math.min(getStackInSlot(slot).getMaxStackSize(), 64); } @Override @@ -137,6 +121,10 @@ public class DeployerItemHandler implements IItemHandlerModifiable { @Override public void setStackInSlot(int slot, ItemStack stack) { + if (slot < te.overflowItems.size()) { + te.overflowItems.set(slot, stack); + return; + } set(stack); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/transport/BeltInventory.java b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/transport/BeltInventory.java index 6ba231609..adf8811fe 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/transport/BeltInventory.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/transport/BeltInventory.java @@ -150,7 +150,6 @@ public class BeltInventory { continue; } - // Belt Funnels if (BeltFunnelInteractionHandler.checkForFunnels(this, currentItem, nextOffset)) continue; @@ -217,7 +216,8 @@ public class BeltInventory { } } - protected boolean handleBeltProcessingAndCheckIfRemoved(TransportedItemStack currentItem, float nextOffset, boolean noMovement) { + protected boolean handleBeltProcessingAndCheckIfRemoved(TransportedItemStack currentItem, float nextOffset, + boolean noMovement) { int currentSegment = (int) currentItem.beltPosition; // Continue processing if held @@ -315,8 +315,9 @@ public class BeltInventory { if (inputBehaviour != null) return Ending.INSERT; - if (BlockHelper.hasBlockSolidSide(world.getBlockState(nextPosition), world, nextPosition, belt.getMovementFacing() - .getOpposite())) + if (BlockHelper.hasBlockSolidSide(world.getBlockState(nextPosition), world, nextPosition, + belt.getMovementFacing() + .getOpposite())) return Ending.BLOCKED; return Ending.EJECT; @@ -405,9 +406,11 @@ public class BeltInventory { ItemStack ejected = stack.stack; Vec3 outPos = BeltHelper.getVectorForOffset(belt, stack.beltPosition); float movementSpeed = Math.max(Math.abs(belt.getBeltMovementSpeed()), 1 / 8f); - Vec3 outMotion = Vec3.atLowerCornerOf(belt.getBeltChainDirection()).scale(movementSpeed) + Vec3 outMotion = Vec3.atLowerCornerOf(belt.getBeltChainDirection()) + .scale(movementSpeed) .add(0, 1 / 8f, 0); - outPos = outPos.add(outMotion.normalize().scale(0.001)); + outPos = outPos.add(outMotion.normalize() + .scale(0.001)); ItemEntity entity = new ItemEntity(belt.getLevel(), outPos.x, outPos.y + 6 / 16f, outPos.z, ejected); entity.setDeltaMovement(outMotion); entity.setDefaultPickUpDelay(); @@ -429,7 +432,7 @@ public class BeltInventory { if (Math.abs(position - transported.beltPosition) >= maxDistanceToPosition) continue; TransportedResult result = processFunction.apply(transported); - if (result == null|| result.didntChangeFrom(stackBefore)) + if (result == null || result.didntChangeFrom(stackBefore)) continue; dirty = true; From e7a273e678814bad81cccf6518843b18cd8ec248 Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Thu, 3 Mar 2022 17:18:53 +0100 Subject: [PATCH 12/29] Tunnel touch-ups - Fixed some of the kinetic item models not using the updated cogwheel uvs - Fixed inconsistent uv scaling on belt tunnel assets - Removed one of the textured seams visible on tunnel sides --- .../models/block/belt_tunnel/straight.json | 2 +- .../models/block/belt_tunnel/window.json | 2 +- .../models/block/mechanical_crafter/item.json | 96 +++++---- .../models/block/mechanical_mixer/block.json | 2 +- .../models/block/mechanical_mixer/item.json | 195 ++++++++++-------- .../create/textures/block/andesite_tunnel.png | Bin 878 -> 1493 bytes .../create/textures/block/brass_tunnel.png | Bin 632 -> 1185 bytes 7 files changed, 162 insertions(+), 135 deletions(-) diff --git a/src/main/resources/assets/create/models/block/belt_tunnel/straight.json b/src/main/resources/assets/create/models/block/belt_tunnel/straight.json index ba208112f..bad0cdc8b 100644 --- a/src/main/resources/assets/create/models/block/belt_tunnel/straight.json +++ b/src/main/resources/assets/create/models/block/belt_tunnel/straight.json @@ -38,7 +38,7 @@ "faces": { "north": {"uv": [0, 0, 8, 9.5], "texture": "#2"}, "east": {"uv": [0, 9.5, 9.5, 10.5], "rotation": 90, "texture": "#2"}, - "south": {"uv": [0, 0, 8, 9], "texture": "#2"}, + "south": {"uv": [0, 0, 8, 9.5], "texture": "#2"}, "west": {"uv": [0, 10.5, 9.5, 11.5], "rotation": 90, "texture": "#2"}, "up": {"uv": [0, 0, 16, 2], "rotation": 180, "texture": "#1"} } diff --git a/src/main/resources/assets/create/models/block/belt_tunnel/window.json b/src/main/resources/assets/create/models/block/belt_tunnel/window.json index 0d65fed25..670987e89 100644 --- a/src/main/resources/assets/create/models/block/belt_tunnel/window.json +++ b/src/main/resources/assets/create/models/block/belt_tunnel/window.json @@ -38,7 +38,7 @@ "faces": { "north": {"uv": [8, 0, 16, 9.5], "texture": "#2"}, "east": {"uv": [0, 9.5, 9.5, 10.5], "rotation": 90, "texture": "#2"}, - "south": {"uv": [8, 0, 16, 9], "texture": "#2"}, + "south": {"uv": [8, 0, 16, 9.5], "texture": "#2"}, "west": {"uv": [0, 10.5, 9.5, 11.5], "rotation": 90, "texture": "#2"}, "up": {"uv": [0, 0, 16, 2], "rotation": 180, "texture": "#3"} } diff --git a/src/main/resources/assets/create/models/block/mechanical_crafter/item.json b/src/main/resources/assets/create/models/block/mechanical_crafter/item.json index f0a221f11..428d2e7ee 100644 --- a/src/main/resources/assets/create/models/block/mechanical_crafter/item.json +++ b/src/main/resources/assets/create/models/block/mechanical_crafter/item.json @@ -1,6 +1,7 @@ { "credit": "Made with Blockbench", "parent": "block/block", + "texture_size": [32, 32], "textures": { "3": "create:block/crafter_thingies", "4": "create:block/crafter_side", @@ -8,8 +9,8 @@ "6": "create:block/crafter_top", "7": "create:block/crafter_topunderside", "8": "create:block/smooth_dark_log_top", - "particle": "create:block/crafter_top", - "1_2": "create:block/cogwheel" + "9": "create:block/cogwheel", + "particle": "create:block/brass_casing" }, "elements": [ { @@ -147,12 +148,12 @@ "from": [-1, 6.5, 6.5], "to": [17, 9.5, 9.5], "faces": { - "north": {"uv": [7, 7.5, 16, 9], "texture": "#1_2"}, - "east": {"uv": [5.5, 7.5, 7, 9], "texture": "#1_2"}, - "south": {"uv": [7, 7.5, 16, 9], "texture": "#1_2"}, - "west": {"uv": [5.5, 7.5, 7, 9], "texture": "#1_2"}, - "up": {"uv": [7, 6, 16, 7.5], "texture": "#1_2"}, - "down": {"uv": [7, 6, 16, 7.5], "texture": "#1_2"} + "north": {"uv": [7, 8, 16, 9.5], "texture": "#9"}, + "east": {"uv": [5, 8, 6.5, 9.5], "texture": "#9"}, + "south": {"uv": [7, 8, 16, 9.5], "texture": "#9"}, + "west": {"uv": [5, 8, 6.5, 9.5], "texture": "#9"}, + "up": {"uv": [7, 6, 16, 7.5], "texture": "#9"}, + "down": {"uv": [7, 6, 16, 7.5], "texture": "#9"} } }, { @@ -161,12 +162,12 @@ "to": [17, 9.5, 9.5], "rotation": {"angle": 45, "axis": "y", "origin": [8, 8, 8]}, "faces": { - "north": {"uv": [7, 7.5, 16, 9], "texture": "#1_2"}, - "east": {"uv": [5.5, 7.5, 7, 9], "texture": "#1_2"}, - "south": {"uv": [7, 7.5, 16, 9], "texture": "#1_2"}, - "west": {"uv": [5.5, 7.5, 7, 9], "texture": "#1_2"}, - "up": {"uv": [7, 6, 16, 7.5], "texture": "#1_2"}, - "down": {"uv": [7, 6, 16, 7.5], "texture": "#1_2"} + "north": {"uv": [7, 8, 16, 9.5], "texture": "#9"}, + "east": {"uv": [5, 8, 6.5, 9.5], "texture": "#9"}, + "south": {"uv": [7, 8, 16, 9.5], "texture": "#9"}, + "west": {"uv": [5, 8, 6.5, 9.5], "texture": "#9"}, + "up": {"uv": [7, 6, 16, 7.5], "texture": "#9"}, + "down": {"uv": [7, 6, 16, 7.5], "texture": "#9"} } }, { @@ -175,12 +176,12 @@ "to": [17, 9.5, 9.5], "rotation": {"angle": -45, "axis": "y", "origin": [8, 8, 8]}, "faces": { - "north": {"uv": [7, 7.5, 16, 9], "texture": "#1_2"}, - "east": {"uv": [5.5, 7.5, 7, 9], "texture": "#1_2"}, - "south": {"uv": [7, 7.5, 16, 9], "texture": "#1_2"}, - "west": {"uv": [5.5, 7.5, 7, 9], "texture": "#1_2"}, - "up": {"uv": [7, 6, 16, 7.5], "texture": "#1_2"}, - "down": {"uv": [7, 6, 16, 7.5], "texture": "#1_2"} + "north": {"uv": [7, 8, 16, 9.5], "texture": "#9"}, + "east": {"uv": [5, 8, 6.5, 9.5], "texture": "#9"}, + "south": {"uv": [7, 8, 16, 9.5], "texture": "#9"}, + "west": {"uv": [5, 8, 6.5, 9.5], "texture": "#9"}, + "up": {"uv": [7, 6, 16, 7.5], "texture": "#9"}, + "down": {"uv": [7, 6, 16, 7.5], "texture": "#9"} } }, { @@ -188,25 +189,25 @@ "from": [6.5, 6.5, -1], "to": [9.5, 9.5, 17], "faces": { - "north": {"uv": [5.5, 7.5, 7, 9], "texture": "#1_2"}, - "east": {"uv": [7, 7.5, 16, 9], "texture": "#1_2"}, - "south": {"uv": [5.5, 7.5, 7, 9], "texture": "#1_2"}, - "west": {"uv": [7, 7.5, 16, 9], "texture": "#1_2"}, - "up": {"uv": [7, 6, 16, 7.5], "rotation": 90, "texture": "#1_2"}, - "down": {"uv": [7, 6, 16, 7.5], "rotation": 90, "texture": "#1_2"} + "north": {"uv": [5, 8, 6.5, 9.5], "texture": "#9"}, + "east": {"uv": [7, 8, 16, 9.5], "texture": "#9"}, + "south": {"uv": [5, 8, 6.5, 9.5], "texture": "#9"}, + "west": {"uv": [7, 8, 16, 9.5], "texture": "#9"}, + "up": {"uv": [7, 6, 16, 7.5], "rotation": 90, "texture": "#9"}, + "down": {"uv": [7, 6, 16, 7.5], "rotation": 90, "texture": "#9"} } }, { "name": "GearCaseInner", - "from": [2, 7, 2], - "to": [14, 9, 14], + "from": [2, 6.55, 2], + "to": [14, 9.45, 14], "faces": { - "north": {"uv": [0, 6, 6, 7], "texture": "#1_2"}, - "east": {"uv": [0, 6, 6, 7], "texture": "#1_2"}, - "south": {"uv": [0, 6, 6, 7], "texture": "#1_2"}, - "west": {"uv": [0, 6, 6, 7], "texture": "#1_2"}, - "up": {"uv": [4, 0, 10, 6], "texture": "#1_2"}, - "down": {"uv": [4, 0, 10, 6], "texture": "#1_2"} + "north": {"uv": [0, 6, 6, 7.5], "texture": "#9"}, + "east": {"uv": [0, 6, 6, 7.5], "texture": "#9"}, + "south": {"uv": [0, 6, 6, 7.5], "texture": "#9"}, + "west": {"uv": [0, 6, 6, 7.5], "texture": "#9"}, + "up": {"uv": [4, 0, 10, 6], "texture": "#9"}, + "down": {"uv": [4, 0, 10, 6], "texture": "#9"} } }, { @@ -214,24 +215,37 @@ "from": [4, 6, 4], "to": [12, 10, 12], "faces": { - "north": {"uv": [0, 4, 4, 6], "texture": "#1_2"}, - "east": {"uv": [0, 4, 4, 6], "texture": "#1_2"}, - "south": {"uv": [0, 4, 4, 6], "texture": "#1_2"}, - "west": {"uv": [0, 4, 4, 6], "texture": "#1_2"}, - "up": {"uv": [0, 0, 4, 4], "texture": "#1_2"}, - "down": {"uv": [0, 0, 4, 4], "texture": "#1_2"} + "north": {"uv": [0, 4, 4, 6], "texture": "#9"}, + "east": {"uv": [0, 4, 4, 6], "texture": "#9"}, + "south": {"uv": [0, 4, 4, 6], "texture": "#9"}, + "west": {"uv": [0, 4, 4, 6], "texture": "#9"}, + "up": {"uv": [0, 0, 4, 4], "texture": "#9"}, + "down": {"uv": [0, 0, 4, 4], "texture": "#9"} } } ], - "groups": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, + "groups": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, { "name": "lid", "origin": [8, 8, 8], + "color": 0, "children": [11] }, { "name": "cogwheel_shaftless", "origin": [8, 8, 8], + "color": 0, "children": [12, 13, 14, 15, 16, 17] } ] diff --git a/src/main/resources/assets/create/models/block/mechanical_mixer/block.json b/src/main/resources/assets/create/models/block/mechanical_mixer/block.json index c266f74ba..45c159a61 100644 --- a/src/main/resources/assets/create/models/block/mechanical_mixer/block.json +++ b/src/main/resources/assets/create/models/block/mechanical_mixer/block.json @@ -6,7 +6,7 @@ "2": "block/spruce_log_top", "4": "create:block/mixer_base_side", "11": "create:block/mechanical_press_top", - "particle": "block/stripped_spruce_log" + "particle": "create:block/mixer_base_side" }, "elements": [ { diff --git a/src/main/resources/assets/create/models/block/mechanical_mixer/item.json b/src/main/resources/assets/create/models/block/mechanical_mixer/item.json index 93dd7cdd5..e423867e7 100644 --- a/src/main/resources/assets/create/models/block/mechanical_mixer/item.json +++ b/src/main/resources/assets/create/models/block/mechanical_mixer/item.json @@ -1,6 +1,6 @@ { "credit": "Made with Blockbench", - "parent": "block/block", + "parent": "create:block/large_wheels", "ambientocclusion": false, "texture_size": [32, 32], "textures": { @@ -10,93 +10,9 @@ "11": "create:block/mechanical_press_top", "1_2": "create:block/cogwheel", "mechanical_press_pole": "create:block/mechanical_press_pole", - "particle": "create:block/andesite_casing" + "particle": "create:block/mixer_base_side" }, "elements": [ - { - "name": "Gear", - "from": [-1, 13.5, 6.5], - "to": [17, 16.5, 9.5], - "rotation": {"angle": 0, "axis": "y", "origin": [8, 15, 8]}, - "faces": { - "north": {"uv": [7, 7.5, 16, 9], "texture": "#1_2"}, - "east": {"uv": [5.5, 7.5, 7, 9], "texture": "#1_2"}, - "south": {"uv": [7, 7.5, 16, 9], "texture": "#1_2"}, - "west": {"uv": [5.5, 7.5, 7, 9], "texture": "#1_2"}, - "up": {"uv": [7, 6, 16, 7.5], "texture": "#1_2"}, - "down": {"uv": [7, 6, 16, 7.5], "texture": "#1_2"} - } - }, - { - "name": "Gear2", - "from": [-1, 13.5, 6.5], - "to": [17, 16.5, 9.5], - "rotation": {"angle": 45, "axis": "y", "origin": [8, 15, 8]}, - "faces": { - "north": {"uv": [7, 7.5, 16, 9], "texture": "#1_2"}, - "east": {"uv": [5.5, 7.5, 7, 9], "texture": "#1_2"}, - "south": {"uv": [7, 7.5, 16, 9], "texture": "#1_2"}, - "west": {"uv": [5.5, 7.5, 7, 9], "texture": "#1_2"}, - "up": {"uv": [7, 6, 16, 7.5], "texture": "#1_2"}, - "down": {"uv": [7, 6, 16, 7.5], "texture": "#1_2"} - } - }, - { - "name": "Gear3", - "from": [-1, 13.5, 6.5], - "to": [17, 16.5, 9.5], - "rotation": {"angle": -45, "axis": "y", "origin": [8, 15, 8]}, - "faces": { - "north": {"uv": [7, 7.5, 16, 9], "texture": "#1_2"}, - "east": {"uv": [5.5, 7.5, 7, 9], "texture": "#1_2"}, - "south": {"uv": [7, 7.5, 16, 9], "texture": "#1_2"}, - "west": {"uv": [5.5, 7.5, 7, 9], "texture": "#1_2"}, - "up": {"uv": [7, 6, 16, 7.5], "texture": "#1_2"}, - "down": {"uv": [7, 6, 16, 7.5], "texture": "#1_2"} - } - }, - { - "name": "Gear4", - "from": [6.5, 13.5, -1], - "to": [9.5, 16.5, 17], - "rotation": {"angle": 0, "axis": "y", "origin": [8, 15, 8]}, - "faces": { - "north": {"uv": [5.5, 7.5, 7, 9], "texture": "#1_2"}, - "east": {"uv": [7, 7.5, 16, 9], "texture": "#1_2"}, - "south": {"uv": [5.5, 7.5, 7, 9], "texture": "#1_2"}, - "west": {"uv": [7, 7.5, 16, 9], "texture": "#1_2"}, - "up": {"uv": [7, 6, 16, 7.5], "rotation": 90, "texture": "#1_2"}, - "down": {"uv": [7, 6, 16, 7.5], "rotation": 90, "texture": "#1_2"} - } - }, - { - "name": "GearCaseInner", - "from": [2, 14, 2], - "to": [14, 16, 14], - "rotation": {"angle": 0, "axis": "y", "origin": [8, 15, 8]}, - "faces": { - "north": {"uv": [0, 6, 6, 7], "texture": "#1_2"}, - "east": {"uv": [0, 6, 6, 7], "texture": "#1_2"}, - "south": {"uv": [0, 6, 6, 7], "texture": "#1_2"}, - "west": {"uv": [0, 6, 6, 7], "texture": "#1_2"}, - "up": {"uv": [4, 0, 10, 6], "texture": "#1_2"}, - "down": {"uv": [4, 0, 10, 6], "texture": "#1_2"} - } - }, - { - "name": "GearCaseOuter", - "from": [4, 13, 4], - "to": [12, 17, 12], - "rotation": {"angle": 0, "axis": "y", "origin": [8, 15, 8]}, - "faces": { - "north": {"uv": [0, 4, 4, 6], "texture": "#1_2"}, - "east": {"uv": [0, 4, 4, 6], "texture": "#1_2"}, - "south": {"uv": [0, 4, 4, 6], "texture": "#1_2"}, - "west": {"uv": [0, 4, 4, 6], "texture": "#1_2"}, - "up": {"uv": [0, 0, 4, 4], "texture": "#1_2"}, - "down": {"uv": [0, 0, 4, 4], "texture": "#1_2"} - } - }, { "name": "Side3", "from": [0, 13, 16], @@ -370,6 +286,90 @@ "east": {"uv": [0, 6, 16, 10], "texture": "#4"}, "west": {"uv": [0, 6, 16, 10], "texture": "#4"} } + }, + { + "name": "Gear", + "from": [-1, 13.5, 6.5], + "to": [17, 16.5, 9.5], + "rotation": {"angle": 0, "axis": "y", "origin": [0, 7, 0]}, + "faces": { + "north": {"uv": [7, 8, 16, 9.5], "texture": "#1_2"}, + "east": {"uv": [5, 8, 6.5, 9.5], "texture": "#1_2"}, + "south": {"uv": [7, 8, 16, 9.5], "texture": "#1_2"}, + "west": {"uv": [5, 8, 6.5, 9.5], "texture": "#1_2"}, + "up": {"uv": [7, 6, 16, 7.5], "texture": "#1_2"}, + "down": {"uv": [7, 6, 16, 7.5], "texture": "#1_2"} + } + }, + { + "name": "Gear2", + "from": [-1, 13.5, 6.5], + "to": [17, 16.5, 9.5], + "rotation": {"angle": 45, "axis": "y", "origin": [8, 15, 8]}, + "faces": { + "north": {"uv": [7, 8, 16, 9.5], "texture": "#1_2"}, + "east": {"uv": [5, 8, 6.5, 9.5], "texture": "#1_2"}, + "south": {"uv": [7, 8, 16, 9.5], "texture": "#1_2"}, + "west": {"uv": [5, 8, 6.5, 9.5], "texture": "#1_2"}, + "up": {"uv": [7, 6, 16, 7.5], "texture": "#1_2"}, + "down": {"uv": [7, 6, 16, 7.5], "texture": "#1_2"} + } + }, + { + "name": "Gear3", + "from": [-1, 13.5, 6.5], + "to": [17, 16.5, 9.5], + "rotation": {"angle": -45, "axis": "y", "origin": [8, 15, 8]}, + "faces": { + "north": {"uv": [7, 8, 16, 9.5], "texture": "#1_2"}, + "east": {"uv": [5, 8, 6.5, 9.5], "texture": "#1_2"}, + "south": {"uv": [7, 8, 16, 9.5], "texture": "#1_2"}, + "west": {"uv": [5, 8, 6.5, 9.5], "texture": "#1_2"}, + "up": {"uv": [7, 6, 16, 7.5], "texture": "#1_2"}, + "down": {"uv": [7, 6, 16, 7.5], "texture": "#1_2"} + } + }, + { + "name": "Gear4", + "from": [6.5, 13.5, -1], + "to": [9.5, 16.5, 17], + "rotation": {"angle": 0, "axis": "y", "origin": [0, 7, 0]}, + "faces": { + "north": {"uv": [5, 8, 6.5, 9.5], "texture": "#1_2"}, + "east": {"uv": [7, 8, 16, 9.5], "texture": "#1_2"}, + "south": {"uv": [5, 8, 6.5, 9.5], "texture": "#1_2"}, + "west": {"uv": [7, 8, 16, 9.5], "texture": "#1_2"}, + "up": {"uv": [7, 6, 16, 7.5], "rotation": 90, "texture": "#1_2"}, + "down": {"uv": [7, 6, 16, 7.5], "rotation": 90, "texture": "#1_2"} + } + }, + { + "name": "GearCaseInner", + "from": [2, 13.55, 2], + "to": [14, 16.45, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [0, 7, 0]}, + "faces": { + "north": {"uv": [0, 6, 6, 7.5], "texture": "#1_2"}, + "east": {"uv": [0, 6, 6, 7.5], "texture": "#1_2"}, + "south": {"uv": [0, 6, 6, 7.5], "texture": "#1_2"}, + "west": {"uv": [0, 6, 6, 7.5], "texture": "#1_2"}, + "up": {"uv": [4, 0, 10, 6], "texture": "#1_2"}, + "down": {"uv": [4, 0, 10, 6], "texture": "#1_2"} + } + }, + { + "name": "GearCaseOuter", + "from": [4, 13, 4], + "to": [12, 17, 12], + "rotation": {"angle": 0, "axis": "y", "origin": [0, 7, 0]}, + "faces": { + "north": {"uv": [0, 4, 4, 6], "texture": "#1_2"}, + "east": {"uv": [0, 4, 4, 6], "texture": "#1_2"}, + "south": {"uv": [0, 4, 4, 6], "texture": "#1_2"}, + "west": {"uv": [0, 4, 4, 6], "texture": "#1_2"}, + "up": {"uv": [0, 0, 4, 4], "texture": "#1_2"}, + "down": {"uv": [0, 0, 4, 4], "texture": "#1_2"} + } } ], "display": { @@ -405,33 +405,46 @@ "scale": [0.5, 0.5, 0.5] } }, - "groups": [0, 1, 2, 3, 4, 5, + "groups": [ { "name": "item", "origin": [8, 8, 8], - "children": [6, 7, + "color": 0, + "children": [ + 0, + 1, { "name": "mixerhead", "origin": [8, 8, 8], - "children": [8, 9, 10, 11, 12, 13, 14, 15, 16] + "color": 0, + "children": [2, 3, 4, 5, 6, 7, 8, 9, 10] }, { "name": "mechanical_press_head", "origin": [8, 8, 8], - "children": [17, 18, 19, 20, 21, 22, 23] + "color": 0, + "children": [11, 12, 13, 14, 15, 16, 17] }, { "name": "mixer_base", "origin": [8, 8, 8], + "color": 0, "children": [ { "name": "mixerbase", "origin": [8, 8, 8], - "children": [24, 25, 26, 27] + "color": 0, + "children": [18, 19, 20, 21] } ] } ] + }, + { + "name": "cogwheel_shaftless", + "origin": [8, 8, 8], + "color": 0, + "children": [22, 23, 24, 25, 26, 27] } ] } \ No newline at end of file diff --git a/src/main/resources/assets/create/textures/block/andesite_tunnel.png b/src/main/resources/assets/create/textures/block/andesite_tunnel.png index d9bb320f1c5b9500d296c8c3355ffa318a3619ea..8821d70868c1fe5ef7bed4104f01519b2cae7d54 100644 GIT binary patch delta 1486 zcmV;<1u^>W2Gt9Y8Gi-<0047(dh`GQ00DDSM?wIu&K&6g000DMK}|sb0I`n?{9y$E z000SaNLh0L01m?d01m?e$8V@)000GQNklU-~2{^hqpz5Ckb`iBc3qeSgqSFNsO0K}niq(k5rl z+|FEcT;H16$CHzjkP^WU_Uv``Uf71?RP`t2KZ=F{(`-HmH+y-0nhUKXznG6#GOaY?5} zWI#-afmFfjj~p8n<>OC}&=aErqK8sq>%mog0CImeA%F6j)6e*h4`-xCK^yv@gK-t# zclM35mM|DbvDA}xc3;UTORc`$IMSJ?lNY}bSxpRF%g0p17V;ZAWB24jUhz4>Akq7#7@(nav9hnqx^8v)( z3+Y}CJNX*60=5KV9tj7evC*iByQ1MB>7}Z;wSS@;6pM5XzzQ%a;KiR^?ru*f7LAH0 zUp#;<)@rvY6bMkM+M;ln_ZSqFCM^_gIg5f0ZeRJmUu!T z5)M(j-OVkm8cF2E-w9rPNkSl-3{$Jq*)pNoXh|5>Hfp4?H(*ecSE~6nIUAht;yW># zPJejv#Q<2-;{1Wa!M?b3s2qS12XZlLRGZXjw%9X%YI2PjB8yRQg4XJ73bJce$lO2< zDE?+=)8_9x2Y`Kr09Pgu3I%N!BI9%HGRQDuqtswScx&=*=xl0SHid%$0C*r7kJxbyP?teA{Hd!eg3P>BgU^eQ~-sD&XdwS|1a`G#+ ztvP_nPahccAqVa+>f88o6a#vhk14jZ-L}Z&l{{E0((+n~mI^xG;T1AUHCkLPvtbrl zTyT(p>*hbwEAsvE55HMB|EK;~f@~tcie+;fKcJEb*f6Su@Rp1kr6OUfa69J?rGFDa zwjBL6adRl}??K|`h>30`;x*V8A=?zJDhMC=UVfpvro9%K5YlVDi^qeT8oR^s}5!c&RKb z%*%?8J^7R!1^@#=M}0f{sB3ceh9mKybQV!5IR#yA|99sDCHko}YKl zH{s)AKU@X-HvGS^)i?hEE`9W&wbye4*zv!i+Gg%NxboSRU5!@TdN1b&AO;*hd{jO< zd`~xV!Z zMlu|UkB_I%*m-<;TSX>+UN?%2n@dYeN=iy(OfGj=GCn90Mn*<(Q7n5~HGp3@e}aNi zJtTEjF{7lLTty{uQZ6_+I503Uf`^7yJRn^{Ax<_MT|y#3Eq@h)g@iddIXXHzP&XV@ zJ0Eg(a$Q0sOg9`=Iv;{zI)`L9JUl!zGc${goN8@zY)>s;LnDD;IblmKd08__Nl7#` zG+I9*Y)&m&L?k;qJ2EmdWJoAmK_q5MDOx`xi^0uENJ!A?=~+G^YfUUmO-yf5D~M$| zRXZPLNhqYHoPT?Me}#vJOioR3QZ9O0G)^`gsLYUycB6a$xA0P;VIStOGF92|Qn}3;J-=((p!)-Hj#u#g@w$@x4 ztDQ5}Ef$MkXaLA4uqZM5Qj<=3K`HT8a#}eCHHF^zORd*R8GxFFLBgk;Cj+ns7-sS( zB26-xBpd~j@?_4&@!tM;)!yBo{fsdO#N2Gy*YmdK?B_(G=$u=_3&P2osq`Fsr$22r19Iayhf$d7253DapC) zN{rAwo6mfbxxh0Du1BIPMf1z&dN{;F5vMtLW?+URQ8^QDKfVmEepu(3a+pp$GqBfJ zqVn!l{ppinG_*jBmBdme17gad(J~j`3dvkM(_Tu>){J;oUlA5aFLGuXJqiXN4*E{MR sey#Rceni?S6I`_V{fkx$=eK_UH!UFhpQU(H7XSbN07*qoM6N<$f~Y}wSO5S3 diff --git a/src/main/resources/assets/create/textures/block/brass_tunnel.png b/src/main/resources/assets/create/textures/block/brass_tunnel.png index d07ab8491efb25571d445160564d87d59026474a..f9b7076566730ef04df6b34b8e0b02e6d26e81f1 100644 GIT binary patch delta 1160 zcmV;31b6%R1fdC#85ITq0047(dh`GQ00DDSM?wIu&K&8HArpTIa7bBm000id000id z0mpBsWB>pJHc3Q5R9Hv7mq}<8K@^5xPvT@U(U^>wxJKg|TtJMtoZK!0ilF2mis&H< z9=)h14<1Ajym(O1gCe4b;3=L&R8*9p7+f&%ATGfrF0&;wlbIoH|8M&BRQFUzCjmdG zsaMtY`qg{&s=9y1IJ0ksNj4*yf-U(|Q(J9I<%~z)INiC{G)B^NxO21JMfCCaZ(AxS z@h#5vt=k`{X+|B(6Vd1C$jncjzfa5C>ZmRhq~UC?tOjrThH3lO7M6vH=m+eYnZKZh zT4ztA`r43737`#NAe+upFyvBYL_fFv5>4v3T2|v77z2Mq-}RQJ`Y_j_@FcEz61f6T zWH6a#StgcFo3KAU7h~T-hOjc zQ?p?=T_iJETPo_8#Sz9aNWw41;T^ok@<@dIfVZ}&Mb!_OHDTA*5aS$rkLOL(rf@Al z*Q;L%&~<+zAX`UGJOJbH9L6O&I-n0-tbHYDb3i-?VtnvdioV8@c5ex$V8_{_$7Z9)pV=v4|wKu$7sk3&Yt{frBK4*Uze z4e{g6Vt5b3G9j;VIVZ%p&H){Br%tw|5>5`tM?!zL9F9~qC!}ALjkmW;#G2WwC^m}?^ymNxx2WjEM zBTj#9l~B#?L+prGpD!f2c#^hkUC14H(f9X1Sk?h$jJbaOB{ekEa^FPs`AW8UX@mxT zWN7oICA^m1cRx{>N}o)SCb!q}T8}MIyAUrIGt_q+=p5jwM3D<%E-P-RcOnE(+6* zXbVL*&Z6q-0F7h|luM*|eWk?XX{%(4C1X(5iWPq;b4sr8~|Fa##S}B@`g> zY?0BuZ_M|oe@rT6BD#X!t^dfFm&friu5&;hqC+=O aBBDR7SFq}I-mbU+0000gn>qZK%-Mr_b1n!OhdJTf~=3z?4b6jYhhQMXrQCtbskFd^nhPG?Q>Ol5aJL zWHyLnHHlp;h+Qm*Tr7K6E`n4jfmA4XR4sT^EO%2Zbx$jDOn)m&OG`>hN=ZpcNJvOV zMn*h5JUcr(IyyQzIXO5uI5adgGcz+XGBPkQFxBZQ6aWAK19VbOQvmn=`;KhC0004s zNkl?RROgKX zhS#gSQNZweEq~?fwbSW%x}bc$b~+tT7Ygqm5jxi_c>h@7{B9}Sbb4mE0k`!zZ*YVJ zB74|K;B*5a1xXAy-GEO(Q@uzA+X`&~fDR?ty%JDq03vj~_G9fqxq4TS;BTT_DRBY$HLCV_|3-RZ86he@LLZ7~boyD&^Y@=Mr{37xw9WT%s!yZ0nJ)j#|ME10x!HSer7N8##>?>=(W0F{ z{>J^bzGHkk{Tk^yoS|57z%%^8J-h$_F8}}m0000O008g}OTns_vI_7QAUKM}QS~+j ztXIJIZJ_sk8)ftcy%!+qkyblnjmk3sfMcKR$li1MAEElM(bkUjE&u=k07*qoM6N<$ Ef@Lld!vFvP From e69732f81817aaeb2fe6523196b5932ea5719c0d Mon Sep 17 00:00:00 2001 From: muriplz <46825658+muriplz@users.noreply.github.com> Date: Thu, 3 Mar 2022 17:35:45 +0100 Subject: [PATCH 13/29] Updates to es_es.json by muriplz (#2523) --- .../assets/create/lang/unfinished/es_es.json | 1140 ++++++++--------- .../resources/assets/create/lang/es_es.json | 1058 ++++++++------- 2 files changed, 1147 insertions(+), 1051 deletions(-) diff --git a/src/generated/resources/assets/create/lang/unfinished/es_es.json b/src/generated/resources/assets/create/lang/unfinished/es_es.json index b27861f0c..64e9e3fc9 100644 --- a/src/generated/resources/assets/create/lang/unfinished/es_es.json +++ b/src/generated/resources/assets/create/lang/unfinished/es_es.json @@ -7,16 +7,16 @@ "block.create.acacia_window_pane": "Panel de ventana de acacia", "block.create.adjustable_chain_gearshift": "Cadena de transmisión ajustable", "block.create.analog_lever": "Palanca analógica", - "block.create.andesite_belt_funnel": "Embudo de cinta de andesita", + "block.create.andesite_belt_funnel": "Embudo lateral de andesita", "block.create.andesite_casing": "Revestidor de andesita", - "block.create.andesite_encased_cogwheel": "UNLOCALIZED: Andesite Encased Cogwheel", - "block.create.andesite_encased_large_cogwheel": "UNLOCALIZED: Andesite Encased Large Cogwheel", + "block.create.andesite_encased_cogwheel": "Engranaje revestido de andesita", + "block.create.andesite_encased_large_cogwheel": "Engranaje grande revestido de andesita", "block.create.andesite_encased_shaft": "Eje revestido de andesita", "block.create.andesite_funnel": "Embudo de andesita", - "block.create.andesite_pillar": "Poste de andesita", + "block.create.andesite_pillar": "Pilar de andesita", "block.create.andesite_tunnel": "Túnel de Andesita", - "block.create.asurine": "UNLOCALIZED: Asurine", - "block.create.asurine_pillar": "UNLOCALIZED: Asurine Pillar", + "block.create.asurine": "Azurina", + "block.create.asurine_pillar": "Pilar de azurina", "block.create.basin": "Cuenca", "block.create.belt": "Cinta", "block.create.birch_window": "Ventana de abedul", @@ -32,11 +32,11 @@ "block.create.blue_seat": "Asiento azul", "block.create.blue_toolbox": "Caja de herramientas azul", "block.create.blue_valve_handle": "Asa de válvula azul", - "block.create.brass_belt_funnel": "Embudo de cinta de latón", + "block.create.brass_belt_funnel": "Embudo lateral de latón", "block.create.brass_block": "Bloque de latón", "block.create.brass_casing": "Revestidor de latón", - "block.create.brass_encased_cogwheel": "UNLOCALIZED: Brass Encased Cogwheel", - "block.create.brass_encased_large_cogwheel": "UNLOCALIZED: Brass Encased Large Cogwheel", + "block.create.brass_encased_cogwheel": "Engranaje revestido de latón", + "block.create.brass_encased_large_cogwheel": "Engranaje grande revestido de latón", "block.create.brass_encased_shaft": "Eje revestido de latón", "block.create.brass_funnel": "Embudo de latón", "block.create.brass_tunnel": "Túnel de latón", @@ -45,146 +45,146 @@ "block.create.brown_seat": "Asiento marrón", "block.create.brown_toolbox": "Caja de herramientas marrón", "block.create.brown_valve_handle": "Asa de válvula marrón", - "block.create.calcite_pillar": "UNLOCALIZED: Calcite Pillar", + "block.create.calcite_pillar": "Pilar de calcita", "block.create.cart_assembler": "Ensamblador de vagonetas", "block.create.chocolate": "Chocolate", "block.create.chute": "Ducto", "block.create.clockwork_bearing": "Rodamiento tipo reloj", "block.create.clutch": "Embrague", - "block.create.cogwheel": "Engranaje pequeño", + "block.create.cogwheel": "Engranaje", "block.create.content_observer": "Observador de contenidos", "block.create.controller_rail": "Raíl de control", "block.create.copper_backtank": "Depósito trasero de cobre", "block.create.copper_casing": "Revestidor de caliza", - "block.create.copper_shingle_slab": "UNLOCALIZED: Copper Shingle Slab", - "block.create.copper_shingle_stairs": "UNLOCALIZED: Copper Shingle Stairs", + "block.create.copper_shingle_slab": "Losa de tejas de cobre", + "block.create.copper_shingle_stairs": "Escaleras de tejas de cobre", "block.create.copper_shingles": "Bloque de tejas de cobre", - "block.create.copper_tile_slab": "UNLOCALIZED: Copper Tile Slab", - "block.create.copper_tile_stairs": "UNLOCALIZED: Copper Tile Stairs", + "block.create.copper_tile_slab": "Losa de baldosas de cobre", + "block.create.copper_tile_stairs": "Escaleras de baldosas de cobre", "block.create.copper_tiles": "Bloque de baldosas de cobre", "block.create.copper_valve_handle": "Asa de válvula de cobre", "block.create.creative_crate": "Caja creativa", "block.create.creative_fluid_tank": "Tanque de fluidos creativo", "block.create.creative_motor": "Motor creativo", - "block.create.crimsite": "UNLOCALIZED: Crimsite", - "block.create.crimsite_pillar": "UNLOCALIZED: Crimsite Pillar", + "block.create.crimsite": "Carmesina", + "block.create.crimsite_pillar": "Pilar de carmesina", "block.create.crimson_window": "Ventana carmesí", "block.create.crimson_window_pane": "Panel de ventana carmesí", "block.create.crushing_wheel": "Rueda trituradora", "block.create.crushing_wheel_controller": "Controlador de Rueda trituradora", "block.create.cuckoo_clock": "Reloj de cuco", - "block.create.cut_andesite": "UNLOCALIZED: Cut Andesite", - "block.create.cut_andesite_brick_slab": "UNLOCALIZED: Cut Andesite Brick Slab", - "block.create.cut_andesite_brick_stairs": "UNLOCALIZED: Cut Andesite Brick Stairs", - "block.create.cut_andesite_brick_wall": "UNLOCALIZED: Cut Andesite Brick Wall", - "block.create.cut_andesite_bricks": "UNLOCALIZED: Cut Andesite Bricks", - "block.create.cut_andesite_slab": "UNLOCALIZED: Cut Andesite Slab", - "block.create.cut_andesite_stairs": "UNLOCALIZED: Cut Andesite Stairs", - "block.create.cut_andesite_wall": "UNLOCALIZED: Cut Andesite Wall", - "block.create.cut_asurine": "UNLOCALIZED: Cut Asurine", - "block.create.cut_asurine_brick_slab": "UNLOCALIZED: Cut Asurine Brick Slab", - "block.create.cut_asurine_brick_stairs": "UNLOCALIZED: Cut Asurine Brick Stairs", - "block.create.cut_asurine_brick_wall": "UNLOCALIZED: Cut Asurine Brick Wall", - "block.create.cut_asurine_bricks": "UNLOCALIZED: Cut Asurine Bricks", - "block.create.cut_asurine_slab": "UNLOCALIZED: Cut Asurine Slab", - "block.create.cut_asurine_stairs": "UNLOCALIZED: Cut Asurine Stairs", - "block.create.cut_asurine_wall": "UNLOCALIZED: Cut Asurine Wall", - "block.create.cut_calcite": "UNLOCALIZED: Cut Calcite", - "block.create.cut_calcite_brick_slab": "UNLOCALIZED: Cut Calcite Brick Slab", - "block.create.cut_calcite_brick_stairs": "UNLOCALIZED: Cut Calcite Brick Stairs", - "block.create.cut_calcite_brick_wall": "UNLOCALIZED: Cut Calcite Brick Wall", - "block.create.cut_calcite_bricks": "UNLOCALIZED: Cut Calcite Bricks", - "block.create.cut_calcite_slab": "UNLOCALIZED: Cut Calcite Slab", - "block.create.cut_calcite_stairs": "UNLOCALIZED: Cut Calcite Stairs", - "block.create.cut_calcite_wall": "UNLOCALIZED: Cut Calcite Wall", - "block.create.cut_crimsite": "UNLOCALIZED: Cut Crimsite", - "block.create.cut_crimsite_brick_slab": "UNLOCALIZED: Cut Crimsite Brick Slab", - "block.create.cut_crimsite_brick_stairs": "UNLOCALIZED: Cut Crimsite Brick Stairs", - "block.create.cut_crimsite_brick_wall": "UNLOCALIZED: Cut Crimsite Brick Wall", - "block.create.cut_crimsite_bricks": "UNLOCALIZED: Cut Crimsite Bricks", - "block.create.cut_crimsite_slab": "UNLOCALIZED: Cut Crimsite Slab", - "block.create.cut_crimsite_stairs": "UNLOCALIZED: Cut Crimsite Stairs", - "block.create.cut_crimsite_wall": "UNLOCALIZED: Cut Crimsite Wall", - "block.create.cut_deepslate": "UNLOCALIZED: Cut Deepslate", - "block.create.cut_deepslate_brick_slab": "UNLOCALIZED: Cut Deepslate Brick Slab", - "block.create.cut_deepslate_brick_stairs": "UNLOCALIZED: Cut Deepslate Brick Stairs", - "block.create.cut_deepslate_brick_wall": "UNLOCALIZED: Cut Deepslate Brick Wall", - "block.create.cut_deepslate_bricks": "UNLOCALIZED: Cut Deepslate Bricks", - "block.create.cut_deepslate_slab": "UNLOCALIZED: Cut Deepslate Slab", - "block.create.cut_deepslate_stairs": "UNLOCALIZED: Cut Deepslate Stairs", - "block.create.cut_deepslate_wall": "UNLOCALIZED: Cut Deepslate Wall", - "block.create.cut_diorite": "UNLOCALIZED: Cut Diorite", - "block.create.cut_diorite_brick_slab": "UNLOCALIZED: Cut Diorite Brick Slab", - "block.create.cut_diorite_brick_stairs": "UNLOCALIZED: Cut Diorite Brick Stairs", - "block.create.cut_diorite_brick_wall": "UNLOCALIZED: Cut Diorite Brick Wall", - "block.create.cut_diorite_bricks": "UNLOCALIZED: Cut Diorite Bricks", - "block.create.cut_diorite_slab": "UNLOCALIZED: Cut Diorite Slab", - "block.create.cut_diorite_stairs": "UNLOCALIZED: Cut Diorite Stairs", - "block.create.cut_diorite_wall": "UNLOCALIZED: Cut Diorite Wall", - "block.create.cut_dripstone": "UNLOCALIZED: Cut Dripstone", - "block.create.cut_dripstone_brick_slab": "UNLOCALIZED: Cut Dripstone Brick Slab", - "block.create.cut_dripstone_brick_stairs": "UNLOCALIZED: Cut Dripstone Brick Stairs", - "block.create.cut_dripstone_brick_wall": "UNLOCALIZED: Cut Dripstone Brick Wall", - "block.create.cut_dripstone_bricks": "UNLOCALIZED: Cut Dripstone Bricks", - "block.create.cut_dripstone_slab": "UNLOCALIZED: Cut Dripstone Slab", - "block.create.cut_dripstone_stairs": "UNLOCALIZED: Cut Dripstone Stairs", - "block.create.cut_dripstone_wall": "UNLOCALIZED: Cut Dripstone Wall", - "block.create.cut_granite": "UNLOCALIZED: Cut Granite", - "block.create.cut_granite_brick_slab": "UNLOCALIZED: Cut Granite Brick Slab", - "block.create.cut_granite_brick_stairs": "UNLOCALIZED: Cut Granite Brick Stairs", - "block.create.cut_granite_brick_wall": "UNLOCALIZED: Cut Granite Brick Wall", - "block.create.cut_granite_bricks": "UNLOCALIZED: Cut Granite Bricks", - "block.create.cut_granite_slab": "UNLOCALIZED: Cut Granite Slab", - "block.create.cut_granite_stairs": "UNLOCALIZED: Cut Granite Stairs", - "block.create.cut_granite_wall": "UNLOCALIZED: Cut Granite Wall", - "block.create.cut_limestone": "UNLOCALIZED: Cut Limestone", - "block.create.cut_limestone_brick_slab": "UNLOCALIZED: Cut Limestone Brick Slab", - "block.create.cut_limestone_brick_stairs": "UNLOCALIZED: Cut Limestone Brick Stairs", - "block.create.cut_limestone_brick_wall": "UNLOCALIZED: Cut Limestone Brick Wall", - "block.create.cut_limestone_bricks": "UNLOCALIZED: Cut Limestone Bricks", - "block.create.cut_limestone_slab": "UNLOCALIZED: Cut Limestone Slab", - "block.create.cut_limestone_stairs": "UNLOCALIZED: Cut Limestone Stairs", - "block.create.cut_limestone_wall": "UNLOCALIZED: Cut Limestone Wall", - "block.create.cut_ochrum": "UNLOCALIZED: Cut Ochrum", - "block.create.cut_ochrum_brick_slab": "UNLOCALIZED: Cut Ochrum Brick Slab", - "block.create.cut_ochrum_brick_stairs": "UNLOCALIZED: Cut Ochrum Brick Stairs", - "block.create.cut_ochrum_brick_wall": "UNLOCALIZED: Cut Ochrum Brick Wall", - "block.create.cut_ochrum_bricks": "UNLOCALIZED: Cut Ochrum Bricks", - "block.create.cut_ochrum_slab": "UNLOCALIZED: Cut Ochrum Slab", - "block.create.cut_ochrum_stairs": "UNLOCALIZED: Cut Ochrum Stairs", - "block.create.cut_ochrum_wall": "UNLOCALIZED: Cut Ochrum Wall", - "block.create.cut_scorchia": "UNLOCALIZED: Cut Scorchia", - "block.create.cut_scorchia_brick_slab": "UNLOCALIZED: Cut Scorchia Brick Slab", - "block.create.cut_scorchia_brick_stairs": "UNLOCALIZED: Cut Scorchia Brick Stairs", - "block.create.cut_scorchia_brick_wall": "UNLOCALIZED: Cut Scorchia Brick Wall", - "block.create.cut_scorchia_bricks": "UNLOCALIZED: Cut Scorchia Bricks", - "block.create.cut_scorchia_slab": "UNLOCALIZED: Cut Scorchia Slab", - "block.create.cut_scorchia_stairs": "UNLOCALIZED: Cut Scorchia Stairs", - "block.create.cut_scorchia_wall": "UNLOCALIZED: Cut Scorchia Wall", - "block.create.cut_scoria": "UNLOCALIZED: Cut Scoria", - "block.create.cut_scoria_brick_slab": "UNLOCALIZED: Cut Scoria Brick Slab", - "block.create.cut_scoria_brick_stairs": "UNLOCALIZED: Cut Scoria Brick Stairs", - "block.create.cut_scoria_brick_wall": "UNLOCALIZED: Cut Scoria Brick Wall", - "block.create.cut_scoria_bricks": "UNLOCALIZED: Cut Scoria Bricks", - "block.create.cut_scoria_slab": "UNLOCALIZED: Cut Scoria Slab", - "block.create.cut_scoria_stairs": "UNLOCALIZED: Cut Scoria Stairs", - "block.create.cut_scoria_wall": "UNLOCALIZED: Cut Scoria Wall", - "block.create.cut_tuff": "UNLOCALIZED: Cut Tuff", - "block.create.cut_tuff_brick_slab": "UNLOCALIZED: Cut Tuff Brick Slab", - "block.create.cut_tuff_brick_stairs": "UNLOCALIZED: Cut Tuff Brick Stairs", - "block.create.cut_tuff_brick_wall": "UNLOCALIZED: Cut Tuff Brick Wall", - "block.create.cut_tuff_bricks": "UNLOCALIZED: Cut Tuff Bricks", - "block.create.cut_tuff_slab": "UNLOCALIZED: Cut Tuff Slab", - "block.create.cut_tuff_stairs": "UNLOCALIZED: Cut Tuff Stairs", - "block.create.cut_tuff_wall": "UNLOCALIZED: Cut Tuff Wall", - "block.create.cut_veridium": "UNLOCALIZED: Cut Veridium", - "block.create.cut_veridium_brick_slab": "UNLOCALIZED: Cut Veridium Brick Slab", - "block.create.cut_veridium_brick_stairs": "UNLOCALIZED: Cut Veridium Brick Stairs", - "block.create.cut_veridium_brick_wall": "UNLOCALIZED: Cut Veridium Brick Wall", - "block.create.cut_veridium_bricks": "UNLOCALIZED: Cut Veridium Bricks", - "block.create.cut_veridium_slab": "UNLOCALIZED: Cut Veridium Slab", - "block.create.cut_veridium_stairs": "UNLOCALIZED: Cut Veridium Stairs", - "block.create.cut_veridium_wall": "UNLOCALIZED: Cut Veridium Wall", + "block.create.cut_andesite": "Andesita cortada", + "block.create.cut_andesite_brick_slab": "Losa de ladrillos de andesita cortada", + "block.create.cut_andesite_brick_stairs": "Escaleras de ladrillos de andesita cortada", + "block.create.cut_andesite_brick_wall": "Muro de ladrillos de andesita cortada", + "block.create.cut_andesite_bricks": "Ladrillos de andesita cortada", + "block.create.cut_andesite_slab": "Losa de andesita cortada", + "block.create.cut_andesite_stairs": "Escaleras de andesite cortada", + "block.create.cut_andesite_wall": "Muro de andesita cortada", + "block.create.cut_asurine": "Azurina cortada", + "block.create.cut_asurine_brick_slab": "Losa de ladrillos de azurina cortada", + "block.create.cut_asurine_brick_stairs": "Escaleras de ladrillos de azurina cortada", + "block.create.cut_asurine_brick_wall": "Muro de ladrillos de azurina cortada", + "block.create.cut_asurine_bricks": "Ladrillos de azurina cortada", + "block.create.cut_asurine_slab": "Losa de azurina cortada", + "block.create.cut_asurine_stairs": "Escaleras de azurina cortada", + "block.create.cut_asurine_wall": "Muro de azurina cortada", + "block.create.cut_calcite": "Calcita cortada", + "block.create.cut_calcite_brick_slab": "Losa de ladrillos de calcita cortada", + "block.create.cut_calcite_brick_stairs": "Escaleras de ladrillos de calcita cortada", + "block.create.cut_calcite_brick_wall": "Muro de ladrillos de calcita cortada", + "block.create.cut_calcite_bricks": "Ladrillos de calcita cortada", + "block.create.cut_calcite_slab": "Losa de calcita cortada", + "block.create.cut_calcite_stairs": "Escaleras de calcita cortada", + "block.create.cut_calcite_wall": "Muro de calcita cortada", + "block.create.cut_crimsite": "Carmesina cortada", + "block.create.cut_crimsite_brick_slab": "Losa de ladrillos de carmesina cortada", + "block.create.cut_crimsite_brick_stairs": "Escaleras de ladrillos de carmesina cortada", + "block.create.cut_crimsite_brick_wall": "Muro de ladrillos de carmesina cortada", + "block.create.cut_crimsite_bricks": "Ladrillos de carmesina cortada", + "block.create.cut_crimsite_slab": "Losa de carmesina cortada", + "block.create.cut_crimsite_stairs": "Escaleras de carmesina cortada", + "block.create.cut_crimsite_wall": "Muro de carmesina cortada", + "block.create.cut_deepslate": "Pizarra profunda cortada", + "block.create.cut_deepslate_brick_slab": "Losa de ladrillos de pizarra profunda cortada", + "block.create.cut_deepslate_brick_stairs": "Escaleras de ladrillos de pizarra profunda cortada", + "block.create.cut_deepslate_brick_wall": "Muro de ladrillos de pizarra profunda cortada", + "block.create.cut_deepslate_bricks": "Ladrillos de pizarra profunda cortada", + "block.create.cut_deepslate_slab": "Losa de pizarra profunda cortada", + "block.create.cut_deepslate_stairs": "Escaleras de pizarra profunda cortada", + "block.create.cut_deepslate_wall": "Muro de pizarra profunda cortada", + "block.create.cut_diorite": "Diorita cortada", + "block.create.cut_diorite_brick_slab": "Losa de ladrillos de diorita cortada", + "block.create.cut_diorite_brick_stairs": "Escaleras de ladrillos de diorita cortada", + "block.create.cut_diorite_brick_wall": "Muro de ladrillos de diorita cortada", + "block.create.cut_diorite_bricks": "Ladrillos de diorita cortada", + "block.create.cut_diorite_slab": "Losa de diorita cortada", + "block.create.cut_diorite_stairs": "Escaleras de diorita cortada", + "block.create.cut_diorite_wall": "Muro de diorita cortada", + "block.create.cut_dripstone": "Bloque de espeleotema cortado", + "block.create.cut_dripstone_brick_slab": "Losa de ladrillos de espeleotema cortado", + "block.create.cut_dripstone_brick_stairs": "Escaleras de ladrillos de espeleotema cortado", + "block.create.cut_dripstone_brick_wall": "Muro de ladrillos de espeleotema cortado", + "block.create.cut_dripstone_bricks": "Ladrillos de espeleotema cortado", + "block.create.cut_dripstone_slab": "Losa de espeleotema cortado", + "block.create.cut_dripstone_stairs": "Escaleras de espeleotema cortado", + "block.create.cut_dripstone_wall": "Muro de espeleotema cortado", + "block.create.cut_granite": "Granito cortado", + "block.create.cut_granite_brick_slab": "Losa de ladrillos de granito cortado", + "block.create.cut_granite_brick_stairs": "Escaleras de ladrillos de granito cortado", + "block.create.cut_granite_brick_wall": "Muro de ladrillos de granito cortado", + "block.create.cut_granite_bricks": "Ladrillos de granito cortado", + "block.create.cut_granite_slab": "Losa de granito cortado", + "block.create.cut_granite_stairs": "Escaleras de granito cortado", + "block.create.cut_granite_wall": "Muro de granito cortado", + "block.create.cut_limestone": "Piedra caliza cortada", + "block.create.cut_limestone_brick_slab": "Losa de ladrillos de piedra caliza cortada", + "block.create.cut_limestone_brick_stairs": "Escaleras de ladrillos de piedra caliza cortada", + "block.create.cut_limestone_brick_wall": "Muro de ladrillos de piedra caliza cortada", + "block.create.cut_limestone_bricks": "Ladrillos de piedra caliza cortada", + "block.create.cut_limestone_slab": "Losa de piedra caliza cortada", + "block.create.cut_limestone_stairs": "Escaleras de piedra caliza cortada", + "block.create.cut_limestone_wall": "Muro de piedra caliza cortada", + "block.create.cut_ochrum": "Ocre cortado", + "block.create.cut_ochrum_brick_slab": "Losa de ladrillos de ocre cortado", + "block.create.cut_ochrum_brick_stairs": "Escaleras de ladrillos de ocre cortado", + "block.create.cut_ochrum_brick_wall": "Muro de ladrillos de ocre cortado", + "block.create.cut_ochrum_bricks": "Ladrillos de ocre cortado", + "block.create.cut_ochrum_slab": "Losa de ocre cortado", + "block.create.cut_ochrum_stairs": "Escaleras de ocre cortado", + "block.create.cut_ochrum_wall": "Muro de ocre cortado", + "block.create.cut_scorchia": "Escoria oscura cortada", + "block.create.cut_scorchia_brick_slab": "Losa de ladrillos de escoria oscura cortada", + "block.create.cut_scorchia_brick_stairs": "Escaleras de ladrillos de escoria oscura cortada", + "block.create.cut_scorchia_brick_wall": "Muro de ladrillos de escoria oscura cortada", + "block.create.cut_scorchia_bricks": "Ladrillos de escoria oscura cortada", + "block.create.cut_scorchia_slab": "Losa de escoria oscura cortada", + "block.create.cut_scorchia_stairs": "Escaleras de escoria oscura cortada", + "block.create.cut_scorchia_wall": "Muro de escoria oscura cortada", + "block.create.cut_scoria": "Escoria cortada", + "block.create.cut_scoria_brick_slab": "Losa de ladrillos de escoria cortada", + "block.create.cut_scoria_brick_stairs": "Escaleras de ladrillos de escoria cortada", + "block.create.cut_scoria_brick_wall": "Muro de ladrillos de escoria cortada", + "block.create.cut_scoria_bricks": "Ladrillos de escoria cortada", + "block.create.cut_scoria_slab": "Losa de escoria cortada", + "block.create.cut_scoria_stairs": "Escaleras de escoria cortada", + "block.create.cut_scoria_wall": "Muro de escoria cortada", + "block.create.cut_tuff": "Toba cortada", + "block.create.cut_tuff_brick_slab": "Losa de ladrillos de toba cortada", + "block.create.cut_tuff_brick_stairs": "Escaleras de ladrillos de toba cortada", + "block.create.cut_tuff_brick_wall": "Muro de ladrillos de toba cortada", + "block.create.cut_tuff_bricks": "Ladrillos de toba cortada", + "block.create.cut_tuff_slab": "Losa de toba cortada", + "block.create.cut_tuff_stairs": "Escaleras de toba cortada", + "block.create.cut_tuff_wall": "Muro de toba cortada", + "block.create.cut_veridium": "Veridio cortado", + "block.create.cut_veridium_brick_slab": "Losa de ladrillos de veridio cortado", + "block.create.cut_veridium_brick_stairs": "Escaleras de ladrillos de veridio cortado", + "block.create.cut_veridium_brick_wall": "Muro de ladrillos de veridio cortado", + "block.create.cut_veridium_bricks": "Ladrillos de veridio cortado", + "block.create.cut_veridium_slab": "Losa de veridio cortado", + "block.create.cut_veridium_stairs": "Escaleras de veridio cortado", + "block.create.cut_veridium_wall": "Muro de veridio cortado", "block.create.cyan_nixie_tube": "Tubo Nixie cian", "block.create.cyan_sail": "Vela cian", "block.create.cyan_seat": "Asiento cian", @@ -192,21 +192,21 @@ "block.create.cyan_valve_handle": "Asa de válvula cian", "block.create.dark_oak_window": "Ventana de roble oscuro", "block.create.dark_oak_window_pane": "Panel de ventana de roble oscuro", - "block.create.deepslate_pillar": "UNLOCALIZED: Deepslate Pillar", - "block.create.deepslate_zinc_ore": "UNLOCALIZED: Deepslate Zinc Ore", + "block.create.deepslate_pillar": "Pilar de pizarra profunda", + "block.create.deepslate_zinc_ore": "Mena de cinc de pizarra profunda", "block.create.deployer": "Desplegador", "block.create.depot": "Depósito", "block.create.diorite_pillar": "Pilar de diorita", - "block.create.dripstone_pillar": "UNLOCALIZED: Dripstone Pillar", + "block.create.dripstone_pillar": "Pilar de espeleotema", "block.create.encased_chain_drive": "Cadena de transmisión revestida", "block.create.encased_fan": "Ventilador revestido", "block.create.encased_fluid_pipe": "Tubería de fluidos de cobre reforzada", - "block.create.exposed_copper_shingle_slab": "UNLOCALIZED: Exposed Copper Shingle Slab", - "block.create.exposed_copper_shingle_stairs": "UNLOCALIZED: Exposed Copper Shingle Stairs", - "block.create.exposed_copper_shingles": "UNLOCALIZED: Exposed Copper Shingles", - "block.create.exposed_copper_tile_slab": "UNLOCALIZED: Exposed Copper Tile Slab", - "block.create.exposed_copper_tile_stairs": "UNLOCALIZED: Exposed Copper Tile Stairs", - "block.create.exposed_copper_tiles": "UNLOCALIZED: Exposed Copper Tiles", + "block.create.exposed_copper_shingle_slab": "Losa de tejas de cobre expuesto", + "block.create.exposed_copper_shingle_stairs": "Escaleras de tejas de cobre expuesto", + "block.create.exposed_copper_shingles": "Bloque de tejas de cobre expuesto", + "block.create.exposed_copper_tile_slab": "Losa de baldosas de cobre expuesto", + "block.create.exposed_copper_tile_stairs": "Escaleras de baldosas de cobre expuesto", + "block.create.exposed_copper_tiles": "Blooque de baldosas de cobre expuesto", "block.create.fluid_pipe": "Tubería de fluidos de cobre", "block.create.fluid_tank": "Depósito de fluidos", "block.create.fluid_valve": "Válvula de fluidos", @@ -231,30 +231,30 @@ "block.create.green_toolbox": "Caja de herramientas verde", "block.create.green_valve_handle": "Asa de válvula verde", "block.create.hand_crank": "Manivela", - "block.create.haunted_bell": "Campana encantada", + "block.create.haunted_bell": "Campana maldita", "block.create.honey": "Miel", "block.create.horizontal_framed_glass": "Cristal con marco horizontal", "block.create.horizontal_framed_glass_pane": "Panel de cristal con marco horizontal", "block.create.hose_pulley": "Polea de manguera", "block.create.item_drain": "Drenador de objetos", - "block.create.item_vault": "UNLOCALIZED: Item Vault", + "block.create.item_vault": "Bóveda de objetos", "block.create.jungle_window": "Ventana de jungla", "block.create.jungle_window_pane": "Panel de ventana de jungla", "block.create.large_cogwheel": "Engranaje grande", "block.create.layered_andesite": "Andesita estratificada", - "block.create.layered_asurine": "UNLOCALIZED: Layered Asurine", - "block.create.layered_calcite": "UNLOCALIZED: Layered Calcite", - "block.create.layered_crimsite": "UNLOCALIZED: Layered Crimsite", - "block.create.layered_deepslate": "UNLOCALIZED: Layered Deepslate", + "block.create.layered_asurine": "Azurina estratificada", + "block.create.layered_calcite": "Calcita estratificada", + "block.create.layered_crimsite": "Carmesina estratificada", + "block.create.layered_deepslate": "Pizarra profunda estratificada", "block.create.layered_diorite": "Diorita estratificada", - "block.create.layered_dripstone": "UNLOCALIZED: Layered Dripstone", + "block.create.layered_dripstone": "Bloque de espeleotema estratificado", "block.create.layered_granite": "Granito estratificado", "block.create.layered_limestone": "Piedra caliza estratificada", - "block.create.layered_ochrum": "UNLOCALIZED: Layered Ochrum", - "block.create.layered_scorchia": "UNLOCALIZED: Layered Scorchia", + "block.create.layered_ochrum": "Ocre estratificado", + "block.create.layered_scorchia": "Escoria oscura estratificada", "block.create.layered_scoria": "Escoria estratificada", - "block.create.layered_tuff": "UNLOCALIZED: Layered Tuff", - "block.create.layered_veridium": "UNLOCALIZED: Layered Veridium", + "block.create.layered_tuff": "Toba estratificada", + "block.create.layered_veridium": "Veridio estratificado", "block.create.lectern_controller": "Controlador de atril", "block.create.light_blue_nixie_tube": "Tubo Nixie azul claro", "block.create.light_blue_sail": "Vela azul claro", @@ -300,20 +300,20 @@ "block.create.nozzle": "Boquilla", "block.create.oak_window": "Ventana de roble", "block.create.oak_window_pane": "Panel de ventana de roble", - "block.create.ochrum": "UNLOCALIZED: Ochrum", - "block.create.ochrum_pillar": "UNLOCALIZED: Ochrum Pillar", + "block.create.ochrum": "Ocre", + "block.create.ochrum_pillar": "Pilar de ocre", "block.create.orange_sail": "Vela naranja", "block.create.orange_seat": "Asiento naranja", "block.create.orange_toolbox": "Caja de herramientas naranja", "block.create.orange_valve_handle": "Asa de válvula naranja", "block.create.ornate_iron_window": "Ventana de hierro ornamentada", "block.create.ornate_iron_window_pane": "Panel de ventana de hierro ornamentada", - "block.create.oxidized_copper_shingle_slab": "UNLOCALIZED: Oxidized Copper Shingle Slab", - "block.create.oxidized_copper_shingle_stairs": "UNLOCALIZED: Oxidized Copper Shingle Stairs", - "block.create.oxidized_copper_shingles": "UNLOCALIZED: Oxidized Copper Shingles", - "block.create.oxidized_copper_tile_slab": "UNLOCALIZED: Oxidized Copper Tile Slab", - "block.create.oxidized_copper_tile_stairs": "UNLOCALIZED: Oxidized Copper Tile Stairs", - "block.create.oxidized_copper_tiles": "UNLOCALIZED: Oxidized Copper Tiles", + "block.create.oxidized_copper_shingle_slab": "Losa de tejas de cobre oxidado", + "block.create.oxidized_copper_shingle_stairs": "Escaleras de tejas de cobre oxidado", + "block.create.oxidized_copper_shingles": "Bloque de tejas de cobre oxidado", + "block.create.oxidized_copper_tile_slab": "Losa de baldosas de cobre oxidado", + "block.create.oxidized_copper_tile_stairs": "Escaleras de baldosas de cobre oxidado", + "block.create.oxidized_copper_tiles": "Bloque de baldosas de cobre oxidado", "block.create.peculiar_bell": "Campana peculiar", "block.create.pink_nixie_tube": "Tubo Nixie rosa", "block.create.pink_sail": "Vela rosa", @@ -321,68 +321,68 @@ "block.create.pink_toolbox": "Caja de herramientas rosa", "block.create.pink_valve_handle": "Asa de válvula rosa", "block.create.piston_extension_pole": "Pértiga de extensión de pistón", - "block.create.polished_cut_andesite": "UNLOCALIZED: Polished Cut Andesite", - "block.create.polished_cut_andesite_slab": "UNLOCALIZED: Polished Cut Andesite Slab", - "block.create.polished_cut_andesite_stairs": "UNLOCALIZED: Polished Cut Andesite Stairs", - "block.create.polished_cut_andesite_wall": "UNLOCALIZED: Polished Cut Andesite Wall", - "block.create.polished_cut_asurine": "UNLOCALIZED: Polished Cut Asurine", - "block.create.polished_cut_asurine_slab": "UNLOCALIZED: Polished Cut Asurine Slab", - "block.create.polished_cut_asurine_stairs": "UNLOCALIZED: Polished Cut Asurine Stairs", - "block.create.polished_cut_asurine_wall": "UNLOCALIZED: Polished Cut Asurine Wall", - "block.create.polished_cut_calcite": "UNLOCALIZED: Polished Cut Calcite", - "block.create.polished_cut_calcite_slab": "UNLOCALIZED: Polished Cut Calcite Slab", - "block.create.polished_cut_calcite_stairs": "UNLOCALIZED: Polished Cut Calcite Stairs", - "block.create.polished_cut_calcite_wall": "UNLOCALIZED: Polished Cut Calcite Wall", - "block.create.polished_cut_crimsite": "UNLOCALIZED: Polished Cut Crimsite", - "block.create.polished_cut_crimsite_slab": "UNLOCALIZED: Polished Cut Crimsite Slab", - "block.create.polished_cut_crimsite_stairs": "UNLOCALIZED: Polished Cut Crimsite Stairs", - "block.create.polished_cut_crimsite_wall": "UNLOCALIZED: Polished Cut Crimsite Wall", - "block.create.polished_cut_deepslate": "UNLOCALIZED: Polished Cut Deepslate", - "block.create.polished_cut_deepslate_slab": "UNLOCALIZED: Polished Cut Deepslate Slab", - "block.create.polished_cut_deepslate_stairs": "UNLOCALIZED: Polished Cut Deepslate Stairs", - "block.create.polished_cut_deepslate_wall": "UNLOCALIZED: Polished Cut Deepslate Wall", - "block.create.polished_cut_diorite": "UNLOCALIZED: Polished Cut Diorite", - "block.create.polished_cut_diorite_slab": "UNLOCALIZED: Polished Cut Diorite Slab", - "block.create.polished_cut_diorite_stairs": "UNLOCALIZED: Polished Cut Diorite Stairs", - "block.create.polished_cut_diorite_wall": "UNLOCALIZED: Polished Cut Diorite Wall", - "block.create.polished_cut_dripstone": "UNLOCALIZED: Polished Cut Dripstone", - "block.create.polished_cut_dripstone_slab": "UNLOCALIZED: Polished Cut Dripstone Slab", - "block.create.polished_cut_dripstone_stairs": "UNLOCALIZED: Polished Cut Dripstone Stairs", - "block.create.polished_cut_dripstone_wall": "UNLOCALIZED: Polished Cut Dripstone Wall", - "block.create.polished_cut_granite": "UNLOCALIZED: Polished Cut Granite", - "block.create.polished_cut_granite_slab": "UNLOCALIZED: Polished Cut Granite Slab", - "block.create.polished_cut_granite_stairs": "UNLOCALIZED: Polished Cut Granite Stairs", - "block.create.polished_cut_granite_wall": "UNLOCALIZED: Polished Cut Granite Wall", - "block.create.polished_cut_limestone": "UNLOCALIZED: Polished Cut Limestone", - "block.create.polished_cut_limestone_slab": "UNLOCALIZED: Polished Cut Limestone Slab", - "block.create.polished_cut_limestone_stairs": "UNLOCALIZED: Polished Cut Limestone Stairs", - "block.create.polished_cut_limestone_wall": "UNLOCALIZED: Polished Cut Limestone Wall", - "block.create.polished_cut_ochrum": "UNLOCALIZED: Polished Cut Ochrum", - "block.create.polished_cut_ochrum_slab": "UNLOCALIZED: Polished Cut Ochrum Slab", - "block.create.polished_cut_ochrum_stairs": "UNLOCALIZED: Polished Cut Ochrum Stairs", - "block.create.polished_cut_ochrum_wall": "UNLOCALIZED: Polished Cut Ochrum Wall", - "block.create.polished_cut_scorchia": "UNLOCALIZED: Polished Cut Scorchia", - "block.create.polished_cut_scorchia_slab": "UNLOCALIZED: Polished Cut Scorchia Slab", - "block.create.polished_cut_scorchia_stairs": "UNLOCALIZED: Polished Cut Scorchia Stairs", - "block.create.polished_cut_scorchia_wall": "UNLOCALIZED: Polished Cut Scorchia Wall", - "block.create.polished_cut_scoria": "UNLOCALIZED: Polished Cut Scoria", - "block.create.polished_cut_scoria_slab": "UNLOCALIZED: Polished Cut Scoria Slab", - "block.create.polished_cut_scoria_stairs": "UNLOCALIZED: Polished Cut Scoria Stairs", - "block.create.polished_cut_scoria_wall": "UNLOCALIZED: Polished Cut Scoria Wall", - "block.create.polished_cut_tuff": "UNLOCALIZED: Polished Cut Tuff", - "block.create.polished_cut_tuff_slab": "UNLOCALIZED: Polished Cut Tuff Slab", - "block.create.polished_cut_tuff_stairs": "UNLOCALIZED: Polished Cut Tuff Stairs", - "block.create.polished_cut_tuff_wall": "UNLOCALIZED: Polished Cut Tuff Wall", - "block.create.polished_cut_veridium": "UNLOCALIZED: Polished Cut Veridium", - "block.create.polished_cut_veridium_slab": "UNLOCALIZED: Polished Cut Veridium Slab", - "block.create.polished_cut_veridium_stairs": "UNLOCALIZED: Polished Cut Veridium Stairs", - "block.create.polished_cut_veridium_wall": "UNLOCALIZED: Polished Cut Veridium Wall", + "block.create.polished_cut_andesite": "Andesita cortada pulida", + "block.create.polished_cut_andesite_slab": "Losa de andesita cortada pulida", + "block.create.polished_cut_andesite_stairs": "Escaleras de andesita cortada pulida", + "block.create.polished_cut_andesite_wall": "Muro de andesita cortada pulida", + "block.create.polished_cut_asurine": "Azurina cortada pulida", + "block.create.polished_cut_asurine_slab": "Losa de azurina cortada pulida", + "block.create.polished_cut_asurine_stairs": "Escaleras de azurina cortada pulida", + "block.create.polished_cut_asurine_wall": "Muro de azurina cortada pulida", + "block.create.polished_cut_calcite": "Calcita cortada pulida", + "block.create.polished_cut_calcite_slab": "Losa de calcita cortada pulida", + "block.create.polished_cut_calcite_stairs": "Escaleras de calcita cortada pulida", + "block.create.polished_cut_calcite_wall": "Muro de calcita cortada pulida", + "block.create.polished_cut_crimsite": "Carmesina cortada pulida", + "block.create.polished_cut_crimsite_slab": "Losa de carmesina cortada pulida", + "block.create.polished_cut_crimsite_stairs": "Escaleras de carmesina cortada pulida", + "block.create.polished_cut_crimsite_wall": "Muro de carmesina cortada pulida", + "block.create.polished_cut_deepslate": "Pizarra profunda cortada pulida", + "block.create.polished_cut_deepslate_slab": "Losa de pizarra profunda cortada pulida", + "block.create.polished_cut_deepslate_stairs": "Escaleras de pizarra profunda cortada pulida", + "block.create.polished_cut_deepslate_wall": "Muro de pizarra profunda cortada pulida", + "block.create.polished_cut_diorite": "Diorita cortada pulida", + "block.create.polished_cut_diorite_slab": "Losa de diorita cortada pulida", + "block.create.polished_cut_diorite_stairs": "Escaleras de diorita cortada pulida", + "block.create.polished_cut_diorite_wall": "Muro de diorita cortada pulida", + "block.create.polished_cut_dripstone": "Bloque de espeleotema cortado pulido", + "block.create.polished_cut_dripstone_slab": "Losa de espeleotema cortado pulido", + "block.create.polished_cut_dripstone_stairs": "Escaleras de espeleotema cortado pulido", + "block.create.polished_cut_dripstone_wall": "Muro de espeleotema cortado pulido", + "block.create.polished_cut_granite": "Granito cortado pulido", + "block.create.polished_cut_granite_slab": "Losa de granito cortado pulido", + "block.create.polished_cut_granite_stairs": "Escaleras de granito cortado pulido", + "block.create.polished_cut_granite_wall": "Muro de granito cortado pulido", + "block.create.polished_cut_limestone": "Piedra caliza cortada pulida", + "block.create.polished_cut_limestone_slab": "Losa de piedra caliza cortada pulida", + "block.create.polished_cut_limestone_stairs": "Escaleras de piedra caliza cortada pulida", + "block.create.polished_cut_limestone_wall": "Muro de piedra caliza cortada pulida", + "block.create.polished_cut_ochrum": "Ocre cortado pulido", + "block.create.polished_cut_ochrum_slab": "Losa de ocre cortado pulido", + "block.create.polished_cut_ochrum_stairs": "Escaleras de ocre cortado pulido", + "block.create.polished_cut_ochrum_wall": "Muro de ocre cortado pulido", + "block.create.polished_cut_scorchia": "Escoria oscura cortada pulida", + "block.create.polished_cut_scorchia_slab": "Losa de escoria oscura cortada pulida", + "block.create.polished_cut_scorchia_stairs": "Escalera de escoria oscura cortada pulida", + "block.create.polished_cut_scorchia_wall": "Muro de escoria oscura cortada pulida", + "block.create.polished_cut_scoria": "Escoria cortada pulida", + "block.create.polished_cut_scoria_slab": "Losa de escoria cortada pulida", + "block.create.polished_cut_scoria_stairs": "Escaleras de escoria cortada pulida", + "block.create.polished_cut_scoria_wall": "Muro de escoria cortada pulida", + "block.create.polished_cut_tuff": "Toba cortada pulida", + "block.create.polished_cut_tuff_slab": "Losa de toba cortada pulida", + "block.create.polished_cut_tuff_stairs": "Escaleras de toba cortada pulida", + "block.create.polished_cut_tuff_wall": "Muro de toba cortada pulida", + "block.create.polished_cut_veridium": "Veridio cortado pulido", + "block.create.polished_cut_veridium_slab": "Losa de veridio cortado pulido", + "block.create.polished_cut_veridium_stairs": "Escaleras de veridio cortado pulido", + "block.create.polished_cut_veridium_wall": "Muro de veridio cortado pulido", "block.create.portable_fluid_interface": "Interfaz de fluidos portátil", "block.create.portable_storage_interface": "Interfaz de almacenamiento portátil", "block.create.powered_latch": "Palanca motorizada", "block.create.powered_toggle_latch": "Palanca de cierre motorizada", "block.create.pulley_magnet": "Imán de la polea", - "block.create.pulse_extender": "UNLOCALIZED: Pulse Extender", + "block.create.pulse_extender": "Extensor de pulso", "block.create.pulse_repeater": "Repetidor de pulsos de redstone", "block.create.purple_nixie_tube": "Tubo Nixie morado", "block.create.purple_sail": "Vela morada", @@ -390,7 +390,7 @@ "block.create.purple_toolbox": "Caja de herramientas púrpura", "block.create.purple_valve_handle": "Asa de válvula morada", "block.create.radial_chassis": "Chasis radial", - "block.create.raw_zinc_block": "UNLOCALIZED: Block of Raw Zinc", + "block.create.raw_zinc_block": "Bloque de cinc en bruto", "block.create.red_nixie_tube": "Tubo Nixie rojo", "block.create.red_sail": "Vela roja", "block.create.red_seat": "Asiento rojo", @@ -404,147 +404,147 @@ "block.create.rotation_speed_controller": "Controlador de velocidad rotacional", "block.create.sail_frame": "Marco de vela", "block.create.schematic_table": "Tabla de esquemas", - "block.create.schematicannon": "Cañón de esquemas", - "block.create.scorchia": "UNLOCALIZED: Scorchia", - "block.create.scorchia_pillar": "UNLOCALIZED: Scorchia Pillar", + "block.create.schematicannon": "Esquematicañón", + "block.create.scorchia": "Escoria oscura", + "block.create.scorchia_pillar": "Pilar de escoria oscura", "block.create.scoria": "Escoria", "block.create.scoria_pillar": "Pilar de escoria", "block.create.secondary_linear_chassis": "Chasis lineal secundario", "block.create.sequenced_gearshift": "Caja de cambios secuencial", "block.create.shadow_steel_casing": "Revestidor sombrío", "block.create.shaft": "Eje", - "block.create.small_andesite_brick_slab": "UNLOCALIZED: Small Andesite Brick Slab", - "block.create.small_andesite_brick_stairs": "UNLOCALIZED: Small Andesite Brick Stairs", - "block.create.small_andesite_brick_wall": "UNLOCALIZED: Small Andesite Brick Wall", - "block.create.small_andesite_bricks": "UNLOCALIZED: Small Andesite Bricks", - "block.create.small_asurine_brick_slab": "UNLOCALIZED: Small Asurine Brick Slab", - "block.create.small_asurine_brick_stairs": "UNLOCALIZED: Small Asurine Brick Stairs", - "block.create.small_asurine_brick_wall": "UNLOCALIZED: Small Asurine Brick Wall", - "block.create.small_asurine_bricks": "UNLOCALIZED: Small Asurine Bricks", - "block.create.small_calcite_brick_slab": "UNLOCALIZED: Small Calcite Brick Slab", - "block.create.small_calcite_brick_stairs": "UNLOCALIZED: Small Calcite Brick Stairs", - "block.create.small_calcite_brick_wall": "UNLOCALIZED: Small Calcite Brick Wall", - "block.create.small_calcite_bricks": "UNLOCALIZED: Small Calcite Bricks", - "block.create.small_crimsite_brick_slab": "UNLOCALIZED: Small Crimsite Brick Slab", - "block.create.small_crimsite_brick_stairs": "UNLOCALIZED: Small Crimsite Brick Stairs", - "block.create.small_crimsite_brick_wall": "UNLOCALIZED: Small Crimsite Brick Wall", - "block.create.small_crimsite_bricks": "UNLOCALIZED: Small Crimsite Bricks", - "block.create.small_deepslate_brick_slab": "UNLOCALIZED: Small Deepslate Brick Slab", - "block.create.small_deepslate_brick_stairs": "UNLOCALIZED: Small Deepslate Brick Stairs", - "block.create.small_deepslate_brick_wall": "UNLOCALIZED: Small Deepslate Brick Wall", - "block.create.small_deepslate_bricks": "UNLOCALIZED: Small Deepslate Bricks", - "block.create.small_diorite_brick_slab": "UNLOCALIZED: Small Diorite Brick Slab", - "block.create.small_diorite_brick_stairs": "UNLOCALIZED: Small Diorite Brick Stairs", - "block.create.small_diorite_brick_wall": "UNLOCALIZED: Small Diorite Brick Wall", - "block.create.small_diorite_bricks": "UNLOCALIZED: Small Diorite Bricks", - "block.create.small_dripstone_brick_slab": "UNLOCALIZED: Small Dripstone Brick Slab", - "block.create.small_dripstone_brick_stairs": "UNLOCALIZED: Small Dripstone Brick Stairs", - "block.create.small_dripstone_brick_wall": "UNLOCALIZED: Small Dripstone Brick Wall", - "block.create.small_dripstone_bricks": "UNLOCALIZED: Small Dripstone Bricks", - "block.create.small_granite_brick_slab": "UNLOCALIZED: Small Granite Brick Slab", - "block.create.small_granite_brick_stairs": "UNLOCALIZED: Small Granite Brick Stairs", - "block.create.small_granite_brick_wall": "UNLOCALIZED: Small Granite Brick Wall", - "block.create.small_granite_bricks": "UNLOCALIZED: Small Granite Bricks", - "block.create.small_limestone_brick_slab": "UNLOCALIZED: Small Limestone Brick Slab", - "block.create.small_limestone_brick_stairs": "UNLOCALIZED: Small Limestone Brick Stairs", - "block.create.small_limestone_brick_wall": "UNLOCALIZED: Small Limestone Brick Wall", - "block.create.small_limestone_bricks": "UNLOCALIZED: Small Limestone Bricks", - "block.create.small_ochrum_brick_slab": "UNLOCALIZED: Small Ochrum Brick Slab", - "block.create.small_ochrum_brick_stairs": "UNLOCALIZED: Small Ochrum Brick Stairs", - "block.create.small_ochrum_brick_wall": "UNLOCALIZED: Small Ochrum Brick Wall", - "block.create.small_ochrum_bricks": "UNLOCALIZED: Small Ochrum Bricks", - "block.create.small_scorchia_brick_slab": "UNLOCALIZED: Small Scorchia Brick Slab", - "block.create.small_scorchia_brick_stairs": "UNLOCALIZED: Small Scorchia Brick Stairs", - "block.create.small_scorchia_brick_wall": "UNLOCALIZED: Small Scorchia Brick Wall", - "block.create.small_scorchia_bricks": "UNLOCALIZED: Small Scorchia Bricks", - "block.create.small_scoria_brick_slab": "UNLOCALIZED: Small Scoria Brick Slab", - "block.create.small_scoria_brick_stairs": "UNLOCALIZED: Small Scoria Brick Stairs", - "block.create.small_scoria_brick_wall": "UNLOCALIZED: Small Scoria Brick Wall", - "block.create.small_scoria_bricks": "UNLOCALIZED: Small Scoria Bricks", - "block.create.small_tuff_brick_slab": "UNLOCALIZED: Small Tuff Brick Slab", - "block.create.small_tuff_brick_stairs": "UNLOCALIZED: Small Tuff Brick Stairs", - "block.create.small_tuff_brick_wall": "UNLOCALIZED: Small Tuff Brick Wall", - "block.create.small_tuff_bricks": "UNLOCALIZED: Small Tuff Bricks", - "block.create.small_veridium_brick_slab": "UNLOCALIZED: Small Veridium Brick Slab", - "block.create.small_veridium_brick_stairs": "UNLOCALIZED: Small Veridium Brick Stairs", - "block.create.small_veridium_brick_wall": "UNLOCALIZED: Small Veridium Brick Wall", - "block.create.small_veridium_bricks": "UNLOCALIZED: Small Veridium Bricks", + "block.create.small_andesite_brick_slab": "Losa de ladrillos pequeños de andesita", + "block.create.small_andesite_brick_stairs": "Escaleras de ladrillos pequeños de andesita", + "block.create.small_andesite_brick_wall": "Muro de ladrillos pequeños de andesita", + "block.create.small_andesite_bricks": "Ladrillos pequeños de andesita", + "block.create.small_asurine_brick_slab": "Losa de ladrillos pequeños de azurina", + "block.create.small_asurine_brick_stairs": "Escaleras de ladrillos pequeños de azurina", + "block.create.small_asurine_brick_wall": "Muro de ladrillos pequeños de azurina", + "block.create.small_asurine_bricks": "Ladrillos pequeños de azurina", + "block.create.small_calcite_brick_slab": "Losa de ladrillos pequeños de calcita", + "block.create.small_calcite_brick_stairs": "Escaleras de ladrillos pequeños de calcita", + "block.create.small_calcite_brick_wall": "Muro de ladrillos pequeños de calcita", + "block.create.small_calcite_bricks": "Ladrillos pequeños de calcita", + "block.create.small_crimsite_brick_slab": "Losa de ladrillos pequeños de carmesina", + "block.create.small_crimsite_brick_stairs": "Escaleras de ladrillos pequeños de carmesina", + "block.create.small_crimsite_brick_wall": "Muro de ladrillos pequeños de carmesina", + "block.create.small_crimsite_bricks": "Ladrillos pequeños de carmesina", + "block.create.small_deepslate_brick_slab": "Losa de ladrillos pequeños de pizarra profunda", + "block.create.small_deepslate_brick_stairs": "Escaleras de ladrillos pequeños de pizarra profunda", + "block.create.small_deepslate_brick_wall": "Muro de ladrillos pequeños de pizarra profunda", + "block.create.small_deepslate_bricks": "Ladrillos pequeños de pizarra profunda", + "block.create.small_diorite_brick_slab": "Losa de ladrillos pequeños de diorita", + "block.create.small_diorite_brick_stairs": "Escaleras de ladrillos pequeños de diorita", + "block.create.small_diorite_brick_wall": "Muro de ladrillos pequeños de diorita", + "block.create.small_diorite_bricks": "Ladrillos pequeños de diorita", + "block.create.small_dripstone_brick_slab": "Losa de ladrillos pequeños de espeleotema", + "block.create.small_dripstone_brick_stairs": "Escaleras de ladrillos pequeños de espeleotema", + "block.create.small_dripstone_brick_wall": "Muro de ladrillos pequeños de espeleotema", + "block.create.small_dripstone_bricks": "Ladrillos pequeños de espeleotema", + "block.create.small_granite_brick_slab": "Losa de ladrillos pequeños de granito", + "block.create.small_granite_brick_stairs": "Escaleras de ladrillos pequeños de granito", + "block.create.small_granite_brick_wall": "Muro de ladrillos pequeños de granito", + "block.create.small_granite_bricks": "Ladrillos pequeños de granito", + "block.create.small_limestone_brick_slab": "Losa de ladrillos pequeños de piedra caliza", + "block.create.small_limestone_brick_stairs": "Escaleras de ladrillos pequeños de piedra caliza", + "block.create.small_limestone_brick_wall": "Muro de ladrillos pequeños de piedra caliza", + "block.create.small_limestone_bricks": "Ladrillos pequeños de piedra caliza", + "block.create.small_ochrum_brick_slab": "Losa de ladrillos pequeños de ocre", + "block.create.small_ochrum_brick_stairs": "Escalera de ladrillos pequeños de ocre", + "block.create.small_ochrum_brick_wall": "Muro de ladrillos pequeños de ocre", + "block.create.small_ochrum_bricks": "Ladrillos pequeños de ocre", + "block.create.small_scorchia_brick_slab": "Losa de ladrillos pequeños de escoria oscura", + "block.create.small_scorchia_brick_stairs": "Escaleras de ladrillos pequeños de escoria oscura", + "block.create.small_scorchia_brick_wall": "Muro de ladrillos pequeños de escoria oscura", + "block.create.small_scorchia_bricks": "Ladrillos pequeños de escoria oscura", + "block.create.small_scoria_brick_slab": "Losa de ladrillos pequeños de escoria", + "block.create.small_scoria_brick_stairs": "Escaleras de ladrillos pequeños de escoria", + "block.create.small_scoria_brick_wall": "Muro de ladrillos pequeños de escoria", + "block.create.small_scoria_bricks": "Ladrillos pequeños de escoria", + "block.create.small_tuff_brick_slab": "Losa de ladrillos pequeños de toba", + "block.create.small_tuff_brick_stairs": "Escaleras de ladrillos pequeños de toba", + "block.create.small_tuff_brick_wall": "Muro de ladrillos pequeños de toba", + "block.create.small_tuff_bricks": "Ladrillos pequeños de toba", + "block.create.small_veridium_brick_slab": "Losa de ladrillos pequeños de veridio", + "block.create.small_veridium_brick_stairs": "Escaleras de ladrillos pequeños de veridio", + "block.create.small_veridium_brick_wall": "Muro de ladrillos pequeños de veridio", + "block.create.small_veridium_bricks": "Ladrillos pequeños de veridio", "block.create.smart_chute": "Ducto inteligente", "block.create.smart_fluid_pipe": "Tubería de fluidos inteligente", "block.create.speedometer": "Velocímetro", "block.create.spout": "Surtidor", "block.create.spruce_window": "Ventana de abeto", "block.create.spruce_window_pane": "Panel de ventana de abeto", - "block.create.sticker": "Sticker", + "block.create.sticker": "Pegatina", "block.create.sticky_mechanical_piston": "Pistón mecánico pegajoso", "block.create.stockpile_switch": "Interruptor de acopio", "block.create.stressometer": "Estresómetro", "block.create.tiled_glass": "Vidrio esmaltado", "block.create.tiled_glass_pane": "Panel de vidrio esmaltado", - "block.create.tuff_pillar": "UNLOCALIZED: Tuff Pillar", + "block.create.tuff_pillar": "Pilar de toba", "block.create.turntable": "Plataforma giratoria mecánica", - "block.create.veridium": "UNLOCALIZED: Veridium", - "block.create.veridium_pillar": "UNLOCALIZED: Veridium Pillar", + "block.create.veridium": "Veridio", + "block.create.veridium_pillar": "Pilar de veridio", "block.create.vertical_framed_glass": "Vidrio esmaltado vertical", "block.create.vertical_framed_glass_pane": "Panel de vidrio esmaltado vertical", "block.create.warped_window": "Ventana distorsionada", "block.create.warped_window_pane": "Panel de ventana distorsionada", "block.create.water_wheel": "Rueda hidráulica mecánica", - "block.create.waxed_copper_shingle_slab": "UNLOCALIZED: Waxed Copper Shingle Slab", - "block.create.waxed_copper_shingle_stairs": "UNLOCALIZED: Waxed Copper Shingle Stairs", - "block.create.waxed_copper_shingles": "UNLOCALIZED: Waxed Copper Shingles", - "block.create.waxed_copper_tile_slab": "UNLOCALIZED: Waxed Copper Tile Slab", - "block.create.waxed_copper_tile_stairs": "UNLOCALIZED: Waxed Copper Tile Stairs", - "block.create.waxed_copper_tiles": "UNLOCALIZED: Waxed Copper Tiles", - "block.create.waxed_exposed_copper_shingle_slab": "UNLOCALIZED: Waxed Exposed Copper Shingle Slab", - "block.create.waxed_exposed_copper_shingle_stairs": "UNLOCALIZED: Waxed Exposed Copper Shingle Stairs", - "block.create.waxed_exposed_copper_shingles": "UNLOCALIZED: Waxed Exposed Copper Shingles", - "block.create.waxed_exposed_copper_tile_slab": "UNLOCALIZED: Waxed Exposed Copper Tile Slab", - "block.create.waxed_exposed_copper_tile_stairs": "UNLOCALIZED: Waxed Exposed Copper Tile Stairs", - "block.create.waxed_exposed_copper_tiles": "UNLOCALIZED: Waxed Exposed Copper Tiles", - "block.create.waxed_oxidized_copper_shingle_slab": "UNLOCALIZED: Waxed Oxidized Copper Shingle Slab", - "block.create.waxed_oxidized_copper_shingle_stairs": "UNLOCALIZED: Waxed Oxidized Copper Shingle Stairs", - "block.create.waxed_oxidized_copper_shingles": "UNLOCALIZED: Waxed Oxidized Copper Shingles", - "block.create.waxed_oxidized_copper_tile_slab": "UNLOCALIZED: Waxed Oxidized Copper Tile Slab", - "block.create.waxed_oxidized_copper_tile_stairs": "UNLOCALIZED: Waxed Oxidized Copper Tile Stairs", - "block.create.waxed_oxidized_copper_tiles": "UNLOCALIZED: Waxed Oxidized Copper Tiles", - "block.create.waxed_weathered_copper_shingle_slab": "UNLOCALIZED: Waxed Weathered Copper Shingle Slab", - "block.create.waxed_weathered_copper_shingle_stairs": "UNLOCALIZED: Waxed Weathered Copper Shingle Stairs", - "block.create.waxed_weathered_copper_shingles": "UNLOCALIZED: Waxed Weathered Copper Shingles", - "block.create.waxed_weathered_copper_tile_slab": "UNLOCALIZED: Waxed Weathered Copper Tile Slab", - "block.create.waxed_weathered_copper_tile_stairs": "UNLOCALIZED: Waxed Weathered Copper Tile Stairs", - "block.create.waxed_weathered_copper_tiles": "UNLOCALIZED: Waxed Weathered Copper Tiles", - "block.create.weathered_copper_shingle_slab": "UNLOCALIZED: Weathered Copper Shingle Slab", - "block.create.weathered_copper_shingle_stairs": "UNLOCALIZED: Weathered Copper Shingle Stairs", - "block.create.weathered_copper_shingles": "UNLOCALIZED: Weathered Copper Shingles", - "block.create.weathered_copper_tile_slab": "UNLOCALIZED: Weathered Copper Tile Slab", - "block.create.weathered_copper_tile_stairs": "UNLOCALIZED: Weathered Copper Tile Stairs", - "block.create.weathered_copper_tiles": "UNLOCALIZED: Weathered Copper Tiles", + "block.create.waxed_copper_shingle_slab": "Losa de tejas de cobre encerado", + "block.create.waxed_copper_shingle_stairs": "Escaleras de tejas de cobre encerado", + "block.create.waxed_copper_shingles": "Bloque de tejas de cobre encerado", + "block.create.waxed_copper_tile_slab": "Losa de baldosas de cobre encerado", + "block.create.waxed_copper_tile_stairs": "Escaleras de baldosas de cobre encerado", + "block.create.waxed_copper_tiles": "Bloque de baldosas de cobre encerado", + "block.create.waxed_exposed_copper_shingle_slab": "Losa de tejas de cobre expuesto encerado", + "block.create.waxed_exposed_copper_shingle_stairs": "Escaleras de tejas de cobre expuesto encerado", + "block.create.waxed_exposed_copper_shingles": "Bloque de tejas de cobre expuesto encerado", + "block.create.waxed_exposed_copper_tile_slab": "Losa de baldosas de cobre expuesto encerado", + "block.create.waxed_exposed_copper_tile_stairs": "Escaleras de baldosas de cobre expuesto encerado", + "block.create.waxed_exposed_copper_tiles": "Bloque de baldosas de cobre expuesto encerado", + "block.create.waxed_oxidized_copper_shingle_slab": "Losa de tejas de cobre oxidado encerado", + "block.create.waxed_oxidized_copper_shingle_stairs": "Escaleras de tejas de cobre oxidado encerado", + "block.create.waxed_oxidized_copper_shingles": "Bloque de tejas de cobre oxidado encerado", + "block.create.waxed_oxidized_copper_tile_slab": "Losa de baldosas de cobre oxidado encerado", + "block.create.waxed_oxidized_copper_tile_stairs": "Escaleras de baldosas de cobre oxidado encerado", + "block.create.waxed_oxidized_copper_tiles": "Bloque de baldosas de cobre oxidado encerado", + "block.create.waxed_weathered_copper_shingle_slab": "Losa de tejas de cobre degradado encerado", + "block.create.waxed_weathered_copper_shingle_stairs": "Escaleras de tejas de cobre degradado encerado", + "block.create.waxed_weathered_copper_shingles": "Bloque de tejas de cobre degradado encerado", + "block.create.waxed_weathered_copper_tile_slab": "Losa de baldosas de cobre degradado encerado", + "block.create.waxed_weathered_copper_tile_stairs": "Escaleras de baldosas de cobre degradado encerado", + "block.create.waxed_weathered_copper_tiles": "Bloque de baldosas de cobre degradado encerado", + "block.create.weathered_copper_shingle_slab": "Losa de tejas de cobre degradado", + "block.create.weathered_copper_shingle_stairs": "Escaleras de tejas de cobre degradado", + "block.create.weathered_copper_shingles": "Bloque de tejas de cobre degradado", + "block.create.weathered_copper_tile_slab": "Losa de baldosas de cobre degradado", + "block.create.weathered_copper_tile_stairs": "Escaleras de baldosas de cobre degradado", + "block.create.weathered_copper_tiles": "Bloque de baldosas de cobre degradado", "block.create.weighted_ejector": "Eyector de peso", "block.create.white_nixie_tube": "Tubo Nixie blanco", "block.create.white_sail": "Vela blanca", "block.create.white_seat": "Asiento blanco", "block.create.white_toolbox": "Caja de herramientas blanca", "block.create.white_valve_handle": "Asa de válvula blanco", - "block.create.windmill_bearing": "Rodamiento del molino de viento", + "block.create.windmill_bearing": "Rodamiento de molino de viento", "block.create.wooden_bracket": "Soporte de madera para ejes", "block.create.yellow_nixie_tube": "Tubo Nixie amarillo", "block.create.yellow_sail": "Vela amarilla", "block.create.yellow_seat": "Asiento amarillo", "block.create.yellow_toolbox": "Caja de herramientas amarilla", "block.create.yellow_valve_handle": "Asa de válvula amarillo", - "block.create.zinc_block": "Bloque de zinc", - "block.create.zinc_ore": "Mena de zinc", + "block.create.zinc_block": "Bloque de cinc", + "block.create.zinc_ore": "Mena de cinc", "enchantment.create.capacity": "Capacidad", "enchantment.create.potato_recovery": "Recuperación de patatas", - "entity.create.contraption": "Artilugio", + "entity.create.contraption": "Artefacto animado", "entity.create.crafting_blueprint": "Plano de elaboración", - "entity.create.gantry_contraption": "Artilugio de grúa", + "entity.create.gantry_contraption": "Artefacto móvil de grúa", "entity.create.potato_projectile": "Proyectil de patata", "entity.create.seat": "Asiento", - "entity.create.stationary_contraption": "Artilugio estacionario", + "entity.create.stationary_contraption": "Artefacto estacionario", "entity.create.super_glue": "Pegamento", "fluid.create.potion": "Poción", @@ -561,7 +561,7 @@ "item.create.brass_nugget": "Pepita de latón", "item.create.brass_sheet": "Lámina de latón", "item.create.builders_tea": "Té del Constructor", - "item.create.chest_minecart_contraption": "Artilugio de vagoneta con cofre", + "item.create.chest_minecart_contraption": "Artefacto móvil de vagoneta con cofre", "item.create.chocolate_bucket": "Cubo con chocolate", "item.create.chocolate_glazed_berries": "Bayas glaseadas con chocolate", "item.create.chromatic_compound": "Compuesto cromático", @@ -584,35 +584,35 @@ "item.create.crushed_silver_ore": "Mineral de plata molido", "item.create.crushed_tin_ore": "Mineral de estaño molido", "item.create.crushed_uranium_ore": "Mineral de uranio molido", - "item.create.crushed_zinc_ore": "Mineral de zinc molido", + "item.create.crushed_zinc_ore": "Mineral de cinc molido", "item.create.diving_boots": "Botas de buceo", "item.create.diving_helmet": "Casco de buceo", - "item.create.dough": "Masilla", + "item.create.dough": "Masa", "item.create.electron_tube": "Tubo de electrones", "item.create.empty_blaze_burner": "Quemador de blaze vacío", "item.create.empty_schematic": "Esquema vacío", - "item.create.experience_nugget": "UNLOCALIZED: Nugget of Experience", + "item.create.experience_nugget": "Pepita de experiencia", "item.create.extendo_grip": "Agarre extendido", "item.create.filter": "Filtro", - "item.create.furnace_minecart_contraption": "Artilugio de vagoneta de horno", - "item.create.goggles": "Gafas del constructor", + "item.create.furnace_minecart_contraption": "Artefacto móvil de vagoneta con horno", + "item.create.goggles": "Gafas del ingeniero", "item.create.golden_sheet": "Lámina de oro", - "item.create.handheld_worldshaper": "Worldshaper Creativo", + "item.create.handheld_worldshaper": "Moldeador de mundos", "item.create.honey_bucket": "Cubo con miel", "item.create.honeyed_apple": "Manzana con miel", - "item.create.incomplete_cogwheel": "Engranaje pequeño incompleto", + "item.create.incomplete_cogwheel": "Engranaje incompleto", "item.create.incomplete_large_cogwheel": "Engranaje grande incompleto", "item.create.incomplete_precision_mechanism": "Mecanismo de precisión incompleto", "item.create.iron_sheet": "Lámina de hierro", "item.create.linked_controller": "Controlador enlazado", - "item.create.minecart_contraption": "Artilugio de vagoneta", + "item.create.minecart_contraption": "Artefacto móvil de vagoneta", "item.create.minecart_coupling": "Acoplamiento de vagoneta", "item.create.polished_rose_quartz": "Cuarzo rosado pulido", "item.create.potato_cannon": "Cañón de patatas", "item.create.powdered_obsidian": "Polvo de obsidiana", "item.create.precision_mechanism": "Mecanismo de precisión", "item.create.propeller": "Hélice", - "item.create.raw_zinc": "UNLOCALIZED: Raw Zinc", + "item.create.raw_zinc": "Cinc en bruto", "item.create.red_sand_paper": "Papel de lija rojo", "item.create.refined_radiance": "Resplandor refinado", "item.create.rose_quartz": "Cuarzo rosado", @@ -621,45 +621,45 @@ "item.create.schematic_and_quill": "Esquema y pluma", "item.create.shadow_steel": "Acero sombrío", "item.create.super_glue": "Pegamento", - "item.create.sweet_roll": "Pan dulce", + "item.create.sweet_roll": "Ensaimada", "item.create.tree_fertilizer": "Fertilizante para árboles", "item.create.vertical_gearbox": "Caja de transmisión vertical", "item.create.wand_of_symmetry": "Varita de simetría", "item.create.wheat_flour": "Harina de trigo", "item.create.whisk": "Batidora", "item.create.wrench": "Llave inglesa", - "item.create.zinc_ingot": "Lingote de zinc", - "item.create.zinc_nugget": "Pepita de zinc", + "item.create.zinc_ingot": "Lingote de cinc", + "item.create.zinc_nugget": "Pepita de cinc", "_": "->------------------------] Advancements [------------------------<-", "advancement.create.root": "Bienvenido a Create", - "advancement.create.root.desc": "¡Es hora de empezar a construir increíbles artilugios!", - "advancement.create.andesite_alloy": "Aleaciones en abundancia", + "advancement.create.root.desc": "¡Es hora de empezar a construir increíbles artefactos animados!", + "advancement.creatse.andesite_alloy": "Aleaciones en abundancia", "advancement.create.andesite_alloy.desc": "Los materiales de Create tienen nombres extraños, la aleación de andesita es uno de ellos.", "advancement.create.its_alive": "¡Está vivo!", "advancement.create.its_alive.desc": "Mira cómo gira tu primer componente cinético.", "advancement.create.shifting_gears": "Cambiando de marcha", - "advancement.create.shifting_gears.desc": "Conecta un engranaje grande a uno pequeño, lo que te permitirá cambiar la velocidad de tu artilugio.", + "advancement.create.shifting_gears.desc": "Conecta un engranaje grande a una pequeña, lo que te permitirá cambiar la velocidad rotacional.", "advancement.create.overstressed": "Sobrecargado", "advancement.create.overstressed.desc": "Experimenta los límites del estrés.", "advancement.create.belt": "Paseo de algas", - "advancement.create.belt.desc": "Conectar dos ejes con una correa.", + "advancement.create.belt.desc": "Conecta dos ejes con una cinta.", "advancement.create.tunnel": "¡Cúbrete!", - "advancement.create.tunnel.desc": "Embellece tu correa con un túnel.", + "advancement.create.tunnel.desc": "Embellece tu cinta mecánica con un túnel.", "advancement.create.splitter_tunnel": "Divide y vencerás", - "advancement.create.splitter_tunnel.desc": "Crear un divisor con un grupo de túneles de latón.", + "advancement.create.splitter_tunnel.desc": "Crear un divisor con túneles de latón.", "advancement.create.chute": "Caída en picado", - "advancement.create.chute.desc": "Coloque un ducto, la contrapartida vertical de la cinta.", + "advancement.create.chute.desc": "Coloque un ducto, la contrapartida vertical de la cinta mecánica.", "advancement.create.upward_chute": "Abducción aérea", "advancement.create.upward_chute.desc": "Observe cómo un objeto lanzado vuela dentro de un ducto impulsado por un ventilador.", "advancement.create.belt_funnel": "Colgantes con forma de embudo", - "advancement.create.belt_funnel.desc": "Coloca un embudo lateral encima de una cinta o depósito para crear un tipo especial.", + "advancement.create.belt_funnel.desc": "Coloca un embudo en una cinta mecánica o depósito para que sea un embudo lateral.", "advancement.create.belt_funnel_kiss": "Los loros y las aletas", - "advancement.create.belt_funnel_kiss.desc": "Haz besar dos embudos montados con una cinta.", + "advancement.create.belt_funnel_kiss.desc": "Haz que se besen dos embudos montados en una cinta mecánica.", "advancement.create.fan": "Maestro mecánico del aire", - "advancement.create.fan.desc": "Monta la corriente de aire proporcionada por un ventilador revestido.", + "advancement.create.fan.desc": "Móntate en una corriente de aire de un ventilador revestido.", "advancement.create.fan_lava": "Calentador geotérmico", "advancement.create.fan_lava.desc": "Queda atrapado en una corriente de aire que funde las cosas.", "advancement.create.fan_water": "Lavado de la ropa", @@ -667,17 +667,17 @@ "advancement.create.fan_smoke": "Fuelle mecánico", "advancement.create.fan_smoke.desc": "Queda atrapado en una corriente de aire que humea los objetos.", "advancement.create.wrench": "Configurar convenientemente", - "advancement.create.wrench.desc": "Crea una llave inglesa para ayudarte a construir tus artilugios.", + "advancement.create.wrench.desc": "Crea una llave inglesa para ayudarte a construir tus sistemas.", "advancement.create.goggles": "Estresóvisión", - "advancement.create.goggles.desc": "Crea unas gafas del constructor para ayudarte a obtener más información cinética de los componentes.", + "advancement.create.goggles.desc": "Crea unas gafas del ingeniero para ayudarte a obtener más información cinética de los componentes.", "advancement.create.speedometer": "Pero, ¿con qué rapidez exactamente?", - "advancement.create.speedometer.desc": "Coloca y alimenta un velocímetro. Míralo a través de las gafas para leer su valor exacto.", - "advancement.create.stressometer": "Pero, ¿cuán estresado exactamente??", - "advancement.create.stressometer.desc": "Coloca y alimenta un estresómetro. Míralo a través de las gafas para leer su valor exacto.", + "advancement.create.speedometer.desc": "Coloca y alimenta un velocímetro. Míralo a través de las gafas del ingeniero para leer su valor exacto.", + "advancement.create.stressometer": "Pero, ¿cuán estresado exactamente?", + "advancement.create.stressometer.desc": "Coloca y alimenta un estresómetro. Míralo a través de las gafas del ingeniero para leer su valor exacto.", "advancement.create.aesthetics": "Boom, ¡Estética!", "advancement.create.aesthetics.desc": "Coloca soportes en ejes, ductos y engranajes.", "advancement.create.reinforced": "Boom, ¡Reforzado!", - "advancement.create.reinforced.desc": "Utiliza bloques de revestimiento en un eje, un ducto y una cinta.", + "advancement.create.reinforced.desc": "Utiliza bloques de revestimiento en un eje, un ducto y una cinta mecánica.", "advancement.create.water_wheel": "Aprovechar la hidráulica", "advancement.create.water_wheel.desc": "Coloca una rueda hidráulica e intenta hacerla girar.", "advancement.create.chocolate_wheel": "Potencia de buen gusto", @@ -713,7 +713,7 @@ "advancement.create.compact": "Compactación automática", "advancement.create.compact.desc": "Utiliza una prensa y una cuenca para compactar algunos objetos.", "advancement.create.brass": "Aleaciones reales", - "advancement.create.brass.desc": "Utiliza cobre molido y zinc molido para crear algo de latón.", + "advancement.create.brass.desc": "Utiliza cobre molido y cinc molido para crear algo de latón.", "advancement.create.brass_casing": "La Edad de Latón", "advancement.create.brass_casing.desc": "Utiliza el latón recién obtenido y algo de madera para crear un revestimiento más avanzado.", "advancement.create.copper_casing": "La Edad de Cobre", @@ -744,13 +744,13 @@ "advancement.create.infinite_chocolate.desc": "Bombea desde una masa de chocolate fundido lo suficientemente grande como para ser considerado infinito.", "advancement.create.crafter": "Montaje automatizado", "advancement.create.crafter.desc": "Coloca y alimenta algunos ensambladores.", - "advancement.create.clockwork_bearing": "Artilugio a la hora", + "advancement.create.clockwork_bearing": "Las artefacto en punto", "advancement.create.clockwork_bearing.desc": "Ensamblar una estructura montada sobre un rodamiento tipo reloj.", "advancement.create.nixie_tube": "Signos de estilo", "advancement.create.nixie_tube.desc": "Obtener y colocar un par de tubos nixie.", "advancement.create.deployer": "Picar, colocar y atacar", "advancement.create.deployer.desc": "Coloca y potencia un desplegador, el reflejo perfecto de ti mismo.", - "advancement.create.speed_controller": "Los ingenieros lo odian!", + "advancement.create.speed_controller": "¡Los ingenieros lo odian!", "advancement.create.speed_controller.desc": "Coloca un controlador de velocidad rotacional, el dispositivo definitivo para cambiar de marcha.", "advancement.create.flywheel": "El corazón de la fábrica", "advancement.create.flywheel.desc": "Conecta con éxito un motor a la rueda de inercia.", @@ -776,7 +776,7 @@ "advancement.create.wand_of_symmetry.desc": "Crear un bastón de simetría.", "advancement.create.extendo_grip": "¡Boioioing!", "advancement.create.extendo_grip.desc": "Hazte con un agarre extentido.", - "advancement.create.potato_cannon": "Fwoomp!", + "advancement.create.potato_cannon": "¡Fwoomp!", "advancement.create.potato_cannon.desc": "Derrota a un enemigo con tu cañón de patatas.", "advancement.create.dual_extendo_grip": "La última edad del boing", "advancement.create.dual_extendo_grip.desc": "Doble empuñadura extendida para un alcance sobrehumano.", @@ -889,14 +889,14 @@ "create.gui.scrollInput.scrollToModify": "Usa la rueda del ratón para modificar", "create.gui.scrollInput.scrollToAdjustAmount": "Usa la rueda del ratón para ajustar la cantidad", "create.gui.scrollInput.scrollToSelect": "Usa la rueda del ratón para seleccionar", - "create.gui.scrollInput.shiftScrollsFaster": "Mayús izdo para usar la rueda del ratón más rápido", + "create.gui.scrollInput.shiftScrollsFaster": "Mayús izdo. para usar la rueda del ratón más rápido", "create.gui.toolmenu.focusKey": "Mantén [%1$s] para enfocar", "create.gui.toolmenu.cycle": "[RUEDA DEL RATÓN] para el ciclo", "create.toolbox.unequip": "Desequipar: %1$s", - "create.toolbox.outOfRange": "La caja de herramientas del objeto retenido no está en el rango", + "create.toolbox.outOfRange": "La caja de herramientas del objeto en uso no está en el rango", "create.toolbox.detach": "Dejar de rastrear y conservar el objeto", - "create.toolbox.depositAll": "Devolver elementos a las cajas de herramientas cercanas", + "create.toolbox.depositAll": "Devuelve objetos a las cajas de herramientas cercanas", "create.toolbox.depositBox": "Devolver elementos a la caja de herramientas", "create.gui.symmetryWand.mirrorType": "Espejado", @@ -912,16 +912,16 @@ "create.orientation.alongZ": "A lo largo de Z", "create.orientation.alongX": "A lo largo de X", - "create.gui.terrainzapper.title": "Blockzapper", + "create.gui.terrainzapper.title": "Handheld Blockzapper", "create.gui.terrainzapper.searchDiagonal": "Seguir diagonales", "create.gui.terrainzapper.searchFuzzy": "Ignorar los bordes del material", "create.gui.terrainzapper.patternSection": "Patrón", "create.gui.terrainzapper.pattern.solid": "Sólido", "create.gui.terrainzapper.pattern.checkered": "Tablero de ajedrez", "create.gui.terrainzapper.pattern.inversecheckered": "Tablero de ajedrez invertido", - "create.gui.terrainzapper.pattern.chance25": "25% Roll", - "create.gui.terrainzapper.pattern.chance50": "50% Roll", - "create.gui.terrainzapper.pattern.chance75": "75% Roll", + "create.gui.terrainzapper.pattern.chance25": "25% Probabilidad", + "create.gui.terrainzapper.pattern.chance50": "50% Probabilidad", + "create.gui.terrainzapper.pattern.chance75": "75% Probabilidad", "create.gui.terrainzapper.placement": "Ubicación", "create.gui.terrainzapper.placement.merged": "Fusionado", "create.gui.terrainzapper.placement.attached": "Adjuntado", @@ -940,7 +940,7 @@ "create.gui.terrainzapper.tool.overlay": "Superponer", "create.gui.terrainzapper.tool.flatten": "Aplanar", - "create.terrainzapper.shiftRightClickToSet": "Mayús izdo + clic derecho para seleccionar una forma", + "create.terrainzapper.shiftRightClickToSet": "Mayús izdo. + clic derecho para seleccionar una forma", "create.terrainzapper.usingBlock": "Usando: %1$s", "create.terrainzapper.leftClickToSet": "Clic izquierdo a un bloque para establecer el material", @@ -982,10 +982,10 @@ "create.gui.goggles.pole_length": "Longitud del poste:", "create.gui.goggles.fluid_container": "Información sobre el contenedor de fluidos:", "create.gui.goggles.fluid_container.capacity": "Capacidad: ", - "create.gui.assembly.exception": "Este artilugio no se pudo montar:", + "create.gui.assembly.exception": "Este artefacto animado no se pudo montar:", "create.gui.assembly.exception.unmovableBlock": "Bloque inamovible (%4$s) en [%1$s,%2$s,%3$s]", "create.gui.assembly.exception.chunkNotLoaded": "El bloque en [%1$s,%2$s,%3$s] no estaba en un chunk cargado", - "create.gui.assembly.exception.structureTooLarge": "Hay demasiados bloques incluídos en el artilugio.\nEl máximo configurado es: %1$s", + "create.gui.assembly.exception.structureTooLarge": "Hay demasiados bloques incluídos en el artefacto animado.\nEl máximo configurado es: %1$s", "create.gui.assembly.exception.tooManyPistonPoles": "Hay demasiadas Pértigas de extensión conectadas a este Pistón.\nEl máximo configurado es: %1$s", "create.gui.assembly.exception.noPistonPoles": "Faltan pértigas de extensión para el pistón", "create.gui.assembly.exception.not_enough_sails": "La estructura adjunta no incluye suficientes bloques tipo vela: %1$s\nSe requiere un mínimo de %2$s", @@ -996,7 +996,7 @@ "create.gui.stressometer.overstressed": "Sobrecargado", "create.gui.stressometer.no_rotation": "Sin rotación", "create.gui.contraptions.not_fast_enough": "Parece que este %1$s no está girando con _suficiente_ velocidad_.", - "create.gui.contraptions.network_overstressed": "Parece que este artilugio está _sobrecargado_. Añade más fuentes o _desacelera_ los componentes con un _impacto de estrés alto_.", + "create.gui.contraptions.network_overstressed": "Parece que este sistema está _sobrecargado_. Añade más fuentes o _desacelera_ los componentes con un _impacto de estrés alto_.", "create.gui.adjustable_crate.title": "Caja ajustable", "create.gui.adjustable_crate.storageSpace": "Espacio de almacenamiento", "create.gui.stockpile_switch.title": "Interruptor de acopio", @@ -1087,7 +1087,7 @@ "create.gui.schematicTable.noSchematics": "No hay esquemas guardados", "create.gui.schematicTable.uploading": "Subiendo...", "create.gui.schematicTable.finished": "¡Subida finalizada!", - "create.gui.schematicannon.title": "Cañón de esquemas", + "create.gui.schematicannon.title": "Esquematicañón", "create.gui.schematicannon.listPrinter": "Lista de control de la impresora", "create.gui.schematicannon.gunpowderLevel": "Pólvora %1$s%%", "create.gui.schematicannon.shotsRemaining": "Disparos restantes: %1$s", @@ -1139,14 +1139,14 @@ "create.gui.filter.respect_data": "Respetar datos", "create.gui.filter.respect_data.description": "Los objetos sólo coinciden si su durabilidad, encantos y otros atributos también coinciden.", "create.gui.filter.ignore_data": "Ignorar datos", - "create.gui.filter.ignore_data.description": "Los artículos coinciden independientemente de sus atributos.", + "create.gui.filter.ignore_data.description": "Los objetos coinciden independientemente de sus atributos.", "create.item_attributes.placeable": "se puede colocar", "create.item_attributes.placeable.inverted": "no se puede colocar", "create.item_attributes.consumable": "se puede comer", "create.item_attributes.consumable.inverted": "no se puede comer", - "create.item_attributes.fluid_container": "puede almacenar fluídos", - "create.item_attributes.fluid_container.inverted": "puede almacenar fluídos", + "create.item_attributes.fluid_container": "puede almacenar fluidos", + "create.item_attributes.fluid_container.inverted": "puede almacenar fluidos", "create.item_attributes.enchanted": "está encantado", "create.item_attributes.enchanted.inverted": "no está encantado", "create.item_attributes.max_enchanted": "está encantado en el nivel máximo", @@ -1304,7 +1304,7 @@ "create.hint.hose_pulley.title": "Suministro ilimitado", "create.hint.hose_pulley": "La masa de fluido objetivo se considera infinita.", "create.hint.mechanical_arm_no_targets.title": "Sin objetivos", - "create.hint.mechanical_arm_no_targets": "Parece que a este _brazo mecánico_ no se le ha asignado ningún objetivo. Selecciona _correas_, _depósitos_, _embudos_ y otros bloques haciendo clic derecho sobre ellos mientras _sostienes_ el _brazo mecánico_ en tu mano..", + "create.hint.mechanical_arm_no_targets": "Parece que a este _brazo mecánico_ no se le ha asignado ningún objetivo. Selecciona _cintas mecánicas_, _depósitos_, _embudos_ u otros bloques haciendo clic derecho sobre ellos mientras _sostienes_ el _brazo mecánico_ en tu mano...", "create.hint.empty_bearing.title": "Actualización del rodamiento", "create.hint.empty_bearing": "Haz clic derecho sobre el rodamiento con la _mano vacía_ para _adjuntar_ la estructura que acabas de construir delante de él.", "create.hint.full_deployer.title": "Exceso de objetos en el desplegador", @@ -1327,57 +1327,57 @@ "create.command.killTPSCommand.status.usage.1": "[Create]: usa /killtps start para ralentizar artificialmente el tick del servidor", "create.command.killTPSCommand.argument.tickTime": "tickTime", - "create.contraption.minecart_contraption_too_big": "Este artilugio de vagoneta parece demasiado grande para recogerlo", - "create.contraption.minecart_contraption_illegal_pickup": "Una fuerza mística está atando este artilugio de vagoneta al mundo", + "create.contraption.minecart_contraption_too_big": "Este artefacto móvil de vagoneta parece demasiado grande para recogerlo", + "create.contraption.minecart_contraption_illegal_pickup": "Una fuerza mística está atando este artefacto móvil de vagoneta al mundo", "_": "->------------------------] Subtitles [------------------------<-", - "create.subtitle.contraption_disassemble": "", - "create.subtitle.peculiar_bell_use": "", - "create.subtitle.mixing": "", - "create.subtitle.mechanical_press_activation_belt": "", - "create.subtitle.fwoomp": "", - "create.subtitle.worldshaper_place": "", - "create.subtitle.sanding_long": "UNLOCALIZED: Sanding noises", - "create.subtitle.crushing_1": "", - "create.subtitle.depot_slide": "", - "create.subtitle.saw_activate_stone": "", - "create.subtitle.blaze_munch": "", - "create.subtitle.funnel_flap": "", - "create.subtitle.schematicannon_finish": "", - "create.subtitle.haunted_bell_use": "", + "create.subtitle.contraption_disassemble": "Artefacto animado se para", + "create.subtitle.peculiar_bell_use": "Campana peculiar suena", + "create.subtitle.mixing": "Mezclando", + "create.subtitle.mechanical_press_activation_belt": "Prensa mecánica apisona", + "create.subtitle.fwoomp": "Cañón de patatas sonando", + "create.subtitle.worldshaper_place": "Moldeador de mundos coloca bloques", + "create.subtitle.sanding_long": "Lijando", + "create.subtitle.crushing_1": "Triturando", + "create.subtitle.depot_slide": "Objeto desliza", + "create.subtitle.saw_activate_stone": "Sierra mecánica activada", + "create.subtitle.blaze_munch": "Quemador de blaze masca", + "create.subtitle.funnel_flap": "Embudo aletea", + "create.subtitle.schematicannon_finish": "Esquematicañón suena", + "create.subtitle.haunted_bell_use": "Campana maldita suena", "create.subtitle.scroll_value": "", - "create.subtitle.crafter_craft": "", + "create.subtitle.crafter_craft": "Ensamblador mecánico acaba", "create.subtitle.controller_put": "", - "create.subtitle.cranking": "", - "create.subtitle.wrench_remove": "", - "create.subtitle.sanding_short": "UNLOCALIZED: Sanding noises", - "create.subtitle.cogs": "", - "create.subtitle.slime_added": "", - "create.subtitle.wrench_rotate": "", - "create.subtitle.potato_hit": "", - "create.subtitle.saw_activate_wood": "", - "create.subtitle.haunted_bell_convert": "", - "create.subtitle.deny": "", + "create.subtitle.cranking": "Manivela gira", + "create.subtitle.wrench_remove": "Componente se rompe", + "create.subtitle.sanding_short": "Lijando", + "create.subtitle.cogs": "Engranajes retumban", + "create.subtitle.slime_added": "Pegamento chapotea", + "create.subtitle.wrench_rotate": "Llave inglesa usada", + "create.subtitle.potato_hit": "Impacto de vegetal", + "create.subtitle.saw_activate_wood": "Sierra mecánica activada", + "create.subtitle.haunted_bell_convert": "Campana maldita se despierta", + "create.subtitle.deny": "Pitido denegante", "create.subtitle.controller_click": "", - "create.subtitle.schematicannon_launch_block": "", - "create.subtitle.copper_armor_equip": "", - "create.subtitle.controller_take": "Lectern empties", - "create.subtitle.mechanical_press_activation": "", - "create.subtitle.contraption_assemble": "", - "create.subtitle.crafter_click": "", - "create.subtitle.depot_plop": "", - "create.subtitle.confirm": "", + "create.subtitle.schematicannon_launch_block": "Esquematicañón dispara", + "create.subtitle.copper_armor_equip": "Equipo de buceo tintinea", + "create.subtitle.controller_take": "Atril vaciándose", + "create.subtitle.mechanical_press_activation": "Prensa mecánica apisona", + "create.subtitle.contraption_assemble": "Artefacto animado se mueve", + "create.subtitle.crafter_click": "Ensamblador mecánico suena", + "create.subtitle.depot_plop": "Objeto aterriza", + "create.subtitle.confirm": "Campaneo afirmativo", "_": "->------------------------] Item Descriptions [------------------------<-", - "item.create.example_item.tooltip": "EJEMPLO DE ITEM (sólo un marcador de que este tooltip existe)", - "item.create.example_item.tooltip.summary": "Una breve descripción del elemento. Los puntajes bajos resaltan un término", - "item.create.example_item.tooltip.condition1": "Cuando este", - "item.create.example_item.tooltip.behaviour1": "Entonces este elemento hace esto. (los comportamientos se muestran en el turno)", - "item.create.example_item.tooltip.condition2": "Y cuando esto", + "item.create.example_item.tooltip": "EJEMPLO DE OBJETO (sólo un marcador de que este consejo existe)", + "item.create.example_item.tooltip.summary": "Una breve descripción del objeto. Los puntajes bajos resaltan un término", + "item.create.example_item.tooltip.condition1": "Cuando pasa esto", + "item.create.example_item.tooltip.behaviour1": "Entonces este objeto hace esto. (los comportamientos se muestran en el turno)", + "item.create.example_item.tooltip.condition2": "Y cuando ocurre esto otro", "item.create.example_item.tooltip.behaviour2": "Puedes añadir tantos comportamientos como quieras", "item.create.example_item.tooltip.control1": "Cuando se pulsa [Ctrl]", "item.create.example_item.tooltip.action1": "Se muestran estos controles", @@ -1389,9 +1389,9 @@ "block.create.metal_bracket.tooltip.summary": "Decora tus _ejes_, _engranajes_ y _ductos_ con un poco de robusto refuerzo industrial.", "block.create.seat.tooltip": "ASIENTO", - "block.create.seat.tooltip.summary": "¡Siéntate y disfruta del viaje! Anclará a un jugador en un artilugio en movimiento. También es ideal para muebles estáticos. Viene en una variedad de colores.", + "block.create.seat.tooltip.summary": "¡Siéntate y disfruta del viaje! Anclará al jugador en un artefacto animado. También es ideal para muebles estáticos. Viene en una variedad de colores.", "block.create.seat.tooltip.condition1": "Cuando se hace clic derecho en el asiento", - "block.create.seat.tooltip.behaviour1": "Sienta al jugador en el _asiento_. Pulsa Mayús izdo para dejar el asiento.", + "block.create.seat.tooltip.behaviour1": "Sienta al jugador en el _asiento_. Pulsa Mayús izdo. para dejar el asiento.", "item.create.blaze_cake.tooltip": "PASTEL DE BLAZE", "item.create.blaze_cake.tooltip.summary": "Un delicioso regalo para sus esforzados _quemadores de blaze_. ¡Los pone en marcha!.", @@ -1404,16 +1404,16 @@ "item.create.wand_of_symmetry.tooltip.action1": "_Crea_ o _mueve_ el espejo.", "item.create.wand_of_symmetry.tooltip.control2": "Cuando se hace clic derecho en el aire", "item.create.wand_of_symmetry.tooltip.action2": "_Quita_ el espejo activo.", - "item.create.wand_of_symmetry.tooltip.control3": "Mayús izdo + clic derecho", + "item.create.wand_of_symmetry.tooltip.control3": "Mayús izdo. + clic derecho", "item.create.wand_of_symmetry.tooltip.action3": "Abre la interfaz de configuración.", - "item.create.handheld_worldshaper.tooltip": "WORLDSHAPER", + "item.create.handheld_worldshaper.tooltip": "MOLDEADOR DE MUNDOS", "item.create.handheld_worldshaper.tooltip.summary": "Práctica herramienta para crear _paisajes_ y _características del terreno_.", "item.create.handheld_worldshaper.tooltip.control1": "Cuando se hace clic izquierdo en un bloque", - "item.create.handheld_worldshaper.tooltip.action1": "Establece los bloques colocados por la herramienta en el bloque objetivo.", + "item.create.handheld_worldshaper.tooltip.action1": "Selecciona ese bloque para que lo replique la herramienta.", "item.create.handheld_worldshaper.tooltip.control2": "Cuando se hace clic derecho en un bloque", "item.create.handheld_worldshaper.tooltip.action2": "Aplica el _pincel_ y la _herramienta_ actualmente seleccionadas en el lugar deseado.", - "item.create.handheld_worldshaper.tooltip.control3": "Mayús izdo + clic derecho", + "item.create.handheld_worldshaper.tooltip.control3": "Mayús izdo. + clic derecho", "item.create.handheld_worldshaper.tooltip.action3": "Abre la interfaz de configuración.", "item.create.tree_fertilizer.tooltip": "FERTILIZANTE PARA ÃRBOLES", @@ -1429,11 +1429,11 @@ "item.create.extendo_grip.tooltip.behaviour2": "No se utilizará _durabilidad_. En su lugar, la _presión del aire_ se drena desde el tanque", "item.create.potato_cannon.tooltip": "CANÓN DE PATATAS", - "item.create.potato_cannon.tooltip.summary": "Fwoomp! Lanza tus verduras caseras a tus enemigos. Se puede alimentar con la presión de aire de un _depósito trasero de cobre_", + "item.create.potato_cannon.tooltip.summary": "¡Buuum! Lanza verduras caseras a tus enemigos. Se puede alimentar con la presión de aire de un _depósito trasero de cobre_", "item.create.potato_cannon.tooltip.condition1": "Cuando se usa clic derecho", - "item.create.potato_cannon.tooltip.behaviour1": "_Dispara_ un objeto adecuado desde tu inventario_.", + "item.create.potato_cannon.tooltip.behaviour1": "_Dispara_ un objeto adecuado desde tu _inventario_.", "item.create.potato_cannon.tooltip.condition2": "Mientras se usa un depósito trasero de cobre", - "item.create.potato_cannon.tooltip.behaviour2": "No se utilizará _durabilidad_. En su lugar, la _presión del aire_ se drena desde el tanque", + "item.create.potato_cannon.tooltip.behaviour2": "No se utilizará _durabilidad_. En su lugar, la _presión del aire_ se drena del tanque", "item.create.filter.tooltip": "FILTRO", "item.create.filter.tooltip.summary": "Controla las _salidas_ y _entradas_ de los _dispositivos logísticos_ con más precisión, comparándolas con un _conjunto de objetos_ o varios _filtros anidados_.", @@ -1453,10 +1453,10 @@ "item.create.empty_schematic.tooltip.summary": "Se utiliza como 'ingrediente' de las recetas y para escribir en la _tabla de esquemas_.", "item.create.schematic.tooltip": "ESQUEMA", - "item.create.schematic.tooltip.summary": "Contiene una estructura para ser posicionada y colocada en el mundo. Posiciona el holograma como desees y utiliza un _cañón de esquemas_ para construirla.", + "item.create.schematic.tooltip.summary": "Contiene una estructura para ser posicionada y colocada en el mundo. Posiciona el holograma como desees y utiliza un _esquematicañón_ para construirla.", "item.create.schematic.tooltip.condition1": "Cuando se sostiene en la mano", "item.create.schematic.tooltip.behaviour1": "Se puede posicionar utilizando las herramientas en pantalla.", - "item.create.schematic.tooltip.control1": "Mayús izdo + clic derecho", + "item.create.schematic.tooltip.control1": "Mayús izdo. + clic derecho", "item.create.schematic.tooltip.action1": "Abre una _interfaz_ para introducir las _coordenadas_ exactas.", "item.create.schematic_and_quill.tooltip": "ESQUEMA Y PLUMA", @@ -1469,10 +1469,10 @@ "item.create.schematic_and_quill.tooltip.action1": "Selecciona un punto de esquina / confirmar guardar.", "item.create.schematic_and_quill.tooltip.control2": "Cuando mantiene [Ctrl]", "item.create.schematic_and_quill.tooltip.action2": "Selecciona puntos en _medio del aire_. Rueda del ratón para ajustar la distancia.", - "item.create.schematic_and_quill.tooltip.control3": "Mayús izdo + clic derecho", + "item.create.schematic_and_quill.tooltip.control3": "Mayús izdo. + clic derecho", "item.create.schematic_and_quill.tooltip.action3": "_Reinicia_ y elimina la selección.", - "block.create.schematicannon.tooltip": "CAÑÓN DE ESQUEMAS", + "block.create.schematicannon.tooltip": "ESQUEMATICAÑÓN", "block.create.schematicannon.tooltip.summary": "Dispara bloques para recrear un _esquema_ desplegado en el mundo. Utiliza objetos de los inventarios adyacentes y _pólvora_ como combustible.", "block.create.schematicannon.tooltip.condition1": "Cuando se hace clic derecho", "block.create.schematicannon.tooltip.behaviour1": "Abre la interfaz.", @@ -1482,7 +1482,7 @@ "block.create.schematic_table.tooltip.condition1": "Cuando se da un esquema vacío", "block.create.schematic_table.tooltip.behaviour1": "Carga un archivo elegido de la carpeta de esquemas.", - "item.create.goggles.tooltip": "GAFAS DEL CONSTRUCTOR", + "item.create.goggles.tooltip": "GAFAS DEL INGENIERO", "item.create.goggles.tooltip.summary": "Un par de gafas para aumentar tu visión con útil información _cinética_.", "item.create.goggles.tooltip.condition1": "Cuando se llevan puestas", "item.create.goggles.tooltip.behaviour1": "Muestra _indicadores de color_ correspondientes al _nivel de velocidad_ de un componente cinético colocado, así como el _impacto de estrés_ y la _carga_ de los componentes individuales.", @@ -1492,10 +1492,10 @@ "item.create.goggles.tooltip.behaviour3": "Muestra información detallada sobre la _carga_ del bloque y los _líquidos_ almacenados en su interior.", "item.create.wrench.tooltip": "LLAVE INGLESA", - "item.create.wrench.tooltip.summary": "Una herramienta útil para trabajar en artilugios cinéticos. Se puede utilizar para _rotar_, _desmantelar_ y para _configurar_ componentes.", + "item.create.wrench.tooltip.summary": "Una herramienta útil para trabajar en sistemas cinéticos. Se puede utilizar para _rotar_, _desmantelar_ y para _configurar_ componentes.", "item.create.wrench.tooltip.control1": "Cuando se hace clic derecho en un bloque cinético", "item.create.wrench.tooltip.action1": "Rota los componentes hacia o desde la cara con la que ha interactuado.", - "item.create.wrench.tooltip.control2": "Mayús izdo + clic derecho", + "item.create.wrench.tooltip.control2": "Mayús izdo. + clic derecho", "item.create.wrench.tooltip.action2": "Desmonta los _componentes cinéticos_ y los devuelve a tu inventario_.", "block.create.nozzle.tooltip": "BOQUILLA", @@ -1524,20 +1524,20 @@ "block.create.stockpile_switch.tooltip.behaviour1": "Abre la interfaz de configuración.", "block.create.content_observer.tooltip": "OBSERVADOR DE CONTENIDO", - "block.create.content_observer.tooltip.summary": "_Detecta objetos_ dentro de _contenedores_ y _transportadores_ que coincidan con un _filtro_ configurado. Mientras el _inventario_, la _cinta_ o la _canaleta_ observados _contengan_ un objeto que coincida, este componente emitirá una _señal de redstone_. Cuando un embudo observado _transfiere_ un objeto coincidente, este componente emitirá un _pulso de redstone_.", - "block.create.content_observer.tooltip.condition1": "Al observar un contenedor...", - "block.create.content_observer.tooltip.behaviour1": "Emite un pulso de Redstone mientras el contenedor observado tiene un contenido coincidente.", - "block.create.content_observer.tooltip.condition2": "Al observar un embudo...", + "block.create.content_observer.tooltip.summary": "_Detecta objetos_ o _fluidos_ dentro de _contenedores_, _tuberías_ o _cintas mecánicas_ que coincidan con un _filtro_ configurado.", + "block.create.content_observer.tooltip.condition1": "Al observar un contenedor", + "block.create.content_observer.tooltip.behaviour1": "Emite una señal de Redstone mientras que el contenedor observado contenga lo mismo.", + "block.create.content_observer.tooltip.condition2": "Al observar un embudo", "block.create.content_observer.tooltip.behaviour2": "Emite un pulso de Redstone cuando se transfiere un objeto que coincide.", "block.create.creative_crate.tooltip": "CAJA CREATIVA", - "block.create.creative_crate.tooltip.summary": "Este _contenedor de objetos_ permite la replicación infinita de cualquier elemento. Colócalo junto a un _cañón de esquemas_ para eliminar cualquier requisito de material.", - "block.create.creative_crate.tooltip.condition1": "Cuando el elemento está en la ranura para filtros", - "block.create.creative_crate.tooltip.behaviour1": "Todo lo que se _extraiga_ de este contenedor proporcionará un suministro _ilimitado_ del elemento especificado. Los objetos _insertados_ en esta caja serán _evitados_.", + "block.create.creative_crate.tooltip.summary": "Este _contenedor de objetos_ permite la replicación infinita de cualquier objeto. Colócalo junto a un _esquematicañón_ para eliminar cualquier requisito de material.", + "block.create.creative_crate.tooltip.condition1": "Cuando el objeto está en la ranura para filtros", + "block.create.creative_crate.tooltip.behaviour1": "Todo lo que se _extraiga_ de este contenedor proporcionará un suministro _ilimitado_ del objeto especificado. Los objetos _insertados_ en esta caja serán _evitados_.", "item.create.creative_blaze_cake.tooltip": "PASTEL CREATIVO", "item.create.creative_blaze_cake.tooltip.summary": "Un regalo muy especial para los _Quemadores de Blaze_ que permite _controlar su nivel de calor_. Después de comer este pastel, los Quemadores de blaze _nunca se quedarán sin combustible_.", - "item.create.creative_blaze_cake.tooltip.condition1": "Click derecho en un Quemador de blaze", + "item.create.creative_blaze_cake.tooltip.condition1": "Clic derecho en un Quemador de blaze", "item.create.creative_blaze_cake.tooltip.behaviour1": "Bloquea el nivel de calor del Quemador de blaze. Si se utiliza de nuevo, _cicla_ el nivel de calor del Quemador de blaze.", "block.create.controller_rail.tooltip": "RAÃL DE CONTROL", @@ -1567,12 +1567,12 @@ "item.create.linked_controller.tooltip.summary": "Permite el control manual de las frecuencias de _enlaces de redstone_ asignadas a sus seis botones.", "item.create.linked_controller.tooltip.condition1": "Al hacer clic derecho", "item.create.linked_controller.tooltip.behaviour1": "Activa el _controlador_. Los _controles de movimiento_ se adquieren mientras está activo.", - "item.create.linked_controller.tooltip.condition2": "Al usar Mayús izdo + clic derecho", + "item.create.linked_controller.tooltip.condition2": "Al usar Mayús izdo. + clic derecho", "item.create.linked_controller.tooltip.behaviour2": "Abre la interfaz de configuración manual.", "item.create.linked_controller.tooltip.condition3": "Al usar clic derecho en un receptor de enlaces de redstone", "item.create.linked_controller.tooltip.behaviour3": "Activa el _modo de vinculación_, pulsa uno de los _seis controles_ para vincularlo a la _frecuencia de los enlaces_.", "item.create.linked_controller.tooltip.condition4": "Clic derecho en un atril", - "item.create.linked_controller.tooltip.behaviour4": "Coloca el controlador en el atril para facilitar su activación. (Clic derecho + mayús izq. para recuperarlo)", + "item.create.linked_controller.tooltip.behaviour4": "Coloca el controlador en el atril para facilitar su activación. (Clic derecho + Mayús izdo. para recuperarlo)", "item.create.diving_helmet.tooltip": "CASCO DE BUCEO", "item.create.diving_helmet.tooltip.summary": "Junto con un _depósito trasero de cobre_, permite que el usuario pueda respirar bajo el agua durante un tiempo prolongado.", @@ -1589,7 +1589,7 @@ "item.create.diving_boots.tooltip": "BOTAS DE BUCEO", "item.create.diving_boots.tooltip.summary": "Un par de _botas_ pesadas, que permiten atravesar mejor el suelo del océano.", "item.create.diving_boots.tooltip.condition1": "Cuando se llevan puestas", - "item.create.diving_boots.tooltip.behaviour1": "El portador se hunde rápido y no puede nadar. Concede la capacidad de caminar y saltar bajo el agua. Al portador no le afectarán las _correas mecánicas.", + "item.create.diving_boots.tooltip.behaviour1": "El portador se hunde rápido y no puede nadar. Concede la capacidad de caminar y saltar bajo el agua. Al portador no le afectarán las _cintas mecánicas_.", "item.create.crafting_blueprint.tooltip": "PLANO DE ELABORACIÓN", "item.create.crafting_blueprint.tooltip.summary": "Colocado en una pared, puede utilizarse para especificar la disposición de los ingredientes para facilitar la elaboración manual. Cada ranura representa una receta", @@ -1599,19 +1599,19 @@ "item.create.crafting_blueprint.behaviour2": "Aplica la receta configurada con los ingredientes que se encuentran en tu inventario. Se puede utilizar para fabricar hasta una pila de objetos.", "item.create.minecart_coupling.tooltip": "ENSAMBLADOR DE VAGONETAS", - "item.create.minecart_coupling.tooltip.summary": "_Encadena_ todas tus _vagonetas_ o _artilugios de vagoneta_ para formar un majestuoso _tren_.", + "item.create.minecart_coupling.tooltip.summary": "_Encadena_ todas tus _vagonetas_ o _artefactos móviles de vagoneta_ para formar un majestuoso _tren_.", "item.create.minecart_coupling.tooltip.condition1": "Cuando se utiliza en vagonetas", "item.create.minecart_coupling.tooltip.behaviour1": "_Acopla_ dos vagonetas, intentando mantenerlas a una _distancia constante_ mientras se mueven.", - "item.create.experience_nugget.tooltip": "UNLOCALIZED: NUGGET OF EXPERIENCE", - "item.create.experience_nugget.tooltip.summary": "UNLOCALIZED: _Ding!_ A speck of _inspiration_ from your fantastic inventions.", - "item.create.experience_nugget.tooltip.condition1": "UNLOCALIZED: When Used", - "item.create.experience_nugget.tooltip.behaviour1": "UNLOCALIZED: _Redeems_ _Experience_ points contained within.", + "item.create.experience_nugget.tooltip": "PEPITA DE EXPERIENCIA", + "item.create.experience_nugget.tooltip.summary": "_¡Ding!_ Una partícula de _inspiración_ de tus fantásticas invenciones.", + "item.create.experience_nugget.tooltip.condition1": "Cuando se usa", + "item.create.experience_nugget.tooltip.behaviour1": "_Otorga_ los puntos de _experiencia_ contenidos.", "block.create.peculiar_bell.tooltip": "CAMPANA PECULIAR", "block.create.peculiar_bell.tooltip.summary": "Una campana decorativa de latón. Al colocarla sobre un _Fuego del alma_ o una _Fogata del alma_ puede producirse una transformación espeluznante...", - "block.create.haunted_bell.tooltip": "CAMPANA ENCANTADA", + "block.create.haunted_bell.tooltip": "CAMPANA MALDITA", "block.create.haunted_bell.tooltip.summary": "Una _campana maldita_ perseguida por las almas perdidas del Nether", "block.create.haunted_bell.tooltip.condition1": "Cuando se sostiene o suena", "block.create.haunted_bell.tooltip.behaviour1": "Resalta los _puntos sin luz_ cercanos en los que pueden aparecer las _criaturas hostiles_.", @@ -1638,7 +1638,7 @@ "create.ponder.index_title": "Ãndice", "create.ponder.shared.rpm16": "16 RPM", "create.ponder.shared.behaviour_modify_wrench": "Este comportamiento puede modificarse mediante una llave inglesa", - "create.ponder.shared.storage_on_contraption": "Los inventarios unidos al artilugio recogerán sus producciones automáticamente", + "create.ponder.shared.storage_on_contraption": "Los inventarios unidos a un artefacto animado recogerán sus producciones automáticamente", "create.ponder.shared.sneak_and": "Mayús izdo. +", "create.ponder.shared.rpm8": "8 RPM", "create.ponder.shared.ctrl_and": "Ctrl +", @@ -1648,13 +1648,13 @@ "create.ponder.tag.redstone": "Componentes lógicos", "create.ponder.tag.redstone.description": "Componentes que ayudan a la ingeniería de redstone", "create.ponder.tag.contraption_assembly": "Utilidades para adjuntar bloques", - "create.ponder.tag.contraption_assembly.description": "Herramientas y componentes utilizados para montar estructuras con movimiento, como un artilugio animado", + "create.ponder.tag.contraption_assembly.description": "Herramientas y componentes utilizados para montar artefactos animados", "create.ponder.tag.fluids": "Manipuladores de fluidos", "create.ponder.tag.fluids.description": "Componentes que ayudan a transportar y utilizar fluidos", "create.ponder.tag.decoration": "Estética", "create.ponder.tag.decoration.description": "Componentes utilizados principalmente con fines decorativos", "create.ponder.tag.windmill_sails": "Velas para los rodamientos de los molinos de viento", - "create.ponder.tag.windmill_sails.description": "Bloques que cuentan para la fuerza de un artefacto de molino de viento cuando se ensamblan. Cada uno de ellos tiene la misma eficacia al hacerlo.", + "create.ponder.tag.windmill_sails.description": "Bloques que cuentan para la fuerza de un artefacto estacionario de molino de viento cuando se ensamblan. Cada uno de ellos tiene la misma eficacia al hacerlo.", "create.ponder.tag.arm_targets": "Objetivos para los brazos mecánicos", "create.ponder.tag.arm_targets.description": "Componentes que pueden seleccionarse como entradas o salidas del brazo mecánico", "create.ponder.tag.kinetic_appliances": "Dispositivos cinéticos", @@ -1662,11 +1662,11 @@ "create.ponder.tag.kinetic_sources": "Fuentes cinéticas", "create.ponder.tag.kinetic_sources.description": "Componentes que generan fuerza rotacional", "create.ponder.tag.movement_anchor": "Anclas de movimiento", - "create.ponder.tag.movement_anchor.description": "Componentes que permiten crear artilugios en movimiento, animando una estructura anexa de diversas maneras", + "create.ponder.tag.movement_anchor.description": "Componentes que permiten crear artefactos en movimiento, animando una estructura anexa de diversas maneras", "create.ponder.tag.kinetic_relays": "Transmisores cinéticos", "create.ponder.tag.kinetic_relays.description": "Componentes que ayudan a transmitir la fuerza rotacional en otro lugar", - "create.ponder.tag.contraption_actor": "Actores del artilugio", - "create.ponder.tag.contraption_actor.description": "Componentes que exponen un comportamiento especial cuando están unidos a un artilugio en movimiento", + "create.ponder.tag.contraption_actor": "Actores de artefactos animados", + "create.ponder.tag.contraption_actor.description": "Componentes que tienen un comportamiento especial cuando están unidos a un artefacto animado", "create.ponder.tag.creative": "Modo creativo", "create.ponder.tag.creative.description": "Componentes que no suelen estar disponibles para el Modo Supervivencia", "create.ponder.tag.logistics": "Transporte de objetos", @@ -1675,12 +1675,12 @@ "create.ponder.analog_lever.header": "Controlar señales mediante la palanca analógica", "create.ponder.analog_lever.text_1": "Las palancas analógicas son una fuente compacta y precisa de energía de redstone", "create.ponder.analog_lever.text_2": "Haz clic derecho para aumentar su potencia analógica", - "create.ponder.analog_lever.text_3": "Usa Mayús izdo + clic derecho para volver a disminuir su potencia", + "create.ponder.analog_lever.text_3": "Usa Mayús izdo. + clic derecho para volver a disminuir su potencia", "create.ponder.andesite_tunnel.header": "Usar túneles de andesita", - "create.ponder.andesite_tunnel.text_1": "Los túneles de andesita se pueden utilizar para tapar las correas", + "create.ponder.andesite_tunnel.text_1": "Los túneles de andesita se pueden utilizar para tapar las cintas mecánicas", "create.ponder.andesite_tunnel.text_2": "Siempre que un túnel de andesita tenga conexiones a los lados...", - "create.ponder.andesite_tunnel.text_3": "...dividirá exactamente un elemento de cualquier pila que pase", + "create.ponder.andesite_tunnel.text_3": "...dividirá exactamente un objeto de cualquier pila que pase", "create.ponder.andesite_tunnel.text_4": "El resto continuará su camino", "create.ponder.basin.header": "Procesar objetos en la cuenca", @@ -1699,28 +1699,28 @@ "create.ponder.bearing_modes.text_2": "Se puede configurar para que nunca vuelva a los bloques sólidos, o sólo cerca del ángulo en el que comenzó", "create.ponder.belt_casing.header": "Correas revestidas", - "create.ponder.belt_casing.text_1": "Se puede utilizar revestidor de latón o andesita para decorar las correas", + "create.ponder.belt_casing.text_1": "Se puede utilizar revestidor de latón o andesita para decorar las cintas mecánicas", "create.ponder.belt_casing.text_2": "Se puede utilizar una llave inglesa para quitar el revestimiento", - "create.ponder.belt_connector.header": "El uso de las correas mecánicas", - "create.ponder.belt_connector.text_1": "Al hacer clic derecho en dos ejes con una correa mecánica se conectarán entre sí", - "create.ponder.belt_connector.text_2": "Las selecciones accidentales pueden ser canceladas con Mayús izdo + clic derecho", - "create.ponder.belt_connector.text_3": "Se pueden añadir ejes adicionales en toda la correa", - "create.ponder.belt_connector.text_4": "Los ejes conectados a través de correas girarán con velocidad y dirección idénticas", + "create.ponder.belt_connector.header": "El uso de las cintas", + "create.ponder.belt_connector.text_1": "Al hacer clic derecho en dos ejes con una cinta, se conectarán entre sí", + "create.ponder.belt_connector.text_2": "Las selecciones accidentales pueden ser canceladas con Mayús izdo. + clic derecho", + "create.ponder.belt_connector.text_3": "Se pueden añadir ejes adicionales en toda la cinta mecánica", + "create.ponder.belt_connector.text_4": "Los ejes conectados a través de cintas mecánicas girarán con velocidad y dirección idénticas", "create.ponder.belt_connector.text_5": "Los ejes añadidos se pueden quitar con la llave inglesa", - "create.ponder.belt_connector.text_6": "Las correas mecánicas se pueden teñir con fines estéticos", + "create.ponder.belt_connector.text_6": "Las cintas mecánicas se pueden teñir con fines estéticos", - "create.ponder.belt_directions.header": "Orientaciones válidas para las correas mecánicas", - "create.ponder.belt_directions.text_1": "Las correas mecánicas no pueden conectarse en direcciones arbitrarias", + "create.ponder.belt_directions.header": "Orientaciones válidas para las cintas mecánicas", + "create.ponder.belt_directions.text_1": "Las cintas no pueden conectarse en direcciones arbitrarias", "create.ponder.belt_directions.text_2": "1. Pueden conectarse horizontalmente", "create.ponder.belt_directions.text_3": "2. Pueden conectarse en diagonal", "create.ponder.belt_directions.text_4": "3. Pueden conectarse verticalmente", "create.ponder.belt_directions.text_5": "4. Y pueden conectar ejes verticales horizontalmente", "create.ponder.belt_directions.text_6": "Estas son todas las direcciones posibles. Pueden abarcar cualquier longitud entre 2 y 20 bloques", - "create.ponder.belt_transport.header": "El uso de las correas mecánicas para la logística", - "create.ponder.belt_transport.text_1": "Las correas mecánicas transportan objetos y otras entidades", - "create.ponder.belt_transport.text_2": "Haz clic derecho con la mano vacía para sacar objetos de una 'cinta'", + "create.ponder.belt_transport.header": "El uso de las cintas mecánicas para la logística", + "create.ponder.belt_transport.text_1": "Las cintas mecánicas transportan objetos y otras entidades", + "create.ponder.belt_transport.text_2": "Haz clic derecho con la mano vacía para sacar objetos de una cinta mecánica", "create.ponder.blaze_burner.header": "Alimentar quemadores de blaze", "create.ponder.blaze_burner.text_1": "Los quemadores de blaze pueden proporcionar calor a los objetos procesados en una cuenca", @@ -1735,7 +1735,7 @@ "create.ponder.brass_funnel.text_4": "El uso de objetos en la ranura de filtrado restringirá el embudo para transferir sólo las pilas que coincidan.", "create.ponder.brass_tunnel.header": "Usar túneles de latón", - "create.ponder.brass_tunnel.text_1": "Los túneles de latón pueden utilizarse para tapar las correas", + "create.ponder.brass_tunnel.text_1": "Los túneles de latón pueden utilizarse para tapar cintas mecánicas", "create.ponder.brass_tunnel.text_2": "Tienen ranuras de filtro en cada lado abierto", "create.ponder.brass_tunnel.text_3": "Los filtros en las conexiones de entrada simplemente bloquean los objetos que no coincidan", "create.ponder.brass_tunnel.text_4": "Los filtros en las conexiones de salida pueden utilizarse para ordenar los objetos por tipo", @@ -1748,7 +1748,7 @@ "create.ponder.brass_tunnel_modes.text_1": "Mediante una llave inglesa se puede configurar el comportamiento de distribución de los túneles de latón", "create.ponder.brass_tunnel_modes.text_10": "'Sincronizar entradas' es una configuración única de los túneles de latón", "create.ponder.brass_tunnel_modes.text_11": "Las entradas sólo pueden pasar si cada túnel del grupo tiene una en espera", - "create.ponder.brass_tunnel_modes.text_12": "Esto asegura que todas las correas afectadas suministren objetos al mismo tiempo", + "create.ponder.brass_tunnel_modes.text_12": "Esto asegura que todas las cintas mecánicas afectadas suministren objetos al mismo tiempo", "create.ponder.brass_tunnel_modes.text_2": "El modo División intentará distribuir la pila uniformemente entre las salidas disponibles", "create.ponder.brass_tunnel_modes.text_3": "Si una salida no puede tomar más objetos, se saltará", "create.ponder.brass_tunnel_modes.text_4": "El modo División forzada nunca saltará las salidas, y en su lugar esperará hasta que estén libres", @@ -1760,24 +1760,24 @@ "create.ponder.cart_assembler.header": "Mover estructuras usando ensambladores de vagonetas", "create.ponder.cart_assembler.text_1": "Los ensambladores de vagonetas montan estructuras adjuntas a las vagonetas que pasan", - "create.ponder.cart_assembler.text_2": "Sin una señal de redstone, desmonta los artilugios de vagoneta que pasan de nuevo en bloques", - "create.ponder.cart_assembler.text_3": "El uso de una llave inglesa en una vagoneta te permitirá llevar el artilugio a otro lugar", + "create.ponder.cart_assembler.text_2": "Sin una señal de redstone, desmonta los artefactos móviles de vagoneta que pasan de nuevo en bloques", + "create.ponder.cart_assembler.text_3": "El uso de una llave inglesa en una vagoneta te permitirá llevarte el artefacto móvil a otro lugar", - "create.ponder.cart_assembler_dual.header": "Ensamblajes de artilugios de vagoneta", + "create.ponder.cart_assembler_dual.header": "Montando artefactos móviles de vagoneta", "create.ponder.cart_assembler_dual.text_1": "Siempre que dos ensambladores de vagoneta compartan una estructura adjunta...", - "create.ponder.cart_assembler_dual.text_2": "...al alimentar a cualquiera de ellos se creará un artilugio de vagoneta", + "create.ponder.cart_assembler_dual.text_2": "...al alimentar a cualquiera de ellos se creará un artefacto móvil de vagoneta", "create.ponder.cart_assembler_dual.text_3": "Las vagonetas se comportarán como las conectadas a través del acoplamiento de vagoneta", - "create.ponder.cart_assembler_modes.header": "Configurar la orientación de los artilugios de vagonetas", - "create.ponder.cart_assembler_modes.text_1": "Los artilugios de vagonetas girarán para orientarse hacia el movimiento de sus vagonetas", + "create.ponder.cart_assembler_modes.header": "Configurar la orientación de los artefactos móviles de vagonetas", + "create.ponder.cart_assembler_modes.text_1": "Los artefactos móviles de vagonetas girarán para orientarse hacia el movimiento de sus vagonetas", "create.ponder.cart_assembler_modes.text_2": "Esta flecha indica qué lado de la estructura se considerará la parte delantera", - "create.ponder.cart_assembler_modes.text_3": "Si el ensamblador está configurado para bloquear la rotación, la orientación de los artilugios nunca cambiará", + "create.ponder.cart_assembler_modes.text_3": "Si el ensamblador está configurado para bloquear la rotación, la orientación de los artefactos móviles nunca cambiará", "create.ponder.cart_assembler_rails.header": "Otros tipos de vagonetas y raíles", "create.ponder.cart_assembler_rails.text_1": "Los ensambladores de vagonetas en raíles normales no afectarán el movimiento de las vagonetas que pasen", "create.ponder.cart_assembler_rails.text_2": "Cuando se encuentre en un raíl motorizado o en un raíl de control, las vagonetas se mantendrán en su sitio hasta que sea motorizado", "create.ponder.cart_assembler_rails.text_3": "Se pueden utilizar otros tipos de vagonetas como anclaje", - "create.ponder.cart_assembler_rails.text_4": "Los artilugios de vagonetas de horno se mantendrán alimentados a sí mismos, sacando combustible de cualquier inventario adjunto", + "create.ponder.cart_assembler_rails.text_4": "Los artefactos móviles de vagonetas de horno se mantendrán alimentados a sí mismos, sacando combustible de cualquier inventario adjunto", "create.ponder.chain_drive.header": "Transmitir fuerza rotacional con las cadenas de transmisión", "create.ponder.chain_drive.text_1": "Las cadenas de transmisión transmiten la rotación entre sí en fila", @@ -1788,7 +1788,7 @@ "create.ponder.chain_gearshift.text_1": "Las cadenas de transmisión ajustables sin alimentación se comportan exactamente como las cadenas de transmisión", "create.ponder.chain_gearshift.text_2": "Cuando están alimentadas, la velocidad transmitida a las demás cadenas de transmisión de la fila se duplica", "create.ponder.chain_gearshift.text_3": "Siempre que la cadena de transmisión alimentada no esté en el origen, su velocidad se reducirá a la mitad", - "create.ponder.chain_gearshift.text_4": "En ambos casos, las cadenas de transmisión de la fila siempre funcionan a 2 veces la velocidad de la cadena de transmisión alimentada", + "create.ponder.chain_gearshift.text_4": "En ambos casos, las cadenas de transmisión de la fila siempre funcionan al doble de la velocidad de la cadena de transmisión alimentada", "create.ponder.chain_gearshift.text_5": "Utilizando señales analógicas, la relación puede ajustarse con mayor precisión, entre 1 y 2", "create.ponder.chain_gearshift.text_6": "12 RPM", @@ -1799,8 +1799,8 @@ "create.ponder.chute_upward.header": "Transportar objetos hacia arriba mediante ductos", "create.ponder.chute_upward.text_1": "Usando ventiladores revestidos en la parte superior o inferior, un ducto puede transportar objetos hacia arriba", - "create.ponder.chute_upward.text_2": "Al inspeccionar los ductos con las gafas del constructor, se revela información sobre la dirección del movimiento", - "create.ponder.chute_upward.text_3": "En el extremo 'bloqueado', los objetos tendrán que ser insertados/tomados de los lados", + "create.ponder.chute_upward.text_2": "Al inspeccionar los ductos con las gafas del ingeniero, se revela información sobre la dirección del movimiento", + "create.ponder.chute_upward.text_3": "En el extremo 'bloqueado', los objetos tendrán que ser insertados/sacados de los lados", "create.ponder.clockwork_bearing.header": "Animar estructuras con rodamientos tipo reloj", "create.ponder.clockwork_bearing.text_1": "Los rodamientos tipo reloj se fijan a los bloques que tienen delante", @@ -1817,22 +1817,22 @@ "create.ponder.clutch.text_2": "Cuando se alimentan con redstone, rompen la conexión", "create.ponder.cog_speedup.header": "Cambiar de marchas con engranajes", - "create.ponder.cog_speedup.text_1": "Los engranajes grandes y pequeños pueden conectarse en diagonal", - "create.ponder.cog_speedup.text_2": "Al cambiar de engranajes grandes a pequeños, la velocidad rotacional se duplicará", + "create.ponder.cog_speedup.text_1": "Los engranajes grandes y normales pueden conectarse en diagonal", + "create.ponder.cog_speedup.text_2": "Al cambiar de engranajes grandes a normales, la velocidad rotacional se duplicará", "create.ponder.cog_speedup.text_3": "Inversamente, la velocidad rotacional se reducirá a la mitad", "create.ponder.cogwheel.header": "Transmitir fuerza rotacional mediante engranajes", "create.ponder.cogwheel.text_1": "Los engranajes transmitirán la rotación a otros engranajes adyacentes", "create.ponder.cogwheel.text_2": "Los ejes adyacentes conectados así, girarán en direcciones opuestas", - "create.ponder.cogwheel_casing.header": "UNLOCALIZED: Encasing Cogwheels", - "create.ponder.cogwheel_casing.text_1": "UNLOCALIZED: Brass or Andesite Casing can be used to decorate Cogwheels", - "create.ponder.cogwheel_casing.text_2": "UNLOCALIZED: Components added after encasing will not connect to the shaft outputs", - "create.ponder.cogwheel_casing.text_3": "UNLOCALIZED: The Wrench can be used to toggle connections", + "create.ponder.cogwheel_casing.header": "Revestir engranajes", + "create.ponder.cogwheel_casing.text_1": "Los revestimientos de latón o andesita pueden ser usados para decorar los engranajes", + "create.ponder.cogwheel_casing.text_2": "Los componentes que se añadan por la salida del eje no se conectarán", + "create.ponder.cogwheel_casing.text_3": "La llave inglesa puede usarse para alternar las conexiones", - "create.ponder.creative_fluid_tank.header": "Tanque de fluídos creativo", + "create.ponder.creative_fluid_tank.header": "Tanque de fluidos creativo", "create.ponder.creative_fluid_tank.text_1": "Los depósitos de fluidos creativos pueden utilizarse para proporcionar un suministro de fluidos sin fondo", - "create.ponder.creative_fluid_tank.text_2": "Haga clic con el botón derecho en un elemento que contenga fluido para configurarlo", + "create.ponder.creative_fluid_tank.text_2": "Haga clic con el botón derecho en un objeto que contenga fluido para configurarlo", "create.ponder.creative_fluid_tank.text_3": "Las redes de tuberías pueden ahora extraer sin cesar el fluido asignado del depósito", "create.ponder.creative_fluid_tank.text_4": "Cualquier fluido empujado de vuelta a un tanque de fluido creativo será anulado", @@ -1851,7 +1851,7 @@ "create.ponder.deployer.text_10": "Haz clic derecho en el frente para darle un objeto a utilizar", "create.ponder.deployer.text_11": "Los objetos también pueden ser insertados automáticamente", "create.ponder.deployer.text_12": "Los desplegadores llevan una ranura de filtro", - "create.ponder.deployer.text_13": "Cuando se establece un filtro, sólo se activa mientras se mantiene un elemento coincidente", + "create.ponder.deployer.text_13": "Cuando se establece un filtro, sólo se activa mientras se mantiene un objeto coincidente", "create.ponder.deployer.text_14": "Ahora sólo se pueden insertar los objetos que coincidan con el filtro...", "create.ponder.deployer.text_15": "...y sólo se extraerán los objetos que no coincidan", "create.ponder.deployer.text_2": "Siempre interactuará con la posición 2 bloques delante de sí mismo", @@ -1863,9 +1863,9 @@ "create.ponder.deployer.text_8": "Cosechar bloques", "create.ponder.deployer.text_9": "Y atacar criaturas", - "create.ponder.deployer_contraption.header": "Usar desplegadores en artilugios", - "create.ponder.deployer_contraption.text_1": "Siempre que los desplegadores se muevan como parte de un artilugio animado...", - "create.ponder.deployer_contraption.text_2": "Se activan en cada ubicación visitada, utilizando objetos de los inventarios de cualquier parte del artilugio", + "create.ponder.deployer_contraption.header": "Usar desplegadores en artefactos animados", + "create.ponder.deployer_contraption.text_1": "Siempre que los desplegadores se muevan como parte de un artefacto animado...", + "create.ponder.deployer_contraption.text_2": "Se activan en cada ubicación visitada, utilizando objetos de los inventarios de cualquier parte del artefacto", "create.ponder.deployer_contraption.text_3": "La ranura para filtros se puede utilizar para especificar qué objetos tirar", "create.ponder.deployer_modes.header": "Modos del desplegador", @@ -1873,9 +1873,9 @@ "create.ponder.deployer_modes.text_2": "Usando una llave inglesa, se puede configurar para imitar un clic izquierdo en su lugar", "create.ponder.deployer_processing.header": "Procesar objetos mediante desplegadores", - "create.ponder.deployer_processing.text_1": "Con un objeto de sujeción ajustado, los desplegadores pueden procesar los objetos proporcionados por debajo de ellos", + "create.ponder.deployer_processing.text_1": "Cuando sujetan el objeto adecuado, los desplegadores pueden procesar los objetos proporcionados por debajo de ellos", "create.ponder.deployer_processing.text_2": "Los objetos de entrada pueden soltarse o colocarse en un depósito bajo el desplegador", - "create.ponder.deployer_processing.text_3": "Cuando los objetos se proporcionan en una 'cinta'...", + "create.ponder.deployer_processing.text_3": "Cuando los objetos se disponen en una cinta mecánica...", "create.ponder.deployer_processing.text_4": "El desplegador los retendrá y procesará automáticamente", "create.ponder.deployer_redstone.header": "Controlar desplegadores con redstone", @@ -1884,9 +1884,9 @@ "create.ponder.deployer_redstone.text_3": "Por lo tanto, un pulso negativo puede ser utilizado para desencadenar exactamente un ciclo de activación", "create.ponder.depot.header": "Usar depósitos", - "create.ponder.depot.text_1": "Los depósitos pueden servir como objetos 'fijos' de la correa", + "create.ponder.depot.text_1": "Los depósitos pueden servir como elementos fijos de una cinta mecánica", "create.ponder.depot.text_2": "Haz clic derecho para colocar o eliminar manualmente objetos del mismo", - "create.ponder.depot.text_3": "Al igual que las correas mecánicas, pueden proporcionar objetos para su procesamiento", + "create.ponder.depot.text_3": "Al igual que en las cintas mecánicas, pueden procesarse objetos", "create.ponder.depot.text_4": "...así como proporcionar objetos a los brazos mecánicos", "create.ponder.empty_blaze_burner.header": "Usar quemadores de blaze vacíos", @@ -1897,7 +1897,7 @@ "create.ponder.empty_blaze_burner.text_5": "La llama puede transformarse utilizando un objeto con alma", "create.ponder.empty_blaze_burner.text_6": "Sin embargo, no son adecuados para la calefacción industrial", - "create.ponder.encased_fluid_pipe.header": "Revestir tuberías de fluídos", + "create.ponder.encased_fluid_pipe.header": "Revestir tuberías de fluidos", "create.ponder.encased_fluid_pipe.text_1": "El revestidor de cobre puede utilizarse para decorar las tuberías de fluidos", "create.ponder.encased_fluid_pipe.text_2": "Además de estar ocultas, las tuberías revestidas están bloqueadas en su estado de conectividad", "create.ponder.encased_fluid_pipe.text_3": "Ya no reaccionará a los bloques vecinos que se añadan o eliminen", @@ -1909,12 +1909,12 @@ "create.ponder.fan_processing.header": "Procesar objetos mediante ventiladores revestidos", "create.ponder.fan_processing.text_1": "Al pasar por lava, el flujo de aire se calienta", "create.ponder.fan_processing.text_2": "Los objetos capturados en la zona serán fundidos", - "create.ponder.fan_processing.text_3": "Los artículos de comida arrojados aquí serán incinerados", + "create.ponder.fan_processing.text_3": "Los objetos de comida arrojados aquí serán incinerados", "create.ponder.fan_processing.text_4": "En su lugar, se debería utilizar una instalación de ahumado, usando fuego", "create.ponder.fan_processing.text_5": "Los flujos de aire que pasan por el agua crean una instalación de lavado", "create.ponder.fan_processing.text_6": "Se puede hacer un nuevo e interesante procesamiento con él", "create.ponder.fan_processing.text_7": "La velocidad del ventilador NO afecta a la velocidad de procesamiento, sólo a su rango", - "create.ponder.fan_processing.text_8": "El procesamiento del ventilador también puede aplicarse a los objetos de los depósitos y las correas", + "create.ponder.fan_processing.text_8": "El procesamiento del ventilador también puede aplicarse a los objetos de los depósitos y las cintas mecánicas", "create.ponder.fan_source.header": "Generar fuerza rotacional mediante ventiladores revestidos", "create.ponder.fan_source.text_1": "Los ventiladores orientados hacia una fuente de calor pueden proporcionar fuerza rotacional", @@ -1962,10 +1962,10 @@ "create.ponder.funnel_direction.header": "Dirección de la transferencia", "create.ponder.funnel_direction.text_1": "Colocado normalmente, extrae objetos del inventario", - "create.ponder.funnel_direction.text_2": "Colocado mientras pulsa Mayús izdo, pone objetos en el inventario", + "create.ponder.funnel_direction.text_2": "Colocado mientras pulsas Mayús izdo., pone objetos en el inventario", "create.ponder.funnel_direction.text_3": "Usando una llave inglesa, el embudo puede ser volteado después de su colocación", "create.ponder.funnel_direction.text_4": "Se aplicarán las mismas reglas para la mayoría de las orientaciones", - "create.ponder.funnel_direction.text_5": "Los embudos en las correas extraerán/insertarán dependiendo de su dirección de movimiento", + "create.ponder.funnel_direction.text_5": "Los embudos en las cintas mecánicas extraerán/insertarán dependiendo de su dirección de movimiento", "create.ponder.funnel_intro.header": "Usar embudos", "create.ponder.funnel_intro.text_1": "Los embudos son ideales para transferir objetos desde y hacia los inventarios", @@ -1976,7 +1976,7 @@ "create.ponder.funnel_transfer.header": "Transferencia directa", "create.ponder.funnel_transfer.text_1": "Los embudos no pueden transferir nunca entre inventarios cerrados directamente", "create.ponder.funnel_transfer.text_2": "Los ductos o los ductos inteligentes podrían ser más adecuados para estos fines", - "create.ponder.funnel_transfer.text_3": "Lo mismo se aplica para el movimiento horizontal. Una correa mecánica debería ayudar aquí", + "create.ponder.funnel_transfer.text_3": "Lo mismo se aplica para el movimiento horizontal. Una cinta mecánica debería ayudar aquí", "create.ponder.furnace_engine.header": "Generar fuerza rotacional con el motor de horno", "create.ponder.furnace_engine.text_1": "Los motores de horno generan fuerza rotacional mientras su horno adjunto está funcionando", @@ -2020,7 +2020,7 @@ "create.ponder.hand_crank.text_1": "Las manivelas pueden ser utilizadas para aplicar fuerza rotacional manualmente", "create.ponder.hand_crank.text_2": "Mantén pulsado clic derecho para girar en sentido antihorario", "create.ponder.hand_crank.text_3": "Su velocidad de transmisión es relativamente alta", - "create.ponder.hand_crank.text_4": "Mayús izdo + clic derecho pulsado para girar en sentido horario", + "create.ponder.hand_crank.text_4": "Mayús izdo. + clic derecho pulsado para girar en sentido horario", "create.ponder.hose_pulley.header": "Llenado y vaciado de fuentes mediante poleas de manguera", "create.ponder.hose_pulley.text_1": "Las poleas para mangueras pueden utilizarse para llenar o drenar grandes masas de fluido", @@ -2046,20 +2046,20 @@ "create.ponder.item_drain.header": "Vaciar contenedores de fluidos mediante drenajes de objetos", "create.ponder.item_drain.text_1": "Los drenajes de objetos pueden extraer los fluidos de los objetos", "create.ponder.item_drain.text_2": "Haz clic derecho para verter los fluidos de tu objeto retenido en él", - "create.ponder.item_drain.text_3": "Cuando los artículos se insertan desde el lado...", + "create.ponder.item_drain.text_3": "Cuando los objetos se insertan desde lateralmente...", "create.ponder.item_drain.text_4": "...ruedan a través, vaciando su líquido contenido", "create.ponder.item_drain.text_5": "Las redes de tuberías pueden ahora extraer el fluido del buffer interno de los desagües", - "create.ponder.item_vault_sizes.header": "UNLOCALIZED: Dimensions of an Item Vault", - "create.ponder.item_vault_sizes.text_1": "UNLOCALIZED: Item Vaults can be combined to increase the total capacity", - "create.ponder.item_vault_sizes.text_2": "UNLOCALIZED: Their base square can be up to 3 blocks wide...", - "create.ponder.item_vault_sizes.text_3": "UNLOCALIZED: ...and grow in length up to 3x their diameter", + "create.ponder.item_vault_sizes.header": "Bóveda de objetos", + "create.ponder.item_vault_sizes.text_1": "Las bóvedas de objetos pueden combinarse para aumentar su capacidad total", + "create.ponder.item_vault_sizes.text_2": "Su base cuadrada puede ser de hasta 3 bloques de ancho...", + "create.ponder.item_vault_sizes.text_3": "...y pueden aumentar hasta 3 veces su diámetro", - "create.ponder.item_vault_storage.header": "UNLOCALIZED: Storing Items in Vaults", - "create.ponder.item_vault_storage.text_1": "UNLOCALIZED: Item Vaults can be used to store large amounts of items", - "create.ponder.item_vault_storage.text_2": "UNLOCALIZED: However, contents cannot be added or taken manually", - "create.ponder.item_vault_storage.text_3": "UNLOCALIZED: Any components for item transfer can both insert...", - "create.ponder.item_vault_storage.text_4": "UNLOCALIZED: ...and take contents from this container", + "create.ponder.item_vault_storage.header": "Almacenar objetos en las bóvedas", + "create.ponder.item_vault_storage.text_1": "Las bóvedas de objetos pueden usarse para almacenar grandes cantidades de objetos", + "create.ponder.item_vault_storage.text_2": "Sin embargo, los contenidos no pueden introducirse ni sacarse manualmente", + "create.ponder.item_vault_storage.text_3": "Cualquier componente para transferencia de objetos puede tanto introducir...", + "create.ponder.item_vault_storage.text_4": "...como sacar objetos de este contenedor", "create.ponder.large_cogwheel.header": "Transmitir fuerza rotacional mediante engranajes grandes", "create.ponder.large_cogwheel.text_1": "Los engranajes grandes pueden conectarse entre sí en ángulo recto", @@ -2068,16 +2068,16 @@ "create.ponder.linear_chassis_attachment.header": "Fijar bloques mediante el chasis lineal", "create.ponder.linear_chassis_attachment.text_1": "Las caras abiertas de un chasis lineal pueden hacerse pegajosas", "create.ponder.linear_chassis_attachment.text_2": "Haz clic de nuevo para que se pegue el lado opuesto", - "create.ponder.linear_chassis_attachment.text_3": "Mayús izdo + clic derecho con la mano vacía para eliminar el pegamento", + "create.ponder.linear_chassis_attachment.text_3": "Mayús izdo. + clic derecho con la mano vacía para eliminar el pegamento", "create.ponder.linear_chassis_attachment.text_4": "Las caras pegadas del chasis lineal fijarán una línea de bloques delante de él", "create.ponder.linear_chassis_attachment.text_5": "Utilizando una llave inglesa, se puede especificar un rango preciso", "create.ponder.linear_chassis_attachment.text_6": "Manteniendo pulsada la tecla [Ctrl] y usando la rueda central del ratón, se ajusta el rango de todos los bloques de chasis adjuntos", "create.ponder.linear_chassis_attachment.text_7": "Para fijar los bloques a cualquier otro lado es necesario utilizar pegamento", - "create.ponder.linear_chassis_attachment.text_8": "Utilizando esta mecánica, las estructuras de cualquier forma pueden moverse como un artilugio", + "create.ponder.linear_chassis_attachment.text_8": "Utilizando esta mecánica, las estructuras de cualquier forma pueden ser parte del artefacto animado", "create.ponder.linear_chassis_group.header": "Mover chasis lineales en grupos", "create.ponder.linear_chassis_group.text_1": "Los chasis lineales se conectan a los bloques de chasis idénticos que se encuentren a su lado", - "create.ponder.linear_chassis_group.text_2": "Cuando uno es movido por un artilugio, los otros son arrastrados con él", + "create.ponder.linear_chassis_group.text_2": "Cuando uno es movido por un artefacto animado, los otros son arrastrados con él", "create.ponder.linear_chassis_group.text_3": "Los chasis de otro tipo u orientados en otra dirección no se fijan", "create.ponder.mechanical_arm.header": "Configurar los brazos mecánicos", @@ -2116,7 +2116,7 @@ "create.ponder.mechanical_bearing.header": "Mover estructuras mediante el rodamiento mecánico", "create.ponder.mechanical_bearing.text_1": "Los rodamientos mecánicos se fijan al bloque que tienen delante", - "create.ponder.mechanical_bearing.text_2": "Al recibir fuerza rotacional, la ensamblará en un artilugio giratorio", + "create.ponder.mechanical_bearing.text_2": "Al recibir fuerza rotacional, la ensamblará en un artefacto estacionario", "create.ponder.mechanical_crafter.header": "Configurar ensambladores mecánicos", "create.ponder.mechanical_crafter.text_1": "Se puede utilizar una serie de ensambladores mecánicos para automatizar cualquier receta de elaboración.", @@ -2142,12 +2142,12 @@ "create.ponder.mechanical_drill.text_1": "Cuando se le aplica fuerza rotacional, el taladro mecánico rompe los bloques que tiene delante.", "create.ponder.mechanical_drill.text_2": "Su velocidad de trabajo depende de la fuerza rotacional suministrada", - "create.ponder.mechanical_drill_contraption.header": "Usar taladros mecánicos en artilugios", - "create.ponder.mechanical_drill_contraption.text_1": "Siempre que los taladros mecánicos se muevan como parte de un artilugio animado...", - "create.ponder.mechanical_drill_contraption.text_2": "...romperán los bloques por los que artilugio los hace pasar", + "create.ponder.mechanical_drill_contraption.header": "Usar taladros mecánicos en artefactos animados", + "create.ponder.mechanical_drill_contraption.text_1": "Siempre que los taladros mecánicos se muevan como parte de un artefacto animado...", + "create.ponder.mechanical_drill_contraption.text_2": "...romperán los bloques por los que artefacto los hace pasar", - "create.ponder.mechanical_harvester.header": "Utilizar cosechadoras mecánicas en artilugios", - "create.ponder.mechanical_harvester.text_1": "Siempre que las cosechadoras mecánicas se muevan como parte de un artilugio animado...", + "create.ponder.mechanical_harvester.header": "Utilizar cosechadoras mecánicas en artefactos animados", + "create.ponder.mechanical_harvester.text_1": "Siempre que las cosechadoras mecánicas se muevan como parte de un artefacto animado...", "create.ponder.mechanical_harvester.text_2": "...recogerán y repondrán los cultivos maduros en su camino", "create.ponder.mechanical_mixer.header": "Procesar objetos con la mezcladora mecánica", @@ -2165,16 +2165,16 @@ "create.ponder.mechanical_piston_modes.text_1": "Cuando los pistones mecánicos dejan de moverse, la estructura movida vuelve a los bloques", "create.ponder.mechanical_piston_modes.text_2": "Puede configurarse para que no vuelva nunca a los bloques sólidos, o sólo en la ubicación en la que comenzó", - "create.ponder.mechanical_plough.header": "Utilizar arados mecánicos en los artilugios", - "create.ponder.mechanical_plough.text_1": "Cuando los arados mecánicos se mueven como parte de un artilugio animado...", - "create.ponder.mechanical_plough.text_2": "...romperán los bloques sin un hitbox de colisión sólido", + "create.ponder.mechanical_plough.header": "Utilizar arados mecánicos en los artefactos animados", + "create.ponder.mechanical_plough.text_1": "Cuando los arados mecánicos se mueven como parte de un artefacto animado...", + "create.ponder.mechanical_plough.text_2": "...romperán los bloques con una hitbox menor a la de un bloque completo", "create.ponder.mechanical_plough.text_3": "Además, pueden crear tierras de cultivo", "create.ponder.mechanical_plough.text_4": "...también pueden lanzar entidades sin dañarlas", "create.ponder.mechanical_press.header": "Procesar objetos con la prensa mecánica", "create.ponder.mechanical_press.text_1": "La prensa mecánica puede procesar los objetos proporcionados por debajo de ella", "create.ponder.mechanical_press.text_2": "Los objetos de entrada pueden soltarse o colocarse en un depósito bajo la prensa", - "create.ponder.mechanical_press.text_3": "Cuando los objetos se proporcionan en una 'cinta'...", + "create.ponder.mechanical_press.text_3": "Cuando los objetos se proporcionan en una cinta mecánica...", "create.ponder.mechanical_press.text_4": "...la prensa mecánica los retendrá y procesará automáticamente", "create.ponder.mechanical_press_compacting.header": "Compactar objetos con la prensa mecánica", @@ -2202,14 +2202,14 @@ "create.ponder.mechanical_saw_breaker.text_1": "Cuando se le da una fuerza rotacional, la sierra mecánica cortará los árboles que estén directamente frente a ella", "create.ponder.mechanical_saw_breaker.text_2": "Para poder cortar el árbol por completo, la sierra tiene que romper el último bloque que lo une al suelo", - "create.ponder.mechanical_saw_contraption.header": "Utilizar sierras mecánicas en artilugios", - "create.ponder.mechanical_saw_contraption.text_1": "Cuando las sierras mecánicas se mueven como parte de un artilugio animado...", - "create.ponder.mechanical_saw_contraption.text_2": "...cortarán cualquier árbol con el que el artilugio se tope", + "create.ponder.mechanical_saw_contraption.header": "Utilizar sierras mecánicas en artefactos animados", + "create.ponder.mechanical_saw_contraption.text_1": "Cuando las sierras mecánicas se mueven como parte de un artefactos animado...", + "create.ponder.mechanical_saw_contraption.text_2": "...cortarán cualquier árbol con el se topen", "create.ponder.mechanical_saw_processing.header": "Procesar objetos en la sierra mecánica", "create.ponder.mechanical_saw_processing.text_1": "Las sierras mecánicas orientadas hacia arriba pueden procesar una variedad de objetos", "create.ponder.mechanical_saw_processing.text_2": "El objeto procesado siempre se mueve en contra de la fuerza rotacional de la sierra", - "create.ponder.mechanical_saw_processing.text_3": "Las sierras mecánicas pueden trabajar en línea con las correas mecánicas", + "create.ponder.mechanical_saw_processing.text_3": "Las sierras mecánicas pueden trabajar en línea con las cinta mecánicas", "create.ponder.mechanical_saw_processing.text_4": "Cuando un ingrediente tiene varios resultados posibles, la ranura para filtros puede especificarlo", "create.ponder.mechanical_saw_processing.text_5": "Sin filtro, al contrario, la sierra mecánica pasaría por todos los resultados", @@ -2230,24 +2230,24 @@ "create.ponder.piston_pole.text_2": "La longitud de la pértiga añadida en su parte posterior determina el rango de alcance", "create.ponder.portable_fluid_interface.header": "Interfaz de fluidos portátil", - "create.ponder.portable_fluid_interface.text_1": "No se puede acceder a los depósitos de fluidos de los artilugios en movimiento por ninguna tubería", - "create.ponder.portable_fluid_interface.text_2": "Este componente puede interactuar con los depósitos de fluidos sin necesidad de detener el artilugio", + "create.ponder.portable_fluid_interface.text_1": "No se puede acceder a los depósitos de fluidos de los artefactos en movimiento por ninguna tubería", + "create.ponder.portable_fluid_interface.text_2": "Este componente puede interactuar con los depósitos de fluidos sin necesidad de detener el artefacto", "create.ponder.portable_fluid_interface.text_3": "Coloca una segunda con un espacio de 1 o 2 bloques entre ellas", "create.ponder.portable_fluid_interface.text_4": "Cada vez que pasen por delante de la otra, entablarán una conexión", - "create.ponder.portable_fluid_interface.text_5": "Mientras esté activada, la interfaz estacionaria representará TODOS los tanques del artilugio", + "create.ponder.portable_fluid_interface.text_5": "Mientras esté activada, la interfaz estacionaria representará TODOS los tanques del artefacto", "create.ponder.portable_fluid_interface.text_6": "Ahora se puede introducir el fluido...", - "create.ponder.portable_fluid_interface.text_7": "...o extraerlo del artilugio", - "create.ponder.portable_fluid_interface.text_8": "Cuando no se intercambien contenidos durante un tiempo, el artilugio seguirá su camino", + "create.ponder.portable_fluid_interface.text_7": "...o extraerlo del artefacto", + "create.ponder.portable_fluid_interface.text_8": "Cuando no se intercambien contenidos durante un tiempo, el artefacto seguirá su camino", "create.ponder.portable_storage_interface.header": "Interfaz de almacenamiento portátil", - "create.ponder.portable_storage_interface.text_1": "Los jugadores no pueden acceder a los inventarios de los artilugios en movimiento.", - "create.ponder.portable_storage_interface.text_2": "Este componente puede interactuar con el almacenamiento sin necesidad de detener el artilugio.", + "create.ponder.portable_storage_interface.text_1": "Los jugadores no pueden acceder a los inventarios de los artefactos en movimiento.", + "create.ponder.portable_storage_interface.text_2": "Este componente puede interactuar con el almacenamiento sin necesidad de detener el artefacto.", "create.ponder.portable_storage_interface.text_3": "Coloca una segunda unidad con un espacio de 1 o 2 bloques entre ellas", "create.ponder.portable_storage_interface.text_4": "Cada vez que pasen por delante del otro, entablarán una conexión", - "create.ponder.portable_storage_interface.text_5": "Mientras esté conectada, la interfaz fija representará TODOS los inventarios del artilugio", + "create.ponder.portable_storage_interface.text_5": "Mientras esté conectada, la interfaz fija representará TODOS los inventarios del artefacto", "create.ponder.portable_storage_interface.text_6": "Ahora pueden insertarse objetos...", "create.ponder.portable_storage_interface.text_7": "...o extraerse", - "create.ponder.portable_storage_interface.text_8": "Cuando no se hayan intercambiado objetos durante un tiempo, el artilugio seguirá su camino", + "create.ponder.portable_storage_interface.text_8": "Cuando no se hayan intercambiado objetos durante un tiempo, el artefacto seguirá su camino", "create.ponder.portable_storage_interface_redstone.header": "Interfaz de almacenamiento portátil controlada por redstone", "create.ponder.portable_storage_interface_redstone.text_1": "La energía de redstone impedirá que las interfaces de almacenamiento portátil se conecten", @@ -2264,24 +2264,24 @@ "create.ponder.powered_toggle_latch.text_3": "...encender y apagar", "create.ponder.powered_toggle_latch.text_4": "Las palancas de cierre motorizadas también se pueden accionar manualmente", - "create.ponder.pulse_extender.header": "UNLOCALIZED: Controlling signals using Pulse Extenders", - "create.ponder.pulse_extender.text_1": "UNLOCALIZED: Pulse Extenders can lengthen a signal passing through", - "create.ponder.pulse_extender.text_2": "UNLOCALIZED: They activate after a short delay...", - "create.ponder.pulse_extender.text_3": "UNLOCALIZED: ...and cool down for the configured duration", - "create.ponder.pulse_extender.text_4": "UNLOCALIZED: Using the mouse wheel, the discharge time can be configured", - "create.ponder.pulse_extender.text_5": "UNLOCALIZED: The configured duration can range up to 30 minutes", + "create.ponder.pulse_extender.header": "Controlar señales usando extensores de pulso", + "create.ponder.pulse_extender.text_1": "Los extensores de pulso pueden alargar una señal", + "create.ponder.pulse_extender.text_2": "Se activan después de un breve retraso...", + "create.ponder.pulse_extender.text_3": "...y tienen un enfriamiento igual a la cantidad configurada", + "create.ponder.pulse_extender.text_4": "Utilizando la rueda del ratón, el enfriamiento se puede configurar", + "create.ponder.pulse_extender.text_5": "La duración configurada puede alcanzar hasta los 30 minutos", "create.ponder.pulse_repeater.header": "Controlar señales mediante repetidores de pulsos", "create.ponder.pulse_repeater.text_1": "Los repetidores de pulsos acortan cualquier señal de redstone a un solo pulso", - "create.ponder.pulse_repeater.text_2": "UNLOCALIZED: Using the mouse wheel, the charge time can be configured", - "create.ponder.pulse_repeater.text_3": "UNLOCALIZED: Configured delays can range up to 30 minutes", + "create.ponder.pulse_repeater.text_2": "Utilizando la rueda del ratón, el tiempo de carga se puede configurar", + "create.ponder.pulse_repeater.text_3": "Los retrasos configurados pueden alcanzar hasta los 30 minutos", "create.ponder.radial_chassis.header": "Fijar bloques mediante chasis radiales", "create.ponder.radial_chassis.text_1": "Los chasis radiales se conectan a bloques de chasis idénticos en una fila", - "create.ponder.radial_chassis.text_2": "Cuando uno es movido por un artilugio, los otros son arrastrados con él", + "create.ponder.radial_chassis.text_2": "Cuando uno es movido por un artefacto, los otros son arrastrados con él", "create.ponder.radial_chassis.text_3": "Las caras laterales de un chasis radial pueden hacerse adhesivas", "create.ponder.radial_chassis.text_4": "Haga clic de nuevo para que todos los demás lados sean pegajosos", - "create.ponder.radial_chassis.text_5": "Mayús izdo + clic derecho con la mano vacía para eliminar el pegamento", + "create.ponder.radial_chassis.text_5": "Mayús izdo. + clic derecho con la mano vacía para eliminar el pegamento", "create.ponder.radial_chassis.text_6": "Cada vez que un bloque está junto a una cara pegajosa...", "create.ponder.radial_chassis.text_7": "...adjuntará todos los bloques alcanzables dentro de un radio en esa capa", "create.ponder.radial_chassis.text_8": "Con una llave inglesa y usando la rueda de desplazamiento del ratón se puede especificar un radio preciso", @@ -2289,11 +2289,11 @@ "create.ponder.redstone_contact.header": "Contactos de redstone", "create.ponder.redstone_contact.text_1": "Los contactos de redstone enfrentados emitirán una señal de redstone", - "create.ponder.redstone_contact.text_2": "Esto sigue siendo válido cuando uno de ellos forma parte de un artilugio en movimiento", + "create.ponder.redstone_contact.text_2": "Esto sigue siendo válido cuando uno de ellos forma parte de un artefacto en movimiento", "create.ponder.redstone_link.header": "Usar los enlaces de redstone", "create.ponder.redstone_link.text_1": "Los enlaces de redstone pueden transmitir señales redstone de forma inalámbrica", - "create.ponder.redstone_link.text_2": "Mayús izdo + clic derecho para cambiar el modo de recepción", + "create.ponder.redstone_link.text_2": "Mayús izdo. + clic derecho para cambiar el modo de recepción", "create.ponder.redstone_link.text_3": "Un simple clic derecho con una llave inglesa puede hacer lo mismo", "create.ponder.redstone_link.text_4": "Los receptores emiten la potencia de redstone de los transmisores en 128 bloques", "create.ponder.redstone_link.text_5": "Colocando objetos en las dos ranuras puede especificar una frecuencia", @@ -2303,8 +2303,8 @@ "create.ponder.rope_pulley.text_1": "Las poleas de cuerda pueden mover los bloques verticalmente cuando se les aplica una fuerza rotacional", "create.ponder.rope_pulley.text_2": "La dirección y la velocidad del movimiento dependen de la fuerza rotacional suministrada", - "create.ponder.rope_pulley_attachment.header": "Mover poleas como parte de un artilugio", - "create.ponder.rope_pulley_attachment.text_1": "Siempre que las poleas de cuerda sean movidas por un artilugio...", + "create.ponder.rope_pulley_attachment.header": "Mover poleas como parte de un artefacto", + "create.ponder.rope_pulley_attachment.text_1": "Siempre que las poleas de cuerda sean movidas por un artefacto...", "create.ponder.rope_pulley_attachment.text_2": "...su estructura adjunta será arrastrada con ella", "create.ponder.rope_pulley_attachment.text_3": "Tenga en cuenta que las poleas de cuerda sólo se mueven cuando están paradas", @@ -2348,43 +2348,43 @@ "create.ponder.smart_pipe.header": "Controlar el flujo de fluidos mediante tuberías inteligentes", "create.ponder.smart_pipe.text_1": "Las tuberías inteligentes pueden ayudar a controlar los flujos por tipo de fluido", "create.ponder.smart_pipe.text_2": "Cuando se colocan directamente en la fuente, pueden especificar el tipo de fluido a extraer", - "create.ponder.smart_pipe.text_3": "Simplemente haga clic derecho en su ranura de filtro con cualquier elemento que contenga el fluido deseado", + "create.ponder.smart_pipe.text_3": "Simplemente haga clic derecho en su ranura de filtro con cualquier objeto que contenga el fluido deseado", "create.ponder.smart_pipe.text_4": "Cuando se colocan detrás de una red de tuberías, las tuberías inteligentes sólo dejan que los fluidos coincidentes continúen", "create.ponder.speedometer.header": "Controlar la información cinética mediante el velocímetro", "create.ponder.speedometer.text_1": "El velocímetro muestra la velocidad actual de los componentes conectados", - "create.ponder.speedometer.text_2": "Cuando se usan las gafas del constructor, el jugador puede obtener información más detallada del medidor", + "create.ponder.speedometer.text_2": "Cuando se usan las gafas del ingeniero, el jugador puede obtener información más detallada del medidor", "create.ponder.speedometer.text_3": "Los comparadores pueden emitir señales analógicas de redstone en relación con las mediciones del velocímetro", "create.ponder.spout_filling.header": "Llenar objetos con un surtidor", - "create.ponder.spout_filling.text_1": "El surtidor puede llenar los elementos de retención de fluidos que se encuentran debajo de él", + "create.ponder.spout_filling.text_1": "El surtidor puede llenar los objetos capaces de retener fluidos que se encuentren debajo de él", "create.ponder.spout_filling.text_2": "No se puede acceder manualmente al contenido de un surtidor", "create.ponder.spout_filling.text_3": "En su lugar, se pueden utilizar tuberías para suministrarle fluidos", "create.ponder.spout_filling.text_4": "Los objetos de entrada pueden colocarse en un depósito bajo el surtidor", - "create.ponder.spout_filling.text_5": "Cuando los artículos se proporcionan en una cinta...", + "create.ponder.spout_filling.text_5": "Cuando los objetos se proporcionan en una cinta...", "create.ponder.spout_filling.text_6": "El surtidor los retendrá y procesará automáticamente", - "create.ponder.stabilized_bearings.header": "Estabilizar artilugios", + "create.ponder.stabilized_bearings.header": "Estabilizar artefactos estacionarios", "create.ponder.stabilized_bearings.text_1": "Siempre que los rodamientos mecánicos formen parte de una estructura móvil...", "create.ponder.stabilized_bearings.text_2": "...intentarán mantenerse derechos", "create.ponder.stabilized_bearings.text_3": "Una vez más, el rodamiento se unirá al bloque de enfrente", - "create.ponder.stabilized_bearings.text_4": "Como resultado, todo el sub-artilugio se mantendrá en posición vertical", + "create.ponder.stabilized_bearings.text_4": "Como resultado, todo el sub-artefacto se mantendrá en posición vertical", - "create.ponder.sticker.header": "Fijar bloques con stickers", - "create.ponder.sticker.text_1": "Los stickers son ideales para la fijación de bloques controlados por redstone", - "create.ponder.sticker.text_2": "Al recibir una señal, cambiarán su estado", - "create.ponder.sticker.text_3": "Si ahora se mueve en un artilugio, el bloque se moverá con él", + "create.ponder.sticker.header": "Fijar bloques con pegatinas", + "create.ponder.sticker.text_1": "Las pegatinas son ideales para la fijación controlada por redstone de bloques", + "create.ponder.sticker.text_2": "Al recibir una señal, cambiará su estado", + "create.ponder.sticker.text_3": "Si ahora se mueve en un artefacto animado, el bloque se moverá con él", "create.ponder.sticker.text_4": "Si se vuelve a activar, el bloque dejará de estar fijado", "create.ponder.stressometer.header": "Supervisar la información cinética con el estresómetro", "create.ponder.stressometer.text_1": "El estresómetro muestra la capacidad de estrés actual de la red cinética conectada", - "create.ponder.stressometer.text_2": "Cuando se usan las gafas del constructor, el jugador puede obtener información más detallada del medidor", + "create.ponder.stressometer.text_2": "Cuando se usan las gafas del ingeniero, el jugador puede obtener información más detallada del medidor", "create.ponder.stressometer.text_3": "Los comparadores pueden emitir señales analógicas de redstone en relación con las mediciones del estresómetro", "create.ponder.super_glue.header": "Fijar bloques con pegamento", "create.ponder.super_glue.text_1": "Se puede utilizar pegamento entre dos bloques cualquiera", - "create.ponder.super_glue.text_2": "Los bloques fijados se moverán juntos cuando se ensamblen en un artilugio", - "create.ponder.super_glue.text_3": "Cada vez que el pegamento es sostenido en la mano...", + "create.ponder.super_glue.text_2": "Los bloques fijados se moverán juntos cuando se ensamblen en un artefacto", + "create.ponder.super_glue.text_3": "Cada vez que el pegamento es sostenido en la mano secundaria...", "create.ponder.super_glue.text_4": "...los bloques añadidos se pegarán a la cara en la que fueron colocados automáticamente", "create.ponder.super_glue.text_5": "El pegamento se puede quitar con un clic izquierdo", @@ -2392,14 +2392,14 @@ "create.ponder.valve_handle.text_1": "Los jugadores pueden utilizar las asas de válvulas para aplicar fuerza rotacional manualmente", "create.ponder.valve_handle.text_2": "Mantén pulsado el clic derecho para rotar en sentido contrario a las agujas del reloj", "create.ponder.valve_handle.text_3": "Su velocidad de transmisión es lenta y precisa", - "create.ponder.valve_handle.text_4": "Mayús izdo + clic derecho para rotar en el sentido de las agujas del reloj", + "create.ponder.valve_handle.text_4": "Mayús izdo. + clic derecho para rotar en el sentido de las agujas del reloj", "create.ponder.valve_handle.text_5": "Las asas de las válvulas pueden teñirse con fines estéticos", "create.ponder.valve_pipe.header": "Controlar el flujo de fluidos mediante válvulas", "create.ponder.valve_pipe.text_1": "Las tuberías con válvulas ayudan a controlar los fluidos que se propagan por las redes de tuberías", - "create.ponder.valve_pipe.text_2": "Su entrada en el eje controla si el fluido puede pasar por", - "create.ponder.valve_pipe.text_3": "Dada la fuerza de rotación en la dirección de apertura, la válvula se abrirá", - "create.ponder.valve_pipe.text_4": "Se puede volver a cerrar invirtiendo el giro de entrada", + "create.ponder.valve_pipe.text_2": "La entrada con eje controla si el fluido puede pasar", + "create.ponder.valve_pipe.text_3": "Dada una fuerza de rotación en la dirección de apertura, la válvula se abrirá", + "create.ponder.valve_pipe.text_4": "Se puede volver a cerrar invirtiendo el sentido del eje", "create.ponder.water_wheel.header": "Generar fuerza rotacional mediante ruedas hidráulicas", "create.ponder.water_wheel.text_1": "Las ruedas hidráulicas extraen la fuerza de las corrientes de agua adyacentes", @@ -2408,14 +2408,14 @@ "create.ponder.water_wheel.text_4": "Orientadas hacia el lado contrario, no serán tan eficaces", "create.ponder.weighted_ejector.header": "Usar eyectores de peso", - "create.ponder.weighted_ejector.text_1": "Mayús izdo + clic derecho sosteniendo un eyector de peso para seleccionar la ubicación de destino", + "create.ponder.weighted_ejector.text_1": "Mayús izdo. + clic derecho sosteniendo un eyector de peso para seleccionar la ubicación de destino", "create.ponder.weighted_ejector.text_10": "Ahora estára limitado a este tamaño de pila, y sólo se activara cuando su pila retenida alcance esta cantidad", "create.ponder.weighted_ejector.text_11": "Otras entidades activarán el eyector al pisarlos", "create.ponder.weighted_ejector.text_2": "El eyector colocado lanzará ahora los objetos al lugar marcado", "create.ponder.weighted_ejector.text_3": "Un objetivo válido puede estar a cualquier altura o distancia dentro del alcance", "create.ponder.weighted_ejector.text_4": "Sin embargo, no pueden estar a un costado", "create.ponder.weighted_ejector.text_5": "Si no se ha seleccionado ningún objetivo válido, simplemente se dirigirá al bloque que se encuentra justo delante", - "create.ponder.weighted_ejector.text_6": "Suministrale fuerza rotacional para cargarlo", + "create.ponder.weighted_ejector.text_6": "Suminístralo fuerza rotacional para cargarlo", "create.ponder.weighted_ejector.text_7": "Los objetos colocados en el eyector hacen que se dispare", "create.ponder.weighted_ejector.text_8": "Si se dirigen a un inventario, el eyector esperará hasta que haya espacio", "create.ponder.weighted_ejector.text_9": "Con la llave inglesa se puede configurar el tamaño de pila requerido", @@ -2431,17 +2431,17 @@ "create.ponder.weighted_ejector_tunnel.text_4": "Mientras una nueva pila del tamaño configurado se expulse por la salida lateral...", "create.ponder.weighted_ejector_tunnel.text_5": "...el resto seguirá su camino", - "create.ponder.windmill_source.header": "Generar fuerza rotacional mediante rodamientos del molino de viento", + "create.ponder.windmill_source.header": "Generar fuerza rotacional mediante rodamientos de molino de viento", "create.ponder.windmill_source.text_1": "Los rodamientos del molino de viento se fijan al bloque que tienen delante", - "create.ponder.windmill_source.text_2": "Si se unen suficientes bloques tipo vela al bloque, éste puede actuar como un molino de viento", - "create.ponder.windmill_source.text_3": "Activado con un clic derecho, el rodamiento del molino de viento comenzará a proporcionar fuerza rotacional", - "create.ponder.windmill_source.text_4": "La cantidad de bloques de vela determina su velocidad de rotación", + "create.ponder.windmill_source.text_2": "Si se unen suficientes velas al bloque, éste puede actuar como un molino de viento", + "create.ponder.windmill_source.text_3": "Activado con un clic derecho, el rodamiento de molino de viento comenzará a proporcionar fuerza rotacional", + "create.ponder.windmill_source.text_4": "La cantidad de velas determina su velocidad de rotación", "create.ponder.windmill_source.text_5": "Utiliza una llave inglesa para configurar su sentido de rotación", - "create.ponder.windmill_source.text_6": "Haga clic derecho sobre el rodamiento del molino en cualquier momento para detener y editar la estructura de nuevo", + "create.ponder.windmill_source.text_6": "Haga clic derecho sobre el rodamiento de molino de viento en cualquier momento para detener y editar la estructura de nuevo", - "create.ponder.windmill_structure.header": "Artilugios para molinos de viento", - "create.ponder.windmill_structure.text_1": "Cualquier estructura puede contar como un molino de viento válido, siempre que contenga al menos 8 bloques tipo vela.", + "create.ponder.windmill_structure.header": "Artefactos estacionarios de molinos de viento", + "create.ponder.windmill_structure.text_1": "Cualquier estructura puede contar como un molino de viento válido, siempre que contenga al menos 8 velas.", - "_": "Thank you for translating Create!" + "_": "¡Gracias por traducir Create!" } \ No newline at end of file diff --git a/src/main/resources/assets/create/lang/es_es.json b/src/main/resources/assets/create/lang/es_es.json index 9e31d83ed..0c1b8ebd9 100644 --- a/src/main/resources/assets/create/lang/es_es.json +++ b/src/main/resources/assets/create/lang/es_es.json @@ -1,28 +1,22 @@ { + "_": "Missing Localizations: 330", "_": "->------------------------] Game Elements [------------------------<-", "block.create.acacia_window": "Ventana de acacia", "block.create.acacia_window_pane": "Panel de ventana de acacia", "block.create.adjustable_chain_gearshift": "Cadena de transmisión ajustable", - "block.create.adjustable_crate": "Caja ajustable", - "block.create.adjustable_pulse_repeater": "Repetidor de pulso ajustable", - "block.create.adjustable_repeater": "Repetidor ajustable", "block.create.analog_lever": "Palanca analógica", - "block.create.andesite_belt_funnel": "Embudo de cinta de andesita", - "block.create.andesite_bricks": "Ladrillos de andesita", - "block.create.andesite_bricks_slab": "Losa de ladrillos de andesita", - "block.create.andesite_bricks_stairs": "Escaleras de ladrillos de andesita", - "block.create.andesite_bricks_wall": "Muro de ladrillos de andesita", + "block.create.andesite_belt_funnel": "Embudo lateral de andesita", "block.create.andesite_casing": "Revestidor de andesita", - "block.create.andesite_cobblestone": "Adoquín de andesita", - "block.create.andesite_cobblestone_slab": "Losa de adoquín de andesita", - "block.create.andesite_cobblestone_stairs": "Escaleras de adoquines de andesita", - "block.create.andesite_cobblestone_wall": "Muro de adoquines de andesita", + "block.create.andesite_encased_cogwheel": "Engranaje revestido de andesita", + "block.create.andesite_encased_large_cogwheel": "Engranaje grande revestido de andesita", "block.create.andesite_encased_shaft": "Eje revestido de andesita", "block.create.andesite_funnel": "Embudo de andesita", - "block.create.andesite_pillar": "Poste de andesita", + "block.create.andesite_pillar": "Pilar de andesita", "block.create.andesite_tunnel": "Túnel de Andesita", + "block.create.asurine": "Azurina", + "block.create.asurine_pillar": "Pilar de azurina", "block.create.basin": "Cuenca", "block.create.belt": "Cinta", "block.create.birch_window": "Ventana de abedul", @@ -38,9 +32,11 @@ "block.create.blue_seat": "Asiento azul", "block.create.blue_toolbox": "Caja de herramientas azul", "block.create.blue_valve_handle": "Asa de válvula azul", - "block.create.brass_belt_funnel": "Embudo de cinta de latón", + "block.create.brass_belt_funnel": "Embudo lateral de latón", "block.create.brass_block": "Bloque de latón", "block.create.brass_casing": "Revestidor de latón", + "block.create.brass_encased_cogwheel": "Engranaje revestido de latón", + "block.create.brass_encased_large_cogwheel": "Engranaje grande revestido de latón", "block.create.brass_encased_shaft": "Eje revestido de latón", "block.create.brass_funnel": "Embudo de latón", "block.create.brass_tunnel": "Túnel de latón", @@ -49,35 +45,146 @@ "block.create.brown_seat": "Asiento marrón", "block.create.brown_toolbox": "Caja de herramientas marrón", "block.create.brown_valve_handle": "Asa de válvula marrón", + "block.create.calcite_pillar": "Pilar de calcita", "block.create.cart_assembler": "Ensamblador de vagonetas", - "block.create.chiseled_dark_scoria": "Escoria oscura cincelada", - "block.create.chiseled_dolomite": "Dolomita cincelada", - "block.create.chiseled_gabbro": "Gabro cincelado", - "block.create.chiseled_limestone": "Caliza cincelada", - "block.create.chiseled_scoria": "Escoria cincelada", - "block.create.chiseled_weathered_limestone": "Piedra caliza erosionada cincelada", "block.create.chocolate": "Chocolate", "block.create.chute": "Ducto", "block.create.clockwork_bearing": "Rodamiento tipo reloj", "block.create.clutch": "Embrague", - "block.create.cogwheel": "Engranaje pequeño", + "block.create.cogwheel": "Engranaje", "block.create.content_observer": "Observador de contenidos", "block.create.controller_rail": "Raíl de control", "block.create.copper_backtank": "Depósito trasero de cobre", - "block.create.copper_block": "Bloque de cobre", "block.create.copper_casing": "Revestidor de caliza", - "block.create.copper_ore": "Mena de cobre", + "block.create.copper_shingle_slab": "Losa de tejas de cobre", + "block.create.copper_shingle_stairs": "Escaleras de tejas de cobre", "block.create.copper_shingles": "Bloque de tejas de cobre", + "block.create.copper_tile_slab": "Losa de baldosas de cobre", + "block.create.copper_tile_stairs": "Escaleras de baldosas de cobre", "block.create.copper_tiles": "Bloque de baldosas de cobre", "block.create.copper_valve_handle": "Asa de válvula de cobre", "block.create.creative_crate": "Caja creativa", "block.create.creative_fluid_tank": "Tanque de fluidos creativo", "block.create.creative_motor": "Motor creativo", + "block.create.crimsite": "Carmesina", + "block.create.crimsite_pillar": "Pilar de carmesina", "block.create.crimson_window": "Ventana carmesí", "block.create.crimson_window_pane": "Panel de ventana carmesí", "block.create.crushing_wheel": "Rueda trituradora", "block.create.crushing_wheel_controller": "Controlador de Rueda trituradora", "block.create.cuckoo_clock": "Reloj de cuco", + "block.create.cut_andesite": "Andesita cortada", + "block.create.cut_andesite_brick_slab": "Losa de ladrillos de andesita cortada", + "block.create.cut_andesite_brick_stairs": "Escaleras de ladrillos de andesita cortada", + "block.create.cut_andesite_brick_wall": "Muro de ladrillos de andesita cortada", + "block.create.cut_andesite_bricks": "Ladrillos de andesita cortada", + "block.create.cut_andesite_slab": "Losa de andesita cortada", + "block.create.cut_andesite_stairs": "Escaleras de andesite cortada", + "block.create.cut_andesite_wall": "Muro de andesita cortada", + "block.create.cut_asurine": "Azurina cortada", + "block.create.cut_asurine_brick_slab": "Losa de ladrillos de azurina cortada", + "block.create.cut_asurine_brick_stairs": "Escaleras de ladrillos de azurina cortada", + "block.create.cut_asurine_brick_wall": "Muro de ladrillos de azurina cortada", + "block.create.cut_asurine_bricks": "Ladrillos de azurina cortada", + "block.create.cut_asurine_slab": "Losa de azurina cortada", + "block.create.cut_asurine_stairs": "Escaleras de azurina cortada", + "block.create.cut_asurine_wall": "Muro de azurina cortada", + "block.create.cut_calcite": "Calcita cortada", + "block.create.cut_calcite_brick_slab": "Losa de ladrillos de calcita cortada", + "block.create.cut_calcite_brick_stairs": "Escaleras de ladrillos de calcita cortada", + "block.create.cut_calcite_brick_wall": "Muro de ladrillos de calcita cortada", + "block.create.cut_calcite_bricks": "Ladrillos de calcita cortada", + "block.create.cut_calcite_slab": "Losa de calcita cortada", + "block.create.cut_calcite_stairs": "Escaleras de calcita cortada", + "block.create.cut_calcite_wall": "Muro de calcita cortada", + "block.create.cut_crimsite": "Carmesina cortada", + "block.create.cut_crimsite_brick_slab": "Losa de ladrillos de carmesina cortada", + "block.create.cut_crimsite_brick_stairs": "Escaleras de ladrillos de carmesina cortada", + "block.create.cut_crimsite_brick_wall": "Muro de ladrillos de carmesina cortada", + "block.create.cut_crimsite_bricks": "Ladrillos de carmesina cortada", + "block.create.cut_crimsite_slab": "Losa de carmesina cortada", + "block.create.cut_crimsite_stairs": "Escaleras de carmesina cortada", + "block.create.cut_crimsite_wall": "Muro de carmesina cortada", + "block.create.cut_deepslate": "Pizarra profunda cortada", + "block.create.cut_deepslate_brick_slab": "Losa de ladrillos de pizarra profunda cortada", + "block.create.cut_deepslate_brick_stairs": "Escaleras de ladrillos de pizarra profunda cortada", + "block.create.cut_deepslate_brick_wall": "Muro de ladrillos de pizarra profunda cortada", + "block.create.cut_deepslate_bricks": "Ladrillos de pizarra profunda cortada", + "block.create.cut_deepslate_slab": "Losa de pizarra profunda cortada", + "block.create.cut_deepslate_stairs": "Escaleras de pizarra profunda cortada", + "block.create.cut_deepslate_wall": "Muro de pizarra profunda cortada", + "block.create.cut_diorite": "Diorita cortada", + "block.create.cut_diorite_brick_slab": "Losa de ladrillos de diorita cortada", + "block.create.cut_diorite_brick_stairs": "Escaleras de ladrillos de diorita cortada", + "block.create.cut_diorite_brick_wall": "Muro de ladrillos de diorita cortada", + "block.create.cut_diorite_bricks": "Ladrillos de diorita cortada", + "block.create.cut_diorite_slab": "Losa de diorita cortada", + "block.create.cut_diorite_stairs": "Escaleras de diorita cortada", + "block.create.cut_diorite_wall": "Muro de diorita cortada", + "block.create.cut_dripstone": "Bloque de espeleotema cortado", + "block.create.cut_dripstone_brick_slab": "Losa de ladrillos de espeleotema cortado", + "block.create.cut_dripstone_brick_stairs": "Escaleras de ladrillos de espeleotema cortado", + "block.create.cut_dripstone_brick_wall": "Muro de ladrillos de espeleotema cortado", + "block.create.cut_dripstone_bricks": "Ladrillos de espeleotema cortado", + "block.create.cut_dripstone_slab": "Losa de espeleotema cortado", + "block.create.cut_dripstone_stairs": "Escaleras de espeleotema cortado", + "block.create.cut_dripstone_wall": "Muro de espeleotema cortado", + "block.create.cut_granite": "Granito cortado", + "block.create.cut_granite_brick_slab": "Losa de ladrillos de granito cortado", + "block.create.cut_granite_brick_stairs": "Escaleras de ladrillos de granito cortado", + "block.create.cut_granite_brick_wall": "Muro de ladrillos de granito cortado", + "block.create.cut_granite_bricks": "Ladrillos de granito cortado", + "block.create.cut_granite_slab": "Losa de granito cortado", + "block.create.cut_granite_stairs": "Escaleras de granito cortado", + "block.create.cut_granite_wall": "Muro de granito cortado", + "block.create.cut_limestone": "Piedra caliza cortada", + "block.create.cut_limestone_brick_slab": "Losa de ladrillos de piedra caliza cortada", + "block.create.cut_limestone_brick_stairs": "Escaleras de ladrillos de piedra caliza cortada", + "block.create.cut_limestone_brick_wall": "Muro de ladrillos de piedra caliza cortada", + "block.create.cut_limestone_bricks": "Ladrillos de piedra caliza cortada", + "block.create.cut_limestone_slab": "Losa de piedra caliza cortada", + "block.create.cut_limestone_stairs": "Escaleras de piedra caliza cortada", + "block.create.cut_limestone_wall": "Muro de piedra caliza cortada", + "block.create.cut_ochrum": "Ocre cortado", + "block.create.cut_ochrum_brick_slab": "Losa de ladrillos de ocre cortado", + "block.create.cut_ochrum_brick_stairs": "Escaleras de ladrillos de ocre cortado", + "block.create.cut_ochrum_brick_wall": "Muro de ladrillos de ocre cortado", + "block.create.cut_ochrum_bricks": "Ladrillos de ocre cortado", + "block.create.cut_ochrum_slab": "Losa de ocre cortado", + "block.create.cut_ochrum_stairs": "Escaleras de ocre cortado", + "block.create.cut_ochrum_wall": "Muro de ocre cortado", + "block.create.cut_scorchia": "Escoria oscura cortada", + "block.create.cut_scorchia_brick_slab": "Losa de ladrillos de escoria oscura cortada", + "block.create.cut_scorchia_brick_stairs": "Escaleras de ladrillos de escoria oscura cortada", + "block.create.cut_scorchia_brick_wall": "Muro de ladrillos de escoria oscura cortada", + "block.create.cut_scorchia_bricks": "Ladrillos de escoria oscura cortada", + "block.create.cut_scorchia_slab": "Losa de escoria oscura cortada", + "block.create.cut_scorchia_stairs": "Escaleras de escoria oscura cortada", + "block.create.cut_scorchia_wall": "Muro de escoria oscura cortada", + "block.create.cut_scoria": "Escoria cortada", + "block.create.cut_scoria_brick_slab": "Losa de ladrillos de escoria cortada", + "block.create.cut_scoria_brick_stairs": "Escaleras de ladrillos de escoria cortada", + "block.create.cut_scoria_brick_wall": "Muro de ladrillos de escoria cortada", + "block.create.cut_scoria_bricks": "Ladrillos de escoria cortada", + "block.create.cut_scoria_slab": "Losa de escoria cortada", + "block.create.cut_scoria_stairs": "Escaleras de escoria cortada", + "block.create.cut_scoria_wall": "Muro de escoria cortada", + "block.create.cut_tuff": "Toba cortada", + "block.create.cut_tuff_brick_slab": "Losa de ladrillos de toba cortada", + "block.create.cut_tuff_brick_stairs": "Escaleras de ladrillos de toba cortada", + "block.create.cut_tuff_brick_wall": "Muro de ladrillos de toba cortada", + "block.create.cut_tuff_bricks": "Ladrillos de toba cortada", + "block.create.cut_tuff_slab": "Losa de toba cortada", + "block.create.cut_tuff_stairs": "Escaleras de toba cortada", + "block.create.cut_tuff_wall": "Muro de toba cortada", + "block.create.cut_veridium": "Veridio cortado", + "block.create.cut_veridium_brick_slab": "Losa de ladrillos de veridio cortado", + "block.create.cut_veridium_brick_stairs": "Escaleras de ladrillos de veridio cortado", + "block.create.cut_veridium_brick_wall": "Muro de ladrillos de veridio cortado", + "block.create.cut_veridium_bricks": "Ladrillos de veridio cortado", + "block.create.cut_veridium_slab": "Losa de veridio cortado", + "block.create.cut_veridium_stairs": "Escaleras de veridio cortado", + "block.create.cut_veridium_wall": "Muro de veridio cortado", "block.create.cyan_nixie_tube": "Tubo Nixie cian", "block.create.cyan_sail": "Vela cian", "block.create.cyan_seat": "Asiento cian", @@ -85,76 +192,21 @@ "block.create.cyan_valve_handle": "Asa de válvula cian", "block.create.dark_oak_window": "Ventana de roble oscuro", "block.create.dark_oak_window_pane": "Panel de ventana de roble oscuro", - "block.create.dark_scoria": "Escoria oscura", - "block.create.dark_scoria_bricks": "Ladrillos de escoria oscura", - "block.create.dark_scoria_bricks_slab": "Losa de ladrillos de escoria oscura", - "block.create.dark_scoria_bricks_stairs": "Escaleras de ladrillos de escoria oscura", - "block.create.dark_scoria_bricks_wall": "Muro de ladrillos de escoria oscura", - "block.create.dark_scoria_cobblestone": "Adoquines de escoria oscura", - "block.create.dark_scoria_cobblestone_slab": "Losa de adoquines de escoria oscura", - "block.create.dark_scoria_cobblestone_stairs": "Escaleras de adoquines de escoria oscura", - "block.create.dark_scoria_cobblestone_wall": "Muro de adoquines de escoria oscura", - "block.create.dark_scoria_pillar": "Pilar de escoria oscura", + "block.create.deepslate_pillar": "Pilar de pizarra profunda", + "block.create.deepslate_zinc_ore": "Mena de cinc de pizarra profunda", "block.create.deployer": "Desplegador", "block.create.depot": "Depósito", - "block.create.diorite_bricks": "Ladrillos de diorita", - "block.create.diorite_bricks_slab": "Losa de ladrillos de diorita", - "block.create.diorite_bricks_stairs": "Escaleras de ladrillos de diorita", - "block.create.diorite_bricks_wall": "Muro de ladrillos de diorita", - "block.create.diorite_cobblestone": "Adoquín de diorita", - "block.create.diorite_cobblestone_slab": "Losa de adoquínes de diorita", - "block.create.diorite_cobblestone_stairs": "Escaleras de adoquines de diorita", - "block.create.diorite_cobblestone_wall": "Muro de adoquines de diorita", "block.create.diorite_pillar": "Pilar de diorita", - "block.create.dolomite": "Dolomita", - "block.create.dolomite_bricks": "Ladrillos de dolomita", - "block.create.dolomite_bricks_slab": "Losa de ladrillos de dolomita", - "block.create.dolomite_bricks_stairs": "Escaleras de ladrillos de dolomita", - "block.create.dolomite_bricks_wall": "Muro de ladrillos de dolomita", - "block.create.dolomite_cobblestone": "Adoquín de dolomita", - "block.create.dolomite_cobblestone_slab": "Losa de adoquín de dolomita", - "block.create.dolomite_cobblestone_stairs": "Escaleras de adoquines de dolomita", - "block.create.dolomite_cobblestone_wall": "Muro de adoquines de dolomita", - "block.create.dolomite_pillar": "Pilar de dolomita", + "block.create.dripstone_pillar": "Pilar de espeleotema", "block.create.encased_chain_drive": "Cadena de transmisión revestida", "block.create.encased_fan": "Ventilador revestido", "block.create.encased_fluid_pipe": "Tubería de fluidos de cobre reforzada", - "block.create.fancy_andesite_bricks": "Ladrillos de andesita elegantes", - "block.create.fancy_andesite_bricks_slab": "Ladrillos de andesita elegantes", - "block.create.fancy_andesite_bricks_stairs": "Escaleras de ladrillos de andesita elegantes", - "block.create.fancy_andesite_bricks_wall": "Muro de ladrillos de andesita elegantes", - "block.create.fancy_dark_scoria_bricks": "Ladrillos de escoria oscura elegantes", - "block.create.fancy_dark_scoria_bricks_slab": "Losa de ladrillos de escoria oscura elegantes", - "block.create.fancy_dark_scoria_bricks_stairs": "Escalera de ladrillos de escoria oscura elegantes", - "block.create.fancy_dark_scoria_bricks_wall": "Muro de ladrillos de escoria oscura elegantes", - "block.create.fancy_diorite_bricks": "Ladrillos de diorita elegantes", - "block.create.fancy_diorite_bricks_slab": "Losa de ladrillos de diorita elegantes", - "block.create.fancy_diorite_bricks_stairs": "Escaleras de ladrillos de diorita elegantes", - "block.create.fancy_diorite_bricks_wall": "Muro de ladrillos de diorita elegantes", - "block.create.fancy_dolomite_bricks": "Ladrillos de dolomita elegantes", - "block.create.fancy_dolomite_bricks_slab": "Losa de ladrillos de dolomita elegantes", - "block.create.fancy_dolomite_bricks_stairs": "Escaleras de ladrillos de dolomita elegantes", - "block.create.fancy_dolomite_bricks_wall": "Muro de ladrillos de dolomita elegantes", - "block.create.fancy_gabbro_bricks": "Ladrillos de gabro elegantes", - "block.create.fancy_gabbro_bricks_slab": "Losa de ladrillos de gabro elegantes", - "block.create.fancy_gabbro_bricks_stairs": "Escaleras de ladrillos de gabro elegantes", - "block.create.fancy_gabbro_bricks_wall": "Muro de ladrillos de gabro elegantes", - "block.create.fancy_granite_bricks": "Ladrillos de granito elegantes", - "block.create.fancy_granite_bricks_slab": "Losa de ladrillos de granito elegantes", - "block.create.fancy_granite_bricks_stairs": "Escaleras de ladrillos de granito elegantes", - "block.create.fancy_granite_bricks_wall": "Muro de ladrillos de granito elegantes", - "block.create.fancy_limestone_bricks": "Ladrillos de piedra caliza elegantes", - "block.create.fancy_limestone_bricks_slab": "Losa de ladrillos de piedra caliza elegantes", - "block.create.fancy_limestone_bricks_stairs": "Escaleras de ladrillos de piedra caliza elegantes", - "block.create.fancy_limestone_bricks_wall": "Muro de ladrillos de piedra caliza elegantes", - "block.create.fancy_scoria_bricks": "Ladrillos de escoria elegantes", - "block.create.fancy_scoria_bricks_slab": "Losa de ladrillos de escoria elegantes", - "block.create.fancy_scoria_bricks_stairs": "Escaleras de ladrillos de escoria elegantes", - "block.create.fancy_scoria_bricks_wall": "Muro de ladrillos de escoria elegantes", - "block.create.fancy_weathered_limestone_bricks": "Ladrillos de piedra de caliza erosionada elegantes", - "block.create.fancy_weathered_limestone_bricks_slab": "Losa de ladrillos de caliza erosionada elegantes", - "block.create.fancy_weathered_limestone_bricks_stairs": "Escaleras de ladrillos de caliza erosionada elegantes", - "block.create.fancy_weathered_limestone_bricks_wall": "Muro de ladrillos de caliza erosionada elegantes", + "block.create.exposed_copper_shingle_slab": "Losa de tejas de cobre expuesto", + "block.create.exposed_copper_shingle_stairs": "Escaleras de tejas de cobre expuesto", + "block.create.exposed_copper_shingles": "Bloque de tejas de cobre expuesto", + "block.create.exposed_copper_tile_slab": "Losa de baldosas de cobre expuesto", + "block.create.exposed_copper_tile_stairs": "Escaleras de baldosas de cobre expuesto", + "block.create.exposed_copper_tiles": "Blooque de baldosas de cobre expuesto", "block.create.fluid_pipe": "Tubería de fluidos de cobre", "block.create.fluid_tank": "Depósito de fluidos", "block.create.fluid_valve": "Válvula de fluidos", @@ -162,29 +214,11 @@ "block.create.framed_glass": "Cristal enmarcado", "block.create.framed_glass_pane": "Panel de cristal enmarcado", "block.create.furnace_engine": "Motor de horno", - "block.create.gabbro": "Gabro", - "block.create.gabbro_bricks": "Ladrillos de gabro", - "block.create.gabbro_bricks_slab": "Losa de ladrillos de gabro", - "block.create.gabbro_bricks_stairs": "Escaleras de ladrillos de gabro", - "block.create.gabbro_bricks_wall": "Muro de ladrillos de gabro", - "block.create.gabbro_cobblestone": "Adoquín de gabro", - "block.create.gabbro_cobblestone_slab": "Losa de adoquínes de gabro", - "block.create.gabbro_cobblestone_stairs": "Escaleras de adoquínes de gabro", - "block.create.gabbro_cobblestone_wall": "Muro de adoquínes de gabro", - "block.create.gabbro_pillar": "Pilar de gabro", "block.create.gantry_carriage": "Carro de grúa", "block.create.gantry_shaft": "Eje de grúa", "block.create.gearbox": "Caja de transmisión", "block.create.gearshift": "Caja de cambios", "block.create.glass_fluid_pipe": "Tubería de fluidos de cristal", - "block.create.granite_bricks": "Ladrillos de granito", - "block.create.granite_bricks_slab": "Losa de ladrillos de granito", - "block.create.granite_bricks_stairs": "Escaleras de ladrillos de granito", - "block.create.granite_bricks_wall": "Muro de ladrillos de granito", - "block.create.granite_cobblestone": "Adoquín de granito", - "block.create.granite_cobblestone_slab": "Losa de adoquínes de granito", - "block.create.granite_cobblestone_stairs": "Escaleras de adoquínes de granito", - "block.create.granite_cobblestone_wall": "Muro de adoquínes de granito", "block.create.granite_pillar": "Pilar de granito", "block.create.gray_nixie_tube": "Tubo Nixie gris", "block.create.gray_sail": "Vela gris", @@ -197,24 +231,30 @@ "block.create.green_toolbox": "Caja de herramientas verde", "block.create.green_valve_handle": "Asa de válvula verde", "block.create.hand_crank": "Manivela", - "block.create.haunted_bell": "Campana encantada", + "block.create.haunted_bell": "Campana maldita", "block.create.honey": "Miel", "block.create.horizontal_framed_glass": "Cristal con marco horizontal", "block.create.horizontal_framed_glass_pane": "Panel de cristal con marco horizontal", "block.create.hose_pulley": "Polea de manguera", "block.create.item_drain": "Drenador de objetos", + "block.create.item_vault": "Bóveda de objetos", "block.create.jungle_window": "Ventana de jungla", "block.create.jungle_window_pane": "Panel de ventana de jungla", "block.create.large_cogwheel": "Engranaje grande", "block.create.layered_andesite": "Andesita estratificada", - "block.create.layered_dark_scoria": "Escoria oscura estratificada", + "block.create.layered_asurine": "Azurina estratificada", + "block.create.layered_calcite": "Calcita estratificada", + "block.create.layered_crimsite": "Carmesina estratificada", + "block.create.layered_deepslate": "Pizarra profunda estratificada", "block.create.layered_diorite": "Diorita estratificada", - "block.create.layered_dolomite": "Dolomita estratificada", - "block.create.layered_gabbro": "Gabro estratificado", + "block.create.layered_dripstone": "Bloque de espeleotema estratificado", "block.create.layered_granite": "Granito estratificado", "block.create.layered_limestone": "Piedra caliza estratificada", + "block.create.layered_ochrum": "Ocre estratificado", + "block.create.layered_scorchia": "Escoria oscura estratificada", "block.create.layered_scoria": "Escoria estratificada", - "block.create.layered_weathered_limestone": "Caliza erosionada estratificada", + "block.create.layered_tuff": "Toba estratificada", + "block.create.layered_veridium": "Veridio estratificado", "block.create.lectern_controller": "Controlador de atril", "block.create.light_blue_nixie_tube": "Tubo Nixie azul claro", "block.create.light_blue_sail": "Vela azul claro", @@ -231,16 +271,7 @@ "block.create.lime_seat": "Asiento lima", "block.create.lime_toolbox": "Caja de herramientas lima", "block.create.lime_valve_handle": "Asa de válvula lima", - "block.create.limesand": "Arena caliza", "block.create.limestone": "Piedra caliza", - "block.create.limestone_bricks": "Ladrillos de piedra caliza", - "block.create.limestone_bricks_slab": "Losa de ladrillos de piedra caliza", - "block.create.limestone_bricks_stairs": "Escaleras de ladrillos de piedra caliza", - "block.create.limestone_bricks_wall": "Muro de ladrillos de piedra caliza", - "block.create.limestone_cobblestone": "Adoquínes de piedra caliza", - "block.create.limestone_cobblestone_slab": "Losa de adoquines de piedra caliza", - "block.create.limestone_cobblestone_stairs": "Escaleras de adoquines de piedra caliza", - "block.create.limestone_cobblestone_wall": "Muro de adoquines de piedra caliza", "block.create.limestone_pillar": "Pilar de piedra caliza", "block.create.linear_chassis": "Chasis lineal", "block.create.lit_blaze_burner": "Quemador de Blaze encendido", @@ -264,72 +295,25 @@ "block.create.metal_bracket": "Soporte de metal para ejes", "block.create.millstone": "Piedra de molino", "block.create.minecart_anchor": "Ancla de vagonetas", - "block.create.mossy_andesite": "Andesita musgosa", - "block.create.mossy_dark_scoria": "Escoria oscura musgosa", - "block.create.mossy_diorite": "Diorita musgosa", - "block.create.mossy_dolomite": "Dolomita musgosa", - "block.create.mossy_gabbro": "Gabro musgoso", - "block.create.mossy_granite": "Granito musgoso", - "block.create.mossy_limestone": "Caliza musgosa", - "block.create.mossy_scoria": "Escoria musgosa", - "block.create.mossy_weathered_limestone": "Caliza erosionada musgosa", "block.create.mysterious_cuckoo_clock": "Reloj de cuco", - "block.create.natural_scoria": "Escoria natural", "block.create.nixie_tube": "Tubo Nixie", "block.create.nozzle": "Boquilla", "block.create.oak_window": "Ventana de roble", "block.create.oak_window_pane": "Panel de ventana de roble", + "block.create.ochrum": "Ocre", + "block.create.ochrum_pillar": "Pilar de ocre", "block.create.orange_sail": "Vela naranja", "block.create.orange_seat": "Asiento naranja", "block.create.orange_toolbox": "Caja de herramientas naranja", "block.create.orange_valve_handle": "Asa de válvula naranja", "block.create.ornate_iron_window": "Ventana de hierro ornamentada", "block.create.ornate_iron_window_pane": "Panel de ventana de hierro ornamentada", - "block.create.overgrown_andesite": "Andesita sobredimensionada", - "block.create.overgrown_dark_scoria": "Escoria oscura sobredimensionada", - "block.create.overgrown_diorite": "Diorita sobredimensionada", - "block.create.overgrown_dolomite": "Dolomita sobredimensionada", - "block.create.overgrown_gabbro": "Gabro sobredimensionado", - "block.create.overgrown_granite": "Granito sobredimensionado", - "block.create.overgrown_limestone": "Caliza sobredimensionada", - "block.create.overgrown_scoria": "Escoria sobredimensionada", - "block.create.overgrown_weathered_limestone": "Caliza erosionada sobredimensionada", - "block.create.paved_andesite": "Andesita pavimentada", - "block.create.paved_andesite_slab": "Losa de andesita pavimentada", - "block.create.paved_andesite_stairs": "Escaleras de andesita pavimentada", - "block.create.paved_andesite_wall": "Muro de andesita pavimentada", - "block.create.paved_dark_scoria": "Escoria oscura pavimentada", - "block.create.paved_dark_scoria_slab": "Losa de escoria oscura pavimentada", - "block.create.paved_dark_scoria_stairs": "Escaleras de escoria oscura pavimentada", - "block.create.paved_dark_scoria_wall": "Muro de escoria oscura pavimentad", - "block.create.paved_diorite": "Diorita pavimentada", - "block.create.paved_diorite_slab": "Losa de diorita pavimentada", - "block.create.paved_diorite_stairs": "Escaleras de diorita pavimentada", - "block.create.paved_diorite_wall": "Muro de diorita pavimentad", - "block.create.paved_dolomite": "Dolomita pavimentada", - "block.create.paved_dolomite_slab": "Losa de dolomita pavimentada", - "block.create.paved_dolomite_stairs": "Escaleras de dolomita pavimentada", - "block.create.paved_dolomite_wall": "Muro de dolomita pavimentada", - "block.create.paved_gabbro": "Gabro pavimentado", - "block.create.paved_gabbro_slab": "Losa de gabro pavimentado", - "block.create.paved_gabbro_stairs": "Escaleras de gabro pavimentado", - "block.create.paved_gabbro_wall": "Muro de gabro pavimentado", - "block.create.paved_granite": "Granito pavimentado", - "block.create.paved_granite_slab": "Losa de granito pavimentado", - "block.create.paved_granite_stairs": "Escaleras de granito pavimentado", - "block.create.paved_granite_wall": "Muro de granito pavimentado", - "block.create.paved_limestone": "Piedra caliza pavimentada", - "block.create.paved_limestone_slab": "Losa de piedra caliza pavimentada", - "block.create.paved_limestone_stairs": "Escaleras de piedra caliza pavimentada", - "block.create.paved_limestone_wall": "Muro de piedra caliza pavimentada", - "block.create.paved_scoria": "Escoria pavimentada", - "block.create.paved_scoria_slab": "Losa de escoria pavimentada", - "block.create.paved_scoria_stairs": "Escaleras de escoria pavimentada", - "block.create.paved_scoria_wall": "Muro de escoria pavimentada", - "block.create.paved_weathered_limestone": "Piedra caliza erosionada pavimentada", - "block.create.paved_weathered_limestone_slab": "Losa de piedra caliza erosionada pavimentada", - "block.create.paved_weathered_limestone_stairs": "Escaleras de piedra caliza erosionada pavimentada", - "block.create.paved_weathered_limestone_wall": "Muro de piedra caliza erosionada pavimentada", + "block.create.oxidized_copper_shingle_slab": "Losa de tejas de cobre oxidado", + "block.create.oxidized_copper_shingle_stairs": "Escaleras de tejas de cobre oxidado", + "block.create.oxidized_copper_shingles": "Bloque de tejas de cobre oxidado", + "block.create.oxidized_copper_tile_slab": "Losa de baldosas de cobre oxidado", + "block.create.oxidized_copper_tile_stairs": "Escaleras de baldosas de cobre oxidado", + "block.create.oxidized_copper_tiles": "Bloque de baldosas de cobre oxidado", "block.create.peculiar_bell": "Campana peculiar", "block.create.pink_nixie_tube": "Tubo Nixie rosa", "block.create.pink_sail": "Vela rosa", @@ -337,35 +321,68 @@ "block.create.pink_toolbox": "Caja de herramientas rosa", "block.create.pink_valve_handle": "Asa de válvula rosa", "block.create.piston_extension_pole": "Pértiga de extensión de pistón", - "block.create.polished_dark_scoria": "Escoria oscura pulida", - "block.create.polished_dark_scoria_slab": "Losa de escoria oscura pulida", - "block.create.polished_dark_scoria_stairs": "Escaleras de escoria oscura pulida", - "block.create.polished_dark_scoria_wall": "Muro de escoria oscura pulida", - "block.create.polished_dolomite": "Dolomita pulida", - "block.create.polished_dolomite_slab": "Losa de dolomita pulida", - "block.create.polished_dolomite_stairs": "Escaleras de dolomita pulidas", - "block.create.polished_dolomite_wall": "Muro de dolomita pulida", - "block.create.polished_gabbro": "Gabro pulido", - "block.create.polished_gabbro_slab": "Losa de gabro pulido", - "block.create.polished_gabbro_stairs": "Escaleras de gabro pulido", - "block.create.polished_gabbro_wall": "Muro de gabro pulido", - "block.create.polished_limestone": "Piedra caliza pulida", - "block.create.polished_limestone_slab": "Losa de piedra caliza pulida", - "block.create.polished_limestone_stairs": "Escaleras de piedra caliza pulidas", - "block.create.polished_limestone_wall": "Muro de piedra caliza pulida", - "block.create.polished_scoria": "Escoria pulida", - "block.create.polished_scoria_slab": "Losa de escoria pulida", - "block.create.polished_scoria_stairs": "Escaleras de losa pulida", - "block.create.polished_scoria_wall": "Muro de escoria pulida", - "block.create.polished_weathered_limestone": "Piedra caliza erosionada pulida", - "block.create.polished_weathered_limestone_slab": "Losa de piedra caliza erosionada pulida", - "block.create.polished_weathered_limestone_stairs": "Escaleras de piedra caliza erosionada pulida", - "block.create.polished_weathered_limestone_wall": "Muro de piedra caliza erosionada pulida", + "block.create.polished_cut_andesite": "Andesita cortada pulida", + "block.create.polished_cut_andesite_slab": "Losa de andesita cortada pulida", + "block.create.polished_cut_andesite_stairs": "Escaleras de andesita cortada pulida", + "block.create.polished_cut_andesite_wall": "Muro de andesita cortada pulida", + "block.create.polished_cut_asurine": "Azurina cortada pulida", + "block.create.polished_cut_asurine_slab": "Losa de azurina cortada pulida", + "block.create.polished_cut_asurine_stairs": "Escaleras de azurina cortada pulida", + "block.create.polished_cut_asurine_wall": "Muro de azurina cortada pulida", + "block.create.polished_cut_calcite": "Calcita cortada pulida", + "block.create.polished_cut_calcite_slab": "Losa de calcita cortada pulida", + "block.create.polished_cut_calcite_stairs": "Escaleras de calcita cortada pulida", + "block.create.polished_cut_calcite_wall": "Muro de calcita cortada pulida", + "block.create.polished_cut_crimsite": "Carmesina cortada pulida", + "block.create.polished_cut_crimsite_slab": "Losa de carmesina cortada pulida", + "block.create.polished_cut_crimsite_stairs": "Escaleras de carmesina cortada pulida", + "block.create.polished_cut_crimsite_wall": "Muro de carmesina cortada pulida", + "block.create.polished_cut_deepslate": "Pizarra profunda cortada pulida", + "block.create.polished_cut_deepslate_slab": "Losa de pizarra profunda cortada pulida", + "block.create.polished_cut_deepslate_stairs": "Escaleras de pizarra profunda cortada pulida", + "block.create.polished_cut_deepslate_wall": "Muro de pizarra profunda cortada pulida", + "block.create.polished_cut_diorite": "Diorita cortada pulida", + "block.create.polished_cut_diorite_slab": "Losa de diorita cortada pulida", + "block.create.polished_cut_diorite_stairs": "Escaleras de diorita cortada pulida", + "block.create.polished_cut_diorite_wall": "Muro de diorita cortada pulida", + "block.create.polished_cut_dripstone": "Bloque de espeleotema cortado pulido", + "block.create.polished_cut_dripstone_slab": "Losa de espeleotema cortado pulido", + "block.create.polished_cut_dripstone_stairs": "Escaleras de espeleotema cortado pulido", + "block.create.polished_cut_dripstone_wall": "Muro de espeleotema cortado pulido", + "block.create.polished_cut_granite": "Granito cortado pulido", + "block.create.polished_cut_granite_slab": "Losa de granito cortado pulido", + "block.create.polished_cut_granite_stairs": "Escaleras de granito cortado pulido", + "block.create.polished_cut_granite_wall": "Muro de granito cortado pulido", + "block.create.polished_cut_limestone": "Piedra caliza cortada pulida", + "block.create.polished_cut_limestone_slab": "Losa de piedra caliza cortada pulida", + "block.create.polished_cut_limestone_stairs": "Escaleras de piedra caliza cortada pulida", + "block.create.polished_cut_limestone_wall": "Muro de piedra caliza cortada pulida", + "block.create.polished_cut_ochrum": "Ocre cortado pulido", + "block.create.polished_cut_ochrum_slab": "Losa de ocre cortado pulido", + "block.create.polished_cut_ochrum_stairs": "Escaleras de ocre cortado pulido", + "block.create.polished_cut_ochrum_wall": "Muro de ocre cortado pulido", + "block.create.polished_cut_scorchia": "Escoria oscura cortada pulida", + "block.create.polished_cut_scorchia_slab": "Losa de escoria oscura cortada pulida", + "block.create.polished_cut_scorchia_stairs": "Escalera de escoria oscura cortada pulida", + "block.create.polished_cut_scorchia_wall": "Muro de escoria oscura cortada pulida", + "block.create.polished_cut_scoria": "Escoria cortada pulida", + "block.create.polished_cut_scoria_slab": "Losa de escoria cortada pulida", + "block.create.polished_cut_scoria_stairs": "Escaleras de escoria cortada pulida", + "block.create.polished_cut_scoria_wall": "Muro de escoria cortada pulida", + "block.create.polished_cut_tuff": "Toba cortada pulida", + "block.create.polished_cut_tuff_slab": "Losa de toba cortada pulida", + "block.create.polished_cut_tuff_stairs": "Escaleras de toba cortada pulida", + "block.create.polished_cut_tuff_wall": "Muro de toba cortada pulida", + "block.create.polished_cut_veridium": "Veridio cortado pulido", + "block.create.polished_cut_veridium_slab": "Losa de veridio cortado pulido", + "block.create.polished_cut_veridium_stairs": "Escaleras de veridio cortado pulido", + "block.create.polished_cut_veridium_wall": "Muro de veridio cortado pulido", "block.create.portable_fluid_interface": "Interfaz de fluidos portátil", "block.create.portable_storage_interface": "Interfaz de almacenamiento portátil", "block.create.powered_latch": "Palanca motorizada", "block.create.powered_toggle_latch": "Palanca de cierre motorizada", "block.create.pulley_magnet": "Imán de la polea", + "block.create.pulse_extender": "Extensor de pulso", "block.create.pulse_repeater": "Repetidor de pulsos de redstone", "block.create.purple_nixie_tube": "Tubo Nixie morado", "block.create.purple_sail": "Vela morada", @@ -373,6 +390,7 @@ "block.create.purple_toolbox": "Caja de herramientas púrpura", "block.create.purple_valve_handle": "Asa de válvula morada", "block.create.radial_chassis": "Chasis radial", + "block.create.raw_zinc_block": "Bloque de cinc en bruto", "block.create.red_nixie_tube": "Tubo Nixie rojo", "block.create.red_sail": "Vela roja", "block.create.red_seat": "Asiento rojo", @@ -381,80 +399,152 @@ "block.create.redstone_contact": "Contacto de redstone", "block.create.redstone_link": "Enlace de redstone", "block.create.refined_radiance_casing": "Revestidor radiante", - "block.create.reinforced_rail": "Raíl reforzado", "block.create.rope": "Cuerda", "block.create.rope_pulley": "Polea de cuerda", "block.create.rotation_speed_controller": "Controlador de velocidad rotacional", "block.create.sail_frame": "Marco de vela", "block.create.schematic_table": "Tabla de esquemas", - "block.create.schematicannon": "Cañón de esquemas", + "block.create.schematicannon": "Esquematicañón", + "block.create.scorchia": "Escoria oscura", + "block.create.scorchia_pillar": "Pilar de escoria oscura", "block.create.scoria": "Escoria", - "block.create.scoria_bricks": "Ladrillos de escoria", - "block.create.scoria_bricks_slab": "Losa de ladrillos de escoria", - "block.create.scoria_bricks_stairs": "Escaleras de ladrillos de escoria", - "block.create.scoria_bricks_wall": "Muro de ladrillos de escoria", - "block.create.scoria_cobblestone": "Adoquín de escoria", - "block.create.scoria_cobblestone_slab": "Losa de adoquínes de escoria", - "block.create.scoria_cobblestone_stairs": "Escaleras de adoquines de escoria", - "block.create.scoria_cobblestone_wall": "Muro de adoquines de escoria", "block.create.scoria_pillar": "Pilar de escoria", "block.create.secondary_linear_chassis": "Chasis lineal secundario", "block.create.sequenced_gearshift": "Caja de cambios secuencial", "block.create.shadow_steel_casing": "Revestidor sombrío", "block.create.shaft": "Eje", + "block.create.small_andesite_brick_slab": "Losa de ladrillos pequeños de andesita", + "block.create.small_andesite_brick_stairs": "Escaleras de ladrillos pequeños de andesita", + "block.create.small_andesite_brick_wall": "Muro de ladrillos pequeños de andesita", + "block.create.small_andesite_bricks": "Ladrillos pequeños de andesita", + "block.create.small_asurine_brick_slab": "Losa de ladrillos pequeños de azurina", + "block.create.small_asurine_brick_stairs": "Escaleras de ladrillos pequeños de azurina", + "block.create.small_asurine_brick_wall": "Muro de ladrillos pequeños de azurina", + "block.create.small_asurine_bricks": "Ladrillos pequeños de azurina", + "block.create.small_calcite_brick_slab": "Losa de ladrillos pequeños de calcita", + "block.create.small_calcite_brick_stairs": "Escaleras de ladrillos pequeños de calcita", + "block.create.small_calcite_brick_wall": "Muro de ladrillos pequeños de calcita", + "block.create.small_calcite_bricks": "Ladrillos pequeños de calcita", + "block.create.small_crimsite_brick_slab": "Losa de ladrillos pequeños de carmesina", + "block.create.small_crimsite_brick_stairs": "Escaleras de ladrillos pequeños de carmesina", + "block.create.small_crimsite_brick_wall": "Muro de ladrillos pequeños de carmesina", + "block.create.small_crimsite_bricks": "Ladrillos pequeños de carmesina", + "block.create.small_deepslate_brick_slab": "Losa de ladrillos pequeños de pizarra profunda", + "block.create.small_deepslate_brick_stairs": "Escaleras de ladrillos pequeños de pizarra profunda", + "block.create.small_deepslate_brick_wall": "Muro de ladrillos pequeños de pizarra profunda", + "block.create.small_deepslate_bricks": "Ladrillos pequeños de pizarra profunda", + "block.create.small_diorite_brick_slab": "Losa de ladrillos pequeños de diorita", + "block.create.small_diorite_brick_stairs": "Escaleras de ladrillos pequeños de diorita", + "block.create.small_diorite_brick_wall": "Muro de ladrillos pequeños de diorita", + "block.create.small_diorite_bricks": "Ladrillos pequeños de diorita", + "block.create.small_dripstone_brick_slab": "Losa de ladrillos pequeños de espeleotema", + "block.create.small_dripstone_brick_stairs": "Escaleras de ladrillos pequeños de espeleotema", + "block.create.small_dripstone_brick_wall": "Muro de ladrillos pequeños de espeleotema", + "block.create.small_dripstone_bricks": "Ladrillos pequeños de espeleotema", + "block.create.small_granite_brick_slab": "Losa de ladrillos pequeños de granito", + "block.create.small_granite_brick_stairs": "Escaleras de ladrillos pequeños de granito", + "block.create.small_granite_brick_wall": "Muro de ladrillos pequeños de granito", + "block.create.small_granite_bricks": "Ladrillos pequeños de granito", + "block.create.small_limestone_brick_slab": "Losa de ladrillos pequeños de piedra caliza", + "block.create.small_limestone_brick_stairs": "Escaleras de ladrillos pequeños de piedra caliza", + "block.create.small_limestone_brick_wall": "Muro de ladrillos pequeños de piedra caliza", + "block.create.small_limestone_bricks": "Ladrillos pequeños de piedra caliza", + "block.create.small_ochrum_brick_slab": "Losa de ladrillos pequeños de ocre", + "block.create.small_ochrum_brick_stairs": "Escalera de ladrillos pequeños de ocre", + "block.create.small_ochrum_brick_wall": "Muro de ladrillos pequeños de ocre", + "block.create.small_ochrum_bricks": "Ladrillos pequeños de ocre", + "block.create.small_scorchia_brick_slab": "Losa de ladrillos pequeños de escoria oscura", + "block.create.small_scorchia_brick_stairs": "Escaleras de ladrillos pequeños de escoria oscura", + "block.create.small_scorchia_brick_wall": "Muro de ladrillos pequeños de escoria oscura", + "block.create.small_scorchia_bricks": "Ladrillos pequeños de escoria oscura", + "block.create.small_scoria_brick_slab": "Losa de ladrillos pequeños de escoria", + "block.create.small_scoria_brick_stairs": "Escaleras de ladrillos pequeños de escoria", + "block.create.small_scoria_brick_wall": "Muro de ladrillos pequeños de escoria", + "block.create.small_scoria_bricks": "Ladrillos pequeños de escoria", + "block.create.small_tuff_brick_slab": "Losa de ladrillos pequeños de toba", + "block.create.small_tuff_brick_stairs": "Escaleras de ladrillos pequeños de toba", + "block.create.small_tuff_brick_wall": "Muro de ladrillos pequeños de toba", + "block.create.small_tuff_bricks": "Ladrillos pequeños de toba", + "block.create.small_veridium_brick_slab": "Losa de ladrillos pequeños de veridio", + "block.create.small_veridium_brick_stairs": "Escaleras de ladrillos pequeños de veridio", + "block.create.small_veridium_brick_wall": "Muro de ladrillos pequeños de veridio", + "block.create.small_veridium_bricks": "Ladrillos pequeños de veridio", "block.create.smart_chute": "Ducto inteligente", "block.create.smart_fluid_pipe": "Tubería de fluidos inteligente", "block.create.speedometer": "Velocímetro", "block.create.spout": "Surtidor", "block.create.spruce_window": "Ventana de abeto", "block.create.spruce_window_pane": "Panel de ventana de abeto", - "block.create.sticker": "Sticker", + "block.create.sticker": "Pegatina", "block.create.sticky_mechanical_piston": "Pistón mecánico pegajoso", "block.create.stockpile_switch": "Interruptor de acopio", "block.create.stressometer": "Estresómetro", "block.create.tiled_glass": "Vidrio esmaltado", "block.create.tiled_glass_pane": "Panel de vidrio esmaltado", + "block.create.tuff_pillar": "Pilar de toba", "block.create.turntable": "Plataforma giratoria mecánica", + "block.create.veridium": "Veridio", + "block.create.veridium_pillar": "Pilar de veridio", "block.create.vertical_framed_glass": "Vidrio esmaltado vertical", "block.create.vertical_framed_glass_pane": "Panel de vidrio esmaltado vertical", "block.create.warped_window": "Ventana distorsionada", "block.create.warped_window_pane": "Panel de ventana distorsionada", "block.create.water_wheel": "Rueda hidráulica mecánica", - "block.create.weathered_limestone": "Piedra caliza erosionada", - "block.create.weathered_limestone_bricks": "Ladrillos de piedra caliza erosionada", - "block.create.weathered_limestone_bricks_slab": "Losa de piedra caliza erosionada", - "block.create.weathered_limestone_bricks_stairs": "Escaleras de ladrillos de piedra caliza erosionada", - "block.create.weathered_limestone_bricks_wall": "Muro de ladrillos de piedra caliza erosionada", - "block.create.weathered_limestone_cobblestone": "Adoquín de piedra caliza erosionada", - "block.create.weathered_limestone_cobblestone_slab": "Losa de adoquín de piedra caliza erosionada", - "block.create.weathered_limestone_cobblestone_stairs": "Escaleras de adoquín de piedra caliza erosionada", - "block.create.weathered_limestone_cobblestone_wall": "Muro de adoquínes de piedra caliza erosionada", - "block.create.weathered_limestone_pillar": "Pilar de piedra caliza erosionada", + "block.create.waxed_copper_shingle_slab": "Losa de tejas de cobre encerado", + "block.create.waxed_copper_shingle_stairs": "Escaleras de tejas de cobre encerado", + "block.create.waxed_copper_shingles": "Bloque de tejas de cobre encerado", + "block.create.waxed_copper_tile_slab": "Losa de baldosas de cobre encerado", + "block.create.waxed_copper_tile_stairs": "Escaleras de baldosas de cobre encerado", + "block.create.waxed_copper_tiles": "Bloque de baldosas de cobre encerado", + "block.create.waxed_exposed_copper_shingle_slab": "Losa de tejas de cobre expuesto encerado", + "block.create.waxed_exposed_copper_shingle_stairs": "Escaleras de tejas de cobre expuesto encerado", + "block.create.waxed_exposed_copper_shingles": "Bloque de tejas de cobre expuesto encerado", + "block.create.waxed_exposed_copper_tile_slab": "Losa de baldosas de cobre expuesto encerado", + "block.create.waxed_exposed_copper_tile_stairs": "Escaleras de baldosas de cobre expuesto encerado", + "block.create.waxed_exposed_copper_tiles": "Bloque de baldosas de cobre expuesto encerado", + "block.create.waxed_oxidized_copper_shingle_slab": "Losa de tejas de cobre oxidado encerado", + "block.create.waxed_oxidized_copper_shingle_stairs": "Escaleras de tejas de cobre oxidado encerado", + "block.create.waxed_oxidized_copper_shingles": "Bloque de tejas de cobre oxidado encerado", + "block.create.waxed_oxidized_copper_tile_slab": "Losa de baldosas de cobre oxidado encerado", + "block.create.waxed_oxidized_copper_tile_stairs": "Escaleras de baldosas de cobre oxidado encerado", + "block.create.waxed_oxidized_copper_tiles": "Bloque de baldosas de cobre oxidado encerado", + "block.create.waxed_weathered_copper_shingle_slab": "Losa de tejas de cobre degradado encerado", + "block.create.waxed_weathered_copper_shingle_stairs": "Escaleras de tejas de cobre degradado encerado", + "block.create.waxed_weathered_copper_shingles": "Bloque de tejas de cobre degradado encerado", + "block.create.waxed_weathered_copper_tile_slab": "Losa de baldosas de cobre degradado encerado", + "block.create.waxed_weathered_copper_tile_stairs": "Escaleras de baldosas de cobre degradado encerado", + "block.create.waxed_weathered_copper_tiles": "Bloque de baldosas de cobre degradado encerado", + "block.create.weathered_copper_shingle_slab": "Losa de tejas de cobre degradado", + "block.create.weathered_copper_shingle_stairs": "Escaleras de tejas de cobre degradado", + "block.create.weathered_copper_shingles": "Bloque de tejas de cobre degradado", + "block.create.weathered_copper_tile_slab": "Losa de baldosas de cobre degradado", + "block.create.weathered_copper_tile_stairs": "Escaleras de baldosas de cobre degradado", + "block.create.weathered_copper_tiles": "Bloque de baldosas de cobre degradado", "block.create.weighted_ejector": "Eyector de peso", "block.create.white_nixie_tube": "Tubo Nixie blanco", "block.create.white_sail": "Vela blanca", "block.create.white_seat": "Asiento blanco", "block.create.white_toolbox": "Caja de herramientas blanca", "block.create.white_valve_handle": "Asa de válvula blanco", - "block.create.windmill_bearing": "Rodamiento del molino de viento", + "block.create.windmill_bearing": "Rodamiento de molino de viento", "block.create.wooden_bracket": "Soporte de madera para ejes", "block.create.yellow_nixie_tube": "Tubo Nixie amarillo", "block.create.yellow_sail": "Vela amarilla", "block.create.yellow_seat": "Asiento amarillo", "block.create.yellow_toolbox": "Caja de herramientas amarilla", "block.create.yellow_valve_handle": "Asa de válvula amarillo", - "block.create.zinc_block": "Bloque de zinc", - "block.create.zinc_ore": "Mena de zinc", + "block.create.zinc_block": "Bloque de cinc", + "block.create.zinc_ore": "Mena de cinc", "enchantment.create.capacity": "Capacidad", "enchantment.create.potato_recovery": "Recuperación de patatas", - "entity.create.contraption": "Artilugio", + "entity.create.contraption": "Artefacto animado", "entity.create.crafting_blueprint": "Plano de elaboración", - "entity.create.gantry_contraption": "Artilugio de grúa", + "entity.create.gantry_contraption": "Artefacto móvil de grúa", "entity.create.potato_projectile": "Proyectil de patata", "entity.create.seat": "Asiento", - "entity.create.stationary_contraption": "Artilugio estacionario", + "entity.create.stationary_contraption": "Artefacto estacionario", "entity.create.super_glue": "Pegamento", "fluid.create.potion": "Poción", @@ -471,20 +561,18 @@ "item.create.brass_nugget": "Pepita de latón", "item.create.brass_sheet": "Lámina de latón", "item.create.builders_tea": "Té del Constructor", - "item.create.chest_minecart_contraption": "Artilugio de vagoneta con cofre", + "item.create.chest_minecart_contraption": "Artefacto móvil de vagoneta con cofre", "item.create.chocolate_bucket": "Cubo con chocolate", "item.create.chocolate_glazed_berries": "Bayas glaseadas con chocolate", "item.create.chromatic_compound": "Compuesto cromático", "item.create.cinder_flour": "Harina del Nether", "item.create.copper_backtank": "Depósito trasero de cobre", - "item.create.copper_ingot": "Lingote de cobre", "item.create.copper_nugget": "Pepita de cobre", "item.create.copper_sheet": "Lámina de cobre", "item.create.crafter_slot_cover": "Tapa de ranura del ensamblador mecánico", "item.create.crafting_blueprint": "Plano de elaboración", "item.create.creative_blaze_cake": "´Pastel de blaze creativo", "item.create.crushed_aluminum_ore": "Mineral de aluminio molido", - "item.create.crushed_brass": "Latón molido", "item.create.crushed_copper_ore": "Mineral de cobre molido", "item.create.crushed_gold_ore": "Mineral de oro molido", "item.create.crushed_iron_ore": "Mineral de hierro molido", @@ -496,33 +584,35 @@ "item.create.crushed_silver_ore": "Mineral de plata molido", "item.create.crushed_tin_ore": "Mineral de estaño molido", "item.create.crushed_uranium_ore": "Mineral de uranio molido", - "item.create.crushed_zinc_ore": "Mineral de zinc molido", + "item.create.crushed_zinc_ore": "Mineral de cinc molido", "item.create.diving_boots": "Botas de buceo", "item.create.diving_helmet": "Casco de buceo", - "item.create.dough": "Masilla", + "item.create.dough": "Masa", "item.create.electron_tube": "Tubo de electrones", "item.create.empty_blaze_burner": "Quemador de blaze vacío", "item.create.empty_schematic": "Esquema vacío", + "item.create.experience_nugget": "Pepita de experiencia", "item.create.extendo_grip": "Agarre extendido", "item.create.filter": "Filtro", - "item.create.furnace_minecart_contraption": "Artilugio de vagoneta de horno", - "item.create.goggles": "Gafas del constructor", + "item.create.furnace_minecart_contraption": "Artefacto móvil de vagoneta con horno", + "item.create.goggles": "Gafas del ingeniero", "item.create.golden_sheet": "Lámina de oro", - "item.create.handheld_worldshaper": "Worldshaper Creativo", + "item.create.handheld_worldshaper": "Moldeador de mundos", "item.create.honey_bucket": "Cubo con miel", "item.create.honeyed_apple": "Manzana con miel", - "item.create.incomplete_cogwheel": "Engranaje pequeño incompleto", + "item.create.incomplete_cogwheel": "Engranaje incompleto", "item.create.incomplete_large_cogwheel": "Engranaje grande incompleto", "item.create.incomplete_precision_mechanism": "Mecanismo de precisión incompleto", "item.create.iron_sheet": "Lámina de hierro", "item.create.linked_controller": "Controlador enlazado", - "item.create.minecart_contraption": "Artilugio de vagoneta", + "item.create.minecart_contraption": "Artefacto móvil de vagoneta", "item.create.minecart_coupling": "Acoplamiento de vagoneta", "item.create.polished_rose_quartz": "Cuarzo rosado pulido", "item.create.potato_cannon": "Cañón de patatas", "item.create.powdered_obsidian": "Polvo de obsidiana", "item.create.precision_mechanism": "Mecanismo de precisión", "item.create.propeller": "Hélice", + "item.create.raw_zinc": "Cinc en bruto", "item.create.red_sand_paper": "Papel de lija rojo", "item.create.refined_radiance": "Resplandor refinado", "item.create.rose_quartz": "Cuarzo rosado", @@ -531,45 +621,45 @@ "item.create.schematic_and_quill": "Esquema y pluma", "item.create.shadow_steel": "Acero sombrío", "item.create.super_glue": "Pegamento", - "item.create.sweet_roll": "Pan dulce", + "item.create.sweet_roll": "Ensaimada", "item.create.tree_fertilizer": "Fertilizante para árboles", "item.create.vertical_gearbox": "Caja de transmisión vertical", "item.create.wand_of_symmetry": "Varita de simetría", "item.create.wheat_flour": "Harina de trigo", "item.create.whisk": "Batidora", "item.create.wrench": "Llave inglesa", - "item.create.zinc_ingot": "Lingote de zinc", - "item.create.zinc_nugget": "Pepita de zinc", + "item.create.zinc_ingot": "Lingote de cinc", + "item.create.zinc_nugget": "Pepita de cinc", "_": "->------------------------] Advancements [------------------------<-", "advancement.create.root": "Bienvenido a Create", - "advancement.create.root.desc": "¡Es hora de empezar a construir increíbles artilugios!", - "advancement.create.andesite_alloy": "Aleaciones en abundancia", + "advancement.create.root.desc": "¡Es hora de empezar a construir increíbles artefactos animados!", + "advancement.creatse.andesite_alloy": "Aleaciones en abundancia", "advancement.create.andesite_alloy.desc": "Los materiales de Create tienen nombres extraños, la aleación de andesita es uno de ellos.", "advancement.create.its_alive": "¡Está vivo!", "advancement.create.its_alive.desc": "Mira cómo gira tu primer componente cinético.", "advancement.create.shifting_gears": "Cambiando de marcha", - "advancement.create.shifting_gears.desc": "Conecta un engranaje grande a uno pequeño, lo que te permitirá cambiar la velocidad de tu artilugio.", + "advancement.create.shifting_gears.desc": "Conecta un engranaje grande a una pequeña, lo que te permitirá cambiar la velocidad rotacional.", "advancement.create.overstressed": "Sobrecargado", "advancement.create.overstressed.desc": "Experimenta los límites del estrés.", "advancement.create.belt": "Paseo de algas", - "advancement.create.belt.desc": "Conectar dos ejes con una correa.", + "advancement.create.belt.desc": "Conecta dos ejes con una cinta.", "advancement.create.tunnel": "¡Cúbrete!", - "advancement.create.tunnel.desc": "Embellece tu correa con un túnel.", + "advancement.create.tunnel.desc": "Embellece tu cinta mecánica con un túnel.", "advancement.create.splitter_tunnel": "Divide y vencerás", - "advancement.create.splitter_tunnel.desc": "Crear un divisor con un grupo de túneles de latón.", + "advancement.create.splitter_tunnel.desc": "Crear un divisor con túneles de latón.", "advancement.create.chute": "Caída en picado", - "advancement.create.chute.desc": "Coloque un ducto, la contrapartida vertical de la cinta.", + "advancement.create.chute.desc": "Coloque un ducto, la contrapartida vertical de la cinta mecánica.", "advancement.create.upward_chute": "Abducción aérea", "advancement.create.upward_chute.desc": "Observe cómo un objeto lanzado vuela dentro de un ducto impulsado por un ventilador.", "advancement.create.belt_funnel": "Colgantes con forma de embudo", - "advancement.create.belt_funnel.desc": "Coloca un embudo lateral encima de una cinta o depósito para crear un tipo especial.", + "advancement.create.belt_funnel.desc": "Coloca un embudo en una cinta mecánica o depósito para que sea un embudo lateral.", "advancement.create.belt_funnel_kiss": "Los loros y las aletas", - "advancement.create.belt_funnel_kiss.desc": "Haz besar dos embudos montados con una cinta.", + "advancement.create.belt_funnel_kiss.desc": "Haz que se besen dos embudos montados en una cinta mecánica.", "advancement.create.fan": "Maestro mecánico del aire", - "advancement.create.fan.desc": "Monta la corriente de aire proporcionada por un ventilador revestido.", + "advancement.create.fan.desc": "Móntate en una corriente de aire de un ventilador revestido.", "advancement.create.fan_lava": "Calentador geotérmico", "advancement.create.fan_lava.desc": "Queda atrapado en una corriente de aire que funde las cosas.", "advancement.create.fan_water": "Lavado de la ropa", @@ -577,17 +667,17 @@ "advancement.create.fan_smoke": "Fuelle mecánico", "advancement.create.fan_smoke.desc": "Queda atrapado en una corriente de aire que humea los objetos.", "advancement.create.wrench": "Configurar convenientemente", - "advancement.create.wrench.desc": "Crea una llave inglesa para ayudarte a construir tus artilugios.", + "advancement.create.wrench.desc": "Crea una llave inglesa para ayudarte a construir tus sistemas.", "advancement.create.goggles": "Estresóvisión", - "advancement.create.goggles.desc": "Crea unas gafas del constructor para ayudarte a obtener más información cinética de los componentes.", + "advancement.create.goggles.desc": "Crea unas gafas del ingeniero para ayudarte a obtener más información cinética de los componentes.", "advancement.create.speedometer": "Pero, ¿con qué rapidez exactamente?", - "advancement.create.speedometer.desc": "Coloca y alimenta un velocímetro. Míralo a través de las gafas para leer su valor exacto.", - "advancement.create.stressometer": "Pero, ¿cuán estresado exactamente??", - "advancement.create.stressometer.desc": "Coloca y alimenta un estresómetro. Míralo a través de las gafas para leer su valor exacto.", + "advancement.create.speedometer.desc": "Coloca y alimenta un velocímetro. Míralo a través de las gafas del ingeniero para leer su valor exacto.", + "advancement.create.stressometer": "Pero, ¿cuán estresado exactamente?", + "advancement.create.stressometer.desc": "Coloca y alimenta un estresómetro. Míralo a través de las gafas del ingeniero para leer su valor exacto.", "advancement.create.aesthetics": "Boom, ¡Estética!", "advancement.create.aesthetics.desc": "Coloca soportes en ejes, ductos y engranajes.", "advancement.create.reinforced": "Boom, ¡Reforzado!", - "advancement.create.reinforced.desc": "Utiliza bloques de revestimiento en un eje, un ducto y una cinta.", + "advancement.create.reinforced.desc": "Utiliza bloques de revestimiento en un eje, un ducto y una cinta mecánica.", "advancement.create.water_wheel": "Aprovechar la hidráulica", "advancement.create.water_wheel.desc": "Coloca una rueda hidráulica e intenta hacerla girar.", "advancement.create.chocolate_wheel": "Potencia de buen gusto", @@ -623,7 +713,7 @@ "advancement.create.compact": "Compactación automática", "advancement.create.compact.desc": "Utiliza una prensa y una cuenca para compactar algunos objetos.", "advancement.create.brass": "Aleaciones reales", - "advancement.create.brass.desc": "Utiliza cobre molido y zinc molido para crear algo de latón.", + "advancement.create.brass.desc": "Utiliza cobre molido y cinc molido para crear algo de latón.", "advancement.create.brass_casing": "La Edad de Latón", "advancement.create.brass_casing.desc": "Utiliza el latón recién obtenido y algo de madera para crear un revestimiento más avanzado.", "advancement.create.copper_casing": "La Edad de Cobre", @@ -654,13 +744,13 @@ "advancement.create.infinite_chocolate.desc": "Bombea desde una masa de chocolate fundido lo suficientemente grande como para ser considerado infinito.", "advancement.create.crafter": "Montaje automatizado", "advancement.create.crafter.desc": "Coloca y alimenta algunos ensambladores.", - "advancement.create.clockwork_bearing": "Artilugio a la hora", + "advancement.create.clockwork_bearing": "Las artefacto en punto", "advancement.create.clockwork_bearing.desc": "Ensamblar una estructura montada sobre un rodamiento tipo reloj.", "advancement.create.nixie_tube": "Signos de estilo", "advancement.create.nixie_tube.desc": "Obtener y colocar un par de tubos nixie.", "advancement.create.deployer": "Picar, colocar y atacar", "advancement.create.deployer.desc": "Coloca y potencia un desplegador, el reflejo perfecto de ti mismo.", - "advancement.create.speed_controller": "Los ingenieros lo odian!", + "advancement.create.speed_controller": "¡Los ingenieros lo odian!", "advancement.create.speed_controller.desc": "Coloca un controlador de velocidad rotacional, el dispositivo definitivo para cambiar de marcha.", "advancement.create.flywheel": "El corazón de la fábrica", "advancement.create.flywheel.desc": "Conecta con éxito un motor a la rueda de inercia.", @@ -682,19 +772,11 @@ "advancement.create.crushing_wheel.desc": "Crea algunas ruedas de trituración para descomponer más materiales de forma más eficaz.", "advancement.create.blaze_cake": "Fiebre del azúcar", "advancement.create.blaze_cake.desc": "Hornea en tu quemador de blaze un pastel especial.", - "advancement.create.chromatic_compound": "Minerales misteriosos", - "advancement.create.chromatic_compound.desc": "Crea una barra de compuesto cromático.", - "advancement.create.shadow_steel": "Retorno del vacío", - "advancement.create.shadow_steel.desc": "Crea acero sombrío, una barra de metal de la nada.", - "advancement.create.refined_radiance": "Brillante e inspirador", - "advancement.create.refined_radiance.desc": "Crea un resplandor refinado, una poderosa sustancia cromática.", - "advancement.create.chromatic_age": "La edad cromática", - "advancement.create.chromatic_age.desc": "Crear bloques de revestimiento de la luz y la oscuridad.", "advancement.create.wand_of_symmetry": "Espejos radiantes", "advancement.create.wand_of_symmetry.desc": "Crear un bastón de simetría.", "advancement.create.extendo_grip": "¡Boioioing!", "advancement.create.extendo_grip.desc": "Hazte con un agarre extentido.", - "advancement.create.potato_cannon": "Fwoomp!", + "advancement.create.potato_cannon": "¡Fwoomp!", "advancement.create.potato_cannon.desc": "Derrota a un enemigo con tu cañón de patatas.", "advancement.create.dual_extendo_grip": "La última edad del boing", "advancement.create.dual_extendo_grip.desc": "Doble empuñadura extendida para un alcance sobrehumano.", @@ -805,14 +887,14 @@ "create.gui.scrollInput.scrollToModify": "Usa la rueda del ratón para modificar", "create.gui.scrollInput.scrollToAdjustAmount": "Usa la rueda del ratón para ajustar la cantidad", "create.gui.scrollInput.scrollToSelect": "Usa la rueda del ratón para seleccionar", - "create.gui.scrollInput.shiftScrollsFaster": "Mayús izdo para usar la rueda del ratón más rápido", + "create.gui.scrollInput.shiftScrollsFaster": "Mayús izdo. para usar la rueda del ratón más rápido", "create.gui.toolmenu.focusKey": "Mantén [%1$s] para enfocar", "create.gui.toolmenu.cycle": "[RUEDA DEL RATÓN] para el ciclo", "create.toolbox.unequip": "Desequipar: %1$s", - "create.toolbox.outOfRange": "La caja de herramientas del objeto retenido no está en el rango", + "create.toolbox.outOfRange": "La caja de herramientas del objeto en uso no está en el rango", "create.toolbox.detach": "Dejar de rastrear y conservar el objeto", - "create.toolbox.depositAll": "Devolver elementos a las cajas de herramientas cercanas", + "create.toolbox.depositAll": "Devuelve objetos a las cajas de herramientas cercanas", "create.toolbox.depositBox": "Devolver elementos a la caja de herramientas", "create.gui.symmetryWand.mirrorType": "Espejado", @@ -828,16 +910,16 @@ "create.orientation.alongZ": "A lo largo de Z", "create.orientation.alongX": "A lo largo de X", - "create.gui.terrainzapper.title": "Blockzapper", + "create.gui.terrainzapper.title": "Handheld Blockzapper", "create.gui.terrainzapper.searchDiagonal": "Seguir diagonales", "create.gui.terrainzapper.searchFuzzy": "Ignorar los bordes del material", "create.gui.terrainzapper.patternSection": "Patrón", "create.gui.terrainzapper.pattern.solid": "Sólido", "create.gui.terrainzapper.pattern.checkered": "Tablero de ajedrez", "create.gui.terrainzapper.pattern.inversecheckered": "Tablero de ajedrez invertido", - "create.gui.terrainzapper.pattern.chance25": "25% Roll", - "create.gui.terrainzapper.pattern.chance50": "50% Roll", - "create.gui.terrainzapper.pattern.chance75": "75% Roll", + "create.gui.terrainzapper.pattern.chance25": "25% Probabilidad", + "create.gui.terrainzapper.pattern.chance50": "50% Probabilidad", + "create.gui.terrainzapper.pattern.chance75": "75% Probabilidad", "create.gui.terrainzapper.placement": "Ubicación", "create.gui.terrainzapper.placement.merged": "Fusionado", "create.gui.terrainzapper.placement.attached": "Adjuntado", @@ -856,7 +938,7 @@ "create.gui.terrainzapper.tool.overlay": "Superponer", "create.gui.terrainzapper.tool.flatten": "Aplanar", - "create.terrainzapper.shiftRightClickToSet": "Mayús izdo + clic derecho para seleccionar una forma", + "create.terrainzapper.shiftRightClickToSet": "Mayús izdo. + clic derecho para seleccionar una forma", "create.terrainzapper.usingBlock": "Usando: %1$s", "create.terrainzapper.leftClickToSet": "Clic izquierdo a un bloque para establecer el material", @@ -898,10 +980,10 @@ "create.gui.goggles.pole_length": "Longitud del poste:", "create.gui.goggles.fluid_container": "Información sobre el contenedor de fluidos:", "create.gui.goggles.fluid_container.capacity": "Capacidad: ", - "create.gui.assembly.exception": "Este artilugio no se pudo montar:", + "create.gui.assembly.exception": "Este artefacto animado no se pudo montar:", "create.gui.assembly.exception.unmovableBlock": "Bloque inamovible (%4$s) en [%1$s,%2$s,%3$s]", "create.gui.assembly.exception.chunkNotLoaded": "El bloque en [%1$s,%2$s,%3$s] no estaba en un chunk cargado", - "create.gui.assembly.exception.structureTooLarge": "Hay demasiados bloques incluídos en el artilugio.\nEl máximo configurado es: %1$s", + "create.gui.assembly.exception.structureTooLarge": "Hay demasiados bloques incluídos en el artefacto animado.\nEl máximo configurado es: %1$s", "create.gui.assembly.exception.tooManyPistonPoles": "Hay demasiadas Pértigas de extensión conectadas a este Pistón.\nEl máximo configurado es: %1$s", "create.gui.assembly.exception.noPistonPoles": "Faltan pértigas de extensión para el pistón", "create.gui.assembly.exception.not_enough_sails": "La estructura adjunta no incluye suficientes bloques tipo vela: %1$s\nSe requiere un mínimo de %2$s", @@ -912,7 +994,7 @@ "create.gui.stressometer.overstressed": "Sobrecargado", "create.gui.stressometer.no_rotation": "Sin rotación", "create.gui.contraptions.not_fast_enough": "Parece que este %1$s no está girando con _suficiente_ velocidad_.", - "create.gui.contraptions.network_overstressed": "Parece que este artilugio está _sobrecargado_. Añade más fuentes o _desacelera_ los componentes con un _impacto de estrés alto_.", + "create.gui.contraptions.network_overstressed": "Parece que este sistema está _sobrecargado_. Añade más fuentes o _desacelera_ los componentes con un _impacto de estrés alto_.", "create.gui.adjustable_crate.title": "Caja ajustable", "create.gui.adjustable_crate.storageSpace": "Espacio de almacenamiento", "create.gui.stockpile_switch.title": "Interruptor de acopio", @@ -1003,7 +1085,7 @@ "create.gui.schematicTable.noSchematics": "No hay esquemas guardados", "create.gui.schematicTable.uploading": "Subiendo...", "create.gui.schematicTable.finished": "¡Subida finalizada!", - "create.gui.schematicannon.title": "Cañón de esquemas", + "create.gui.schematicannon.title": "Esquematicañón", "create.gui.schematicannon.listPrinter": "Lista de control de la impresora", "create.gui.schematicannon.gunpowderLevel": "Pólvora %1$s%%", "create.gui.schematicannon.shotsRemaining": "Disparos restantes: %1$s", @@ -1055,14 +1137,14 @@ "create.gui.filter.respect_data": "Respetar datos", "create.gui.filter.respect_data.description": "Los objetos sólo coinciden si su durabilidad, encantos y otros atributos también coinciden.", "create.gui.filter.ignore_data": "Ignorar datos", - "create.gui.filter.ignore_data.description": "Los artículos coinciden independientemente de sus atributos.", + "create.gui.filter.ignore_data.description": "Los objetos coinciden independientemente de sus atributos.", "create.item_attributes.placeable": "se puede colocar", "create.item_attributes.placeable.inverted": "no se puede colocar", "create.item_attributes.consumable": "se puede comer", "create.item_attributes.consumable.inverted": "no se puede comer", - "create.item_attributes.fluid_container": "puede almacenar fluídos", - "create.item_attributes.fluid_container.inverted": "puede almacenar fluídos", + "create.item_attributes.fluid_container": "puede almacenar fluidos", + "create.item_attributes.fluid_container.inverted": "puede almacenar fluidos", "create.item_attributes.enchanted": "está encantado", "create.item_attributes.enchanted.inverted": "no está encantado", "create.item_attributes.max_enchanted": "está encantado en el nivel máximo", @@ -1218,7 +1300,7 @@ "create.hint.hose_pulley.title": "Suministro ilimitado", "create.hint.hose_pulley": "La masa de fluido objetivo se considera infinita.", "create.hint.mechanical_arm_no_targets.title": "Sin objetivos", - "create.hint.mechanical_arm_no_targets": "Parece que a este _brazo mecánico_ no se le ha asignado ningún objetivo. Selecciona _correas_, _depósitos_, _embudos_ y otros bloques haciendo clic derecho sobre ellos mientras _sostienes_ el _brazo mecánico_ en tu mano..", + "create.hint.mechanical_arm_no_targets": "Parece que a este _brazo mecánico_ no se le ha asignado ningún objetivo. Selecciona _cintas mecánicas_, _depósitos_, _embudos_ u otros bloques haciendo clic derecho sobre ellos mientras _sostienes_ el _brazo mecánico_ en tu mano...", "create.hint.empty_bearing.title": "Actualización del rodamiento", "create.hint.empty_bearing": "Haz clic derecho sobre el rodamiento con la _mano vacía_ para _adjuntar_ la estructura que acabas de construir delante de él.", "create.hint.full_deployer.title": "Exceso de objetos en el desplegador", @@ -1241,56 +1323,57 @@ "create.command.killTPSCommand.status.usage.1": "[Create]: usa /killtps start para ralentizar artificialmente el tick del servidor", "create.command.killTPSCommand.argument.tickTime": "tickTime", - "create.contraption.minecart_contraption_too_big": "Este artilugio de vagoneta parece demasiado grande para recogerlo", - "create.contraption.minecart_contraption_illegal_pickup": "Una fuerza mística está atando este artilugio de vagoneta al mundo", + "create.contraption.minecart_contraption_too_big": "Este artefacto móvil de vagoneta parece demasiado grande para recogerlo", + "create.contraption.minecart_contraption_illegal_pickup": "Una fuerza mística está atando este artefacto móvil de vagoneta al mundo", "_": "->------------------------] Subtitles [------------------------<-", - "create.subtitle.contraption_disassemble": "", - "create.subtitle.peculiar_bell_use": "", - "create.subtitle.mixing": "", - "create.subtitle.mechanical_press_activation_belt": "", - "create.subtitle.fwoomp": "", - "create.subtitle.worldshaper_place": "", - "create.subtitle.crushing_1": "", - "create.subtitle.depot_slide": "", - "create.subtitle.saw_activate_stone": "", - "create.subtitle.blaze_munch": "", - "create.subtitle.funnel_flap": "", - "create.subtitle.schematicannon_finish": "", - "create.subtitle.haunted_bell_use": "", + "create.subtitle.contraption_disassemble": "Artefacto animado se para", + "create.subtitle.peculiar_bell_use": "Campana peculiar suena", + "create.subtitle.mixing": "Mezclando", + "create.subtitle.mechanical_press_activation_belt": "Prensa mecánica apisona", + "create.subtitle.fwoomp": "Cañón de patatas sonando", + "create.subtitle.worldshaper_place": "Moldeador de mundos coloca bloques", + "create.subtitle.sanding_long": "Lijando", + "create.subtitle.crushing_1": "Triturando", + "create.subtitle.depot_slide": "Objeto desliza", + "create.subtitle.saw_activate_stone": "Sierra mecánica activada", + "create.subtitle.blaze_munch": "Quemador de blaze masca", + "create.subtitle.funnel_flap": "Embudo aletea", + "create.subtitle.schematicannon_finish": "Esquematicañón suena", + "create.subtitle.haunted_bell_use": "Campana maldita suena", "create.subtitle.scroll_value": "", - "create.subtitle.crafter_craft": "", + "create.subtitle.crafter_craft": "Ensamblador mecánico acaba", "create.subtitle.controller_put": "", - "create.subtitle.cranking": "", - "create.subtitle.wrench_remove": "", - "create.subtitle.cogs": "", - "create.subtitle.slime_added": "", - "create.subtitle.wrench_rotate": "", - "create.subtitle.potato_hit": "", - "create.subtitle.saw_activate_wood": "", - "create.subtitle.haunted_bell_convert": "", - "create.subtitle.deployer_polish": "", - "create.subtitle.deny": "", + "create.subtitle.cranking": "Manivela gira", + "create.subtitle.wrench_remove": "Componente se rompe", + "create.subtitle.sanding_short": "Lijando", + "create.subtitle.cogs": "Engranajes retumban", + "create.subtitle.slime_added": "Pegamento chapotea", + "create.subtitle.wrench_rotate": "Llave inglesa usada", + "create.subtitle.potato_hit": "Impacto de vegetal", + "create.subtitle.saw_activate_wood": "Sierra mecánica activada", + "create.subtitle.haunted_bell_convert": "Campana maldita se despierta", + "create.subtitle.deny": "Pitido denegante", "create.subtitle.controller_click": "", - "create.subtitle.schematicannon_launch_block": "", - "create.subtitle.copper_armor_equip": "", - "create.subtitle.controller_take": "Lectern empties", - "create.subtitle.mechanical_press_activation": "", - "create.subtitle.contraption_assemble": "", - "create.subtitle.crafter_click": "", - "create.subtitle.depot_plop": "", - "create.subtitle.confirm": "", + "create.subtitle.schematicannon_launch_block": "Esquematicañón dispara", + "create.subtitle.copper_armor_equip": "Equipo de buceo tintinea", + "create.subtitle.controller_take": "Atril vaciándose", + "create.subtitle.mechanical_press_activation": "Prensa mecánica apisona", + "create.subtitle.contraption_assemble": "Artefacto animado se mueve", + "create.subtitle.crafter_click": "Ensamblador mecánico suena", + "create.subtitle.depot_plop": "Objeto aterriza", + "create.subtitle.confirm": "Campaneo afirmativo", "_": "->------------------------] Item Descriptions [------------------------<-", - "item.create.example_item.tooltip": "EJEMPLO DE ITEM (sólo un marcador de que este tooltip existe)", - "item.create.example_item.tooltip.summary": "Una breve descripción del elemento. Los puntajes bajos resaltan un término", - "item.create.example_item.tooltip.condition1": "Cuando este", - "item.create.example_item.tooltip.behaviour1": "Entonces este elemento hace esto. (los comportamientos se muestran en el turno)", - "item.create.example_item.tooltip.condition2": "Y cuando esto", + "item.create.example_item.tooltip": "EJEMPLO DE OBJETO (sólo un marcador de que este consejo existe)", + "item.create.example_item.tooltip.summary": "Una breve descripción del objeto. Los puntajes bajos resaltan un término", + "item.create.example_item.tooltip.condition1": "Cuando pasa esto", + "item.create.example_item.tooltip.behaviour1": "Entonces este objeto hace esto. (los comportamientos se muestran en el turno)", + "item.create.example_item.tooltip.condition2": "Y cuando ocurre esto otro", "item.create.example_item.tooltip.behaviour2": "Puedes añadir tantos comportamientos como quieras", "item.create.example_item.tooltip.control1": "Cuando se pulsa [Ctrl]", "item.create.example_item.tooltip.action1": "Se muestran estos controles", @@ -1302,9 +1385,9 @@ "block.create.metal_bracket.tooltip.summary": "Decora tus _ejes_, _engranajes_ y _ductos_ con un poco de robusto refuerzo industrial.", "block.create.seat.tooltip": "ASIENTO", - "block.create.seat.tooltip.summary": "¡Siéntate y disfruta del viaje! Anclará a un jugador en un artilugio en movimiento. También es ideal para muebles estáticos. Viene en una variedad de colores.", + "block.create.seat.tooltip.summary": "¡Siéntate y disfruta del viaje! Anclará al jugador en un artefacto animado. También es ideal para muebles estáticos. Viene en una variedad de colores.", "block.create.seat.tooltip.condition1": "Cuando se hace clic derecho en el asiento", - "block.create.seat.tooltip.behaviour1": "Sienta al jugador en el _asiento_. Pulsa Mayús izdo para dejar el asiento.", + "block.create.seat.tooltip.behaviour1": "Sienta al jugador en el _asiento_. Pulsa Mayús izdo. para dejar el asiento.", "item.create.blaze_cake.tooltip": "PASTEL DE BLAZE", "item.create.blaze_cake.tooltip.summary": "Un delicioso regalo para sus esforzados _quemadores de blaze_. ¡Los pone en marcha!.", @@ -1317,16 +1400,16 @@ "item.create.wand_of_symmetry.tooltip.action1": "_Crea_ o _mueve_ el espejo.", "item.create.wand_of_symmetry.tooltip.control2": "Cuando se hace clic derecho en el aire", "item.create.wand_of_symmetry.tooltip.action2": "_Quita_ el espejo activo.", - "item.create.wand_of_symmetry.tooltip.control3": "Mayús izdo + clic derecho", + "item.create.wand_of_symmetry.tooltip.control3": "Mayús izdo. + clic derecho", "item.create.wand_of_symmetry.tooltip.action3": "Abre la interfaz de configuración.", - "item.create.handheld_worldshaper.tooltip": "WORLDSHAPER", + "item.create.handheld_worldshaper.tooltip": "MOLDEADOR DE MUNDOS", "item.create.handheld_worldshaper.tooltip.summary": "Práctica herramienta para crear _paisajes_ y _características del terreno_.", "item.create.handheld_worldshaper.tooltip.control1": "Cuando se hace clic izquierdo en un bloque", - "item.create.handheld_worldshaper.tooltip.action1": "Establece los bloques colocados por la herramienta en el bloque objetivo.", + "item.create.handheld_worldshaper.tooltip.action1": "Selecciona ese bloque para que lo replique la herramienta.", "item.create.handheld_worldshaper.tooltip.control2": "Cuando se hace clic derecho en un bloque", "item.create.handheld_worldshaper.tooltip.action2": "Aplica el _pincel_ y la _herramienta_ actualmente seleccionadas en el lugar deseado.", - "item.create.handheld_worldshaper.tooltip.control3": "Mayús izdo + clic derecho", + "item.create.handheld_worldshaper.tooltip.control3": "Mayús izdo. + clic derecho", "item.create.handheld_worldshaper.tooltip.action3": "Abre la interfaz de configuración.", "item.create.tree_fertilizer.tooltip": "FERTILIZANTE PARA ÃRBOLES", @@ -1342,11 +1425,11 @@ "item.create.extendo_grip.tooltip.behaviour2": "No se utilizará _durabilidad_. En su lugar, la _presión del aire_ se drena desde el tanque", "item.create.potato_cannon.tooltip": "CANÓN DE PATATAS", - "item.create.potato_cannon.tooltip.summary": "Fwoomp! Lanza tus verduras caseras a tus enemigos. Se puede alimentar con la presión de aire de un _depósito trasero de cobre_", + "item.create.potato_cannon.tooltip.summary": "¡Buuum! Lanza verduras caseras a tus enemigos. Se puede alimentar con la presión de aire de un _depósito trasero de cobre_", "item.create.potato_cannon.tooltip.condition1": "Cuando se usa clic derecho", - "item.create.potato_cannon.tooltip.behaviour1": "_Dispara_ un objeto adecuado desde tu inventario_.", + "item.create.potato_cannon.tooltip.behaviour1": "_Dispara_ un objeto adecuado desde tu _inventario_.", "item.create.potato_cannon.tooltip.condition2": "Mientras se usa un depósito trasero de cobre", - "item.create.potato_cannon.tooltip.behaviour2": "No se utilizará _durabilidad_. En su lugar, la _presión del aire_ se drena desde el tanque", + "item.create.potato_cannon.tooltip.behaviour2": "No se utilizará _durabilidad_. En su lugar, la _presión del aire_ se drena del tanque", "item.create.filter.tooltip": "FILTRO", "item.create.filter.tooltip.summary": "Controla las _salidas_ y _entradas_ de los _dispositivos logísticos_ con más precisión, comparándolas con un _conjunto de objetos_ o varios _filtros anidados_.", @@ -1366,10 +1449,10 @@ "item.create.empty_schematic.tooltip.summary": "Se utiliza como 'ingrediente' de las recetas y para escribir en la _tabla de esquemas_.", "item.create.schematic.tooltip": "ESQUEMA", - "item.create.schematic.tooltip.summary": "Contiene una estructura para ser posicionada y colocada en el mundo. Posiciona el holograma como desees y utiliza un _cañón de esquemas_ para construirla.", + "item.create.schematic.tooltip.summary": "Contiene una estructura para ser posicionada y colocada en el mundo. Posiciona el holograma como desees y utiliza un _esquematicañón_ para construirla.", "item.create.schematic.tooltip.condition1": "Cuando se sostiene en la mano", "item.create.schematic.tooltip.behaviour1": "Se puede posicionar utilizando las herramientas en pantalla.", - "item.create.schematic.tooltip.control1": "Mayús izdo + clic derecho", + "item.create.schematic.tooltip.control1": "Mayús izdo. + clic derecho", "item.create.schematic.tooltip.action1": "Abre una _interfaz_ para introducir las _coordenadas_ exactas.", "item.create.schematic_and_quill.tooltip": "ESQUEMA Y PLUMA", @@ -1382,10 +1465,10 @@ "item.create.schematic_and_quill.tooltip.action1": "Selecciona un punto de esquina / confirmar guardar.", "item.create.schematic_and_quill.tooltip.control2": "Cuando mantiene [Ctrl]", "item.create.schematic_and_quill.tooltip.action2": "Selecciona puntos en _medio del aire_. Rueda del ratón para ajustar la distancia.", - "item.create.schematic_and_quill.tooltip.control3": "Mayús izdo + clic derecho", + "item.create.schematic_and_quill.tooltip.control3": "Mayús izdo. + clic derecho", "item.create.schematic_and_quill.tooltip.action3": "_Reinicia_ y elimina la selección.", - "block.create.schematicannon.tooltip": "CAÑÓN DE ESQUEMAS", + "block.create.schematicannon.tooltip": "ESQUEMATICAÑÓN", "block.create.schematicannon.tooltip.summary": "Dispara bloques para recrear un _esquema_ desplegado en el mundo. Utiliza objetos de los inventarios adyacentes y _pólvora_ como combustible.", "block.create.schematicannon.tooltip.condition1": "Cuando se hace clic derecho", "block.create.schematicannon.tooltip.behaviour1": "Abre la interfaz.", @@ -1395,7 +1478,7 @@ "block.create.schematic_table.tooltip.condition1": "Cuando se da un esquema vacío", "block.create.schematic_table.tooltip.behaviour1": "Carga un archivo elegido de la carpeta de esquemas.", - "item.create.goggles.tooltip": "GAFAS DEL CONSTRUCTOR", + "item.create.goggles.tooltip": "GAFAS DEL INGENIERO", "item.create.goggles.tooltip.summary": "Un par de gafas para aumentar tu visión con útil información _cinética_.", "item.create.goggles.tooltip.condition1": "Cuando se llevan puestas", "item.create.goggles.tooltip.behaviour1": "Muestra _indicadores de color_ correspondientes al _nivel de velocidad_ de un componente cinético colocado, así como el _impacto de estrés_ y la _carga_ de los componentes individuales.", @@ -1405,10 +1488,10 @@ "item.create.goggles.tooltip.behaviour3": "Muestra información detallada sobre la _carga_ del bloque y los _líquidos_ almacenados en su interior.", "item.create.wrench.tooltip": "LLAVE INGLESA", - "item.create.wrench.tooltip.summary": "Una herramienta útil para trabajar en artilugios cinéticos. Se puede utilizar para _rotar_, _desmantelar_ y para _configurar_ componentes.", + "item.create.wrench.tooltip.summary": "Una herramienta útil para trabajar en sistemas cinéticos. Se puede utilizar para _rotar_, _desmantelar_ y para _configurar_ componentes.", "item.create.wrench.tooltip.control1": "Cuando se hace clic derecho en un bloque cinético", "item.create.wrench.tooltip.action1": "Rota los componentes hacia o desde la cara con la que ha interactuado.", - "item.create.wrench.tooltip.control2": "Mayús izdo + clic derecho", + "item.create.wrench.tooltip.control2": "Mayús izdo. + clic derecho", "item.create.wrench.tooltip.action2": "Desmonta los _componentes cinéticos_ y los devuelve a tu inventario_.", "block.create.nozzle.tooltip": "BOQUILLA", @@ -1437,25 +1520,20 @@ "block.create.stockpile_switch.tooltip.behaviour1": "Abre la interfaz de configuración.", "block.create.content_observer.tooltip": "OBSERVADOR DE CONTENIDO", - "block.create.content_observer.tooltip.summary": "_Detecta objetos_ dentro de _contenedores_ y _transportadores_ que coincidan con un _filtro_ configurado. Mientras el _inventario_, la _cinta_ o la _canaleta_ observados _contengan_ un objeto que coincida, este componente emitirá una _señal de redstone_. Cuando un embudo observado _transfiere_ un objeto coincidente, este componente emitirá un _pulso de redstone_.", - "block.create.content_observer.tooltip.condition1": "Al observar un contenedor...", - "block.create.content_observer.tooltip.behaviour1": "Emite un pulso de Redstone mientras el contenedor observado tiene un contenido coincidente.", - "block.create.content_observer.tooltip.condition2": "Al observar un embudo...", + "block.create.content_observer.tooltip.summary": "_Detecta objetos_ o _fluidos_ dentro de _contenedores_, _tuberías_ o _cintas mecánicas_ que coincidan con un _filtro_ configurado.", + "block.create.content_observer.tooltip.condition1": "Al observar un contenedor", + "block.create.content_observer.tooltip.behaviour1": "Emite una señal de Redstone mientras que el contenedor observado contenga lo mismo.", + "block.create.content_observer.tooltip.condition2": "Al observar un embudo", "block.create.content_observer.tooltip.behaviour2": "Emite un pulso de Redstone cuando se transfiere un objeto que coincide.", - "block.create.adjustable_crate.tooltip": "CAJA AJUSTABLE", - "block.create.adjustable_crate.tooltip.summary": "Este _contenedor de objetos_ permite el control manual de su capacidad. Puede contener hasta _16 pilas_ de cualquier objeto. Soporta _comparadores de redstone_.", - "block.create.adjustable_crate.tooltip.condition1": "Cuando se hace clic derecho", - "block.create.adjustable_crate.tooltip.behaviour1": "Abre la interfaz.", - "block.create.creative_crate.tooltip": "CAJA CREATIVA", - "block.create.creative_crate.tooltip.summary": "Este _contenedor de objetos_ permite la replicación infinita de cualquier elemento. Colócalo junto a un _cañón de esquemas_ para eliminar cualquier requisito de material.", - "block.create.creative_crate.tooltip.condition1": "Cuando el elemento está en la ranura para filtros", - "block.create.creative_crate.tooltip.behaviour1": "Todo lo que se _extraiga_ de este contenedor proporcionará un suministro _ilimitado_ del elemento especificado. Los objetos _insertados_ en esta caja serán _evitados_.", + "block.create.creative_crate.tooltip.summary": "Este _contenedor de objetos_ permite la replicación infinita de cualquier objeto. Colócalo junto a un _esquematicañón_ para eliminar cualquier requisito de material.", + "block.create.creative_crate.tooltip.condition1": "Cuando el objeto está en la ranura para filtros", + "block.create.creative_crate.tooltip.behaviour1": "Todo lo que se _extraiga_ de este contenedor proporcionará un suministro _ilimitado_ del objeto especificado. Los objetos _insertados_ en esta caja serán _evitados_.", "item.create.creative_blaze_cake.tooltip": "PASTEL CREATIVO", "item.create.creative_blaze_cake.tooltip.summary": "Un regalo muy especial para los _Quemadores de Blaze_ que permite _controlar su nivel de calor_. Después de comer este pastel, los Quemadores de blaze _nunca se quedarán sin combustible_.", - "item.create.creative_blaze_cake.tooltip.condition1": "Click derecho en un Quemador de blaze", + "item.create.creative_blaze_cake.tooltip.condition1": "Clic derecho en un Quemador de blaze", "item.create.creative_blaze_cake.tooltip.behaviour1": "Bloquea el nivel de calor del Quemador de blaze. Si se utiliza de nuevo, _cicla_ el nivel de calor del Quemador de blaze.", "block.create.controller_rail.tooltip": "RAÃL DE CONTROL", @@ -1485,12 +1563,12 @@ "item.create.linked_controller.tooltip.summary": "Permite el control manual de las frecuencias de _enlaces de redstone_ asignadas a sus seis botones.", "item.create.linked_controller.tooltip.condition1": "Al hacer clic derecho", "item.create.linked_controller.tooltip.behaviour1": "Activa el _controlador_. Los _controles de movimiento_ se adquieren mientras está activo.", - "item.create.linked_controller.tooltip.condition2": "Al usar Mayús izdo + clic derecho", + "item.create.linked_controller.tooltip.condition2": "Al usar Mayús izdo. + clic derecho", "item.create.linked_controller.tooltip.behaviour2": "Abre la interfaz de configuración manual.", "item.create.linked_controller.tooltip.condition3": "Al usar clic derecho en un receptor de enlaces de redstone", "item.create.linked_controller.tooltip.behaviour3": "Activa el _modo de vinculación_, pulsa uno de los _seis controles_ para vincularlo a la _frecuencia de los enlaces_.", "item.create.linked_controller.tooltip.condition4": "Clic derecho en un atril", - "item.create.linked_controller.tooltip.behaviour4": "Coloca el controlador en el atril para facilitar su activación. (Clic derecho + mayús izq. para recuperarlo)", + "item.create.linked_controller.tooltip.behaviour4": "Coloca el controlador en el atril para facilitar su activación. (Clic derecho + Mayús izdo. para recuperarlo)", "item.create.diving_helmet.tooltip": "CASCO DE BUCEO", "item.create.diving_helmet.tooltip.summary": "Junto con un _depósito trasero de cobre_, permite que el usuario pueda respirar bajo el agua durante un tiempo prolongado.", @@ -1507,7 +1585,7 @@ "item.create.diving_boots.tooltip": "BOTAS DE BUCEO", "item.create.diving_boots.tooltip.summary": "Un par de _botas_ pesadas, que permiten atravesar mejor el suelo del océano.", "item.create.diving_boots.tooltip.condition1": "Cuando se llevan puestas", - "item.create.diving_boots.tooltip.behaviour1": "El portador se hunde rápido y no puede nadar. Concede la capacidad de caminar y saltar bajo el agua. Al portador no le afectarán las _correas mecánicas.", + "item.create.diving_boots.tooltip.behaviour1": "El portador se hunde rápido y no puede nadar. Concede la capacidad de caminar y saltar bajo el agua. Al portador no le afectarán las _cintas mecánicas_.", "item.create.crafting_blueprint.tooltip": "PLANO DE ELABORACIÓN", "item.create.crafting_blueprint.tooltip.summary": "Colocado en una pared, puede utilizarse para especificar la disposición de los ingredientes para facilitar la elaboración manual. Cada ranura representa una receta", @@ -1517,14 +1595,19 @@ "item.create.crafting_blueprint.behaviour2": "Aplica la receta configurada con los ingredientes que se encuentran en tu inventario. Se puede utilizar para fabricar hasta una pila de objetos.", "item.create.minecart_coupling.tooltip": "ENSAMBLADOR DE VAGONETAS", - "item.create.minecart_coupling.tooltip.summary": "_Encadena_ todas tus _vagonetas_ o _artilugios de vagoneta_ para formar un majestuoso _tren_.", + "item.create.minecart_coupling.tooltip.summary": "_Encadena_ todas tus _vagonetas_ o _artefactos móviles de vagoneta_ para formar un majestuoso _tren_.", "item.create.minecart_coupling.tooltip.condition1": "Cuando se utiliza en vagonetas", "item.create.minecart_coupling.tooltip.behaviour1": "_Acopla_ dos vagonetas, intentando mantenerlas a una _distancia constante_ mientras se mueven.", + "item.create.experience_nugget.tooltip": "PEPITA DE EXPERIENCIA", + "item.create.experience_nugget.tooltip.summary": "_¡Ding!_ Una partícula de _inspiración_ de tus fantásticas invenciones.", + "item.create.experience_nugget.tooltip.condition1": "Cuando se usa", + "item.create.experience_nugget.tooltip.behaviour1": "_Otorga_ los puntos de _experiencia_ contenidos.", + "block.create.peculiar_bell.tooltip": "CAMPANA PECULIAR", "block.create.peculiar_bell.tooltip.summary": "Una campana decorativa de latón. Al colocarla sobre un _Fuego del alma_ o una _Fogata del alma_ puede producirse una transformación espeluznante...", - "block.create.haunted_bell.tooltip": "CAMPANA ENCANTADA", + "block.create.haunted_bell.tooltip": "CAMPANA MALDITA", "block.create.haunted_bell.tooltip.summary": "Una _campana maldita_ perseguida por las almas perdidas del Nether", "block.create.haunted_bell.tooltip.condition1": "Cuando se sostiene o suena", "block.create.haunted_bell.tooltip.behaviour1": "Resalta los _puntos sin luz_ cercanos en los que pueden aparecer las _criaturas hostiles_.", @@ -1551,7 +1634,7 @@ "create.ponder.index_title": "Ãndice", "create.ponder.shared.rpm16": "16 RPM", "create.ponder.shared.behaviour_modify_wrench": "Este comportamiento puede modificarse mediante una llave inglesa", - "create.ponder.shared.storage_on_contraption": "Los inventarios unidos al artilugio recogerán sus producciones automáticamente", + "create.ponder.shared.storage_on_contraption": "Los inventarios unidos a un artefacto animado recogerán sus producciones automáticamente", "create.ponder.shared.sneak_and": "Mayús izdo. +", "create.ponder.shared.rpm8": "8 RPM", "create.ponder.shared.ctrl_and": "Ctrl +", @@ -1561,13 +1644,13 @@ "create.ponder.tag.redstone": "Componentes lógicos", "create.ponder.tag.redstone.description": "Componentes que ayudan a la ingeniería de redstone", "create.ponder.tag.contraption_assembly": "Utilidades para adjuntar bloques", - "create.ponder.tag.contraption_assembly.description": "Herramientas y componentes utilizados para montar estructuras con movimiento, como un artilugio animado", + "create.ponder.tag.contraption_assembly.description": "Herramientas y componentes utilizados para montar artefactos animados", "create.ponder.tag.fluids": "Manipuladores de fluidos", "create.ponder.tag.fluids.description": "Componentes que ayudan a transportar y utilizar fluidos", "create.ponder.tag.decoration": "Estética", "create.ponder.tag.decoration.description": "Componentes utilizados principalmente con fines decorativos", "create.ponder.tag.windmill_sails": "Velas para los rodamientos de los molinos de viento", - "create.ponder.tag.windmill_sails.description": "Bloques que cuentan para la fuerza de un artefacto de molino de viento cuando se ensamblan. Cada uno de ellos tiene la misma eficacia al hacerlo.", + "create.ponder.tag.windmill_sails.description": "Bloques que cuentan para la fuerza de un artefacto estacionario de molino de viento cuando se ensamblan. Cada uno de ellos tiene la misma eficacia al hacerlo.", "create.ponder.tag.arm_targets": "Objetivos para los brazos mecánicos", "create.ponder.tag.arm_targets.description": "Componentes que pueden seleccionarse como entradas o salidas del brazo mecánico", "create.ponder.tag.kinetic_appliances": "Dispositivos cinéticos", @@ -1575,37 +1658,25 @@ "create.ponder.tag.kinetic_sources": "Fuentes cinéticas", "create.ponder.tag.kinetic_sources.description": "Componentes que generan fuerza rotacional", "create.ponder.tag.movement_anchor": "Anclas de movimiento", - "create.ponder.tag.movement_anchor.description": "Componentes que permiten crear artilugios en movimiento, animando una estructura anexa de diversas maneras", + "create.ponder.tag.movement_anchor.description": "Componentes que permiten crear artefactos en movimiento, animando una estructura anexa de diversas maneras", "create.ponder.tag.kinetic_relays": "Transmisores cinéticos", "create.ponder.tag.kinetic_relays.description": "Componentes que ayudan a transmitir la fuerza rotacional en otro lugar", - "create.ponder.tag.contraption_actor": "Actores del artilugio", - "create.ponder.tag.contraption_actor.description": "Componentes que exponen un comportamiento especial cuando están unidos a un artilugio en movimiento", + "create.ponder.tag.contraption_actor": "Actores de artefactos animados", + "create.ponder.tag.contraption_actor.description": "Componentes que tienen un comportamiento especial cuando están unidos a un artefacto animado", "create.ponder.tag.creative": "Modo creativo", "create.ponder.tag.creative.description": "Componentes que no suelen estar disponibles para el Modo Supervivencia", "create.ponder.tag.logistics": "Transporte de objetos", "create.ponder.tag.logistics.description": "Componentes que ayudan a desplazar los objetos", - "create.ponder.adjustable_pulse_repeater.header": "Controlar señales mediante repetidores de pulsos ajustables", - "create.ponder.adjustable_pulse_repeater.text_1": "Los repetidores de pulsos ajustables emiten un pulso corto con un retardo", - "create.ponder.adjustable_pulse_repeater.text_2": "Con la rueda del ratón se puede configurar el tiempo de carga", - "create.ponder.adjustable_pulse_repeater.text_3": "Los retrasos configurados pueden ser de hasta 30 minutos", - - "create.ponder.adjustable_repeater.header": "Controlar señales mediante repetidores ajustables", - "create.ponder.adjustable_repeater.text_1": "Los repetidores ajustables se comportan de forma similar a los repetidores normales", - "create.ponder.adjustable_repeater.text_2": "Se cargan durante un tiempo determinado...", - "create.ponder.adjustable_repeater.text_3": "...y se enfrían durante el mismo tiempo", - "create.ponder.adjustable_repeater.text_4": "Con la rueda del ratón se puede configurar el tiempo de carga", - "create.ponder.adjustable_repeater.text_5": "Los retrasos configurados pueden variar hasta 30 minutos", - "create.ponder.analog_lever.header": "Controlar señales mediante la palanca analógica", "create.ponder.analog_lever.text_1": "Las palancas analógicas son una fuente compacta y precisa de energía de redstone", "create.ponder.analog_lever.text_2": "Haz clic derecho para aumentar su potencia analógica", - "create.ponder.analog_lever.text_3": "Usa Mayús izdo + clic derecho para volver a disminuir su potencia", + "create.ponder.analog_lever.text_3": "Usa Mayús izdo. + clic derecho para volver a disminuir su potencia", "create.ponder.andesite_tunnel.header": "Usar túneles de andesita", - "create.ponder.andesite_tunnel.text_1": "Los túneles de andesita se pueden utilizar para tapar las correas", + "create.ponder.andesite_tunnel.text_1": "Los túneles de andesita se pueden utilizar para tapar las cintas mecánicas", "create.ponder.andesite_tunnel.text_2": "Siempre que un túnel de andesita tenga conexiones a los lados...", - "create.ponder.andesite_tunnel.text_3": "...dividirá exactamente un elemento de cualquier pila que pase", + "create.ponder.andesite_tunnel.text_3": "...dividirá exactamente un objeto de cualquier pila que pase", "create.ponder.andesite_tunnel.text_4": "El resto continuará su camino", "create.ponder.basin.header": "Procesar objetos en la cuenca", @@ -1624,28 +1695,28 @@ "create.ponder.bearing_modes.text_2": "Se puede configurar para que nunca vuelva a los bloques sólidos, o sólo cerca del ángulo en el que comenzó", "create.ponder.belt_casing.header": "Correas revestidas", - "create.ponder.belt_casing.text_1": "Se puede utilizar revestidor de latón o andesita para decorar las correas", + "create.ponder.belt_casing.text_1": "Se puede utilizar revestidor de latón o andesita para decorar las cintas mecánicas", "create.ponder.belt_casing.text_2": "Se puede utilizar una llave inglesa para quitar el revestimiento", - "create.ponder.belt_connector.header": "El uso de las correas mecánicas", - "create.ponder.belt_connector.text_1": "Al hacer clic derecho en dos ejes con una correa mecánica se conectarán entre sí", - "create.ponder.belt_connector.text_2": "Las selecciones accidentales pueden ser canceladas con Mayús izdo + clic derecho", - "create.ponder.belt_connector.text_3": "Se pueden añadir ejes adicionales en toda la correa", - "create.ponder.belt_connector.text_4": "Los ejes conectados a través de correas girarán con velocidad y dirección idénticas", + "create.ponder.belt_connector.header": "El uso de las cintas", + "create.ponder.belt_connector.text_1": "Al hacer clic derecho en dos ejes con una cinta, se conectarán entre sí", + "create.ponder.belt_connector.text_2": "Las selecciones accidentales pueden ser canceladas con Mayús izdo. + clic derecho", + "create.ponder.belt_connector.text_3": "Se pueden añadir ejes adicionales en toda la cinta mecánica", + "create.ponder.belt_connector.text_4": "Los ejes conectados a través de cintas mecánicas girarán con velocidad y dirección idénticas", "create.ponder.belt_connector.text_5": "Los ejes añadidos se pueden quitar con la llave inglesa", - "create.ponder.belt_connector.text_6": "Las correas mecánicas se pueden teñir con fines estéticos", + "create.ponder.belt_connector.text_6": "Las cintas mecánicas se pueden teñir con fines estéticos", - "create.ponder.belt_directions.header": "Orientaciones válidas para las correas mecánicas", - "create.ponder.belt_directions.text_1": "Las correas mecánicas no pueden conectarse en direcciones arbitrarias", + "create.ponder.belt_directions.header": "Orientaciones válidas para las cintas mecánicas", + "create.ponder.belt_directions.text_1": "Las cintas no pueden conectarse en direcciones arbitrarias", "create.ponder.belt_directions.text_2": "1. Pueden conectarse horizontalmente", "create.ponder.belt_directions.text_3": "2. Pueden conectarse en diagonal", "create.ponder.belt_directions.text_4": "3. Pueden conectarse verticalmente", "create.ponder.belt_directions.text_5": "4. Y pueden conectar ejes verticales horizontalmente", "create.ponder.belt_directions.text_6": "Estas son todas las direcciones posibles. Pueden abarcar cualquier longitud entre 2 y 20 bloques", - "create.ponder.belt_transport.header": "El uso de las correas mecánicas para la logística", - "create.ponder.belt_transport.text_1": "Las correas mecánicas transportan objetos y otras entidades", - "create.ponder.belt_transport.text_2": "Haz clic derecho con la mano vacía para sacar objetos de una 'cinta'", + "create.ponder.belt_transport.header": "El uso de las cintas mecánicas para la logística", + "create.ponder.belt_transport.text_1": "Las cintas mecánicas transportan objetos y otras entidades", + "create.ponder.belt_transport.text_2": "Haz clic derecho con la mano vacía para sacar objetos de una cinta mecánica", "create.ponder.blaze_burner.header": "Alimentar quemadores de blaze", "create.ponder.blaze_burner.text_1": "Los quemadores de blaze pueden proporcionar calor a los objetos procesados en una cuenca", @@ -1660,7 +1731,7 @@ "create.ponder.brass_funnel.text_4": "El uso de objetos en la ranura de filtrado restringirá el embudo para transferir sólo las pilas que coincidan.", "create.ponder.brass_tunnel.header": "Usar túneles de latón", - "create.ponder.brass_tunnel.text_1": "Los túneles de latón pueden utilizarse para tapar las correas", + "create.ponder.brass_tunnel.text_1": "Los túneles de latón pueden utilizarse para tapar cintas mecánicas", "create.ponder.brass_tunnel.text_2": "Tienen ranuras de filtro en cada lado abierto", "create.ponder.brass_tunnel.text_3": "Los filtros en las conexiones de entrada simplemente bloquean los objetos que no coincidan", "create.ponder.brass_tunnel.text_4": "Los filtros en las conexiones de salida pueden utilizarse para ordenar los objetos por tipo", @@ -1673,7 +1744,7 @@ "create.ponder.brass_tunnel_modes.text_1": "Mediante una llave inglesa se puede configurar el comportamiento de distribución de los túneles de latón", "create.ponder.brass_tunnel_modes.text_10": "'Sincronizar entradas' es una configuración única de los túneles de latón", "create.ponder.brass_tunnel_modes.text_11": "Las entradas sólo pueden pasar si cada túnel del grupo tiene una en espera", - "create.ponder.brass_tunnel_modes.text_12": "Esto asegura que todas las correas afectadas suministren objetos al mismo tiempo", + "create.ponder.brass_tunnel_modes.text_12": "Esto asegura que todas las cintas mecánicas afectadas suministren objetos al mismo tiempo", "create.ponder.brass_tunnel_modes.text_2": "El modo División intentará distribuir la pila uniformemente entre las salidas disponibles", "create.ponder.brass_tunnel_modes.text_3": "Si una salida no puede tomar más objetos, se saltará", "create.ponder.brass_tunnel_modes.text_4": "El modo División forzada nunca saltará las salidas, y en su lugar esperará hasta que estén libres", @@ -1685,24 +1756,24 @@ "create.ponder.cart_assembler.header": "Mover estructuras usando ensambladores de vagonetas", "create.ponder.cart_assembler.text_1": "Los ensambladores de vagonetas montan estructuras adjuntas a las vagonetas que pasan", - "create.ponder.cart_assembler.text_2": "Sin una señal de redstone, desmonta los artilugios de vagoneta que pasan de nuevo en bloques", - "create.ponder.cart_assembler.text_3": "El uso de una llave inglesa en una vagoneta te permitirá llevar el artilugio a otro lugar", + "create.ponder.cart_assembler.text_2": "Sin una señal de redstone, desmonta los artefactos móviles de vagoneta que pasan de nuevo en bloques", + "create.ponder.cart_assembler.text_3": "El uso de una llave inglesa en una vagoneta te permitirá llevarte el artefacto móvil a otro lugar", - "create.ponder.cart_assembler_dual.header": "Ensamblajes de artilugios de vagoneta", + "create.ponder.cart_assembler_dual.header": "Montando artefactos móviles de vagoneta", "create.ponder.cart_assembler_dual.text_1": "Siempre que dos ensambladores de vagoneta compartan una estructura adjunta...", - "create.ponder.cart_assembler_dual.text_2": "...al alimentar a cualquiera de ellos se creará un artilugio de vagoneta", + "create.ponder.cart_assembler_dual.text_2": "...al alimentar a cualquiera de ellos se creará un artefacto móvil de vagoneta", "create.ponder.cart_assembler_dual.text_3": "Las vagonetas se comportarán como las conectadas a través del acoplamiento de vagoneta", - "create.ponder.cart_assembler_modes.header": "Configurar la orientación de los artilugios de vagonetas", - "create.ponder.cart_assembler_modes.text_1": "Los artilugios de vagonetas girarán para orientarse hacia el movimiento de sus vagonetas", + "create.ponder.cart_assembler_modes.header": "Configurar la orientación de los artefactos móviles de vagonetas", + "create.ponder.cart_assembler_modes.text_1": "Los artefactos móviles de vagonetas girarán para orientarse hacia el movimiento de sus vagonetas", "create.ponder.cart_assembler_modes.text_2": "Esta flecha indica qué lado de la estructura se considerará la parte delantera", - "create.ponder.cart_assembler_modes.text_3": "Si el ensamblador está configurado para bloquear la rotación, la orientación de los artilugios nunca cambiará", + "create.ponder.cart_assembler_modes.text_3": "Si el ensamblador está configurado para bloquear la rotación, la orientación de los artefactos móviles nunca cambiará", "create.ponder.cart_assembler_rails.header": "Otros tipos de vagonetas y raíles", "create.ponder.cart_assembler_rails.text_1": "Los ensambladores de vagonetas en raíles normales no afectarán el movimiento de las vagonetas que pasen", "create.ponder.cart_assembler_rails.text_2": "Cuando se encuentre en un raíl motorizado o en un raíl de control, las vagonetas se mantendrán en su sitio hasta que sea motorizado", "create.ponder.cart_assembler_rails.text_3": "Se pueden utilizar otros tipos de vagonetas como anclaje", - "create.ponder.cart_assembler_rails.text_4": "Los artilugios de vagonetas de horno se mantendrán alimentados a sí mismos, sacando combustible de cualquier inventario adjunto", + "create.ponder.cart_assembler_rails.text_4": "Los artefactos móviles de vagonetas de horno se mantendrán alimentados a sí mismos, sacando combustible de cualquier inventario adjunto", "create.ponder.chain_drive.header": "Transmitir fuerza rotacional con las cadenas de transmisión", "create.ponder.chain_drive.text_1": "Las cadenas de transmisión transmiten la rotación entre sí en fila", @@ -1713,7 +1784,7 @@ "create.ponder.chain_gearshift.text_1": "Las cadenas de transmisión ajustables sin alimentación se comportan exactamente como las cadenas de transmisión", "create.ponder.chain_gearshift.text_2": "Cuando están alimentadas, la velocidad transmitida a las demás cadenas de transmisión de la fila se duplica", "create.ponder.chain_gearshift.text_3": "Siempre que la cadena de transmisión alimentada no esté en el origen, su velocidad se reducirá a la mitad", - "create.ponder.chain_gearshift.text_4": "En ambos casos, las cadenas de transmisión de la fila siempre funcionan a 2 veces la velocidad de la cadena de transmisión alimentada", + "create.ponder.chain_gearshift.text_4": "En ambos casos, las cadenas de transmisión de la fila siempre funcionan al doble de la velocidad de la cadena de transmisión alimentada", "create.ponder.chain_gearshift.text_5": "Utilizando señales analógicas, la relación puede ajustarse con mayor precisión, entre 1 y 2", "create.ponder.chain_gearshift.text_6": "12 RPM", @@ -1724,8 +1795,8 @@ "create.ponder.chute_upward.header": "Transportar objetos hacia arriba mediante ductos", "create.ponder.chute_upward.text_1": "Usando ventiladores revestidos en la parte superior o inferior, un ducto puede transportar objetos hacia arriba", - "create.ponder.chute_upward.text_2": "Al inspeccionar los ductos con las gafas del constructor, se revela información sobre la dirección del movimiento", - "create.ponder.chute_upward.text_3": "En el extremo 'bloqueado', los objetos tendrán que ser insertados/tomados de los lados", + "create.ponder.chute_upward.text_2": "Al inspeccionar los ductos con las gafas del ingeniero, se revela información sobre la dirección del movimiento", + "create.ponder.chute_upward.text_3": "En el extremo 'bloqueado', los objetos tendrán que ser insertados/sacados de los lados", "create.ponder.clockwork_bearing.header": "Animar estructuras con rodamientos tipo reloj", "create.ponder.clockwork_bearing.text_1": "Los rodamientos tipo reloj se fijan a los bloques que tienen delante", @@ -1742,17 +1813,22 @@ "create.ponder.clutch.text_2": "Cuando se alimentan con redstone, rompen la conexión", "create.ponder.cog_speedup.header": "Cambiar de marchas con engranajes", - "create.ponder.cog_speedup.text_1": "Los engranajes grandes y pequeños pueden conectarse en diagonal", - "create.ponder.cog_speedup.text_2": "Al cambiar de engranajes grandes a pequeños, la velocidad rotacional se duplicará", + "create.ponder.cog_speedup.text_1": "Los engranajes grandes y normales pueden conectarse en diagonal", + "create.ponder.cog_speedup.text_2": "Al cambiar de engranajes grandes a normales, la velocidad rotacional se duplicará", "create.ponder.cog_speedup.text_3": "Inversamente, la velocidad rotacional se reducirá a la mitad", "create.ponder.cogwheel.header": "Transmitir fuerza rotacional mediante engranajes", "create.ponder.cogwheel.text_1": "Los engranajes transmitirán la rotación a otros engranajes adyacentes", "create.ponder.cogwheel.text_2": "Los ejes adyacentes conectados así, girarán en direcciones opuestas", - "create.ponder.creative_fluid_tank.header": "Tanque de fluídos creativo", + "create.ponder.cogwheel_casing.header": "Revestir engranajes", + "create.ponder.cogwheel_casing.text_1": "Los revestimientos de latón o andesita pueden ser usados para decorar los engranajes", + "create.ponder.cogwheel_casing.text_2": "Los componentes que se añadan por la salida del eje no se conectarán", + "create.ponder.cogwheel_casing.text_3": "La llave inglesa puede usarse para alternar las conexiones", + + "create.ponder.creative_fluid_tank.header": "Tanque de fluidos creativo", "create.ponder.creative_fluid_tank.text_1": "Los depósitos de fluidos creativos pueden utilizarse para proporcionar un suministro de fluidos sin fondo", - "create.ponder.creative_fluid_tank.text_2": "Haga clic con el botón derecho en un elemento que contenga fluido para configurarlo", + "create.ponder.creative_fluid_tank.text_2": "Haga clic con el botón derecho en un objeto que contenga fluido para configurarlo", "create.ponder.creative_fluid_tank.text_3": "Las redes de tuberías pueden ahora extraer sin cesar el fluido asignado del depósito", "create.ponder.creative_fluid_tank.text_4": "Cualquier fluido empujado de vuelta a un tanque de fluido creativo será anulado", @@ -1771,7 +1847,7 @@ "create.ponder.deployer.text_10": "Haz clic derecho en el frente para darle un objeto a utilizar", "create.ponder.deployer.text_11": "Los objetos también pueden ser insertados automáticamente", "create.ponder.deployer.text_12": "Los desplegadores llevan una ranura de filtro", - "create.ponder.deployer.text_13": "Cuando se establece un filtro, sólo se activa mientras se mantiene un elemento coincidente", + "create.ponder.deployer.text_13": "Cuando se establece un filtro, sólo se activa mientras se mantiene un objeto coincidente", "create.ponder.deployer.text_14": "Ahora sólo se pueden insertar los objetos que coincidan con el filtro...", "create.ponder.deployer.text_15": "...y sólo se extraerán los objetos que no coincidan", "create.ponder.deployer.text_2": "Siempre interactuará con la posición 2 bloques delante de sí mismo", @@ -1783,9 +1859,9 @@ "create.ponder.deployer.text_8": "Cosechar bloques", "create.ponder.deployer.text_9": "Y atacar criaturas", - "create.ponder.deployer_contraption.header": "Usar desplegadores en artilugios", - "create.ponder.deployer_contraption.text_1": "Siempre que los desplegadores se muevan como parte de un artilugio animado...", - "create.ponder.deployer_contraption.text_2": "Se activan en cada ubicación visitada, utilizando objetos de los inventarios de cualquier parte del artilugio", + "create.ponder.deployer_contraption.header": "Usar desplegadores en artefactos animados", + "create.ponder.deployer_contraption.text_1": "Siempre que los desplegadores se muevan como parte de un artefacto animado...", + "create.ponder.deployer_contraption.text_2": "Se activan en cada ubicación visitada, utilizando objetos de los inventarios de cualquier parte del artefacto", "create.ponder.deployer_contraption.text_3": "La ranura para filtros se puede utilizar para especificar qué objetos tirar", "create.ponder.deployer_modes.header": "Modos del desplegador", @@ -1793,9 +1869,9 @@ "create.ponder.deployer_modes.text_2": "Usando una llave inglesa, se puede configurar para imitar un clic izquierdo en su lugar", "create.ponder.deployer_processing.header": "Procesar objetos mediante desplegadores", - "create.ponder.deployer_processing.text_1": "Con un objeto de sujeción ajustado, los desplegadores pueden procesar los objetos proporcionados por debajo de ellos", + "create.ponder.deployer_processing.text_1": "Cuando sujetan el objeto adecuado, los desplegadores pueden procesar los objetos proporcionados por debajo de ellos", "create.ponder.deployer_processing.text_2": "Los objetos de entrada pueden soltarse o colocarse en un depósito bajo el desplegador", - "create.ponder.deployer_processing.text_3": "Cuando los objetos se proporcionan en una 'cinta'...", + "create.ponder.deployer_processing.text_3": "Cuando los objetos se disponen en una cinta mecánica...", "create.ponder.deployer_processing.text_4": "El desplegador los retendrá y procesará automáticamente", "create.ponder.deployer_redstone.header": "Controlar desplegadores con redstone", @@ -1804,9 +1880,9 @@ "create.ponder.deployer_redstone.text_3": "Por lo tanto, un pulso negativo puede ser utilizado para desencadenar exactamente un ciclo de activación", "create.ponder.depot.header": "Usar depósitos", - "create.ponder.depot.text_1": "Los depósitos pueden servir como objetos 'fijos' de la correa", + "create.ponder.depot.text_1": "Los depósitos pueden servir como elementos fijos de una cinta mecánica", "create.ponder.depot.text_2": "Haz clic derecho para colocar o eliminar manualmente objetos del mismo", - "create.ponder.depot.text_3": "Al igual que las correas mecánicas, pueden proporcionar objetos para su procesamiento", + "create.ponder.depot.text_3": "Al igual que en las cintas mecánicas, pueden procesarse objetos", "create.ponder.depot.text_4": "...así como proporcionar objetos a los brazos mecánicos", "create.ponder.empty_blaze_burner.header": "Usar quemadores de blaze vacíos", @@ -1817,7 +1893,7 @@ "create.ponder.empty_blaze_burner.text_5": "La llama puede transformarse utilizando un objeto con alma", "create.ponder.empty_blaze_burner.text_6": "Sin embargo, no son adecuados para la calefacción industrial", - "create.ponder.encased_fluid_pipe.header": "Revestir tuberías de fluídos", + "create.ponder.encased_fluid_pipe.header": "Revestir tuberías de fluidos", "create.ponder.encased_fluid_pipe.text_1": "El revestidor de cobre puede utilizarse para decorar las tuberías de fluidos", "create.ponder.encased_fluid_pipe.text_2": "Además de estar ocultas, las tuberías revestidas están bloqueadas en su estado de conectividad", "create.ponder.encased_fluid_pipe.text_3": "Ya no reaccionará a los bloques vecinos que se añadan o eliminen", @@ -1829,12 +1905,12 @@ "create.ponder.fan_processing.header": "Procesar objetos mediante ventiladores revestidos", "create.ponder.fan_processing.text_1": "Al pasar por lava, el flujo de aire se calienta", "create.ponder.fan_processing.text_2": "Los objetos capturados en la zona serán fundidos", - "create.ponder.fan_processing.text_3": "Los artículos de comida arrojados aquí serán incinerados", + "create.ponder.fan_processing.text_3": "Los objetos de comida arrojados aquí serán incinerados", "create.ponder.fan_processing.text_4": "En su lugar, se debería utilizar una instalación de ahumado, usando fuego", "create.ponder.fan_processing.text_5": "Los flujos de aire que pasan por el agua crean una instalación de lavado", "create.ponder.fan_processing.text_6": "Se puede hacer un nuevo e interesante procesamiento con él", "create.ponder.fan_processing.text_7": "La velocidad del ventilador NO afecta a la velocidad de procesamiento, sólo a su rango", - "create.ponder.fan_processing.text_8": "El procesamiento del ventilador también puede aplicarse a los objetos de los depósitos y las correas", + "create.ponder.fan_processing.text_8": "El procesamiento del ventilador también puede aplicarse a los objetos de los depósitos y las cintas mecánicas", "create.ponder.fan_source.header": "Generar fuerza rotacional mediante ventiladores revestidos", "create.ponder.fan_source.text_1": "Los ventiladores orientados hacia una fuente de calor pueden proporcionar fuerza rotacional", @@ -1882,10 +1958,10 @@ "create.ponder.funnel_direction.header": "Dirección de la transferencia", "create.ponder.funnel_direction.text_1": "Colocado normalmente, extrae objetos del inventario", - "create.ponder.funnel_direction.text_2": "Colocado mientras pulsa Mayús izdo, pone objetos en el inventario", + "create.ponder.funnel_direction.text_2": "Colocado mientras pulsas Mayús izdo., pone objetos en el inventario", "create.ponder.funnel_direction.text_3": "Usando una llave inglesa, el embudo puede ser volteado después de su colocación", "create.ponder.funnel_direction.text_4": "Se aplicarán las mismas reglas para la mayoría de las orientaciones", - "create.ponder.funnel_direction.text_5": "Los embudos en las correas extraerán/insertarán dependiendo de su dirección de movimiento", + "create.ponder.funnel_direction.text_5": "Los embudos en las cintas mecánicas extraerán/insertarán dependiendo de su dirección de movimiento", "create.ponder.funnel_intro.header": "Usar embudos", "create.ponder.funnel_intro.text_1": "Los embudos son ideales para transferir objetos desde y hacia los inventarios", @@ -1896,7 +1972,7 @@ "create.ponder.funnel_transfer.header": "Transferencia directa", "create.ponder.funnel_transfer.text_1": "Los embudos no pueden transferir nunca entre inventarios cerrados directamente", "create.ponder.funnel_transfer.text_2": "Los ductos o los ductos inteligentes podrían ser más adecuados para estos fines", - "create.ponder.funnel_transfer.text_3": "Lo mismo se aplica para el movimiento horizontal. Una correa mecánica debería ayudar aquí", + "create.ponder.funnel_transfer.text_3": "Lo mismo se aplica para el movimiento horizontal. Una cinta mecánica debería ayudar aquí", "create.ponder.furnace_engine.header": "Generar fuerza rotacional con el motor de horno", "create.ponder.furnace_engine.text_1": "Los motores de horno generan fuerza rotacional mientras su horno adjunto está funcionando", @@ -1940,7 +2016,7 @@ "create.ponder.hand_crank.text_1": "Las manivelas pueden ser utilizadas para aplicar fuerza rotacional manualmente", "create.ponder.hand_crank.text_2": "Mantén pulsado clic derecho para girar en sentido antihorario", "create.ponder.hand_crank.text_3": "Su velocidad de transmisión es relativamente alta", - "create.ponder.hand_crank.text_4": "Mayús izdo + clic derecho pulsado para girar en sentido horario", + "create.ponder.hand_crank.text_4": "Mayús izdo. + clic derecho pulsado para girar en sentido horario", "create.ponder.hose_pulley.header": "Llenado y vaciado de fuentes mediante poleas de manguera", "create.ponder.hose_pulley.text_1": "Las poleas para mangueras pueden utilizarse para llenar o drenar grandes masas de fluido", @@ -1966,10 +2042,21 @@ "create.ponder.item_drain.header": "Vaciar contenedores de fluidos mediante drenajes de objetos", "create.ponder.item_drain.text_1": "Los drenajes de objetos pueden extraer los fluidos de los objetos", "create.ponder.item_drain.text_2": "Haz clic derecho para verter los fluidos de tu objeto retenido en él", - "create.ponder.item_drain.text_3": "Cuando los artículos se insertan desde el lado...", + "create.ponder.item_drain.text_3": "Cuando los objetos se insertan desde lateralmente...", "create.ponder.item_drain.text_4": "...ruedan a través, vaciando su líquido contenido", "create.ponder.item_drain.text_5": "Las redes de tuberías pueden ahora extraer el fluido del buffer interno de los desagües", + "create.ponder.item_vault_sizes.header": "Bóveda de objetos", + "create.ponder.item_vault_sizes.text_1": "Las bóvedas de objetos pueden combinarse para aumentar su capacidad total", + "create.ponder.item_vault_sizes.text_2": "Su base cuadrada puede ser de hasta 3 bloques de ancho...", + "create.ponder.item_vault_sizes.text_3": "...y pueden aumentar hasta 3 veces su diámetro", + + "create.ponder.item_vault_storage.header": "Almacenar objetos en las bóvedas", + "create.ponder.item_vault_storage.text_1": "Las bóvedas de objetos pueden usarse para almacenar grandes cantidades de objetos", + "create.ponder.item_vault_storage.text_2": "Sin embargo, los contenidos no pueden introducirse ni sacarse manualmente", + "create.ponder.item_vault_storage.text_3": "Cualquier componente para transferencia de objetos puede tanto introducir...", + "create.ponder.item_vault_storage.text_4": "...como sacar objetos de este contenedor", + "create.ponder.large_cogwheel.header": "Transmitir fuerza rotacional mediante engranajes grandes", "create.ponder.large_cogwheel.text_1": "Los engranajes grandes pueden conectarse entre sí en ángulo recto", "create.ponder.large_cogwheel.text_2": "Ayudarán a transmitir la velocidad transportada a otros ejes de rotación.", @@ -1977,16 +2064,16 @@ "create.ponder.linear_chassis_attachment.header": "Fijar bloques mediante el chasis lineal", "create.ponder.linear_chassis_attachment.text_1": "Las caras abiertas de un chasis lineal pueden hacerse pegajosas", "create.ponder.linear_chassis_attachment.text_2": "Haz clic de nuevo para que se pegue el lado opuesto", - "create.ponder.linear_chassis_attachment.text_3": "Mayús izdo + clic derecho con la mano vacía para eliminar el pegamento", + "create.ponder.linear_chassis_attachment.text_3": "Mayús izdo. + clic derecho con la mano vacía para eliminar el pegamento", "create.ponder.linear_chassis_attachment.text_4": "Las caras pegadas del chasis lineal fijarán una línea de bloques delante de él", "create.ponder.linear_chassis_attachment.text_5": "Utilizando una llave inglesa, se puede especificar un rango preciso", "create.ponder.linear_chassis_attachment.text_6": "Manteniendo pulsada la tecla [Ctrl] y usando la rueda central del ratón, se ajusta el rango de todos los bloques de chasis adjuntos", "create.ponder.linear_chassis_attachment.text_7": "Para fijar los bloques a cualquier otro lado es necesario utilizar pegamento", - "create.ponder.linear_chassis_attachment.text_8": "Utilizando esta mecánica, las estructuras de cualquier forma pueden moverse como un artilugio", + "create.ponder.linear_chassis_attachment.text_8": "Utilizando esta mecánica, las estructuras de cualquier forma pueden ser parte del artefacto animado", "create.ponder.linear_chassis_group.header": "Mover chasis lineales en grupos", "create.ponder.linear_chassis_group.text_1": "Los chasis lineales se conectan a los bloques de chasis idénticos que se encuentren a su lado", - "create.ponder.linear_chassis_group.text_2": "Cuando uno es movido por un artilugio, los otros son arrastrados con él", + "create.ponder.linear_chassis_group.text_2": "Cuando uno es movido por un artefacto animado, los otros son arrastrados con él", "create.ponder.linear_chassis_group.text_3": "Los chasis de otro tipo u orientados en otra dirección no se fijan", "create.ponder.mechanical_arm.header": "Configurar los brazos mecánicos", @@ -2025,7 +2112,7 @@ "create.ponder.mechanical_bearing.header": "Mover estructuras mediante el rodamiento mecánico", "create.ponder.mechanical_bearing.text_1": "Los rodamientos mecánicos se fijan al bloque que tienen delante", - "create.ponder.mechanical_bearing.text_2": "Al recibir fuerza rotacional, la ensamblará en un artilugio giratorio", + "create.ponder.mechanical_bearing.text_2": "Al recibir fuerza rotacional, la ensamblará en un artefacto estacionario", "create.ponder.mechanical_crafter.header": "Configurar ensambladores mecánicos", "create.ponder.mechanical_crafter.text_1": "Se puede utilizar una serie de ensambladores mecánicos para automatizar cualquier receta de elaboración.", @@ -2051,12 +2138,12 @@ "create.ponder.mechanical_drill.text_1": "Cuando se le aplica fuerza rotacional, el taladro mecánico rompe los bloques que tiene delante.", "create.ponder.mechanical_drill.text_2": "Su velocidad de trabajo depende de la fuerza rotacional suministrada", - "create.ponder.mechanical_drill_contraption.header": "Usar taladros mecánicos en artilugios", - "create.ponder.mechanical_drill_contraption.text_1": "Siempre que los taladros mecánicos se muevan como parte de un artilugio animado...", - "create.ponder.mechanical_drill_contraption.text_2": "...romperán los bloques por los que artilugio los hace pasar", + "create.ponder.mechanical_drill_contraption.header": "Usar taladros mecánicos en artefactos animados", + "create.ponder.mechanical_drill_contraption.text_1": "Siempre que los taladros mecánicos se muevan como parte de un artefacto animado...", + "create.ponder.mechanical_drill_contraption.text_2": "...romperán los bloques por los que artefacto los hace pasar", - "create.ponder.mechanical_harvester.header": "Utilizar cosechadoras mecánicas en artilugios", - "create.ponder.mechanical_harvester.text_1": "Siempre que las cosechadoras mecánicas se muevan como parte de un artilugio animado...", + "create.ponder.mechanical_harvester.header": "Utilizar cosechadoras mecánicas en artefactos animados", + "create.ponder.mechanical_harvester.text_1": "Siempre que las cosechadoras mecánicas se muevan como parte de un artefacto animado...", "create.ponder.mechanical_harvester.text_2": "...recogerán y repondrán los cultivos maduros en su camino", "create.ponder.mechanical_mixer.header": "Procesar objetos con la mezcladora mecánica", @@ -2074,16 +2161,16 @@ "create.ponder.mechanical_piston_modes.text_1": "Cuando los pistones mecánicos dejan de moverse, la estructura movida vuelve a los bloques", "create.ponder.mechanical_piston_modes.text_2": "Puede configurarse para que no vuelva nunca a los bloques sólidos, o sólo en la ubicación en la que comenzó", - "create.ponder.mechanical_plough.header": "Utilizar arados mecánicos en los artilugios", - "create.ponder.mechanical_plough.text_1": "Cuando los arados mecánicos se mueven como parte de un artilugio animado...", - "create.ponder.mechanical_plough.text_2": "...romperán los bloques sin un hitbox de colisión sólido", + "create.ponder.mechanical_plough.header": "Utilizar arados mecánicos en los artefactos animados", + "create.ponder.mechanical_plough.text_1": "Cuando los arados mecánicos se mueven como parte de un artefacto animado...", + "create.ponder.mechanical_plough.text_2": "...romperán los bloques con una hitbox menor a la de un bloque completo", "create.ponder.mechanical_plough.text_3": "Además, pueden crear tierras de cultivo", "create.ponder.mechanical_plough.text_4": "...también pueden lanzar entidades sin dañarlas", "create.ponder.mechanical_press.header": "Procesar objetos con la prensa mecánica", "create.ponder.mechanical_press.text_1": "La prensa mecánica puede procesar los objetos proporcionados por debajo de ella", "create.ponder.mechanical_press.text_2": "Los objetos de entrada pueden soltarse o colocarse en un depósito bajo la prensa", - "create.ponder.mechanical_press.text_3": "Cuando los objetos se proporcionan en una 'cinta'...", + "create.ponder.mechanical_press.text_3": "Cuando los objetos se proporcionan en una cinta mecánica...", "create.ponder.mechanical_press.text_4": "...la prensa mecánica los retendrá y procesará automáticamente", "create.ponder.mechanical_press_compacting.header": "Compactar objetos con la prensa mecánica", @@ -2111,14 +2198,14 @@ "create.ponder.mechanical_saw_breaker.text_1": "Cuando se le da una fuerza rotacional, la sierra mecánica cortará los árboles que estén directamente frente a ella", "create.ponder.mechanical_saw_breaker.text_2": "Para poder cortar el árbol por completo, la sierra tiene que romper el último bloque que lo une al suelo", - "create.ponder.mechanical_saw_contraption.header": "Utilizar sierras mecánicas en artilugios", - "create.ponder.mechanical_saw_contraption.text_1": "Cuando las sierras mecánicas se mueven como parte de un artilugio animado...", - "create.ponder.mechanical_saw_contraption.text_2": "...cortarán cualquier árbol con el que el artilugio se tope", + "create.ponder.mechanical_saw_contraption.header": "Utilizar sierras mecánicas en artefactos animados", + "create.ponder.mechanical_saw_contraption.text_1": "Cuando las sierras mecánicas se mueven como parte de un artefactos animado...", + "create.ponder.mechanical_saw_contraption.text_2": "...cortarán cualquier árbol con el se topen", "create.ponder.mechanical_saw_processing.header": "Procesar objetos en la sierra mecánica", "create.ponder.mechanical_saw_processing.text_1": "Las sierras mecánicas orientadas hacia arriba pueden procesar una variedad de objetos", "create.ponder.mechanical_saw_processing.text_2": "El objeto procesado siempre se mueve en contra de la fuerza rotacional de la sierra", - "create.ponder.mechanical_saw_processing.text_3": "Las sierras mecánicas pueden trabajar en línea con las correas mecánicas", + "create.ponder.mechanical_saw_processing.text_3": "Las sierras mecánicas pueden trabajar en línea con las cinta mecánicas", "create.ponder.mechanical_saw_processing.text_4": "Cuando un ingrediente tiene varios resultados posibles, la ranura para filtros puede especificarlo", "create.ponder.mechanical_saw_processing.text_5": "Sin filtro, al contrario, la sierra mecánica pasaría por todos los resultados", @@ -2139,24 +2226,24 @@ "create.ponder.piston_pole.text_2": "La longitud de la pértiga añadida en su parte posterior determina el rango de alcance", "create.ponder.portable_fluid_interface.header": "Interfaz de fluidos portátil", - "create.ponder.portable_fluid_interface.text_1": "No se puede acceder a los depósitos de fluidos de los artilugios en movimiento por ninguna tubería", - "create.ponder.portable_fluid_interface.text_2": "Este componente puede interactuar con los depósitos de fluidos sin necesidad de detener el artilugio", + "create.ponder.portable_fluid_interface.text_1": "No se puede acceder a los depósitos de fluidos de los artefactos en movimiento por ninguna tubería", + "create.ponder.portable_fluid_interface.text_2": "Este componente puede interactuar con los depósitos de fluidos sin necesidad de detener el artefacto", "create.ponder.portable_fluid_interface.text_3": "Coloca una segunda con un espacio de 1 o 2 bloques entre ellas", "create.ponder.portable_fluid_interface.text_4": "Cada vez que pasen por delante de la otra, entablarán una conexión", - "create.ponder.portable_fluid_interface.text_5": "Mientras esté activada, la interfaz estacionaria representará TODOS los tanques del artilugio", + "create.ponder.portable_fluid_interface.text_5": "Mientras esté activada, la interfaz estacionaria representará TODOS los tanques del artefacto", "create.ponder.portable_fluid_interface.text_6": "Ahora se puede introducir el fluido...", - "create.ponder.portable_fluid_interface.text_7": "...o extraerlo del artilugio", - "create.ponder.portable_fluid_interface.text_8": "Cuando no se intercambien contenidos durante un tiempo, el artilugio seguirá su camino", + "create.ponder.portable_fluid_interface.text_7": "...o extraerlo del artefacto", + "create.ponder.portable_fluid_interface.text_8": "Cuando no se intercambien contenidos durante un tiempo, el artefacto seguirá su camino", "create.ponder.portable_storage_interface.header": "Interfaz de almacenamiento portátil", - "create.ponder.portable_storage_interface.text_1": "Los jugadores no pueden acceder a los inventarios de los artilugios en movimiento.", - "create.ponder.portable_storage_interface.text_2": "Este componente puede interactuar con el almacenamiento sin necesidad de detener el artilugio.", + "create.ponder.portable_storage_interface.text_1": "Los jugadores no pueden acceder a los inventarios de los artefactos en movimiento.", + "create.ponder.portable_storage_interface.text_2": "Este componente puede interactuar con el almacenamiento sin necesidad de detener el artefacto.", "create.ponder.portable_storage_interface.text_3": "Coloca una segunda unidad con un espacio de 1 o 2 bloques entre ellas", "create.ponder.portable_storage_interface.text_4": "Cada vez que pasen por delante del otro, entablarán una conexión", - "create.ponder.portable_storage_interface.text_5": "Mientras esté conectada, la interfaz fija representará TODOS los inventarios del artilugio", + "create.ponder.portable_storage_interface.text_5": "Mientras esté conectada, la interfaz fija representará TODOS los inventarios del artefacto", "create.ponder.portable_storage_interface.text_6": "Ahora pueden insertarse objetos...", "create.ponder.portable_storage_interface.text_7": "...o extraerse", - "create.ponder.portable_storage_interface.text_8": "Cuando no se hayan intercambiado objetos durante un tiempo, el artilugio seguirá su camino", + "create.ponder.portable_storage_interface.text_8": "Cuando no se hayan intercambiado objetos durante un tiempo, el artefacto seguirá su camino", "create.ponder.portable_storage_interface_redstone.header": "Interfaz de almacenamiento portátil controlada por redstone", "create.ponder.portable_storage_interface_redstone.text_1": "La energía de redstone impedirá que las interfaces de almacenamiento portátil se conecten", @@ -2173,15 +2260,24 @@ "create.ponder.powered_toggle_latch.text_3": "...encender y apagar", "create.ponder.powered_toggle_latch.text_4": "Las palancas de cierre motorizadas también se pueden accionar manualmente", + "create.ponder.pulse_extender.header": "Controlar señales usando extensores de pulso", + "create.ponder.pulse_extender.text_1": "Los extensores de pulso pueden alargar una señal", + "create.ponder.pulse_extender.text_2": "Se activan después de un breve retraso...", + "create.ponder.pulse_extender.text_3": "...y tienen un enfriamiento igual a la cantidad configurada", + "create.ponder.pulse_extender.text_4": "Utilizando la rueda del ratón, el enfriamiento se puede configurar", + "create.ponder.pulse_extender.text_5": "La duración configurada puede alcanzar hasta los 30 minutos", + "create.ponder.pulse_repeater.header": "Controlar señales mediante repetidores de pulsos", "create.ponder.pulse_repeater.text_1": "Los repetidores de pulsos acortan cualquier señal de redstone a un solo pulso", + "create.ponder.pulse_repeater.text_2": "Utilizando la rueda del ratón, el tiempo de carga se puede configurar", + "create.ponder.pulse_repeater.text_3": "Los retrasos configurados pueden alcanzar hasta los 30 minutos", "create.ponder.radial_chassis.header": "Fijar bloques mediante chasis radiales", "create.ponder.radial_chassis.text_1": "Los chasis radiales se conectan a bloques de chasis idénticos en una fila", - "create.ponder.radial_chassis.text_2": "Cuando uno es movido por un artilugio, los otros son arrastrados con él", + "create.ponder.radial_chassis.text_2": "Cuando uno es movido por un artefacto, los otros son arrastrados con él", "create.ponder.radial_chassis.text_3": "Las caras laterales de un chasis radial pueden hacerse adhesivas", "create.ponder.radial_chassis.text_4": "Haga clic de nuevo para que todos los demás lados sean pegajosos", - "create.ponder.radial_chassis.text_5": "Mayús izdo + clic derecho con la mano vacía para eliminar el pegamento", + "create.ponder.radial_chassis.text_5": "Mayús izdo. + clic derecho con la mano vacía para eliminar el pegamento", "create.ponder.radial_chassis.text_6": "Cada vez que un bloque está junto a una cara pegajosa...", "create.ponder.radial_chassis.text_7": "...adjuntará todos los bloques alcanzables dentro de un radio en esa capa", "create.ponder.radial_chassis.text_8": "Con una llave inglesa y usando la rueda de desplazamiento del ratón se puede especificar un radio preciso", @@ -2189,11 +2285,11 @@ "create.ponder.redstone_contact.header": "Contactos de redstone", "create.ponder.redstone_contact.text_1": "Los contactos de redstone enfrentados emitirán una señal de redstone", - "create.ponder.redstone_contact.text_2": "Esto sigue siendo válido cuando uno de ellos forma parte de un artilugio en movimiento", + "create.ponder.redstone_contact.text_2": "Esto sigue siendo válido cuando uno de ellos forma parte de un artefacto en movimiento", "create.ponder.redstone_link.header": "Usar los enlaces de redstone", "create.ponder.redstone_link.text_1": "Los enlaces de redstone pueden transmitir señales redstone de forma inalámbrica", - "create.ponder.redstone_link.text_2": "Mayús izdo + clic derecho para cambiar el modo de recepción", + "create.ponder.redstone_link.text_2": "Mayús izdo. + clic derecho para cambiar el modo de recepción", "create.ponder.redstone_link.text_3": "Un simple clic derecho con una llave inglesa puede hacer lo mismo", "create.ponder.redstone_link.text_4": "Los receptores emiten la potencia de redstone de los transmisores en 128 bloques", "create.ponder.redstone_link.text_5": "Colocando objetos en las dos ranuras puede especificar una frecuencia", @@ -2203,8 +2299,8 @@ "create.ponder.rope_pulley.text_1": "Las poleas de cuerda pueden mover los bloques verticalmente cuando se les aplica una fuerza rotacional", "create.ponder.rope_pulley.text_2": "La dirección y la velocidad del movimiento dependen de la fuerza rotacional suministrada", - "create.ponder.rope_pulley_attachment.header": "Mover poleas como parte de un artilugio", - "create.ponder.rope_pulley_attachment.text_1": "Siempre que las poleas de cuerda sean movidas por un artilugio...", + "create.ponder.rope_pulley_attachment.header": "Mover poleas como parte de un artefacto", + "create.ponder.rope_pulley_attachment.text_1": "Siempre que las poleas de cuerda sean movidas por un artefacto...", "create.ponder.rope_pulley_attachment.text_2": "...su estructura adjunta será arrastrada con ella", "create.ponder.rope_pulley_attachment.text_3": "Tenga en cuenta que las poleas de cuerda sólo se mueven cuando están paradas", @@ -2248,43 +2344,43 @@ "create.ponder.smart_pipe.header": "Controlar el flujo de fluidos mediante tuberías inteligentes", "create.ponder.smart_pipe.text_1": "Las tuberías inteligentes pueden ayudar a controlar los flujos por tipo de fluido", "create.ponder.smart_pipe.text_2": "Cuando se colocan directamente en la fuente, pueden especificar el tipo de fluido a extraer", - "create.ponder.smart_pipe.text_3": "Simplemente haga clic derecho en su ranura de filtro con cualquier elemento que contenga el fluido deseado", + "create.ponder.smart_pipe.text_3": "Simplemente haga clic derecho en su ranura de filtro con cualquier objeto que contenga el fluido deseado", "create.ponder.smart_pipe.text_4": "Cuando se colocan detrás de una red de tuberías, las tuberías inteligentes sólo dejan que los fluidos coincidentes continúen", "create.ponder.speedometer.header": "Controlar la información cinética mediante el velocímetro", "create.ponder.speedometer.text_1": "El velocímetro muestra la velocidad actual de los componentes conectados", - "create.ponder.speedometer.text_2": "Cuando se usan las gafas del constructor, el jugador puede obtener información más detallada del medidor", + "create.ponder.speedometer.text_2": "Cuando se usan las gafas del ingeniero, el jugador puede obtener información más detallada del medidor", "create.ponder.speedometer.text_3": "Los comparadores pueden emitir señales analógicas de redstone en relación con las mediciones del velocímetro", "create.ponder.spout_filling.header": "Llenar objetos con un surtidor", - "create.ponder.spout_filling.text_1": "El surtidor puede llenar los elementos de retención de fluidos que se encuentran debajo de él", + "create.ponder.spout_filling.text_1": "El surtidor puede llenar los objetos capaces de retener fluidos que se encuentren debajo de él", "create.ponder.spout_filling.text_2": "No se puede acceder manualmente al contenido de un surtidor", "create.ponder.spout_filling.text_3": "En su lugar, se pueden utilizar tuberías para suministrarle fluidos", "create.ponder.spout_filling.text_4": "Los objetos de entrada pueden colocarse en un depósito bajo el surtidor", - "create.ponder.spout_filling.text_5": "Cuando los artículos se proporcionan en una cinta...", + "create.ponder.spout_filling.text_5": "Cuando los objetos se proporcionan en una cinta...", "create.ponder.spout_filling.text_6": "El surtidor los retendrá y procesará automáticamente", - "create.ponder.stabilized_bearings.header": "Estabilizar artilugios", + "create.ponder.stabilized_bearings.header": "Estabilizar artefactos estacionarios", "create.ponder.stabilized_bearings.text_1": "Siempre que los rodamientos mecánicos formen parte de una estructura móvil...", "create.ponder.stabilized_bearings.text_2": "...intentarán mantenerse derechos", "create.ponder.stabilized_bearings.text_3": "Una vez más, el rodamiento se unirá al bloque de enfrente", - "create.ponder.stabilized_bearings.text_4": "Como resultado, todo el sub-artilugio se mantendrá en posición vertical", + "create.ponder.stabilized_bearings.text_4": "Como resultado, todo el sub-artefacto se mantendrá en posición vertical", - "create.ponder.sticker.header": "Fijar bloques con stickers", - "create.ponder.sticker.text_1": "Los stickers son ideales para la fijación de bloques controlados por redstone", - "create.ponder.sticker.text_2": "Al recibir una señal, cambiarán su estado", - "create.ponder.sticker.text_3": "Si ahora se mueve en un artilugio, el bloque se moverá con él", + "create.ponder.sticker.header": "Fijar bloques con pegatinas", + "create.ponder.sticker.text_1": "Las pegatinas son ideales para la fijación controlada por redstone de bloques", + "create.ponder.sticker.text_2": "Al recibir una señal, cambiará su estado", + "create.ponder.sticker.text_3": "Si ahora se mueve en un artefacto animado, el bloque se moverá con él", "create.ponder.sticker.text_4": "Si se vuelve a activar, el bloque dejará de estar fijado", "create.ponder.stressometer.header": "Supervisar la información cinética con el estresómetro", "create.ponder.stressometer.text_1": "El estresómetro muestra la capacidad de estrés actual de la red cinética conectada", - "create.ponder.stressometer.text_2": "Cuando se usan las gafas del constructor, el jugador puede obtener información más detallada del medidor", + "create.ponder.stressometer.text_2": "Cuando se usan las gafas del ingeniero, el jugador puede obtener información más detallada del medidor", "create.ponder.stressometer.text_3": "Los comparadores pueden emitir señales analógicas de redstone en relación con las mediciones del estresómetro", "create.ponder.super_glue.header": "Fijar bloques con pegamento", "create.ponder.super_glue.text_1": "Se puede utilizar pegamento entre dos bloques cualquiera", - "create.ponder.super_glue.text_2": "Los bloques fijados se moverán juntos cuando se ensamblen en un artilugio", - "create.ponder.super_glue.text_3": "Cada vez que el pegamento es sostenido en la mano...", + "create.ponder.super_glue.text_2": "Los bloques fijados se moverán juntos cuando se ensamblen en un artefacto", + "create.ponder.super_glue.text_3": "Cada vez que el pegamento es sostenido en la mano secundaria...", "create.ponder.super_glue.text_4": "...los bloques añadidos se pegarán a la cara en la que fueron colocados automáticamente", "create.ponder.super_glue.text_5": "El pegamento se puede quitar con un clic izquierdo", @@ -2292,14 +2388,14 @@ "create.ponder.valve_handle.text_1": "Los jugadores pueden utilizar las asas de válvulas para aplicar fuerza rotacional manualmente", "create.ponder.valve_handle.text_2": "Mantén pulsado el clic derecho para rotar en sentido contrario a las agujas del reloj", "create.ponder.valve_handle.text_3": "Su velocidad de transmisión es lenta y precisa", - "create.ponder.valve_handle.text_4": "Mayús izdo + clic derecho para rotar en el sentido de las agujas del reloj", + "create.ponder.valve_handle.text_4": "Mayús izdo. + clic derecho para rotar en el sentido de las agujas del reloj", "create.ponder.valve_handle.text_5": "Las asas de las válvulas pueden teñirse con fines estéticos", "create.ponder.valve_pipe.header": "Controlar el flujo de fluidos mediante válvulas", "create.ponder.valve_pipe.text_1": "Las tuberías con válvulas ayudan a controlar los fluidos que se propagan por las redes de tuberías", - "create.ponder.valve_pipe.text_2": "Su entrada en el eje controla si el fluido puede pasar por", - "create.ponder.valve_pipe.text_3": "Dada la fuerza de rotación en la dirección de apertura, la válvula se abrirá", - "create.ponder.valve_pipe.text_4": "Se puede volver a cerrar invirtiendo el giro de entrada", + "create.ponder.valve_pipe.text_2": "La entrada con eje controla si el fluido puede pasar", + "create.ponder.valve_pipe.text_3": "Dada una fuerza de rotación en la dirección de apertura, la válvula se abrirá", + "create.ponder.valve_pipe.text_4": "Se puede volver a cerrar invirtiendo el sentido del eje", "create.ponder.water_wheel.header": "Generar fuerza rotacional mediante ruedas hidráulicas", "create.ponder.water_wheel.text_1": "Las ruedas hidráulicas extraen la fuerza de las corrientes de agua adyacentes", @@ -2308,14 +2404,14 @@ "create.ponder.water_wheel.text_4": "Orientadas hacia el lado contrario, no serán tan eficaces", "create.ponder.weighted_ejector.header": "Usar eyectores de peso", - "create.ponder.weighted_ejector.text_1": "Mayús izdo + clic derecho sosteniendo un eyector de peso para seleccionar la ubicación de destino", + "create.ponder.weighted_ejector.text_1": "Mayús izdo. + clic derecho sosteniendo un eyector de peso para seleccionar la ubicación de destino", "create.ponder.weighted_ejector.text_10": "Ahora estára limitado a este tamaño de pila, y sólo se activara cuando su pila retenida alcance esta cantidad", "create.ponder.weighted_ejector.text_11": "Otras entidades activarán el eyector al pisarlos", "create.ponder.weighted_ejector.text_2": "El eyector colocado lanzará ahora los objetos al lugar marcado", "create.ponder.weighted_ejector.text_3": "Un objetivo válido puede estar a cualquier altura o distancia dentro del alcance", "create.ponder.weighted_ejector.text_4": "Sin embargo, no pueden estar a un costado", "create.ponder.weighted_ejector.text_5": "Si no se ha seleccionado ningún objetivo válido, simplemente se dirigirá al bloque que se encuentra justo delante", - "create.ponder.weighted_ejector.text_6": "Suministrale fuerza rotacional para cargarlo", + "create.ponder.weighted_ejector.text_6": "Suminístralo fuerza rotacional para cargarlo", "create.ponder.weighted_ejector.text_7": "Los objetos colocados en el eyector hacen que se dispare", "create.ponder.weighted_ejector.text_8": "Si se dirigen a un inventario, el eyector esperará hasta que haya espacio", "create.ponder.weighted_ejector.text_9": "Con la llave inglesa se puede configurar el tamaño de pila requerido", @@ -2331,17 +2427,17 @@ "create.ponder.weighted_ejector_tunnel.text_4": "Mientras una nueva pila del tamaño configurado se expulse por la salida lateral...", "create.ponder.weighted_ejector_tunnel.text_5": "...el resto seguirá su camino", - "create.ponder.windmill_source.header": "Generar fuerza rotacional mediante rodamientos del molino de viento", + "create.ponder.windmill_source.header": "Generar fuerza rotacional mediante rodamientos de molino de viento", "create.ponder.windmill_source.text_1": "Los rodamientos del molino de viento se fijan al bloque que tienen delante", - "create.ponder.windmill_source.text_2": "Si se unen suficientes bloques tipo vela al bloque, éste puede actuar como un molino de viento", - "create.ponder.windmill_source.text_3": "Activado con un clic derecho, el rodamiento del molino de viento comenzará a proporcionar fuerza rotacional", - "create.ponder.windmill_source.text_4": "La cantidad de bloques de vela determina su velocidad de rotación", + "create.ponder.windmill_source.text_2": "Si se unen suficientes velas al bloque, éste puede actuar como un molino de viento", + "create.ponder.windmill_source.text_3": "Activado con un clic derecho, el rodamiento de molino de viento comenzará a proporcionar fuerza rotacional", + "create.ponder.windmill_source.text_4": "La cantidad de velas determina su velocidad de rotación", "create.ponder.windmill_source.text_5": "Utiliza una llave inglesa para configurar su sentido de rotación", - "create.ponder.windmill_source.text_6": "Haga clic derecho sobre el rodamiento del molino en cualquier momento para detener y editar la estructura de nuevo", + "create.ponder.windmill_source.text_6": "Haga clic derecho sobre el rodamiento de molino de viento en cualquier momento para detener y editar la estructura de nuevo", - "create.ponder.windmill_structure.header": "Artilugios para molinos de viento", - "create.ponder.windmill_structure.text_1": "Cualquier estructura puede contar como un molino de viento válido, siempre que contenga al menos 8 bloques tipo vela.", + "create.ponder.windmill_structure.header": "Artefactos estacionarios de molinos de viento", + "create.ponder.windmill_structure.text_1": "Cualquier estructura puede contar como un molino de viento válido, siempre que contenga al menos 8 velas.", - "_": "Thank you for translating Create!" + "_": "¡Gracias por traducir Create!" -} +} \ No newline at end of file From 50bc6f49e43c63986becb00c86910144b7755212 Mon Sep 17 00:00:00 2001 From: vyhi <75101424+vyhi@users.noreply.github.com> Date: Thu, 3 Mar 2022 13:38:30 -0300 Subject: [PATCH 14/29] Updates to pt_br.json by vyhi (#2598) --- .../resources/assets/create/lang/pt_br.json | 414 +++++++++++++++++- 1 file changed, 402 insertions(+), 12 deletions(-) diff --git a/src/main/resources/assets/create/lang/pt_br.json b/src/main/resources/assets/create/lang/pt_br.json index 5b63b12e8..e75ea7d13 100644 --- a/src/main/resources/assets/create/lang/pt_br.json +++ b/src/main/resources/assets/create/lang/pt_br.json @@ -1,7 +1,10 @@ { - "_": "Missing Localizations: 1670", + "_": "Missing Localizations: 1558", "_": "->------------------------] Game Elements [------------------------<-", + + "block.create.acacia_window": "Janela de Acácia", + "block.create.acacia_window_pane": "Vidraça de Acácia", "block.create.adjustable_chain_gearshift": "Correia Ajustável", "block.create.analog_lever": "Alavanca Analógica", "block.create.andesite_belt_funnel": "Funil de Esteira de Andesito", @@ -10,9 +13,14 @@ "block.create.andesite_encased_large_cogwheel": "Roda dentada grande revestida com andesito", "block.create.andesite_encased_shaft": "Eixo revestido com latão", "block.create.andesite_funnel": "Funil de Andesito", + "block.create.andesite_pillar": "Pilar de andesito", "block.create.andesite_tunnel": "Tunel de Andesito", + "block.create.asurine": "Asurino", + "block.create.asurine_pillar": "Pilar de Asurino", "block.create.basin": "Bacia", "block.create.belt": "Esteira Mecânica", + "block.create.birch_window": "Janela de Bétula", + "block.create.birch_window_pane": "Vidraça de Bétula", "block.create.black_nixie_tube": "Tubo nixie preto", "block.create.black_sail": "Vela preta", "block.create.black_seat": "Assento preto", @@ -37,6 +45,7 @@ "block.create.brown_seat": "Assento marrom", "block.create.brown_toolbox": "Caixa de ferramentas marrom", "block.create.brown_valve_handle": "Válvula marrom", + "block.create.calcite_pillar": "Pilar de Calcita", "block.create.cart_assembler": "Montador de Carrinho de Mina", "block.create.chocolate": "Chocolate", "block.create.chute": "Calha", @@ -47,33 +56,170 @@ "block.create.controller_rail": "Trilho Controlador", "block.create.copper_backtank": "Tanque Traseiro de Cobre", "block.create.copper_casing": "Revestimento de Cobre", + "block.create.copper_shingle_slab": "Laje de telha de cobre", + "block.create.copper_shingle_stairs": "Escada de telha de cobre", + "block.create.copper_shingles": "Telha de cobre", + "block.create.copper_tile_slab": "Laje de ladrilho de cobre", + "block.create.copper_tile_stairs": "Escada de ladrilho de cobre", + "block.create.copper_tiles": "Ladrilho de cobre", "block.create.copper_valve_handle": "Válvula de Cobre", "block.create.creative_crate": "Caixa Criativa", "block.create.creative_fluid_tank": "Tanque de Fluidos Criativo", "block.create.creative_motor": "Motor Criativo", + "block.create.crimsite": "Carmesito", + "block.create.crimsite_pillar": "Pilar de Camesito", + "block.create.crimson_window": "Janela carmesim", + "block.create.crimson_window_pane": "Vidraça carmesim", "block.create.crushing_wheel": "Roda de Moer", + "block.create.crushing_wheel_controller": "Controlador da roda de moer", "block.create.cuckoo_clock": "Relógio Cuckoo", + "block.create.cut_andesite": "Andesito lapidado", + "block.create.cut_andesite_brick_slab": "Laje de tijolos lapidados de andesito", + "block.create.cut_andesite_brick_stairs": "Escada de tijolos lapidados de andesito", + "block.create.cut_andesite_brick_wall": "Muro de tijolos lapidados de andesito", + "block.create.cut_andesite_bricks": "Tijolos lapidados de andesito", + "block.create.cut_andesite_slab": "Laje de andesito lapidado", + "block.create.cut_andesite_stairs": "Escada de andesito lapidado", + "block.create.cut_andesite_wall": "Muro de andesito lapidado", + "block.create.cut_asurine": "Asurino lapidado", + "block.create.cut_asurine_brick_slab": "Laje de tijolos lapidados de Asurino", + "block.create.cut_asurine_brick_stairs": "Escada de tijolos lapidados de Asurino", + "block.create.cut_asurine_brick_wall": "Muro de tijolos lapidados de Asurino", + "block.create.cut_asurine_bricks": "Tijolos lapidados de Asurino", + "block.create.cut_asurine_slab": "Laje de Asurino lapidado", + "block.create.cut_asurine_stairs": "Escada de Asurino lapidado", + "block.create.cut_asurine_wall": "Muro de Asurino lapidado", + "block.create.cut_calcite": "Calcita lapidada", + "block.create.cut_calcite_brick_slab": "Laje de tijolos lapidados de Calcita", + "block.create.cut_calcite_brick_stairs": "Escada de tijolos lapidados de Calcita", + "block.create.cut_calcite_brick_wall": "Muro de tijolos lapidados de Calcita", + "block.create.cut_calcite_bricks": "Tijolos lapidados de Calcita", + "block.create.cut_calcite_slab": "Laje de Calcita lapidada", + "block.create.cut_calcite_stairs": "Escada de Calcita lapidada", + "block.create.cut_calcite_wall": "Muro de Calcita lapidada", + "block.create.cut_crimsite": "Carmesito lapidado", + "block.create.cut_crimsite_brick_slab": "Laje de tijolos lapidados de Carmesito", + "block.create.cut_crimsite_brick_stairs": "Escada de tijolos lapidados de Carmesito", + "block.create.cut_crimsite_brick_wall": "Muro de tijolos lapidados de Carmesito", + "block.create.cut_crimsite_bricks": "Tijolos lapidados de Carmesito", + "block.create.cut_crimsite_slab": "Laje de Carmesito lapidado", + "block.create.cut_crimsite_stairs": "Escada de Carmesito lapidado", + "block.create.cut_crimsite_wall": "Muro de Carmesito lapidado", + "block.create.cut_deepslate": "Ardósia lapidada", + "block.create.cut_deepslate_brick_slab": "Laje de tijolos lapidados de ardósia", + "block.create.cut_deepslate_brick_stairs": "Escada de tijolos lapidados de ardósia", + "block.create.cut_deepslate_brick_wall": "Muro de tijolos lapidados de ardósia", + "block.create.cut_deepslate_bricks": "Tijolos lapidados de ardósia", + "block.create.cut_deepslate_slab": "Laje de ardósia lapidada", + "block.create.cut_deepslate_stairs": "Escada de ardósia lapidada", + "block.create.cut_deepslate_wall": "Muro de ardósia lapidada", + "block.create.cut_diorite": "Diorito lapidado", + "block.create.cut_diorite_brick_slab": "Laje de tijolos lapidados de diorito", + "block.create.cut_diorite_brick_stairs": "Escada de tijolos lapidados de diorito", + "block.create.cut_diorite_brick_wall": "Muro de tijolos lapidados de diorito", + "block.create.cut_diorite_bricks": "Tijolos lapidados de diorito", + "block.create.cut_diorite_slab": "Laje de diorito lapidado", + "block.create.cut_diorite_stairs": "Escada de diorito lapidado", + "block.create.cut_diorite_wall": "Muro de diorito lapidado", + "block.create.cut_dripstone": "Espeleotema lapidado", + "block.create.cut_dripstone_brick_slab": "Laje de tijolos lapidados de espeleotema", + "block.create.cut_dripstone_brick_stairs": "Escada de tijolos lapidados de espeleotema", + "block.create.cut_dripstone_brick_wall": "Muro de tijolos lapidados de espeleotema", + "block.create.cut_dripstone_bricks": "Tijolos lapidados de espeleotema", + "block.create.cut_dripstone_slab": "Laje de espeleotema lapidado", + "block.create.cut_dripstone_stairs": "Escada de espeleotema lapidado", + "block.create.cut_dripstone_wall": "Muro de espeleotema lapidado", + "block.create.cut_granite": "Granito lapidado", + "block.create.cut_granite_brick_slab": "Laje de tijolos lapidados de granito", + "block.create.cut_granite_brick_stairs": "Escada de tijolos lapidados de granito", + "block.create.cut_granite_brick_wall": "Muro de tijolos lapidados de granito", + "block.create.cut_granite_bricks": "Tijolos lapidados de granito", + "block.create.cut_granite_slab": "Laje de granito lapidado", + "block.create.cut_granite_stairs": "Escada de granito lapidado", + "block.create.cut_granite_wall": "Muro de granito lapidado", + "block.create.cut_limestone": "Calcário lapidado", + "block.create.cut_limestone_brick_slab": "Laje de tijolos lapidados de calcário", + "block.create.cut_limestone_brick_stairs": "Escada de tijolos lapidados de calcário", + "block.create.cut_limestone_brick_wall": "Muro de tijolos lapidados de calcário", + "block.create.cut_limestone_bricks": "Tijolos lapidados de calcário", + "block.create.cut_limestone_slab": "Laje de calcário lapidado", + "block.create.cut_limestone_stairs": "Escada de calcário lapidado", + "block.create.cut_limestone_wall": "Muro de calcário lapidado", + "block.create.cut_ochrum": "Ocrom", + "block.create.cut_ochrum_brick_slab": "Laje de tijolos lapidados de Ocrom", + "block.create.cut_ochrum_brick_stairs": "Escada de tijolos lapidados de Ocrom", + "block.create.cut_ochrum_brick_wall": "Muro de tijolos lapidados de Ocrom", + "block.create.cut_ochrum_bricks": "Tijolos lapidados de Ocrom", + "block.create.cut_ochrum_slab": "Laje de Ocrom lapidado", + "block.create.cut_ochrum_stairs": "Escada de Ocrom lapidado", + "block.create.cut_ochrum_wall": "Muro de Ocrom lapidado", + "block.create.cut_scorchia": "Escória negra lapidada", + "block.create.cut_scorchia_brick_slab": "Laje de tijolos lapidados de escória negra", + "block.create.cut_scorchia_brick_stairs": "Escada de tijolos lapidados de escória negra", + "block.create.cut_scorchia_brick_wall": "Muro de tijolos lapidados de escória negra", + "block.create.cut_scorchia_bricks": "Tijolos lapidados de escória negra", + "block.create.cut_scorchia_slab": "Laje de escória negra lapidada", + "block.create.cut_scorchia_stairs": "Escada de escória negra lapidada", + "block.create.cut_scorchia_wall": "Muro de escória negra lapidada", + "block.create.cut_scoria": "Escória lapidada", + "block.create.cut_scoria_brick_slab": "Laje de tijolos lapidados de escória", + "block.create.cut_scoria_brick_stairs": "Escada de tijolos lapidados de escória", + "block.create.cut_scoria_brick_wall": "Muro de tijolos lapidados de escória", + "block.create.cut_scoria_bricks": "Tijolos lapidados de escória", + "block.create.cut_scoria_slab": "Laje de escória lapidada", + "block.create.cut_scoria_stairs": "Escada de escória lapidada", + "block.create.cut_scoria_wall": "Muro de escória lapidada", + "block.create.cut_tuff": "Tufo lapidado", + "block.create.cut_tuff_brick_slab": "Laje de tijolos lapidados de tufo", + "block.create.cut_tuff_brick_stairs": "Escada de tijolos lapidados de tufo", + "block.create.cut_tuff_brick_wall": "Muro de tijolos lapidados de tufo", + "block.create.cut_tuff_bricks": "Tijolos lapidados de tufo", + "block.create.cut_tuff_slab": "Laje de tufo lapidado", + "block.create.cut_tuff_stairs": "Escada de tufo lapidado", + "block.create.cut_tuff_wall": "Muro de tufo lapidado", + "block.create.cut_veridium": "Veridiano lapidado", + "block.create.cut_veridium_brick_slab": "Laje de tijolos lapidados de Veridiano", + "block.create.cut_veridium_brick_stairs": "Escada de tijolos lapidados de Veridiano", + "block.create.cut_veridium_brick_wall": "Muro de tijolos lapidados de Veridiano", + "block.create.cut_veridium_bricks": "Tijolos lapidados de Veridiano", + "block.create.cut_veridium_slab": "Laje de Veridiano lapidado", + "block.create.cut_veridium_stairs": "Escada de Veridiano lapidado", + "block.create.cut_veridium_wall": "Muro de Veridiano lapidado", "block.create.cyan_nixie_tube": "Tubo nixie ciano", "block.create.cyan_sail": "Vela ciano", "block.create.cyan_seat": "Assento ciano", "block.create.cyan_toolbox": "caixa de ferramentas ciano", "block.create.cyan_valve_handle": "Válvula ciano", + "block.create.dark_oak_window": "Janela de carvalho escuro", + "block.create.dark_oak_window_pane": "Vidraça de carvalho escuro", + "block.create.deepslate_pillar": "Pilar de ardósia", "block.create.deepslate_zinc_ore": "Minério de zinco de ardósia", "block.create.deployer": "Implantador", "block.create.depot": "Depósito", + "block.create.diorite_pillar": "Pilar de diorito", + "block.create.dripstone_pillar": "Pilar de espeleotema", "block.create.encased_chain_drive": "Correia Revestida", "block.create.encased_fan": "Ventilador Revestida", "block.create.encased_fluid_pipe": "Cano de Fluidos Revestido", + "block.create.exposed_copper_shingle_slab": "Laje de telha de cobre exposta", + "block.create.exposed_copper_shingle_stairs": "Escada de telha de cobre exposta", + "block.create.exposed_copper_shingles": "Telha de cobre exposta", + "block.create.exposed_copper_tile_slab": "Laje de ladrilho de cobre exposta", + "block.create.exposed_copper_tile_stairs": "Escada de ladrilho de cobre exposta", + "block.create.exposed_copper_tiles": "Ladrilho de cobre exposto", "block.create.fluid_pipe": "Cano de Fluido", "block.create.fluid_tank": "Tanque de fluido", "block.create.fluid_valve": "Válvula", "block.create.flywheel": "Volante de inércia", + "block.create.framed_glass": "Vidro emoldurado", + "block.create.framed_glass_pane": "Vidraça emoldurada", "block.create.furnace_engine": "Motor de Fornalha", "block.create.gantry_carriage": "Carruagem de Pórtico", "block.create.gantry_shaft": "Eixo de Pórtico", "block.create.gearbox": "Caixa de Transmissão", "block.create.gearshift": "Câmbio", "block.create.glass_fluid_pipe": "Cano de Fluido de Vidro", + "block.create.granite_pillar": "Pilar de granito", "block.create.gray_nixie_tube": "Tubo nixie cinza", "block.create.gray_sail": "Vela cinza", "block.create.gray_seat": "Assento cinza", @@ -87,9 +233,28 @@ "block.create.hand_crank": "Manivela", "block.create.haunted_bell": "Sino assombrado", "block.create.honey": "Mel", + "block.create.horizontal_framed_glass": "Vidro emoldurado horizontal", + "block.create.horizontal_framed_glass_pane": "Vidraça emoldurada horizontal", "block.create.hose_pulley": "Polia de Mangueira", "block.create.item_drain": "Dreno de Item", "block.create.item_vault": "Cofre de itens", + "block.create.jungle_window": "Janela da selva", + "block.create.jungle_window_pane": "Vidraça da selva", + "block.create.large_cogwheel": "Roda dentada grande", + "block.create.layered_andesite": "Andesito estratificado", + "block.create.layered_asurine": "Asurino estratificado", + "block.create.layered_calcite": "Calcita estratificada", + "block.create.layered_crimsite": "Carmesito estratificado", + "block.create.layered_deepslate": "Ardósia estratificado", + "block.create.layered_diorite": "Diorito estratificado", + "block.create.layered_dripstone": "Espeleotema estratificado", + "block.create.layered_granite": "Granito estratificado", + "block.create.layered_limestone": "Calcário estratificado", + "block.create.layered_ochrum": "Ocrom estratificado", + "block.create.layered_scorchia": "Escória negra estratificada", + "block.create.layered_scoria": "Escória estratificada", + "block.create.layered_tuff": "Tufo estratificado", + "block.create.layered_veridium": "Veridiano estratificado", "block.create.lectern_controller": "Controle de Atril", "block.create.light_blue_nixie_tube": "tubo nixie azul claro", "block.create.light_blue_sail": "Vela azul claro", @@ -133,10 +298,22 @@ "block.create.mysterious_cuckoo_clock": "Relógio cuckoo", "block.create.nixie_tube": "Tubo Nixie", "block.create.nozzle": "Bocal", + "block.create.oak_window": "janela de carvalho", + "block.create.oak_window_pane": "Vidraça de carvalho", + "block.create.ochrum": "Ocrom", + "block.create.ochrum_pillar": "Pilar de Ocrom", "block.create.orange_sail": "Vela laranja", "block.create.orange_seat": "Assento laranja", "block.create.orange_toolbox": "Caixa de ferramentas laranja", "block.create.orange_valve_handle": "Válvula laranja", + "block.create.ornate_iron_window": "Janela ornamentada com ferro", + "block.create.ornate_iron_window_pane": "Vidraça ornamentada com ferro", + "block.create.oxidized_copper_shingle_slab": "Laje de telha de cobre oxidada", + "block.create.oxidized_copper_shingle_stairs": "Escada de telha de cobre oxidada", + "block.create.oxidized_copper_shingles": "Telha de cobre oxidada", + "block.create.oxidized_copper_tile_slab": "Laje de ladrilho de cobre oxidado", + "block.create.oxidized_copper_tile_stairs": "Escada de ladrilho de cobre oxidado", + "block.create.oxidized_copper_tiles": "Ladrilho de cobre oxidado", "block.create.peculiar_bell": "Sino peculiar", "block.create.pink_nixie_tube": "Tubo nixie rosa", "block.create.pink_sail": "Vela rosa", @@ -144,9 +321,66 @@ "block.create.pink_toolbox": "Caixa de ferramentas rosa", "block.create.pink_valve_handle": "Válvula rosa", "block.create.piston_extension_pole": "Vara de Extensão do Pistão", + "block.create.polished_cut_andesite": "Andesito lapidado polido", + "block.create.polished_cut_andesite_slab": "Laje de andesito lapidado polido", + "block.create.polished_cut_andesite_stairs": "Escada de andesito lapidado polido", + "block.create.polished_cut_andesite_wall": "Muro de andesito lapidado polido", + "block.create.polished_cut_asurine": "Asurino lapidado polido", + "block.create.polished_cut_asurine_slab": "Laje de Asurino lapidado polido", + "block.create.polished_cut_asurine_stairs": "Escada de Asurino lapidado polido", + "block.create.polished_cut_asurine_wall": "Muro de Asurino lapidado polido", + "block.create.polished_cut_calcite": "Calcita lapidada polida", + "block.create.polished_cut_calcite_slab": "Laje de calcita lapidada polida", + "block.create.polished_cut_calcite_stairs": "Escada de calcita lapidada polida", + "block.create.polished_cut_calcite_wall": "Muro de calcita lapidada polida", + "block.create.polished_cut_crimsite": "Carmesito lapidado polido", + "block.create.polished_cut_crimsite_slab": "Laje de Carmesito lapidado polido", + "block.create.polished_cut_crimsite_stairs": "Escada de Carmesito lapidado polido", + "block.create.polished_cut_crimsite_wall": "Muro de Carmesito lapidado polido", + "block.create.polished_cut_deepslate": "Ardósia lapidado polido", + "block.create.polished_cut_deepslate_slab": "Laje de ardósia lapidado polido", + "block.create.polished_cut_deepslate_stairs": "Escada de ardósia lapidado polido", + "block.create.polished_cut_deepslate_wall": "Muro de ardósia lapidado polido", + "block.create.polished_cut_diorite": "Diorito lapidado polido", + "block.create.polished_cut_diorite_slab": "Laje de diorito lapidado polido", + "block.create.polished_cut_diorite_stairs": "Escada de diorito lapidado polido", + "block.create.polished_cut_diorite_wall": "Muro de diorito lapidado polido", + "block.create.polished_cut_dripstone": "Espeleotema lapidado polido", + "block.create.polished_cut_dripstone_slab": "Laje de espeleotema lapidado polido", + "block.create.polished_cut_dripstone_stairs": "Escada de espeleotema lapidado polido", + "block.create.polished_cut_dripstone_wall": "Muro de espeleotema lapidado polido", + "block.create.polished_cut_granite": "Granito lapidado polido", + "block.create.polished_cut_granite_slab": "Laje de granito lapidado polido", + "block.create.polished_cut_granite_stairs": "Escada de granito lapidado polido", + "block.create.polished_cut_granite_wall": "Muro de granito lapidado polido", + "block.create.polished_cut_limestone": "Calcário lapidado polido", + "block.create.polished_cut_limestone_slab": "Laje de calcário lapidado polido", + "block.create.polished_cut_limestone_stairs": "Escada de calcário lapidado polido", + "block.create.polished_cut_limestone_wall": "Muro de calcário lapidado polido", + "block.create.polished_cut_ochrum": "Ocrom lapidado polido", + "block.create.polished_cut_ochrum_slab": "Laje de Ocrom lapidado polido", + "block.create.polished_cut_ochrum_stairs": "Escada de Ocrom lapidado polido", + "block.create.polished_cut_ochrum_wall": "Muro de Ocrom lapidado polido", + "block.create.polished_cut_scorchia": "Escória negra lapidada polida", + "block.create.polished_cut_scorchia_slab": "Laje de escória negra lapidada polida", + "block.create.polished_cut_scorchia_stairs": "Escada de escória negra lapidada polida", + "block.create.polished_cut_scorchia_wall": "Muro de escória negra lapidada polida", + "block.create.polished_cut_scoria": "Escória lapidada polida", + "block.create.polished_cut_scoria_slab": "Laje de escória lapidada polida", + "block.create.polished_cut_scoria_stairs": "Escada de escória lapidada polida", + "block.create.polished_cut_scoria_wall": "Muro de escória lapidada polida", + "block.create.polished_cut_tuff": "Tufo lapidado polido", + "block.create.polished_cut_tuff_slab": "Laje de tufo lapidado polido", + "block.create.polished_cut_tuff_stairs": "Escada de tufo lapidado polido", + "block.create.polished_cut_tuff_wall": "Muro de tufo lapidado polido", + "block.create.polished_cut_veridium": "Veridiano lapidado polido", + "block.create.polished_cut_veridium_slab": "Laje de Veridiano lapidado polido", + "block.create.polished_cut_veridium_stairs": "Escada de Veridiano lapidado polido", + "block.create.polished_cut_veridium_wall": "muro de Veridiano lapidado polido", "block.create.portable_fluid_interface": "Interface de fluidos portátil", "block.create.portable_storage_interface": "Interface de armazenamento portátil", - "block.create.powered_latch": "UNLOCALIZED: Powered Latch", + "block.create.powered_latch": "Trava de redstone", + "block.create.powered_toggle_latch": "Trave de alternância de redstone", "block.create.pulley_magnet": "Imã da Polia", "block.create.pulse_extender": "Extensor de pulso", "block.create.pulse_repeater": "Repetidor de Pulso", @@ -171,23 +405,122 @@ "block.create.sail_frame": "moldura de vela", "block.create.schematic_table": "Mesa de Esquema", "block.create.schematicannon": "Canhão de Esquema", + "block.create.scorchia": "Escória negra", + "block.create.scorchia_pillar": "Pilar de escória negra", + "block.create.scoria": "Escória", + "block.create.scoria_pillar": "Pilar de escória", "block.create.secondary_linear_chassis": "Chassis linear secundário", "block.create.sequenced_gearshift": "Câmbio sequenciado", "block.create.shadow_steel_casing": "Revestiment das Sombras", "block.create.shaft": "Eixo", - "block.create.smart_chute": "calha Inteligente", + "block.create.small_andesite_brick_slab": "Laje de tijolos pequenos de andesito", + "block.create.small_andesite_brick_stairs": "Escada de tijolos pequenos de andesito", + "block.create.small_andesite_brick_wall": "Muro de tijolos pequenos de andesito", + "block.create.small_andesite_bricks": "Tijolos pequenos de andesito", + "block.create.small_asurine_brick_slab": "Laje de tijolos pequenos de Asurino", + "block.create.small_asurine_brick_stairs": "Escada de tijolos pequenos de Asurino", + "block.create.small_asurine_brick_wall": "Muro de tijolos pequenos de Asurino", + "block.create.small_asurine_bricks": "Tijolos pequenos de Asurino", + "block.create.small_calcite_brick_slab": "Laje de tijolos pequenos de calcita", + "block.create.small_calcite_brick_stairs": "Escada de tijolos pequenos de calcita", + "block.create.small_calcite_brick_wall": "Muro de tijolos pequenos de calcita", + "block.create.small_calcite_bricks": "Tijolos pequenos de calcita", + "block.create.small_crimsite_brick_slab": "Laje de tijolos pequenos de Carmesito", + "block.create.small_crimsite_brick_stairs": "Escada de tijolos pequenos de Carmesito", + "block.create.small_crimsite_brick_wall": "Muro de tijolos pequenos de Carmesito", + "block.create.small_crimsite_bricks": "Tijolos pequenos de Carmesito", + "block.create.small_deepslate_brick_slab": "Laje de tijolos pequenos de ardósia", + "block.create.small_deepslate_brick_stairs": "Escada de tijolos pequenos de ardósia", + "block.create.small_deepslate_brick_wall": "Muro de tijolos pequenos de ardósia", + "block.create.small_deepslate_bricks": "Tijolos pequenos de ardósia", + "block.create.small_diorite_brick_slab": "Laje de tijolos pequenos de diorito", + "block.create.small_diorite_brick_stairs": "Escada de tijolos pequenos de diorito", + "block.create.small_diorite_brick_wall": "Muro de tijolos pequenos de diorito", + "block.create.small_diorite_bricks": "Tijolos pequenos de diorito", + "block.create.small_dripstone_brick_slab": "Laje de tijolos pequenos de espeleotema", + "block.create.small_dripstone_brick_stairs": "Escada de tijolos pequenos de espeleotema", + "block.create.small_dripstone_brick_wall": "Muro de tijolos pequenos de espeleotema", + "block.create.small_dripstone_bricks": "Tijolos pequenos de espeleotema", + "block.create.small_granite_brick_slab": "Laje de tijolos pequenos de granito", + "block.create.small_granite_brick_stairs": "Escada de tijolos pequenos de granito", + "block.create.small_granite_brick_wall": "Muro de tijolos pequenos de granito", + "block.create.small_granite_bricks": "Tijolos pequenos de granito", + "block.create.small_limestone_brick_slab": "Laje de tijolos pequenos de calcário", + "block.create.small_limestone_brick_stairs": "Escada de tijolos pequenos de calcário", + "block.create.small_limestone_brick_wall": "Muro de tijolos pequenos de calcário", + "block.create.small_limestone_bricks": "Tijolos pequenos de calcário", + "block.create.small_ochrum_brick_slab": "Laje de tijolos pequenos de Ocrom", + "block.create.small_ochrum_brick_stairs": "Escada de tijolos pequenos de Ocrom", + "block.create.small_ochrum_brick_wall": "Muro de tijolos pequenos de Ocrom", + "block.create.small_ochrum_bricks": "Tijolos pequenos de Ocrom", + "block.create.small_scorchia_brick_slab": "Laje de tijolos pequenos de escória negra", + "block.create.small_scorchia_brick_stairs": "Escada de tijolos pequenos de escória negra", + "block.create.small_scorchia_brick_wall": "Muro de tijolos pequenos de escória negra", + "block.create.small_scorchia_bricks": "Tijolos pequenos de escória negra", + "block.create.small_scoria_brick_slab": "Laje de tijolos pequenos de escória", + "block.create.small_scoria_brick_stairs": "Escada de tijolos pequenos de escória", + "block.create.small_scoria_brick_wall": "Muro de tijolos pequenos de escória", + "block.create.small_scoria_bricks": "Tijolos pequenos de escória", + "block.create.small_tuff_brick_slab": "Laje de tijolos pequenos de tufo", + "block.create.small_tuff_brick_stairs": "Escada de tijolos pequenos de tufo", + "block.create.small_tuff_brick_wall": "Muro de tijolos pequenos de tufo", + "block.create.small_tuff_bricks": "Tijolos pequenos de tufo", + "block.create.small_veridium_brick_slab": "Laje de tijolos pequenos de Veridiano", + "block.create.small_veridium_brick_stairs": "Escada de tijolos pequenos de Veridiano", + "block.create.small_veridium_brick_wall": "Muro de tijolos pequenos de Veridiano", + "block.create.small_veridium_bricks": "Tijolos pequenos de Veridiano", + "block.create.smart_chute": "Calha Inteligente", "block.create.smart_fluid_pipe": "Cano de Fluidos Inteligente", "block.create.speedometer": "Velocímetro", "block.create.spout": "Bica", + "block.create.spruce_window": "Janela de pinheiro", + "block.create.spruce_window_pane": "Vidraça de pinheiro", "block.create.sticker": "Adesivo", "block.create.sticky_mechanical_piston": "Pistão Mecânico Grudento", "block.create.stockpile_switch": "Disjuntor de Armazenamento", "block.create.stressometer": "Estressómetro", "block.create.tiled_glass": "Vidro Entalhado", "block.create.tiled_glass_pane": "Vidraça Entalhada", + "block.create.tuff_pillar": "Pilar de tufo", "block.create.turntable": "Mesa giratória", + "block.create.veridium": "Veridiano", + "block.create.veridium_pillar": "Pilar de Verdiano", + "block.create.vertical_framed_glass": "Vidro emoldurado vertical", + "block.create.vertical_framed_glass_pane": "Vidraça emoldurada vertical", + "block.create.warped_window": "Janela distorcida", + "block.create.warped_window_pane": "Vidraça distorcida", "block.create.water_wheel": "Roda de Ãgua", - "block.create.weighted_ejector": "Ejetor ´ponderado", + "block.create.waxed_copper_shingle_slab": "Laje de telha de cobre encerada", + "block.create.waxed_copper_shingle_stairs": "Escada de telha de cobre encerada", + "block.create.waxed_copper_shingles": "Telha de cobre encerada", + "block.create.waxed_copper_tile_slab": "Laje de ladrilho de cobre encerada", + "block.create.waxed_copper_tile_stairs": "Escada de ladrilho de cobre encerada", + "block.create.waxed_copper_tiles": "Ladrilho de cobre encerado", + "block.create.waxed_exposed_copper_shingle_slab": "Laje de telha de cobre exposta encerada", + "block.create.waxed_exposed_copper_shingle_stairs": "Escada de telha de cobre exposta encerada", + "block.create.waxed_exposed_copper_shingles": "Telha de cobre exposta encerada", + "block.create.waxed_exposed_copper_tile_slab": "Laje de ladrilho de cobre exposta encerada", + "block.create.waxed_exposed_copper_tile_stairs": "Escada de ladrilho de cobre exposta encerada", + "block.create.waxed_exposed_copper_tiles": "Ladrilhos de cobre exposto encerado", + "block.create.waxed_oxidized_copper_shingle_slab": "Laje de telha de cobre oxidada encerada", + "block.create.waxed_oxidized_copper_shingle_stairs": "Escada de telha de cobre oxidada encerada", + "block.create.waxed_oxidized_copper_shingles": "Telha de cobre oxidada encerada", + "block.create.waxed_oxidized_copper_tile_slab": "Laje de ladrilhos de cobre oxidada encerada", + "block.create.waxed_oxidized_copper_tile_stairs": "Escada de ladrilhos de cobre oxidada encerada", + "block.create.waxed_oxidized_copper_tiles": "Ladrilhos de cobre oxidado encerado", + "block.create.waxed_weathered_copper_shingle_slab": "Laje de telha de cobre desgastada encerada", + "block.create.waxed_weathered_copper_shingle_stairs": "Escada de telha de cobre desgastada encerada", + "block.create.waxed_weathered_copper_shingles": "Telha de cobre desgastada encereda", + "block.create.waxed_weathered_copper_tile_slab": "Laje de ladrilho de cobre desgastado encerado", + "block.create.waxed_weathered_copper_tile_stairs": "Escada de ladrilho de cobre desgastado encerado", + "block.create.waxed_weathered_copper_tiles": "Ladrilho de cobre desgastado encerado", + "block.create.weathered_copper_shingle_slab": "Laje de telha de cobre desgastada encerada", + "block.create.weathered_copper_shingle_stairs": "Escada de telha de cobre desgastada encerada", + "block.create.weathered_copper_shingles": "Telha de cobre desgastada encerada", + "block.create.weathered_copper_tile_slab": "Laje de ladrilhos de cobre desgastada encerada", + "block.create.weathered_copper_tile_stairs": "Escada de ladrilhos de cobre desgastada encerada", + "block.create.weathered_copper_tiles": "Ladrilhos de cobre desgastado encerado", + "block.create.weighted_ejector": "Ejetor ponderado", "block.create.white_nixie_tube": "Tubo nixie branco", "block.create.white_sail": "Vela branca", "block.create.white_seat": "Assento branco", @@ -264,11 +597,12 @@ "item.create.furnace_minecart_contraption": "Engenhoca de Carrinho de Mina com Fornalha", "item.create.goggles": "Óculos de Engenheiro", "item.create.golden_sheet": "Chapa de Ouro", - "item.create.handheld_worldshaper": "Modelador de Mundo Criativo", + "item.create.handheld_worldshaper": "Terraformador de Mundo Criativo", "item.create.honey_bucket": "Balde de Mel", "item.create.honeyed_apple": "Maçã com Cobertura de Mel", "item.create.incomplete_cogwheel": "Roda Dentada Incompleta", "item.create.incomplete_large_cogwheel": "Roda Dentada Grande Incompleta", + "item.create.incomplete_netherrack": "Netherrack incompleta", "item.create.incomplete_precision_mechanism": "Mecanismo de Precisão", "item.create.iron_sheet": "Chapa de Ferro", "item.create.linked_controller": "Controle conectado", @@ -321,8 +655,8 @@ "advancement.create.chute.desc": "coloque uma calha a versão vertical da esteira mecanica.", "advancement.create.upward_chute": "Abdução aéria", "advancement.create.upward_chute.desc": "Assista um item voar para cima numa calha com ventilador.", - "advancement.create.belt_funnel.desc": "Coloque um funil lateral em cima de uma esteira ou depósito para criar um tipo especial.", - "advancement.create.belt_funnel_kiss": "UNLOCALIZED: The Parrots and the Flaps", + "advancement.create.belt_funnel.desc": "Coloque um funil lateral em cima de uma esteira ou depósito para criar um tipo especial.", + "advancement.create.belt_funnel_kiss.desc": "Faça dois funis de esteira beijarem.", "advancement.create.fan": "Dobrador de ar mecânico", "advancement.create.fan.desc": "Pegue uma carona no fluxo de ar provido pelo ventilador revestido.", "advancement.create.fan_lava": "Aquecedor de espaço geotermal", @@ -385,6 +719,7 @@ "advancement.create.copper_casing.desc": "Use um pouco de chapas de cobre e madeira para criar um pouco de revestimentos de cobre.", "advancement.create.spout": "Sploosh", "advancement.create.spout.desc": "Assista um item ser enchido usando uma bica.", + "advancement.create.spout_potion": "Mestre de química", "advancement.create.spout_potion.desc": "Assista uma bica encher uma garrafa com uma poção.", "advancement.create.chocolate": "Um mundo de imaginação", "advancement.create.chocolate.desc": "Obtenha um balde de chocolate.", @@ -430,8 +765,11 @@ "advancement.create.arm_many_targets.desc": "Programe um braço mecânico com dez ou mais locais de saida.", "advancement.create.arm_blaze_burner": "Combuste-tron", "advancement.create.arm_blaze_burner.desc": "Instrua um braço mecânico para alimentar seu queimador de blaze.", + "advancement.create.fist_bump": "Bate isso, mano!", + "advancement.create.fist_bump.desc": "Faça dois implantadores baterem com o punho.", "advancement.create.crushing_wheel": "Par de gigantes", "advancement.create.crushing_wheel.desc": "Crie algumas rodas de moer para triturar alguns materiais eficientemente.", + "advancement.create.blaze_cake": "Descarga de açucar", "advancement.create.blaze_cake.desc": "Asse para o seu queimador de blaze um bolo especial.", "advancement.create.wand_of_symmetry": "Espelhos radiantes", "advancement.create.wand_of_symmetry.desc": "Fabrique uma varinha de simetria.", @@ -465,18 +803,47 @@ "death.attack.create.cuckoo_clock_explosion": "%1$s foi explodido por relógio cuco adulterado", "death.attack.create.cuckoo_clock_explosion.player": "%1$s foi explodido por relógio cuco adulterado", - "create.recipe.crushing": "Moendo", + + "create.recipe.crushing": "Triturando", + "create.recipe.milling": "Moendo", "create.recipe.fan_washing": "Lavagem em massa", "create.recipe.fan_washing.fan": "Ventilador atrás de água", "create.recipe.fan_smoking": "Defumação em massa", - "create.recipe.fan_smoking.fan": "Ventilador atrás de fogo", + "create.recipe.fan_smoking.fan": "Ventilador atrás do fogo", + "create.recipe.fan_haunting": "Assombração em massa", + "create.recipe.fan_haunting.fan": "Ventilador atrás do fogo das almas ", "create.recipe.fan_blasting": "Fundição em massa", "create.recipe.fan_blasting.fan": "entilador atrás de lava", - "create.recipe.pressing": "Prensa Mecânica", + "create.recipe.pressing": "Prensando", "create.recipe.mixing": "Misturando", "create.recipe.deploying": "Implantando", + "create.recipe.automatic_shapeless": "Fabricação sem forma automático", "create.recipe.packing": "Compactando", - "create.recipe.sawing": "UNLOCALIZED: Sawing", + "create.recipe.automatic_packing": "Compactamento automático", + "create.recipe.sawing": "Serrando", + "create.recipe.mechanical_crafting": "Fabricação mecânica", + "create.recipe.automatic_shaped": "Fabricação com forma automática", + "create.recipe.block_cutting": "Corte de blocos", + "create.recipe.wood_cutting": "Corte de madeira", + "create.recipe.sandpaper_polishing": "Polimento com lixa", + "create.recipe.mystery_conversion": "Conversão misteriosa", + "create.recipe.spout_filling": "Preenchimento com bica", + "create.recipe.draining": "Drenação de item", + "create.recipe.sequenced_assembly": "Montagem sequenciada", + "create.recipe.assembly.next": "Proximo: %1$s", + "create.recipe.assembly.step": "Passo %1$s:", + "create.recipe.assembly.progress": "Progresso: %1$s/%2$s", + "create.recipe.assembly.pressing": "Processa na prensa", + "create.recipe.assembly.spout_filling_fluid": "Despejar %1$s", + "create.recipe.assembly.deploying_item": "Implantar %1$s", + "create.recipe.assembly.cutting": "Cortado com serra", + "create.recipe.assembly.repeat": "Repetir sequencia %1$s vezes", + "create.recipe.assembly.junk": "Recuperação aleatório", + "create.recipe.processing.chance": "%1$s%% Chance", + "create.recipe.deploying.not_consumed": "Não consumido", + "create.recipe.heat_requirement.none": "Aquecimento não requerido", + "create.recipe.heat_requirement.heated": "Aquecido", + "create.recipe.heat_requirement.superheated": "Super-aquecido", "create.generic.range": "Ãrea", "create.generic.radius": "Raio", @@ -509,6 +876,13 @@ "create.gui.scrollInput.scrollToSelect": "Role o mouse para Selecionar", "create.gui.toolmenu.focusKey": "Segure [%1$s] para Focar", "create.gui.toolmenu.cycle": "[SCROLL] para Circular", + + "create.toolbox.unequip": "UNLOCALIZED: Unequip: %1$s", + "create.toolbox.outOfRange": "UNLOCALIZED: Toolbox of held item not in Range", + "create.toolbox.detach": "UNLOCALIZED: Stop tracking and keep item", + "create.toolbox.depositAll": "UNLOCALIZED: Return items to nearby Toolboxes", + "create.toolbox.depositBox": "UNLOCALIZED: Return items to Toolbox", + "create.gui.symmetryWand.mirrorType": "Espelhar", "create.gui.symmetryWand.orientation": "Orientação", @@ -522,6 +896,7 @@ "create.orientation.alongZ": "Através de Z", "create.orientation.alongX": "Através de X", + "create.gui.goggles.generator_stats": "Estatísticas do gerador:", "create.gui.goggles.kinetic_stats": "Estatísticas cinéticas:", "create.gui.goggles.at_current_speed": "Na velocidade atual", @@ -532,6 +907,8 @@ "create.schematicAndQuill.secondPos": "Segunda posição feita.", "create.schematicAndQuill.noTarget": "Seguro [Ctrl] para selecionar Blocos de Ar.", "create.schematicAndQuill.abort": "Seleção removida.", + "create.schematicAndQuill.title": "UNLOCALIZED: Schematic Name:", + "create.schematicAndQuill.convert": "UNLOCALIZED: Save and Upload Immediately", "create.schematicAndQuill.fallbackName": "Meu Esquema", "create.schematicAndQuill.saved": "Salvo como %1$s", @@ -609,7 +986,7 @@ "create.schematicannon.status.finished": "Concluído", "create.schematicannon.status.paused": "Pausado", "create.schematicannon.status.stopped": "Parada", - "create.schematicannon.status.noGunpowder": "UNLOCALIZED: Sem pólvora", + "create.schematicannon.status.noGunpowder": "Sem pólvora", "create.schematicannon.status.targetNotLoaded": "Bloco não carregado", "create.schematicannon.status.targetOutsideRange": "Alvo está muito Longe", "create.schematicannon.status.searching": "Procurando", @@ -621,8 +998,11 @@ "create.schematicannon.status.schematicNotPlaced": "Esquema não Colocado", "create.schematicannon.status.schematicExpired": "Arquivo de Esquema Expirado", + + "_": "->------------------------] Subtitles [------------------------<-", + "_": "->------------------------] Item Descriptions [------------------------<-", "item.create.example_item.tooltip": "EXAMPLE ITEM (just a marker that this tooltip exists)", @@ -633,6 +1013,7 @@ "item.create.example_item.tooltip.behaviour2": "You can add as many behaviours as you like", "item.create.example_item.tooltip.control1": "Quando Ctrl pressed", "item.create.example_item.tooltip.action1": "These controls are displayed.", + "block.create.wooden_bracket.tooltip.summary": "UNLOCALIZED: _Decorate_ your _Shafts, Cogwheels_ and _Pipes_ with a cozy and wooden bit of reinforcement.", "item.create.wand_of_symmetry.tooltip": "VARINHA DE SIMETRIA", "item.create.wand_of_symmetry.tooltip.summary": "Espelhar perfeitamente a colocação de blocos nos planos configurados.", "item.create.wand_of_symmetry.tooltip.condition1": "Quando na Hotbar", @@ -643,10 +1024,13 @@ "item.create.wand_of_symmetry.tooltip.action2": "_Remove_ o Espelho ativo", "item.create.wand_of_symmetry.tooltip.control3": "B-Direito enquanto Abaixado", "item.create.wand_of_symmetry.tooltip.action3": "Abre _Interface_ de _Configuração_", + "item.create.tree_fertilizer.tooltip": "FERTILIZANTE DE ARVORE", "item.create.tree_fertilizer.tooltip.summary": "Uma combinação poderosa de minerais para tipos comuns de arvores", "item.create.tree_fertilizer.tooltip.condition1": "Quando usada em Mudas", "item.create.tree_fertilizer.tooltip.behaviour1": "Cresce Arvores independentemente das suas Regras de espaço", + + "item.create.empty_schematic.tooltip": "ESQUEMA VAZIO", "item.create.empty_schematic.tooltip.summary": "Usado como ingrediente em receitas e para escrever na _Mesa_ _de_ _Esquematizar_", @@ -677,19 +1061,25 @@ "block.create.schematic_table.tooltip.summary": "Escreve Esquemas salvos into um _Esquema_ _Vazio_", "block.create.schematic_table.tooltip.condition1": "Quando recebe um Esquema Vazio", "block.create.schematic_table.tooltip.behaviour1": "Importa um Arquivo escolhido da sua Pasta de Esquemas", + + "block.create.turntable.tooltip": "MESA GIRATÓRIA", "block.create.turntable.tooltip.summary": "Muda a _Força_ _Rotacional_ em uma forma refinada de Enjoo.", + "block.create.stockpile_switch.tooltip": "DISJUNTOR DE ARMAZENAMENTO", "block.create.stockpile_switch.tooltip.summary": "Alterna um sinal de Redstone com base no _Espaço_ de _Armazenamento_ do Reciente conectado.", "block.create.stockpile_switch.tooltip.condition1": "Quando abaixo do Limite Mínimo", "block.create.stockpile_switch.tooltip.behaviour1": "Para de enviar _Sinal_ de _Redstone_", + "block.create.creative_crate.tooltip": "Caixa Criativa", "block.create.creative_crate.tooltip.summary": "Provê um suprimento infinito de blocos para Canho~es de Esquema próximos", + "_": "->------------------------] Ponder Content [------------------------<-", + "_": "Thank you for translating Create!" } From 6315749cf62c766fde58d5bdd7a20664b79a60c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=92=80=E5=A2=83=E7=9F=B3?= Date: Fri, 4 Mar 2022 00:40:05 +0800 Subject: [PATCH 15/29] Updates to zh_cn.json by Demonese (#2717) --- src/main/resources/assets/create/lang/zh_cn.json | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/main/resources/assets/create/lang/zh_cn.json b/src/main/resources/assets/create/lang/zh_cn.json index a4431405c..158b6193d 100644 --- a/src/main/resources/assets/create/lang/zh_cn.json +++ b/src/main/resources/assets/create/lang/zh_cn.json @@ -1,4 +1,5 @@ { + "_": "Missing Localizations: 0", "_": "->------------------------] Game Elements [------------------------<-", @@ -232,8 +233,8 @@ "block.create.hand_crank": "手摇曲柄", "block.create.haunted_bell": "森魂钟", "block.create.honey": "蜂蜜", - "block.create.horizontal_framed_glass": "竖直边框玻璃", - "block.create.horizontal_framed_glass_pane": "竖直边框玻璃æ¿", + "block.create.horizontal_framed_glass": "水平边框玻璃", + "block.create.horizontal_framed_glass_pane": "水平边框玻璃æ¿", "block.create.hose_pulley": "软管滑轮", "block.create.item_drain": "分液池", "block.create.item_vault": "物å“ä¿é™©åº“", @@ -820,6 +821,8 @@ "create.recipe.fan_washing.fan": "在水åŽæ”¾ç½®é¼“风机", "create.recipe.fan_smoking": "批é‡çƒŸç†", "create.recipe.fan_smoking.fan": "在ç«ç„°åŽæ”¾ç½®é¼“风机", + "create.recipe.fan_haunting": "批é‡ç¼ é­‚", + "create.recipe.fan_haunting.fan": "在çµé­‚ç«åŽæ”¾ç½®é¼“风机", "create.recipe.fan_blasting": "批é‡ç†”炼", "create.recipe.fan_blasting.fan": "在熔岩åŽæ”¾ç½®é¼“风机", "create.recipe.pressing": "金属压片", @@ -1162,6 +1165,8 @@ "create.item_attributes.furnace_fuel.inverted": "ä¸å¯ä½œä¸ºç‡ƒæ–™", "create.item_attributes.washable": "å¯è¢«æ´—涤", "create.item_attributes.washable.inverted": "ä¸å¯è¢«æ´—涤", + "create.item_attributes.hauntable": "å¯è¢«ç¼ é­‚", + "create.item_attributes.hauntable.inverted": "ä¸å¯è¢«ç¼ é­‚", "create.item_attributes.crushable": "å¯è¢«ç²‰ç¢Ž", "create.item_attributes.crushable.inverted": "ä¸å¯è¢«ç²‰ç¢Ž", "create.item_attributes.smeltable": "å¯è¢«ç†”炉烧制", From cef481653e10c5cfb20ae0dca3f67e5136059c00 Mon Sep 17 00:00:00 2001 From: CKenJa <41111170+CKenJa@users.noreply.github.com> Date: Fri, 4 Mar 2022 01:42:00 +0900 Subject: [PATCH 16/29] Updates to ja_jp.json by CKenJa (#2780) --- src/main/resources/assets/create/lang/ja_jp.json | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/main/resources/assets/create/lang/ja_jp.json b/src/main/resources/assets/create/lang/ja_jp.json index 03ce7fa24..3c21c5a46 100644 --- a/src/main/resources/assets/create/lang/ja_jp.json +++ b/src/main/resources/assets/create/lang/ja_jp.json @@ -642,7 +642,7 @@ "advancement.create.its_alive.desc": "機械ã®å›žè»¢ã‚’åˆã‚ã¦è¦‹ã‚‹", "advancement.create.shifting_gears": "ギアシフトï¼", "advancement.create.shifting_gears.desc": "大ãã„歯車ã¨å°ã•ã„歯車を噛ã¿åˆã‚ã›ã¦å›žè»¢é€Ÿåº¦ã‚’変更ã™ã‚‹", - "advancement.create.overstressed": "超éŽå¿œåŠ›", + "advancement.create.overstressed": "応力超éŽ", "advancement.create.overstressed.desc": "応力ã®é™ç•Œã‚’è‚Œã§æ„Ÿã˜ã‚‹", "advancement.create.belt": "ベルトコンブア", "advancement.create.belt.desc": "2ã¤ã®ã‚·ãƒ£ãƒ•ãƒˆã‚’メカニカルベルトã§ç¹‹ã", @@ -755,7 +755,7 @@ "advancement.create.flywheel": "工場ã®å¿ƒè‡“部", "advancement.create.flywheel.desc": "ã‹ã¾ã©ã‚¨ãƒ³ã‚¸ãƒ³ã‚’å¼¾ã¿è»Šã«ç¹‹ã", "advancement.create.overstress_flywheel": "ãƒã‚¤ãƒ¬ãƒ™ãƒ«å¿œåŠ›", - "advancement.create.overstress_flywheel.desc": "ã‹ã¾ã©ã‚¨ãƒ³ã‚¸ãƒ³ã«è¶…éŽå¿œåŠ›ã‚’ã‹ã‘ã‚‹", + "advancement.create.overstress_flywheel.desc": "ã‹ã¾ã©ã‚¨ãƒ³ã‚¸ãƒ³ã«å¿œåŠ›è¶…éŽã‚’ã‹ã‘ã‚‹", "advancement.create.precision_mechanism": "手間暇ã‹ã‘ãŸéª¨è‘£å“", "advancement.create.precision_mechanism.desc": "精密機構を組ã¿ç«‹ã¦ã‚‹", "advancement.create.mechanical_arm": "手ãŒé›¢ã›ãªã„ï¼", @@ -821,6 +821,8 @@ "create.recipe.fan_washing.fan": "æ°´ã®å¥¥ã®ã‚±ãƒ¼ã‚¹å…¥ã‚Šãƒ•ã‚¡ãƒ³", "create.recipe.fan_smoking": "一括燻製", "create.recipe.fan_smoking.fan": "ç‚Žã®å¥¥ã®ã‚±ãƒ¼ã‚¹å…¥ã‚Šãƒ•ã‚¡ãƒ³", + "create.recipe.fan_haunting": "一括憑霊", + "create.recipe.fan_haunting.fan": "é­‚ã®ç‚Žã®å¥¥ã®ã‚±ãƒ¼ã‚¹å…¥ã‚Šãƒ•ã‚¡ãƒ³", "create.recipe.fan_blasting": "一括精錬", "create.recipe.fan_blasting.fan": "溶岩ã®å¥¥ã®ã‚±ãƒ¼ã‚¹å…¥ã‚Šãƒ•ã‚¡ãƒ³", "create.recipe.pressing": "プレス", @@ -991,10 +993,10 @@ "create.gui.speedometer.title": "回転速度", "create.gui.stressometer.title": "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã®å¿œåŠ›", "create.gui.stressometer.capacity": "残りã®å¿œåŠ›è¨±å®¹é‡", - "create.gui.stressometer.overstressed": "超éŽå¿œåŠ›", + "create.gui.stressometer.overstressed": "応力超éŽ", "create.gui.stressometer.no_rotation": "回転ãªã—", "create.gui.contraptions.not_fast_enough": "ã“ã® %1$s ã¯_å分速ã_回転_ã—ã¦ã„ãªã„_よã†ã§ã™ã€‚", - "create.gui.contraptions.network_overstressed": "ã“ã®ä»•æŽ›ã‘ã¯_超éŽå¿œåŠ›_ã®ã‚ˆã†ã§ã™ã€‚ã•ã‚‰ã«åŽŸå‹•æ©Ÿã‚’追加ã™ã‚‹ã‹ã€_応力_ã¸ã®å½±éŸ¿ãŒå¤§ãã„機械ã®å›žè»¢é€Ÿåº¦ã‚’_下ã’ã¦_ãã ã•ã„。", + "create.gui.contraptions.network_overstressed": "ã“ã®ä»•æŽ›ã‘ã¯_応力超éŽ_ã®ã‚ˆã†ã§ã™ã€‚ã•ã‚‰ã«åŽŸå‹•æ©Ÿã‚’追加ã™ã‚‹ã‹ã€_応力_ã¸ã®å½±éŸ¿ãŒå¤§ãã„機械ã®å›žè»¢é€Ÿåº¦ã‚’_下ã’ã¦_ãã ã•ã„。", "create.gui.adjustable_crate.title": "å¯å¤‰ã‚¯ãƒ¬ãƒ¼ãƒˆ", "create.gui.adjustable_crate.storageSpace": "åŽç´ã‚¹ãƒšãƒ¼ã‚¹", "create.gui.stockpile_switch.title": "在庫スイッãƒ", @@ -1163,6 +1165,8 @@ "create.item_attributes.furnace_fuel.inverted": "ã‹ã¾ã©ã®ç‡ƒæ–™ã§ãªã„ã‹", "create.item_attributes.washable": "洗浄ã§ãã‚‹ã‹ã‹", "create.item_attributes.washable.inverted": "洗浄ã§ããªã„ã‹", + "create.item_attributes.hauntable": "憑霊ã§ãã‚‹ã‹", + "create.item_attributes.hauntable.inverted": "憑霊ã§ããªã„ã‹", "create.item_attributes.crushable": "粉砕ã§ãã‚‹ã‹ã‹", "create.item_attributes.crushable.inverted": "粉砕ã§ããªã„ã‹", "create.item_attributes.smeltable": "精錬ã§ãã‚‹ã‹ã‹", @@ -1233,7 +1237,7 @@ "create.tooltip.stressImpact.low": "低", "create.tooltip.stressImpact.medium": "中", "create.tooltip.stressImpact.high": "高", - "create.tooltip.stressImpact.overstressed": "超éŽå¿œåŠ›", + "create.tooltip.stressImpact.overstressed": "応力超éŽ", "create.tooltip.capacityProvided": "応力許容é‡: %1$s", "create.tooltip.capacityProvided.low": "å°", "create.tooltip.capacityProvided.medium": "中", From bfab1d30c28b4b456720bf0f3a8251ec8495230f Mon Sep 17 00:00:00 2001 From: qkrehf2 <64183602+qkrehf2@users.noreply.github.com> Date: Fri, 4 Mar 2022 01:52:12 +0900 Subject: [PATCH 17/29] Updates to ko_kr.json by qkrehf2 (#2805) --- src/main/resources/assets/create/lang/ko_kr.json | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/main/resources/assets/create/lang/ko_kr.json b/src/main/resources/assets/create/lang/ko_kr.json index dc3776b67..8ba788049 100644 --- a/src/main/resources/assets/create/lang/ko_kr.json +++ b/src/main/resources/assets/create/lang/ko_kr.json @@ -819,6 +819,8 @@ "create.recipe.fan_washing.fan": "물과 ì„ í’기", "create.recipe.fan_smoking": "훈연", "create.recipe.fan_smoking.fan": "불과 ì„ í’기", + "create.recipe.fan_haunting": "심령", + "create.recipe.fan_haunting.fan": "ì˜í˜¼ 불과 ì„ í’기", "create.recipe.fan_blasting": "제련", "create.recipe.fan_blasting.fan": "용암과 ì„ í’기", "create.recipe.pressing": "ì••ì°©", @@ -890,7 +892,7 @@ "create.gui.toolmenu.cycle": "스í¬ë¡¤ë¡œ 순환", "create.toolbox.unequip": "ë˜ëŒë¦¬ê¸°: %1$s", - "create.toolbox.outOfRange": "현재 ì•„ì´í…œì€ 공구ìƒìžì™€ 너무 멀리있습니다", + "create.toolbox.outOfRange": "현재 ì•„ì´í…œì€ 공구ìƒìžì™€ 너무 멀리 있습니다", "create.toolbox.detach": "공구ìƒìžì™€ ì—°ê²° ëŠê¸°", "create.toolbox.depositAll": "근처 공구ìƒìžë¡œ 모든 ì•„ì´í…œ ë˜ëŒë¦¬ê¸°", "create.toolbox.depositBox": "공구ìƒìžë¡œ ì•„ì´í…œ ë˜ëŒë¦¬ê¸°", @@ -1027,7 +1029,7 @@ "create.schematicAndQuill.abort": "위치 ì„¤ì •ì„ ì œê±°í–ˆìŠµë‹ˆë‹¤.", "create.schematicAndQuill.title": "ì„¤ê³„ë„ ì´ë¦„:", "create.schematicAndQuill.convert": "저장하고 즉시 ì ìš©", - "create.schematicAndQuill.fallbackName": "My Schematic", + "create.schematicAndQuill.fallbackName": "ë‚´ 청사진", "create.schematicAndQuill.saved": "%1$s으(ë¡œ) 저장했습니다", "create.schematic.invalid": "[!] 없는 ì•„ì´í…œ - 청사진 í…Œì´ë¸”ì„ ì´ìš©í•˜ì„¸ìš”", @@ -1096,12 +1098,12 @@ "create.gui.schematicannon.option.replaceWithAny": "온전한 블ë¡ì„ 아무 재료로 대체함", "create.gui.schematicannon.option.replaceWithEmpty": "온전한 블ë¡ì„ 공기로 채움", "create.gui.schematicannon.option.skipMissing": "부족한 블ë¡ì„ 무시하고 진행", - "create.gui.schematicannon.option.skip타ì¼Entities": "íƒ€ì¼ ì—”í‹°í‹°ë¥¼ 보호", + "create.gui.schematicannon.option.skipTileEntities": "ë¸”ë¡ ì—”í‹°í‹° 보호", "create.gui.schematicannon.slot.gunpowder": "í™”ì•½ì„ ë„£ì–´ ëŒ€í¬ ì—°ë£Œë¥¼ 채우세요", "create.gui.schematicannon.slot.listPrinter": "ì±…ì„ ë„£ì–´ 건축 재료 ì²´í¬ë¦¬ìŠ¤íŠ¸ë¥¼ ì¸ì‡„하세요", "create.gui.schematicannon.slot.schematic": "ì—¬ê¸°ì— ì²­ì‚¬ì§„ì„ ë„£ìœ¼ì„¸ìš”. 건설 êµ¬ì—­ì´ ì„¤ì •ë˜ì–´ 있어야 합니다.", "create.gui.schematicannon.option.skipMissing.description": "만약 대í¬ê°€ ì„¤ì¹˜ì— í•„ìš”í•œ 블ë¡ì„ 찾지 못할 경우,건너뛰고 ë‹¤ìŒ ë¸”ë¡ ì„¤ì¹˜ë¥¼ 진행합니다.", - "create.gui.schematicannon.option.skip타ì¼Entities.description": "대í¬ê°€ ìƒì„¸ì •ë³´ê°€ ë“  ìƒìžê°™ì€ íƒ€ì¼ ì—”í‹°í‹° 설치를 무시합니다.", + "create.gui.schematicannon.option.skipTileEntities.description": "대í¬ê°€ ìƒìž, í™”ë¡œê°™ì´ ë°ì´í„°ê°€ 담긴 블ë¡ì„ 설치하지 않습니다.", "create.gui.schematicannon.option.dontReplaceSolid.description": "대í¬ê°€ ìž‘ì—…êµ¬ì—­ì˜ ì˜¨ì „í•œ 블ë¡ì„ 대체하지 않습니다.", "create.gui.schematicannon.option.replaceWithSolid.description": "대í¬ê°€ ìž‘ì—…êµ¬ì—­ì˜ ì˜¨ì „í•œ 블ë¡ì„ 대í¬ê°€ 가진 재료로 대체합니다.", "create.gui.schematicannon.option.replaceWithAny.description": "대í¬ê°€ ìž‘ì—…êµ¬ì—­ì˜ ì˜¨ì „í•œ 블ë¡ì„ 대í¬ê°€ 가진 ì–´ë– í•œ 재료로든 대체합니다.", @@ -1161,6 +1163,8 @@ "create.item_attributes.furnace_fuel.inverted": "화로 연료로 쓸 수 ì—†ìŒ", "create.item_attributes.washable": "ì„¸ì²™ë  ìˆ˜ 있ìŒ", "create.item_attributes.washable.inverted": "ì„¸ì²™ë  ìˆ˜ ì—†ìŒ", + "create.item_attributes.hauntable": "귀신들릴 수 있ìŒ", + "create.item_attributes.hauntable.inverted": "귀신들릴 수 ì—†ìŒ", "create.item_attributes.crushable": "ë¶„ì‡„ë  ìˆ˜ 있ìŒ", "create.item_attributes.crushable.inverted": "ë¶„ì‡„ë  ìˆ˜ ì—†ìŒ", "create.item_attributes.smeltable": "구워질 수 있ìŒ", @@ -1364,7 +1368,6 @@ "create.subtitle.depot_plop": "ì•„ì´í…œì´ 놓임", "create.subtitle.confirm": "확ì¸ìŒ", - "_": "->------------------------] Item Descriptions [------------------------<-", "item.create.example_item.tooltip": "EXAMPLE ITEM (just a marker that this tooltip exists)", From 97ea78e85247d7c027992336333ca83633aa9823 Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Thu, 3 Mar 2022 18:10:35 +0100 Subject: [PATCH 18/29] Post-PR Datagen --- src/generated/resources/.cache/cache | 22 +- .../resources/assets/create/lang/en_us.json | 84 +- .../assets/create/lang/unfinished/de_de.json | 12 +- .../assets/create/lang/unfinished/es_es.json | 6 +- .../assets/create/lang/unfinished/fr_fr.json | 76 +- .../assets/create/lang/unfinished/ja_jp.json | 20 +- .../assets/create/lang/unfinished/ko_kr.json | 18 +- .../assets/create/lang/unfinished/nl_nl.json | 84 +- .../assets/create/lang/unfinished/pt_br.json | 750 +++++++++--------- .../assets/create/lang/unfinished/pt_pt.json | 2 +- .../assets/create/lang/unfinished/zh_cn.json | 14 +- .../data/create/advancements/aesthetics.json | 4 +- 12 files changed, 546 insertions(+), 546 deletions(-) diff --git a/src/generated/resources/.cache/cache b/src/generated/resources/.cache/cache index 5189526df..72d0b3679 100644 --- a/src/generated/resources/.cache/cache +++ b/src/generated/resources/.cache/cache @@ -531,20 +531,20 @@ bf2b0310500213ff853c748c236eb5d01f61658e assets/create/blockstates/yellow_toolbo 7f39521b211441f5c3e06d60c5978cebe16cacfb assets/create/blockstates/zinc_block.json b7181bcd8182b2f17088e5aa881f374c9c65470c assets/create/blockstates/zinc_ore.json 64a8442735a333c7444cac12cfb22c454ca06b6b assets/create/lang/en_ud.json -7f4222143f17e12d1e89a08d91ff97555f3c945e assets/create/lang/en_us.json -b375c968109083d7839b80ad347a43b8861a45ac assets/create/lang/unfinished/de_de.json +3025898bb663b49ed550213a215cef18b0088e0a assets/create/lang/en_us.json +8c61dfd075c622ae55e357356e892c5beee2c3aa assets/create/lang/unfinished/de_de.json a8b0d479a7817127bc52569167f32378e11420ce assets/create/lang/unfinished/es_cl.json -dda7983a065205140c8092b47ed7d4111c4c28a2 assets/create/lang/unfinished/es_es.json -8c4ff5b38bae4c8bcc2fec698be98ca26fe09145 assets/create/lang/unfinished/fr_fr.json +2dde88b654172a69c9f68eb54584e7f68c8600fc assets/create/lang/unfinished/es_es.json +88a8d4a8658ff96b778112769c2b9f8ee1af12f6 assets/create/lang/unfinished/fr_fr.json 42281c85374f9583bfb714cc2a634bf59e5cec19 assets/create/lang/unfinished/it_it.json -2a5261a51c544bd30fed6124fb39e386779b589b assets/create/lang/unfinished/ja_jp.json -69f32419986e38bad60fe437f6ea5c07a3a61cf1 assets/create/lang/unfinished/ko_kr.json -f0c2e7e2cdf82a9e8d1ce2d256982bf2050aa63c assets/create/lang/unfinished/nl_nl.json +0ca86935c39301220f609bdf5145b34b55bdd6bd assets/create/lang/unfinished/ja_jp.json +eafcb60d35104abe3453542628772d32ac631e33 assets/create/lang/unfinished/ko_kr.json +99775dd562ee0457f39b54f5d850c1bc6529a840 assets/create/lang/unfinished/nl_nl.json c3f46417c4b5e3c0a83f5a1affcf21ecd2d4694f assets/create/lang/unfinished/pl_pl.json -9bdaf0b9b51b35fd10934be46954932d58199a21 assets/create/lang/unfinished/pt_br.json -f96ba0f96eb04753ef4431bdda63049174792d12 assets/create/lang/unfinished/pt_pt.json +6b09310200f780020965bcd5db768d28081efcf5 assets/create/lang/unfinished/pt_br.json +cfcfc82ad5b307b7395f66057dbda849e70c08f9 assets/create/lang/unfinished/pt_pt.json 34f8b480a8af8e449a3dfb8c978bbceeb934824f assets/create/lang/unfinished/ru_ru.json -78690f57ef5d7dfa40026c6a7558df34203a59b5 assets/create/lang/unfinished/zh_cn.json +396ff04a12796b38deb0697e36f970c75db814e6 assets/create/lang/unfinished/zh_cn.json 1116935a6b993de72ec7e15a8f44d06a7de3ebe7 assets/create/lang/unfinished/zh_tw.json 487a511a01b2a4531fb672f917922312db78f958 assets/create/models/block/acacia_window.json b48060cba1a382f373a05bf0039054053eccf076 assets/create/models/block/acacia_window_pane_noside.json @@ -2126,7 +2126,7 @@ d080b1b25e5bc8baf5aee68691b08c7f12ece3b0 assets/create/models/item/windmill_bear a80fb25a0b655e76be986b5b49fcb0f03461a1ab assets/create/models/item/zinc_nugget.json b1689617190c05ef34bd18456b0c7ae09bb3210f assets/create/models/item/zinc_ore.json 5049f72c327a88f175f6f9425909e098fc711100 assets/create/sounds.json -0f1b4b980afba9bf2caf583b88e261bba8b10313 data/create/advancements/aesthetics.json +5d0cc4c0255dc241e61c173b31ddca70c88d08e4 data/create/advancements/aesthetics.json 613e64b44bed959da899fdd54c1cacb227fb33f2 data/create/advancements/andesite_alloy.json 81885c6bfb85792c88aaa7c9b70f58832945d31f data/create/advancements/andesite_casing.json 83c046bd200623933545c9e4326f782fb02c87fa data/create/advancements/arm_blaze_burner.json diff --git a/src/generated/resources/assets/create/lang/en_us.json b/src/generated/resources/assets/create/lang/en_us.json index 3711a2713..8d203ef3f 100644 --- a/src/generated/resources/assets/create/lang/en_us.json +++ b/src/generated/resources/assets/create/lang/en_us.json @@ -640,23 +640,23 @@ "advancement.create.its_alive": "It's Alive!", "advancement.create.its_alive.desc": "Watch your first kinetic component spin.", "advancement.create.shifting_gears": "Shifting Gears", - "advancement.create.shifting_gears.desc": "Connect a Large Cogwheel to a Small Cogwheel, allowing you to change the speed of your contraption.", + "advancement.create.shifting_gears.desc": "Connect a Large Cogwheel to a Small Cogwheel, allowing you to change the speed of your Contraption.", "advancement.create.overstressed": "Overstressed", "advancement.create.overstressed.desc": "Experience the limits of stress firsthand.", "advancement.create.belt": "Kelp Drive", "advancement.create.belt.desc": "Connect two shafts with a Mechanical Belt.", - "advancement.create.tunnel": "Take cover!", - "advancement.create.tunnel.desc": "Embellish your mechanical belt with a Tunnel.", + "advancement.create.tunnel": "Take Cover!", + "advancement.create.tunnel.desc": "Embellish your Mechanical Belt with a Tunnel.", "advancement.create.splitter_tunnel": "Divide and Conquer", "advancement.create.splitter_tunnel.desc": "Create a splitter with a group of Brass Tunnels.", - "advancement.create.chute": "Tumbling down", - "advancement.create.chute.desc": "Place a chute, the vertical counterpart of the belt.", + "advancement.create.chute": "Tumbling Down", + "advancement.create.chute.desc": "Place a Chute, the vertical counterpart of the Belt.", "advancement.create.upward_chute": "Aerial Abduction", - "advancement.create.upward_chute.desc": "Watch a thrown item fly up into a fan-powered chute.", + "advancement.create.upward_chute.desc": "Watch a thrown item fly up into a Fan-powered Chute.", "advancement.create.belt_funnel": "Funnels' Flappy Danglers", - "advancement.create.belt_funnel.desc": "Place a sideways funnel on top of a belt or depot to create a special type.", + "advancement.create.belt_funnel.desc": "Place a sideways Funnel on top of a Belt or Depot to create a special type.", "advancement.create.belt_funnel_kiss": "The Parrots and the Flaps", - "advancement.create.belt_funnel_kiss.desc": "Make two belt mounted funnels kiss.", + "advancement.create.belt_funnel_kiss.desc": "Make two Belt-mounted Funnels kiss.", "advancement.create.fan": "Mechanical Airbender", "advancement.create.fan.desc": "Ride the stream of air provided by an Encased Fan.", "advancement.create.fan_lava": "Geothermal Space Heater", @@ -664,32 +664,32 @@ "advancement.create.fan_water": "Wacky Washing", "advancement.create.fan_water.desc": "Get caught in a stream of air that washes things.", "advancement.create.fan_smoke": "Mechanical Bellows", - "advancement.create.fan_smoke.desc": "Get caught in a stream of air that smokes items.", + "advancement.create.fan_smoke.desc": "Get caught in a stream of air that smokes things.", "advancement.create.wrench": "Configure Conveniently", - "advancement.create.wrench.desc": "Create a Wrench to aid you in building your contraptions.", + "advancement.create.wrench.desc": "Create a Wrench to aid you in building your Contraptions.", "advancement.create.goggles": "Stress-O-Vision", "advancement.create.goggles.desc": "Create some Engineer's Goggles to aid you in getting more kinetic information from components.", "advancement.create.speedometer": "But How Fast Exactly?", - "advancement.create.speedometer.desc": "Place and power a Speedometer. Look at it through your goggles to read its exact value.", + "advancement.create.speedometer.desc": "Place and power a Speedometer. Look at it through your Goggles to read its exact value.", "advancement.create.stressometer": "But How Stressed Exactly?", - "advancement.create.stressometer.desc": "Place and power a Stressometer. Look at it through your goggles to read its exact value.", + "advancement.create.stressometer.desc": "Place and power a Stressometer. Look at it through your Goggles to read its exact value.", "advancement.create.aesthetics": "Boom, Aesthetics!", - "advancement.create.aesthetics.desc": "Place brackets on a shaft, pipe and cogwheel.", + "advancement.create.aesthetics.desc": "Place Brackets on a Shaft, Pipe, and Cogwheel.", "advancement.create.reinforced": "Boom, Reinforced!", - "advancement.create.reinforced.desc": "Use fitting casing blocks on a shaft, pipe and mechanical belt.", + "advancement.create.reinforced.desc": "Use fitting Casing blocks on a Shaft, Pipe, and Mechanical Belt.", "advancement.create.water_wheel": "Harnessing Hydraulics", "advancement.create.water_wheel.desc": "Place a Water Wheel and try getting it to spin!", - "advancement.create.chocolate_wheel": "Tasteful power", - "advancement.create.chocolate_wheel.desc": "Run a Water Wheel with molten Chocolate.", + "advancement.create.chocolate_wheel": "Tasteful Power", + "advancement.create.chocolate_wheel.desc": "Run a Water Wheel with Molten Chocolate.", "advancement.create.lava_wheel": "Magma Wheel", "advancement.create.lava_wheel.desc": "This shouldn't have worked.", - "advancement.create.cuckoo": "Is it time?", - "advancement.create.cuckoo.desc": "Witness a cuckhoo clock announce bedtime.", + "advancement.create.cuckoo": "Is It Time?", + "advancement.create.cuckoo.desc": "Witness a Cuckoo Clock announce bedtime.", "advancement.create.millstone": "Pocket Crusher", "advancement.create.millstone.desc": "Place and power a Millstone.", - "advancement.create.windmill": "A mild Breeze", + "advancement.create.windmill": "A Mild Breeze", "advancement.create.windmill.desc": "Assemble a windmill.", - "advancement.create.maxed_windmill": "A strong breeze", + "advancement.create.maxed_windmill": "A Strong Breeze", "advancement.create.maxed_windmill.desc": "Assemble a windmill of maximum strength.", "advancement.create.andesite_casing": "The Andesite Age", "advancement.create.andesite_casing.desc": "Use some Andesite Alloy and Wood to create a basic Casing.", @@ -707,7 +707,7 @@ "advancement.create.basin.desc": "Place a Basin and try throwing items into it.", "advancement.create.mixer": "Mixin' It Up", "advancement.create.mixer.desc": "Place a Mechanical Mixer above the Basin, power it, and start mixing some ingredients.", - "advancement.create.blaze_burner": "A living Fireplace", + "advancement.create.blaze_burner": "A Living Fireplace", "advancement.create.blaze_burner.desc": "Obtain a Blaze Burner.", "advancement.create.compact": "Automated Compacting", "advancement.create.compact.desc": "Use a Press and a Basin to compact some items.", @@ -718,42 +718,42 @@ "advancement.create.copper_casing": "The Copper Age", "advancement.create.copper_casing.desc": "Use some Copper Sheets and Wood to create some Copper Casings.", "advancement.create.spout": "Sploosh", - "advancement.create.spout.desc": "Watch a fluid item being filled using a spout.", + "advancement.create.spout.desc": "Watch a fluid item being filled using a Spout.", "advancement.create.spout_potion": "Global Brewery", - "advancement.create.spout_potion.desc": "Watch a spout fill a bottle with potion fluid.", - "advancement.create.chocolate": "A world of Imagination", - "advancement.create.chocolate.desc": "Obtain a bucket of Molten Chocolate.", + "advancement.create.spout_potion.desc": "Watch a Spout fill a Bottle with potion fluid.", + "advancement.create.chocolate": "A World of Imagination", + "advancement.create.chocolate.desc": "Obtain a Bucket of Molten Chocolate.", "advancement.create.item_drain": "Tumble Draining", - "advancement.create.item_drain.desc": "Watch a fluid item being emptied by an item drain.", - "advancement.create.chained_item_drain": "Let it roll!", - "advancement.create.chained_item_drain.desc": "Watch an item roll across several chained item drains.", + "advancement.create.item_drain.desc": "Watch a fluid item being emptied by an Item Drain.", + "advancement.create.chained_item_drain": "Let It Roll!", + "advancement.create.chained_item_drain.desc": "Watch an item roll across several chained Item Drains.", "advancement.create.glass_pipe": "Flow Spy", - "advancement.create.glass_pipe.desc": "Watch fluid propagate through a windowed fluid pipe. Straight fluid pipes become windowed when a wrench is used on them.", - "advancement.create.pipe_collision": "Never cross the Streams!", + "advancement.create.glass_pipe.desc": "Watch fluid propagate through a windowed Fluid Pipe. Straight Fluid Pipes become windowed when a Wrench is used on them.", + "advancement.create.pipe_collision": "Never Cross the Streams!", "advancement.create.pipe_collision.desc": "Watch two fluids meet in your pipe network.", - "advancement.create.pipe_spill": "There's a leak!", - "advancement.create.pipe_spill.desc": "Watch an open end of a pipe take or place fluids into the world.", + "advancement.create.pipe_spill": "There's a Leak!", + "advancement.create.pipe_spill.desc": "Watch an open end of a Pipe take or place fluids into the world.", "advancement.create.hose_pulley": "Industrial Spillage", - "advancement.create.hose_pulley.desc": "Lower a hose pulley and watch it drain or fill a body of fluid.", + "advancement.create.hose_pulley.desc": "Lower a Hose Pulley and watch it drain or fill a body of fluid.", "advancement.create.infinite_water": "Draining the Ocean", - "advancement.create.infinite_water.desc": "Pump from a body of Water large enough to be considered Infinite.", + "advancement.create.infinite_water.desc": "Pump from a body of Water large enough to be considered infinite.", "advancement.create.infinite_lava": "Draining the Planets' Core", - "advancement.create.infinite_lava.desc": "Pump from a body of Lava large enough to be considered Infinite.", + "advancement.create.infinite_lava.desc": "Pump from a body of Lava large enough to be considered infinite.", "advancement.create.infinite_chocolate": "Drowning in Imagination", - "advancement.create.infinite_chocolate.desc": "Pump from a body of Molten Chocolate large enough to be considered Infinite.", + "advancement.create.infinite_chocolate.desc": "Pump from a body of Molten Chocolate large enough to be considered infinite.", "advancement.create.crafter": "Automated Assembly", "advancement.create.crafter.desc": "Place and power some Mechanical Crafters.", - "advancement.create.clockwork_bearing": "Contraption o'clock", - "advancement.create.clockwork_bearing.desc": "Assemble a Structure mounted on a Clockwork Bearing.", + "advancement.create.clockwork_bearing": "Contraption O'Clock", + "advancement.create.clockwork_bearing.desc": "Assemble a structure mounted on a Clockwork Bearing.", "advancement.create.nixie_tube": "Signs of Style", "advancement.create.nixie_tube.desc": "Obtain and place down a pair of Nixie Tubes.", "advancement.create.deployer": "Poke, Place, and Attack", "advancement.create.deployer.desc": "Place and power a Deployer, the perfect reflection of yourself.", - "advancement.create.speed_controller": "Engineers hate him!", + "advancement.create.speed_controller": "Engineers Hate Him!", "advancement.create.speed_controller.desc": "Place a Rotation Speed Controller, the ultimate device for changing gear.", "advancement.create.flywheel": "Heart of the Factory", - "advancement.create.flywheel.desc": "Successfully connect an engine to the Flywheel.", - "advancement.create.overstress_flywheel": "High levels of Stress", + "advancement.create.flywheel.desc": "Successfully connect a Furnace Engine to the Flywheel.", + "advancement.create.overstress_flywheel": "High Levels of Stress", "advancement.create.overstress_flywheel.desc": "Overstress a Furnace Engine.", "advancement.create.precision_mechanism": "Complex Curiosities", "advancement.create.precision_mechanism.desc": "Assemble a Precision Mechanism.", @@ -770,7 +770,7 @@ "advancement.create.crushing_wheel": "A Pair of Giants", "advancement.create.crushing_wheel.desc": "Create some Crushing Wheels to break down more materials more effectively.", "advancement.create.blaze_cake": "Sugar Rush", - "advancement.create.blaze_cake.desc": "Bake your blaze burner a special cake.", + "advancement.create.blaze_cake.desc": "Bake your Blaze Burner a special cake.", "advancement.create.wand_of_symmetry": "Radiant Mirrors", "advancement.create.wand_of_symmetry.desc": "Craft a Staff of Symmetry.", "advancement.create.extendo_grip": "Boioioing!", diff --git a/src/generated/resources/assets/create/lang/unfinished/de_de.json b/src/generated/resources/assets/create/lang/unfinished/de_de.json index 9ee21426d..d310f1953 100644 --- a/src/generated/resources/assets/create/lang/unfinished/de_de.json +++ b/src/generated/resources/assets/create/lang/unfinished/de_de.json @@ -744,17 +744,17 @@ "advancement.create.infinite_chocolate.desc": "Pumpe aus einem Schokoladenbecken, das groß genug ist, um als unendlich bezeichnet zu werden.", "advancement.create.crafter": "Automatisierte Montage", "advancement.create.crafter.desc": "Plaziere und aktiviere ein paar Mechanische Handwerkseinheiten.", - "advancement.create.clockwork_bearing": "UNLOCALIZED: Contraption o'clock", - "advancement.create.clockwork_bearing.desc": "UNLOCALIZED: Assemble a Structure mounted on a Clockwork Bearing.", + "advancement.create.clockwork_bearing": "UNLOCALIZED: Contraption O'Clock", + "advancement.create.clockwork_bearing.desc": "UNLOCALIZED: Assemble a structure mounted on a Clockwork Bearing.", "advancement.create.nixie_tube": "UNLOCALIZED: Signs of Style", "advancement.create.nixie_tube.desc": "UNLOCALIZED: Obtain and place down a pair of Nixie Tubes.", "advancement.create.deployer": "UNLOCALIZED: Poke, Place, and Attack", "advancement.create.deployer.desc": "UNLOCALIZED: Place and power a Deployer, the perfect reflection of yourself.", - "advancement.create.speed_controller": "UNLOCALIZED: Engineers hate him!", + "advancement.create.speed_controller": "UNLOCALIZED: Engineers Hate Him!", "advancement.create.speed_controller.desc": "UNLOCALIZED: Place a Rotation Speed Controller, the ultimate device for changing gear.", "advancement.create.flywheel": "UNLOCALIZED: Heart of the Factory", - "advancement.create.flywheel.desc": "UNLOCALIZED: Successfully connect an engine to the Flywheel.", - "advancement.create.overstress_flywheel": "UNLOCALIZED: High levels of Stress", + "advancement.create.flywheel.desc": "UNLOCALIZED: Successfully connect a Furnace Engine to the Flywheel.", + "advancement.create.overstress_flywheel": "UNLOCALIZED: High Levels of Stress", "advancement.create.overstress_flywheel.desc": "UNLOCALIZED: Overstress a Furnace Engine.", "advancement.create.precision_mechanism": "UNLOCALIZED: Complex Curiosities", "advancement.create.precision_mechanism.desc": "UNLOCALIZED: Assemble a Precision Mechanism.", @@ -771,7 +771,7 @@ "advancement.create.crushing_wheel": "UNLOCALIZED: A Pair of Giants", "advancement.create.crushing_wheel.desc": "UNLOCALIZED: Create some Crushing Wheels to break down more materials more effectively.", "advancement.create.blaze_cake": "UNLOCALIZED: Sugar Rush", - "advancement.create.blaze_cake.desc": "UNLOCALIZED: Bake your blaze burner a special cake.", + "advancement.create.blaze_cake.desc": "UNLOCALIZED: Bake your Blaze Burner a special cake.", "advancement.create.wand_of_symmetry": "UNLOCALIZED: Radiant Mirrors", "advancement.create.wand_of_symmetry.desc": "UNLOCALIZED: Craft a Staff of Symmetry.", "advancement.create.extendo_grip": "Boioioing!", diff --git a/src/generated/resources/assets/create/lang/unfinished/es_es.json b/src/generated/resources/assets/create/lang/unfinished/es_es.json index 64e9e3fc9..7bf020e5e 100644 --- a/src/generated/resources/assets/create/lang/unfinished/es_es.json +++ b/src/generated/resources/assets/create/lang/unfinished/es_es.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 334", + "_": "Missing Localizations: 5", "_": "->------------------------] Game Elements [------------------------<-", @@ -636,7 +636,7 @@ "advancement.create.root": "Bienvenido a Create", "advancement.create.root.desc": "¡Es hora de empezar a construir increíbles artefactos animados!", - "advancement.creatse.andesite_alloy": "Aleaciones en abundancia", + "advancement.create.andesite_alloy": "UNLOCALIZED: Alliterations Aplenty", "advancement.create.andesite_alloy.desc": "Los materiales de Create tienen nombres extraños, la aleación de andesita es uno de ellos.", "advancement.create.its_alive": "¡Está vivo!", "advancement.create.its_alive.desc": "Mira cómo gira tu primer componente cinético.", @@ -2442,6 +2442,6 @@ "create.ponder.windmill_structure.header": "Artefactos estacionarios de molinos de viento", "create.ponder.windmill_structure.text_1": "Cualquier estructura puede contar como un molino de viento válido, siempre que contenga al menos 8 velas.", - "_": "¡Gracias por traducir Create!" + "_": "Thank you for translating Create!" } \ No newline at end of file diff --git a/src/generated/resources/assets/create/lang/unfinished/fr_fr.json b/src/generated/resources/assets/create/lang/unfinished/fr_fr.json index 6c38fc26f..9f618147c 100644 --- a/src/generated/resources/assets/create/lang/unfinished/fr_fr.json +++ b/src/generated/resources/assets/create/lang/unfinished/fr_fr.json @@ -646,18 +646,18 @@ "advancement.create.overstressed.desc": "Testez d'abord les limites de la force mécanique", "advancement.create.belt": "UNLOCALIZED: Kelp Drive", "advancement.create.belt.desc": "UNLOCALIZED: Connect two shafts with a Mechanical Belt.", - "advancement.create.tunnel": "UNLOCALIZED: Take cover!", - "advancement.create.tunnel.desc": "UNLOCALIZED: Embellish your mechanical belt with a Tunnel.", + "advancement.create.tunnel": "UNLOCALIZED: Take Cover!", + "advancement.create.tunnel.desc": "UNLOCALIZED: Embellish your Mechanical Belt with a Tunnel.", "advancement.create.splitter_tunnel": "UNLOCALIZED: Divide and Conquer", "advancement.create.splitter_tunnel.desc": "UNLOCALIZED: Create a splitter with a group of Brass Tunnels.", - "advancement.create.chute": "UNLOCALIZED: Tumbling down", - "advancement.create.chute.desc": "UNLOCALIZED: Place a chute, the vertical counterpart of the belt.", + "advancement.create.chute": "UNLOCALIZED: Tumbling Down", + "advancement.create.chute.desc": "UNLOCALIZED: Place a Chute, the vertical counterpart of the Belt.", "advancement.create.upward_chute": "UNLOCALIZED: Aerial Abduction", - "advancement.create.upward_chute.desc": "UNLOCALIZED: Watch a thrown item fly up into a fan-powered chute.", + "advancement.create.upward_chute.desc": "UNLOCALIZED: Watch a thrown item fly up into a Fan-powered Chute.", "advancement.create.belt_funnel": "UNLOCALIZED: Funnels' Flappy Danglers", - "advancement.create.belt_funnel.desc": "UNLOCALIZED: Place a sideways funnel on top of a belt or depot to create a special type.", + "advancement.create.belt_funnel.desc": "UNLOCALIZED: Place a sideways Funnel on top of a Belt or Depot to create a special type.", "advancement.create.belt_funnel_kiss": "UNLOCALIZED: The Parrots and the Flaps", - "advancement.create.belt_funnel_kiss.desc": "UNLOCALIZED: Make two belt mounted funnels kiss.", + "advancement.create.belt_funnel_kiss.desc": "UNLOCALIZED: Make two Belt-mounted Funnels kiss.", "advancement.create.fan": "UNLOCALIZED: Mechanical Airbender", "advancement.create.fan.desc": "UNLOCALIZED: Ride the stream of air provided by an Encased Fan.", "advancement.create.fan_lava": "UNLOCALIZED: Geothermal Space Heater", @@ -665,27 +665,27 @@ "advancement.create.fan_water": "UNLOCALIZED: Wacky Washing", "advancement.create.fan_water.desc": "UNLOCALIZED: Get caught in a stream of air that washes things.", "advancement.create.fan_smoke": "UNLOCALIZED: Mechanical Bellows", - "advancement.create.fan_smoke.desc": "UNLOCALIZED: Get caught in a stream of air that smokes items.", + "advancement.create.fan_smoke.desc": "UNLOCALIZED: Get caught in a stream of air that smokes things.", "advancement.create.wrench": "UNLOCALIZED: Configure Conveniently", - "advancement.create.wrench.desc": "UNLOCALIZED: Create a Wrench to aid you in building your contraptions.", + "advancement.create.wrench.desc": "UNLOCALIZED: Create a Wrench to aid you in building your Contraptions.", "advancement.create.goggles": "UNLOCALIZED: Stress-O-Vision", "advancement.create.goggles.desc": "UNLOCALIZED: Create some Engineer's Goggles to aid you in getting more kinetic information from components.", "advancement.create.speedometer": "UNLOCALIZED: But How Fast Exactly?", - "advancement.create.speedometer.desc": "UNLOCALIZED: Place and power a Speedometer. Look at it through your goggles to read its exact value.", + "advancement.create.speedometer.desc": "UNLOCALIZED: Place and power a Speedometer. Look at it through your Goggles to read its exact value.", "advancement.create.stressometer": "UNLOCALIZED: But How Stressed Exactly?", - "advancement.create.stressometer.desc": "UNLOCALIZED: Place and power a Stressometer. Look at it through your goggles to read its exact value.", + "advancement.create.stressometer.desc": "UNLOCALIZED: Place and power a Stressometer. Look at it through your Goggles to read its exact value.", "advancement.create.aesthetics": "UNLOCALIZED: Boom, Aesthetics!", - "advancement.create.aesthetics.desc": "UNLOCALIZED: Place brackets on a shaft, pipe and cogwheel.", + "advancement.create.aesthetics.desc": "UNLOCALIZED: Place Brackets on a Shaft, Pipe, and Cogwheel.", "advancement.create.reinforced": "UNLOCALIZED: Boom, Reinforced!", - "advancement.create.reinforced.desc": "UNLOCALIZED: Use fitting casing blocks on a shaft, pipe and mechanical belt.", + "advancement.create.reinforced.desc": "UNLOCALIZED: Use fitting Casing blocks on a Shaft, Pipe, and Mechanical Belt.", "advancement.create.water_wheel": "UNLOCALIZED: Harnessing Hydraulics", "advancement.create.water_wheel.desc": "UNLOCALIZED: Place a Water Wheel and try getting it to spin!", - "advancement.create.chocolate_wheel": "UNLOCALIZED: Tasteful power", - "advancement.create.chocolate_wheel.desc": "UNLOCALIZED: Run a Water Wheel with molten Chocolate.", + "advancement.create.chocolate_wheel": "UNLOCALIZED: Tasteful Power", + "advancement.create.chocolate_wheel.desc": "UNLOCALIZED: Run a Water Wheel with Molten Chocolate.", "advancement.create.lava_wheel": "Roue à aubes... dans de la lave?", "advancement.create.lava_wheel.desc": "Cela... N'aurait pas dû fonctionner.", "advancement.create.cuckoo": "C'est déjà l'heure?", - "advancement.create.cuckoo.desc": "UNLOCALIZED: Witness a cuckhoo clock announce bedtime.", + "advancement.create.cuckoo.desc": "UNLOCALIZED: Witness a Cuckoo Clock announce bedtime.", "advancement.create.millstone": "UNLOCALIZED: Pocket Crusher", "advancement.create.millstone.desc": "UNLOCALIZED: Place and power a Millstone.", "advancement.create.windmill": "Une brise moyenne...", @@ -708,7 +708,7 @@ "advancement.create.basin.desc": "UNLOCALIZED: Place a Basin and try throwing items into it.", "advancement.create.mixer": "UNLOCALIZED: Mixin' It Up", "advancement.create.mixer.desc": "UNLOCALIZED: Place a Mechanical Mixer above the Basin, power it, and start mixing some ingredients.", - "advancement.create.blaze_burner": "UNLOCALIZED: A living Fireplace", + "advancement.create.blaze_burner": "UNLOCALIZED: A Living Fireplace", "advancement.create.blaze_burner.desc": "UNLOCALIZED: Obtain a Blaze Burner.", "advancement.create.compact": "UNLOCALIZED: Automated Compacting", "advancement.create.compact.desc": "UNLOCALIZED: Use a Press and a Basin to compact some items.", @@ -719,42 +719,42 @@ "advancement.create.copper_casing": "UNLOCALIZED: The Copper Age", "advancement.create.copper_casing.desc": "UNLOCALIZED: Use some Copper Sheets and Wood to create some Copper Casings.", "advancement.create.spout": "UNLOCALIZED: Sploosh", - "advancement.create.spout.desc": "UNLOCALIZED: Watch a fluid item being filled using a spout.", + "advancement.create.spout.desc": "UNLOCALIZED: Watch a fluid item being filled using a Spout.", "advancement.create.spout_potion": "UNLOCALIZED: Global Brewery", - "advancement.create.spout_potion.desc": "UNLOCALIZED: Watch a spout fill a bottle with potion fluid.", - "advancement.create.chocolate": "UNLOCALIZED: A world of Imagination", - "advancement.create.chocolate.desc": "UNLOCALIZED: Obtain a bucket of Molten Chocolate.", + "advancement.create.spout_potion.desc": "UNLOCALIZED: Watch a Spout fill a Bottle with potion fluid.", + "advancement.create.chocolate": "UNLOCALIZED: A World of Imagination", + "advancement.create.chocolate.desc": "UNLOCALIZED: Obtain a Bucket of Molten Chocolate.", "advancement.create.item_drain": "UNLOCALIZED: Tumble Draining", - "advancement.create.item_drain.desc": "UNLOCALIZED: Watch a fluid item being emptied by an item drain.", - "advancement.create.chained_item_drain": "UNLOCALIZED: Let it roll!", - "advancement.create.chained_item_drain.desc": "UNLOCALIZED: Watch an item roll across several chained item drains.", + "advancement.create.item_drain.desc": "UNLOCALIZED: Watch a fluid item being emptied by an Item Drain.", + "advancement.create.chained_item_drain": "UNLOCALIZED: Let It Roll!", + "advancement.create.chained_item_drain.desc": "UNLOCALIZED: Watch an item roll across several chained Item Drains.", "advancement.create.glass_pipe": "UNLOCALIZED: Flow Spy", - "advancement.create.glass_pipe.desc": "UNLOCALIZED: Watch fluid propagate through a windowed fluid pipe. Straight fluid pipes become windowed when a wrench is used on them.", - "advancement.create.pipe_collision": "UNLOCALIZED: Never cross the Streams!", + "advancement.create.glass_pipe.desc": "UNLOCALIZED: Watch fluid propagate through a windowed Fluid Pipe. Straight Fluid Pipes become windowed when a Wrench is used on them.", + "advancement.create.pipe_collision": "UNLOCALIZED: Never Cross the Streams!", "advancement.create.pipe_collision.desc": "UNLOCALIZED: Watch two fluids meet in your pipe network.", - "advancement.create.pipe_spill": "UNLOCALIZED: There's a leak!", - "advancement.create.pipe_spill.desc": "UNLOCALIZED: Watch an open end of a pipe take or place fluids into the world.", + "advancement.create.pipe_spill": "UNLOCALIZED: There's a Leak!", + "advancement.create.pipe_spill.desc": "UNLOCALIZED: Watch an open end of a Pipe take or place fluids into the world.", "advancement.create.hose_pulley": "UNLOCALIZED: Industrial Spillage", - "advancement.create.hose_pulley.desc": "UNLOCALIZED: Lower a hose pulley and watch it drain or fill a body of fluid.", + "advancement.create.hose_pulley.desc": "UNLOCALIZED: Lower a Hose Pulley and watch it drain or fill a body of fluid.", "advancement.create.infinite_water": "UNLOCALIZED: Draining the Ocean", - "advancement.create.infinite_water.desc": "UNLOCALIZED: Pump from a body of Water large enough to be considered Infinite.", + "advancement.create.infinite_water.desc": "UNLOCALIZED: Pump from a body of Water large enough to be considered infinite.", "advancement.create.infinite_lava": "UNLOCALIZED: Draining the Planets' Core", - "advancement.create.infinite_lava.desc": "UNLOCALIZED: Pump from a body of Lava large enough to be considered Infinite.", + "advancement.create.infinite_lava.desc": "UNLOCALIZED: Pump from a body of Lava large enough to be considered infinite.", "advancement.create.infinite_chocolate": "UNLOCALIZED: Drowning in Imagination", - "advancement.create.infinite_chocolate.desc": "UNLOCALIZED: Pump from a body of Molten Chocolate large enough to be considered Infinite.", + "advancement.create.infinite_chocolate.desc": "UNLOCALIZED: Pump from a body of Molten Chocolate large enough to be considered infinite.", "advancement.create.crafter": "UNLOCALIZED: Automated Assembly", "advancement.create.crafter.desc": "UNLOCALIZED: Place and power some Mechanical Crafters.", - "advancement.create.clockwork_bearing": "UNLOCALIZED: Contraption o'clock", - "advancement.create.clockwork_bearing.desc": "UNLOCALIZED: Assemble a Structure mounted on a Clockwork Bearing.", + "advancement.create.clockwork_bearing": "UNLOCALIZED: Contraption O'Clock", + "advancement.create.clockwork_bearing.desc": "UNLOCALIZED: Assemble a structure mounted on a Clockwork Bearing.", "advancement.create.nixie_tube": "UNLOCALIZED: Signs of Style", "advancement.create.nixie_tube.desc": "UNLOCALIZED: Obtain and place down a pair of Nixie Tubes.", "advancement.create.deployer": "UNLOCALIZED: Poke, Place, and Attack", "advancement.create.deployer.desc": "UNLOCALIZED: Place and power a Deployer, the perfect reflection of yourself.", - "advancement.create.speed_controller": "UNLOCALIZED: Engineers hate him!", + "advancement.create.speed_controller": "UNLOCALIZED: Engineers Hate Him!", "advancement.create.speed_controller.desc": "UNLOCALIZED: Place a Rotation Speed Controller, the ultimate device for changing gear.", "advancement.create.flywheel": "UNLOCALIZED: Heart of the Factory", - "advancement.create.flywheel.desc": "UNLOCALIZED: Successfully connect an engine to the Flywheel.", - "advancement.create.overstress_flywheel": "UNLOCALIZED: High levels of Stress", + "advancement.create.flywheel.desc": "UNLOCALIZED: Successfully connect a Furnace Engine to the Flywheel.", + "advancement.create.overstress_flywheel": "UNLOCALIZED: High Levels of Stress", "advancement.create.overstress_flywheel.desc": "UNLOCALIZED: Overstress a Furnace Engine.", "advancement.create.precision_mechanism": "UNLOCALIZED: Complex Curiosities", "advancement.create.precision_mechanism.desc": "UNLOCALIZED: Assemble a Precision Mechanism.", @@ -771,7 +771,7 @@ "advancement.create.crushing_wheel": "UNLOCALIZED: A Pair of Giants", "advancement.create.crushing_wheel.desc": "UNLOCALIZED: Create some Crushing Wheels to break down more materials more effectively.", "advancement.create.blaze_cake": "UNLOCALIZED: Sugar Rush", - "advancement.create.blaze_cake.desc": "UNLOCALIZED: Bake your blaze burner a special cake.", + "advancement.create.blaze_cake.desc": "UNLOCALIZED: Bake your Blaze Burner a special cake.", "advancement.create.wand_of_symmetry": "UNLOCALIZED: Radiant Mirrors", "advancement.create.wand_of_symmetry.desc": "UNLOCALIZED: Craft a Staff of Symmetry.", "advancement.create.extendo_grip": "UNLOCALIZED: Boioioing!", diff --git a/src/generated/resources/assets/create/lang/unfinished/ja_jp.json b/src/generated/resources/assets/create/lang/unfinished/ja_jp.json index 3353e1e11..36904deb2 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ja_jp.json +++ b/src/generated/resources/assets/create/lang/unfinished/ja_jp.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 4", + "_": "Missing Localizations: 0", "_": "->------------------------] Game Elements [------------------------<-", @@ -642,7 +642,7 @@ "advancement.create.its_alive.desc": "機械ã®å›žè»¢ã‚’åˆã‚ã¦è¦‹ã‚‹", "advancement.create.shifting_gears": "ギアシフトï¼", "advancement.create.shifting_gears.desc": "大ãã„歯車ã¨å°ã•ã„歯車を噛ã¿åˆã‚ã›ã¦å›žè»¢é€Ÿåº¦ã‚’変更ã™ã‚‹", - "advancement.create.overstressed": "超éŽå¿œåŠ›", + "advancement.create.overstressed": "応力超éŽ", "advancement.create.overstressed.desc": "応力ã®é™ç•Œã‚’è‚Œã§æ„Ÿã˜ã‚‹", "advancement.create.belt": "ベルトコンブア", "advancement.create.belt.desc": "2ã¤ã®ã‚·ãƒ£ãƒ•ãƒˆã‚’メカニカルベルトã§ç¹‹ã", @@ -755,7 +755,7 @@ "advancement.create.flywheel": "工場ã®å¿ƒè‡“部", "advancement.create.flywheel.desc": "ã‹ã¾ã©ã‚¨ãƒ³ã‚¸ãƒ³ã‚’å¼¾ã¿è»Šã«ç¹‹ã", "advancement.create.overstress_flywheel": "ãƒã‚¤ãƒ¬ãƒ™ãƒ«å¿œåŠ›", - "advancement.create.overstress_flywheel.desc": "ã‹ã¾ã©ã‚¨ãƒ³ã‚¸ãƒ³ã«è¶…éŽå¿œåŠ›ã‚’ã‹ã‘ã‚‹", + "advancement.create.overstress_flywheel.desc": "ã‹ã¾ã©ã‚¨ãƒ³ã‚¸ãƒ³ã«å¿œåŠ›è¶…éŽã‚’ã‹ã‘ã‚‹", "advancement.create.precision_mechanism": "手間暇ã‹ã‘ãŸéª¨è‘£å“", "advancement.create.precision_mechanism.desc": "精密機構を組ã¿ç«‹ã¦ã‚‹", "advancement.create.mechanical_arm": "手ãŒé›¢ã›ãªã„ï¼", @@ -821,8 +821,8 @@ "create.recipe.fan_washing.fan": "æ°´ã®å¥¥ã®ã‚±ãƒ¼ã‚¹å…¥ã‚Šãƒ•ã‚¡ãƒ³", "create.recipe.fan_smoking": "一括燻製", "create.recipe.fan_smoking.fan": "ç‚Žã®å¥¥ã®ã‚±ãƒ¼ã‚¹å…¥ã‚Šãƒ•ã‚¡ãƒ³", - "create.recipe.fan_haunting": "UNLOCALIZED: Bulk Haunting", - "create.recipe.fan_haunting.fan": "UNLOCALIZED: Fan behind Soul Fire", + "create.recipe.fan_haunting": "一括憑霊", + "create.recipe.fan_haunting.fan": "é­‚ã®ç‚Žã®å¥¥ã®ã‚±ãƒ¼ã‚¹å…¥ã‚Šãƒ•ã‚¡ãƒ³", "create.recipe.fan_blasting": "一括精錬", "create.recipe.fan_blasting.fan": "溶岩ã®å¥¥ã®ã‚±ãƒ¼ã‚¹å…¥ã‚Šãƒ•ã‚¡ãƒ³", "create.recipe.pressing": "プレス", @@ -993,10 +993,10 @@ "create.gui.speedometer.title": "回転速度", "create.gui.stressometer.title": "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã®å¿œåŠ›", "create.gui.stressometer.capacity": "残りã®å¿œåŠ›è¨±å®¹é‡", - "create.gui.stressometer.overstressed": "超éŽå¿œåŠ›", + "create.gui.stressometer.overstressed": "応力超éŽ", "create.gui.stressometer.no_rotation": "回転ãªã—", "create.gui.contraptions.not_fast_enough": "ã“ã® %1$s ã¯_å分速ã_回転_ã—ã¦ã„ãªã„_よã†ã§ã™ã€‚", - "create.gui.contraptions.network_overstressed": "ã“ã®ä»•æŽ›ã‘ã¯_超éŽå¿œåŠ›_ã®ã‚ˆã†ã§ã™ã€‚ã•ã‚‰ã«åŽŸå‹•æ©Ÿã‚’追加ã™ã‚‹ã‹ã€_応力_ã¸ã®å½±éŸ¿ãŒå¤§ãã„機械ã®å›žè»¢é€Ÿåº¦ã‚’_下ã’ã¦_ãã ã•ã„。", + "create.gui.contraptions.network_overstressed": "ã“ã®ä»•æŽ›ã‘ã¯_応力超éŽ_ã®ã‚ˆã†ã§ã™ã€‚ã•ã‚‰ã«åŽŸå‹•æ©Ÿã‚’追加ã™ã‚‹ã‹ã€_応力_ã¸ã®å½±éŸ¿ãŒå¤§ãã„機械ã®å›žè»¢é€Ÿåº¦ã‚’_下ã’ã¦_ãã ã•ã„。", "create.gui.adjustable_crate.title": "å¯å¤‰ã‚¯ãƒ¬ãƒ¼ãƒˆ", "create.gui.adjustable_crate.storageSpace": "åŽç´ã‚¹ãƒšãƒ¼ã‚¹", "create.gui.stockpile_switch.title": "在庫スイッãƒ", @@ -1165,8 +1165,8 @@ "create.item_attributes.furnace_fuel.inverted": "ã‹ã¾ã©ã®ç‡ƒæ–™ã§ãªã„ã‹", "create.item_attributes.washable": "洗浄ã§ãã‚‹ã‹ã‹", "create.item_attributes.washable.inverted": "洗浄ã§ããªã„ã‹", - "create.item_attributes.hauntable": "UNLOCALIZED: can be Haunted", - "create.item_attributes.hauntable.inverted": "UNLOCALIZED: cannot be Haunted", + "create.item_attributes.hauntable": "憑霊ã§ãã‚‹ã‹", + "create.item_attributes.hauntable.inverted": "憑霊ã§ããªã„ã‹", "create.item_attributes.crushable": "粉砕ã§ãã‚‹ã‹ã‹", "create.item_attributes.crushable.inverted": "粉砕ã§ããªã„ã‹", "create.item_attributes.smeltable": "精錬ã§ãã‚‹ã‹ã‹", @@ -1237,7 +1237,7 @@ "create.tooltip.stressImpact.low": "低", "create.tooltip.stressImpact.medium": "中", "create.tooltip.stressImpact.high": "高", - "create.tooltip.stressImpact.overstressed": "超éŽå¿œåŠ›", + "create.tooltip.stressImpact.overstressed": "応力超éŽ", "create.tooltip.capacityProvided": "応力許容é‡: %1$s", "create.tooltip.capacityProvided.low": "å°", "create.tooltip.capacityProvided.medium": "中", diff --git a/src/generated/resources/assets/create/lang/unfinished/ko_kr.json b/src/generated/resources/assets/create/lang/unfinished/ko_kr.json index 6fad5c422..b57c8c4e7 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ko_kr.json +++ b/src/generated/resources/assets/create/lang/unfinished/ko_kr.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 6", + "_": "Missing Localizations: 0", "_": "->------------------------] Game Elements [------------------------<-", @@ -821,8 +821,8 @@ "create.recipe.fan_washing.fan": "물과 ì„ í’기", "create.recipe.fan_smoking": "훈연", "create.recipe.fan_smoking.fan": "불과 ì„ í’기", - "create.recipe.fan_haunting": "UNLOCALIZED: Bulk Haunting", - "create.recipe.fan_haunting.fan": "UNLOCALIZED: Fan behind Soul Fire", + "create.recipe.fan_haunting": "심령", + "create.recipe.fan_haunting.fan": "ì˜í˜¼ 불과 ì„ í’기", "create.recipe.fan_blasting": "제련", "create.recipe.fan_blasting.fan": "용암과 ì„ í’기", "create.recipe.pressing": "ì••ì°©", @@ -894,7 +894,7 @@ "create.gui.toolmenu.cycle": "스í¬ë¡¤ë¡œ 순환", "create.toolbox.unequip": "ë˜ëŒë¦¬ê¸°: %1$s", - "create.toolbox.outOfRange": "현재 ì•„ì´í…œì€ 공구ìƒìžì™€ 너무 멀리있습니다", + "create.toolbox.outOfRange": "현재 ì•„ì´í…œì€ 공구ìƒìžì™€ 너무 멀리 있습니다", "create.toolbox.detach": "공구ìƒìžì™€ ì—°ê²° ëŠê¸°", "create.toolbox.depositAll": "근처 공구ìƒìžë¡œ 모든 ì•„ì´í…œ ë˜ëŒë¦¬ê¸°", "create.toolbox.depositBox": "공구ìƒìžë¡œ ì•„ì´í…œ ë˜ëŒë¦¬ê¸°", @@ -1031,7 +1031,7 @@ "create.schematicAndQuill.abort": "위치 ì„¤ì •ì„ ì œê±°í–ˆìŠµë‹ˆë‹¤.", "create.schematicAndQuill.title": "ì„¤ê³„ë„ ì´ë¦„:", "create.schematicAndQuill.convert": "저장하고 즉시 ì ìš©", - "create.schematicAndQuill.fallbackName": "My Schematic", + "create.schematicAndQuill.fallbackName": "ë‚´ 청사진", "create.schematicAndQuill.saved": "%1$s으(ë¡œ) 저장했습니다", "create.schematic.invalid": "[!] 없는 ì•„ì´í…œ - 청사진 í…Œì´ë¸”ì„ ì´ìš©í•˜ì„¸ìš”", @@ -1100,12 +1100,12 @@ "create.gui.schematicannon.option.replaceWithAny": "온전한 블ë¡ì„ 아무 재료로 대체함", "create.gui.schematicannon.option.replaceWithEmpty": "온전한 블ë¡ì„ 공기로 채움", "create.gui.schematicannon.option.skipMissing": "부족한 블ë¡ì„ 무시하고 진행", - "create.gui.schematicannon.option.skipTileEntities": "UNLOCALIZED: Protect Tile Entities", + "create.gui.schematicannon.option.skipTileEntities": "ë¸”ë¡ ì—”í‹°í‹° 보호", "create.gui.schematicannon.slot.gunpowder": "í™”ì•½ì„ ë„£ì–´ ëŒ€í¬ ì—°ë£Œë¥¼ 채우세요", "create.gui.schematicannon.slot.listPrinter": "ì±…ì„ ë„£ì–´ 건축 재료 ì²´í¬ë¦¬ìŠ¤íŠ¸ë¥¼ ì¸ì‡„하세요", "create.gui.schematicannon.slot.schematic": "ì—¬ê¸°ì— ì²­ì‚¬ì§„ì„ ë„£ìœ¼ì„¸ìš”. 건설 êµ¬ì—­ì´ ì„¤ì •ë˜ì–´ 있어야 합니다.", "create.gui.schematicannon.option.skipMissing.description": "만약 대í¬ê°€ ì„¤ì¹˜ì— í•„ìš”í•œ 블ë¡ì„ 찾지 못할 경우,건너뛰고 ë‹¤ìŒ ë¸”ë¡ ì„¤ì¹˜ë¥¼ 진행합니다.", - "create.gui.schematicannon.option.skipTileEntities.description": "UNLOCALIZED: The cannon will avoid replacing data holding blocks such as Chests.", + "create.gui.schematicannon.option.skipTileEntities.description": "대í¬ê°€ ìƒìž, í™”ë¡œê°™ì´ ë°ì´í„°ê°€ 담긴 블ë¡ì„ 설치하지 않습니다.", "create.gui.schematicannon.option.dontReplaceSolid.description": "대í¬ê°€ ìž‘ì—…êµ¬ì—­ì˜ ì˜¨ì „í•œ 블ë¡ì„ 대체하지 않습니다.", "create.gui.schematicannon.option.replaceWithSolid.description": "대í¬ê°€ ìž‘ì—…êµ¬ì—­ì˜ ì˜¨ì „í•œ 블ë¡ì„ 대í¬ê°€ 가진 재료로 대체합니다.", "create.gui.schematicannon.option.replaceWithAny.description": "대í¬ê°€ ìž‘ì—…êµ¬ì—­ì˜ ì˜¨ì „í•œ 블ë¡ì„ 대í¬ê°€ 가진 ì–´ë– í•œ 재료로든 대체합니다.", @@ -1165,8 +1165,8 @@ "create.item_attributes.furnace_fuel.inverted": "화로 연료로 쓸 수 ì—†ìŒ", "create.item_attributes.washable": "ì„¸ì²™ë  ìˆ˜ 있ìŒ", "create.item_attributes.washable.inverted": "ì„¸ì²™ë  ìˆ˜ ì—†ìŒ", - "create.item_attributes.hauntable": "UNLOCALIZED: can be Haunted", - "create.item_attributes.hauntable.inverted": "UNLOCALIZED: cannot be Haunted", + "create.item_attributes.hauntable": "귀신들릴 수 있ìŒ", + "create.item_attributes.hauntable.inverted": "귀신들릴 수 ì—†ìŒ", "create.item_attributes.crushable": "ë¶„ì‡„ë  ìˆ˜ 있ìŒ", "create.item_attributes.crushable.inverted": "ë¶„ì‡„ë  ìˆ˜ ì—†ìŒ", "create.item_attributes.smeltable": "구워질 수 있ìŒ", diff --git a/src/generated/resources/assets/create/lang/unfinished/nl_nl.json b/src/generated/resources/assets/create/lang/unfinished/nl_nl.json index 5c267462e..f4f70d369 100644 --- a/src/generated/resources/assets/create/lang/unfinished/nl_nl.json +++ b/src/generated/resources/assets/create/lang/unfinished/nl_nl.json @@ -641,23 +641,23 @@ "advancement.create.its_alive": "UNLOCALIZED: It's Alive!", "advancement.create.its_alive.desc": "UNLOCALIZED: Watch your first kinetic component spin.", "advancement.create.shifting_gears": "UNLOCALIZED: Shifting Gears", - "advancement.create.shifting_gears.desc": "UNLOCALIZED: Connect a Large Cogwheel to a Small Cogwheel, allowing you to change the speed of your contraption.", + "advancement.create.shifting_gears.desc": "UNLOCALIZED: Connect a Large Cogwheel to a Small Cogwheel, allowing you to change the speed of your Contraption.", "advancement.create.overstressed": "UNLOCALIZED: Overstressed", "advancement.create.overstressed.desc": "UNLOCALIZED: Experience the limits of stress firsthand.", "advancement.create.belt": "UNLOCALIZED: Kelp Drive", "advancement.create.belt.desc": "UNLOCALIZED: Connect two shafts with a Mechanical Belt.", - "advancement.create.tunnel": "UNLOCALIZED: Take cover!", - "advancement.create.tunnel.desc": "UNLOCALIZED: Embellish your mechanical belt with a Tunnel.", + "advancement.create.tunnel": "UNLOCALIZED: Take Cover!", + "advancement.create.tunnel.desc": "UNLOCALIZED: Embellish your Mechanical Belt with a Tunnel.", "advancement.create.splitter_tunnel": "UNLOCALIZED: Divide and Conquer", "advancement.create.splitter_tunnel.desc": "UNLOCALIZED: Create a splitter with a group of Brass Tunnels.", - "advancement.create.chute": "UNLOCALIZED: Tumbling down", - "advancement.create.chute.desc": "UNLOCALIZED: Place a chute, the vertical counterpart of the belt.", + "advancement.create.chute": "UNLOCALIZED: Tumbling Down", + "advancement.create.chute.desc": "UNLOCALIZED: Place a Chute, the vertical counterpart of the Belt.", "advancement.create.upward_chute": "UNLOCALIZED: Aerial Abduction", - "advancement.create.upward_chute.desc": "UNLOCALIZED: Watch a thrown item fly up into a fan-powered chute.", + "advancement.create.upward_chute.desc": "UNLOCALIZED: Watch a thrown item fly up into a Fan-powered Chute.", "advancement.create.belt_funnel": "UNLOCALIZED: Funnels' Flappy Danglers", - "advancement.create.belt_funnel.desc": "UNLOCALIZED: Place a sideways funnel on top of a belt or depot to create a special type.", + "advancement.create.belt_funnel.desc": "UNLOCALIZED: Place a sideways Funnel on top of a Belt or Depot to create a special type.", "advancement.create.belt_funnel_kiss": "UNLOCALIZED: The Parrots and the Flaps", - "advancement.create.belt_funnel_kiss.desc": "UNLOCALIZED: Make two belt mounted funnels kiss.", + "advancement.create.belt_funnel_kiss.desc": "UNLOCALIZED: Make two Belt-mounted Funnels kiss.", "advancement.create.fan": "UNLOCALIZED: Mechanical Airbender", "advancement.create.fan.desc": "UNLOCALIZED: Ride the stream of air provided by an Encased Fan.", "advancement.create.fan_lava": "UNLOCALIZED: Geothermal Space Heater", @@ -665,32 +665,32 @@ "advancement.create.fan_water": "UNLOCALIZED: Wacky Washing", "advancement.create.fan_water.desc": "UNLOCALIZED: Get caught in a stream of air that washes things.", "advancement.create.fan_smoke": "UNLOCALIZED: Mechanical Bellows", - "advancement.create.fan_smoke.desc": "UNLOCALIZED: Get caught in a stream of air that smokes items.", + "advancement.create.fan_smoke.desc": "UNLOCALIZED: Get caught in a stream of air that smokes things.", "advancement.create.wrench": "UNLOCALIZED: Configure Conveniently", - "advancement.create.wrench.desc": "UNLOCALIZED: Create a Wrench to aid you in building your contraptions.", + "advancement.create.wrench.desc": "UNLOCALIZED: Create a Wrench to aid you in building your Contraptions.", "advancement.create.goggles": "UNLOCALIZED: Stress-O-Vision", "advancement.create.goggles.desc": "UNLOCALIZED: Create some Engineer's Goggles to aid you in getting more kinetic information from components.", "advancement.create.speedometer": "UNLOCALIZED: But How Fast Exactly?", - "advancement.create.speedometer.desc": "UNLOCALIZED: Place and power a Speedometer. Look at it through your goggles to read its exact value.", + "advancement.create.speedometer.desc": "UNLOCALIZED: Place and power a Speedometer. Look at it through your Goggles to read its exact value.", "advancement.create.stressometer": "UNLOCALIZED: But How Stressed Exactly?", - "advancement.create.stressometer.desc": "UNLOCALIZED: Place and power a Stressometer. Look at it through your goggles to read its exact value.", + "advancement.create.stressometer.desc": "UNLOCALIZED: Place and power a Stressometer. Look at it through your Goggles to read its exact value.", "advancement.create.aesthetics": "UNLOCALIZED: Boom, Aesthetics!", - "advancement.create.aesthetics.desc": "UNLOCALIZED: Place brackets on a shaft, pipe and cogwheel.", + "advancement.create.aesthetics.desc": "UNLOCALIZED: Place Brackets on a Shaft, Pipe, and Cogwheel.", "advancement.create.reinforced": "UNLOCALIZED: Boom, Reinforced!", - "advancement.create.reinforced.desc": "UNLOCALIZED: Use fitting casing blocks on a shaft, pipe and mechanical belt.", + "advancement.create.reinforced.desc": "UNLOCALIZED: Use fitting Casing blocks on a Shaft, Pipe, and Mechanical Belt.", "advancement.create.water_wheel": "UNLOCALIZED: Harnessing Hydraulics", "advancement.create.water_wheel.desc": "UNLOCALIZED: Place a Water Wheel and try getting it to spin!", - "advancement.create.chocolate_wheel": "UNLOCALIZED: Tasteful power", - "advancement.create.chocolate_wheel.desc": "UNLOCALIZED: Run a Water Wheel with molten Chocolate.", + "advancement.create.chocolate_wheel": "UNLOCALIZED: Tasteful Power", + "advancement.create.chocolate_wheel.desc": "UNLOCALIZED: Run a Water Wheel with Molten Chocolate.", "advancement.create.lava_wheel": "UNLOCALIZED: Magma Wheel", "advancement.create.lava_wheel.desc": "UNLOCALIZED: This shouldn't have worked.", - "advancement.create.cuckoo": "UNLOCALIZED: Is it time?", - "advancement.create.cuckoo.desc": "UNLOCALIZED: Witness a cuckhoo clock announce bedtime.", + "advancement.create.cuckoo": "UNLOCALIZED: Is It Time?", + "advancement.create.cuckoo.desc": "UNLOCALIZED: Witness a Cuckoo Clock announce bedtime.", "advancement.create.millstone": "UNLOCALIZED: Pocket Crusher", "advancement.create.millstone.desc": "UNLOCALIZED: Place and power a Millstone.", - "advancement.create.windmill": "UNLOCALIZED: A mild Breeze", + "advancement.create.windmill": "UNLOCALIZED: A Mild Breeze", "advancement.create.windmill.desc": "UNLOCALIZED: Assemble a windmill.", - "advancement.create.maxed_windmill": "UNLOCALIZED: A strong breeze", + "advancement.create.maxed_windmill": "UNLOCALIZED: A Strong Breeze", "advancement.create.maxed_windmill.desc": "UNLOCALIZED: Assemble a windmill of maximum strength.", "advancement.create.andesite_casing": "UNLOCALIZED: The Andesite Age", "advancement.create.andesite_casing.desc": "UNLOCALIZED: Use some Andesite Alloy and Wood to create a basic Casing.", @@ -708,7 +708,7 @@ "advancement.create.basin.desc": "UNLOCALIZED: Place a Basin and try throwing items into it.", "advancement.create.mixer": "UNLOCALIZED: Mixin' It Up", "advancement.create.mixer.desc": "UNLOCALIZED: Place a Mechanical Mixer above the Basin, power it, and start mixing some ingredients.", - "advancement.create.blaze_burner": "UNLOCALIZED: A living Fireplace", + "advancement.create.blaze_burner": "UNLOCALIZED: A Living Fireplace", "advancement.create.blaze_burner.desc": "UNLOCALIZED: Obtain a Blaze Burner.", "advancement.create.compact": "UNLOCALIZED: Automated Compacting", "advancement.create.compact.desc": "UNLOCALIZED: Use a Press and a Basin to compact some items.", @@ -719,42 +719,42 @@ "advancement.create.copper_casing": "UNLOCALIZED: The Copper Age", "advancement.create.copper_casing.desc": "UNLOCALIZED: Use some Copper Sheets and Wood to create some Copper Casings.", "advancement.create.spout": "UNLOCALIZED: Sploosh", - "advancement.create.spout.desc": "UNLOCALIZED: Watch a fluid item being filled using a spout.", + "advancement.create.spout.desc": "UNLOCALIZED: Watch a fluid item being filled using a Spout.", "advancement.create.spout_potion": "UNLOCALIZED: Global Brewery", - "advancement.create.spout_potion.desc": "UNLOCALIZED: Watch a spout fill a bottle with potion fluid.", - "advancement.create.chocolate": "UNLOCALIZED: A world of Imagination", - "advancement.create.chocolate.desc": "UNLOCALIZED: Obtain a bucket of Molten Chocolate.", + "advancement.create.spout_potion.desc": "UNLOCALIZED: Watch a Spout fill a Bottle with potion fluid.", + "advancement.create.chocolate": "UNLOCALIZED: A World of Imagination", + "advancement.create.chocolate.desc": "UNLOCALIZED: Obtain a Bucket of Molten Chocolate.", "advancement.create.item_drain": "UNLOCALIZED: Tumble Draining", - "advancement.create.item_drain.desc": "UNLOCALIZED: Watch a fluid item being emptied by an item drain.", - "advancement.create.chained_item_drain": "UNLOCALIZED: Let it roll!", - "advancement.create.chained_item_drain.desc": "UNLOCALIZED: Watch an item roll across several chained item drains.", + "advancement.create.item_drain.desc": "UNLOCALIZED: Watch a fluid item being emptied by an Item Drain.", + "advancement.create.chained_item_drain": "UNLOCALIZED: Let It Roll!", + "advancement.create.chained_item_drain.desc": "UNLOCALIZED: Watch an item roll across several chained Item Drains.", "advancement.create.glass_pipe": "UNLOCALIZED: Flow Spy", - "advancement.create.glass_pipe.desc": "UNLOCALIZED: Watch fluid propagate through a windowed fluid pipe. Straight fluid pipes become windowed when a wrench is used on them.", - "advancement.create.pipe_collision": "UNLOCALIZED: Never cross the Streams!", + "advancement.create.glass_pipe.desc": "UNLOCALIZED: Watch fluid propagate through a windowed Fluid Pipe. Straight Fluid Pipes become windowed when a Wrench is used on them.", + "advancement.create.pipe_collision": "UNLOCALIZED: Never Cross the Streams!", "advancement.create.pipe_collision.desc": "UNLOCALIZED: Watch two fluids meet in your pipe network.", - "advancement.create.pipe_spill": "UNLOCALIZED: There's a leak!", - "advancement.create.pipe_spill.desc": "UNLOCALIZED: Watch an open end of a pipe take or place fluids into the world.", + "advancement.create.pipe_spill": "UNLOCALIZED: There's a Leak!", + "advancement.create.pipe_spill.desc": "UNLOCALIZED: Watch an open end of a Pipe take or place fluids into the world.", "advancement.create.hose_pulley": "UNLOCALIZED: Industrial Spillage", - "advancement.create.hose_pulley.desc": "UNLOCALIZED: Lower a hose pulley and watch it drain or fill a body of fluid.", + "advancement.create.hose_pulley.desc": "UNLOCALIZED: Lower a Hose Pulley and watch it drain or fill a body of fluid.", "advancement.create.infinite_water": "UNLOCALIZED: Draining the Ocean", - "advancement.create.infinite_water.desc": "UNLOCALIZED: Pump from a body of Water large enough to be considered Infinite.", + "advancement.create.infinite_water.desc": "UNLOCALIZED: Pump from a body of Water large enough to be considered infinite.", "advancement.create.infinite_lava": "UNLOCALIZED: Draining the Planets' Core", - "advancement.create.infinite_lava.desc": "UNLOCALIZED: Pump from a body of Lava large enough to be considered Infinite.", + "advancement.create.infinite_lava.desc": "UNLOCALIZED: Pump from a body of Lava large enough to be considered infinite.", "advancement.create.infinite_chocolate": "UNLOCALIZED: Drowning in Imagination", - "advancement.create.infinite_chocolate.desc": "UNLOCALIZED: Pump from a body of Molten Chocolate large enough to be considered Infinite.", + "advancement.create.infinite_chocolate.desc": "UNLOCALIZED: Pump from a body of Molten Chocolate large enough to be considered infinite.", "advancement.create.crafter": "UNLOCALIZED: Automated Assembly", "advancement.create.crafter.desc": "UNLOCALIZED: Place and power some Mechanical Crafters.", - "advancement.create.clockwork_bearing": "UNLOCALIZED: Contraption o'clock", - "advancement.create.clockwork_bearing.desc": "UNLOCALIZED: Assemble a Structure mounted on a Clockwork Bearing.", + "advancement.create.clockwork_bearing": "UNLOCALIZED: Contraption O'Clock", + "advancement.create.clockwork_bearing.desc": "UNLOCALIZED: Assemble a structure mounted on a Clockwork Bearing.", "advancement.create.nixie_tube": "UNLOCALIZED: Signs of Style", "advancement.create.nixie_tube.desc": "UNLOCALIZED: Obtain and place down a pair of Nixie Tubes.", "advancement.create.deployer": "UNLOCALIZED: Poke, Place, and Attack", "advancement.create.deployer.desc": "UNLOCALIZED: Place and power a Deployer, the perfect reflection of yourself.", - "advancement.create.speed_controller": "UNLOCALIZED: Engineers hate him!", + "advancement.create.speed_controller": "UNLOCALIZED: Engineers Hate Him!", "advancement.create.speed_controller.desc": "UNLOCALIZED: Place a Rotation Speed Controller, the ultimate device for changing gear.", "advancement.create.flywheel": "UNLOCALIZED: Heart of the Factory", - "advancement.create.flywheel.desc": "UNLOCALIZED: Successfully connect an engine to the Flywheel.", - "advancement.create.overstress_flywheel": "UNLOCALIZED: High levels of Stress", + "advancement.create.flywheel.desc": "UNLOCALIZED: Successfully connect a Furnace Engine to the Flywheel.", + "advancement.create.overstress_flywheel": "UNLOCALIZED: High Levels of Stress", "advancement.create.overstress_flywheel.desc": "UNLOCALIZED: Overstress a Furnace Engine.", "advancement.create.precision_mechanism": "UNLOCALIZED: Complex Curiosities", "advancement.create.precision_mechanism.desc": "UNLOCALIZED: Assemble a Precision Mechanism.", @@ -771,7 +771,7 @@ "advancement.create.crushing_wheel": "UNLOCALIZED: A Pair of Giants", "advancement.create.crushing_wheel.desc": "UNLOCALIZED: Create some Crushing Wheels to break down more materials more effectively.", "advancement.create.blaze_cake": "UNLOCALIZED: Sugar Rush", - "advancement.create.blaze_cake.desc": "UNLOCALIZED: Bake your blaze burner a special cake.", + "advancement.create.blaze_cake.desc": "UNLOCALIZED: Bake your Blaze Burner a special cake.", "advancement.create.wand_of_symmetry": "UNLOCALIZED: Radiant Mirrors", "advancement.create.wand_of_symmetry.desc": "UNLOCALIZED: Craft a Staff of Symmetry.", "advancement.create.extendo_grip": "UNLOCALIZED: Boioioing!", diff --git a/src/generated/resources/assets/create/lang/unfinished/pt_br.json b/src/generated/resources/assets/create/lang/unfinished/pt_br.json index dc306c28f..cfe4a9fd5 100644 --- a/src/generated/resources/assets/create/lang/unfinished/pt_br.json +++ b/src/generated/resources/assets/create/lang/unfinished/pt_br.json @@ -1,10 +1,10 @@ { - "_": "Missing Localizations: 1557", + "_": "Missing Localizations: 1185", "_": "->------------------------] Game Elements [------------------------<-", - "block.create.acacia_window": "UNLOCALIZED: Acacia Window", - "block.create.acacia_window_pane": "UNLOCALIZED: Acacia Window Pane", + "block.create.acacia_window": "Janela de Acácia", + "block.create.acacia_window_pane": "Vidraça de Acácia", "block.create.adjustable_chain_gearshift": "Correia Ajustável", "block.create.analog_lever": "Alavanca Analógica", "block.create.andesite_belt_funnel": "Funil de Esteira de Andesito", @@ -13,14 +13,14 @@ "block.create.andesite_encased_large_cogwheel": "Roda dentada grande revestida com andesito", "block.create.andesite_encased_shaft": "Eixo revestido com latão", "block.create.andesite_funnel": "Funil de Andesito", - "block.create.andesite_pillar": "UNLOCALIZED: Andesite Pillar", + "block.create.andesite_pillar": "Pilar de andesito", "block.create.andesite_tunnel": "Tunel de Andesito", - "block.create.asurine": "UNLOCALIZED: Asurine", - "block.create.asurine_pillar": "UNLOCALIZED: Asurine Pillar", + "block.create.asurine": "Asurino", + "block.create.asurine_pillar": "Pilar de Asurino", "block.create.basin": "Bacia", "block.create.belt": "Esteira Mecânica", - "block.create.birch_window": "UNLOCALIZED: Birch Window", - "block.create.birch_window_pane": "UNLOCALIZED: Birch Window Pane", + "block.create.birch_window": "Janela de Bétula", + "block.create.birch_window_pane": "Vidraça de Bétula", "block.create.black_nixie_tube": "Tubo nixie preto", "block.create.black_sail": "Vela preta", "block.create.black_seat": "Assento preto", @@ -45,7 +45,7 @@ "block.create.brown_seat": "Assento marrom", "block.create.brown_toolbox": "Caixa de ferramentas marrom", "block.create.brown_valve_handle": "Válvula marrom", - "block.create.calcite_pillar": "UNLOCALIZED: Calcite Pillar", + "block.create.calcite_pillar": "Pilar de Calcita", "block.create.cart_assembler": "Montador de Carrinho de Mina", "block.create.chocolate": "Chocolate", "block.create.chute": "Calha", @@ -56,170 +56,170 @@ "block.create.controller_rail": "Trilho Controlador", "block.create.copper_backtank": "Tanque Traseiro de Cobre", "block.create.copper_casing": "Revestimento de Cobre", - "block.create.copper_shingle_slab": "UNLOCALIZED: Copper Shingle Slab", - "block.create.copper_shingle_stairs": "UNLOCALIZED: Copper Shingle Stairs", - "block.create.copper_shingles": "UNLOCALIZED: Copper Shingles", - "block.create.copper_tile_slab": "UNLOCALIZED: Copper Tile Slab", - "block.create.copper_tile_stairs": "UNLOCALIZED: Copper Tile Stairs", - "block.create.copper_tiles": "UNLOCALIZED: Copper Tiles", + "block.create.copper_shingle_slab": "Laje de telha de cobre", + "block.create.copper_shingle_stairs": "Escada de telha de cobre", + "block.create.copper_shingles": "Telha de cobre", + "block.create.copper_tile_slab": "Laje de ladrilho de cobre", + "block.create.copper_tile_stairs": "Escada de ladrilho de cobre", + "block.create.copper_tiles": "Ladrilho de cobre", "block.create.copper_valve_handle": "Válvula de Cobre", "block.create.creative_crate": "Caixa Criativa", "block.create.creative_fluid_tank": "Tanque de Fluidos Criativo", "block.create.creative_motor": "Motor Criativo", - "block.create.crimsite": "UNLOCALIZED: Crimsite", - "block.create.crimsite_pillar": "UNLOCALIZED: Crimsite Pillar", - "block.create.crimson_window": "UNLOCALIZED: Crimson Window", - "block.create.crimson_window_pane": "UNLOCALIZED: Crimson Window Pane", + "block.create.crimsite": "Carmesito", + "block.create.crimsite_pillar": "Pilar de Camesito", + "block.create.crimson_window": "Janela carmesim", + "block.create.crimson_window_pane": "Vidraça carmesim", "block.create.crushing_wheel": "Roda de Moer", - "block.create.crushing_wheel_controller": "UNLOCALIZED: Crushing Wheel Controller", + "block.create.crushing_wheel_controller": "Controlador da roda de moer", "block.create.cuckoo_clock": "Relógio Cuckoo", - "block.create.cut_andesite": "UNLOCALIZED: Cut Andesite", - "block.create.cut_andesite_brick_slab": "UNLOCALIZED: Cut Andesite Brick Slab", - "block.create.cut_andesite_brick_stairs": "UNLOCALIZED: Cut Andesite Brick Stairs", - "block.create.cut_andesite_brick_wall": "UNLOCALIZED: Cut Andesite Brick Wall", - "block.create.cut_andesite_bricks": "UNLOCALIZED: Cut Andesite Bricks", - "block.create.cut_andesite_slab": "UNLOCALIZED: Cut Andesite Slab", - "block.create.cut_andesite_stairs": "UNLOCALIZED: Cut Andesite Stairs", - "block.create.cut_andesite_wall": "UNLOCALIZED: Cut Andesite Wall", - "block.create.cut_asurine": "UNLOCALIZED: Cut Asurine", - "block.create.cut_asurine_brick_slab": "UNLOCALIZED: Cut Asurine Brick Slab", - "block.create.cut_asurine_brick_stairs": "UNLOCALIZED: Cut Asurine Brick Stairs", - "block.create.cut_asurine_brick_wall": "UNLOCALIZED: Cut Asurine Brick Wall", - "block.create.cut_asurine_bricks": "UNLOCALIZED: Cut Asurine Bricks", - "block.create.cut_asurine_slab": "UNLOCALIZED: Cut Asurine Slab", - "block.create.cut_asurine_stairs": "UNLOCALIZED: Cut Asurine Stairs", - "block.create.cut_asurine_wall": "UNLOCALIZED: Cut Asurine Wall", - "block.create.cut_calcite": "UNLOCALIZED: Cut Calcite", - "block.create.cut_calcite_brick_slab": "UNLOCALIZED: Cut Calcite Brick Slab", - "block.create.cut_calcite_brick_stairs": "UNLOCALIZED: Cut Calcite Brick Stairs", - "block.create.cut_calcite_brick_wall": "UNLOCALIZED: Cut Calcite Brick Wall", - "block.create.cut_calcite_bricks": "UNLOCALIZED: Cut Calcite Bricks", - "block.create.cut_calcite_slab": "UNLOCALIZED: Cut Calcite Slab", - "block.create.cut_calcite_stairs": "UNLOCALIZED: Cut Calcite Stairs", - "block.create.cut_calcite_wall": "UNLOCALIZED: Cut Calcite Wall", - "block.create.cut_crimsite": "UNLOCALIZED: Cut Crimsite", - "block.create.cut_crimsite_brick_slab": "UNLOCALIZED: Cut Crimsite Brick Slab", - "block.create.cut_crimsite_brick_stairs": "UNLOCALIZED: Cut Crimsite Brick Stairs", - "block.create.cut_crimsite_brick_wall": "UNLOCALIZED: Cut Crimsite Brick Wall", - "block.create.cut_crimsite_bricks": "UNLOCALIZED: Cut Crimsite Bricks", - "block.create.cut_crimsite_slab": "UNLOCALIZED: Cut Crimsite Slab", - "block.create.cut_crimsite_stairs": "UNLOCALIZED: Cut Crimsite Stairs", - "block.create.cut_crimsite_wall": "UNLOCALIZED: Cut Crimsite Wall", - "block.create.cut_deepslate": "UNLOCALIZED: Cut Deepslate", - "block.create.cut_deepslate_brick_slab": "UNLOCALIZED: Cut Deepslate Brick Slab", - "block.create.cut_deepslate_brick_stairs": "UNLOCALIZED: Cut Deepslate Brick Stairs", - "block.create.cut_deepslate_brick_wall": "UNLOCALIZED: Cut Deepslate Brick Wall", - "block.create.cut_deepslate_bricks": "UNLOCALIZED: Cut Deepslate Bricks", - "block.create.cut_deepslate_slab": "UNLOCALIZED: Cut Deepslate Slab", - "block.create.cut_deepslate_stairs": "UNLOCALIZED: Cut Deepslate Stairs", - "block.create.cut_deepslate_wall": "UNLOCALIZED: Cut Deepslate Wall", - "block.create.cut_diorite": "UNLOCALIZED: Cut Diorite", - "block.create.cut_diorite_brick_slab": "UNLOCALIZED: Cut Diorite Brick Slab", - "block.create.cut_diorite_brick_stairs": "UNLOCALIZED: Cut Diorite Brick Stairs", - "block.create.cut_diorite_brick_wall": "UNLOCALIZED: Cut Diorite Brick Wall", - "block.create.cut_diorite_bricks": "UNLOCALIZED: Cut Diorite Bricks", - "block.create.cut_diorite_slab": "UNLOCALIZED: Cut Diorite Slab", - "block.create.cut_diorite_stairs": "UNLOCALIZED: Cut Diorite Stairs", - "block.create.cut_diorite_wall": "UNLOCALIZED: Cut Diorite Wall", - "block.create.cut_dripstone": "UNLOCALIZED: Cut Dripstone", - "block.create.cut_dripstone_brick_slab": "UNLOCALIZED: Cut Dripstone Brick Slab", - "block.create.cut_dripstone_brick_stairs": "UNLOCALIZED: Cut Dripstone Brick Stairs", - "block.create.cut_dripstone_brick_wall": "UNLOCALIZED: Cut Dripstone Brick Wall", - "block.create.cut_dripstone_bricks": "UNLOCALIZED: Cut Dripstone Bricks", - "block.create.cut_dripstone_slab": "UNLOCALIZED: Cut Dripstone Slab", - "block.create.cut_dripstone_stairs": "UNLOCALIZED: Cut Dripstone Stairs", - "block.create.cut_dripstone_wall": "UNLOCALIZED: Cut Dripstone Wall", - "block.create.cut_granite": "UNLOCALIZED: Cut Granite", - "block.create.cut_granite_brick_slab": "UNLOCALIZED: Cut Granite Brick Slab", - "block.create.cut_granite_brick_stairs": "UNLOCALIZED: Cut Granite Brick Stairs", - "block.create.cut_granite_brick_wall": "UNLOCALIZED: Cut Granite Brick Wall", - "block.create.cut_granite_bricks": "UNLOCALIZED: Cut Granite Bricks", - "block.create.cut_granite_slab": "UNLOCALIZED: Cut Granite Slab", - "block.create.cut_granite_stairs": "UNLOCALIZED: Cut Granite Stairs", - "block.create.cut_granite_wall": "UNLOCALIZED: Cut Granite Wall", - "block.create.cut_limestone": "UNLOCALIZED: Cut Limestone", - "block.create.cut_limestone_brick_slab": "UNLOCALIZED: Cut Limestone Brick Slab", - "block.create.cut_limestone_brick_stairs": "UNLOCALIZED: Cut Limestone Brick Stairs", - "block.create.cut_limestone_brick_wall": "UNLOCALIZED: Cut Limestone Brick Wall", - "block.create.cut_limestone_bricks": "UNLOCALIZED: Cut Limestone Bricks", - "block.create.cut_limestone_slab": "UNLOCALIZED: Cut Limestone Slab", - "block.create.cut_limestone_stairs": "UNLOCALIZED: Cut Limestone Stairs", - "block.create.cut_limestone_wall": "UNLOCALIZED: Cut Limestone Wall", - "block.create.cut_ochrum": "UNLOCALIZED: Cut Ochrum", - "block.create.cut_ochrum_brick_slab": "UNLOCALIZED: Cut Ochrum Brick Slab", - "block.create.cut_ochrum_brick_stairs": "UNLOCALIZED: Cut Ochrum Brick Stairs", - "block.create.cut_ochrum_brick_wall": "UNLOCALIZED: Cut Ochrum Brick Wall", - "block.create.cut_ochrum_bricks": "UNLOCALIZED: Cut Ochrum Bricks", - "block.create.cut_ochrum_slab": "UNLOCALIZED: Cut Ochrum Slab", - "block.create.cut_ochrum_stairs": "UNLOCALIZED: Cut Ochrum Stairs", - "block.create.cut_ochrum_wall": "UNLOCALIZED: Cut Ochrum Wall", - "block.create.cut_scorchia": "UNLOCALIZED: Cut Scorchia", - "block.create.cut_scorchia_brick_slab": "UNLOCALIZED: Cut Scorchia Brick Slab", - "block.create.cut_scorchia_brick_stairs": "UNLOCALIZED: Cut Scorchia Brick Stairs", - "block.create.cut_scorchia_brick_wall": "UNLOCALIZED: Cut Scorchia Brick Wall", - "block.create.cut_scorchia_bricks": "UNLOCALIZED: Cut Scorchia Bricks", - "block.create.cut_scorchia_slab": "UNLOCALIZED: Cut Scorchia Slab", - "block.create.cut_scorchia_stairs": "UNLOCALIZED: Cut Scorchia Stairs", - "block.create.cut_scorchia_wall": "UNLOCALIZED: Cut Scorchia Wall", - "block.create.cut_scoria": "UNLOCALIZED: Cut Scoria", - "block.create.cut_scoria_brick_slab": "UNLOCALIZED: Cut Scoria Brick Slab", - "block.create.cut_scoria_brick_stairs": "UNLOCALIZED: Cut Scoria Brick Stairs", - "block.create.cut_scoria_brick_wall": "UNLOCALIZED: Cut Scoria Brick Wall", - "block.create.cut_scoria_bricks": "UNLOCALIZED: Cut Scoria Bricks", - "block.create.cut_scoria_slab": "UNLOCALIZED: Cut Scoria Slab", - "block.create.cut_scoria_stairs": "UNLOCALIZED: Cut Scoria Stairs", - "block.create.cut_scoria_wall": "UNLOCALIZED: Cut Scoria Wall", - "block.create.cut_tuff": "UNLOCALIZED: Cut Tuff", - "block.create.cut_tuff_brick_slab": "UNLOCALIZED: Cut Tuff Brick Slab", - "block.create.cut_tuff_brick_stairs": "UNLOCALIZED: Cut Tuff Brick Stairs", - "block.create.cut_tuff_brick_wall": "UNLOCALIZED: Cut Tuff Brick Wall", - "block.create.cut_tuff_bricks": "UNLOCALIZED: Cut Tuff Bricks", - "block.create.cut_tuff_slab": "UNLOCALIZED: Cut Tuff Slab", - "block.create.cut_tuff_stairs": "UNLOCALIZED: Cut Tuff Stairs", - "block.create.cut_tuff_wall": "UNLOCALIZED: Cut Tuff Wall", - "block.create.cut_veridium": "UNLOCALIZED: Cut Veridium", - "block.create.cut_veridium_brick_slab": "UNLOCALIZED: Cut Veridium Brick Slab", - "block.create.cut_veridium_brick_stairs": "UNLOCALIZED: Cut Veridium Brick Stairs", - "block.create.cut_veridium_brick_wall": "UNLOCALIZED: Cut Veridium Brick Wall", - "block.create.cut_veridium_bricks": "UNLOCALIZED: Cut Veridium Bricks", - "block.create.cut_veridium_slab": "UNLOCALIZED: Cut Veridium Slab", - "block.create.cut_veridium_stairs": "UNLOCALIZED: Cut Veridium Stairs", - "block.create.cut_veridium_wall": "UNLOCALIZED: Cut Veridium Wall", + "block.create.cut_andesite": "Andesito lapidado", + "block.create.cut_andesite_brick_slab": "Laje de tijolos lapidados de andesito", + "block.create.cut_andesite_brick_stairs": "Escada de tijolos lapidados de andesito", + "block.create.cut_andesite_brick_wall": "Muro de tijolos lapidados de andesito", + "block.create.cut_andesite_bricks": "Tijolos lapidados de andesito", + "block.create.cut_andesite_slab": "Laje de andesito lapidado", + "block.create.cut_andesite_stairs": "Escada de andesito lapidado", + "block.create.cut_andesite_wall": "Muro de andesito lapidado", + "block.create.cut_asurine": "Asurino lapidado", + "block.create.cut_asurine_brick_slab": "Laje de tijolos lapidados de Asurino", + "block.create.cut_asurine_brick_stairs": "Escada de tijolos lapidados de Asurino", + "block.create.cut_asurine_brick_wall": "Muro de tijolos lapidados de Asurino", + "block.create.cut_asurine_bricks": "Tijolos lapidados de Asurino", + "block.create.cut_asurine_slab": "Laje de Asurino lapidado", + "block.create.cut_asurine_stairs": "Escada de Asurino lapidado", + "block.create.cut_asurine_wall": "Muro de Asurino lapidado", + "block.create.cut_calcite": "Calcita lapidada", + "block.create.cut_calcite_brick_slab": "Laje de tijolos lapidados de Calcita", + "block.create.cut_calcite_brick_stairs": "Escada de tijolos lapidados de Calcita", + "block.create.cut_calcite_brick_wall": "Muro de tijolos lapidados de Calcita", + "block.create.cut_calcite_bricks": "Tijolos lapidados de Calcita", + "block.create.cut_calcite_slab": "Laje de Calcita lapidada", + "block.create.cut_calcite_stairs": "Escada de Calcita lapidada", + "block.create.cut_calcite_wall": "Muro de Calcita lapidada", + "block.create.cut_crimsite": "Carmesito lapidado", + "block.create.cut_crimsite_brick_slab": "Laje de tijolos lapidados de Carmesito", + "block.create.cut_crimsite_brick_stairs": "Escada de tijolos lapidados de Carmesito", + "block.create.cut_crimsite_brick_wall": "Muro de tijolos lapidados de Carmesito", + "block.create.cut_crimsite_bricks": "Tijolos lapidados de Carmesito", + "block.create.cut_crimsite_slab": "Laje de Carmesito lapidado", + "block.create.cut_crimsite_stairs": "Escada de Carmesito lapidado", + "block.create.cut_crimsite_wall": "Muro de Carmesito lapidado", + "block.create.cut_deepslate": "Ardósia lapidada", + "block.create.cut_deepslate_brick_slab": "Laje de tijolos lapidados de ardósia", + "block.create.cut_deepslate_brick_stairs": "Escada de tijolos lapidados de ardósia", + "block.create.cut_deepslate_brick_wall": "Muro de tijolos lapidados de ardósia", + "block.create.cut_deepslate_bricks": "Tijolos lapidados de ardósia", + "block.create.cut_deepslate_slab": "Laje de ardósia lapidada", + "block.create.cut_deepslate_stairs": "Escada de ardósia lapidada", + "block.create.cut_deepslate_wall": "Muro de ardósia lapidada", + "block.create.cut_diorite": "Diorito lapidado", + "block.create.cut_diorite_brick_slab": "Laje de tijolos lapidados de diorito", + "block.create.cut_diorite_brick_stairs": "Escada de tijolos lapidados de diorito", + "block.create.cut_diorite_brick_wall": "Muro de tijolos lapidados de diorito", + "block.create.cut_diorite_bricks": "Tijolos lapidados de diorito", + "block.create.cut_diorite_slab": "Laje de diorito lapidado", + "block.create.cut_diorite_stairs": "Escada de diorito lapidado", + "block.create.cut_diorite_wall": "Muro de diorito lapidado", + "block.create.cut_dripstone": "Espeleotema lapidado", + "block.create.cut_dripstone_brick_slab": "Laje de tijolos lapidados de espeleotema", + "block.create.cut_dripstone_brick_stairs": "Escada de tijolos lapidados de espeleotema", + "block.create.cut_dripstone_brick_wall": "Muro de tijolos lapidados de espeleotema", + "block.create.cut_dripstone_bricks": "Tijolos lapidados de espeleotema", + "block.create.cut_dripstone_slab": "Laje de espeleotema lapidado", + "block.create.cut_dripstone_stairs": "Escada de espeleotema lapidado", + "block.create.cut_dripstone_wall": "Muro de espeleotema lapidado", + "block.create.cut_granite": "Granito lapidado", + "block.create.cut_granite_brick_slab": "Laje de tijolos lapidados de granito", + "block.create.cut_granite_brick_stairs": "Escada de tijolos lapidados de granito", + "block.create.cut_granite_brick_wall": "Muro de tijolos lapidados de granito", + "block.create.cut_granite_bricks": "Tijolos lapidados de granito", + "block.create.cut_granite_slab": "Laje de granito lapidado", + "block.create.cut_granite_stairs": "Escada de granito lapidado", + "block.create.cut_granite_wall": "Muro de granito lapidado", + "block.create.cut_limestone": "Calcário lapidado", + "block.create.cut_limestone_brick_slab": "Laje de tijolos lapidados de calcário", + "block.create.cut_limestone_brick_stairs": "Escada de tijolos lapidados de calcário", + "block.create.cut_limestone_brick_wall": "Muro de tijolos lapidados de calcário", + "block.create.cut_limestone_bricks": "Tijolos lapidados de calcário", + "block.create.cut_limestone_slab": "Laje de calcário lapidado", + "block.create.cut_limestone_stairs": "Escada de calcário lapidado", + "block.create.cut_limestone_wall": "Muro de calcário lapidado", + "block.create.cut_ochrum": "Ocrom", + "block.create.cut_ochrum_brick_slab": "Laje de tijolos lapidados de Ocrom", + "block.create.cut_ochrum_brick_stairs": "Escada de tijolos lapidados de Ocrom", + "block.create.cut_ochrum_brick_wall": "Muro de tijolos lapidados de Ocrom", + "block.create.cut_ochrum_bricks": "Tijolos lapidados de Ocrom", + "block.create.cut_ochrum_slab": "Laje de Ocrom lapidado", + "block.create.cut_ochrum_stairs": "Escada de Ocrom lapidado", + "block.create.cut_ochrum_wall": "Muro de Ocrom lapidado", + "block.create.cut_scorchia": "Escória negra lapidada", + "block.create.cut_scorchia_brick_slab": "Laje de tijolos lapidados de escória negra", + "block.create.cut_scorchia_brick_stairs": "Escada de tijolos lapidados de escória negra", + "block.create.cut_scorchia_brick_wall": "Muro de tijolos lapidados de escória negra", + "block.create.cut_scorchia_bricks": "Tijolos lapidados de escória negra", + "block.create.cut_scorchia_slab": "Laje de escória negra lapidada", + "block.create.cut_scorchia_stairs": "Escada de escória negra lapidada", + "block.create.cut_scorchia_wall": "Muro de escória negra lapidada", + "block.create.cut_scoria": "Escória lapidada", + "block.create.cut_scoria_brick_slab": "Laje de tijolos lapidados de escória", + "block.create.cut_scoria_brick_stairs": "Escada de tijolos lapidados de escória", + "block.create.cut_scoria_brick_wall": "Muro de tijolos lapidados de escória", + "block.create.cut_scoria_bricks": "Tijolos lapidados de escória", + "block.create.cut_scoria_slab": "Laje de escória lapidada", + "block.create.cut_scoria_stairs": "Escada de escória lapidada", + "block.create.cut_scoria_wall": "Muro de escória lapidada", + "block.create.cut_tuff": "Tufo lapidado", + "block.create.cut_tuff_brick_slab": "Laje de tijolos lapidados de tufo", + "block.create.cut_tuff_brick_stairs": "Escada de tijolos lapidados de tufo", + "block.create.cut_tuff_brick_wall": "Muro de tijolos lapidados de tufo", + "block.create.cut_tuff_bricks": "Tijolos lapidados de tufo", + "block.create.cut_tuff_slab": "Laje de tufo lapidado", + "block.create.cut_tuff_stairs": "Escada de tufo lapidado", + "block.create.cut_tuff_wall": "Muro de tufo lapidado", + "block.create.cut_veridium": "Veridiano lapidado", + "block.create.cut_veridium_brick_slab": "Laje de tijolos lapidados de Veridiano", + "block.create.cut_veridium_brick_stairs": "Escada de tijolos lapidados de Veridiano", + "block.create.cut_veridium_brick_wall": "Muro de tijolos lapidados de Veridiano", + "block.create.cut_veridium_bricks": "Tijolos lapidados de Veridiano", + "block.create.cut_veridium_slab": "Laje de Veridiano lapidado", + "block.create.cut_veridium_stairs": "Escada de Veridiano lapidado", + "block.create.cut_veridium_wall": "Muro de Veridiano lapidado", "block.create.cyan_nixie_tube": "Tubo nixie ciano", "block.create.cyan_sail": "Vela ciano", "block.create.cyan_seat": "Assento ciano", "block.create.cyan_toolbox": "caixa de ferramentas ciano", "block.create.cyan_valve_handle": "Válvula ciano", - "block.create.dark_oak_window": "UNLOCALIZED: Dark Oak Window", - "block.create.dark_oak_window_pane": "UNLOCALIZED: Dark Oak Window Pane", - "block.create.deepslate_pillar": "UNLOCALIZED: Deepslate Pillar", + "block.create.dark_oak_window": "Janela de carvalho escuro", + "block.create.dark_oak_window_pane": "Vidraça de carvalho escuro", + "block.create.deepslate_pillar": "Pilar de ardósia", "block.create.deepslate_zinc_ore": "Minério de zinco de ardósia", "block.create.deployer": "Implantador", "block.create.depot": "Depósito", - "block.create.diorite_pillar": "UNLOCALIZED: Diorite Pillar", - "block.create.dripstone_pillar": "UNLOCALIZED: Dripstone Pillar", + "block.create.diorite_pillar": "Pilar de diorito", + "block.create.dripstone_pillar": "Pilar de espeleotema", "block.create.encased_chain_drive": "Correia Revestida", "block.create.encased_fan": "Ventilador Revestida", "block.create.encased_fluid_pipe": "Cano de Fluidos Revestido", - "block.create.exposed_copper_shingle_slab": "UNLOCALIZED: Exposed Copper Shingle Slab", - "block.create.exposed_copper_shingle_stairs": "UNLOCALIZED: Exposed Copper Shingle Stairs", - "block.create.exposed_copper_shingles": "UNLOCALIZED: Exposed Copper Shingles", - "block.create.exposed_copper_tile_slab": "UNLOCALIZED: Exposed Copper Tile Slab", - "block.create.exposed_copper_tile_stairs": "UNLOCALIZED: Exposed Copper Tile Stairs", - "block.create.exposed_copper_tiles": "UNLOCALIZED: Exposed Copper Tiles", + "block.create.exposed_copper_shingle_slab": "Laje de telha de cobre exposta", + "block.create.exposed_copper_shingle_stairs": "Escada de telha de cobre exposta", + "block.create.exposed_copper_shingles": "Telha de cobre exposta", + "block.create.exposed_copper_tile_slab": "Laje de ladrilho de cobre exposta", + "block.create.exposed_copper_tile_stairs": "Escada de ladrilho de cobre exposta", + "block.create.exposed_copper_tiles": "Ladrilho de cobre exposto", "block.create.fluid_pipe": "Cano de Fluido", "block.create.fluid_tank": "Tanque de fluido", "block.create.fluid_valve": "Válvula", "block.create.flywheel": "Volante de inércia", - "block.create.framed_glass": "UNLOCALIZED: Framed Glass", - "block.create.framed_glass_pane": "UNLOCALIZED: Framed Glass Pane", + "block.create.framed_glass": "Vidro emoldurado", + "block.create.framed_glass_pane": "Vidraça emoldurada", "block.create.furnace_engine": "Motor de Fornalha", "block.create.gantry_carriage": "Carruagem de Pórtico", "block.create.gantry_shaft": "Eixo de Pórtico", "block.create.gearbox": "Caixa de Transmissão", "block.create.gearshift": "Câmbio", "block.create.glass_fluid_pipe": "Cano de Fluido de Vidro", - "block.create.granite_pillar": "UNLOCALIZED: Granite Pillar", + "block.create.granite_pillar": "Pilar de granito", "block.create.gray_nixie_tube": "Tubo nixie cinza", "block.create.gray_sail": "Vela cinza", "block.create.gray_seat": "Assento cinza", @@ -233,28 +233,28 @@ "block.create.hand_crank": "Manivela", "block.create.haunted_bell": "Sino assombrado", "block.create.honey": "Mel", - "block.create.horizontal_framed_glass": "UNLOCALIZED: Horizontal Framed Glass", - "block.create.horizontal_framed_glass_pane": "UNLOCALIZED: Horizontal Framed Glass Pane", + "block.create.horizontal_framed_glass": "Vidro emoldurado horizontal", + "block.create.horizontal_framed_glass_pane": "Vidraça emoldurada horizontal", "block.create.hose_pulley": "Polia de Mangueira", "block.create.item_drain": "Dreno de Item", "block.create.item_vault": "Cofre de itens", - "block.create.jungle_window": "UNLOCALIZED: Jungle Window", - "block.create.jungle_window_pane": "UNLOCALIZED: Jungle Window Pane", - "block.create.large_cogwheel": "UNLOCALIZED: Large Cogwheel", - "block.create.layered_andesite": "UNLOCALIZED: Layered Andesite", - "block.create.layered_asurine": "UNLOCALIZED: Layered Asurine", - "block.create.layered_calcite": "UNLOCALIZED: Layered Calcite", - "block.create.layered_crimsite": "UNLOCALIZED: Layered Crimsite", - "block.create.layered_deepslate": "UNLOCALIZED: Layered Deepslate", - "block.create.layered_diorite": "UNLOCALIZED: Layered Diorite", - "block.create.layered_dripstone": "UNLOCALIZED: Layered Dripstone", - "block.create.layered_granite": "UNLOCALIZED: Layered Granite", - "block.create.layered_limestone": "UNLOCALIZED: Layered Limestone", - "block.create.layered_ochrum": "UNLOCALIZED: Layered Ochrum", - "block.create.layered_scorchia": "UNLOCALIZED: Layered Scorchia", - "block.create.layered_scoria": "UNLOCALIZED: Layered Scoria", - "block.create.layered_tuff": "UNLOCALIZED: Layered Tuff", - "block.create.layered_veridium": "UNLOCALIZED: Layered Veridium", + "block.create.jungle_window": "Janela da selva", + "block.create.jungle_window_pane": "Vidraça da selva", + "block.create.large_cogwheel": "Roda dentada grande", + "block.create.layered_andesite": "Andesito estratificado", + "block.create.layered_asurine": "Asurino estratificado", + "block.create.layered_calcite": "Calcita estratificada", + "block.create.layered_crimsite": "Carmesito estratificado", + "block.create.layered_deepslate": "Ardósia estratificado", + "block.create.layered_diorite": "Diorito estratificado", + "block.create.layered_dripstone": "Espeleotema estratificado", + "block.create.layered_granite": "Granito estratificado", + "block.create.layered_limestone": "Calcário estratificado", + "block.create.layered_ochrum": "Ocrom estratificado", + "block.create.layered_scorchia": "Escória negra estratificada", + "block.create.layered_scoria": "Escória estratificada", + "block.create.layered_tuff": "Tufo estratificado", + "block.create.layered_veridium": "Veridiano estratificado", "block.create.lectern_controller": "Controle de Atril", "block.create.light_blue_nixie_tube": "tubo nixie azul claro", "block.create.light_blue_sail": "Vela azul claro", @@ -298,22 +298,22 @@ "block.create.mysterious_cuckoo_clock": "Relógio cuckoo", "block.create.nixie_tube": "Tubo Nixie", "block.create.nozzle": "Bocal", - "block.create.oak_window": "UNLOCALIZED: Oak Window", - "block.create.oak_window_pane": "UNLOCALIZED: Oak Window Pane", - "block.create.ochrum": "UNLOCALIZED: Ochrum", - "block.create.ochrum_pillar": "UNLOCALIZED: Ochrum Pillar", + "block.create.oak_window": "janela de carvalho", + "block.create.oak_window_pane": "Vidraça de carvalho", + "block.create.ochrum": "Ocrom", + "block.create.ochrum_pillar": "Pilar de Ocrom", "block.create.orange_sail": "Vela laranja", "block.create.orange_seat": "Assento laranja", "block.create.orange_toolbox": "Caixa de ferramentas laranja", "block.create.orange_valve_handle": "Válvula laranja", - "block.create.ornate_iron_window": "UNLOCALIZED: Ornate Iron Window", - "block.create.ornate_iron_window_pane": "UNLOCALIZED: Ornate Iron Window Pane", - "block.create.oxidized_copper_shingle_slab": "UNLOCALIZED: Oxidized Copper Shingle Slab", - "block.create.oxidized_copper_shingle_stairs": "UNLOCALIZED: Oxidized Copper Shingle Stairs", - "block.create.oxidized_copper_shingles": "UNLOCALIZED: Oxidized Copper Shingles", - "block.create.oxidized_copper_tile_slab": "UNLOCALIZED: Oxidized Copper Tile Slab", - "block.create.oxidized_copper_tile_stairs": "UNLOCALIZED: Oxidized Copper Tile Stairs", - "block.create.oxidized_copper_tiles": "UNLOCALIZED: Oxidized Copper Tiles", + "block.create.ornate_iron_window": "Janela ornamentada com ferro", + "block.create.ornate_iron_window_pane": "Vidraça ornamentada com ferro", + "block.create.oxidized_copper_shingle_slab": "Laje de telha de cobre oxidada", + "block.create.oxidized_copper_shingle_stairs": "Escada de telha de cobre oxidada", + "block.create.oxidized_copper_shingles": "Telha de cobre oxidada", + "block.create.oxidized_copper_tile_slab": "Laje de ladrilho de cobre oxidado", + "block.create.oxidized_copper_tile_stairs": "Escada de ladrilho de cobre oxidado", + "block.create.oxidized_copper_tiles": "Ladrilho de cobre oxidado", "block.create.peculiar_bell": "Sino peculiar", "block.create.pink_nixie_tube": "Tubo nixie rosa", "block.create.pink_sail": "Vela rosa", @@ -321,66 +321,66 @@ "block.create.pink_toolbox": "Caixa de ferramentas rosa", "block.create.pink_valve_handle": "Válvula rosa", "block.create.piston_extension_pole": "Vara de Extensão do Pistão", - "block.create.polished_cut_andesite": "UNLOCALIZED: Polished Cut Andesite", - "block.create.polished_cut_andesite_slab": "UNLOCALIZED: Polished Cut Andesite Slab", - "block.create.polished_cut_andesite_stairs": "UNLOCALIZED: Polished Cut Andesite Stairs", - "block.create.polished_cut_andesite_wall": "UNLOCALIZED: Polished Cut Andesite Wall", - "block.create.polished_cut_asurine": "UNLOCALIZED: Polished Cut Asurine", - "block.create.polished_cut_asurine_slab": "UNLOCALIZED: Polished Cut Asurine Slab", - "block.create.polished_cut_asurine_stairs": "UNLOCALIZED: Polished Cut Asurine Stairs", - "block.create.polished_cut_asurine_wall": "UNLOCALIZED: Polished Cut Asurine Wall", - "block.create.polished_cut_calcite": "UNLOCALIZED: Polished Cut Calcite", - "block.create.polished_cut_calcite_slab": "UNLOCALIZED: Polished Cut Calcite Slab", - "block.create.polished_cut_calcite_stairs": "UNLOCALIZED: Polished Cut Calcite Stairs", - "block.create.polished_cut_calcite_wall": "UNLOCALIZED: Polished Cut Calcite Wall", - "block.create.polished_cut_crimsite": "UNLOCALIZED: Polished Cut Crimsite", - "block.create.polished_cut_crimsite_slab": "UNLOCALIZED: Polished Cut Crimsite Slab", - "block.create.polished_cut_crimsite_stairs": "UNLOCALIZED: Polished Cut Crimsite Stairs", - "block.create.polished_cut_crimsite_wall": "UNLOCALIZED: Polished Cut Crimsite Wall", - "block.create.polished_cut_deepslate": "UNLOCALIZED: Polished Cut Deepslate", - "block.create.polished_cut_deepslate_slab": "UNLOCALIZED: Polished Cut Deepslate Slab", - "block.create.polished_cut_deepslate_stairs": "UNLOCALIZED: Polished Cut Deepslate Stairs", - "block.create.polished_cut_deepslate_wall": "UNLOCALIZED: Polished Cut Deepslate Wall", - "block.create.polished_cut_diorite": "UNLOCALIZED: Polished Cut Diorite", - "block.create.polished_cut_diorite_slab": "UNLOCALIZED: Polished Cut Diorite Slab", - "block.create.polished_cut_diorite_stairs": "UNLOCALIZED: Polished Cut Diorite Stairs", - "block.create.polished_cut_diorite_wall": "UNLOCALIZED: Polished Cut Diorite Wall", - "block.create.polished_cut_dripstone": "UNLOCALIZED: Polished Cut Dripstone", - "block.create.polished_cut_dripstone_slab": "UNLOCALIZED: Polished Cut Dripstone Slab", - "block.create.polished_cut_dripstone_stairs": "UNLOCALIZED: Polished Cut Dripstone Stairs", - "block.create.polished_cut_dripstone_wall": "UNLOCALIZED: Polished Cut Dripstone Wall", - "block.create.polished_cut_granite": "UNLOCALIZED: Polished Cut Granite", - "block.create.polished_cut_granite_slab": "UNLOCALIZED: Polished Cut Granite Slab", - "block.create.polished_cut_granite_stairs": "UNLOCALIZED: Polished Cut Granite Stairs", - "block.create.polished_cut_granite_wall": "UNLOCALIZED: Polished Cut Granite Wall", - "block.create.polished_cut_limestone": "UNLOCALIZED: Polished Cut Limestone", - "block.create.polished_cut_limestone_slab": "UNLOCALIZED: Polished Cut Limestone Slab", - "block.create.polished_cut_limestone_stairs": "UNLOCALIZED: Polished Cut Limestone Stairs", - "block.create.polished_cut_limestone_wall": "UNLOCALIZED: Polished Cut Limestone Wall", - "block.create.polished_cut_ochrum": "UNLOCALIZED: Polished Cut Ochrum", - "block.create.polished_cut_ochrum_slab": "UNLOCALIZED: Polished Cut Ochrum Slab", - "block.create.polished_cut_ochrum_stairs": "UNLOCALIZED: Polished Cut Ochrum Stairs", - "block.create.polished_cut_ochrum_wall": "UNLOCALIZED: Polished Cut Ochrum Wall", - "block.create.polished_cut_scorchia": "UNLOCALIZED: Polished Cut Scorchia", - "block.create.polished_cut_scorchia_slab": "UNLOCALIZED: Polished Cut Scorchia Slab", - "block.create.polished_cut_scorchia_stairs": "UNLOCALIZED: Polished Cut Scorchia Stairs", - "block.create.polished_cut_scorchia_wall": "UNLOCALIZED: Polished Cut Scorchia Wall", - "block.create.polished_cut_scoria": "UNLOCALIZED: Polished Cut Scoria", - "block.create.polished_cut_scoria_slab": "UNLOCALIZED: Polished Cut Scoria Slab", - "block.create.polished_cut_scoria_stairs": "UNLOCALIZED: Polished Cut Scoria Stairs", - "block.create.polished_cut_scoria_wall": "UNLOCALIZED: Polished Cut Scoria Wall", - "block.create.polished_cut_tuff": "UNLOCALIZED: Polished Cut Tuff", - "block.create.polished_cut_tuff_slab": "UNLOCALIZED: Polished Cut Tuff Slab", - "block.create.polished_cut_tuff_stairs": "UNLOCALIZED: Polished Cut Tuff Stairs", - "block.create.polished_cut_tuff_wall": "UNLOCALIZED: Polished Cut Tuff Wall", - "block.create.polished_cut_veridium": "UNLOCALIZED: Polished Cut Veridium", - "block.create.polished_cut_veridium_slab": "UNLOCALIZED: Polished Cut Veridium Slab", - "block.create.polished_cut_veridium_stairs": "UNLOCALIZED: Polished Cut Veridium Stairs", - "block.create.polished_cut_veridium_wall": "UNLOCALIZED: Polished Cut Veridium Wall", + "block.create.polished_cut_andesite": "Andesito lapidado polido", + "block.create.polished_cut_andesite_slab": "Laje de andesito lapidado polido", + "block.create.polished_cut_andesite_stairs": "Escada de andesito lapidado polido", + "block.create.polished_cut_andesite_wall": "Muro de andesito lapidado polido", + "block.create.polished_cut_asurine": "Asurino lapidado polido", + "block.create.polished_cut_asurine_slab": "Laje de Asurino lapidado polido", + "block.create.polished_cut_asurine_stairs": "Escada de Asurino lapidado polido", + "block.create.polished_cut_asurine_wall": "Muro de Asurino lapidado polido", + "block.create.polished_cut_calcite": "Calcita lapidada polida", + "block.create.polished_cut_calcite_slab": "Laje de calcita lapidada polida", + "block.create.polished_cut_calcite_stairs": "Escada de calcita lapidada polida", + "block.create.polished_cut_calcite_wall": "Muro de calcita lapidada polida", + "block.create.polished_cut_crimsite": "Carmesito lapidado polido", + "block.create.polished_cut_crimsite_slab": "Laje de Carmesito lapidado polido", + "block.create.polished_cut_crimsite_stairs": "Escada de Carmesito lapidado polido", + "block.create.polished_cut_crimsite_wall": "Muro de Carmesito lapidado polido", + "block.create.polished_cut_deepslate": "Ardósia lapidado polido", + "block.create.polished_cut_deepslate_slab": "Laje de ardósia lapidado polido", + "block.create.polished_cut_deepslate_stairs": "Escada de ardósia lapidado polido", + "block.create.polished_cut_deepslate_wall": "Muro de ardósia lapidado polido", + "block.create.polished_cut_diorite": "Diorito lapidado polido", + "block.create.polished_cut_diorite_slab": "Laje de diorito lapidado polido", + "block.create.polished_cut_diorite_stairs": "Escada de diorito lapidado polido", + "block.create.polished_cut_diorite_wall": "Muro de diorito lapidado polido", + "block.create.polished_cut_dripstone": "Espeleotema lapidado polido", + "block.create.polished_cut_dripstone_slab": "Laje de espeleotema lapidado polido", + "block.create.polished_cut_dripstone_stairs": "Escada de espeleotema lapidado polido", + "block.create.polished_cut_dripstone_wall": "Muro de espeleotema lapidado polido", + "block.create.polished_cut_granite": "Granito lapidado polido", + "block.create.polished_cut_granite_slab": "Laje de granito lapidado polido", + "block.create.polished_cut_granite_stairs": "Escada de granito lapidado polido", + "block.create.polished_cut_granite_wall": "Muro de granito lapidado polido", + "block.create.polished_cut_limestone": "Calcário lapidado polido", + "block.create.polished_cut_limestone_slab": "Laje de calcário lapidado polido", + "block.create.polished_cut_limestone_stairs": "Escada de calcário lapidado polido", + "block.create.polished_cut_limestone_wall": "Muro de calcário lapidado polido", + "block.create.polished_cut_ochrum": "Ocrom lapidado polido", + "block.create.polished_cut_ochrum_slab": "Laje de Ocrom lapidado polido", + "block.create.polished_cut_ochrum_stairs": "Escada de Ocrom lapidado polido", + "block.create.polished_cut_ochrum_wall": "Muro de Ocrom lapidado polido", + "block.create.polished_cut_scorchia": "Escória negra lapidada polida", + "block.create.polished_cut_scorchia_slab": "Laje de escória negra lapidada polida", + "block.create.polished_cut_scorchia_stairs": "Escada de escória negra lapidada polida", + "block.create.polished_cut_scorchia_wall": "Muro de escória negra lapidada polida", + "block.create.polished_cut_scoria": "Escória lapidada polida", + "block.create.polished_cut_scoria_slab": "Laje de escória lapidada polida", + "block.create.polished_cut_scoria_stairs": "Escada de escória lapidada polida", + "block.create.polished_cut_scoria_wall": "Muro de escória lapidada polida", + "block.create.polished_cut_tuff": "Tufo lapidado polido", + "block.create.polished_cut_tuff_slab": "Laje de tufo lapidado polido", + "block.create.polished_cut_tuff_stairs": "Escada de tufo lapidado polido", + "block.create.polished_cut_tuff_wall": "Muro de tufo lapidado polido", + "block.create.polished_cut_veridium": "Veridiano lapidado polido", + "block.create.polished_cut_veridium_slab": "Laje de Veridiano lapidado polido", + "block.create.polished_cut_veridium_stairs": "Escada de Veridiano lapidado polido", + "block.create.polished_cut_veridium_wall": "muro de Veridiano lapidado polido", "block.create.portable_fluid_interface": "Interface de fluidos portátil", "block.create.portable_storage_interface": "Interface de armazenamento portátil", - "block.create.powered_latch": "UNLOCALIZED: Powered Latch", - "block.create.powered_toggle_latch": "UNLOCALIZED: Powered Toggle Latch", + "block.create.powered_latch": "Trava de redstone", + "block.create.powered_toggle_latch": "Trave de alternância de redstone", "block.create.pulley_magnet": "Imã da Polia", "block.create.pulse_extender": "Extensor de pulso", "block.create.pulse_repeater": "Repetidor de Pulso", @@ -405,122 +405,122 @@ "block.create.sail_frame": "moldura de vela", "block.create.schematic_table": "Mesa de Esquema", "block.create.schematicannon": "Canhão de Esquema", - "block.create.scorchia": "UNLOCALIZED: Scorchia", - "block.create.scorchia_pillar": "UNLOCALIZED: Scorchia Pillar", - "block.create.scoria": "UNLOCALIZED: Scoria", - "block.create.scoria_pillar": "UNLOCALIZED: Scoria Pillar", + "block.create.scorchia": "Escória negra", + "block.create.scorchia_pillar": "Pilar de escória negra", + "block.create.scoria": "Escória", + "block.create.scoria_pillar": "Pilar de escória", "block.create.secondary_linear_chassis": "Chassis linear secundário", "block.create.sequenced_gearshift": "Câmbio sequenciado", "block.create.shadow_steel_casing": "Revestiment das Sombras", "block.create.shaft": "Eixo", - "block.create.small_andesite_brick_slab": "UNLOCALIZED: Small Andesite Brick Slab", - "block.create.small_andesite_brick_stairs": "UNLOCALIZED: Small Andesite Brick Stairs", - "block.create.small_andesite_brick_wall": "UNLOCALIZED: Small Andesite Brick Wall", - "block.create.small_andesite_bricks": "UNLOCALIZED: Small Andesite Bricks", - "block.create.small_asurine_brick_slab": "UNLOCALIZED: Small Asurine Brick Slab", - "block.create.small_asurine_brick_stairs": "UNLOCALIZED: Small Asurine Brick Stairs", - "block.create.small_asurine_brick_wall": "UNLOCALIZED: Small Asurine Brick Wall", - "block.create.small_asurine_bricks": "UNLOCALIZED: Small Asurine Bricks", - "block.create.small_calcite_brick_slab": "UNLOCALIZED: Small Calcite Brick Slab", - "block.create.small_calcite_brick_stairs": "UNLOCALIZED: Small Calcite Brick Stairs", - "block.create.small_calcite_brick_wall": "UNLOCALIZED: Small Calcite Brick Wall", - "block.create.small_calcite_bricks": "UNLOCALIZED: Small Calcite Bricks", - "block.create.small_crimsite_brick_slab": "UNLOCALIZED: Small Crimsite Brick Slab", - "block.create.small_crimsite_brick_stairs": "UNLOCALIZED: Small Crimsite Brick Stairs", - "block.create.small_crimsite_brick_wall": "UNLOCALIZED: Small Crimsite Brick Wall", - "block.create.small_crimsite_bricks": "UNLOCALIZED: Small Crimsite Bricks", - "block.create.small_deepslate_brick_slab": "UNLOCALIZED: Small Deepslate Brick Slab", - "block.create.small_deepslate_brick_stairs": "UNLOCALIZED: Small Deepslate Brick Stairs", - "block.create.small_deepslate_brick_wall": "UNLOCALIZED: Small Deepslate Brick Wall", - "block.create.small_deepslate_bricks": "UNLOCALIZED: Small Deepslate Bricks", - "block.create.small_diorite_brick_slab": "UNLOCALIZED: Small Diorite Brick Slab", - "block.create.small_diorite_brick_stairs": "UNLOCALIZED: Small Diorite Brick Stairs", - "block.create.small_diorite_brick_wall": "UNLOCALIZED: Small Diorite Brick Wall", - "block.create.small_diorite_bricks": "UNLOCALIZED: Small Diorite Bricks", - "block.create.small_dripstone_brick_slab": "UNLOCALIZED: Small Dripstone Brick Slab", - "block.create.small_dripstone_brick_stairs": "UNLOCALIZED: Small Dripstone Brick Stairs", - "block.create.small_dripstone_brick_wall": "UNLOCALIZED: Small Dripstone Brick Wall", - "block.create.small_dripstone_bricks": "UNLOCALIZED: Small Dripstone Bricks", - "block.create.small_granite_brick_slab": "UNLOCALIZED: Small Granite Brick Slab", - "block.create.small_granite_brick_stairs": "UNLOCALIZED: Small Granite Brick Stairs", - "block.create.small_granite_brick_wall": "UNLOCALIZED: Small Granite Brick Wall", - "block.create.small_granite_bricks": "UNLOCALIZED: Small Granite Bricks", - "block.create.small_limestone_brick_slab": "UNLOCALIZED: Small Limestone Brick Slab", - "block.create.small_limestone_brick_stairs": "UNLOCALIZED: Small Limestone Brick Stairs", - "block.create.small_limestone_brick_wall": "UNLOCALIZED: Small Limestone Brick Wall", - "block.create.small_limestone_bricks": "UNLOCALIZED: Small Limestone Bricks", - "block.create.small_ochrum_brick_slab": "UNLOCALIZED: Small Ochrum Brick Slab", - "block.create.small_ochrum_brick_stairs": "UNLOCALIZED: Small Ochrum Brick Stairs", - "block.create.small_ochrum_brick_wall": "UNLOCALIZED: Small Ochrum Brick Wall", - "block.create.small_ochrum_bricks": "UNLOCALIZED: Small Ochrum Bricks", - "block.create.small_scorchia_brick_slab": "UNLOCALIZED: Small Scorchia Brick Slab", - "block.create.small_scorchia_brick_stairs": "UNLOCALIZED: Small Scorchia Brick Stairs", - "block.create.small_scorchia_brick_wall": "UNLOCALIZED: Small Scorchia Brick Wall", - "block.create.small_scorchia_bricks": "UNLOCALIZED: Small Scorchia Bricks", - "block.create.small_scoria_brick_slab": "UNLOCALIZED: Small Scoria Brick Slab", - "block.create.small_scoria_brick_stairs": "UNLOCALIZED: Small Scoria Brick Stairs", - "block.create.small_scoria_brick_wall": "UNLOCALIZED: Small Scoria Brick Wall", - "block.create.small_scoria_bricks": "UNLOCALIZED: Small Scoria Bricks", - "block.create.small_tuff_brick_slab": "UNLOCALIZED: Small Tuff Brick Slab", - "block.create.small_tuff_brick_stairs": "UNLOCALIZED: Small Tuff Brick Stairs", - "block.create.small_tuff_brick_wall": "UNLOCALIZED: Small Tuff Brick Wall", - "block.create.small_tuff_bricks": "UNLOCALIZED: Small Tuff Bricks", - "block.create.small_veridium_brick_slab": "UNLOCALIZED: Small Veridium Brick Slab", - "block.create.small_veridium_brick_stairs": "UNLOCALIZED: Small Veridium Brick Stairs", - "block.create.small_veridium_brick_wall": "UNLOCALIZED: Small Veridium Brick Wall", - "block.create.small_veridium_bricks": "UNLOCALIZED: Small Veridium Bricks", - "block.create.smart_chute": "calha Inteligente", + "block.create.small_andesite_brick_slab": "Laje de tijolos pequenos de andesito", + "block.create.small_andesite_brick_stairs": "Escada de tijolos pequenos de andesito", + "block.create.small_andesite_brick_wall": "Muro de tijolos pequenos de andesito", + "block.create.small_andesite_bricks": "Tijolos pequenos de andesito", + "block.create.small_asurine_brick_slab": "Laje de tijolos pequenos de Asurino", + "block.create.small_asurine_brick_stairs": "Escada de tijolos pequenos de Asurino", + "block.create.small_asurine_brick_wall": "Muro de tijolos pequenos de Asurino", + "block.create.small_asurine_bricks": "Tijolos pequenos de Asurino", + "block.create.small_calcite_brick_slab": "Laje de tijolos pequenos de calcita", + "block.create.small_calcite_brick_stairs": "Escada de tijolos pequenos de calcita", + "block.create.small_calcite_brick_wall": "Muro de tijolos pequenos de calcita", + "block.create.small_calcite_bricks": "Tijolos pequenos de calcita", + "block.create.small_crimsite_brick_slab": "Laje de tijolos pequenos de Carmesito", + "block.create.small_crimsite_brick_stairs": "Escada de tijolos pequenos de Carmesito", + "block.create.small_crimsite_brick_wall": "Muro de tijolos pequenos de Carmesito", + "block.create.small_crimsite_bricks": "Tijolos pequenos de Carmesito", + "block.create.small_deepslate_brick_slab": "Laje de tijolos pequenos de ardósia", + "block.create.small_deepslate_brick_stairs": "Escada de tijolos pequenos de ardósia", + "block.create.small_deepslate_brick_wall": "Muro de tijolos pequenos de ardósia", + "block.create.small_deepslate_bricks": "Tijolos pequenos de ardósia", + "block.create.small_diorite_brick_slab": "Laje de tijolos pequenos de diorito", + "block.create.small_diorite_brick_stairs": "Escada de tijolos pequenos de diorito", + "block.create.small_diorite_brick_wall": "Muro de tijolos pequenos de diorito", + "block.create.small_diorite_bricks": "Tijolos pequenos de diorito", + "block.create.small_dripstone_brick_slab": "Laje de tijolos pequenos de espeleotema", + "block.create.small_dripstone_brick_stairs": "Escada de tijolos pequenos de espeleotema", + "block.create.small_dripstone_brick_wall": "Muro de tijolos pequenos de espeleotema", + "block.create.small_dripstone_bricks": "Tijolos pequenos de espeleotema", + "block.create.small_granite_brick_slab": "Laje de tijolos pequenos de granito", + "block.create.small_granite_brick_stairs": "Escada de tijolos pequenos de granito", + "block.create.small_granite_brick_wall": "Muro de tijolos pequenos de granito", + "block.create.small_granite_bricks": "Tijolos pequenos de granito", + "block.create.small_limestone_brick_slab": "Laje de tijolos pequenos de calcário", + "block.create.small_limestone_brick_stairs": "Escada de tijolos pequenos de calcário", + "block.create.small_limestone_brick_wall": "Muro de tijolos pequenos de calcário", + "block.create.small_limestone_bricks": "Tijolos pequenos de calcário", + "block.create.small_ochrum_brick_slab": "Laje de tijolos pequenos de Ocrom", + "block.create.small_ochrum_brick_stairs": "Escada de tijolos pequenos de Ocrom", + "block.create.small_ochrum_brick_wall": "Muro de tijolos pequenos de Ocrom", + "block.create.small_ochrum_bricks": "Tijolos pequenos de Ocrom", + "block.create.small_scorchia_brick_slab": "Laje de tijolos pequenos de escória negra", + "block.create.small_scorchia_brick_stairs": "Escada de tijolos pequenos de escória negra", + "block.create.small_scorchia_brick_wall": "Muro de tijolos pequenos de escória negra", + "block.create.small_scorchia_bricks": "Tijolos pequenos de escória negra", + "block.create.small_scoria_brick_slab": "Laje de tijolos pequenos de escória", + "block.create.small_scoria_brick_stairs": "Escada de tijolos pequenos de escória", + "block.create.small_scoria_brick_wall": "Muro de tijolos pequenos de escória", + "block.create.small_scoria_bricks": "Tijolos pequenos de escória", + "block.create.small_tuff_brick_slab": "Laje de tijolos pequenos de tufo", + "block.create.small_tuff_brick_stairs": "Escada de tijolos pequenos de tufo", + "block.create.small_tuff_brick_wall": "Muro de tijolos pequenos de tufo", + "block.create.small_tuff_bricks": "Tijolos pequenos de tufo", + "block.create.small_veridium_brick_slab": "Laje de tijolos pequenos de Veridiano", + "block.create.small_veridium_brick_stairs": "Escada de tijolos pequenos de Veridiano", + "block.create.small_veridium_brick_wall": "Muro de tijolos pequenos de Veridiano", + "block.create.small_veridium_bricks": "Tijolos pequenos de Veridiano", + "block.create.smart_chute": "Calha Inteligente", "block.create.smart_fluid_pipe": "Cano de Fluidos Inteligente", "block.create.speedometer": "Velocímetro", "block.create.spout": "Bica", - "block.create.spruce_window": "UNLOCALIZED: Spruce Window", - "block.create.spruce_window_pane": "UNLOCALIZED: Spruce Window Pane", + "block.create.spruce_window": "Janela de pinheiro", + "block.create.spruce_window_pane": "Vidraça de pinheiro", "block.create.sticker": "Adesivo", "block.create.sticky_mechanical_piston": "Pistão Mecânico Grudento", "block.create.stockpile_switch": "Disjuntor de Armazenamento", "block.create.stressometer": "Estressómetro", "block.create.tiled_glass": "Vidro Entalhado", "block.create.tiled_glass_pane": "Vidraça Entalhada", - "block.create.tuff_pillar": "UNLOCALIZED: Tuff Pillar", + "block.create.tuff_pillar": "Pilar de tufo", "block.create.turntable": "Mesa giratória", - "block.create.veridium": "UNLOCALIZED: Veridium", - "block.create.veridium_pillar": "UNLOCALIZED: Veridium Pillar", - "block.create.vertical_framed_glass": "UNLOCALIZED: Vertical Framed Glass", - "block.create.vertical_framed_glass_pane": "UNLOCALIZED: Vertical Framed Glass Pane", - "block.create.warped_window": "UNLOCALIZED: Warped Window", - "block.create.warped_window_pane": "UNLOCALIZED: Warped Window Pane", + "block.create.veridium": "Veridiano", + "block.create.veridium_pillar": "Pilar de Verdiano", + "block.create.vertical_framed_glass": "Vidro emoldurado vertical", + "block.create.vertical_framed_glass_pane": "Vidraça emoldurada vertical", + "block.create.warped_window": "Janela distorcida", + "block.create.warped_window_pane": "Vidraça distorcida", "block.create.water_wheel": "Roda de Ãgua", - "block.create.waxed_copper_shingle_slab": "UNLOCALIZED: Waxed Copper Shingle Slab", - "block.create.waxed_copper_shingle_stairs": "UNLOCALIZED: Waxed Copper Shingle Stairs", - "block.create.waxed_copper_shingles": "UNLOCALIZED: Waxed Copper Shingles", - "block.create.waxed_copper_tile_slab": "UNLOCALIZED: Waxed Copper Tile Slab", - "block.create.waxed_copper_tile_stairs": "UNLOCALIZED: Waxed Copper Tile Stairs", - "block.create.waxed_copper_tiles": "UNLOCALIZED: Waxed Copper Tiles", - "block.create.waxed_exposed_copper_shingle_slab": "UNLOCALIZED: Waxed Exposed Copper Shingle Slab", - "block.create.waxed_exposed_copper_shingle_stairs": "UNLOCALIZED: Waxed Exposed Copper Shingle Stairs", - "block.create.waxed_exposed_copper_shingles": "UNLOCALIZED: Waxed Exposed Copper Shingles", - "block.create.waxed_exposed_copper_tile_slab": "UNLOCALIZED: Waxed Exposed Copper Tile Slab", - "block.create.waxed_exposed_copper_tile_stairs": "UNLOCALIZED: Waxed Exposed Copper Tile Stairs", - "block.create.waxed_exposed_copper_tiles": "UNLOCALIZED: Waxed Exposed Copper Tiles", - "block.create.waxed_oxidized_copper_shingle_slab": "UNLOCALIZED: Waxed Oxidized Copper Shingle Slab", - "block.create.waxed_oxidized_copper_shingle_stairs": "UNLOCALIZED: Waxed Oxidized Copper Shingle Stairs", - "block.create.waxed_oxidized_copper_shingles": "UNLOCALIZED: Waxed Oxidized Copper Shingles", - "block.create.waxed_oxidized_copper_tile_slab": "UNLOCALIZED: Waxed Oxidized Copper Tile Slab", - "block.create.waxed_oxidized_copper_tile_stairs": "UNLOCALIZED: Waxed Oxidized Copper Tile Stairs", - "block.create.waxed_oxidized_copper_tiles": "UNLOCALIZED: Waxed Oxidized Copper Tiles", - "block.create.waxed_weathered_copper_shingle_slab": "UNLOCALIZED: Waxed Weathered Copper Shingle Slab", - "block.create.waxed_weathered_copper_shingle_stairs": "UNLOCALIZED: Waxed Weathered Copper Shingle Stairs", - "block.create.waxed_weathered_copper_shingles": "UNLOCALIZED: Waxed Weathered Copper Shingles", - "block.create.waxed_weathered_copper_tile_slab": "UNLOCALIZED: Waxed Weathered Copper Tile Slab", - "block.create.waxed_weathered_copper_tile_stairs": "UNLOCALIZED: Waxed Weathered Copper Tile Stairs", - "block.create.waxed_weathered_copper_tiles": "UNLOCALIZED: Waxed Weathered Copper Tiles", - "block.create.weathered_copper_shingle_slab": "UNLOCALIZED: Weathered Copper Shingle Slab", - "block.create.weathered_copper_shingle_stairs": "UNLOCALIZED: Weathered Copper Shingle Stairs", - "block.create.weathered_copper_shingles": "UNLOCALIZED: Weathered Copper Shingles", - "block.create.weathered_copper_tile_slab": "UNLOCALIZED: Weathered Copper Tile Slab", - "block.create.weathered_copper_tile_stairs": "UNLOCALIZED: Weathered Copper Tile Stairs", - "block.create.weathered_copper_tiles": "UNLOCALIZED: Weathered Copper Tiles", - "block.create.weighted_ejector": "Ejetor ´ponderado", + "block.create.waxed_copper_shingle_slab": "Laje de telha de cobre encerada", + "block.create.waxed_copper_shingle_stairs": "Escada de telha de cobre encerada", + "block.create.waxed_copper_shingles": "Telha de cobre encerada", + "block.create.waxed_copper_tile_slab": "Laje de ladrilho de cobre encerada", + "block.create.waxed_copper_tile_stairs": "Escada de ladrilho de cobre encerada", + "block.create.waxed_copper_tiles": "Ladrilho de cobre encerado", + "block.create.waxed_exposed_copper_shingle_slab": "Laje de telha de cobre exposta encerada", + "block.create.waxed_exposed_copper_shingle_stairs": "Escada de telha de cobre exposta encerada", + "block.create.waxed_exposed_copper_shingles": "Telha de cobre exposta encerada", + "block.create.waxed_exposed_copper_tile_slab": "Laje de ladrilho de cobre exposta encerada", + "block.create.waxed_exposed_copper_tile_stairs": "Escada de ladrilho de cobre exposta encerada", + "block.create.waxed_exposed_copper_tiles": "Ladrilhos de cobre exposto encerado", + "block.create.waxed_oxidized_copper_shingle_slab": "Laje de telha de cobre oxidada encerada", + "block.create.waxed_oxidized_copper_shingle_stairs": "Escada de telha de cobre oxidada encerada", + "block.create.waxed_oxidized_copper_shingles": "Telha de cobre oxidada encerada", + "block.create.waxed_oxidized_copper_tile_slab": "Laje de ladrilhos de cobre oxidada encerada", + "block.create.waxed_oxidized_copper_tile_stairs": "Escada de ladrilhos de cobre oxidada encerada", + "block.create.waxed_oxidized_copper_tiles": "Ladrilhos de cobre oxidado encerado", + "block.create.waxed_weathered_copper_shingle_slab": "Laje de telha de cobre desgastada encerada", + "block.create.waxed_weathered_copper_shingle_stairs": "Escada de telha de cobre desgastada encerada", + "block.create.waxed_weathered_copper_shingles": "Telha de cobre desgastada encereda", + "block.create.waxed_weathered_copper_tile_slab": "Laje de ladrilho de cobre desgastado encerado", + "block.create.waxed_weathered_copper_tile_stairs": "Escada de ladrilho de cobre desgastado encerado", + "block.create.waxed_weathered_copper_tiles": "Ladrilho de cobre desgastado encerado", + "block.create.weathered_copper_shingle_slab": "Laje de telha de cobre desgastada encerada", + "block.create.weathered_copper_shingle_stairs": "Escada de telha de cobre desgastada encerada", + "block.create.weathered_copper_shingles": "Telha de cobre desgastada encerada", + "block.create.weathered_copper_tile_slab": "Laje de ladrilhos de cobre desgastada encerada", + "block.create.weathered_copper_tile_stairs": "Escada de ladrilhos de cobre desgastada encerada", + "block.create.weathered_copper_tiles": "Ladrilhos de cobre desgastado encerado", + "block.create.weighted_ejector": "Ejetor ponderado", "block.create.white_nixie_tube": "Tubo nixie branco", "block.create.white_sail": "Vela branca", "block.create.white_seat": "Assento branco", @@ -597,7 +597,7 @@ "item.create.furnace_minecart_contraption": "Engenhoca de Carrinho de Mina com Fornalha", "item.create.goggles": "Óculos de Engenheiro", "item.create.golden_sheet": "Chapa de Ouro", - "item.create.handheld_worldshaper": "Modelador de Mundo Criativo", + "item.create.handheld_worldshaper": "Terraformador de Mundo Criativo", "item.create.honey_bucket": "Balde de Mel", "item.create.honeyed_apple": "Maçã com Cobertura de Mel", "item.create.incomplete_cogwheel": "Roda Dentada Incompleta", @@ -657,7 +657,7 @@ "advancement.create.belt_funnel": "UNLOCALIZED: Funnels' Flappy Danglers", "advancement.create.belt_funnel.desc": "Coloque um funil lateral em cima de uma esteira ou depósito para criar um tipo especial.", "advancement.create.belt_funnel_kiss": "UNLOCALIZED: The Parrots and the Flaps", - "advancement.create.belt_funnel_kiss.desc": "UNLOCALIZED: Make two belt mounted funnels kiss.", + "advancement.create.belt_funnel_kiss.desc": "Faça dois funis de esteira beijarem.", "advancement.create.fan": "Dobrador de ar mecânico", "advancement.create.fan.desc": "Pegue uma carona no fluxo de ar provido pelo ventilador revestido.", "advancement.create.fan_lava": "Aquecedor de espaço geotermal", @@ -720,7 +720,7 @@ "advancement.create.copper_casing.desc": "Use um pouco de chapas de cobre e madeira para criar um pouco de revestimentos de cobre.", "advancement.create.spout": "Sploosh", "advancement.create.spout.desc": "Assista um item ser enchido usando uma bica.", - "advancement.create.spout_potion": "UNLOCALIZED: Global Brewery", + "advancement.create.spout_potion": "Mestre de química", "advancement.create.spout_potion.desc": "Assista uma bica encher uma garrafa com uma poção.", "advancement.create.chocolate": "Um mundo de imaginação", "advancement.create.chocolate.desc": "Obtenha um balde de chocolate.", @@ -766,11 +766,11 @@ "advancement.create.arm_many_targets.desc": "Programe um braço mecânico com dez ou mais locais de saida.", "advancement.create.arm_blaze_burner": "Combuste-tron", "advancement.create.arm_blaze_burner.desc": "Instrua um braço mecânico para alimentar seu queimador de blaze.", - "advancement.create.fist_bump": "UNLOCALIZED: Pound It, Bro!", - "advancement.create.fist_bump.desc": "UNLOCALIZED: Make two Deployers fist-bump.", + "advancement.create.fist_bump": "Bate isso, mano!", + "advancement.create.fist_bump.desc": "Faça dois implantadores baterem com o punho.", "advancement.create.crushing_wheel": "Par de gigantes", "advancement.create.crushing_wheel.desc": "Crie algumas rodas de moer para triturar alguns materiais eficientemente.", - "advancement.create.blaze_cake": "UNLOCALIZED: Sugar Rush", + "advancement.create.blaze_cake": "Descarga de açucar", "advancement.create.blaze_cake.desc": "Asse para o seu queimador de blaze um bolo especial.", "advancement.create.wand_of_symmetry": "Espelhos radiantes", "advancement.create.wand_of_symmetry.desc": "Fabrique uma varinha de simetria.", @@ -815,47 +815,47 @@ "create.menu.report_bugs": "UNLOCALIZED: Report Issues", "create.menu.support": "UNLOCALIZED: Support Us", - "create.recipe.crushing": "Moendo", - "create.recipe.milling": "UNLOCALIZED: Milling", + "create.recipe.crushing": "Triturando", + "create.recipe.milling": "Moendo", "create.recipe.fan_washing": "Lavagem em massa", "create.recipe.fan_washing.fan": "Ventilador atrás de água", "create.recipe.fan_smoking": "Defumação em massa", - "create.recipe.fan_smoking.fan": "Ventilador atrás de fogo", - "create.recipe.fan_haunting": "UNLOCALIZED: Bulk Haunting", - "create.recipe.fan_haunting.fan": "UNLOCALIZED: Fan behind Soul Fire", + "create.recipe.fan_smoking.fan": "Ventilador atrás do fogo", + "create.recipe.fan_haunting": "Assombração em massa", + "create.recipe.fan_haunting.fan": "Ventilador atrás do fogo das almas ", "create.recipe.fan_blasting": "Fundição em massa", "create.recipe.fan_blasting.fan": "entilador atrás de lava", - "create.recipe.pressing": "Prensa Mecânica", + "create.recipe.pressing": "Prensando", "create.recipe.mixing": "Misturando", "create.recipe.deploying": "Implantando", - "create.recipe.automatic_shapeless": "UNLOCALIZED: Automated Shapeless Crafting", + "create.recipe.automatic_shapeless": "Fabricação sem forma automático", "create.recipe.automatic_brewing": "UNLOCALIZED: Automated Brewing", "create.recipe.packing": "Compactando", - "create.recipe.automatic_packing": "UNLOCALIZED: Automated Packing", - "create.recipe.sawing": "UNLOCALIZED: Sawing", - "create.recipe.mechanical_crafting": "UNLOCALIZED: Mechanical Crafting", - "create.recipe.automatic_shaped": "UNLOCALIZED: Automated Shaped Crafting", - "create.recipe.block_cutting": "UNLOCALIZED: Block Cutting", - "create.recipe.wood_cutting": "UNLOCALIZED: Wood Cutting", - "create.recipe.sandpaper_polishing": "UNLOCALIZED: Sandpaper Polishing", - "create.recipe.mystery_conversion": "UNLOCALIZED: Mysterious Conversion", - "create.recipe.spout_filling": "UNLOCALIZED: Filling by Spout", - "create.recipe.draining": "UNLOCALIZED: Item Draining", - "create.recipe.sequenced_assembly": "UNLOCALIZED: Sequenced Assembly", - "create.recipe.assembly.next": "UNLOCALIZED: Next: %1$s", - "create.recipe.assembly.step": "UNLOCALIZED: Step %1$s:", - "create.recipe.assembly.progress": "UNLOCALIZED: Progress: %1$s/%2$s", - "create.recipe.assembly.pressing": "UNLOCALIZED: Process in Press", - "create.recipe.assembly.spout_filling_fluid": "UNLOCALIZED: Spout %1$s", - "create.recipe.assembly.deploying_item": "UNLOCALIZED: Deploy %1$s", - "create.recipe.assembly.cutting": "UNLOCALIZED: Cut with Saw", - "create.recipe.assembly.repeat": "UNLOCALIZED: Repeat Sequence %1$s Times", - "create.recipe.assembly.junk": "UNLOCALIZED: Random salvage", - "create.recipe.processing.chance": "UNLOCALIZED: %1$s%% Chance", - "create.recipe.deploying.not_consumed": "UNLOCALIZED: Not Consumed", - "create.recipe.heat_requirement.none": "UNLOCALIZED: No Heating Required", - "create.recipe.heat_requirement.heated": "UNLOCALIZED: Heated", - "create.recipe.heat_requirement.superheated": "UNLOCALIZED: Super-Heated", + "create.recipe.automatic_packing": "Compactamento automático", + "create.recipe.sawing": "Serrando", + "create.recipe.mechanical_crafting": "Fabricação mecânica", + "create.recipe.automatic_shaped": "Fabricação com forma automática", + "create.recipe.block_cutting": "Corte de blocos", + "create.recipe.wood_cutting": "Corte de madeira", + "create.recipe.sandpaper_polishing": "Polimento com lixa", + "create.recipe.mystery_conversion": "Conversão misteriosa", + "create.recipe.spout_filling": "Preenchimento com bica", + "create.recipe.draining": "Drenação de item", + "create.recipe.sequenced_assembly": "Montagem sequenciada", + "create.recipe.assembly.next": "Proximo: %1$s", + "create.recipe.assembly.step": "Passo %1$s:", + "create.recipe.assembly.progress": "Progresso: %1$s/%2$s", + "create.recipe.assembly.pressing": "Processa na prensa", + "create.recipe.assembly.spout_filling_fluid": "Despejar %1$s", + "create.recipe.assembly.deploying_item": "Implantar %1$s", + "create.recipe.assembly.cutting": "Cortado com serra", + "create.recipe.assembly.repeat": "Repetir sequencia %1$s vezes", + "create.recipe.assembly.junk": "Recuperação aleatório", + "create.recipe.processing.chance": "%1$s%% Chance", + "create.recipe.deploying.not_consumed": "Não consumido", + "create.recipe.heat_requirement.none": "Aquecimento não requerido", + "create.recipe.heat_requirement.heated": "Aquecido", + "create.recipe.heat_requirement.superheated": "Super-aquecido", "create.generic.range": "Ãrea", "create.generic.radius": "Raio", @@ -1117,7 +1117,7 @@ "create.schematicannon.status.finished": "Concluído", "create.schematicannon.status.paused": "Pausado", "create.schematicannon.status.stopped": "Parada", - "create.schematicannon.status.noGunpowder": "UNLOCALIZED: Sem pólvora", + "create.schematicannon.status.noGunpowder": "Sem pólvora", "create.schematicannon.status.targetNotLoaded": "Bloco não carregado", "create.schematicannon.status.targetOutsideRange": "Alvo está muito Longe", "create.schematicannon.status.searching": "Procurando", diff --git a/src/generated/resources/assets/create/lang/unfinished/pt_pt.json b/src/generated/resources/assets/create/lang/unfinished/pt_pt.json index e18538a93..c039f38f5 100644 --- a/src/generated/resources/assets/create/lang/unfinished/pt_pt.json +++ b/src/generated/resources/assets/create/lang/unfinished/pt_pt.json @@ -657,7 +657,7 @@ "advancement.create.belt_funnel": "UNLOCALIZED: Funnels' Flappy Danglers", "advancement.create.belt_funnel.desc": "Coloque um funil lateral em cima de uma esteira ou depósito para criar um tipo especial.", "advancement.create.belt_funnel_kiss": "UNLOCALIZED: The Parrots and the Flaps", - "advancement.create.belt_funnel_kiss.desc": "UNLOCALIZED: Make two belt mounted funnels kiss.", + "advancement.create.belt_funnel_kiss.desc": "UNLOCALIZED: Make two Belt-mounted Funnels kiss.", "advancement.create.fan": "Dobrador de ar mecânico", "advancement.create.fan.desc": "Pegue uma carona no fluxo de ar provido pelo ventilador revestido.", "advancement.create.fan_lava": "Aquecedor de espaço geotermal", diff --git a/src/generated/resources/assets/create/lang/unfinished/zh_cn.json b/src/generated/resources/assets/create/lang/unfinished/zh_cn.json index fb7c9b73f..158b6193d 100644 --- a/src/generated/resources/assets/create/lang/unfinished/zh_cn.json +++ b/src/generated/resources/assets/create/lang/unfinished/zh_cn.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 4", + "_": "Missing Localizations: 0", "_": "->------------------------] Game Elements [------------------------<-", @@ -233,8 +233,8 @@ "block.create.hand_crank": "手摇曲柄", "block.create.haunted_bell": "森魂钟", "block.create.honey": "蜂蜜", - "block.create.horizontal_framed_glass": "竖直边框玻璃", - "block.create.horizontal_framed_glass_pane": "竖直边框玻璃æ¿", + "block.create.horizontal_framed_glass": "水平边框玻璃", + "block.create.horizontal_framed_glass_pane": "水平边框玻璃æ¿", "block.create.hose_pulley": "软管滑轮", "block.create.item_drain": "分液池", "block.create.item_vault": "物å“ä¿é™©åº“", @@ -821,8 +821,8 @@ "create.recipe.fan_washing.fan": "在水åŽæ”¾ç½®é¼“风机", "create.recipe.fan_smoking": "批é‡çƒŸç†", "create.recipe.fan_smoking.fan": "在ç«ç„°åŽæ”¾ç½®é¼“风机", - "create.recipe.fan_haunting": "UNLOCALIZED: Bulk Haunting", - "create.recipe.fan_haunting.fan": "UNLOCALIZED: Fan behind Soul Fire", + "create.recipe.fan_haunting": "批é‡ç¼ é­‚", + "create.recipe.fan_haunting.fan": "在çµé­‚ç«åŽæ”¾ç½®é¼“风机", "create.recipe.fan_blasting": "批é‡ç†”炼", "create.recipe.fan_blasting.fan": "在熔岩åŽæ”¾ç½®é¼“风机", "create.recipe.pressing": "金属压片", @@ -1165,8 +1165,8 @@ "create.item_attributes.furnace_fuel.inverted": "ä¸å¯ä½œä¸ºç‡ƒæ–™", "create.item_attributes.washable": "å¯è¢«æ´—涤", "create.item_attributes.washable.inverted": "ä¸å¯è¢«æ´—涤", - "create.item_attributes.hauntable": "UNLOCALIZED: can be Haunted", - "create.item_attributes.hauntable.inverted": "UNLOCALIZED: cannot be Haunted", + "create.item_attributes.hauntable": "å¯è¢«ç¼ é­‚", + "create.item_attributes.hauntable.inverted": "ä¸å¯è¢«ç¼ é­‚", "create.item_attributes.crushable": "å¯è¢«ç²‰ç¢Ž", "create.item_attributes.crushable.inverted": "ä¸å¯è¢«ç²‰ç¢Ž", "create.item_attributes.smeltable": "å¯è¢«ç†”炉烧制", diff --git a/src/generated/resources/data/create/advancements/aesthetics.json b/src/generated/resources/data/create/advancements/aesthetics.json index d723cbe38..59a86f429 100644 --- a/src/generated/resources/data/create/advancements/aesthetics.json +++ b/src/generated/resources/data/create/advancements/aesthetics.json @@ -28,8 +28,8 @@ "trigger": "create:bracket_apply", "conditions": { "accepted_entries": [ - "create:cogwheel", - "create:large_cogwheel" + "create:large_cogwheel", + "create:cogwheel" ] } }, From fa4a0e726112c34a9d311ec03992b37fde94bbd7 Mon Sep 17 00:00:00 2001 From: PepperCode1 <44146161+PepperCode1@users.noreply.github.com> Date: Sat, 5 Mar 2022 01:45:39 -0800 Subject: [PATCH 19/29] Limiting the infinite - Add new config and tags for better control over infinite draining behaviour - Pipes spilling water will now extinguish entities and fires; pipes spilling lava will now set entities on fire - Fix some bugs and inconvenient behavior with the config menus - Fix fluids destroying crushing wheel controllers - Fix crushing wheel controller using output direction instead of input direction at times - Rename blaze burner fuel tags - Improve GhostBlockRenderer - Organize imports - Update Forge --- gradle.properties | 2 +- src/generated/resources/.cache/cache | 9 +- .../data/create/advancements/aesthetics.json | 4 +- .../blocks/crushing_wheel_controller.json | 20 --- .../create/tags/fluids/bottomless/allow.json | 7 + .../bottomless/deny.json} | 0 .../tags/items/blaze_burner_fuel/regular.json | 4 + .../special.json} | 0 .../java/com/simibubi/create/AllBlocks.java | 7 +- .../java/com/simibubi/create/AllItems.java | 2 +- .../java/com/simibubi/create/AllTags.java | 16 ++- .../simibubi/create/compat/jei/CreateJEI.java | 58 ++++++-- .../category/MechanicalCraftingCategory.java | 1 - .../CrushingWheelControllerTileEntity.java | 10 +- .../mixer/MechanicalMixerTileEntity.java | 1 - .../glue/SuperGlueHandler.java | 2 +- .../contraptions/fluids/OpenEndedPipe.java | 75 +++++++++-- .../actors/FluidManipulationBehaviour.java | 32 ++++- .../particle/AirFlowParticle.java | 10 +- .../burner/BlazeBurnerTileEntity.java | 4 +- .../curiosities/tools/BlueprintItem.java | 1 - .../block/SchematicannonTileEntity.java | 4 +- .../create/foundation/config/CFluids.java | 15 ++- .../config/ui/BaseConfigScreen.java | 27 ++-- .../config/ui/ConfigModListScreen.java | 17 ++- .../foundation/config/ui/ConfigScreen.java | 6 +- .../config/ui/OpenCreateMenuButton.java | 4 +- .../config/ui/SubMenuConfigScreen.java | 30 ++--- .../foundation/data/SharedProperties.java | 5 +- .../MechanicalCraftingRecipeBuilder.java | 2 - .../foundation/gui/AbstractSimiScreen.java | 30 ++--- .../foundation/gui/ConfirmationScreen.java | 26 ++-- .../foundation/gui/CreateMainMenuScreen.java | 40 +++--- .../simibubi/create/foundation/gui/Theme.java | 64 ++++----- .../belt/DirectBeltInputBehaviour.java | 2 +- .../utility/ghost/GhostBlockRenderer.java | 124 +++++------------- 36 files changed, 353 insertions(+), 308 deletions(-) delete mode 100644 src/generated/resources/data/create/loot_tables/blocks/crushing_wheel_controller.json create mode 100644 src/generated/resources/data/create/tags/fluids/bottomless/allow.json rename src/generated/resources/data/create/tags/{items/blaze_burner_regular_fuel.json => fluids/bottomless/deny.json} (100%) create mode 100644 src/generated/resources/data/create/tags/items/blaze_burner_fuel/regular.json rename src/generated/resources/data/create/tags/items/{blaze_burner_special_fuel.json => blaze_burner_fuel/special.json} (100%) diff --git a/gradle.properties b/gradle.properties index 0e9349580..e6e763315 100644 --- a/gradle.properties +++ b/gradle.properties @@ -6,7 +6,7 @@ org.gradle.daemon = false # mod version info mod_version = 0.4d minecraft_version = 1.18.1 -forge_version = 39.0.59 +forge_version = 39.1.0 # build dependency versions forgegradle_version = 5.1.+ diff --git a/src/generated/resources/.cache/cache b/src/generated/resources/.cache/cache index 72d0b3679..7335af5d9 100644 --- a/src/generated/resources/.cache/cache +++ b/src/generated/resources/.cache/cache @@ -2126,7 +2126,7 @@ d080b1b25e5bc8baf5aee68691b08c7f12ece3b0 assets/create/models/item/windmill_bear a80fb25a0b655e76be986b5b49fcb0f03461a1ab assets/create/models/item/zinc_nugget.json b1689617190c05ef34bd18456b0c7ae09bb3210f assets/create/models/item/zinc_ore.json 5049f72c327a88f175f6f9425909e098fc711100 assets/create/sounds.json -5d0cc4c0255dc241e61c173b31ddca70c88d08e4 data/create/advancements/aesthetics.json +0f1b4b980afba9bf2caf583b88e261bba8b10313 data/create/advancements/aesthetics.json 613e64b44bed959da899fdd54c1cacb227fb33f2 data/create/advancements/andesite_alloy.json 81885c6bfb85792c88aaa7c9b70f58832945d31f data/create/advancements/andesite_casing.json 83c046bd200623933545c9e4326f782fb02c87fa data/create/advancements/arm_blaze_burner.json @@ -3339,7 +3339,6 @@ c633372228a13023f9dde2cd3478a7dc90affcea data/create/loot_tables/blocks/crimsite 62800d2baf79e7a45b246896f2679fd6f5082efe data/create/loot_tables/blocks/crimson_window.json 572dfdf4daaaf2c97882f3b2a856737365bf5873 data/create/loot_tables/blocks/crimson_window_pane.json 3503b55a82b94ddaeebbc510eece2cc313c33e43 data/create/loot_tables/blocks/crushing_wheel.json -5c1df8443043b3fe3b665dba348e2ff188bcbe31 data/create/loot_tables/blocks/crushing_wheel_controller.json 252a6476bd2dd730dd97afbf2c69d9627f0d1672 data/create/loot_tables/blocks/cuckoo_clock.json 838c008dc2881fbb4136773b3c84c3d988483f73 data/create/loot_tables/blocks/cut_andesite.json accd5aecce569330b1821d12f031a68259a42f27 data/create/loot_tables/blocks/cut_andesite_brick_slab.json @@ -5194,8 +5193,10 @@ d063e12c9ef75f39518c6d129ea35d833464d547 data/create/tags/blocks/toolboxes.json eac71740fb12bdb38b5dfaa2268613d7ba82b809 data/create/tags/blocks/windmill_sails.json 74700d556ca80c7a1db5fd4efb09c3ddb26cad66 data/create/tags/blocks/windowable.json 893a01e6004d6d8272bd1658e98da88bb572ee57 data/create/tags/blocks/wrench_pickup.json -74700d556ca80c7a1db5fd4efb09c3ddb26cad66 data/create/tags/items/blaze_burner_regular_fuel.json -97061ef67cac1fafd869493d06115b968bcb99bf data/create/tags/items/blaze_burner_special_fuel.json +a8bdc387cfa6296ebcc4af14323e2ddb632234dc data/create/tags/fluids/bottomless/allow.json +74700d556ca80c7a1db5fd4efb09c3ddb26cad66 data/create/tags/fluids/bottomless/deny.json +74700d556ca80c7a1db5fd4efb09c3ddb26cad66 data/create/tags/items/blaze_burner_fuel/regular.json +97061ef67cac1fafd869493d06115b968bcb99bf data/create/tags/items/blaze_burner_fuel/special.json 5212172aee2239136c94f9868ad39ec2e17cf1c6 data/create/tags/items/create_ingots.json 4480f211f4a37bfee193eba945bc9f5a8d2c6e34 data/create/tags/items/crushed_ores.json bce28787b0271382842823d04a977912a88b01c2 data/create/tags/items/sandpaper.json diff --git a/src/generated/resources/data/create/advancements/aesthetics.json b/src/generated/resources/data/create/advancements/aesthetics.json index 59a86f429..d723cbe38 100644 --- a/src/generated/resources/data/create/advancements/aesthetics.json +++ b/src/generated/resources/data/create/advancements/aesthetics.json @@ -28,8 +28,8 @@ "trigger": "create:bracket_apply", "conditions": { "accepted_entries": [ - "create:large_cogwheel", - "create:cogwheel" + "create:cogwheel", + "create:large_cogwheel" ] } }, diff --git a/src/generated/resources/data/create/loot_tables/blocks/crushing_wheel_controller.json b/src/generated/resources/data/create/loot_tables/blocks/crushing_wheel_controller.json deleted file mode 100644 index 3da3a59b4..000000000 --- a/src/generated/resources/data/create/loot_tables/blocks/crushing_wheel_controller.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1.0, - "bonus_rolls": 0.0, - "entries": [ - { - "type": "minecraft:item", - "name": "minecraft:air" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ] -} \ No newline at end of file diff --git a/src/generated/resources/data/create/tags/fluids/bottomless/allow.json b/src/generated/resources/data/create/tags/fluids/bottomless/allow.json new file mode 100644 index 000000000..8c09104dc --- /dev/null +++ b/src/generated/resources/data/create/tags/fluids/bottomless/allow.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "minecraft:water", + "minecraft:lava" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/tags/items/blaze_burner_regular_fuel.json b/src/generated/resources/data/create/tags/fluids/bottomless/deny.json similarity index 100% rename from src/generated/resources/data/create/tags/items/blaze_burner_regular_fuel.json rename to src/generated/resources/data/create/tags/fluids/bottomless/deny.json diff --git a/src/generated/resources/data/create/tags/items/blaze_burner_fuel/regular.json b/src/generated/resources/data/create/tags/items/blaze_burner_fuel/regular.json new file mode 100644 index 000000000..5e8aecc98 --- /dev/null +++ b/src/generated/resources/data/create/tags/items/blaze_burner_fuel/regular.json @@ -0,0 +1,4 @@ +{ + "replace": false, + "values": [] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/tags/items/blaze_burner_special_fuel.json b/src/generated/resources/data/create/tags/items/blaze_burner_fuel/special.json similarity index 100% rename from src/generated/resources/data/create/tags/items/blaze_burner_special_fuel.json rename to src/generated/resources/data/create/tags/items/blaze_burner_fuel/special.json diff --git a/src/main/java/com/simibubi/create/AllBlocks.java b/src/main/java/com/simibubi/create/AllBlocks.java index 60f0bb6fc..f17891f3d 100644 --- a/src/main/java/com/simibubi/create/AllBlocks.java +++ b/src/main/java/com/simibubi/create/AllBlocks.java @@ -399,7 +399,7 @@ public class AllBlocks { .register(); public static final BlockEntry BELT = REGISTRATE.block("belt", BeltBlock::new) - .initialProperties(SharedProperties.beltMaterial, MaterialColor.COLOR_GRAY) + .initialProperties(SharedProperties.BELT_MATERIAL, MaterialColor.COLOR_GRAY) .properties(p -> p.sound(SoundType.WOOL)) .properties(p -> p.strength(0.8F)) .transform(axeOrPickaxe()) @@ -506,7 +506,8 @@ public class AllBlocks { public static final BlockEntry CRUSHING_WHEEL_CONTROLLER = REGISTRATE.block("crushing_wheel_controller", CrushingWheelControllerBlock::new) - .initialProperties(() -> Blocks.AIR) + .initialProperties(SharedProperties.CRUSHING_WHEEL_CONTROLLER_MATERIAL) + .properties(p -> p.noOcclusion().noDrops().air()) .blockstate((c, p) -> p.getVariantBuilder(c.get()) .forAllStatesExcept(state -> ConfiguredModel.builder() .modelFile(p.models() @@ -909,7 +910,7 @@ public class AllBlocks { .register(); public static final BlockEntry ROPE = REGISTRATE.block("rope", PulleyBlock.RopeBlock::new) - .initialProperties(SharedProperties.beltMaterial, MaterialColor.COLOR_BROWN) + .initialProperties(SharedProperties.BELT_MATERIAL, MaterialColor.COLOR_BROWN) .tag(AllBlockTags.BRITTLE.tag) .properties(p -> p.sound(SoundType.WOOL)) .blockstate((c, p) -> p.simpleBlock(c.get(), p.models() diff --git a/src/main/java/com/simibubi/create/AllItems.java b/src/main/java/com/simibubi/create/AllItems.java index cbdb13591..15f812870 100644 --- a/src/main/java/com/simibubi/create/AllItems.java +++ b/src/main/java/com/simibubi/create/AllItems.java @@ -100,7 +100,7 @@ public class AllItems { .register(); public static final ItemEntry BLAZE_CAKE = REGISTRATE.item("blaze_cake", CombustibleItem::new) - .tag(AllItemTags.BLAZE_BURNER_SPECIAL_FUEL.tag, AllItemTags.UPRIGHT_ON_BELT.tag) + .tag(AllItemTags.BLAZE_BURNER_FUEL_SPECIAL.tag, AllItemTags.UPRIGHT_ON_BELT.tag) .onRegister(i -> i.setBurnTime(6400)) .register(); diff --git a/src/main/java/com/simibubi/create/AllTags.java b/src/main/java/com/simibubi/create/AllTags.java index 27e7a6457..52082a021 100644 --- a/src/main/java/com/simibubi/create/AllTags.java +++ b/src/main/java/com/simibubi/create/AllTags.java @@ -26,6 +26,7 @@ import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.material.Fluid; +import net.minecraft.world.level.material.Fluids; import net.minecraftforge.common.Tags; public class AllTags { @@ -81,7 +82,9 @@ public class AllTags { public enum NameSpace { - MOD(Create.ID, false, true), FORGE("forge"), TIC("tconstruct") + MOD(Create.ID, false, true), + FORGE("forge"), + TIC("tconstruct") ; @@ -183,8 +186,8 @@ public class AllTags { public enum AllItemTags { - BLAZE_BURNER_REGULAR_FUEL, - BLAZE_BURNER_SPECIAL_FUEL, + BLAZE_BURNER_FUEL_REGULAR(MOD, "blaze_burner_fuel/regular"), + BLAZE_BURNER_FUEL_SPECIAL(MOD, "blaze_burner_fuel/special"), CREATE_INGOTS, CRUSHED_ORES, SANDPAPER, @@ -255,7 +258,8 @@ public class AllTags { public enum AllFluidTags { - NO_INFINITE_DRAINING(MOD, true, false), + BOTTOMLESS_ALLOW(MOD, "bottomless/allow"), + BOTTOMLESS_DENY(MOD, "bottomless/deny"), HONEY(FORGE) @@ -314,12 +318,10 @@ public class AllTags { .addTag(child)); } - private static void loadClass() {} - } public static void register() { - AllFluidTags.loadClass(); + AllFluidTags.BOTTOMLESS_ALLOW.add(Fluids.WATER, Fluids.LAVA); AllItemTags.CREATE_INGOTS.includeIn(AllItemTags.BEACON_PAYMENT); AllItemTags.CREATE_INGOTS.includeIn(Tags.Items.INGOTS); diff --git a/src/main/java/com/simibubi/create/compat/jei/CreateJEI.java b/src/main/java/com/simibubi/create/compat/jei/CreateJEI.java index fb7aedf05..59f06d730 100644 --- a/src/main/java/com/simibubi/create/compat/jei/CreateJEI.java +++ b/src/main/java/com/simibubi/create/compat/jei/CreateJEI.java @@ -1,9 +1,42 @@ package com.simibubi.create.compat.jei; +import java.util.ArrayList; +import java.util.List; +import java.util.function.Consumer; +import java.util.function.Function; +import java.util.function.Predicate; +import java.util.function.Supplier; +import java.util.stream.Collectors; + +import javax.annotation.Nonnull; + import com.google.common.base.Predicates; -import com.simibubi.create.*; -import com.simibubi.create.compat.jei.category.*; +import com.simibubi.create.AllBlocks; +import com.simibubi.create.AllFluids; +import com.simibubi.create.AllItems; +import com.simibubi.create.AllRecipeTypes; +import com.simibubi.create.Create; +import com.simibubi.create.compat.jei.category.BlockCuttingCategory; import com.simibubi.create.compat.jei.category.BlockCuttingCategory.CondensedBlockCuttingRecipe; +import com.simibubi.create.compat.jei.category.CreateRecipeCategory; +import com.simibubi.create.compat.jei.category.CrushingCategory; +import com.simibubi.create.compat.jei.category.DeployingCategory; +import com.simibubi.create.compat.jei.category.FanBlastingCategory; +import com.simibubi.create.compat.jei.category.FanHauntingCategory; +import com.simibubi.create.compat.jei.category.FanSmokingCategory; +import com.simibubi.create.compat.jei.category.FanWashingCategory; +import com.simibubi.create.compat.jei.category.ItemDrainCategory; +import com.simibubi.create.compat.jei.category.MechanicalCraftingCategory; +import com.simibubi.create.compat.jei.category.MillingCategory; +import com.simibubi.create.compat.jei.category.MixingCategory; +import com.simibubi.create.compat.jei.category.MysteriousItemConversionCategory; +import com.simibubi.create.compat.jei.category.PackingCategory; +import com.simibubi.create.compat.jei.category.PolishingCategory; +import com.simibubi.create.compat.jei.category.PressingCategory; +import com.simibubi.create.compat.jei.category.ProcessingViaFanCategory; +import com.simibubi.create.compat.jei.category.SawingCategory; +import com.simibubi.create.compat.jei.category.SequencedAssemblyCategory; +import com.simibubi.create.compat.jei.category.SpoutCategory; import com.simibubi.create.content.contraptions.components.crafter.MechanicalCraftingRecipe; import com.simibubi.create.content.contraptions.components.deployer.DeployerApplicationRecipe; import com.simibubi.create.content.contraptions.components.press.MechanicalPressTileEntity; @@ -23,27 +56,24 @@ import com.simibubi.create.foundation.utility.recipe.IRecipeTypeInfo; import mezz.jei.api.IModPlugin; import mezz.jei.api.JeiPlugin; import mezz.jei.api.constants.VanillaRecipeCategoryUid; -import mezz.jei.api.registration.*; +import mezz.jei.api.registration.IGuiHandlerRegistration; +import mezz.jei.api.registration.IRecipeCatalystRegistration; +import mezz.jei.api.registration.IRecipeCategoryRegistration; +import mezz.jei.api.registration.IRecipeRegistration; +import mezz.jei.api.registration.IRecipeTransferRegistration; +import mezz.jei.api.registration.ISubtypeRegistration; import mezz.jei.api.runtime.IIngredientManager; import net.minecraft.client.Minecraft; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; -import net.minecraft.world.item.crafting.*; +import net.minecraft.world.item.crafting.CraftingRecipe; +import net.minecraft.world.item.crafting.Recipe; +import net.minecraft.world.item.crafting.RecipeType; import net.minecraft.world.level.ItemLike; import net.minecraftforge.common.crafting.IShapedRecipe; import net.minecraftforge.fml.ModList; -import javax.annotation.Nonnull; - -import java.util.ArrayList; -import java.util.List; -import java.util.function.Consumer; -import java.util.function.Function; -import java.util.function.Predicate; -import java.util.function.Supplier; -import java.util.stream.Collectors; - @JeiPlugin @SuppressWarnings("unused") public class CreateJEI implements IModPlugin { diff --git a/src/main/java/com/simibubi/create/compat/jei/category/MechanicalCraftingCategory.java b/src/main/java/com/simibubi/create/compat/jei/category/MechanicalCraftingCategory.java index 9aafdb81b..f2c362120 100644 --- a/src/main/java/com/simibubi/create/compat/jei/category/MechanicalCraftingCategory.java +++ b/src/main/java/com/simibubi/create/compat/jei/category/MechanicalCraftingCategory.java @@ -27,7 +27,6 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.TooltipFlag; import net.minecraft.world.item.crafting.CraftingRecipe; import net.minecraft.world.item.crafting.Ingredient; -import net.minecraft.world.item.crafting.ShapedRecipe; import net.minecraftforge.common.crafting.IShapedRecipe; public class MechanicalCraftingCategory extends CreateRecipeCategory { diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/crusher/CrushingWheelControllerTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/crusher/CrushingWheelControllerTileEntity.java index ba350f9ba..de30109ed 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/crusher/CrushingWheelControllerTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/crusher/CrushingWheelControllerTileEntity.java @@ -81,7 +81,7 @@ public class CrushingWheelControllerTileEntity extends SmartTileEntity { if (blockState == null) return false; Direction direction = blockState.getValue(CrushingWheelControllerBlock.FACING); - return direction == Direction.DOWN || direction == side; + return direction == Direction.DOWN || direction.getOpposite() == side; } @Override @@ -144,21 +144,21 @@ public class CrushingWheelControllerTileEntity extends SmartTileEntity { inventory.remainingTime = 0; // Output Items - if (facing.getAxis() - .isHorizontal() || facing == Direction.DOWN) { + if (facing != Direction.UP) { + Direction inputDir = facing.getOpposite(); BlockPos nextPos = worldPosition.offset(facing.getAxis() == Axis.X ? 1f * offset : 0f, (-1f), facing.getAxis() == Axis.Z ? 1f * offset : 0f); DirectBeltInputBehaviour behaviour = TileEntityBehaviour.get(level, nextPos, DirectBeltInputBehaviour.TYPE); if (behaviour != null) { boolean changed = false; - if (!behaviour.canInsertFromSide(facing)) + if (!behaviour.canInsertFromSide(inputDir)) return; for (int slot = 0; slot < inventory.getSlots(); slot++) { ItemStack stack = inventory.getStackInSlot(slot); if (stack.isEmpty()) continue; - ItemStack remainder = behaviour.handleInsertion(stack, facing, false); + ItemStack remainder = behaviour.handleInsertion(stack, inputDir, false); if (remainder.equals(stack, false)) continue; inventory.setStackInSlot(slot, remainder); diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/mixer/MechanicalMixerTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/mixer/MechanicalMixerTileEntity.java index f5da5e418..14aa9da24 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/mixer/MechanicalMixerTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/mixer/MechanicalMixerTileEntity.java @@ -34,7 +34,6 @@ import net.minecraft.world.Container; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.crafting.CraftingRecipe; import net.minecraft.world.item.crafting.Recipe; -import net.minecraft.world.item.crafting.RecipeSerializer; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.phys.AABB; diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/glue/SuperGlueHandler.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/glue/SuperGlueHandler.java index 30e916084..7d062dee7 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/glue/SuperGlueHandler.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/glue/SuperGlueHandler.java @@ -103,7 +103,7 @@ public class SuperGlueHandler { if (!world.isClientSide) { entity.playPlaceSound(); world.addFreshEntity(entity); - AllPackets.channel.send(PacketDistributor.TRACKING_ENTITY_AND_SELF.with(() -> entity), + AllPackets.channel.send(PacketDistributor.TRACKING_ENTITY.with(() -> entity), new GlueEffectPacket(ray.getBlockPos(), face, true)); } itemstack.hurtAndBreak(1, placer, SuperGlueItem::onBroken); diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/OpenEndedPipe.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/OpenEndedPipe.java index 68f9c9e73..25921554b 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/OpenEndedPipe.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/OpenEndedPipe.java @@ -20,14 +20,18 @@ import net.minecraft.core.Direction; import net.minecraft.nbt.CompoundTag; import net.minecraft.sounds.SoundEvents; import net.minecraft.sounds.SoundSource; +import net.minecraft.tags.BlockTags; import net.minecraft.tags.FluidTags; import net.minecraft.world.effect.MobEffect; import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.item.alchemy.PotionUtils; import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.AbstractCandleBlock; +import net.minecraft.world.level.block.CampfireBlock; import net.minecraft.world.level.block.LiquidBlock; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.material.FluidState; @@ -46,6 +50,8 @@ public class OpenEndedPipe extends FlowSource { static { registerEffectHandler(new PotionEffectHandler()); registerEffectHandler(new MilkEffectHandler()); + registerEffectHandler(new WaterEffectHandler()); + registerEffectHandler(new LavaEffectHandler()); } private Level world; @@ -348,15 +354,15 @@ public class OpenEndedPipe extends FlowSource { if (pipe.cachedEffects.isEmpty()) return; - List list = + List entities = pipe.getWorld().getEntitiesOfClass(LivingEntity.class, pipe.getAOE(), LivingEntity::isAffectedByPotions); - for (LivingEntity livingentity : list) { - for (MobEffectInstance effectinstance : pipe.cachedEffects) { - MobEffect effect = effectinstance.getEffect(); + for (LivingEntity entity : entities) { + for (MobEffectInstance effectInstance : pipe.cachedEffects) { + MobEffect effect = effectInstance.getEffect(); if (effect.isInstantenous()) { - effect.applyInstantenousEffect(null, null, livingentity, effectinstance.getAmplifier(), 0.5D); + effect.applyInstantenousEffect(null, null, entity, effectInstance.getAmplifier(), 0.5D); } else { - livingentity.addEffect(new MobEffectInstance(effectinstance)); + entity.addEffect(new MobEffectInstance(effectInstance)); } } } @@ -366,7 +372,7 @@ public class OpenEndedPipe extends FlowSource { public static class MilkEffectHandler implements IEffectHandler { @Override public boolean canApplyEffects(OpenEndedPipe pipe, FluidStack fluid) { - return Tags.Fluids.MILK.contains(fluid.getFluid()); + return fluid.getFluid().is(Tags.Fluids.MILK); } @Override @@ -374,11 +380,60 @@ public class OpenEndedPipe extends FlowSource { Level world = pipe.getWorld(); if (world.getGameTime() % 5 != 0) return; - List list = + List entities = world.getEntitiesOfClass(LivingEntity.class, pipe.getAOE(), LivingEntity::isAffectedByPotions); ItemStack curativeItem = new ItemStack(Items.MILK_BUCKET); - for (LivingEntity livingentity : list) - livingentity.curePotionEffects(curativeItem); + for (LivingEntity entity : entities) + entity.curePotionEffects(curativeItem); + } + } + + public static class WaterEffectHandler implements IEffectHandler { + @Override + public boolean canApplyEffects(OpenEndedPipe pipe, FluidStack fluid) { + return fluid.getFluid().is(FluidTags.WATER); + } + + @Override + public void applyEffects(OpenEndedPipe pipe, FluidStack fluid) { + Level world = pipe.getWorld(); + if (world.getGameTime() % 5 != 0) + return; + List entities = world.getEntities((Entity) null, pipe.getAOE(), Entity::isOnFire); + for (Entity entity : entities) + entity.clearFire(); + BlockPos.betweenClosedStream(pipe.getAOE()).forEach(pos -> dowseFire(world, pos)); + } + + // Adapted from ThrownPotion + private static void dowseFire(Level level, BlockPos pos) { + BlockState state = level.getBlockState(pos); + if (state.is(BlockTags.FIRE)) { + level.removeBlock(pos, false); + } else if (AbstractCandleBlock.isLit(state)) { + AbstractCandleBlock.extinguish(null, state, level, pos); + } else if (CampfireBlock.isLitCampfire(state)) { + level.levelEvent(null, 1009, pos, 0); + CampfireBlock.dowse(null, level, pos, state); + level.setBlockAndUpdate(pos, state.setValue(CampfireBlock.LIT, false)); + } + } + } + + public static class LavaEffectHandler implements IEffectHandler { + @Override + public boolean canApplyEffects(OpenEndedPipe pipe, FluidStack fluid) { + return fluid.getFluid().is(FluidTags.LAVA); + } + + @Override + public void applyEffects(OpenEndedPipe pipe, FluidStack fluid) { + Level world = pipe.getWorld(); + if (world.getGameTime() % 5 != 0) + return; + List entities = world.getEntities((Entity) null, pipe.getAOE(), entity -> !entity.fireImmune()); + for (Entity entity : entities) + entity.setSecondsOnFire(3); } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/FluidManipulationBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/FluidManipulationBehaviour.java index dcad19b59..ba3267b22 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/FluidManipulationBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/FluidManipulationBehaviour.java @@ -5,8 +5,9 @@ import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.function.BiConsumer; +import java.util.function.Predicate; -import com.simibubi.create.AllTags; +import com.simibubi.create.AllTags.AllFluidTags; import com.simibubi.create.foundation.config.AllConfigs; import com.simibubi.create.foundation.fluid.FluidHelper; import com.simibubi.create.foundation.networking.AllPackets; @@ -212,7 +213,7 @@ public abstract class FluidManipulationBehaviour extends TileEntityBehaviour { } protected boolean canDrainInfinitely(Fluid fluid) { - return maxBlocks() != -1 && !AllTags.AllFluidTags.NO_INFINITE_DRAINING.matches(fluid); + return maxBlocks() != -1 && AllConfigs.SERVER.fluids.bottomlessFluidMode.get().test(fluid); } @Override @@ -238,4 +239,31 @@ public abstract class FluidManipulationBehaviour extends TileEntityBehaviour { super.read(nbt, clientPacket); } + public enum BottomlessFluidMode implements Predicate { + ALLOW_ALL { + @Override + public boolean test(Fluid fluid) { + return true; + } + }, + DENY_ALL { + @Override + public boolean test(Fluid fluid) { + return false; + } + }, + ALLOW_BY_TAG { + @Override + public boolean test(Fluid fluid) { + return AllFluidTags.BOTTOMLESS_ALLOW.matches(fluid); + } + }, + DENY_BY_TAG { + @Override + public boolean test(Fluid fluid) { + return !AllFluidTags.BOTTOMLESS_DENY.matches(fluid); + } + }; + } + } diff --git a/src/main/java/com/simibubi/create/content/contraptions/particle/AirFlowParticle.java b/src/main/java/com/simibubi/create/content/contraptions/particle/AirFlowParticle.java index 25955db5f..e529c4126 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/particle/AirFlowParticle.java +++ b/src/main/java/com/simibubi/create/content/contraptions/particle/AirFlowParticle.java @@ -1,5 +1,7 @@ package com.simibubi.create.content.contraptions.particle; +import javax.annotation.Nonnull; + import com.simibubi.create.Create; import com.simibubi.create.content.contraptions.components.fan.IAirCurrentSource; import com.simibubi.create.content.contraptions.processing.InWorldProcessing; @@ -7,7 +9,11 @@ import com.simibubi.create.foundation.utility.Color; import com.simibubi.create.foundation.utility.VecHelper; import net.minecraft.client.multiplayer.ClientLevel; -import net.minecraft.client.particle.*; +import net.minecraft.client.particle.Particle; +import net.minecraft.client.particle.ParticleProvider; +import net.minecraft.client.particle.ParticleRenderType; +import net.minecraft.client.particle.SimpleAnimatedParticle; +import net.minecraft.client.particle.SpriteSet; import net.minecraft.client.renderer.LevelRenderer; import net.minecraft.core.BlockPos; import net.minecraft.core.particles.BlockParticleOption; @@ -17,8 +23,6 @@ import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.phys.Vec3; -import javax.annotation.Nonnull; - public class AirFlowParticle extends SimpleAnimatedParticle { private final IAirCurrentSource source; diff --git a/src/main/java/com/simibubi/create/content/contraptions/processing/burner/BlazeBurnerTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/processing/burner/BlazeBurnerTileEntity.java index f1e861dae..655694b0d 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/processing/burner/BlazeBurnerTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/processing/burner/BlazeBurnerTileEntity.java @@ -170,14 +170,14 @@ public class BlazeBurnerTileEntity extends SmartTileEntity { FuelType newFuel = FuelType.NONE; int newBurnTime; - if (AllItemTags.BLAZE_BURNER_SPECIAL_FUEL.matches(itemStack)) { + if (AllItemTags.BLAZE_BURNER_FUEL_SPECIAL.matches(itemStack)) { newBurnTime = 1000; newFuel = FuelType.SPECIAL; } else { newBurnTime = ForgeHooks.getBurnTime(itemStack, null); if (newBurnTime > 0) newFuel = FuelType.NORMAL; - else if (AllItemTags.BLAZE_BURNER_REGULAR_FUEL.matches(itemStack)) { + else if (AllItemTags.BLAZE_BURNER_FUEL_REGULAR.matches(itemStack)) { newBurnTime = 1600; // Same as coal newFuel = FuelType.NORMAL; } diff --git a/src/main/java/com/simibubi/create/content/curiosities/tools/BlueprintItem.java b/src/main/java/com/simibubi/create/content/curiosities/tools/BlueprintItem.java index f4d9d4019..e16af7835 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/tools/BlueprintItem.java +++ b/src/main/java/com/simibubi/create/content/curiosities/tools/BlueprintItem.java @@ -26,7 +26,6 @@ import net.minecraft.world.item.crafting.Ingredient.ItemValue; import net.minecraft.world.item.crafting.Ingredient.TagValue; import net.minecraft.world.item.crafting.Ingredient.Value; import net.minecraft.world.item.crafting.Recipe; -import net.minecraft.world.item.crafting.ShapedRecipe; import net.minecraft.world.level.Level; import net.minecraftforge.common.crafting.IShapedRecipe; import net.minecraftforge.common.crafting.MultiItemValue; diff --git a/src/main/java/com/simibubi/create/content/schematics/block/SchematicannonTileEntity.java b/src/main/java/com/simibubi/create/content/schematics/block/SchematicannonTileEntity.java index 057ea73dd..3ea34a42d 100644 --- a/src/main/java/com/simibubi/create/content/schematics/block/SchematicannonTileEntity.java +++ b/src/main/java/com/simibubi/create/content/schematics/block/SchematicannonTileEntity.java @@ -593,7 +593,7 @@ public class SchematicannonTileEntity extends SmartTileEntity implements MenuPro } protected boolean shouldIgnoreBlockState(BlockState state, BlockEntity te) { - // Block doesnt have a mapping (Water, lava, etc) + // Block doesn't have a mapping (Water, lava, etc) if (state.getBlock() == Blocks.STRUCTURE_VOID) return true; @@ -603,7 +603,7 @@ public class SchematicannonTileEntity extends SmartTileEntity implements MenuPro if (requirement.isInvalid()) return false; - // Block doesnt need to be placed twice (Doors, beds, double plants) + // Block doesn't need to be placed twice (Doors, beds, double plants) if (state.hasProperty(BlockStateProperties.DOUBLE_BLOCK_HALF) && state.getValue(BlockStateProperties.DOUBLE_BLOCK_HALF) == DoubleBlockHalf.UPPER) return true; diff --git a/src/main/java/com/simibubi/create/foundation/config/CFluids.java b/src/main/java/com/simibubi/create/foundation/config/CFluids.java index 40f98f3b6..7f7d65f61 100644 --- a/src/main/java/com/simibubi/create/foundation/config/CFluids.java +++ b/src/main/java/com/simibubi/create/foundation/config/CFluids.java @@ -1,5 +1,7 @@ package com.simibubi.create.foundation.config; +import com.simibubi.create.content.contraptions.fluids.actors.FluidManipulationBehaviour.BottomlessFluidMode; + public class CFluids extends ConfigBase { public final ConfigInt fluidTankCapacity = i(8, 1, "fluidTankCapacity", Comments.buckets, Comments.fluidTankCapacity); @@ -7,10 +9,12 @@ public class CFluids extends ConfigBase { public final ConfigInt mechanicalPumpRange = i(16, 1, "mechanicalPumpRange", Comments.blocks, Comments.mechanicalPumpRange); + public final ConfigInt hosePulleyRange = i(128, 1, "hosePulleyRange", Comments.blocks, Comments.hosePulleyRange); public final ConfigInt hosePulleyBlockThreshold = i(10000, -1, "hosePulleyBlockThreshold", Comments.blocks, Comments.toDisable, Comments.hosePulleyBlockThreshold); public final ConfigBool fillInfinite = b(false, "fillInfinite", Comments.fillInfinite); - public final ConfigInt hosePulleyRange = i(128, 1, "hosePulleyRange", Comments.blocks, Comments.hosePulleyRange); + public final ConfigEnum bottomlessFluidMode = e(BottomlessFluidMode.ALLOW_BY_TAG, "bottomlessFluidMode", + Comments.bottomlessFluidMode); public ConfigBool placeFluidSourceBlocks = b(true, "placeFluidSourceBlocks", Comments.placeFluidSourceBlocks); @@ -22,17 +26,20 @@ public class CFluids extends ConfigBase { private static class Comments { static String blocks = "[in Blocks]"; static String buckets = "[in Buckets]"; + static String toDisable = "[-1 to disable this behaviour]"; + static String fluidTankCapacity = "The amount of liquid a tank can hold per block."; static String fluidTankMaxHeight = "The maximum height a fluid tank can reach."; static String mechanicalPumpRange = "The maximum distance a mechanical pump can push or pull liquids on either side."; static String hosePulleyRange = "The maximum distance a hose pulley can draw fluid blocks from."; - static String toDisable = "[-1 to disable this behaviour]"; static String hosePulleyBlockThreshold = "The minimum amount of fluid blocks the hose pulley needs to find before deeming it an infinite source."; - static String fillInfinite = "Whether hose pulleys should continue filling up above-threshold sources"; - static String placeFluidSourceBlocks = "Whether open-ended pipes and hose pulleys should be allowed to place fluid sources"; + static String fillInfinite = "Whether hose pulleys should continue filling up above-threshold sources."; + static String bottomlessFluidMode = "Configure which fluids can be drained infinitely."; + + static String placeFluidSourceBlocks = "Whether open-ended pipes and hose pulleys should be allowed to place fluid sources."; } } diff --git a/src/main/java/com/simibubi/create/foundation/config/ui/BaseConfigScreen.java b/src/main/java/com/simibubi/create/foundation/config/ui/BaseConfigScreen.java index c6f77e4ad..cf5fb411f 100644 --- a/src/main/java/com/simibubi/create/foundation/config/ui/BaseConfigScreen.java +++ b/src/main/java/com/simibubi/create/foundation/config/ui/BaseConfigScreen.java @@ -8,6 +8,8 @@ import java.util.function.UnaryOperator; import javax.annotation.Nonnull; import javax.annotation.Nullable; +import org.lwjgl.glfw.GLFW; + import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.Create; import com.simibubi.create.foundation.config.AllConfigs; @@ -144,7 +146,7 @@ public class BaseConfigScreen extends ConfigScreen { super.init(); returnOnClose = true; - TextStencilElement clientText = new TextStencilElement(minecraft.font, new TextComponent(clientTile)).centered(true, true); + TextStencilElement clientText = new TextStencilElement(font, new TextComponent(clientTile)).centered(true, true); addRenderableWidget(clientConfigWidget = new BoxWidget(width / 2 - 100, height / 2 - 15 - 30, 200, 16).showingElement(clientText)); if (clientSpec != null) { @@ -156,7 +158,7 @@ public class BaseConfigScreen extends ConfigScreen { clientText.withElementRenderer(DISABLED_RENDERER); } - TextStencilElement commonText = new TextStencilElement(minecraft.font, new TextComponent(commonTile)).centered(true, true); + TextStencilElement commonText = new TextStencilElement(font, new TextComponent(commonTile)).centered(true, true); addRenderableWidget(commonConfigWidget = new BoxWidget(width / 2 - 100, height / 2 - 15, 200, 16).showingElement(commonText)); if (commonSpec != null) { @@ -168,7 +170,7 @@ public class BaseConfigScreen extends ConfigScreen { commonText.withElementRenderer(DISABLED_RENDERER); } - TextStencilElement serverText = new TextStencilElement(minecraft.font, new TextComponent(serverTile)).centered(true, true); + TextStencilElement serverText = new TextStencilElement(font, new TextComponent(serverTile)).centered(true, true); addRenderableWidget(serverConfigWidget = new BoxWidget(width / 2 - 100, height / 2 - 15 + 30, 200, 16).showingElement(serverText)); if (serverSpec == null) { @@ -189,7 +191,7 @@ public class BaseConfigScreen extends ConfigScreen { serverText.withElementRenderer(BoxWidget.gradientFactory.apply(serverConfigWidget)); } - TextStencilElement titleText = new TextStencilElement(minecraft.font, modID.toUpperCase(Locale.ROOT)) + TextStencilElement titleText = new TextStencilElement(font, modID.toUpperCase(Locale.ROOT)) .centered(true, true) .withElementRenderer((ms, w, h, alpha) -> { UIRenderHelper.angledGradient(ms, 0, 0, h / 2, h, w / 2, Theme.p(Theme.Key.CONFIG_TITLE_A)); @@ -212,24 +214,23 @@ public class BaseConfigScreen extends ConfigScreen { ConfigScreen.modID = this.modID; goBack = new BoxWidget(width / 2 - 134, height / 2, 20, 20).withPadding(2, 2) - .withCallback(this::onClose); + .withCallback(() -> linkTo(parent)); goBack.showingElement(AllIcons.I_CONFIG_BACK.asStencil() .withElementRenderer(BoxWidget.gradientFactory.apply(goBack))); goBack.getToolTip() .add(new TextComponent("Go Back")); addRenderableWidget(goBack); - TextStencilElement othersText = new TextStencilElement(minecraft.font, new TextComponent("Access Configs of other Mods")).centered(true, true); + TextStencilElement othersText = new TextStencilElement(font, new TextComponent("Access Configs of other Mods")).centered(true, true); others = new BoxWidget(width / 2 - 100, height / 2 - 15 + 90, 200, 16).showingElement(othersText); othersText.withElementRenderer(BoxWidget.gradientFactory.apply(others)); others.withCallback(() -> linkTo(new ConfigModListScreen(this))); addRenderableWidget(others); - } @Override protected void renderWindow(PoseStack ms, int mouseX, int mouseY, float partialTicks) { - drawCenteredString(ms, minecraft.font, "Access Configs for Mod:", width / 2, height / 2 - 105, Theme.i(Theme.Key.TEXT_ACCENT_STRONG)); + drawCenteredString(ms, font, "Access Configs for Mod:", width / 2, height / 2 - 105, Theme.i(Theme.Key.TEXT_ACCENT_STRONG)); } private void linkTo(Screen screen) { @@ -238,9 +239,13 @@ public class BaseConfigScreen extends ConfigScreen { } @Override - public void onClose() { - super.onClose(); - ScreenOpener.open(parent); + public boolean keyPressed(int keyCode, int scanCode, int modifiers) { + if (super.keyPressed(keyCode, scanCode, modifiers)) + return true; + if (keyCode == GLFW.GLFW_KEY_BACKSPACE) { + linkTo(parent); + } + return false; } } diff --git a/src/main/java/com/simibubi/create/foundation/config/ui/ConfigModListScreen.java b/src/main/java/com/simibubi/create/foundation/config/ui/ConfigModListScreen.java index fc9df4af3..51231e588 100644 --- a/src/main/java/com/simibubi/create/foundation/config/ui/ConfigModListScreen.java +++ b/src/main/java/com/simibubi/create/foundation/config/ui/ConfigModListScreen.java @@ -4,6 +4,8 @@ import java.util.ArrayList; import java.util.List; import java.util.Locale; +import org.lwjgl.glfw.GLFW; + import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.foundation.gui.AllIcons; import com.simibubi.create.foundation.gui.ScreenOpener; @@ -52,7 +54,7 @@ public class ConfigModListScreen extends ConfigScreen { list.children().addAll(allEntries); goBack = new BoxWidget(width / 2 - listWidth / 2 - 30, height / 2 + 65, 20, 20).withPadding(2, 2) - .withCallback(this::onClose); + .withCallback(() -> ScreenOpener.open(parent)); goBack.showingElement(AllIcons.I_CONFIG_BACK.asStencil() .withElementRenderer(BoxWidget.gradientFactory.apply(goBack))); goBack.getToolTip() @@ -61,16 +63,19 @@ public class ConfigModListScreen extends ConfigScreen { search = new HintableTextFieldWidget(font, width / 2 - listWidth / 2, height - 35, listWidth, 20); search.setResponder(this::updateFilter); - search.setHint("Search.."); + search.setHint("Search..."); search.moveCursorToStart(); addRenderableWidget(search); - } @Override - public void onClose() { - super.onClose(); - ScreenOpener.open(parent); + public boolean keyPressed(int keyCode, int scanCode, int modifiers) { + if (super.keyPressed(keyCode, scanCode, modifiers)) + return true; + if (keyCode == GLFW.GLFW_KEY_BACKSPACE) { + ScreenOpener.open(parent); + } + return false; } private void updateFilter(String search) { diff --git a/src/main/java/com/simibubi/create/foundation/config/ui/ConfigScreen.java b/src/main/java/com/simibubi/create/foundation/config/ui/ConfigScreen.java index 57f871372..bd86c151d 100644 --- a/src/main/java/com/simibubi/create/foundation/config/ui/ConfigScreen.java +++ b/src/main/java/com/simibubi/create/foundation/config/ui/ConfigScreen.java @@ -34,7 +34,7 @@ public abstract class ConfigScreen extends AbstractSimiScreen { /* * - * TO DO + * TODO * * reduce number of packets sent to the server when saving a bunch of values * @@ -42,7 +42,7 @@ public abstract class ConfigScreen extends AbstractSimiScreen { * * tooltips are hidden underneath the scrollbar, if the bar is near the middle * - * */ + */ public static final Map> backgrounds = new HashMap<>(); public static final PhysicalFloat cogSpin = PhysicalFloat.create().withLimit(10f).withDrag(0.3).addForce(new Force.Static(.2f)); @@ -139,7 +139,7 @@ public abstract class ConfigScreen extends AbstractSimiScreen { } float elapsedPartials = minecraft.getDeltaFrameTime(); - CreateMainMenuScreen.panorama.render(elapsedPartials, 1); + CreateMainMenuScreen.PANORAMA.render(elapsedPartials, 1); RenderSystem.setShaderTexture(0, CreateMainMenuScreen.PANORAMA_OVERLAY_TEXTURES); RenderSystem.enableBlend(); diff --git a/src/main/java/com/simibubi/create/foundation/config/ui/OpenCreateMenuButton.java b/src/main/java/com/simibubi/create/foundation/config/ui/OpenCreateMenuButton.java index 00c17daaa..71a796e67 100644 --- a/src/main/java/com/simibubi/create/foundation/config/ui/OpenCreateMenuButton.java +++ b/src/main/java/com/simibubi/create/foundation/config/ui/OpenCreateMenuButton.java @@ -29,7 +29,7 @@ import net.minecraftforge.fml.common.Mod.EventBusSubscriber; public class OpenCreateMenuButton extends Button { - public static ItemStack icon = AllItems.GOGGLES.asStack(); + public static final ItemStack ICON = AllItems.GOGGLES.asStack(); public OpenCreateMenuButton(int x, int y) { super(x, y, 20, 20, TextComponent.EMPTY, OpenCreateMenuButton::click); @@ -40,7 +40,7 @@ public class OpenCreateMenuButton extends Button { super.render(mstack, mouseX, mouseY, pticks); if (!visible) return; - Minecraft.getInstance().getItemRenderer().renderGuiItem(icon, x + 2, y + 2); + Minecraft.getInstance().getItemRenderer().renderGuiItem(ICON, x + 2, y + 2); } public static void click(Button b) { diff --git a/src/main/java/com/simibubi/create/foundation/config/ui/SubMenuConfigScreen.java b/src/main/java/com/simibubi/create/foundation/config/ui/SubMenuConfigScreen.java index 53b12052a..d6f58ad2a 100644 --- a/src/main/java/com/simibubi/create/foundation/config/ui/SubMenuConfigScreen.java +++ b/src/main/java/com/simibubi/create/foundation/config/ui/SubMenuConfigScreen.java @@ -127,7 +127,7 @@ public class SubMenuConfigScreen extends ConfigScreen { protected void saveChanges() { UnmodifiableConfig values = spec.getValues(); ConfigHelper.changes.forEach((path, change) -> { - ForgeConfigSpec.ConfigValue configValue = values.get(path); + ForgeConfigSpec.ConfigValue configValue = values.get(path); configValue.set(change.value); if (type == ModConfig.Type.SERVER) { @@ -147,8 +147,8 @@ public class SubMenuConfigScreen extends ConfigScreen { values.valueMap().forEach((key, obj) -> { if (obj instanceof AbstractConfig) { resetConfig((UnmodifiableConfig) obj); - } else if (obj instanceof ForgeConfigSpec.ConfigValue) { - ForgeConfigSpec.ConfigValue configValue = (ForgeConfigSpec.ConfigValue) obj; + } else if (obj instanceof ForgeConfigSpec.ConfigValue) { + ForgeConfigSpec.ConfigValue configValue = (ForgeConfigSpec.ConfigValue) obj; ForgeConfigSpec.ValueSpec valueSpec = spec.getRaw((List) configValue.getPath()); List comments = new ArrayList<>(); @@ -252,7 +252,7 @@ public class SubMenuConfigScreen extends ConfigScreen { search = new ConfigTextField(font, width / 2 - listWidth / 2, height - 35, listWidth, 20); search.setResponder(this::updateFilter); - search.setHint("Search.."); + search.setHint("Search..."); search.moveCursorToStart(); addRenderableWidget(search); @@ -325,7 +325,6 @@ public class SubMenuConfigScreen extends ConfigScreen { .withPadding(2, 2) .showingElement(stencil); - if (!canEdit) { list.children().forEach(e -> e.setEditable(false)); resetAll.active = false; @@ -375,17 +374,17 @@ public class SubMenuConfigScreen extends ConfigScreen { } @Override - public boolean keyPressed(int code, int p_keyPressed_2_, int p_keyPressed_3_) { - if (super.keyPressed(code, p_keyPressed_2_, p_keyPressed_3_)) + public boolean keyPressed(int keyCode, int scanCode, int modifiers) { + if (super.keyPressed(keyCode, scanCode, modifiers)) return true; if (Screen.hasControlDown()) { - if (code == GLFW.GLFW_KEY_F) { + if (keyCode == GLFW.GLFW_KEY_F) { search.setFocus(true); } } - if (code == GLFW.GLFW_KEY_BACKSPACE) { + if (keyCode == GLFW.GLFW_KEY_BACKSPACE) { attemptBackstep(); } @@ -406,36 +405,31 @@ public class SubMenuConfigScreen extends ConfigScreen { return; } - Consumer action = success -> { + showLeavingPrompt(success -> { if (success == Response.Cancel) return; if (success == Response.Confirm) saveChanges(); ConfigHelper.changes.clear(); ScreenOpener.open(parent); - }; - - showLeavingPrompt(action); + }); } @Override public void onClose() { if (ConfigHelper.changes.isEmpty()) { super.onClose(); - ScreenOpener.open(parent); return; } - Consumer action = success -> { + showLeavingPrompt(success -> { if (success == Response.Cancel) return; if (success == Response.Confirm) saveChanges(); ConfigHelper.changes.clear(); super.onClose(); - }; - - showLeavingPrompt(action); + }); } public void showLeavingPrompt(Consumer action) { diff --git a/src/main/java/com/simibubi/create/foundation/data/SharedProperties.java b/src/main/java/com/simibubi/create/foundation/data/SharedProperties.java index d9f654be1..f1838c470 100644 --- a/src/main/java/com/simibubi/create/foundation/data/SharedProperties.java +++ b/src/main/java/com/simibubi/create/foundation/data/SharedProperties.java @@ -9,9 +9,12 @@ import net.minecraft.world.level.material.PushReaction; @MethodsReturnNonnullByDefault public class SharedProperties { - public static Material beltMaterial = + public static final Material BELT_MATERIAL = new Material(MaterialColor.COLOR_GRAY, false, true, true, true, false, false, PushReaction.NORMAL); + public static final Material CRUSHING_WHEEL_CONTROLLER_MATERIAL = + new Material(MaterialColor.NONE, false, false, true, true, false, false, PushReaction.BLOCK); + public static Block stone() { return Blocks.ANDESITE; } diff --git a/src/main/java/com/simibubi/create/foundation/data/recipe/MechanicalCraftingRecipeBuilder.java b/src/main/java/com/simibubi/create/foundation/data/recipe/MechanicalCraftingRecipeBuilder.java index cf8fb24f1..0058a8eb5 100644 --- a/src/main/java/com/simibubi/create/foundation/data/recipe/MechanicalCraftingRecipeBuilder.java +++ b/src/main/java/com/simibubi/create/foundation/data/recipe/MechanicalCraftingRecipeBuilder.java @@ -16,8 +16,6 @@ import com.google.gson.JsonArray; import com.google.gson.JsonObject; import com.simibubi.create.AllRecipeTypes; -import com.simibubi.create.content.contraptions.processing.ProcessingRecipeBuilder; - import net.minecraft.data.recipes.FinishedRecipe; import net.minecraft.resources.ResourceLocation; import net.minecraft.tags.SetTag; diff --git a/src/main/java/com/simibubi/create/foundation/gui/AbstractSimiScreen.java b/src/main/java/com/simibubi/create/foundation/gui/AbstractSimiScreen.java index a670c3e4d..c700faf2b 100644 --- a/src/main/java/com/simibubi/create/foundation/gui/AbstractSimiScreen.java +++ b/src/main/java/com/simibubi/create/foundation/gui/AbstractSimiScreen.java @@ -112,6 +112,21 @@ public abstract class AbstractSimiScreen extends Screen { ms.popPose(); } + @Override + public boolean keyPressed(int keyCode, int scanCode, int modifiers) { + boolean keyPressed = super.keyPressed(keyCode, scanCode, modifiers); + if (keyPressed || getFocused() != null) + return keyPressed; + + InputConstants.Key mouseKey = InputConstants.getKey(keyCode, scanCode); + if (this.minecraft.options.keyInventory.isActiveAndMatches(mouseKey)) { + this.onClose(); + return true; + } + + return false; + } + protected void prepareFrame() { } @@ -138,20 +153,5 @@ public abstract class AbstractSimiScreen extends Screen { protected void debugWindowArea(PoseStack matrixStack) { fill(matrixStack, guiLeft + windowWidth, guiTop + windowHeight, guiLeft, guiTop, 0xD3D3D3D3); } - - @Override - public boolean keyPressed(int pKeyCode, int pScanCode, int pModifiers) { - boolean keyPressed = super.keyPressed(pKeyCode, pScanCode, pModifiers); - if (keyPressed || getFocused() != null) - return keyPressed; - - InputConstants.Key mouseKey = InputConstants.getKey(pKeyCode, pScanCode); - if (this.minecraft.options.keyInventory.isActiveAndMatches(mouseKey)) { - this.onClose(); - return true; - } - - return false; - } } diff --git a/src/main/java/com/simibubi/create/foundation/gui/ConfirmationScreen.java b/src/main/java/com/simibubi/create/foundation/gui/ConfirmationScreen.java index 2a4ecc98e..211539583 100644 --- a/src/main/java/com/simibubi/create/foundation/gui/ConfirmationScreen.java +++ b/src/main/java/com/simibubi/create/foundation/gui/ConfirmationScreen.java @@ -99,8 +99,7 @@ public class ConfirmationScreen extends AbstractSimiScreen { @Override public void tick() { super.tick(); - confirm.tick(); - cancel.tick(); + source.tick(); } @Override @@ -109,9 +108,9 @@ public class ConfirmationScreen extends AbstractSimiScreen { ArrayList copy = new ArrayList<>(text); text.clear(); - copy.forEach(t -> text.addAll(minecraft.font.getSplitter().splitLines(t, 300, Style.EMPTY))); + copy.forEach(t -> text.addAll(font.getSplitter().splitLines(t, 300, Style.EMPTY))); - textHeight = text.size() * (minecraft.font.lineHeight + 1) + 4; + textHeight = text.size() * (font.lineHeight + 1) + 4; textWidth = 300; if (centered) { @@ -133,7 +132,7 @@ public class ConfirmationScreen extends AbstractSimiScreen { int buttonX = x + textWidth / 2 - 6 - (int) (70 * (tristate ? 1.5f : 1)); TextStencilElement confirmText = - new TextStencilElement(minecraft.font, tristate ? "Save" : "Confirm").centered(true, true); + new TextStencilElement(font, tristate ? "Save" : "Confirm").centered(true, true); confirm = new BoxWidget(buttonX, y + textHeight + 6, 70, 16).withCallback(() -> accept(Response.Confirm)); confirm.showingElement(confirmText.withElementRenderer(BoxWidget.gradientFactory.apply(confirm))); addRenderableWidget(confirm); @@ -142,7 +141,7 @@ public class ConfirmationScreen extends AbstractSimiScreen { if (tristate) { TextStencilElement confirmDontSaveText = - new TextStencilElement(minecraft.font, "Don't Save").centered(true, true); + new TextStencilElement(font, "Don't Save").centered(true, true); confirmDontSave = new BoxWidget(buttonX, y + textHeight + 6, 70, 16).withCallback(() -> accept(Response.ConfirmDontSave)); confirmDontSave.showingElement( @@ -151,7 +150,7 @@ public class ConfirmationScreen extends AbstractSimiScreen { buttonX += 12 + 70; } - TextStencilElement cancelText = new TextStencilElement(minecraft.font, "Cancel").centered(true, true); + TextStencilElement cancelText = new TextStencilElement(font, "Cancel").centered(true, true); cancel = new BoxWidget(buttonX, y + textHeight + 6, 70, 16) .withCallback(() -> accept(Response.Cancel)); cancel.showingElement(cancelText.withElementRenderer(BoxWidget.gradientFactory.apply(cancel))); @@ -162,6 +161,8 @@ public class ConfirmationScreen extends AbstractSimiScreen { .withBounds(width + 10, textHeight + 35) .at(-5, y - 5); + if (text.size() == 1) + x = (width - font.width(text.get(0))) / 2; } @Override @@ -176,26 +177,21 @@ public class ConfirmationScreen extends AbstractSimiScreen { @Override protected void renderWindow(PoseStack ms, int mouseX, int mouseY, float partialTicks) { - textBackground.render(ms); - int offset = minecraft.font.lineHeight + 1; + int offset = font.lineHeight + 1; int lineY = y - offset; ms.pushPose(); ms.translate(0, 0, 200); for (FormattedText line : text) { - lineY = lineY + offset; + lineY += offset; if (line == null) continue; - int textX = x; - if (text.size() == 1) - x = (width - minecraft.font.width(line)) / 2; - minecraft.font.draw(ms, line.getString(), textX, lineY, 0xeaeaea); + font.draw(ms, line.getString(), x, lineY, 0xeaeaea); } ms.popPose(); - } @Override diff --git a/src/main/java/com/simibubi/create/foundation/gui/CreateMainMenuScreen.java b/src/main/java/com/simibubi/create/foundation/gui/CreateMainMenuScreen.java index 5b1d96d66..f4937eedb 100644 --- a/src/main/java/com/simibubi/create/foundation/gui/CreateMainMenuScreen.java +++ b/src/main/java/com/simibubi/create/foundation/gui/CreateMainMenuScreen.java @@ -30,14 +30,18 @@ import net.minecraftforge.fml.util.ObfuscationReflectionHelper; public class CreateMainMenuScreen extends AbstractSimiScreen { - protected final Screen parent; - protected boolean returnOnClose; - public static final CubeMap PANORAMA_RESOURCES = new CubeMap(Create.asResource("textures/gui/title/background/panorama")); public static final ResourceLocation PANORAMA_OVERLAY_TEXTURES = new ResourceLocation("textures/gui/title/background/panorama_overlay.png"); - public static PanoramaRenderer panorama = new PanoramaRenderer(PANORAMA_RESOURCES); + public static final PanoramaRenderer PANORAMA = new PanoramaRenderer(PANORAMA_RESOURCES); + + public static final String PROJECT_LINK = "https://www.curseforge.com/minecraft/mc-mods/create"; + public static final String ISSUE_TRACKER_LINK = "https://github.com/Creators-of-Create/Create/issues"; + public static final String SUPPORT_LINK = "https://github.com/Creators-of-Create/Create/wiki/Supporting-the-Project"; + + protected final Screen parent; + protected boolean returnOnClose; private PanoramaRenderer vanillaPanorama; private long firstRenderTime; @@ -69,7 +73,7 @@ public class CreateMainMenuScreen extends AbstractSimiScreen { if (parent instanceof TitleScreen) { if (alpha < 1) vanillaPanorama.render(elapsedPartials, 1); - panorama.render(elapsedPartials, alpha); + PANORAMA.render(elapsedPartials, alpha); RenderSystem.setShaderTexture(0, PANORAMA_OVERLAY_TEXTURES); RenderSystem.enableBlend(); @@ -115,7 +119,7 @@ public class CreateMainMenuScreen extends AbstractSimiScreen { drawCenteredString(ms, font, new TextComponent(Create.NAME).withStyle(ChatFormatting.BOLD) .append( new TextComponent(" v" + Create.VERSION).withStyle(ChatFormatting.BOLD, ChatFormatting.WHITE)), - width / 2, 89, 0xff_E4BB67); + width / 2, 89, 0xFF_E4BB67); ms.popPose(); RenderSystem.disableDepthTest(); @@ -128,14 +132,14 @@ public class CreateMainMenuScreen extends AbstractSimiScreen { } private void addButtons() { - int yStart = height / 4 + (parent instanceof TitleScreen ? 40 : 40); + int yStart = height / 4 + 40; int center = width / 2; int bHeight = 20; int bShortWidth = 98; int bLongWidth = 200; addRenderableWidget( - new Button(center - 100, yStart + 92, bLongWidth, bHeight, Lang.translate("menu.return"), $ -> onClose())); + new Button(center - 100, yStart + 92, bLongWidth, bHeight, Lang.translate("menu.return"), $ -> linkTo(parent))); addRenderableWidget(new Button(center - 100, yStart + 24 + -16, bLongWidth, bHeight, Lang.translate("menu.configure"), $ -> linkTo(BaseConfigScreen.forCreate(this)))); @@ -144,16 +148,12 @@ public class CreateMainMenuScreen extends AbstractSimiScreen { gettingStarted.active = !(parent instanceof TitleScreen); addRenderableWidget(gettingStarted); - String projectLink = "https://www.curseforge.com/minecraft/mc-mods/create"; - String issueTrackerLink = "https://github.com/Creators-of-Create/Create/issues"; - String supportLink = "https://github.com/Creators-of-Create/Create/wiki/Supporting-the-Project"; - addRenderableWidget(new Button(center - 100, yStart + 48 + -16, bShortWidth, bHeight, Lang.translate("menu.project_page"), - $ -> linkTo(projectLink))); + $ -> linkTo(PROJECT_LINK))); addRenderableWidget(new Button(center + 2, yStart + 68, bShortWidth, bHeight, Lang.translate("menu.report_bugs"), - $ -> linkTo(issueTrackerLink))); + $ -> linkTo(ISSUE_TRACKER_LINK))); addRenderableWidget(new Button(center - 100, yStart + 68, bShortWidth, bHeight, Lang.translate("menu.support"), - $ -> linkTo(supportLink))); + $ -> linkTo(SUPPORT_LINK))); } @Override @@ -171,10 +171,6 @@ public class CreateMainMenuScreen extends AbstractSimiScreen { } } - public void tick() { - super.tick(); - } - private void linkTo(Screen screen) { returnOnClose = false; ScreenOpener.open(screen); @@ -195,10 +191,4 @@ public class CreateMainMenuScreen extends AbstractSimiScreen { return true; } - @Override - public void onClose() { - super.onClose(); - ScreenOpener.open(parent); - } - } diff --git a/src/main/java/com/simibubi/create/foundation/gui/Theme.java b/src/main/java/com/simibubi/create/foundation/gui/Theme.java index 01bbb8c98..665b3da50 100644 --- a/src/main/java/com/simibubi/create/foundation/gui/Theme.java +++ b/src/main/java/com/simibubi/create/foundation/gui/Theme.java @@ -16,7 +16,7 @@ import com.simibubi.create.foundation.utility.Couple; public class Theme { private static final List THEMES = new ArrayList<>(); - private static final Theme BASE = addTheme(new Theme()); + public static final Theme BASE = addTheme(new Theme()); public static Theme addTheme(@Nonnull Theme theme) { THEMES.add(theme); @@ -39,7 +39,7 @@ public class Theme { .filter(Objects::nonNull) .findFirst() .map(holder -> holder.lookupKey == null ? holder : resolve(holder.lookupKey)) - .orElse(ColorHolder.missing); + .orElse(ColorHolder.MISSING); } @Nonnull public static Couple p(@Nonnull Key key) {return p(key.get());} @@ -144,40 +144,40 @@ public class Theme { public static class Key { - public static Key BUTTON_IDLE = new Key(); - public static Key BUTTON_HOVER = new Key(); - public static Key BUTTON_CLICK = new Key(); - public static Key BUTTON_DISABLE = new Key(); - public static Key BUTTON_SUCCESS = new Key(); - public static Key BUTTON_FAIL = new Key(); + public static final Key BUTTON_IDLE = new Key(); + public static final Key BUTTON_HOVER = new Key(); + public static final Key BUTTON_CLICK = new Key(); + public static final Key BUTTON_DISABLE = new Key(); + public static final Key BUTTON_SUCCESS = new Key(); + public static final Key BUTTON_FAIL = new Key(); - public static Key TEXT = new Key(); - public static Key TEXT_DARKER = new Key(); - public static Key TEXT_ACCENT_STRONG = new Key(); - public static Key TEXT_ACCENT_SLIGHT = new Key(); + public static final Key TEXT = new Key(); + public static final Key TEXT_DARKER = new Key(); + public static final Key TEXT_ACCENT_STRONG = new Key(); + public static final Key TEXT_ACCENT_SLIGHT = new Key(); - public static Key STREAK = new Key(); - public static Key VANILLA_TOOLTIP_BORDER = new Key(); - public static Key VANILLA_TOOLTIP_BACKGROUND = new Key(); + public static final Key STREAK = new Key(); + public static final Key VANILLA_TOOLTIP_BORDER = new Key(); + public static final Key VANILLA_TOOLTIP_BACKGROUND = new Key(); - public static Key PONDER_BACKGROUND_TRANSPARENT = new Key(); - public static Key PONDER_BACKGROUND_FLAT = new Key(); - public static Key PONDER_IDLE = new Key(); - public static Key PONDER_HOVER = new Key(); - public static Key PONDER_HIGHLIGHT = new Key(); - public static Key TEXT_WINDOW_BORDER = new Key(); - public static Key PONDER_BACK_ARROW = new Key(); - public static Key PONDER_PROGRESSBAR = new Key(); - public static Key PONDER_MISSING_CREATE = new Key(); - public static Key PONDER_MISSING_VANILLA = new Key(); + public static final Key PONDER_BACKGROUND_TRANSPARENT = new Key(); + public static final Key PONDER_BACKGROUND_FLAT = new Key(); + public static final Key PONDER_IDLE = new Key(); + public static final Key PONDER_HOVER = new Key(); + public static final Key PONDER_HIGHLIGHT = new Key(); + public static final Key TEXT_WINDOW_BORDER = new Key(); + public static final Key PONDER_BACK_ARROW = new Key(); + public static final Key PONDER_PROGRESSBAR = new Key(); + public static final Key PONDER_MISSING_CREATE = new Key(); + public static final Key PONDER_MISSING_VANILLA = new Key(); - public static Key PONDER_BUTTON_IDLE = new Key(); - public static Key PONDER_BUTTON_HOVER = new Key(); - public static Key PONDER_BUTTON_CLICK = new Key(); - public static Key PONDER_BUTTON_DISABLE = new Key(); + public static final Key PONDER_BUTTON_IDLE = new Key(); + public static final Key PONDER_BUTTON_HOVER = new Key(); + public static final Key PONDER_BUTTON_CLICK = new Key(); + public static final Key PONDER_BUTTON_DISABLE = new Key(); - public static Key CONFIG_TITLE_A = new Key(); - public static Key CONFIG_TITLE_B = new Key(); + public static final Key CONFIG_TITLE_A = new Key(); + public static final Key CONFIG_TITLE_B = new Key(); private static int index = 0; @@ -198,7 +198,7 @@ public class Theme { private static class ColorHolder { - private static final ColorHolder missing = ColorHolder.single(Color.BLACK); + private static final ColorHolder MISSING = ColorHolder.single(Color.BLACK); private Couple colors; private String lookupKey; diff --git a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/belt/DirectBeltInputBehaviour.java b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/belt/DirectBeltInputBehaviour.java index fd5b20018..6da53b0fc 100644 --- a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/belt/DirectBeltInputBehaviour.java +++ b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/belt/DirectBeltInputBehaviour.java @@ -30,7 +30,7 @@ import net.minecraftforge.items.ItemHandlerHelper; */ public class DirectBeltInputBehaviour extends TileEntityBehaviour { - public static BehaviourType TYPE = new BehaviourType<>(); + public static final BehaviourType TYPE = new BehaviourType<>(); private InsertionCallback tryInsert; private AvailabilityPredicate canInsert; diff --git a/src/main/java/com/simibubi/create/foundation/utility/ghost/GhostBlockRenderer.java b/src/main/java/com/simibubi/create/foundation/utility/ghost/GhostBlockRenderer.java index cd6087707..1f7cbc500 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/ghost/GhostBlockRenderer.java +++ b/src/main/java/com/simibubi/create/foundation/utility/ghost/GhostBlockRenderer.java @@ -1,22 +1,13 @@ package com.simibubi.create.foundation.utility.ghost; -import java.nio.Buffer; -import java.nio.ByteBuffer; -import java.nio.IntBuffer; import java.util.List; import java.util.Random; import javax.annotation.Nullable; -import org.lwjgl.system.MemoryStack; - import com.jozufozu.flywheel.core.virtual.VirtualEmptyModelData; -import com.mojang.blaze3d.vertex.DefaultVertexFormat; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; -import com.mojang.math.Matrix4f; -import com.mojang.math.Vector3f; -import com.mojang.math.Vector4f; import com.simibubi.create.foundation.render.SuperRenderTypeBuffer; import com.simibubi.create.foundation.utility.placement.PlacementHelpers; @@ -31,28 +22,29 @@ import net.minecraft.client.renderer.texture.OverlayTexture; import net.minecraft.client.resources.model.BakedModel; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; -import net.minecraft.core.Vec3i; import net.minecraft.util.Mth; import net.minecraft.world.level.block.state.BlockState; +import net.minecraftforge.client.model.data.IModelData; public abstract class GhostBlockRenderer { - private static final GhostBlockRenderer transparent = new TransparentGhostBlockRenderer(); - - public static GhostBlockRenderer transparent() { - return transparent; - } - - private static final GhostBlockRenderer standard = new DefaultGhostBlockRenderer(); + private static final GhostBlockRenderer STANDARD = new DefaultGhostBlockRenderer(); public static GhostBlockRenderer standard() { - return standard; + return STANDARD; + } + + private static final GhostBlockRenderer TRANSPARENT = new TransparentGhostBlockRenderer(); + + public static GhostBlockRenderer transparent() { + return TRANSPARENT; } public abstract void render(PoseStack ms, SuperRenderTypeBuffer buffer, GhostBlockParams params); private static class DefaultGhostBlockRenderer extends GhostBlockRenderer { + @Override public void render(PoseStack ms, SuperRenderTypeBuffer buffer, GhostBlockParams params) { ms.pushPose(); @@ -78,19 +70,15 @@ public abstract class GhostBlockRenderer { private static class TransparentGhostBlockRenderer extends GhostBlockRenderer { + @Override public void render(PoseStack ms, SuperRenderTypeBuffer buffer, GhostBlockParams params) { - - // prepare ms.pushPose(); - // RenderSystem.pushMatrix(); - Minecraft mc = Minecraft.getInstance(); BlockRenderDispatcher dispatcher = mc.getBlockRenderer(); BakedModel model = dispatcher.getBlockModel(params.state); - // RenderType layer = RenderTypeLookup.getEntityBlockLayer(params.state); RenderType layer = RenderType.translucent(); VertexConsumer vb = buffer.getEarlyBuffer(layer); @@ -101,104 +89,54 @@ public abstract class GhostBlockRenderer { ms.scale(.85f, .85f, .85f); ms.translate(-.5, -.5, -.5); - // dispatcher.getBlockModelRenderer().renderModel(ms.peek(), vb, params.state, model, 1f, 1f, 1f, LightTexture.FULL_BRIGHT, OverlayTexture.DEFAULT_UV, VirtualEmptyModelData.INSTANCE); - renderModel(params, ms.last(), vb, params.state, model, 1f, 1f, 1f, + float alpha = params.alphaSupplier.get() * .75f * PlacementHelpers.getCurrentAlpha(); + renderModel(ms.last(), vb, params.state, model, 1f, 1f, 1f, alpha, LevelRenderer.getLightColor(mc.level, pos), OverlayTexture.NO_OVERLAY, VirtualEmptyModelData.INSTANCE); - // buffer.draw(); - // clean - // RenderSystem.popMatrix(); ms.popPose(); - } - // BlockModelRenderer - public void renderModel(GhostBlockParams params, PoseStack.Pose entry, VertexConsumer vb, - @Nullable BlockState state, BakedModel model, float p_228804_5_, float p_228804_6_, float p_228804_7_, - int p_228804_8_, int p_228804_9_, net.minecraftforge.client.model.data.IModelData modelData) { + // ModelBlockRenderer + public void renderModel(PoseStack.Pose pose, VertexConsumer consumer, + @Nullable BlockState state, BakedModel model, float red, float green, float blue, + float alpha, int packedLight, int packedOverlay, IModelData modelData) { Random random = new Random(); for (Direction direction : Direction.values()) { random.setSeed(42L); - renderQuad(params, entry, vb, p_228804_5_, p_228804_6_, p_228804_7_, - model.getQuads(state, direction, random, modelData), p_228804_8_, p_228804_9_); + renderQuadList(pose, consumer, red, green, blue, alpha, + model.getQuads(state, direction, random, modelData), packedLight, packedOverlay); } random.setSeed(42L); - renderQuad(params, entry, vb, p_228804_5_, p_228804_6_, p_228804_7_, - model.getQuads(state, (Direction) null, random, modelData), p_228804_8_, p_228804_9_); + renderQuadList(pose, consumer, red, green, blue, alpha, + model.getQuads(state, null, random, modelData), packedLight, packedOverlay); } - // BlockModelRenderer - private static void renderQuad(GhostBlockParams params, PoseStack.Pose p_228803_0_, - VertexConsumer p_228803_1_, float p_228803_2_, float p_228803_3_, float p_228803_4_, - List p_228803_5_, int p_228803_6_, int p_228803_7_) { - Float alpha = params.alphaSupplier.get() * .75f * PlacementHelpers.getCurrentAlpha(); - - for (BakedQuad bakedquad : p_228803_5_) { + // ModelBlockRenderer + private static void renderQuadList(PoseStack.Pose pose, VertexConsumer consumer, + float red, float green, float blue, float alpha, List quads, + int packedLight, int packedOverlay) { + for (BakedQuad quad : quads) { float f; float f1; float f2; - if (bakedquad.isTinted()) { - f = Mth.clamp(p_228803_2_, 0.0F, 1.0F); - f1 = Mth.clamp(p_228803_3_, 0.0F, 1.0F); - f2 = Mth.clamp(p_228803_4_, 0.0F, 1.0F); + if (quad.isTinted()) { + f = Mth.clamp(red, 0.0F, 1.0F); + f1 = Mth.clamp(green, 0.0F, 1.0F); + f2 = Mth.clamp(blue, 0.0F, 1.0F); } else { f = 1.0F; f1 = 1.0F; f2 = 1.0F; } - quad(alpha, p_228803_1_, p_228803_0_, bakedquad, new float[] { 1f, 1f, 1f, 1f }, f, f1, f2, - new int[] { p_228803_6_, p_228803_6_, p_228803_6_, p_228803_6_ }, p_228803_7_); + consumer.putBulkData(pose, quad, f, f1, f2, alpha, packedLight, packedOverlay); } } - // IVertexBuilder - static void quad(float alpha, VertexConsumer vb, PoseStack.Pose p_227890_1_, BakedQuad p_227890_2_, - float[] p_227890_3_, float p_227890_4_, float p_227890_5_, float p_227890_6_, int[] p_227890_7_, - int p_227890_8_) { - int[] aint = p_227890_2_.getVertices(); - Vec3i Vector3i = p_227890_2_.getDirection() - .getNormal(); - Vector3f vector3f = new Vector3f((float) Vector3i.getX(), (float) Vector3i.getY(), (float) Vector3i.getZ()); - Matrix4f matrix4f = p_227890_1_.pose(); - vector3f.transform(p_227890_1_.normal()); - int vertexSize = DefaultVertexFormat.BLOCK.getIntegerSize(); - int j = aint.length / vertexSize; - - try (MemoryStack memorystack = MemoryStack.stackPush()) { - ByteBuffer bytebuffer = memorystack.malloc(DefaultVertexFormat.BLOCK.getVertexSize()); - IntBuffer intbuffer = bytebuffer.asIntBuffer(); - - for (int k = 0; k < j; ++k) { - ((Buffer) intbuffer).clear(); - intbuffer.put(aint, k * vertexSize, vertexSize); - float f = bytebuffer.getFloat(0); - float f1 = bytebuffer.getFloat(4); - float f2 = bytebuffer.getFloat(8); - float r; - float g; - float b; - - r = p_227890_3_[k] * p_227890_4_; - g = p_227890_3_[k] * p_227890_5_; - b = p_227890_3_[k] * p_227890_6_; - - int l = vb.applyBakedLighting(p_227890_7_[k], bytebuffer); - float f9 = bytebuffer.getFloat(16); - float f10 = bytebuffer.getFloat(20); - Vector4f vector4f = new Vector4f(f, f1, f2, 1.0F); - vector4f.transform(matrix4f); - vb.applyBakedNormals(vector3f, bytebuffer, p_227890_1_.normal()); - vb.vertex(vector4f.x(), vector4f.y(), vector4f.z(), r, g, b, alpha, f9, f10, p_227890_8_, - l, vector3f.x(), vector3f.y(), vector3f.z()); - } - } - } - } } From fcec6566fa77031036f93412a289ed599fa2ed52 Mon Sep 17 00:00:00 2001 From: mezz Date: Mon, 7 Mar 2022 17:22:15 -1000 Subject: [PATCH 20/29] Improve the performance of MechanicalPressTileEntity#canCompress --- .../press/MechanicalPressTileEntity.java | 24 +++++++++---------- .../create/foundation/item/ItemHelper.java | 14 +++++++++++ 2 files changed, 25 insertions(+), 13 deletions(-) diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/press/MechanicalPressTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/press/MechanicalPressTileEntity.java index ff498a1f0..da42a1883 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/press/MechanicalPressTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/press/MechanicalPressTileEntity.java @@ -3,8 +3,9 @@ package com.simibubi.create.content.contraptions.components.press; import java.util.ArrayList; import java.util.List; import java.util.Optional; +import java.util.Set; -import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableSet; import com.simibubi.create.AllBlocks; import com.simibubi.create.AllRecipeTypes; import com.simibubi.create.AllSoundEvents; @@ -344,22 +345,19 @@ public class MechanicalPressTileEntity extends BasinOperatingTileEntity { return AllRecipeTypes.PRESSING.find(pressingInv, level); } - private static final List RECIPE_DENY_LIST = - ImmutableList.of(new ResourceLocation("occultism", "spirit_trade"), new ResourceLocation("occultism", "ritual")); + private static final Set RECIPE_DENY_SET = + ImmutableSet.of(new ResourceLocation("occultism", "spirit_trade"), new ResourceLocation("occultism", "ritual")); public static boolean canCompress(Recipe recipe) { - NonNullList ingredients = recipe.getIngredients(); - if (!(recipe instanceof CraftingRecipe)) + if (!(recipe instanceof CraftingRecipe) || !AllConfigs.SERVER.recipes.allowShapedSquareInPress.get()) return false; - + RecipeSerializer serializer = recipe.getSerializer(); - for (ResourceLocation denied : RECIPE_DENY_LIST) - if (serializer != null && denied.equals(serializer.getRegistryName())) - return false; - - return AllConfigs.SERVER.recipes.allowShapedSquareInPress.get() - && (ingredients.size() == 4 || ingredients.size() == 9) && ItemHelper.condenseIngredients(ingredients) - .size() == 1; + if (serializer != null && RECIPE_DENY_SET.contains(serializer.getRegistryName())) + return false; + + NonNullList ingredients = recipe.getIngredients(); + return (ingredients.size() == 4 || ingredients.size() == 9) && ItemHelper.matchAllIngredients(ingredients); } @Override diff --git a/src/main/java/com/simibubi/create/foundation/item/ItemHelper.java b/src/main/java/com/simibubi/create/foundation/item/ItemHelper.java index 301d23ca9..995a0eebc 100644 --- a/src/main/java/com/simibubi/create/foundation/item/ItemHelper.java +++ b/src/main/java/com/simibubi/create/foundation/item/ItemHelper.java @@ -118,8 +118,12 @@ public class ItemHelper { } public static boolean matchIngredients(Ingredient i1, Ingredient i2) { + if (i1 == i2) + return true; ItemStack[] stacks1 = i1.getItems(); ItemStack[] stacks2 = i2.getItems(); + if (stacks1 == stacks2) + return true; if (stacks1.length == stacks2.length) { for (int i = 0; i < stacks1.length; i++) if (!ItemStack.isSame(stacks1[i], stacks2[i])) @@ -129,6 +133,16 @@ public class ItemHelper { return false; } + public static boolean matchAllIngredients(NonNullList ingredients) { + if (ingredients.size() <= 1) + return true; + Ingredient firstIngredient = ingredients.get(0); + for (int i = 1; i < ingredients.size(); i++) + if (!matchIngredients(firstIngredient, ingredients.get(i))) + return false; + return true; + } + public static enum ExtractionCountMode { EXACTLY, UPTO } From 2211632f5c6cda15ebc4b8d6c8e335fc3bf9ab2c Mon Sep 17 00:00:00 2001 From: PepperCode1 <44146161+PepperCode1@users.noreply.github.com> Date: Sat, 12 Mar 2022 00:04:05 -0800 Subject: [PATCH 21/29] Just enough brewing - Optimize CreateJEI recipe list construction - Optimize PotionMixingRecipes - Add basic modded brewing recipe compatibility - Fix dyed sails not being placed when printing schematics - Fix sideways belts not being placed correctly when printing schematics - Fix MechanicalCraftingCategory not applying the model matrix - Add Upgrade Aquatic compatible fertilizer recipes; Resolve #658 - Replace almost all reflection with access transformers or accessor mixins - Remove duplicate sails tag - Improve metal compatibility - Switch to a linked set in StringSerializableTrigger to prevent inconsistent generation of aesthetics.json - Other minor changes --- gradle.properties | 2 +- src/generated/resources/.cache/cache | 1 - .../data/create/tags/blocks/sails.json | 20 - .../java/com/simibubi/create/AllBlocks.java | 8 +- .../java/com/simibubi/create/AllItems.java | 23 +- .../java/com/simibubi/create/AllTags.java | 1 - .../simibubi/create/compat/jei/CreateJEI.java | 391 +++++++++--------- .../jei/category/BlockCuttingCategory.java | 12 +- .../jei/category/ItemDrainCategory.java | 86 ++-- .../category/MechanicalCraftingCategory.java | 2 + .../MysteriousItemConversionCategory.java | 14 +- .../compat/jei/category/SpoutCategory.java | 100 +++-- .../MovedProjectileDispenserBehaviour.java | 42 +- .../deployer/DeployerApplicationRecipe.java | 19 +- .../mixer/MechanicalMixerTileEntity.java | 4 +- .../AbstractContraptionEntity.java | 6 +- .../bearing/BlankSailBlockItem.java | 32 ++ .../structureMovement/bearing/SailBlock.java | 9 + .../fluids/potion/PotionFluid.java | 59 +-- .../fluids/potion/PotionFluidHandler.java | 17 +- .../fluids/recipe/FluidTransferRecipes.java | 20 - .../recipe/PotionMixingRecipeManager.java | 147 ------- .../fluids/recipe/PotionMixingRecipes.java | 141 +++++++ .../burner/BlazeBurnerBlockItem.java | 8 +- .../curiosities/armor/DivingBootsItem.java | 3 +- .../curiosities/tools/BlueprintItem.java | 4 +- .../curiosities/tools/SandPaperItem.java | 3 +- .../content/schematics/ItemRequirement.java | 44 +- .../schematics/SchematicChunkSource.java | 7 +- .../schematics/block/LaunchedItem.java | 4 +- .../block/SchematicannonRenderer.java | 19 +- .../block/SchematicannonTileEntity.java | 28 +- .../simibubi/create/events/CommonEvents.java | 4 - .../StringSerializableTrigger.java | 10 +- .../foundation/block/CopperBlockSet.java | 6 +- .../foundation/block/DyedBlockList.java | 24 +- .../foundation/command/FlySpeedCommand.java | 4 +- .../foundation/data/recipe/CompatMetals.java | 42 ++ .../data/recipe/CrushingRecipeGen.java | 57 +-- .../create/foundation/data/recipe/Mods.java | 12 +- .../data/recipe/StandardRecipeGen.java | 39 +- .../data/recipe/WashingRecipeGen.java | 43 +- .../foundation/gui/CreateMainMenuScreen.java | 6 +- .../item/TagDependentIngredientItem.java | 8 +- ...actProjectileDispenseBehaviorAccessor.java | 22 + .../mixin/accessor/GameRendererAccessor.java | 13 + .../mixin/accessor/LivingEntityAccessor.java | 13 + .../accessor/ParticleEngineAccessor.java | 17 + .../create/foundation/ponder/PonderWorld.java | 16 +- .../create/foundation/utility/VecHelper.java | 3 +- .../worldWrappers/WrappedServerWorld.java | 9 +- .../resources/META-INF/accesstransformer.cfg | 59 ++- src/main/resources/create.mixins.json | 8 +- .../crafting/tree_fertilizer.json | 56 +++ 54 files changed, 957 insertions(+), 790 deletions(-) delete mode 100644 src/generated/resources/data/create/tags/blocks/sails.json create mode 100644 src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/BlankSailBlockItem.java delete mode 100644 src/main/java/com/simibubi/create/content/contraptions/fluids/recipe/FluidTransferRecipes.java delete mode 100644 src/main/java/com/simibubi/create/content/contraptions/fluids/recipe/PotionMixingRecipeManager.java create mode 100644 src/main/java/com/simibubi/create/content/contraptions/fluids/recipe/PotionMixingRecipes.java create mode 100644 src/main/java/com/simibubi/create/foundation/data/recipe/CompatMetals.java create mode 100644 src/main/java/com/simibubi/create/foundation/mixin/accessor/AbstractProjectileDispenseBehaviorAccessor.java create mode 100644 src/main/java/com/simibubi/create/foundation/mixin/accessor/GameRendererAccessor.java create mode 100644 src/main/java/com/simibubi/create/foundation/mixin/accessor/LivingEntityAccessor.java create mode 100644 src/main/java/com/simibubi/create/foundation/mixin/accessor/ParticleEngineAccessor.java create mode 100644 src/main/resources/data/create/recipes/compat/upgrade_aquatic/crafting/tree_fertilizer.json diff --git a/gradle.properties b/gradle.properties index e6e763315..bf4d53325 100644 --- a/gradle.properties +++ b/gradle.properties @@ -21,7 +21,7 @@ parchment_version = 2022.01.23 registrate_version = MC1.18-1.0.21 flywheel_version = 1.18-0.6.1.62 jei_minecraft_version = 1.18.1 -jei_version = 9.3.2.92 +jei_version = 9.4.1.112 # curseforge information projectId = 328085 diff --git a/src/generated/resources/.cache/cache b/src/generated/resources/.cache/cache index 7335af5d9..06754926f 100644 --- a/src/generated/resources/.cache/cache +++ b/src/generated/resources/.cache/cache @@ -5186,7 +5186,6 @@ ac265a674626e0e832330086fd18fe0be37fc327 data/create/recipes/weathered_copper_ti 57b942386a15c874d1ca9cd6a8032c11a5599fc2 data/create/tags/blocks/fan_transparent.json 10781e8cfcbb3486327aace3aa00e437fb44b331 data/create/tags/blocks/ore_override_stone.json 557a29a61145b0f266760ef06256188a296739a7 data/create/tags/blocks/safe_nbt.json -c9ac7e3e5ec18554e7184168d65e9b8e44ef5610 data/create/tags/blocks/sails.json 6cdeeac1689f7b5bfd9bc40b462143d8eaf3ad0b data/create/tags/blocks/seats.json d063e12c9ef75f39518c6d129ea35d833464d547 data/create/tags/blocks/toolboxes.json 50936b211d94167a35ec78c89954082a336b6269 data/create/tags/blocks/valve_handles.json diff --git a/src/generated/resources/data/create/tags/blocks/sails.json b/src/generated/resources/data/create/tags/blocks/sails.json deleted file mode 100644 index 7dcca6319..000000000 --- a/src/generated/resources/data/create/tags/blocks/sails.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "replace": false, - "values": [ - "create:orange_sail", - "create:magenta_sail", - "create:light_blue_sail", - "create:yellow_sail", - "create:lime_sail", - "create:pink_sail", - "create:gray_sail", - "create:light_gray_sail", - "create:cyan_sail", - "create:purple_sail", - "create:blue_sail", - "create:brown_sail", - "create:green_sail", - "create:red_sail", - "create:black_sail" - ] -} \ No newline at end of file diff --git a/src/main/java/com/simibubi/create/AllBlocks.java b/src/main/java/com/simibubi/create/AllBlocks.java index f17891f3d..0c3c2f7bf 100644 --- a/src/main/java/com/simibubi/create/AllBlocks.java +++ b/src/main/java/com/simibubi/create/AllBlocks.java @@ -48,6 +48,7 @@ import com.simibubi.create.content.contraptions.components.motor.CreativeMotorGe import com.simibubi.create.content.contraptions.components.press.MechanicalPressBlock; import com.simibubi.create.content.contraptions.components.saw.SawBlock; import com.simibubi.create.content.contraptions.components.saw.SawGenerator; +import com.simibubi.create.content.contraptions.components.structureMovement.bearing.BlankSailBlockItem; import com.simibubi.create.content.contraptions.components.structureMovement.bearing.ClockworkBearingBlock; import com.simibubi.create.content.contraptions.components.structureMovement.bearing.MechanicalBearingBlock; import com.simibubi.create.content.contraptions.components.structureMovement.bearing.SailBlock; @@ -1125,7 +1126,8 @@ public class AllBlocks { .transform(axeOnly()) .blockstate(BlockStateGen.directionalBlockProvider(false)) .tag(AllBlockTags.WINDMILL_SAILS.tag) - .simpleItem() + .item(BlankSailBlockItem::new) + .build() .register(); public static final DyedBlockList DYED_SAILS = new DyedBlockList<>(colour -> { @@ -1135,13 +1137,13 @@ public class AllBlocks { String colourName = colour.getSerializedName(); return REGISTRATE.block(colourName + "_sail", p -> SailBlock.withCanvas(p, colour)) .initialProperties(SharedProperties::wooden) - .properties(BlockBehaviour.Properties::noOcclusion) + .properties(p -> p.sound(SoundType.SCAFFOLDING) + .noOcclusion()) .transform(axeOnly()) .blockstate((c, p) -> p.directionalBlock(c.get(), p.models() .withExistingParent(colourName + "_sail", p.modLoc("block/white_sail")) .texture("0", p.modLoc("block/sail/canvas_" + colourName)))) .tag(AllBlockTags.WINDMILL_SAILS.tag) - .tag(AllBlockTags.SAILS.tag) .loot((p, b) -> p.dropOther(b, SAIL.get())) .register(); }); diff --git a/src/main/java/com/simibubi/create/AllItems.java b/src/main/java/com/simibubi/create/AllItems.java index 15f812870..9113d0f7c 100644 --- a/src/main/java/com/simibubi/create/AllItems.java +++ b/src/main/java/com/simibubi/create/AllItems.java @@ -9,6 +9,15 @@ import static com.simibubi.create.content.AllSections.KINETICS; import static com.simibubi.create.content.AllSections.LOGISTICS; import static com.simibubi.create.content.AllSections.MATERIALS; import static com.simibubi.create.content.AllSections.SCHEMATICS; +import static com.simibubi.create.foundation.data.recipe.CompatMetals.ALUMINUM; +import static com.simibubi.create.foundation.data.recipe.CompatMetals.LEAD; +import static com.simibubi.create.foundation.data.recipe.CompatMetals.NICKEL; +import static com.simibubi.create.foundation.data.recipe.CompatMetals.OSMIUM; +import static com.simibubi.create.foundation.data.recipe.CompatMetals.PLATINUM; +import static com.simibubi.create.foundation.data.recipe.CompatMetals.QUICKSILVER; +import static com.simibubi.create.foundation.data.recipe.CompatMetals.SILVER; +import static com.simibubi.create.foundation.data.recipe.CompatMetals.TIN; +import static com.simibubi.create.foundation.data.recipe.CompatMetals.URANIUM; import com.simibubi.create.AllTags.AllItemTags; import com.simibubi.create.content.contraptions.components.structureMovement.glue.SuperGlueItem; @@ -45,6 +54,7 @@ import com.simibubi.create.content.schematics.item.SchematicAndQuillItem; import com.simibubi.create.content.schematics.item.SchematicItem; import com.simibubi.create.foundation.data.AssetLookup; import com.simibubi.create.foundation.data.CreateRegistrate; +import com.simibubi.create.foundation.data.recipe.CompatMetals; import com.simibubi.create.foundation.item.HiddenIngredientItem; import com.simibubi.create.foundation.item.TagDependentIngredientItem; import com.simibubi.create.foundation.item.TooltipHelper; @@ -188,11 +198,11 @@ public class AllItems { CRUSHED_COPPER = taggedIngredient("crushed_copper_ore", CRUSHED_ORES.tag), CRUSHED_ZINC = taggedIngredient("crushed_zinc_ore", CRUSHED_ORES.tag); - public static final ItemEntry CRUSHED_OSMIUM = compatCrushedOre("osmium"), - CRUSHED_PLATINUM = compatCrushedOre("platinum"), CRUSHED_SILVER = compatCrushedOre("silver"), - CRUSHED_TIN = compatCrushedOre("tin"), CRUSHED_LEAD = compatCrushedOre("lead"), - CRUSHED_QUICKSILVER = compatCrushedOre("quicksilver"), CRUSHED_BAUXITE = compatCrushedOre("aluminum"), - CRUSHED_URANIUM = compatCrushedOre("uranium"), CRUSHED_NICKEL = compatCrushedOre("nickel"); + public static final ItemEntry CRUSHED_OSMIUM = compatCrushedOre(OSMIUM), + CRUSHED_PLATINUM = compatCrushedOre(PLATINUM), CRUSHED_SILVER = compatCrushedOre(SILVER), + CRUSHED_TIN = compatCrushedOre(TIN), CRUSHED_LEAD = compatCrushedOre(LEAD), + CRUSHED_QUICKSILVER = compatCrushedOre(QUICKSILVER), CRUSHED_BAUXITE = compatCrushedOre(ALUMINUM), + CRUSHED_URANIUM = compatCrushedOre(URANIUM), CRUSHED_NICKEL = compatCrushedOre(NICKEL); // Kinetics @@ -366,7 +376,8 @@ public class AllItems { .register(); } - private static ItemEntry compatCrushedOre(String metalName) { + private static ItemEntry compatCrushedOre(CompatMetals metal) { + String metalName = metal.getName(); return REGISTRATE .item("crushed_" + metalName + "_ore", props -> new TagDependentIngredientItem(props, new ResourceLocation("forge", "ores/" + metalName))) diff --git a/src/main/java/com/simibubi/create/AllTags.java b/src/main/java/com/simibubi/create/AllTags.java index 52082a021..82d724a79 100644 --- a/src/main/java/com/simibubi/create/AllTags.java +++ b/src/main/java/com/simibubi/create/AllTags.java @@ -111,7 +111,6 @@ public class AllTags { FAN_TRANSPARENT, ORE_OVERRIDE_STONE, SAFE_NBT, - SAILS, SEATS, TOOLBOXES, VALVE_HANDLES, diff --git a/src/main/java/com/simibubi/create/compat/jei/CreateJEI.java b/src/main/java/com/simibubi/create/compat/jei/CreateJEI.java index 59f06d730..e46310a76 100644 --- a/src/main/java/com/simibubi/create/compat/jei/CreateJEI.java +++ b/src/main/java/com/simibubi/create/compat/jei/CreateJEI.java @@ -1,7 +1,9 @@ package com.simibubi.create.compat.jei; import java.util.ArrayList; +import java.util.Collection; import java.util.List; +import java.util.Map; import java.util.function.Consumer; import java.util.function.Function; import java.util.function.Predicate; @@ -42,7 +44,7 @@ import com.simibubi.create.content.contraptions.components.deployer.DeployerAppl import com.simibubi.create.content.contraptions.components.press.MechanicalPressTileEntity; import com.simibubi.create.content.contraptions.components.saw.SawTileEntity; import com.simibubi.create.content.contraptions.fluids.potion.PotionFluid; -import com.simibubi.create.content.contraptions.fluids.recipe.PotionMixingRecipeManager; +import com.simibubi.create.content.contraptions.fluids.recipe.PotionMixingRecipes; import com.simibubi.create.content.contraptions.processing.BasinRecipe; import com.simibubi.create.content.curiosities.tools.BlueprintScreen; import com.simibubi.create.content.logistics.item.LinkedControllerScreen; @@ -56,6 +58,7 @@ import com.simibubi.create.foundation.utility.recipe.IRecipeTypeInfo; import mezz.jei.api.IModPlugin; import mezz.jei.api.JeiPlugin; import mezz.jei.api.constants.VanillaRecipeCategoryUid; +import mezz.jei.api.recipe.category.IRecipeCategory; import mezz.jei.api.registration.IGuiHandlerRegistration; import mezz.jei.api.registration.IRecipeCatalystRegistration; import mezz.jei.api.registration.IRecipeCategoryRegistration; @@ -84,139 +87,136 @@ public class CreateJEI implements IModPlugin { private final List> allCategories = new ArrayList<>(); private final CreateRecipeCategory - milling = register("milling", MillingCategory::new).recipes(AllRecipeTypes.MILLING) - .catalyst(AllBlocks.MILLSTONE::get) - .build(), + milling = register("milling", MillingCategory::new).addTypedRecipes(AllRecipeTypes.MILLING) + .catalyst(AllBlocks.MILLSTONE::get) + .build(), - crushing = register("crushing", CrushingCategory::new).recipes(AllRecipeTypes.CRUSHING) - .recipesExcluding(AllRecipeTypes.MILLING::getType, AllRecipeTypes.CRUSHING::getType) - .catalyst(AllBlocks.CRUSHING_WHEEL::get) - .build(), + crushing = register("crushing", CrushingCategory::new).addTypedRecipes(AllRecipeTypes.CRUSHING) + .addTypedRecipesExcluding(AllRecipeTypes.MILLING::getType, AllRecipeTypes.CRUSHING::getType) + .catalyst(AllBlocks.CRUSHING_WHEEL::get) + .build(), - pressing = register("pressing", PressingCategory::new).recipes(AllRecipeTypes.PRESSING) - .catalyst(AllBlocks.MECHANICAL_PRESS::get) - .build(), + pressing = register("pressing", PressingCategory::new).addTypedRecipes(AllRecipeTypes.PRESSING) + .catalyst(AllBlocks.MECHANICAL_PRESS::get) + .build(), - washing = register("fan_washing", FanWashingCategory::new).recipes(AllRecipeTypes.SPLASHING) - .catalystStack(ProcessingViaFanCategory.getFan("fan_washing")) - .build(), + washing = register("fan_washing", FanWashingCategory::new).addTypedRecipes(AllRecipeTypes.SPLASHING) + .catalystStack(ProcessingViaFanCategory.getFan("fan_washing")) + .build(), - smoking = register("fan_smoking", FanSmokingCategory::new).recipes(() -> RecipeType.SMOKING) - .catalystStack(ProcessingViaFanCategory.getFan("fan_smoking")) - .build(), + smoking = register("fan_smoking", FanSmokingCategory::new).addTypedRecipes(() -> RecipeType.SMOKING) + .catalystStack(ProcessingViaFanCategory.getFan("fan_smoking")) + .build(), - soul_smoking = register("fan_haunting", FanHauntingCategory::new).recipes(AllRecipeTypes.HAUNTING) - .catalystStack(ProcessingViaFanCategory.getFan("fan_haunting")).build(), + blasting = register("fan_blasting", FanBlastingCategory::new) + .addTypedRecipesExcluding(() -> RecipeType.SMELTING, () -> RecipeType.BLASTING) + .addTypedRecipes(() -> RecipeType.BLASTING) + .removeRecipes(() -> RecipeType.SMOKING) + .catalystStack(ProcessingViaFanCategory.getFan("fan_blasting")) + .build(), - blasting = register("fan_blasting", FanBlastingCategory::new) - .recipesExcluding(() -> RecipeType.SMELTING, () -> RecipeType.BLASTING) - .recipes(() -> RecipeType.BLASTING) - .removeRecipes(() -> RecipeType.SMOKING) - .catalystStack(ProcessingViaFanCategory.getFan("fan_blasting")) - .build(), + haunting = register("fan_haunting", FanHauntingCategory::new).addTypedRecipes(AllRecipeTypes.HAUNTING) + .catalystStack(ProcessingViaFanCategory.getFan("fan_haunting")).build(), - mixing = register("mixing", MixingCategory::standard).recipes(AllRecipeTypes.MIXING::getType) - .catalyst(AllBlocks.MECHANICAL_MIXER::get) - .catalyst(AllBlocks.BASIN::get) - .build(), + mixing = register("mixing", MixingCategory::standard).addTypedRecipes(AllRecipeTypes.MIXING) + .catalyst(AllBlocks.MECHANICAL_MIXER::get) + .catalyst(AllBlocks.BASIN::get) + .build(), - seqAssembly = register("sequenced_assembly", SequencedAssemblyCategory::new) - .recipes(AllRecipeTypes.SEQUENCED_ASSEMBLY::getType) - .build(), + seqAssembly = register("sequenced_assembly", SequencedAssemblyCategory::new) + .addTypedRecipes(AllRecipeTypes.SEQUENCED_ASSEMBLY) + .build(), - autoShapeless = register("automatic_shapeless", MixingCategory::autoShapeless) - .recipes(r -> r instanceof CraftingRecipe && !(r instanceof IShapedRecipe) && r.getIngredients() - .size() > 1 && !MechanicalPressTileEntity.canCompress(r) && !AllRecipeTypes.isManualRecipe(r), - BasinRecipe::convertShapeless) - .catalyst(AllBlocks.MECHANICAL_MIXER::get) - .catalyst(AllBlocks.BASIN::get) - .enableWhen(c -> c.allowShapelessInMixer) - .build(), + autoShapeless = register("automatic_shapeless", MixingCategory::autoShapeless) + .addAllRecipesIf(r -> r instanceof CraftingRecipe && !(r instanceof IShapedRecipe) && r.getIngredients() + .size() > 1 && !MechanicalPressTileEntity.canCompress(r) && !AllRecipeTypes.isManualRecipe(r), + BasinRecipe::convertShapeless) + .catalyst(AllBlocks.MECHANICAL_MIXER::get) + .catalyst(AllBlocks.BASIN::get) + .enableWhen(c -> c.allowShapelessInMixer) + .build(), - brewing = register("automatic_brewing", MixingCategory::autoBrewing) - .recipeList(PotionMixingRecipeManager::getAllBrewingRecipes) - .catalyst(AllBlocks.MECHANICAL_MIXER::get) - .catalyst(AllBlocks.BASIN::get) - .build(), + brewing = register("automatic_brewing", MixingCategory::autoBrewing) + .addRecipes(() -> PotionMixingRecipes.ALL) + .catalyst(AllBlocks.MECHANICAL_MIXER::get) + .catalyst(AllBlocks.BASIN::get) + .build(), - sawing = register("sawing", SawingCategory::new).recipes(AllRecipeTypes.CUTTING) - .catalyst(AllBlocks.MECHANICAL_SAW::get) - .build(), + sawing = register("sawing", SawingCategory::new).addTypedRecipes(AllRecipeTypes.CUTTING) + .catalyst(AllBlocks.MECHANICAL_SAW::get) + .build(), - blockCutting = register("block_cutting", () -> new BlockCuttingCategory(Items.STONE_BRICK_STAIRS)) - .recipeList(() -> CondensedBlockCuttingRecipe.condenseRecipes(findRecipes( - recipe -> recipe.getType() == RecipeType.STONECUTTING && !AllRecipeTypes.isManualRecipe(recipe)))) - .catalyst(AllBlocks.MECHANICAL_SAW::get) - .enableWhen(c -> c.allowStonecuttingOnSaw) - .build(), + blockCutting = register("block_cutting", () -> new BlockCuttingCategory(Items.STONE_BRICK_STAIRS)) + .addRecipes(() -> CondensedBlockCuttingRecipe.condenseRecipes(getTypedRecipesExcluding( + RecipeType.STONECUTTING, recipe -> AllRecipeTypes.isManualRecipe(recipe)))) + .catalyst(AllBlocks.MECHANICAL_SAW::get) + .enableWhen(c -> c.allowStonecuttingOnSaw) + .build(), - woodCutting = register("wood_cutting", () -> new BlockCuttingCategory(Items.OAK_STAIRS)) - .recipeList(() -> CondensedBlockCuttingRecipe - .condenseRecipes(findRecipes(recipe -> recipe.getType() == SawTileEntity.woodcuttingRecipeType.get() - && !AllRecipeTypes.isManualRecipe(recipe)))) - .catalyst(AllBlocks.MECHANICAL_SAW::get) - .enableWhenBool(c -> c.allowWoodcuttingOnSaw.get() && ModList.get() - .isLoaded("druidcraft")) - .build(), + woodCutting = register("wood_cutting", () -> new BlockCuttingCategory(Items.OAK_STAIRS)) + .addRecipes(() -> CondensedBlockCuttingRecipe + .condenseRecipes(getTypedRecipesExcluding(SawTileEntity.woodcuttingRecipeType.get(), + recipe -> AllRecipeTypes.isManualRecipe(recipe)))) + .catalyst(AllBlocks.MECHANICAL_SAW::get) + .enableWhenBool(c -> c.allowWoodcuttingOnSaw.get() && ModList.get() + .isLoaded("druidcraft")) + .build(), - packing = register("packing", PackingCategory::standard).recipes(AllRecipeTypes.COMPACTING) - .catalyst(AllBlocks.MECHANICAL_PRESS::get) - .catalyst(AllBlocks.BASIN::get) - .build(), + packing = register("packing", PackingCategory::standard).addTypedRecipes(AllRecipeTypes.COMPACTING) + .catalyst(AllBlocks.MECHANICAL_PRESS::get) + .catalyst(AllBlocks.BASIN::get) + .build(), - autoSquare = register("automatic_packing", PackingCategory::autoSquare) - .recipes( - r -> (r instanceof CraftingRecipe) && !(r instanceof MechanicalCraftingRecipe) - && MechanicalPressTileEntity.canCompress(r) && !AllRecipeTypes.isManualRecipe(r), - BasinRecipe::convertShapeless) - .catalyst(AllBlocks.MECHANICAL_PRESS::get) - .catalyst(AllBlocks.BASIN::get) - .enableWhen(c -> c.allowShapedSquareInPress) - .build(), + autoSquare = register("automatic_packing", PackingCategory::autoSquare) + .addAllRecipesIf( + r -> (r instanceof CraftingRecipe) && !(r instanceof MechanicalCraftingRecipe) + && MechanicalPressTileEntity.canCompress(r) && !AllRecipeTypes.isManualRecipe(r), + BasinRecipe::convertShapeless) + .catalyst(AllBlocks.MECHANICAL_PRESS::get) + .catalyst(AllBlocks.BASIN::get) + .enableWhen(c -> c.allowShapedSquareInPress) + .build(), - polishing = register("sandpaper_polishing", PolishingCategory::new).recipes(AllRecipeTypes.SANDPAPER_POLISHING) - .catalyst(AllItems.SAND_PAPER::get) - .catalyst(AllItems.RED_SAND_PAPER::get) - .build(), + polishing = register("sandpaper_polishing", PolishingCategory::new).addTypedRecipes(AllRecipeTypes.SANDPAPER_POLISHING) + .catalyst(AllItems.SAND_PAPER::get) + .catalyst(AllItems.RED_SAND_PAPER::get) + .build(), - deploying = register("deploying", DeployingCategory::new) - .recipeList(() -> DeployerApplicationRecipe - .convert(findRecipesByType(AllRecipeTypes.SANDPAPER_POLISHING.getType()))) - .recipes(AllRecipeTypes.DEPLOYING) - .catalyst(AllBlocks.DEPLOYER::get) - .catalyst(AllBlocks.DEPOT::get) - .catalyst(AllItems.BELT_CONNECTOR::get) - .build(), + deploying = register("deploying", DeployingCategory::new) + .addTypedRecipes(AllRecipeTypes.DEPLOYING) + .addTypedRecipes(AllRecipeTypes.SANDPAPER_POLISHING::getType, DeployerApplicationRecipe::convert) + .catalyst(AllBlocks.DEPLOYER::get) + .catalyst(AllBlocks.DEPOT::get) + .catalyst(AllItems.BELT_CONNECTOR::get) + .build(), - mysteryConversion = register("mystery_conversion", MysteriousItemConversionCategory::new) - .recipeList(MysteriousItemConversionCategory::getRecipes) - .build(), + mysteryConversion = register("mystery_conversion", MysteriousItemConversionCategory::new) + .addRecipes(() -> MysteriousItemConversionCategory.RECIPES) + .build(), - spoutFilling = register("spout_filling", SpoutCategory::new).recipes(AllRecipeTypes.FILLING) - .recipeList(() -> SpoutCategory.getRecipes(ingredientManager)) - .catalyst(AllBlocks.SPOUT::get) - .build(), + spoutFilling = register("spout_filling", SpoutCategory::new).addTypedRecipes(AllRecipeTypes.FILLING) + .addRecipeListConsumer(recipes -> SpoutCategory.consumeRecipes(recipes::add, ingredientManager)) + .catalyst(AllBlocks.SPOUT::get) + .build(), - draining = register("draining", ItemDrainCategory::new) - .recipeList(() -> ItemDrainCategory.getRecipes(ingredientManager)) - .recipes(AllRecipeTypes.EMPTYING) - .catalyst(AllBlocks.ITEM_DRAIN::get) - .build(), + draining = register("draining", ItemDrainCategory::new) + .addRecipeListConsumer(recipes -> ItemDrainCategory.consumeRecipes(recipes::add, ingredientManager)) + .addTypedRecipes(AllRecipeTypes.EMPTYING) + .catalyst(AllBlocks.ITEM_DRAIN::get) + .build(), - autoShaped = register("automatic_shaped", MechanicalCraftingCategory::new) - .recipes(r -> r instanceof CraftingRecipe && !(r instanceof IShapedRecipe) && r.getIngredients() - .size() == 1) - .recipes(r -> (r.getType() == RecipeType.CRAFTING - && r.getType() != AllRecipeTypes.MECHANICAL_CRAFTING.getType()) && (r instanceof IShapedRecipe) - && !AllRecipeTypes.isManualRecipe(r)) - .catalyst(AllBlocks.MECHANICAL_CRAFTER::get) - .enableWhen(c -> c.allowRegularCraftingInCrafter) - .build(), + autoShaped = register("automatic_shaped", MechanicalCraftingCategory::new) + .addAllRecipesIf(r -> r instanceof CraftingRecipe && !(r instanceof IShapedRecipe) && r.getIngredients() + .size() == 1) + .addTypedRecipesIf(() -> RecipeType.CRAFTING, recipe -> recipe instanceof IShapedRecipe && !AllRecipeTypes.isManualRecipe(recipe)) + .catalyst(AllBlocks.MECHANICAL_CRAFTER::get) + .enableWhen(c -> c.allowRegularCraftingInCrafter) + .build(), - mechanicalCrafting = - register("mechanical_crafting", MechanicalCraftingCategory::new).recipes(AllRecipeTypes.MECHANICAL_CRAFTING) - .catalyst(AllBlocks.MECHANICAL_CRAFTER::get) - .build(); + mechanicalCrafting = register("mechanical_crafting", MechanicalCraftingCategory::new) + .addTypedRecipes(AllRecipeTypes.MECHANICAL_CRAFTING) + .catalyst(AllBlocks.MECHANICAL_CRAFTER::get) + .build(); private > CategoryBuilder register(String name, Supplier> supplier) { @@ -236,7 +236,7 @@ public class CreateJEI implements IModPlugin { @Override public void registerCategories(IRecipeCategoryRegistration registration) { - allCategories.forEach(registration::addRecipeCategories); + registration.addRecipeCategories(allCategories.toArray(IRecipeCategory[]::new)); } @Override @@ -282,58 +282,81 @@ public class CreateJEI implements IModPlugin { pred = Predicates.alwaysTrue(); } - public CategoryBuilder recipes(IRecipeTypeInfo recipeTypeEntry) { - return recipes(recipeTypeEntry::getType); - } - - public CategoryBuilder recipes(Supplier> recipeType) { - return recipes(r -> r.getType() == recipeType.get()); - } - - public CategoryBuilder recipes(ResourceLocation serializer) { - return recipes(r -> r.getSerializer() - .getRegistryName() - .equals(serializer)); - } - - public CategoryBuilder recipes(Predicate> pred) { - return recipeList(() -> findRecipes(pred)); - } - - public CategoryBuilder recipes(Predicate> pred, Function, T> converter) { - return recipeList(() -> findRecipes(pred), converter); - } - - public CategoryBuilder recipeList(Supplier>> list) { - return recipeList(list, null); - } - - public CategoryBuilder recipeList(Supplier>> list, - Function, T> converter) { - recipeListConsumers.add(recipes -> { - List> toAdd = list.get(); - if (converter != null) - toAdd = toAdd.stream() - .map(converter) - .collect(Collectors.toList()); - recipes.addAll(toAdd); - }); + public CategoryBuilder addRecipeListConsumer(Consumer>> consumer) { + recipeListConsumers.add(consumer); return this; } - public CategoryBuilder recipesExcluding(Supplier> recipeType, - Supplier> excluded) { - recipeListConsumers.add(recipes -> { - recipes.addAll(findRecipesByTypeExcluding(recipeType.get(), excluded.get())); + public CategoryBuilder addRecipes(Supplier>> collection) { + return addRecipeListConsumer(recipes -> recipes.addAll(collection.get())); + } + + public CategoryBuilder addAllRecipesIf(Predicate> pred) { + return addRecipeListConsumer(recipes -> consumeAllRecipes(recipe -> { + if (pred.test(recipe)) { + recipes.add(recipe); + } + })); + } + + public CategoryBuilder addAllRecipesIf(Predicate> pred, Function, T> converter) { + return addRecipeListConsumer(recipes -> consumeAllRecipes(recipe -> { + if (pred.test(recipe)) { + recipes.add(converter.apply(recipe)); + } + })); + } + + public CategoryBuilder addTypedRecipes(IRecipeTypeInfo recipeTypeEntry) { + return addTypedRecipes(recipeTypeEntry::getType); + } + + public CategoryBuilder addTypedRecipes(Supplier> recipeType) { + return addRecipeListConsumer(recipes -> consumeTypedRecipes(recipes::add, recipeType.get())); + } + + public CategoryBuilder addTypedRecipes(Supplier> recipeType, Function, T> converter) { + return addRecipeListConsumer(recipes -> consumeTypedRecipes(recipe -> { + recipes.add(converter.apply(recipe)); + }, recipeType.get())); + } + + public CategoryBuilder addTypedRecipesIf(Supplier> recipeType, + Predicate> pred) { + return addRecipeListConsumer(recipes -> consumeTypedRecipes(recipe -> { + if (pred.test(recipe)) { + recipes.add(recipe); + } + }, recipeType.get())); + } + + public CategoryBuilder addTypedRecipesExcluding(Supplier> recipeType, + Supplier> excluded) { + return addRecipeListConsumer(recipes -> { + List> excludedRecipes = getTypedRecipes(excluded.get()); + consumeTypedRecipes(recipe -> { + for (Recipe excludedRecipe : excludedRecipes) { + if (doInputsMatch(recipe, excludedRecipe)) { + return; + } + } + recipes.add(recipe); + }, recipeType.get()); }); - return this; } public CategoryBuilder removeRecipes(Supplier> recipeType) { - recipeListConsumers.add(recipes -> { - removeRecipesByType(recipes, recipeType.get()); + return addRecipeListConsumer(recipes -> { + List> excludedRecipes = getTypedRecipes(recipeType.get()); + recipes.removeIf(recipe -> { + for (Recipe excludedRecipe : excludedRecipes) { + if (doInputsMatch(recipe, excludedRecipe)) { + return true; + } + } + return false; + }); }); - return this; } public CategoryBuilder catalyst(Supplier supplier) { @@ -371,49 +394,47 @@ public class CreateJEI implements IModPlugin { } - public static List> findRecipes(Predicate> predicate) { - return Minecraft.getInstance() + public static void consumeAllRecipes(Consumer> consumer) { + Minecraft.getInstance() .getConnection() .getRecipeManager() .getRecipes() - .stream() - .filter(predicate) - .collect(Collectors.toList()); + .forEach(consumer); } - public static List> findRecipesByType(RecipeType type) { - return findRecipes(recipe -> recipe.getType() == type); + public static void consumeTypedRecipes(Consumer> consumer, RecipeType type) { + Map> map = Minecraft.getInstance() + .getConnection() + .getRecipeManager() + .recipes + .get(type); + if (map != null) { + map.values().forEach(consumer); + } } - public static List> findRecipesByTypeExcluding(RecipeType type, RecipeType excludingType) { - List> byType = findRecipesByType(type); - removeRecipesByType(byType, excludingType); - return byType; + public static List> getTypedRecipes(RecipeType type) { + List> recipes = new ArrayList<>(); + consumeTypedRecipes(recipes::add, type); + return recipes; } - public static List> findRecipesByTypeExcluding(RecipeType type, RecipeType... excludingTypes) { - List> byType = findRecipesByType(type); - for (RecipeType excludingType : excludingTypes) - removeRecipesByType(byType, excludingType); - return byType; - } - - public static void removeRecipesByType(List> recipes, RecipeType type) { - List> byType = findRecipesByType(type); - recipes.removeIf(recipe -> { - for (Recipe r : byType) - if (doInputsMatch(recipe, r)) - return true; - return false; - }); + public static List> getTypedRecipesExcluding(RecipeType type, Predicate> exclusionPred) { + List> recipes = getTypedRecipes(type); + recipes.removeIf(exclusionPred); + return recipes; } public static boolean doInputsMatch(Recipe recipe1, Recipe recipe2) { + if (recipe1.getIngredients().isEmpty() || recipe2.getIngredients().isEmpty()) { + return false; + } ItemStack[] matchingStacks = recipe1.getIngredients() .get(0) .getItems(); - if (matchingStacks.length == 0) - return true; + if (matchingStacks.length == 0) { + return false; + } if (recipe2.getIngredients() .get(0) .test(matchingStacks[0])) diff --git a/src/main/java/com/simibubi/create/compat/jei/category/BlockCuttingCategory.java b/src/main/java/com/simibubi/create/compat/jei/category/BlockCuttingCategory.java index eed9b78a9..a3c4ae196 100644 --- a/src/main/java/com/simibubi/create/compat/jei/category/BlockCuttingCategory.java +++ b/src/main/java/com/simibubi/create/compat/jei/category/BlockCuttingCategory.java @@ -86,7 +86,7 @@ public class BlockCuttingCategory extends CreateRecipeCategory getOutputs() { return outputs; } - + public List> getCondensedOutputs() { List> result = new ArrayList<>(); int index = 0; @@ -104,6 +104,11 @@ public class BlockCuttingCategory extends CreateRecipeCategory condenseRecipes(List> stoneCuttingRecipes) { List condensed = new ArrayList<>(); Recipes: for (Recipe recipe : stoneCuttingRecipes) { @@ -120,11 +125,6 @@ public class BlockCuttingCategory extends CreateRecipeCategory { drain = new AnimatedItemDrain(); } - public static List getRecipes(IIngredientManager ingredientManager) { - List recipes = new ArrayList<>(); + public static void consumeRecipes(Consumer consumer, IIngredientManager ingredientManager) { + for (ItemStack stack : ingredientManager.getAllIngredients(VanillaTypes.ITEM)) { + if (stack.getItem() instanceof PotionItem) { + FluidStack fluidFromPotionItem = PotionFluidHandler.getFluidFromPotionItem(stack); + Ingredient potion = Ingredient.of(stack); + consumer.accept(new ProcessingRecipeBuilder<>(EmptyingRecipe::new, Create.asResource("potions")) + .withItemIngredients(potion) + .withFluidOutputs(fluidFromPotionItem) + .withSingleItemOutput(new ItemStack(Items.GLASS_BOTTLE)) + .build()); + return; + } - ingredientManager.getAllIngredients(VanillaTypes.ITEM) - .stream() - .forEach(stack -> { - if (stack.getItem() instanceof PotionItem) { - FluidStack fluidFromPotionItem = PotionFluidHandler.getFluidFromPotionItem(stack); - Ingredient potion = Ingredient.of(stack); - recipes.add(new ProcessingRecipeBuilder<>(EmptyingRecipe::new, Create.asResource("potions")) - .withItemIngredients(potion) - .withFluidOutputs(fluidFromPotionItem) - .withSingleItemOutput(new ItemStack(Items.GLASS_BOTTLE)) + LazyOptional capability = + stack.getCapability(CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY); + if (!capability.isPresent()) + return; + + ItemStack copy = stack.copy(); + capability = copy.getCapability(CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY); + IFluidHandlerItem handler = capability.orElse(null); + FluidStack extracted = handler.drain(1000, FluidAction.EXECUTE); + ItemStack result = handler.getContainer(); + if (extracted.isEmpty()) + return; + if (result.isEmpty()) + return; + + Ingredient ingredient = Ingredient.of(stack); + ResourceLocation itemName = stack.getItem() + .getRegistryName(); + ResourceLocation fluidName = extracted.getFluid() + .getRegistryName(); + + consumer.accept(new ProcessingRecipeBuilder<>(EmptyingRecipe::new, + Create.asResource("empty_" + itemName.getNamespace() + "_" + itemName.getPath() + "_of_" + + fluidName.getNamespace() + "_" + fluidName.getPath())).withItemIngredients(ingredient) + .withFluidOutputs(extracted) + .withSingleItemOutput(result) .build()); - return; - } - - LazyOptional capability = - stack.getCapability(CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY); - if (!capability.isPresent()) - return; - - ItemStack copy = stack.copy(); - capability = copy.getCapability(CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY); - IFluidHandlerItem handler = capability.orElse(null); - FluidStack extracted = handler.drain(1000, FluidAction.EXECUTE); - ItemStack result = handler.getContainer(); - if (extracted.isEmpty()) - return; - if (result.isEmpty()) - return; - - Ingredient ingredient = Ingredient.of(stack); - ResourceLocation itemName = stack.getItem() - .getRegistryName(); - ResourceLocation fluidName = extracted.getFluid() - .getRegistryName(); - - recipes.add(new ProcessingRecipeBuilder<>(EmptyingRecipe::new, - Create.asResource("empty_" + itemName.getNamespace() + "_" + itemName.getPath() + "_of_" - + fluidName.getNamespace() + "_" + fluidName.getPath())).withItemIngredients(ingredient) - .withFluidOutputs(extracted) - .withSingleItemOutput(result) - .build()); - }); - - return recipes; + } } @Override diff --git a/src/main/java/com/simibubi/create/compat/jei/category/MechanicalCraftingCategory.java b/src/main/java/com/simibubi/create/compat/jei/category/MechanicalCraftingCategory.java index f2c362120..89f7588e4 100644 --- a/src/main/java/com/simibubi/create/compat/jei/category/MechanicalCraftingCategory.java +++ b/src/main/java/com/simibubi/create/compat/jei/category/MechanicalCraftingCategory.java @@ -155,6 +155,7 @@ public class MechanicalCraftingCategory extends CreateRecipeCategory { - public static List getRecipes() { - List recipes = new ArrayList<>(); - recipes.add(ConversionRecipe.create(AllItems.EMPTY_BLAZE_BURNER.asStack(), AllBlocks.BLAZE_BURNER.asStack())); - recipes.add(ConversionRecipe.create(AllItems.CHROMATIC_COMPOUND.asStack(), AllItems.SHADOW_STEEL.asStack())); - recipes.add(ConversionRecipe.create(AllItems.CHROMATIC_COMPOUND.asStack(), AllItems.REFINED_RADIANCE.asStack())); - recipes.add(ConversionRecipe.create(AllBlocks.PECULIAR_BELL.asStack(), AllBlocks.HAUNTED_BELL.asStack())); - return recipes; + public static final List RECIPES = new ArrayList<>(); + + static { + RECIPES.add(ConversionRecipe.create(AllItems.EMPTY_BLAZE_BURNER.asStack(), AllBlocks.BLAZE_BURNER.asStack())); + RECIPES.add(ConversionRecipe.create(AllBlocks.PECULIAR_BELL.asStack(), AllBlocks.HAUNTED_BELL.asStack())); + RECIPES.add(ConversionRecipe.create(AllItems.CHROMATIC_COMPOUND.asStack(), AllItems.SHADOW_STEEL.asStack())); + RECIPES.add(ConversionRecipe.create(AllItems.CHROMATIC_COMPOUND.asStack(), AllItems.REFINED_RADIANCE.asStack())); } public MysteriousItemConversionCategory() { diff --git a/src/main/java/com/simibubi/create/compat/jei/category/SpoutCategory.java b/src/main/java/com/simibubi/create/compat/jei/category/SpoutCategory.java index 5b96069b2..463b34183 100644 --- a/src/main/java/com/simibubi/create/compat/jei/category/SpoutCategory.java +++ b/src/main/java/com/simibubi/create/compat/jei/category/SpoutCategory.java @@ -1,9 +1,10 @@ package com.simibubi.create.compat.jei.category; -import java.util.ArrayList; import java.util.Arrays; +import java.util.Collection; import java.util.Collections; import java.util.List; +import java.util.function.Consumer; import java.util.stream.Collectors; import com.google.common.collect.ImmutableList; @@ -44,62 +45,55 @@ public class SpoutCategory extends CreateRecipeCategory { spout = new AnimatedSpout(); } - public static List getRecipes(IIngredientManager ingredientManager) { - List recipes = new ArrayList<>(); + public static void consumeRecipes(Consumer consumer, IIngredientManager ingredientManager) { + Collection fluidStacks = ingredientManager.getAllIngredients(VanillaTypes.FLUID); + for (ItemStack stack : ingredientManager.getAllIngredients(VanillaTypes.ITEM)) { + if (stack.getItem() instanceof PotionItem) { + FluidStack fluidFromPotionItem = PotionFluidHandler.getFluidFromPotionItem(stack); + Ingredient bottle = Ingredient.of(Items.GLASS_BOTTLE); + consumer.accept(new ProcessingRecipeBuilder<>(FillingRecipe::new, Create.asResource("potions")) + .withItemIngredients(bottle) + .withFluidIngredients(FluidIngredient.fromFluidStack(fluidFromPotionItem)) + .withSingleItemOutput(stack) + .build()); + return; + } - ingredientManager.getAllIngredients(VanillaTypes.ITEM) - .stream() - .forEach(stack -> { - if (stack.getItem() instanceof PotionItem) { - FluidStack fluidFromPotionItem = PotionFluidHandler.getFluidFromPotionItem(stack); - Ingredient bottle = Ingredient.of(Items.GLASS_BOTTLE); - recipes.add(new ProcessingRecipeBuilder<>(FillingRecipe::new, Create.asResource("potions")) - .withItemIngredients(bottle) - .withFluidIngredients(FluidIngredient.fromFluidStack(fluidFromPotionItem)) - .withSingleItemOutput(stack) - .build()); - return; - } + LazyOptional capability = + stack.getCapability(CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY); + if (!capability.isPresent()) + return; - LazyOptional capability = - stack.getCapability(CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY); - if (!capability.isPresent()) - return; + for (FluidStack fluidStack : fluidStacks) { + ItemStack copy = stack.copy(); + copy.getCapability(CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY) + .ifPresent(fhi -> { + if (!GenericItemFilling.isFluidHandlerValid(copy, fhi)) + return; + FluidStack fluidCopy = fluidStack.copy(); + fluidCopy.setAmount(1000); + fhi.fill(fluidCopy, FluidAction.EXECUTE); + ItemStack container = fhi.getContainer(); + if (container.sameItem(copy)) + return; + if (container.isEmpty()) + return; - ingredientManager.getAllIngredients(VanillaTypes.FLUID) - .stream() - .forEach(fluidStack -> { - ItemStack copy = stack.copy(); - copy.getCapability(CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY) - .ifPresent(fhi -> { - if (!GenericItemFilling.isFluidHandlerValid(copy, fhi)) - return; - FluidStack fluidCopy = fluidStack.copy(); - fluidCopy.setAmount(1000); - fhi.fill(fluidCopy, FluidAction.EXECUTE); - ItemStack container = fhi.getContainer(); - if (container.sameItem(copy)) - return; - if (container.isEmpty()) - return; - - Ingredient bucket = Ingredient.of(stack); - ResourceLocation itemName = stack.getItem() - .getRegistryName(); - ResourceLocation fluidName = fluidCopy.getFluid() - .getRegistryName(); - recipes.add(new ProcessingRecipeBuilder<>(FillingRecipe::new, - Create.asResource("fill_" + itemName.getNamespace() + "_" + itemName.getPath() - + "_with_" + fluidName.getNamespace() + "_" + fluidName.getPath())) - .withItemIngredients(bucket) - .withFluidIngredients(FluidIngredient.fromFluidStack(fluidCopy)) - .withSingleItemOutput(container) - .build()); - }); + Ingredient bucket = Ingredient.of(stack); + ResourceLocation itemName = stack.getItem() + .getRegistryName(); + ResourceLocation fluidName = fluidCopy.getFluid() + .getRegistryName(); + consumer.accept(new ProcessingRecipeBuilder<>(FillingRecipe::new, + Create.asResource("fill_" + itemName.getNamespace() + "_" + itemName.getPath() + + "_with_" + fluidName.getNamespace() + "_" + fluidName.getPath())) + .withItemIngredients(bucket) + .withFluidIngredients(FluidIngredient.fromFluidStack(fluidCopy)) + .withSingleItemOutput(container) + .build()); }); - }); - - return recipes; + } + } } @Override diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/MovedProjectileDispenserBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/MovedProjectileDispenserBehaviour.java index ba7fbc260..4add4a76e 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/MovedProjectileDispenserBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/MovedProjectileDispenserBehaviour.java @@ -1,20 +1,17 @@ package com.simibubi.create.content.contraptions.components.actors.dispenser; -import java.lang.reflect.Method; - import javax.annotation.Nullable; import com.simibubi.create.content.contraptions.components.structureMovement.MovementContext; +import com.simibubi.create.foundation.mixin.accessor.AbstractProjectileDispenseBehaviorAccessor; import net.minecraft.core.BlockPos; -import net.minecraft.core.Position; import net.minecraft.core.dispenser.AbstractProjectileDispenseBehavior; import net.minecraft.world.entity.projectile.Projectile; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; import net.minecraft.world.level.LevelAccessor; import net.minecraft.world.phys.Vec3; -import net.minecraftforge.fml.util.ObfuscationReflectionHelper; public abstract class MovedProjectileDispenserBehaviour extends MovedDefaultDispenseItemBehaviour { @@ -50,51 +47,22 @@ public abstract class MovedProjectileDispenserBehaviour extends MovedDefaultDisp } public static MovedProjectileDispenserBehaviour of(AbstractProjectileDispenseBehavior vanillaBehaviour) { + AbstractProjectileDispenseBehaviorAccessor accessor = (AbstractProjectileDispenseBehaviorAccessor) vanillaBehaviour; return new MovedProjectileDispenserBehaviour() { @Override protected Projectile getProjectileEntity(Level world, double x, double y, double z, ItemStack itemStack) { - try { - return (Projectile) MovedProjectileDispenserBehaviour.getProjectileEntityLookup().invoke(vanillaBehaviour, world, new SimplePos(x, y, z) , itemStack); - } catch (Throwable ignored) { - } - return null; + return accessor.create$callGetProjectile(world, new SimplePos(x, y, z), itemStack); } @Override protected float getProjectileInaccuracy() { - try { - return (float) MovedProjectileDispenserBehaviour.getProjectileInaccuracyLookup().invoke(vanillaBehaviour); - } catch (Throwable ignored) { - } - return super.getProjectileInaccuracy(); + return accessor.create$callGetUncertainty(); } @Override protected float getProjectileVelocity() { - try { - return (float) MovedProjectileDispenserBehaviour.getProjectileVelocityLookup().invoke(vanillaBehaviour); - } catch (Throwable ignored) { - } - return super.getProjectileVelocity(); + return accessor.create$callGetPower(); } }; } - - private static Method getProjectileEntityLookup() { - Method getProjectileEntity = ObfuscationReflectionHelper.findMethod(AbstractProjectileDispenseBehavior.class, "m_6895_", Level.class, Position.class, ItemStack.class); // getProjectile - getProjectileEntity.setAccessible(true); - return getProjectileEntity; - } - - private static Method getProjectileInaccuracyLookup() { - Method getProjectileInaccuracy = ObfuscationReflectionHelper.findMethod(AbstractProjectileDispenseBehavior.class, "m_7101_"); // getUncertainty - getProjectileInaccuracy.setAccessible(true); - return getProjectileInaccuracy; - } - - private static Method getProjectileVelocityLookup() { - Method getProjectileVelocity = ObfuscationReflectionHelper.findMethod(AbstractProjectileDispenseBehavior.class, "m_7104_"); // getPower - getProjectileVelocity.setAccessible(true); - return getProjectileVelocity; - } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerApplicationRecipe.java b/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerApplicationRecipe.java index 3a4686762..33a01e405 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerApplicationRecipe.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerApplicationRecipe.java @@ -3,7 +3,6 @@ package com.simibubi.create.content.contraptions.components.deployer; import java.util.List; import java.util.Set; import java.util.function.Supplier; -import java.util.stream.Collectors; import com.google.gson.JsonObject; import com.simibubi.create.AllBlocks; @@ -74,17 +73,15 @@ public class DeployerApplicationRecipe extends ProcessingRecipe i return ingredients.get(0); } - public static List convert(List> sandpaperRecipes) { - return sandpaperRecipes.stream() - .map(r -> new ProcessingRecipeBuilder<>(DeployerApplicationRecipe::new, new ResourceLocation(r.getId() - .getNamespace(), - r.getId() - .getPath() + "_using_deployer")).require(r.getIngredients() + public static DeployerApplicationRecipe convert(Recipe sandpaperRecipe) { + return new ProcessingRecipeBuilder<>(DeployerApplicationRecipe::new, + new ResourceLocation(sandpaperRecipe.getId().getNamespace(), + sandpaperRecipe.getId().getPath() + "_using_deployer")) + .require(sandpaperRecipe.getIngredients() .get(0)) - .require(AllItemTags.SANDPAPER.tag) - .output(r.getResultItem()) - .build()) - .collect(Collectors.toList()); + .require(AllItemTags.SANDPAPER.tag) + .output(sandpaperRecipe.getResultItem()) + .build(); } @Override diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/mixer/MechanicalMixerTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/mixer/MechanicalMixerTileEntity.java index 14aa9da24..2e18ba5ac 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/mixer/MechanicalMixerTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/mixer/MechanicalMixerTileEntity.java @@ -7,7 +7,7 @@ import com.simibubi.create.AllRecipeTypes; import com.simibubi.create.AllSoundEvents; import com.simibubi.create.content.contraptions.components.press.MechanicalPressTileEntity; import com.simibubi.create.content.contraptions.fluids.FluidFX; -import com.simibubi.create.content.contraptions.fluids.recipe.PotionMixingRecipeManager; +import com.simibubi.create.content.contraptions.fluids.recipe.PotionMixingRecipes; import com.simibubi.create.content.contraptions.processing.BasinOperatingTileEntity; import com.simibubi.create.content.contraptions.processing.BasinTileEntity; import com.simibubi.create.content.contraptions.processing.ProcessingRecipe; @@ -225,7 +225,7 @@ public class MechanicalMixerTileEntity extends BasinOperatingTileEntity { if (stack.isEmpty()) continue; - List list = PotionMixingRecipeManager.ALL.get(stack.getItem()); + List list = PotionMixingRecipes.BY_ITEM.get(stack.getItem()); if (list == null) continue; for (MixingRecipe mixingRecipe : list) diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/AbstractContraptionEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/AbstractContraptionEntity.java index 07a1d4811..dee9a52cf 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/AbstractContraptionEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/AbstractContraptionEntity.java @@ -51,7 +51,6 @@ import net.minecraft.world.phys.Vec3; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.entity.IEntityAdditionalSpawnData; -import net.minecraftforge.fml.util.ObfuscationReflectionHelper; import net.minecraftforge.network.NetworkHooks; import net.minecraftforge.network.PacketDistributor; @@ -551,8 +550,7 @@ public abstract class AbstractContraptionEntity extends Entity implements IEntit for (Entity entity : passengers) { // setPos has world accessing side-effects when removed == null - String srg = "f_146795_"; // removalReason - ObfuscationReflectionHelper.setPrivateValue(Entity.class, entity, RemovalReason.UNLOADED_TO_CHUNK, srg); + entity.removalReason = RemovalReason.UNLOADED_TO_CHUNK; // Gather passengers into same chunk when saving Vec3 prevVec = entity.position(); @@ -560,7 +558,7 @@ public abstract class AbstractContraptionEntity extends Entity implements IEntit // Super requires all passengers to not be removed in order to write them to the // tag - ObfuscationReflectionHelper.setPrivateValue(Entity.class, entity, null, srg); + entity.removalReason = null; } CompoundTag tag = super.saveWithoutId(nbt); diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/BlankSailBlockItem.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/BlankSailBlockItem.java new file mode 100644 index 000000000..49f8ad8e7 --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/BlankSailBlockItem.java @@ -0,0 +1,32 @@ +package com.simibubi.create.content.contraptions.components.structureMovement.bearing; + +import java.util.Map; + +import com.simibubi.create.AllBlocks; +import com.tterrag.registrate.util.entry.BlockEntry; + +import net.minecraft.world.item.BlockItem; +import net.minecraft.world.item.Item; +import net.minecraft.world.level.block.Block; + +public class BlankSailBlockItem extends BlockItem { + public BlankSailBlockItem(Block block, Properties properties) { + super(block, properties); + } + + @Override + public void registerBlocks(Map blockToItemMap, Item item) { + super.registerBlocks(blockToItemMap, item); + for (BlockEntry entry : AllBlocks.DYED_SAILS) { + blockToItemMap.put(entry.get(), item); + } + } + + @Override + public void removeFromBlockToItemMap(Map blockToItemMap, Item item) { + super.removeFromBlockToItemMap(blockToItemMap, item); + for (BlockEntry entry : AllBlocks.DYED_SAILS) { + blockToItemMap.remove(entry.get()); + } + } +} diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/SailBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/SailBlock.java index 22bb49683..9c12af7c0 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/SailBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/SailBlock.java @@ -20,12 +20,14 @@ import com.simibubi.create.foundation.utility.placement.PlacementOffset; import net.minecraft.MethodsReturnNonnullByDefault; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; +import net.minecraft.core.NonNullList; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.BlockItem; +import net.minecraft.world.item.CreativeModeTab; import net.minecraft.world.item.DyeColor; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ShearsItem; @@ -62,6 +64,13 @@ public class SailBlock extends WrenchableDirectionalBlock { this.color = color; } + @Override + public void fillItemCategory(CreativeModeTab tab, NonNullList items) { + if (frame || color == DyeColor.WHITE) { + super.fillItemCategory(tab, items); + } + } + @Override public BlockState getStateForPlacement(BlockPlaceContext context) { BlockState state = super.getStateForPlacement(context); diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/potion/PotionFluid.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/potion/PotionFluid.java index 8531e43fd..45059a5d9 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/potion/PotionFluid.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/potion/PotionFluid.java @@ -24,22 +24,49 @@ import net.minecraftforge.registries.ForgeRegistries; public class PotionFluid extends VirtualFluid { - public enum BottleType { - REGULAR, SPLASH, LINGERING; - } - public PotionFluid(Properties properties) { super(properties); } - public static FluidStack withEffects(int amount, Potion potion, List customEffects) { + public static FluidStack of(int amount, Potion potion) { FluidStack fluidStack = new FluidStack(AllFluids.POTION.get() .getSource(), amount); addPotionToFluidStack(fluidStack, potion); + return fluidStack; + } + + public static FluidStack withEffects(int amount, Potion potion, List customEffects) { + FluidStack fluidStack = of(amount, potion); appendEffects(fluidStack, customEffects); return fluidStack; } + public static FluidStack addPotionToFluidStack(FluidStack fs, Potion potion) { + ResourceLocation resourcelocation = ForgeRegistries.POTIONS.getKey(potion); + if (potion == Potions.EMPTY) { + fs.removeChildTag("Potion"); + return fs; + } + fs.getOrCreateTag() + .putString("Potion", resourcelocation.toString()); + return fs; + } + + public static FluidStack appendEffects(FluidStack fs, Collection customEffects) { + if (customEffects.isEmpty()) + return fs; + CompoundTag compoundnbt = fs.getOrCreateTag(); + ListTag listnbt = compoundnbt.getList("CustomPotionEffects", 9); + for (MobEffectInstance effectinstance : customEffects) + listnbt.add(effectinstance.save(new CompoundTag())); + compoundnbt.put("CustomPotionEffects", listnbt); + return fs; + } + + public enum BottleType { + REGULAR, SPLASH, LINGERING; + } + public static class PotionFluidAttributes extends FluidAttributes { public PotionFluidAttributes(Builder builder, Fluid fluid) { @@ -70,26 +97,4 @@ public class PotionFluid extends VirtualFluid { } - public static FluidStack addPotionToFluidStack(FluidStack fs, Potion potion) { - ResourceLocation resourcelocation = ForgeRegistries.POTIONS.getKey(potion); - if (potion == Potions.EMPTY) { - fs.removeChildTag("Potion"); - return fs; - } - fs.getOrCreateTag() - .putString("Potion", resourcelocation.toString()); - return fs; - } - - public static FluidStack appendEffects(FluidStack fs, Collection customEffects) { - if (customEffects.isEmpty()) - return fs; - CompoundTag compoundnbt = fs.getOrCreateTag(); - ListTag listnbt = compoundnbt.getList("CustomPotionEffects", 9); - for (MobEffectInstance effectinstance : customEffects) - listnbt.add(effectinstance.save(new CompoundTag())); - compoundnbt.put("CustomPotionEffects", listnbt); - return fs; - } - } diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/potion/PotionFluidHandler.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/potion/PotionFluidHandler.java index 7d8f6fa41..febb50e29 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/potion/PotionFluidHandler.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/potion/PotionFluidHandler.java @@ -51,16 +51,23 @@ public class PotionFluidHandler { public static FluidStack getFluidFromPotionItem(ItemStack stack) { Potion potion = PotionUtils.getPotion(stack); List list = PotionUtils.getCustomEffects(stack); - FluidStack fluid = PotionFluid.withEffects(250, potion, list); - BottleType bottleTypeFromItem = bottleTypeFromItem(stack); + BottleType bottleTypeFromItem = bottleTypeFromItem(stack.getItem()); if (potion == Potions.WATER && list.isEmpty() && bottleTypeFromItem == BottleType.REGULAR) - return new FluidStack(Fluids.WATER, fluid.getAmount()); + return new FluidStack(Fluids.WATER, 250); + FluidStack fluid = PotionFluid.withEffects(250, potion, list); NBTHelper.writeEnum(fluid.getOrCreateTag(), "Bottle", bottleTypeFromItem); return fluid; } - public static BottleType bottleTypeFromItem(ItemStack stack) { - Item item = stack.getItem(); + public static FluidStack getFluidFromPotion(Potion potion, BottleType bottleType, int amount) { + if (potion == Potions.WATER && bottleType == BottleType.REGULAR) + return new FluidStack(Fluids.WATER, amount); + FluidStack fluid = PotionFluid.of(amount, potion); + NBTHelper.writeEnum(fluid.getOrCreateTag(), "Bottle", bottleType); + return fluid; + } + + public static BottleType bottleTypeFromItem(Item item) { if (item == Items.LINGERING_POTION) return BottleType.LINGERING; if (item == Items.SPLASH_POTION) diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/recipe/FluidTransferRecipes.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/recipe/FluidTransferRecipes.java deleted file mode 100644 index 056b6df09..000000000 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/recipe/FluidTransferRecipes.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.simibubi.create.content.contraptions.fluids.recipe; - -import java.util.ArrayList; -import java.util.List; - -import net.minecraft.server.packs.resources.ResourceManagerReloadListener; -import net.minecraft.world.item.Item; -import net.minecraft.world.item.ItemStack; - -public class FluidTransferRecipes { - - public static List POTION_ITEMS = new ArrayList<>(); - public static List FILLED_BUCKETS = new ArrayList<>(); - - public static final ResourceManagerReloadListener LISTENER = resourceManager -> { - POTION_ITEMS.clear(); - FILLED_BUCKETS.clear(); - }; - -} diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/recipe/PotionMixingRecipeManager.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/recipe/PotionMixingRecipeManager.java deleted file mode 100644 index 0267c326e..000000000 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/recipe/PotionMixingRecipeManager.java +++ /dev/null @@ -1,147 +0,0 @@ -package com.simibubi.create.content.contraptions.fluids.recipe; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.stream.Collectors; - -import com.simibubi.create.Create; -import com.simibubi.create.content.contraptions.components.mixer.MixingRecipe; -import com.simibubi.create.content.contraptions.fluids.potion.PotionFluidHandler; -import com.simibubi.create.content.contraptions.processing.HeatCondition; -import com.simibubi.create.content.contraptions.processing.ProcessingRecipeBuilder; -import com.simibubi.create.foundation.fluid.FluidIngredient; - -import net.minecraft.server.packs.resources.ResourceManagerReloadListener; -import net.minecraft.world.item.Item; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.alchemy.Potion; -import net.minecraft.world.item.alchemy.PotionBrewing; -import net.minecraft.world.item.alchemy.PotionUtils; -import net.minecraft.world.item.alchemy.Potions; -import net.minecraft.world.item.crafting.Ingredient; -import net.minecraftforge.common.brewing.BrewingRecipeRegistry; -import net.minecraftforge.common.brewing.IBrewingRecipe; -import net.minecraftforge.common.brewing.VanillaBrewingRecipe; -import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.registries.ForgeRegistries; - -public class PotionMixingRecipeManager { - - public static Map> ALL = new HashMap<>(); - - public static List getAllBrewingRecipes() { - List mixingRecipes = new ArrayList<>(); - - // Vanilla - for (IBrewingRecipe iBrewingRecipe : BrewingRecipeRegistry.getRecipes()) { - if (!(iBrewingRecipe instanceof VanillaBrewingRecipe)) - continue; - - List bottles = new ArrayList<>(); - PotionBrewing.ALLOWED_CONTAINERS.forEach(i -> { - for (ItemStack itemStack : i.getItems()) - bottles.add(itemStack); - }); - - Collection reagents = getAllReagents(iBrewingRecipe); - - Set basicPotions = new HashSet<>(); - for (Potion potion : ForgeRegistries.POTIONS.getValues()) { - if (potion == Potions.EMPTY) - continue; - for (ItemStack stack : bottles) - basicPotions.add(PotionUtils.setPotion(stack.copy(), potion)); - } - - Set uniqueKeys = new HashSet<>(); - List potionFrontier = new ArrayList<>(); - List newPotions = new ArrayList<>(); - potionFrontier.addAll(basicPotions); - - int recipeIndex = 0; - - while (!potionFrontier.isEmpty()) { - newPotions.clear(); - - for (ItemStack inputPotionStack : potionFrontier) { - Potion inputPotion = PotionUtils.getPotion(inputPotionStack); - - for (ItemStack potionReagent : reagents) { - ItemStack outputPotionStack = iBrewingRecipe.getOutput(inputPotionStack.copy(), potionReagent); - if (outputPotionStack.isEmpty()) - continue; - - String uniqueKey = potionReagent.getItem() - .getRegistryName() - .toString() + "_" - + inputPotion.getRegistryName() - .toString() - + "_" + inputPotionStack.getItem() - .getRegistryName() - .toString(); - - if (!uniqueKeys.add(uniqueKey)) - continue; - - if (inputPotionStack.getItem() == outputPotionStack.getItem()) { - Potion outputPotion = PotionUtils.getPotion(outputPotionStack); - if (outputPotion == Potions.WATER) - continue; - } - - FluidStack fluidFromPotionItem = PotionFluidHandler.getFluidFromPotionItem(inputPotionStack); - FluidStack fluidFromPotionItem2 = PotionFluidHandler.getFluidFromPotionItem(outputPotionStack); - fluidFromPotionItem.setAmount(1000); - fluidFromPotionItem2.setAmount(1000); - - MixingRecipe mixingRecipe = new ProcessingRecipeBuilder<>(MixingRecipe::new, - Create.asResource("potion_" + recipeIndex++)).require(Ingredient.of(potionReagent)) - .require(FluidIngredient.fromFluidStack(fluidFromPotionItem)) - .output(fluidFromPotionItem2) - .requiresHeat(HeatCondition.HEATED) - .build(); - - mixingRecipes.add(mixingRecipe); - newPotions.add(outputPotionStack); - } - } - - potionFrontier.clear(); - potionFrontier.addAll(newPotions); - } - - break; - } - - // TODO Modded brewing recipes? - - return mixingRecipes; - } - - public static Collection getAllReagents(IBrewingRecipe recipe) { - return ForgeRegistries.ITEMS.getValues() - .stream() - .map(ItemStack::new) - .filter(recipe::isIngredient) - .collect(Collectors.toList()); - } - - public static final ResourceManagerReloadListener LISTENER = resourceManager -> { - ALL.clear(); - getAllBrewingRecipes().forEach(recipe -> { - for (Ingredient ingredient : recipe.getIngredients()) { - for (ItemStack itemStack : ingredient.getItems()) { - ALL.computeIfAbsent(itemStack.getItem(), t -> new ArrayList<>()) - .add(recipe); - return; - } - } - }); - }; - -} diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/recipe/PotionMixingRecipes.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/recipe/PotionMixingRecipes.java new file mode 100644 index 000000000..4f91335b4 --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/recipe/PotionMixingRecipes.java @@ -0,0 +1,141 @@ +package com.simibubi.create.content.contraptions.fluids.recipe; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import com.simibubi.create.Create; +import com.simibubi.create.content.contraptions.components.mixer.MixingRecipe; +import com.simibubi.create.content.contraptions.fluids.potion.PotionFluid.BottleType; +import com.simibubi.create.content.contraptions.fluids.potion.PotionFluidHandler; +import com.simibubi.create.content.contraptions.processing.HeatCondition; +import com.simibubi.create.content.contraptions.processing.ProcessingRecipeBuilder; +import com.simibubi.create.foundation.fluid.FluidIngredient; + +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.world.item.alchemy.Potion; +import net.minecraft.world.item.alchemy.PotionBrewing; +import net.minecraft.world.item.alchemy.Potions; +import net.minecraft.world.item.crafting.Ingredient; +import net.minecraftforge.common.brewing.BrewingRecipe; +import net.minecraftforge.common.brewing.BrewingRecipeRegistry; +import net.minecraftforge.common.brewing.IBrewingRecipe; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.registries.ForgeRegistries; + +public class PotionMixingRecipes { + + public static final List SUPPORTED_CONTAINERS = List.of(Items.POTION, Items.SPLASH_POTION, Items.LINGERING_POTION); + + public static final List ALL = createRecipes(); + public static final Map> BY_ITEM = sortRecipesByItem(ALL); + + private static List createRecipes() { + List mixingRecipes = new ArrayList<>(); + + int recipeIndex = 0; + + List allowedSupportedContainers = new ArrayList<>(); + List supportedContainerStacks = new ArrayList<>(); + for (Item container : SUPPORTED_CONTAINERS) { + ItemStack stack = new ItemStack(container); + supportedContainerStacks.add(stack); + if (PotionBrewing.ALLOWED_CONTAINER.test(stack)) { + allowedSupportedContainers.add(container); + } + } + + for (Item container : allowedSupportedContainers) { + BottleType bottleType = PotionFluidHandler.bottleTypeFromItem(container); + for (PotionBrewing.Mix mix : PotionBrewing.POTION_MIXES) { + FluidStack fromFluid = PotionFluidHandler.getFluidFromPotion(mix.from.get(), bottleType, 1000); + FluidStack toFluid = PotionFluidHandler.getFluidFromPotion(mix.to.get(), bottleType, 1000); + + mixingRecipes.add(createRecipe("potion_mixing_vanilla_" + recipeIndex++, mix.ingredient, fromFluid, toFluid)); + } + } + + for (PotionBrewing.Mix mix : PotionBrewing.CONTAINER_MIXES) { + Item from = mix.from.get(); + if (!allowedSupportedContainers.contains(from)) { + continue; + } + Item to = mix.to.get(); + if (!allowedSupportedContainers.contains(to)) { + continue; + } + BottleType fromBottleType = PotionFluidHandler.bottleTypeFromItem(from); + BottleType toBottleType = PotionFluidHandler.bottleTypeFromItem(to); + Ingredient ingredient = mix.ingredient; + + for (Potion potion : ForgeRegistries.POTIONS.getValues()) { + if (potion == Potions.EMPTY) { + continue; + } + + FluidStack fromFluid = PotionFluidHandler.getFluidFromPotion(potion, fromBottleType, 1000); + FluidStack toFluid = PotionFluidHandler.getFluidFromPotion(potion, toBottleType, 1000); + + mixingRecipes.add(createRecipe("potion_mixing_vanilla_" + recipeIndex++, ingredient, fromFluid, toFluid)); + } + } + + recipeIndex = 0; + for (IBrewingRecipe recipe : BrewingRecipeRegistry.getRecipes()) { + if (recipe instanceof BrewingRecipe recipeImpl) { + ItemStack output = recipeImpl.getOutput(); + if (!SUPPORTED_CONTAINERS.contains(output.getItem())) { + continue; + } + + Ingredient input = recipeImpl.getInput(); + Ingredient ingredient = recipeImpl.getIngredient(); + FluidStack outputFluid = null; + for (ItemStack stack : supportedContainerStacks) { + if (input.test(stack)) { + FluidStack inputFluid = PotionFluidHandler.getFluidFromPotionItem(stack); + if (outputFluid == null) { + outputFluid = PotionFluidHandler.getFluidFromPotionItem(output); + } + mixingRecipes.add(createRecipe("potion_mixing_modded_" + recipeIndex++, ingredient, inputFluid, outputFluid)); + } + } + } + } + + return mixingRecipes; + } + + private static MixingRecipe createRecipe(String id, Ingredient ingredient, FluidStack fromFluid, FluidStack toFluid) { + return new ProcessingRecipeBuilder<>(MixingRecipe::new, + Create.asResource(id)).require(ingredient) + .require(FluidIngredient.fromFluidStack(fromFluid)) + .output(toFluid) + .requiresHeat(HeatCondition.HEATED) + .build(); + } + + private static Map> sortRecipesByItem(List all) { + Map> byItem = new HashMap<>(); + Set processedItems = new HashSet<>(); + for (MixingRecipe recipe : all) { + for (Ingredient ingredient : recipe.getIngredients()) { + for (ItemStack itemStack : ingredient.getItems()) { + Item item = itemStack.getItem(); + if (processedItems.add(item)) { + byItem.computeIfAbsent(item, i -> new ArrayList<>()) + .add(recipe); + } + } + } + processedItems.clear(); + } + return byItem; + } + +} diff --git a/src/main/java/com/simibubi/create/content/contraptions/processing/burner/BlazeBurnerBlockItem.java b/src/main/java/com/simibubi/create/content/contraptions/processing/burner/BlazeBurnerBlockItem.java index ca66886c5..e90367af9 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/processing/burner/BlazeBurnerBlockItem.java +++ b/src/main/java/com/simibubi/create/content/contraptions/processing/burner/BlazeBurnerBlockItem.java @@ -16,7 +16,6 @@ import net.minecraft.core.particles.ParticleTypes; import net.minecraft.resources.ResourceLocation; import net.minecraft.sounds.SoundEvents; import net.minecraft.sounds.SoundSource; -import net.minecraft.util.random.SimpleWeightedRandomList; import net.minecraft.util.random.WeightedEntry.Wrapper; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; @@ -36,7 +35,6 @@ import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.SpawnerBlockEntity; import net.minecraft.world.phys.Vec3; -import net.minecraftforge.fml.util.ObfuscationReflectionHelper; @MethodsReturnNonnullByDefault @ParametersAreNonnullByDefault @@ -90,17 +88,15 @@ public class BlazeBurnerBlockItem extends BlockItem { return super.useOn(context); BaseSpawner spawner = ((SpawnerBlockEntity) te).getSpawner(); - SimpleWeightedRandomList spawnPotentials = - ObfuscationReflectionHelper.getPrivateValue(BaseSpawner.class, spawner, "f_45443_"); // spawnPotentials - List possibleSpawns = spawnPotentials.unwrap() + List possibleSpawns = spawner.spawnPotentials.unwrap() .stream() .map(Wrapper::getData) .toList(); if (possibleSpawns.isEmpty()) { possibleSpawns = new ArrayList<>(); - possibleSpawns.add(ObfuscationReflectionHelper.getPrivateValue(BaseSpawner.class, spawner, "f_45444_")); // nextSpawnData + possibleSpawns.add(spawner.nextSpawnData); } ResourceLocation blazeId = EntityType.BLAZE.getRegistryName(); diff --git a/src/main/java/com/simibubi/create/content/curiosities/armor/DivingBootsItem.java b/src/main/java/com/simibubi/create/content/curiosities/armor/DivingBootsItem.java index f0f7bac38..4f154a3fd 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/armor/DivingBootsItem.java +++ b/src/main/java/com/simibubi/create/content/curiosities/armor/DivingBootsItem.java @@ -11,7 +11,6 @@ import net.minecraft.world.phys.Vec3; import net.minecraftforge.event.entity.living.LivingEvent.LivingUpdateEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.common.Mod.EventBusSubscriber; -import net.minecraftforge.fml.util.ObfuscationReflectionHelper; @EventBusSubscriber public class DivingBootsItem extends CopperArmorItem { @@ -27,7 +26,7 @@ public class DivingBootsItem extends CopperArmorItem { return; Vec3 motion = entity.getDeltaMovement(); - Boolean isJumping = ObfuscationReflectionHelper.getPrivateValue(LivingEntity.class, entity, "f_20899_"); // jumping + boolean isJumping = entity.jumping; entity.setOnGround(entity.isOnGround() || entity.verticalCollision); if (isJumping && entity.isOnGround()) { diff --git a/src/main/java/com/simibubi/create/content/curiosities/tools/BlueprintItem.java b/src/main/java/com/simibubi/create/content/curiosities/tools/BlueprintItem.java index e16af7835..a6175d379 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/tools/BlueprintItem.java +++ b/src/main/java/com/simibubi/create/content/curiosities/tools/BlueprintItem.java @@ -29,7 +29,6 @@ import net.minecraft.world.item.crafting.Recipe; import net.minecraft.world.level.Level; import net.minecraftforge.common.crafting.IShapedRecipe; import net.minecraftforge.common.crafting.MultiItemValue; -import net.minecraftforge.fml.util.ObfuscationReflectionHelper; import net.minecraftforge.items.ItemStackHandler; public class BlueprintItem extends Item { @@ -92,8 +91,7 @@ public class BlueprintItem extends Item { } private static ItemStack convertIngredientToFilter(Ingredient ingredient) { - Ingredient.Value[] acceptedItems = - ObfuscationReflectionHelper.getPrivateValue(Ingredient.class, ingredient, "f_43902_"); // values + Ingredient.Value[] acceptedItems = ingredient.values; if (acceptedItems == null || acceptedItems.length > 18) return ItemStack.EMPTY; if (acceptedItems.length == 0) diff --git a/src/main/java/com/simibubi/create/content/curiosities/tools/SandPaperItem.java b/src/main/java/com/simibubi/create/content/curiosities/tools/SandPaperItem.java index 8963d5f5f..f75ec59ee 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/tools/SandPaperItem.java +++ b/src/main/java/com/simibubi/create/content/curiosities/tools/SandPaperItem.java @@ -8,6 +8,7 @@ import javax.annotation.ParametersAreNonnullByDefault; import com.simibubi.create.AllSoundEvents; import com.simibubi.create.foundation.item.CustomUseEffectsItem; import com.simibubi.create.foundation.item.render.SimpleCustomRenderer; +import com.simibubi.create.foundation.mixin.accessor.LivingEntityAccessor; import com.simibubi.create.foundation.utility.VecHelper; import net.minecraft.MethodsReturnNonnullByDefault; @@ -213,7 +214,7 @@ public class SandPaperItem extends Item implements CustomUseEffectsItem { CompoundTag tag = stack.getOrCreateTag(); if (tag.contains("Polishing")) { ItemStack polishing = ItemStack.of(tag.getCompound("Polishing")); - entity.spawnItemParticles(polishing, 1); + ((LivingEntityAccessor) entity).create$callSpawnItemParticles(polishing, 1); } // After 6 ticks play the sound every 7th diff --git a/src/main/java/com/simibubi/create/content/schematics/ItemRequirement.java b/src/main/java/com/simibubi/create/content/schematics/ItemRequirement.java index d4fce9dde..507e659ca 100644 --- a/src/main/java/com/simibubi/create/content/schematics/ItemRequirement.java +++ b/src/main/java/com/simibubi/create/content/schematics/ItemRequirement.java @@ -9,12 +9,8 @@ import java.util.stream.Stream; import com.simibubi.create.foundation.tileEntity.SmartTileEntity; import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.decoration.ArmorStand; import net.minecraft.world.entity.decoration.ItemFrame; -import net.minecraft.world.entity.vehicle.AbstractMinecart; -import net.minecraft.world.entity.vehicle.Boat; -import net.minecraft.world.item.BlockItem; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; @@ -78,7 +74,7 @@ public class ItemRequirement { if (block instanceof ISpecialBlockItemRequirement) { baseRequirement = ((ISpecialBlockItemRequirement) block).getRequiredItems(state, te); } else { - baseRequirement = ofBlockState(state, block); + baseRequirement = ofBlockState(state); } // Behaviours can add additional required items @@ -88,11 +84,14 @@ public class ItemRequirement { return baseRequirement; } - private static ItemRequirement ofBlockState(BlockState state, Block block) { + private static ItemRequirement ofBlockState(BlockState state) { + Block block = state.getBlock(); if (block == Blocks.AIR) return NONE; - Item item = BlockItem.BY_BLOCK.getOrDefault(state.getBlock(), Items.AIR); + Item item = block.asItem(); + if (item == Items.AIR) + return INVALID; // double slab needs two items if (state.hasProperty(BlockStateProperties.SLAB_TYPE) && state.getValue(BlockStateProperties.SLAB_TYPE) == SlabType.DOUBLE) @@ -106,48 +105,33 @@ public class ItemRequirement { if (block instanceof FarmBlock || block instanceof DirtPathBlock) return new ItemRequirement(ItemUseType.CONSUME, Arrays.asList(new ItemStack(Items.DIRT))); - return item == Items.AIR ? INVALID : new ItemRequirement(ItemUseType.CONSUME, item); + return new ItemRequirement(ItemUseType.CONSUME, item); } public static ItemRequirement of(Entity entity) { - EntityType type = entity.getType(); - if (entity instanceof ISpecialEntityItemRequirement) return ((ISpecialEntityItemRequirement) entity).getRequiredItems(); - if (type == EntityType.ITEM_FRAME) { - ItemFrame ife = (ItemFrame) entity; + if (entity instanceof ItemFrame itemFrame) { ItemStack frame = new ItemStack(Items.ITEM_FRAME); - ItemStack displayedItem = ife.getItem(); + ItemStack displayedItem = itemFrame.getItem(); if (displayedItem.isEmpty()) return new ItemRequirement(ItemUseType.CONSUME, Items.ITEM_FRAME); return new ItemRequirement(ItemUseType.CONSUME, Arrays.asList(frame, displayedItem)); } - if (type == EntityType.PAINTING) - return new ItemRequirement(ItemUseType.CONSUME, Items.PAINTING); - - if (type == EntityType.ARMOR_STAND) { + if (entity instanceof ArmorStand armorStand) { List requirements = new ArrayList<>(); - ArmorStand armorStandEntity = (ArmorStand) entity; - armorStandEntity.getAllSlots().forEach(requirements::add); requirements.add(new ItemStack(Items.ARMOR_STAND)); + armorStand.getAllSlots().forEach(requirements::add); return new ItemRequirement(ItemUseType.CONSUME, requirements); } - if (entity instanceof AbstractMinecart) { - AbstractMinecart minecartEntity = (AbstractMinecart) entity; - return new ItemRequirement(ItemUseType.CONSUME, minecartEntity.getCartItem().getItem()); + ItemStack pickedStack = entity.getPickResult(); + if (pickedStack != null) { + return new ItemRequirement(ItemUseType.CONSUME, pickedStack); } - if (entity instanceof Boat) { - Boat boatEntity = (Boat) entity; - return new ItemRequirement(ItemUseType.CONSUME, boatEntity.getDropItem()); - } - - if (type == EntityType.END_CRYSTAL) - return new ItemRequirement(ItemUseType.CONSUME, Items.END_CRYSTAL); - return INVALID; } diff --git a/src/main/java/com/simibubi/create/content/schematics/SchematicChunkSource.java b/src/main/java/com/simibubi/create/content/schematics/SchematicChunkSource.java index 46db43d30..48b250207 100644 --- a/src/main/java/com/simibubi/create/content/schematics/SchematicChunkSource.java +++ b/src/main/java/com/simibubi/create/content/schematics/SchematicChunkSource.java @@ -8,6 +8,7 @@ import javax.annotation.Nullable; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; +import net.minecraft.core.Registry; import net.minecraft.core.RegistryAccess; import net.minecraft.resources.ResourceKey; import net.minecraft.server.level.ChunkHolder; @@ -41,7 +42,6 @@ import net.minecraft.world.level.storage.WritableLevelData; import net.minecraft.world.scores.Scoreboard; import net.minecraft.world.ticks.BlackholeTickAccess; import net.minecraft.world.ticks.LevelTickAccess; -import net.minecraftforge.fml.util.ObfuscationReflectionHelper; public class SchematicChunkSource extends ChunkSource { private final Level fallbackWorld; @@ -92,7 +92,7 @@ public class SchematicChunkSource extends ChunkSource { public static class EmptierChunk extends LevelChunk { private static final class DummyLevel extends Level { - RegistryAccess access; + private RegistryAccess access; private DummyLevel(WritableLevelData p_46450_, ResourceKey p_46451_, DimensionType p_46452_, Supplier p_46453_, boolean p_46454_, boolean p_46455_, long p_46456_) { @@ -204,7 +204,8 @@ public class SchematicChunkSource extends ChunkSource { } private static final DummyLevel DUMMY_LEVEL = new DummyLevel(null, null, - ObfuscationReflectionHelper.getPrivateValue(DimensionType.class, null, "f_63848_"), null, false, false, 0); + RegistryAccess.builtin().registryOrThrow(Registry.DIMENSION_TYPE_REGISTRY).getOrThrow(DimensionType.OVERWORLD_LOCATION), + null, false, false, 0); public EmptierChunk(RegistryAccess registryAccess) { super(DUMMY_LEVEL.withAccess(registryAccess), null); diff --git a/src/main/java/com/simibubi/create/content/schematics/block/LaunchedItem.java b/src/main/java/com/simibubi/create/content/schematics/block/LaunchedItem.java index 99f97cf6f..16feed7cf 100644 --- a/src/main/java/com/simibubi/create/content/schematics/block/LaunchedItem.java +++ b/src/main/java/com/simibubi/create/content/schematics/block/LaunchedItem.java @@ -5,6 +5,7 @@ import java.util.Optional; import com.simibubi.create.AllBlocks; import com.simibubi.create.content.contraptions.relays.belt.BeltBlock; import com.simibubi.create.content.contraptions.relays.belt.BeltPart; +import com.simibubi.create.content.contraptions.relays.belt.BeltSlope; import com.simibubi.create.content.contraptions.relays.belt.item.BeltConnectorItem; import com.simibubi.create.content.contraptions.relays.elementary.AbstractShaftBlock; import com.simibubi.create.foundation.utility.BlockHelper; @@ -148,11 +149,10 @@ public abstract class LaunchedItem { @Override void place(Level world) { - // todo place belt boolean isStart = state.getValue(BeltBlock.PART) == BeltPart.START; BlockPos offset = BeltBlock.nextSegmentPosition(state, BlockPos.ZERO, isStart); int i = length - 1; - Axis axis = state.getValue(BeltBlock.HORIZONTAL_FACING).getClockWise().getAxis(); + Axis axis = state.getValue(BeltBlock.SLOPE) == BeltSlope.SIDEWAYS ? Axis.Y : state.getValue(BeltBlock.HORIZONTAL_FACING).getClockWise().getAxis(); world.setBlockAndUpdate(target, AllBlocks.SHAFT.getDefaultState().setValue(AbstractShaftBlock.AXIS, axis)); BeltConnectorItem .createBelts(world, target, target.offset(offset.getX() * i, offset.getY() * i, offset.getZ() * i)); diff --git a/src/main/java/com/simibubi/create/content/schematics/block/SchematicannonRenderer.java b/src/main/java/com/simibubi/create/content/schematics/block/SchematicannonRenderer.java index 4fb273f13..f41be9754 100644 --- a/src/main/java/com/simibubi/create/content/schematics/block/SchematicannonRenderer.java +++ b/src/main/java/com/simibubi/create/content/schematics/block/SchematicannonRenderer.java @@ -8,6 +8,8 @@ import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; import com.mojang.math.Vector3f; import com.simibubi.create.AllBlockPartials; +import com.simibubi.create.AllBlocks; +import com.simibubi.create.content.schematics.block.LaunchedItem.ForBelt; import com.simibubi.create.content.schematics.block.LaunchedItem.ForBlockState; import com.simibubi.create.content.schematics.block.LaunchedItem.ForEntity; import com.simibubi.create.foundation.render.CachedBufferer; @@ -165,18 +167,23 @@ public class SchematicannonRenderer extends SafeTileEntityRenderer extends CriterionTriggerBase< @SafeVarargs public final Instance forEntries(@Nullable T... entries) { - return new Instance<>(this, entries == null ? null : Sets.newHashSet(entries)); + return new Instance<>(this, entries == null ? null : createLinkedHashSet(entries)); } public void trigger(ServerPlayer player, @Nullable T registryEntry) { @@ -70,6 +70,12 @@ public abstract class StringSerializableTrigger extends CriterionTriggerBase< @Nullable protected abstract String getKey(T value); + private static LinkedHashSet createLinkedHashSet(T[] elements) { + LinkedHashSet set = new LinkedHashSet<>(elements.length); + Collections.addAll(set, elements); + return set; + } + public static class Instance extends CriterionTriggerBase.Instance { @Nullable diff --git a/src/main/java/com/simibubi/create/foundation/block/CopperBlockSet.java b/src/main/java/com/simibubi/create/foundation/block/CopperBlockSet.java index 969c0a886..0a2c93745 100644 --- a/src/main/java/com/simibubi/create/foundation/block/CopperBlockSet.java +++ b/src/main/java/com/simibubi/create/foundation/block/CopperBlockSet.java @@ -38,7 +38,6 @@ import net.minecraft.world.level.block.WeatheringCopperStairBlock; import net.minecraft.world.level.block.state.BlockBehaviour.Properties; import net.minecraft.world.level.block.state.BlockState; import net.minecraftforge.client.model.generators.ModelProvider; -import net.minecraftforge.fml.util.ObfuscationReflectionHelper; public class CopperBlockSet { protected static final WeatherState[] WEATHER_STATES = WeatherState.values(); @@ -325,9 +324,8 @@ public class CopperBlockSet { WeatheringCopperStairBlock block = new WeatheringCopperStairBlock(state, Blocks.AIR.defaultBlockState(), p); // WeatheringCopperStairBlock does not have a constructor that takes a Supplier, - // so reflection is the easiest solution - ObfuscationReflectionHelper.setPrivateValue(StairBlock.class, block, defaultStateSupplier, - "stateSupplier"); + // so setting the field directly is the easiest solution + block.stateSupplier = defaultStateSupplier; return block; }; } diff --git a/src/main/java/com/simibubi/create/foundation/block/DyedBlockList.java b/src/main/java/com/simibubi/create/foundation/block/DyedBlockList.java index 1a293fce1..e947ccf65 100644 --- a/src/main/java/com/simibubi/create/foundation/block/DyedBlockList.java +++ b/src/main/java/com/simibubi/create/foundation/block/DyedBlockList.java @@ -1,6 +1,8 @@ package com.simibubi.create.foundation.block; import java.util.Arrays; +import java.util.Iterator; +import java.util.NoSuchElementException; import java.util.function.Function; import com.tterrag.registrate.util.entry.BlockEntry; @@ -8,7 +10,7 @@ import com.tterrag.registrate.util.entry.BlockEntry; import net.minecraft.world.item.DyeColor; import net.minecraft.world.level.block.Block; -public class DyedBlockList { +public class DyedBlockList implements Iterable> { private static final int COLOR_AMOUNT = DyeColor.values().length; @@ -39,4 +41,24 @@ public class DyedBlockList { return (BlockEntry[]) Arrays.copyOf(values, values.length); } + @Override + public Iterator> iterator() { + return new Iterator<>() { + private int index = 0; + + @Override + public boolean hasNext() { + return index < values.length; + } + + @SuppressWarnings("unchecked") + @Override + public BlockEntry next() { + if (!hasNext()) + throw new NoSuchElementException(); + return (BlockEntry) values[index++]; + } + }; + } + } diff --git a/src/main/java/com/simibubi/create/foundation/command/FlySpeedCommand.java b/src/main/java/com/simibubi/create/foundation/command/FlySpeedCommand.java index f89edb392..0f6bf0e27 100644 --- a/src/main/java/com/simibubi/create/foundation/command/FlySpeedCommand.java +++ b/src/main/java/com/simibubi/create/foundation/command/FlySpeedCommand.java @@ -11,7 +11,6 @@ import net.minecraft.commands.arguments.EntityArgument; import net.minecraft.network.chat.TextComponent; import net.minecraft.network.protocol.game.ClientboundPlayerAbilitiesPacket; import net.minecraft.server.level.ServerPlayer; -import net.minecraftforge.fml.util.ObfuscationReflectionHelper; public class FlySpeedCommand { @@ -35,8 +34,7 @@ public class FlySpeedCommand { private static int sendFlySpeedUpdate(CommandContext ctx, ServerPlayer player, float speed) { ClientboundPlayerAbilitiesPacket packet = new ClientboundPlayerAbilitiesPacket(player.getAbilities()); - // packet.setFlySpeed(speed); - ObfuscationReflectionHelper.setPrivateValue(ClientboundPlayerAbilitiesPacket.class, packet, speed, "f_132663_"); // flyingSpeed + packet.flyingSpeed = speed; player.connection.send(packet); ctx.getSource() diff --git a/src/main/java/com/simibubi/create/foundation/data/recipe/CompatMetals.java b/src/main/java/com/simibubi/create/foundation/data/recipe/CompatMetals.java new file mode 100644 index 000000000..dde76b668 --- /dev/null +++ b/src/main/java/com/simibubi/create/foundation/data/recipe/CompatMetals.java @@ -0,0 +1,42 @@ +package com.simibubi.create.foundation.data.recipe; + +import static com.simibubi.create.foundation.data.recipe.Mods.EID; +import static com.simibubi.create.foundation.data.recipe.Mods.IE; +import static com.simibubi.create.foundation.data.recipe.Mods.INF; +import static com.simibubi.create.foundation.data.recipe.Mods.MEK; +import static com.simibubi.create.foundation.data.recipe.Mods.MW; +import static com.simibubi.create.foundation.data.recipe.Mods.SM; +import static com.simibubi.create.foundation.data.recipe.Mods.TH; + +import com.simibubi.create.foundation.utility.Lang; + +public enum CompatMetals { + ALUMINUM(IE, SM), + LEAD(MEK, TH, MW, IE, SM, EID), + NICKEL(TH, IE, SM), + OSMIUM(MEK), + PLATINUM(SM), + QUICKSILVER(MW), + SILVER(TH, MW, IE, SM, INF), + TIN(TH, MEK, MW, SM), + URANIUM(MEK, IE, SM); + + private final Mods[] mods; + private final String name; + + CompatMetals(Mods... mods) { + this.name = Lang.asId(name()); + this.mods = mods; + } + + public String getName() { + return name; + } + + /** + * These mods must provide an ingot and nugget variant of the corresponding metal. + */ + public Mods[] getMods() { + return mods; + } +} diff --git a/src/main/java/com/simibubi/create/foundation/data/recipe/CrushingRecipeGen.java b/src/main/java/com/simibubi/create/foundation/data/recipe/CrushingRecipeGen.java index 24f0b5a3f..bae6790ca 100644 --- a/src/main/java/com/simibubi/create/foundation/data/recipe/CrushingRecipeGen.java +++ b/src/main/java/com/simibubi/create/foundation/data/recipe/CrushingRecipeGen.java @@ -1,5 +1,15 @@ package com.simibubi.create.foundation.data.recipe; +import static com.simibubi.create.foundation.data.recipe.CompatMetals.ALUMINUM; +import static com.simibubi.create.foundation.data.recipe.CompatMetals.LEAD; +import static com.simibubi.create.foundation.data.recipe.CompatMetals.NICKEL; +import static com.simibubi.create.foundation.data.recipe.CompatMetals.OSMIUM; +import static com.simibubi.create.foundation.data.recipe.CompatMetals.PLATINUM; +import static com.simibubi.create.foundation.data.recipe.CompatMetals.QUICKSILVER; +import static com.simibubi.create.foundation.data.recipe.CompatMetals.SILVER; +import static com.simibubi.create.foundation.data.recipe.CompatMetals.TIN; +import static com.simibubi.create.foundation.data.recipe.CompatMetals.URANIUM; + import java.util.function.Supplier; import java.util.function.UnaryOperator; @@ -93,30 +103,30 @@ public class CrushingRecipeGen extends ProcessingRecipeGen { RAW_IRON_ORE = rawOre(() -> Items.RAW_IRON, AllItems.CRUSHED_IRON::get, 1), RAW_GOLD_ORE = rawOre(() -> Items.RAW_GOLD, AllItems.CRUSHED_GOLD::get, 1), - OSMIUM_RAW_ORE = moddedRawOre("osmium", AllItems.CRUSHED_OSMIUM::get, 1), - PLATINUM_RAW_ORE = moddedRawOre("platinum", AllItems.CRUSHED_PLATINUM::get, 1), - SILVER_RAW_ORE = moddedRawOre("silver", AllItems.CRUSHED_SILVER::get, 1), - TIN_RAW_ORE = moddedRawOre("tin", AllItems.CRUSHED_TIN::get, 1), - QUICKSILVER_RAW_ORE = moddedRawOre("quicksilver", AllItems.CRUSHED_QUICKSILVER::get, 1), - LEAD_RAW_ORE = moddedRawOre("lead", AllItems.CRUSHED_LEAD::get, 1), - ALUMINUM_RAW_ORE = moddedRawOre("aluminum", AllItems.CRUSHED_BAUXITE::get, 1), - URANIUM_RAW_ORE = moddedRawOre("uranium", AllItems.CRUSHED_URANIUM::get, 1), - NICKEL_RAW_ORE = moddedRawOre("nickel", AllItems.CRUSHED_NICKEL::get, 1), + OSMIUM_RAW_ORE = moddedRawOre(OSMIUM, AllItems.CRUSHED_OSMIUM::get, 1), + PLATINUM_RAW_ORE = moddedRawOre(PLATINUM, AllItems.CRUSHED_PLATINUM::get, 1), + SILVER_RAW_ORE = moddedRawOre(SILVER, AllItems.CRUSHED_SILVER::get, 1), + TIN_RAW_ORE = moddedRawOre(TIN, AllItems.CRUSHED_TIN::get, 1), + QUICKSILVER_RAW_ORE = moddedRawOre(QUICKSILVER, AllItems.CRUSHED_QUICKSILVER::get, 1), + LEAD_RAW_ORE = moddedRawOre(LEAD, AllItems.CRUSHED_LEAD::get, 1), + ALUMINUM_RAW_ORE = moddedRawOre(ALUMINUM, AllItems.CRUSHED_BAUXITE::get, 1), + URANIUM_RAW_ORE = moddedRawOre(URANIUM, AllItems.CRUSHED_URANIUM::get, 1), + NICKEL_RAW_ORE = moddedRawOre(NICKEL, AllItems.CRUSHED_NICKEL::get, 1), RAW_COPPER_BLOCK = rawOre(() -> Items.RAW_COPPER_BLOCK,AllItems.CRUSHED_COPPER::get, 9), RAW_ZINC_BLOCK = rawOre(AllBlocks.RAW_ZINC_BLOCK::get, AllItems.CRUSHED_ZINC::get, 9), RAW_IRON_BLOCK = rawOre(() -> Items.RAW_IRON_BLOCK, AllItems.CRUSHED_IRON::get, 9), RAW_GOLD_BLOCK = rawOre(() -> Items.RAW_GOLD_BLOCK, AllItems.CRUSHED_GOLD::get, 9), - OSMIUM_RAW_BLOCK = moddedRawOre("osmium", AllItems.CRUSHED_OSMIUM::get, 9), - PLATINUM_RAW_BLOCK = moddedRawOre("platinum", AllItems.CRUSHED_PLATINUM::get, 9), - SILVER_RAW_BLOCK = moddedRawOre("silver", AllItems.CRUSHED_SILVER::get, 9), - TIN_RAW_BLOCK = moddedRawOre("tin", AllItems.CRUSHED_TIN::get, 9), - QUICKSILVER_RAW_BLOCK = moddedRawOre("quicksilver", AllItems.CRUSHED_QUICKSILVER::get, 9), - LEAD_RAW_BLOCK = moddedRawOre("lead", AllItems.CRUSHED_LEAD::get, 9), - ALUMINUM_RAW_BLOCK = moddedRawOre("aluminum", AllItems.CRUSHED_BAUXITE::get, 9), - URANIUM_RAW_BLOCK = moddedRawOre("uranium", AllItems.CRUSHED_URANIUM::get, 9), - NICKEL_RAW_BLOCK = moddedRawOre("nickel", AllItems.CRUSHED_NICKEL::get, 9), + OSMIUM_RAW_BLOCK = moddedRawOre(OSMIUM, AllItems.CRUSHED_OSMIUM::get, 9), + PLATINUM_RAW_BLOCK = moddedRawOre(PLATINUM, AllItems.CRUSHED_PLATINUM::get, 9), + SILVER_RAW_BLOCK = moddedRawOre(SILVER, AllItems.CRUSHED_SILVER::get, 9), + TIN_RAW_BLOCK = moddedRawOre(TIN, AllItems.CRUSHED_TIN::get, 9), + QUICKSILVER_RAW_BLOCK = moddedRawOre(QUICKSILVER, AllItems.CRUSHED_QUICKSILVER::get, 9), + LEAD_RAW_BLOCK = moddedRawOre(LEAD, AllItems.CRUSHED_LEAD::get, 9), + ALUMINUM_RAW_BLOCK = moddedRawOre(ALUMINUM, AllItems.CRUSHED_BAUXITE::get, 9), + URANIUM_RAW_BLOCK = moddedRawOre(URANIUM, AllItems.CRUSHED_URANIUM::get, 9), + NICKEL_RAW_BLOCK = moddedRawOre(NICKEL, AllItems.CRUSHED_NICKEL::get, 9), NETHER_WART = create("nether_wart_block", b -> b.duration(150) .require(Blocks.NETHER_WART_BLOCK) @@ -211,8 +221,9 @@ public class CrushingRecipeGen extends ProcessingRecipeGen { .output(result.get(), amount) .output(.75f, AllItems.EXP_NUGGET.get(), amount)); } - - protected GeneratedRecipe moddedRawOre(String name, Supplier result, int amount) { + + protected GeneratedRecipe moddedRawOre(CompatMetals metal, Supplier result, int amount) { + String name = metal.getName(); return create("raw_" + name + (amount == 1 ? "_ore" : "_block"), b -> { String prefix = amount == 1 ? "raw_ores/" : "raw_blocks/"; return b.duration(400) @@ -222,9 +233,9 @@ public class CrushingRecipeGen extends ProcessingRecipeGen { .output(.75f, AllItems.EXP_NUGGET.get(), amount); }); } - - public CrushingRecipeGen(DataGenerator p_i48262_1_) { - super(p_i48262_1_); + + public CrushingRecipeGen(DataGenerator dataGenerator) { + super(dataGenerator); } @Override diff --git a/src/main/java/com/simibubi/create/foundation/data/recipe/Mods.java b/src/main/java/com/simibubi/create/foundation/data/recipe/Mods.java index d18c6104c..7d99d6316 100644 --- a/src/main/java/com/simibubi/create/foundation/data/recipe/Mods.java +++ b/src/main/java/com/simibubi/create/foundation/data/recipe/Mods.java @@ -14,8 +14,8 @@ public enum Mods { ; - private String id; - private boolean reversedPrefix; + private final String id; + private final boolean reversedPrefix; private Mods(String id, boolean reversedPrefix) { this.id = id; @@ -24,11 +24,11 @@ public enum Mods { public ResourceLocation ingotOf(String type) { return new ResourceLocation(id, reversedPrefix ? "ingot_" + type : type + "_ingot"); } - + public ResourceLocation nuggetOf(String type) { return new ResourceLocation(id, reversedPrefix ? "nugget_" + type : type + "_nugget"); } - + public ResourceLocation oreOf(String type) { return new ResourceLocation(id, reversedPrefix ? "ore_" + type : type + "_ore"); } @@ -36,9 +36,9 @@ public enum Mods { public ResourceLocation deepslateOreOf(String type) { return new ResourceLocation(id, reversedPrefix ? "deepslate_ore_" + type : "deepslate_" + type + "_ore"); } - + public String getId() { return id; } - + } diff --git a/src/main/java/com/simibubi/create/foundation/data/recipe/StandardRecipeGen.java b/src/main/java/com/simibubi/create/foundation/data/recipe/StandardRecipeGen.java index 2bba667d5..36c3f301e 100644 --- a/src/main/java/com/simibubi/create/foundation/data/recipe/StandardRecipeGen.java +++ b/src/main/java/com/simibubi/create/foundation/data/recipe/StandardRecipeGen.java @@ -1,12 +1,14 @@ package com.simibubi.create.foundation.data.recipe; -import static com.simibubi.create.foundation.data.recipe.Mods.EID; -import static com.simibubi.create.foundation.data.recipe.Mods.IE; -import static com.simibubi.create.foundation.data.recipe.Mods.INF; -import static com.simibubi.create.foundation.data.recipe.Mods.MEK; -import static com.simibubi.create.foundation.data.recipe.Mods.MW; -import static com.simibubi.create.foundation.data.recipe.Mods.SM; -import static com.simibubi.create.foundation.data.recipe.Mods.TH; +import static com.simibubi.create.foundation.data.recipe.CompatMetals.ALUMINUM; +import static com.simibubi.create.foundation.data.recipe.CompatMetals.LEAD; +import static com.simibubi.create.foundation.data.recipe.CompatMetals.NICKEL; +import static com.simibubi.create.foundation.data.recipe.CompatMetals.OSMIUM; +import static com.simibubi.create.foundation.data.recipe.CompatMetals.PLATINUM; +import static com.simibubi.create.foundation.data.recipe.CompatMetals.QUICKSILVER; +import static com.simibubi.create.foundation.data.recipe.CompatMetals.SILVER; +import static com.simibubi.create.foundation.data.recipe.CompatMetals.TIN; +import static com.simibubi.create.foundation.data.recipe.CompatMetals.URANIUM; import java.util.ArrayList; import java.util.List; @@ -1023,15 +1025,15 @@ public class StandardRecipeGen extends CreateRecipeProvider { CRUSHED_COPPER = blastCrushedMetal(() -> Items.COPPER_INGOT, AllItems.CRUSHED_COPPER::get), CRUSHED_ZINC = blastCrushedMetal(AllItems.ZINC_INGOT::get, AllItems.CRUSHED_ZINC::get), - CRUSHED_OSMIUM = blastModdedCrushedMetal(AllItems.CRUSHED_OSMIUM, "osmium", MEK), - CRUSHED_PLATINUM = blastModdedCrushedMetal(AllItems.CRUSHED_PLATINUM, "platinum", SM), - CRUSHED_SILVER = blastModdedCrushedMetal(AllItems.CRUSHED_SILVER, "silver", MW, TH, IE, SM, INF), - CRUSHED_TIN = blastModdedCrushedMetal(AllItems.CRUSHED_TIN, "tin", MEK, TH, MW, SM), - CRUSHED_LEAD = blastModdedCrushedMetal(AllItems.CRUSHED_LEAD, "lead", MEK, MW, TH, IE, SM, EID), - CRUSHED_QUICKSILVER = blastModdedCrushedMetal(AllItems.CRUSHED_QUICKSILVER, "quicksilver", MW), - CRUSHED_BAUXITE = blastModdedCrushedMetal(AllItems.CRUSHED_BAUXITE, "aluminum", IE, SM), - CRUSHED_URANIUM = blastModdedCrushedMetal(AllItems.CRUSHED_URANIUM, "uranium", MEK, IE, SM), - CRUSHED_NICKEL = blastModdedCrushedMetal(AllItems.CRUSHED_NICKEL, "nickel", TH, IE, SM), + CRUSHED_OSMIUM = blastModdedCrushedMetal(AllItems.CRUSHED_OSMIUM, OSMIUM), + CRUSHED_PLATINUM = blastModdedCrushedMetal(AllItems.CRUSHED_PLATINUM, PLATINUM), + CRUSHED_SILVER = blastModdedCrushedMetal(AllItems.CRUSHED_SILVER, SILVER), + CRUSHED_TIN = blastModdedCrushedMetal(AllItems.CRUSHED_TIN, TIN), + CRUSHED_LEAD = blastModdedCrushedMetal(AllItems.CRUSHED_LEAD, LEAD), + CRUSHED_QUICKSILVER = blastModdedCrushedMetal(AllItems.CRUSHED_QUICKSILVER, QUICKSILVER), + CRUSHED_BAUXITE = blastModdedCrushedMetal(AllItems.CRUSHED_BAUXITE, ALUMINUM), + CRUSHED_URANIUM = blastModdedCrushedMetal(AllItems.CRUSHED_URANIUM, URANIUM), + CRUSHED_NICKEL = blastModdedCrushedMetal(AllItems.CRUSHED_NICKEL, NICKEL), ZINC_ORE = create(AllItems.ZINC_INGOT::get).withSuffix("_from_ore") .viaCookingTag(() -> AllTags.forgeItemTag("ores/zinc")) @@ -1089,8 +1091,9 @@ public class StandardRecipeGen extends CreateRecipeProvider { .inBlastFurnace(); } - GeneratedRecipe blastModdedCrushedMetal(ItemEntry ingredient, String metalName, Mods... mods) { - for (Mods mod : mods) { + GeneratedRecipe blastModdedCrushedMetal(ItemEntry ingredient, CompatMetals metal) { + String metalName = metal.getName(); + for (Mods mod : metal.getMods()) { ResourceLocation ingot = mod.ingotOf(metalName); String modId = mod.getId(); create(ingot).withSuffix("_compat_" + modId) diff --git a/src/main/java/com/simibubi/create/foundation/data/recipe/WashingRecipeGen.java b/src/main/java/com/simibubi/create/foundation/data/recipe/WashingRecipeGen.java index bb917080d..94633a135 100644 --- a/src/main/java/com/simibubi/create/foundation/data/recipe/WashingRecipeGen.java +++ b/src/main/java/com/simibubi/create/foundation/data/recipe/WashingRecipeGen.java @@ -1,12 +1,14 @@ package com.simibubi.create.foundation.data.recipe; -import static com.simibubi.create.foundation.data.recipe.Mods.EID; -import static com.simibubi.create.foundation.data.recipe.Mods.IE; -import static com.simibubi.create.foundation.data.recipe.Mods.INF; -import static com.simibubi.create.foundation.data.recipe.Mods.MEK; -import static com.simibubi.create.foundation.data.recipe.Mods.MW; -import static com.simibubi.create.foundation.data.recipe.Mods.SM; -import static com.simibubi.create.foundation.data.recipe.Mods.TH; +import static com.simibubi.create.foundation.data.recipe.CompatMetals.ALUMINUM; +import static com.simibubi.create.foundation.data.recipe.CompatMetals.LEAD; +import static com.simibubi.create.foundation.data.recipe.CompatMetals.NICKEL; +import static com.simibubi.create.foundation.data.recipe.CompatMetals.OSMIUM; +import static com.simibubi.create.foundation.data.recipe.CompatMetals.PLATINUM; +import static com.simibubi.create.foundation.data.recipe.CompatMetals.QUICKSILVER; +import static com.simibubi.create.foundation.data.recipe.CompatMetals.SILVER; +import static com.simibubi.create.foundation.data.recipe.CompatMetals.TIN; +import static com.simibubi.create.foundation.data.recipe.CompatMetals.URANIUM; import java.util.function.Supplier; @@ -50,15 +52,15 @@ public class WashingRecipeGen extends ProcessingRecipeGen { CRUSHED_GOLD = crushedOre(AllItems.CRUSHED_GOLD, () -> Items.GOLD_NUGGET, () -> Items.QUARTZ, .5f), CRUSHED_IRON = crushedOre(AllItems.CRUSHED_IRON, () -> Items.IRON_NUGGET, () -> Items.REDSTONE, .125f), - CRUSHED_OSMIUM = moddedCrushedOre(AllItems.CRUSHED_OSMIUM, "osmium", MEK), - CRUSHED_PLATINUM = moddedCrushedOre(AllItems.CRUSHED_PLATINUM, "platinum", SM), - CRUSHED_SILVER = moddedCrushedOre(AllItems.CRUSHED_SILVER, "silver", TH, MW, IE, SM, INF), - CRUSHED_TIN = moddedCrushedOre(AllItems.CRUSHED_TIN, "tin", TH, MEK, MW, SM), - CRUSHED_LEAD = moddedCrushedOre(AllItems.CRUSHED_LEAD, "lead", MEK, TH, MW, IE, SM, EID), - CRUSHED_QUICKSILVER = moddedCrushedOre(AllItems.CRUSHED_QUICKSILVER, "quicksilver", MW), - CRUSHED_BAUXITE = moddedCrushedOre(AllItems.CRUSHED_BAUXITE, "aluminum", IE, SM), - CRUSHED_URANIUM = moddedCrushedOre(AllItems.CRUSHED_URANIUM, "uranium", MEK, IE, SM), - CRUSHED_NICKEL = moddedCrushedOre(AllItems.CRUSHED_NICKEL, "nickel", TH, IE, SM), + CRUSHED_OSMIUM = moddedCrushedOre(AllItems.CRUSHED_OSMIUM, OSMIUM), + CRUSHED_PLATINUM = moddedCrushedOre(AllItems.CRUSHED_PLATINUM, PLATINUM), + CRUSHED_SILVER = moddedCrushedOre(AllItems.CRUSHED_SILVER, SILVER), + CRUSHED_TIN = moddedCrushedOre(AllItems.CRUSHED_TIN, TIN), + CRUSHED_LEAD = moddedCrushedOre(AllItems.CRUSHED_LEAD, LEAD), + CRUSHED_QUICKSILVER = moddedCrushedOre(AllItems.CRUSHED_QUICKSILVER, QUICKSILVER), + CRUSHED_BAUXITE = moddedCrushedOre(AllItems.CRUSHED_BAUXITE, ALUMINUM), + CRUSHED_URANIUM = moddedCrushedOre(AllItems.CRUSHED_URANIUM, URANIUM), + CRUSHED_NICKEL = moddedCrushedOre(AllItems.CRUSHED_NICKEL, NICKEL), ICE = convert(Blocks.ICE, Blocks.PACKED_ICE), MAGMA_BLOCK = convert(Blocks.MAGMA_BLOCK, Blocks.OBSIDIAN), @@ -93,8 +95,9 @@ public class WashingRecipeGen extends ProcessingRecipeGen { .output(secondaryChance, secondary.get(), 1)); } - public GeneratedRecipe moddedCrushedOre(ItemEntry crushed, String metalName, Mods... mods) { - for (Mods mod : mods) { + public GeneratedRecipe moddedCrushedOre(ItemEntry crushed, CompatMetals metal) { + String metalName = metal.getName(); + for (Mods mod : metal.getMods()) { ResourceLocation nugget = mod.nuggetOf(metalName); create(mod.getId() + "/" + crushed.getId() .getPath(), @@ -105,8 +108,8 @@ public class WashingRecipeGen extends ProcessingRecipeGen { return null; } - public WashingRecipeGen(DataGenerator p_i48262_1_) { - super(p_i48262_1_); + public WashingRecipeGen(DataGenerator dataGenerator) { + super(dataGenerator); } @Override diff --git a/src/main/java/com/simibubi/create/foundation/gui/CreateMainMenuScreen.java b/src/main/java/com/simibubi/create/foundation/gui/CreateMainMenuScreen.java index f4937eedb..2a56c17c7 100644 --- a/src/main/java/com/simibubi/create/foundation/gui/CreateMainMenuScreen.java +++ b/src/main/java/com/simibubi/create/foundation/gui/CreateMainMenuScreen.java @@ -26,7 +26,6 @@ import net.minecraft.client.renderer.PanoramaRenderer; import net.minecraft.network.chat.TextComponent; import net.minecraft.resources.ResourceLocation; import net.minecraft.util.Mth; -import net.minecraftforge.fml.util.ObfuscationReflectionHelper; public class CreateMainMenuScreen extends AbstractSimiScreen { @@ -50,9 +49,8 @@ public class CreateMainMenuScreen extends AbstractSimiScreen { public CreateMainMenuScreen(Screen parent) { this.parent = parent; returnOnClose = true; - if (parent instanceof TitleScreen) - vanillaPanorama = ObfuscationReflectionHelper.getPrivateValue(TitleScreen.class, (TitleScreen) parent, - "f_96729_"); // panorama + if (parent instanceof TitleScreen titleScreen) + vanillaPanorama = titleScreen.panorama; else vanillaPanorama = new PanoramaRenderer(TitleScreen.CUBE_MAP); } diff --git a/src/main/java/com/simibubi/create/foundation/item/TagDependentIngredientItem.java b/src/main/java/com/simibubi/create/foundation/item/TagDependentIngredientItem.java index 1f19bcc64..c65d2d3af 100644 --- a/src/main/java/com/simibubi/create/foundation/item/TagDependentIngredientItem.java +++ b/src/main/java/com/simibubi/create/foundation/item/TagDependentIngredientItem.java @@ -12,15 +12,15 @@ public class TagDependentIngredientItem extends Item { private ResourceLocation tag; - public TagDependentIngredientItem(Properties p_i48487_1_, ResourceLocation tag) { - super(p_i48487_1_); + public TagDependentIngredientItem(Properties properties, ResourceLocation tag) { + super(properties); this.tag = tag; } @Override - public void fillItemCategory(CreativeModeTab p_150895_1_, NonNullList p_150895_2_) { + public void fillItemCategory(CreativeModeTab tab, NonNullList list) { if (!shouldHide()) - super.fillItemCategory(p_150895_1_, p_150895_2_); + super.fillItemCategory(tab, list); } public boolean shouldHide() { diff --git a/src/main/java/com/simibubi/create/foundation/mixin/accessor/AbstractProjectileDispenseBehaviorAccessor.java b/src/main/java/com/simibubi/create/foundation/mixin/accessor/AbstractProjectileDispenseBehaviorAccessor.java new file mode 100644 index 000000000..dcf25e91b --- /dev/null +++ b/src/main/java/com/simibubi/create/foundation/mixin/accessor/AbstractProjectileDispenseBehaviorAccessor.java @@ -0,0 +1,22 @@ +package com.simibubi.create.foundation.mixin.accessor; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Invoker; + +import net.minecraft.core.Position; +import net.minecraft.core.dispenser.AbstractProjectileDispenseBehavior; +import net.minecraft.world.entity.projectile.Projectile; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; + +@Mixin(AbstractProjectileDispenseBehavior.class) +public interface AbstractProjectileDispenseBehaviorAccessor { + @Invoker("getProjectile") + Projectile create$callGetProjectile(Level level, Position position, ItemStack stack); + + @Invoker("getUncertainty") + float create$callGetUncertainty(); + + @Invoker("getPower") + float create$callGetPower(); +} diff --git a/src/main/java/com/simibubi/create/foundation/mixin/accessor/GameRendererAccessor.java b/src/main/java/com/simibubi/create/foundation/mixin/accessor/GameRendererAccessor.java new file mode 100644 index 000000000..0fb4fafe2 --- /dev/null +++ b/src/main/java/com/simibubi/create/foundation/mixin/accessor/GameRendererAccessor.java @@ -0,0 +1,13 @@ +package com.simibubi.create.foundation.mixin.accessor; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Invoker; + +import net.minecraft.client.Camera; +import net.minecraft.client.renderer.GameRenderer; + +@Mixin(GameRenderer.class) +public interface GameRendererAccessor { + @Invoker("getFov") + double create$callGetFov(Camera camera, float partialTicks, boolean useFOVSetting); +} diff --git a/src/main/java/com/simibubi/create/foundation/mixin/accessor/LivingEntityAccessor.java b/src/main/java/com/simibubi/create/foundation/mixin/accessor/LivingEntityAccessor.java new file mode 100644 index 000000000..93c84db68 --- /dev/null +++ b/src/main/java/com/simibubi/create/foundation/mixin/accessor/LivingEntityAccessor.java @@ -0,0 +1,13 @@ +package com.simibubi.create.foundation.mixin.accessor; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Invoker; + +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.item.ItemStack; + +@Mixin(LivingEntity.class) +public interface LivingEntityAccessor { + @Invoker("spawnItemParticles") + void create$callSpawnItemParticles(ItemStack stack, int count); +} diff --git a/src/main/java/com/simibubi/create/foundation/mixin/accessor/ParticleEngineAccessor.java b/src/main/java/com/simibubi/create/foundation/mixin/accessor/ParticleEngineAccessor.java new file mode 100644 index 000000000..049cb8fc3 --- /dev/null +++ b/src/main/java/com/simibubi/create/foundation/mixin/accessor/ParticleEngineAccessor.java @@ -0,0 +1,17 @@ +package com.simibubi.create.foundation.mixin.accessor; + +import java.util.Map; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +import net.minecraft.client.particle.ParticleEngine; +import net.minecraft.client.particle.ParticleProvider; +import net.minecraft.resources.ResourceLocation; + +@Mixin(ParticleEngine.class) +public interface ParticleEngineAccessor { + // This field cannot be ATed because its type is patched by Forge + @Accessor("providers") + Map> create$getProviders(); +} diff --git a/src/main/java/com/simibubi/create/foundation/ponder/PonderWorld.java b/src/main/java/com/simibubi/create/foundation/ponder/PonderWorld.java index 666440ea3..a81424f72 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/PonderWorld.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/PonderWorld.java @@ -14,6 +14,7 @@ import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.content.contraptions.relays.belt.BeltBlock; import com.simibubi.create.content.contraptions.relays.belt.BeltTileEntity; import com.simibubi.create.content.schematics.SchematicWorld; +import com.simibubi.create.foundation.mixin.accessor.ParticleEngineAccessor; import com.simibubi.create.foundation.ponder.element.WorldSectionElement; import com.simibubi.create.foundation.render.SuperRenderTypeBuffer; import com.simibubi.create.foundation.tileEntity.IMultiTileContainer; @@ -24,7 +25,6 @@ import net.minecraft.client.Camera; import net.minecraft.client.Minecraft; import net.minecraft.client.multiplayer.ClientLevel; import net.minecraft.client.particle.Particle; -import net.minecraft.client.particle.ParticleEngine; import net.minecraft.client.particle.ParticleProvider; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.RenderType; @@ -47,7 +47,6 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.Vec3; import net.minecraft.world.phys.shapes.VoxelShape; -import net.minecraftforge.fml.util.ObfuscationReflectionHelper; import net.minecraftforge.registries.ForgeRegistries; public class PonderWorld extends SchematicWorld { @@ -61,7 +60,7 @@ public class PonderWorld extends SchematicWorld { private Supplier asClientWorld = Suppliers.memoize(() -> WrappedClientWorld.of(this)); protected PonderWorldParticles particles; - private final Map> particleFactories; + private final Map> particleProviders; int overrideLight; Selection mask; @@ -73,10 +72,7 @@ public class PonderWorld extends SchematicWorld { blockBreakingProgressions = new HashMap<>(); originalEntities = new ArrayList<>(); particles = new PonderWorldParticles(this); - - // ParticleManager.factories - ATs don't seem to like this one - particleFactories = ObfuscationReflectionHelper.getPrivateValue(ParticleEngine.class, - Minecraft.getInstance().particleEngine, "f_107293_"); // providers + particleProviders = ((ParticleEngineAccessor) Minecraft.getInstance().particleEngine).create$getProviders(); } public void createBackup() { @@ -233,9 +229,9 @@ public class PonderWorld extends SchematicWorld { private Particle makeParticle(T data, double x, double y, double z, double mx, double my, double mz) { ResourceLocation key = ForgeRegistries.PARTICLE_TYPES.getKey(data.getType()); - ParticleProvider iparticlefactory = (ParticleProvider) particleFactories.get(key); - return iparticlefactory == null ? null - : iparticlefactory.createParticle(data, asClientWorld.get(), x, y, z, mx, my, mz); + ParticleProvider particleProvider = (ParticleProvider) particleProviders.get(key); + return particleProvider == null ? null + : particleProvider.createParticle(data, asClientWorld.get(), x, y, z, mx, my, mz); } @Override diff --git a/src/main/java/com/simibubi/create/foundation/utility/VecHelper.java b/src/main/java/com/simibubi/create/foundation/utility/VecHelper.java index 92946bc88..8232ac2bd 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/VecHelper.java +++ b/src/main/java/com/simibubi/create/foundation/utility/VecHelper.java @@ -6,6 +6,7 @@ import javax.annotation.Nullable; import com.mojang.math.Quaternion; import com.mojang.math.Vector3f; +import com.simibubi.create.foundation.mixin.accessor.GameRendererAccessor; import net.minecraft.client.Camera; import net.minecraft.client.Minecraft; @@ -242,7 +243,7 @@ public class VecHelper { } // ----- adjust for fov ----- - float fov = (float) mc.gameRenderer.getFov(ari, partialTicks, true); + float fov = (float) ((GameRendererAccessor) mc.gameRenderer).create$callGetFov(ari, partialTicks, true); float half_height = (float) mc.getWindow() .getGuiScaledHeight() / 2; diff --git a/src/main/java/com/simibubi/create/foundation/utility/worldWrappers/WrappedServerWorld.java b/src/main/java/com/simibubi/create/foundation/utility/worldWrappers/WrappedServerWorld.java index db9c3065c..41c1205a6 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/worldWrappers/WrappedServerWorld.java +++ b/src/main/java/com/simibubi/create/foundation/utility/worldWrappers/WrappedServerWorld.java @@ -8,7 +8,6 @@ import javax.annotation.ParametersAreNonnullByDefault; import net.minecraft.MethodsReturnNonnullByDefault; import net.minecraft.Util; import net.minecraft.core.BlockPos; -import net.minecraft.server.MinecraftServer; import net.minecraft.server.level.ServerChunkCache; import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; @@ -24,10 +23,8 @@ import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.material.Fluid; import net.minecraft.world.level.saveddata.maps.MapItemSavedData; -import net.minecraft.world.level.storage.LevelStorageSource; import net.minecraft.world.level.storage.ServerLevelData; import net.minecraft.world.ticks.LevelTicks; -import net.minecraftforge.fml.util.ObfuscationReflectionHelper; @ParametersAreNonnullByDefault @MethodsReturnNonnullByDefault @@ -36,7 +33,7 @@ public class WrappedServerWorld extends ServerLevel { protected Level world; public WrappedServerWorld(Level world) { - super(world.getServer(), Util.backgroundExecutor(), getLevelSaveFromWorld(world), + super(world.getServer(), Util.backgroundExecutor(), world.getServer().storageSource, (ServerLevelData) world.getLevelData(), world.dimension(), world.dimensionType(), new DummyStatusListener(), ((ServerChunkCache) world.getChunkSource()).getGenerator(), world.isDebug(), world.getBiomeManager().biomeZoomSeed, Collections.emptyList(), false); @@ -130,8 +127,4 @@ public class WrappedServerWorld extends ServerLevel { public Biome getUncachedNoiseBiome(int p_225604_1_, int p_225604_2_, int p_225604_3_) { return world.getUncachedNoiseBiome(p_225604_1_, p_225604_2_, p_225604_3_); } - - private static LevelStorageSource.LevelStorageAccess getLevelSaveFromWorld(Level world) { - return ObfuscationReflectionHelper.getPrivateValue(MinecraftServer.class, world.getServer(), "f_129744_"); // storageSource - } } diff --git a/src/main/resources/META-INF/accesstransformer.cfg b/src/main/resources/META-INF/accesstransformer.cfg index e85ae9800..c9b47b34d 100644 --- a/src/main/resources/META-INF/accesstransformer.cfg +++ b/src/main/resources/META-INF/accesstransformer.cfg @@ -1,41 +1,32 @@ -public net.minecraft.server.network.ServerGamePacketListenerImpl f_9737_ # aboveGroundTickCount -public net.minecraft.client.multiplayer.ClientPacketListener f_104897_ # serverChunkRadius - -# For CubeParticle -protected net.minecraft.client.particle.Particle f_107205_ # stoppedByCollision - -# ChunkStatus -public-f net.minecraft.world.level.chunk.ChunkStatus f_62326_ # FULL - -# PotionBrewing -public net.minecraft.world.item.alchemy.PotionBrewing f_43496_ # ALLOWED_CONTAINERS - -public net.minecraft.client.gui.Font m_92863_(Lnet/minecraft/resources/ResourceLocation;)Lnet/minecraft/client/gui/font/FontSet; # getFontSet -protected net.minecraft.world.entity.Entity m_19956_(Lnet/minecraft/world/entity/Entity;Lnet/minecraft/world/entity/Entity$MoveFunction;)V # positionRider -public net.minecraft.world.level.biome.BiomeManager f_47863_ # biomeZoomSeed - -public net.minecraft.client.renderer.entity.ItemRenderer f_115096_ # textureManager - -# BeaconBlockEntity -public net.minecraft.world.level.block.entity.BeaconBlockEntity f_58648_ # beamSections - -# ServerTickList (For stopping placed fluids from spilling) -public net.minecraft.world.level.ServerTickList f_47209_ # tickNextTickSet -public net.minecraft.world.level.ServerTickList f_47210_ # tickNextTickList - public net.minecraft.client.Minecraft f_91013_ # pausePartialTick - -# GameRenderer -public net.minecraft.client.renderer.GameRenderer m_109141_(Lnet/minecraft/client/Camera;FZ)D # getFov - -# ItemInHandRenderer +public net.minecraft.client.gui.Font m_92863_(Lnet/minecraft/resources/ResourceLocation;)Lnet/minecraft/client/gui/font/FontSet; # getFontSet +public net.minecraft.client.gui.screens.TitleScreen f_96729_ # panorama +public net.minecraft.client.multiplayer.ClientPacketListener f_104897_ # serverChunkRadius +protected net.minecraft.client.particle.Particle f_107205_ # stoppedByCollision public net.minecraft.client.renderer.ItemInHandRenderer f_109300_ # mainHandItem public net.minecraft.client.renderer.ItemInHandRenderer f_109301_ # offHandItem +public net.minecraft.client.renderer.entity.ItemRenderer f_115096_ # textureManager -# PaletteResize -public net.minecraft.world.level.chunk.HashMapPalette f_62658_ # values -public net.minecraft.world.level.chunk.PaletteResize +public-f net.minecraft.network.protocol.game.ClientboundPlayerAbilitiesPacket f_132663_ # flyingSpeed -public net.minecraft.world.entity.LivingEntity m_21060_(Lnet/minecraft/world/item/ItemStack;I)V # spawnItemParticles +public net.minecraft.server.MinecraftServer f_129744_ # storageSource +public net.minecraft.server.network.ServerGamePacketListenerImpl f_9737_ # aboveGroundTickCount + +public net.minecraft.world.entity.Entity f_146795_ # removalReason +protected net.minecraft.world.entity.Entity m_19956_(Lnet/minecraft/world/entity/Entity;Lnet/minecraft/world/entity/Entity$MoveFunction;)V # positionRider +public net.minecraft.world.entity.LivingEntity f_20899_ # jumping public-f net.minecraft.world.item.HoneycombItem f_150863_ # WAXABLES +public net.minecraft.world.item.alchemy.PotionBrewing f_43494_ # POTION_MIXES +public net.minecraft.world.item.alchemy.PotionBrewing f_43495_ # CONTAINER_MIXES +public net.minecraft.world.item.alchemy.PotionBrewing f_43497_ # ALLOWED_CONTAINER +public net.minecraft.world.item.crafting.Ingredient f_43902_ # values +public net.minecraft.world.item.crafting.RecipeManager f_44007_ # recipes + +public net.minecraft.world.level.BaseSpawner f_45443_ # spawnPotentials +public net.minecraft.world.level.BaseSpawner f_45444_ # nextSpawnData +public net.minecraft.world.level.biome.BiomeManager f_47863_ # biomeZoomSeed +public-f net.minecraft.world.level.block.StairBlock stateSupplier +public net.minecraft.world.level.block.entity.BeaconBlockEntity f_58648_ # beamSections +public net.minecraft.world.level.chunk.HashMapPalette f_62658_ # values +public net.minecraft.world.level.chunk.PaletteResize diff --git a/src/main/resources/create.mixins.json b/src/main/resources/create.mixins.json index e5eb552f7..deba44920 100644 --- a/src/main/resources/create.mixins.json +++ b/src/main/resources/create.mixins.json @@ -5,7 +5,9 @@ "compatibilityLevel": "JAVA_16", "refmap": "create.refmap.json", "mixins": [ - "CustomItemUseEffectsMixin" + "CustomItemUseEffectsMixin", + "accessor.AbstractProjectileDispenseBehaviorAccessor", + "accessor.LivingEntityAccessor" ], "client": [ "DestroyProgressMixin", @@ -13,7 +15,9 @@ "FixNormalScalingMixin", "HeavyBootsOnPlayerMixin", "ModelDataRefreshMixin", - "WindowResizeMixin" + "WindowResizeMixin", + "accessor.GameRendererAccessor", + "accessor.ParticleEngineAccessor" ], "injectors": { "defaultRequire": 1 diff --git a/src/main/resources/data/create/recipes/compat/upgrade_aquatic/crafting/tree_fertilizer.json b/src/main/resources/data/create/recipes/compat/upgrade_aquatic/crafting/tree_fertilizer.json new file mode 100644 index 000000000..a32cc822c --- /dev/null +++ b/src/main/resources/data/create/recipes/compat/upgrade_aquatic/crafting/tree_fertilizer.json @@ -0,0 +1,56 @@ +{ + "conditions": [ + { + "type": "forge:mod_loaded", + "modid": "upgrade_aquatic" + } + ], + "type": "minecraft:crafting_shapeless", + "ingredients": [ + { + "tag": "minecraft:small_flowers" + }, + { + "tag": "minecraft:small_flowers" + }, + [ + { + "item": "upgrade_aquatic:acan_coral" + }, + { + "item": "upgrade_aquatic:finger_coral" + }, + { + "item": "upgrade_aquatic:star_coral" + }, + { + "item": "upgrade_aquatic:moss_coral" + }, + { + "item": "upgrade_aquatic:petal_coral" + }, + { + "item": "upgrade_aquatic:branch_coral" + }, + { + "item": "upgrade_aquatic:rock_coral" + }, + { + "item": "upgrade_aquatic:pillow_coral" + }, + { + "item": "upgrade_aquatic:chrome_coral" + }, + { + "item": "upgrade_aquatic:silk_coral" + } + ], + { + "item": "minecraft:bone_meal" + } + ], + "result": { + "item": "create:tree_fertilizer", + "count": 2 + } +} From 0b17aab01ea9b47e21c993329798fdfb06f16a5f Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Sat, 12 Mar 2022 20:31:12 +0100 Subject: [PATCH 22/29] Patch E Prep --- .github/ISSUE_TEMPLATE/bug_report.yml | 1 + gradle.properties | 2 +- src/main/java/com/simibubi/create/Create.java | 2 +- .../structureMovement/AbstractContraptionEntity.java | 4 ++-- .../components/structureMovement/Contraption.java | 2 ++ src/main/resources/META-INF/mods.toml | 2 +- 6 files changed, 8 insertions(+), 5 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index be16c9bd9..1a0c4b59f 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -49,6 +49,7 @@ body: label: Mod Version description: The version of the mod you were using when the bug occured options: + - "0.4.0e" - "0.4.0d" - "0.4.0c" - "0.4.0b" diff --git a/gradle.properties b/gradle.properties index bf4d53325..b447a7889 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,7 +4,7 @@ org.gradle.jvmargs = -Xmx3G org.gradle.daemon = false # mod version info -mod_version = 0.4d +mod_version = 0.4e minecraft_version = 1.18.1 forge_version = 39.1.0 diff --git a/src/main/java/com/simibubi/create/Create.java b/src/main/java/com/simibubi/create/Create.java index 5aa61c54c..c4049703c 100644 --- a/src/main/java/com/simibubi/create/Create.java +++ b/src/main/java/com/simibubi/create/Create.java @@ -57,7 +57,7 @@ public class Create { public static final String ID = "create"; public static final String NAME = "Create"; - public static final String VERSION = "0.4d"; + public static final String VERSION = "0.4e"; public static final Logger LOGGER = LogManager.getLogger(); diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/AbstractContraptionEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/AbstractContraptionEntity.java index dee9a52cf..79b834323 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/AbstractContraptionEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/AbstractContraptionEntity.java @@ -445,8 +445,6 @@ public abstract class AbstractContraptionEntity extends Entity implements IEntit AllPackets.channel.send(PacketDistributor.TRACKING_ENTITY.with(() -> this), new ContraptionDisassemblyPacket(this.getId(), transform)); - discard(); - contraption.addBlocksToWorld(level, transform); contraption.addPassengersToWorld(level, transform, getPassengers()); @@ -462,6 +460,8 @@ public abstract class AbstractContraptionEntity extends Entity implements IEntit ((AbstractContraptionEntity) entity).disassemble(); } + discard(); + ejectPassengers(); moveCollidedEntitiesOnDisassembly(transform); AllSoundEvents.CONTRAPTION_DISASSEMBLE.playOnServer(level, blockPosition()); diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/Contraption.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/Contraption.java index 088ee19de..790746d32 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/Contraption.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/Contraption.java @@ -1129,6 +1129,8 @@ public abstract class Contraption { if (getSeatMapping().isEmpty()) continue; Integer seatIndex = getSeatMapping().get(seatedEntity.getUUID()); + if (seatIndex == null) + continue; BlockPos seatPos = getSeats().get(seatIndex); seatPos = transform.apply(seatPos); if (!(world.getBlockState(seatPos) diff --git a/src/main/resources/META-INF/mods.toml b/src/main/resources/META-INF/mods.toml index 4936aa7de..4a3ddd01e 100644 --- a/src/main/resources/META-INF/mods.toml +++ b/src/main/resources/META-INF/mods.toml @@ -5,7 +5,7 @@ license="MIT" [[mods]] modId="create" -version="0.4d" +version="0.4e" displayName="Create" #updateJSONURL="" displayURL="https://www.curseforge.com/minecraft/mc-mods/create" From 939b276c5636bfbaa21346f5f2ff7060129d310c Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Sat, 12 Mar 2022 22:27:33 +0100 Subject: [PATCH 23/29] Patch the Patch - Bugfixes to recently added/changed functionality --- .../create/compat/jei/category/ItemDrainCategory.java | 8 ++++---- .../create/compat/jei/category/SpoutCategory.java | 4 ++-- .../create/content/contraptions/fluids/OpenEndedPipe.java | 7 +++---- 3 files changed, 9 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/simibubi/create/compat/jei/category/ItemDrainCategory.java b/src/main/java/com/simibubi/create/compat/jei/category/ItemDrainCategory.java index 3309363d5..5d2d87a85 100644 --- a/src/main/java/com/simibubi/create/compat/jei/category/ItemDrainCategory.java +++ b/src/main/java/com/simibubi/create/compat/jei/category/ItemDrainCategory.java @@ -51,13 +51,13 @@ public class ItemDrainCategory extends CreateRecipeCategory { .withFluidOutputs(fluidFromPotionItem) .withSingleItemOutput(new ItemStack(Items.GLASS_BOTTLE)) .build()); - return; + continue; } LazyOptional capability = stack.getCapability(CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY); if (!capability.isPresent()) - return; + continue; ItemStack copy = stack.copy(); capability = copy.getCapability(CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY); @@ -65,9 +65,9 @@ public class ItemDrainCategory extends CreateRecipeCategory { FluidStack extracted = handler.drain(1000, FluidAction.EXECUTE); ItemStack result = handler.getContainer(); if (extracted.isEmpty()) - return; + continue; if (result.isEmpty()) - return; + continue; Ingredient ingredient = Ingredient.of(stack); ResourceLocation itemName = stack.getItem() diff --git a/src/main/java/com/simibubi/create/compat/jei/category/SpoutCategory.java b/src/main/java/com/simibubi/create/compat/jei/category/SpoutCategory.java index 463b34183..acf6d2463 100644 --- a/src/main/java/com/simibubi/create/compat/jei/category/SpoutCategory.java +++ b/src/main/java/com/simibubi/create/compat/jei/category/SpoutCategory.java @@ -56,13 +56,13 @@ public class SpoutCategory extends CreateRecipeCategory { .withFluidIngredients(FluidIngredient.fromFluidStack(fluidFromPotionItem)) .withSingleItemOutput(stack) .build()); - return; + continue; } LazyOptional capability = stack.getCapability(CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY); if (!capability.isPresent()) - return; + continue; for (FluidStack fluidStack : fluidStacks) { ItemStack copy = stack.copy(); diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/OpenEndedPipe.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/OpenEndedPipe.java index 25921554b..b14ef480c 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/OpenEndedPipe.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/OpenEndedPipe.java @@ -179,11 +179,8 @@ public class OpenEndedPipe extends FlowSource { return false; if (fluid.isEmpty()) return false; - if (!FluidHelper.hasBlockState(fluid.getFluid())) { - if (!simulate) - applyEffects(fluid); + if (!FluidHelper.hasBlockState(fluid.getFluid())) return true; - } if (!fluidState.isEmpty() && fluidState.getType() != fluid.getFluid()) { FluidReactions.handlePipeSpillCollision(world, outputPos, fluid.getFluid(), fluidState); @@ -272,6 +269,8 @@ public class OpenEndedPipe extends FlowSource { int fill = super.fill(resource, action); if (action.simulate()) return fill; + if (!resource.isEmpty()) + applyEffects(resource); if (getFluidAmount() == 1000 || !FluidHelper.hasBlockState(containedFluidStack.getFluid())) if (provideFluidToSpace(containedFluidStack, false)) setFluid(FluidStack.EMPTY); From a8c368f42645c5bb65fd31d8b0681c87c8d39b8b Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Mon, 21 Mar 2022 00:29:45 +0100 Subject: [PATCH 24/29] Patch F - Fixed Create's JEI plugin not reloading recipes properly - Reverted an AT that seems to cause issues with compiling in IDEs - Fixed Contraption disassembly causing inventory contents to be rolled back - Fixed Crushing Wheels not working correctly - Items idling on top of Crushing Wheels are no longer prevented from being picked up by players - Fixed automated compatibility picking up custom recipes from the mod "occultism" --- .github/ISSUE_TEMPLATE/bug_report.yml | 1 + gradle.properties | 2 +- .../com/simibubi/create/AllRecipeTypes.java | 10 +- src/main/java/com/simibubi/create/Create.java | 2 +- .../simibubi/create/compat/jei/CreateJEI.java | 147 ++++++++++-------- .../components/crafter/RecipeGridHandler.java | 2 +- .../crusher/CrushingWheelControllerBlock.java | 4 +- .../CrushingWheelControllerTileEntity.java | 4 +- .../mixer/MechanicalMixerTileEntity.java | 2 +- .../press/MechanicalPressTileEntity.java | 14 +- .../components/saw/SawTileEntity.java | 2 +- .../AbstractContraptionEntity.java | 22 +-- .../foundation/block/CopperBlockSet.java | 4 +- .../resources/META-INF/accesstransformer.cfg | 1 - src/main/resources/META-INF/mods.toml | 2 +- 15 files changed, 118 insertions(+), 101 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index 1a0c4b59f..e4ebb27c6 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -49,6 +49,7 @@ body: label: Mod Version description: The version of the mod you were using when the bug occured options: + - "0.4.0f" - "0.4.0e" - "0.4.0d" - "0.4.0c" diff --git a/gradle.properties b/gradle.properties index b447a7889..c121035f5 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,7 +4,7 @@ org.gradle.jvmargs = -Xmx3G org.gradle.daemon = false # mod version info -mod_version = 0.4e +mod_version = 0.4f minecraft_version = 1.18.1 forge_version = 39.1.0 diff --git a/src/main/java/com/simibubi/create/AllRecipeTypes.java b/src/main/java/com/simibubi/create/AllRecipeTypes.java index 5747e792c..a15df4a6a 100644 --- a/src/main/java/com/simibubi/create/AllRecipeTypes.java +++ b/src/main/java/com/simibubi/create/AllRecipeTypes.java @@ -1,8 +1,10 @@ package com.simibubi.create; import java.util.Optional; +import java.util.Set; import java.util.function.Supplier; +import com.google.common.collect.ImmutableSet; import com.simibubi.create.compat.jei.ConversionRecipe; import com.simibubi.create.content.contraptions.components.crafter.MechanicalCraftingRecipe; import com.simibubi.create.content.contraptions.components.crusher.CrushingRecipe; @@ -134,7 +136,13 @@ public enum AllRecipeTypes implements IRecipeTypeInfo { }); } - public static boolean isManualRecipe(Recipe recipe) { + public static final Set RECIPE_DENY_SET = + ImmutableSet.of(new ResourceLocation("occultism", "spirit_trade"), new ResourceLocation("occultism", "ritual")); + + public static boolean shouldIgnoreInAutomation(Recipe recipe) { + RecipeSerializer serializer = recipe.getSerializer(); + if (serializer != null && RECIPE_DENY_SET.contains(serializer.getRegistryName())) + return true; return recipe.getId() .getPath() .endsWith("_manual_only"); diff --git a/src/main/java/com/simibubi/create/Create.java b/src/main/java/com/simibubi/create/Create.java index c4049703c..41e28504c 100644 --- a/src/main/java/com/simibubi/create/Create.java +++ b/src/main/java/com/simibubi/create/Create.java @@ -57,7 +57,7 @@ public class Create { public static final String ID = "create"; public static final String NAME = "Create"; - public static final String VERSION = "0.4e"; + public static final String VERSION = "0.4f"; public static final Logger LOGGER = LogManager.getLogger(); diff --git a/src/main/java/com/simibubi/create/compat/jei/CreateJEI.java b/src/main/java/com/simibubi/create/compat/jei/CreateJEI.java index e46310a76..31ecb312c 100644 --- a/src/main/java/com/simibubi/create/compat/jei/CreateJEI.java +++ b/src/main/java/com/simibubi/create/compat/jei/CreateJEI.java @@ -85,141 +85,152 @@ public class CreateJEI implements IModPlugin { public IIngredientManager ingredientManager; private final List> allCategories = new ArrayList<>(); - private final CreateRecipeCategory + + private void loadCategories() { + allCategories.clear(); + CreateRecipeCategory milling = register("milling", MillingCategory::new).addTypedRecipes(AllRecipeTypes.MILLING) - .catalyst(AllBlocks.MILLSTONE::get) - .build(), + .catalyst(AllBlocks.MILLSTONE::get) + .build(), - crushing = register("crushing", CrushingCategory::new).addTypedRecipes(AllRecipeTypes.CRUSHING) + crushing = register("crushing", CrushingCategory::new).addTypedRecipes(AllRecipeTypes.CRUSHING) .addTypedRecipesExcluding(AllRecipeTypes.MILLING::getType, AllRecipeTypes.CRUSHING::getType) .catalyst(AllBlocks.CRUSHING_WHEEL::get) .build(), - pressing = register("pressing", PressingCategory::new).addTypedRecipes(AllRecipeTypes.PRESSING) + pressing = register("pressing", PressingCategory::new).addTypedRecipes(AllRecipeTypes.PRESSING) .catalyst(AllBlocks.MECHANICAL_PRESS::get) .build(), - washing = register("fan_washing", FanWashingCategory::new).addTypedRecipes(AllRecipeTypes.SPLASHING) + washing = register("fan_washing", FanWashingCategory::new).addTypedRecipes(AllRecipeTypes.SPLASHING) .catalystStack(ProcessingViaFanCategory.getFan("fan_washing")) .build(), - smoking = register("fan_smoking", FanSmokingCategory::new).addTypedRecipes(() -> RecipeType.SMOKING) + smoking = register("fan_smoking", FanSmokingCategory::new).addTypedRecipes(() -> RecipeType.SMOKING) .catalystStack(ProcessingViaFanCategory.getFan("fan_smoking")) .build(), - blasting = register("fan_blasting", FanBlastingCategory::new) + blasting = register("fan_blasting", FanBlastingCategory::new) .addTypedRecipesExcluding(() -> RecipeType.SMELTING, () -> RecipeType.BLASTING) .addTypedRecipes(() -> RecipeType.BLASTING) .removeRecipes(() -> RecipeType.SMOKING) .catalystStack(ProcessingViaFanCategory.getFan("fan_blasting")) .build(), - haunting = register("fan_haunting", FanHauntingCategory::new).addTypedRecipes(AllRecipeTypes.HAUNTING) - .catalystStack(ProcessingViaFanCategory.getFan("fan_haunting")).build(), + haunting = register("fan_haunting", FanHauntingCategory::new).addTypedRecipes(AllRecipeTypes.HAUNTING) + .catalystStack(ProcessingViaFanCategory.getFan("fan_haunting")) + .build(), - mixing = register("mixing", MixingCategory::standard).addTypedRecipes(AllRecipeTypes.MIXING) + mixing = register("mixing", MixingCategory::standard).addTypedRecipes(AllRecipeTypes.MIXING) .catalyst(AllBlocks.MECHANICAL_MIXER::get) .catalyst(AllBlocks.BASIN::get) .build(), - seqAssembly = register("sequenced_assembly", SequencedAssemblyCategory::new) + seqAssembly = register("sequenced_assembly", SequencedAssemblyCategory::new) .addTypedRecipes(AllRecipeTypes.SEQUENCED_ASSEMBLY) .build(), - autoShapeless = register("automatic_shapeless", MixingCategory::autoShapeless) - .addAllRecipesIf(r -> r instanceof CraftingRecipe && !(r instanceof IShapedRecipe) && r.getIngredients() - .size() > 1 && !MechanicalPressTileEntity.canCompress(r) && !AllRecipeTypes.isManualRecipe(r), - BasinRecipe::convertShapeless) + autoShapeless = register("automatic_shapeless", MixingCategory::autoShapeless) + .addAllRecipesIf(r -> r instanceof CraftingRecipe && !(r instanceof IShapedRecipe) + && r.getIngredients() + .size() > 1 + && !MechanicalPressTileEntity.canCompress(r) && !AllRecipeTypes.shouldIgnoreInAutomation(r), + BasinRecipe::convertShapeless) .catalyst(AllBlocks.MECHANICAL_MIXER::get) .catalyst(AllBlocks.BASIN::get) .enableWhen(c -> c.allowShapelessInMixer) .build(), - brewing = register("automatic_brewing", MixingCategory::autoBrewing) - .addRecipes(() -> PotionMixingRecipes.ALL) - .catalyst(AllBlocks.MECHANICAL_MIXER::get) - .catalyst(AllBlocks.BASIN::get) - .build(), + brewing = + register("automatic_brewing", MixingCategory::autoBrewing).addRecipes(() -> PotionMixingRecipes.ALL) + .catalyst(AllBlocks.MECHANICAL_MIXER::get) + .catalyst(AllBlocks.BASIN::get) + .build(), - sawing = register("sawing", SawingCategory::new).addTypedRecipes(AllRecipeTypes.CUTTING) + sawing = register("sawing", SawingCategory::new).addTypedRecipes(AllRecipeTypes.CUTTING) .catalyst(AllBlocks.MECHANICAL_SAW::get) .build(), - blockCutting = register("block_cutting", () -> new BlockCuttingCategory(Items.STONE_BRICK_STAIRS)) - .addRecipes(() -> CondensedBlockCuttingRecipe.condenseRecipes(getTypedRecipesExcluding( - RecipeType.STONECUTTING, recipe -> AllRecipeTypes.isManualRecipe(recipe)))) - .catalyst(AllBlocks.MECHANICAL_SAW::get) - .enableWhen(c -> c.allowStonecuttingOnSaw) - .build(), + blockCutting = + register("block_cutting", () -> new BlockCuttingCategory(Items.STONE_BRICK_STAIRS)) + .addRecipes(() -> CondensedBlockCuttingRecipe.condenseRecipes(getTypedRecipesExcluding( + RecipeType.STONECUTTING, recipe -> AllRecipeTypes.shouldIgnoreInAutomation(recipe)))) + .catalyst(AllBlocks.MECHANICAL_SAW::get) + .enableWhen(c -> c.allowStonecuttingOnSaw) + .build(), - woodCutting = register("wood_cutting", () -> new BlockCuttingCategory(Items.OAK_STAIRS)) + woodCutting = register("wood_cutting", () -> new BlockCuttingCategory(Items.OAK_STAIRS)) .addRecipes(() -> CondensedBlockCuttingRecipe - .condenseRecipes(getTypedRecipesExcluding(SawTileEntity.woodcuttingRecipeType.get(), - recipe -> AllRecipeTypes.isManualRecipe(recipe)))) + .condenseRecipes(getTypedRecipesExcluding(SawTileEntity.woodcuttingRecipeType.get(), + recipe -> AllRecipeTypes.shouldIgnoreInAutomation(recipe)))) .catalyst(AllBlocks.MECHANICAL_SAW::get) .enableWhenBool(c -> c.allowWoodcuttingOnSaw.get() && ModList.get() - .isLoaded("druidcraft")) + .isLoaded("druidcraft")) .build(), - packing = register("packing", PackingCategory::standard).addTypedRecipes(AllRecipeTypes.COMPACTING) + packing = register("packing", PackingCategory::standard).addTypedRecipes(AllRecipeTypes.COMPACTING) .catalyst(AllBlocks.MECHANICAL_PRESS::get) .catalyst(AllBlocks.BASIN::get) .build(), - autoSquare = register("automatic_packing", PackingCategory::autoSquare) + autoSquare = register("automatic_packing", PackingCategory::autoSquare) .addAllRecipesIf( - r -> (r instanceof CraftingRecipe) && !(r instanceof MechanicalCraftingRecipe) - && MechanicalPressTileEntity.canCompress(r) && !AllRecipeTypes.isManualRecipe(r), - BasinRecipe::convertShapeless) + r -> (r instanceof CraftingRecipe) && !(r instanceof MechanicalCraftingRecipe) + && MechanicalPressTileEntity.canCompress(r) && !AllRecipeTypes.shouldIgnoreInAutomation(r), + BasinRecipe::convertShapeless) .catalyst(AllBlocks.MECHANICAL_PRESS::get) .catalyst(AllBlocks.BASIN::get) .enableWhen(c -> c.allowShapedSquareInPress) .build(), - polishing = register("sandpaper_polishing", PolishingCategory::new).addTypedRecipes(AllRecipeTypes.SANDPAPER_POLISHING) + polishing = register("sandpaper_polishing", PolishingCategory::new) + .addTypedRecipes(AllRecipeTypes.SANDPAPER_POLISHING) .catalyst(AllItems.SAND_PAPER::get) .catalyst(AllItems.RED_SAND_PAPER::get) .build(), - deploying = register("deploying", DeployingCategory::new) - .addTypedRecipes(AllRecipeTypes.DEPLOYING) + deploying = register("deploying", DeployingCategory::new).addTypedRecipes(AllRecipeTypes.DEPLOYING) .addTypedRecipes(AllRecipeTypes.SANDPAPER_POLISHING::getType, DeployerApplicationRecipe::convert) .catalyst(AllBlocks.DEPLOYER::get) .catalyst(AllBlocks.DEPOT::get) .catalyst(AllItems.BELT_CONNECTOR::get) .build(), - mysteryConversion = register("mystery_conversion", MysteriousItemConversionCategory::new) + mysteryConversion = register("mystery_conversion", MysteriousItemConversionCategory::new) .addRecipes(() -> MysteriousItemConversionCategory.RECIPES) .build(), - spoutFilling = register("spout_filling", SpoutCategory::new).addTypedRecipes(AllRecipeTypes.FILLING) + spoutFilling = register("spout_filling", SpoutCategory::new).addTypedRecipes(AllRecipeTypes.FILLING) .addRecipeListConsumer(recipes -> SpoutCategory.consumeRecipes(recipes::add, ingredientManager)) .catalyst(AllBlocks.SPOUT::get) .build(), - draining = register("draining", ItemDrainCategory::new) + draining = register("draining", ItemDrainCategory::new) .addRecipeListConsumer(recipes -> ItemDrainCategory.consumeRecipes(recipes::add, ingredientManager)) .addTypedRecipes(AllRecipeTypes.EMPTYING) .catalyst(AllBlocks.ITEM_DRAIN::get) .build(), - autoShaped = register("automatic_shaped", MechanicalCraftingCategory::new) - .addAllRecipesIf(r -> r instanceof CraftingRecipe && !(r instanceof IShapedRecipe) && r.getIngredients() - .size() == 1) - .addTypedRecipesIf(() -> RecipeType.CRAFTING, recipe -> recipe instanceof IShapedRecipe && !AllRecipeTypes.isManualRecipe(recipe)) + autoShaped = register("automatic_shaped", MechanicalCraftingCategory::new) + .addAllRecipesIf(r -> r instanceof CraftingRecipe && !(r instanceof IShapedRecipe) + && r.getIngredients() + .size() == 1 + && !AllRecipeTypes.shouldIgnoreInAutomation(r)) + .addTypedRecipesIf(() -> RecipeType.CRAFTING, + recipe -> recipe instanceof IShapedRecipe && !AllRecipeTypes.shouldIgnoreInAutomation(recipe)) .catalyst(AllBlocks.MECHANICAL_CRAFTER::get) .enableWhen(c -> c.allowRegularCraftingInCrafter) .build(), - mechanicalCrafting = register("mechanical_crafting", MechanicalCraftingCategory::new) + mechanicalCrafting = register("mechanical_crafting", MechanicalCraftingCategory::new) .addTypedRecipes(AllRecipeTypes.MECHANICAL_CRAFTING) .catalyst(AllBlocks.MECHANICAL_CRAFTER::get) .build(); - private > CategoryBuilder register(String name, - Supplier> supplier) { + } + + private > CategoryBuilder register(String name, Supplier> supplier) { return new CategoryBuilder(name, supplier); } @@ -236,6 +247,7 @@ public class CreateJEI implements IModPlugin { @Override public void registerCategories(IRecipeCategoryRegistration registration) { + loadCategories(); registration.addRecipeCategories(allCategories.toArray(IRecipeCategory[]::new)); } @@ -253,7 +265,7 @@ public class CreateJEI implements IModPlugin { allCategories.forEach(c -> c.recipes.forEach(s -> registration.addRecipes(s.get(), c.getUid()))); registration.addRecipes(ToolboxColoringRecipeMaker.createRecipes() - .collect(Collectors.toList()), VanillaRecipeCategoryUid.CRAFTING); + .collect(Collectors.toList()), VanillaRecipeCategoryUid.CRAFTING); } @Override @@ -261,7 +273,7 @@ public class CreateJEI implements IModPlugin { allCategories.forEach(c -> c.recipeCatalysts.forEach(s -> registration.addRecipeCatalyst(s.get(), c.getUid()))); } - @SuppressWarnings({"unchecked", "rawtypes"}) + @SuppressWarnings({ "unchecked", "rawtypes" }) @Override public void registerGuiHandlers(IGuiHandlerRegistration registration) { registration.addGenericGuiContainerHandler(AbstractSimiContainerScreen.class, new SlotMover()); @@ -315,14 +327,15 @@ public class CreateJEI implements IModPlugin { return addRecipeListConsumer(recipes -> consumeTypedRecipes(recipes::add, recipeType.get())); } - public CategoryBuilder addTypedRecipes(Supplier> recipeType, Function, T> converter) { + public CategoryBuilder addTypedRecipes(Supplier> recipeType, + Function, T> converter) { return addRecipeListConsumer(recipes -> consumeTypedRecipes(recipe -> { recipes.add(converter.apply(recipe)); }, recipeType.get())); } public CategoryBuilder addTypedRecipesIf(Supplier> recipeType, - Predicate> pred) { + Predicate> pred) { return addRecipeListConsumer(recipes -> consumeTypedRecipes(recipe -> { if (pred.test(recipe)) { recipes.add(recipe); @@ -331,7 +344,7 @@ public class CreateJEI implements IModPlugin { } public CategoryBuilder addTypedRecipesExcluding(Supplier> recipeType, - Supplier> excluded) { + Supplier> excluded) { return addRecipeListConsumer(recipes -> { List> excludedRecipes = getTypedRecipes(excluded.get()); consumeTypedRecipes(recipe -> { @@ -361,7 +374,7 @@ public class CreateJEI implements IModPlugin { public CategoryBuilder catalyst(Supplier supplier) { return catalystStack(() -> new ItemStack(supplier.get() - .asItem())); + .asItem())); } public CategoryBuilder catalystStack(Supplier supplier) { @@ -371,7 +384,7 @@ public class CreateJEI implements IModPlugin { public CategoryBuilder enableWhen(Function configValue) { pred = c -> configValue.apply(c) - .get(); + .get(); return this; } @@ -405,11 +418,10 @@ public class CreateJEI implements IModPlugin { public static void consumeTypedRecipes(Consumer> consumer, RecipeType type) { Map> map = Minecraft.getInstance() .getConnection() - .getRecipeManager() - .recipes - .get(type); + .getRecipeManager().recipes.get(type); if (map != null) { - map.values().forEach(consumer); + map.values() + .forEach(consumer); } } @@ -426,18 +438,21 @@ public class CreateJEI implements IModPlugin { } public static boolean doInputsMatch(Recipe recipe1, Recipe recipe2) { - if (recipe1.getIngredients().isEmpty() || recipe2.getIngredients().isEmpty()) { + if (recipe1.getIngredients() + .isEmpty() + || recipe2.getIngredients() + .isEmpty()) { return false; } ItemStack[] matchingStacks = recipe1.getIngredients() - .get(0) - .getItems(); + .get(0) + .getItems(); if (matchingStacks.length == 0) { return false; } if (recipe2.getIngredients() - .get(0) - .test(matchingStacks[0])) + .get(0) + .test(matchingStacks[0])) return true; return false; } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/crafter/RecipeGridHandler.java b/src/main/java/com/simibubi/create/content/contraptions/components/crafter/RecipeGridHandler.java index de7039299..8f6be9a34 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/crafter/RecipeGridHandler.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/crafter/RecipeGridHandler.java @@ -166,7 +166,7 @@ public class RecipeGridHandler { if (numItems > 9) return false; } - if (AllRecipeTypes.isManualRecipe(recipe)) + if (AllRecipeTypes.shouldIgnoreInAutomation(recipe)) return false; return true; } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/crusher/CrushingWheelControllerBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/crusher/CrushingWheelControllerBlock.java index c0496a737..86499cb51 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/crusher/CrushingWheelControllerBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/crusher/CrushingWheelControllerBlock.java @@ -87,8 +87,8 @@ public class CrushingWheelControllerBlock extends DirectionalBlock implements IT return; if (te.crushingspeed == 0) return; - if (entityIn instanceof ItemEntity) - ((ItemEntity) entityIn).setPickUpDelay(10); +// if (entityIn instanceof ItemEntity) +// ((ItemEntity) entityIn).setPickUpDelay(10); CompoundTag data = entityIn.getPersistentData(); if (data.contains("BypassCrushingWheel")) { if (pos.equals(NbtUtils.readBlockPos(data.getCompound("BypassCrushingWheel")))) diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/crusher/CrushingWheelControllerTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/crusher/CrushingWheelControllerTileEntity.java index de30109ed..36ab77f47 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/crusher/CrushingWheelControllerTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/crusher/CrushingWheelControllerTileEntity.java @@ -81,7 +81,7 @@ public class CrushingWheelControllerTileEntity extends SmartTileEntity { if (blockState == null) return false; Direction direction = blockState.getValue(CrushingWheelControllerBlock.FACING); - return direction == Direction.DOWN || direction.getOpposite() == side; + return direction == Direction.DOWN || direction == side; } @Override @@ -145,7 +145,7 @@ public class CrushingWheelControllerTileEntity extends SmartTileEntity { // Output Items if (facing != Direction.UP) { - Direction inputDir = facing.getOpposite(); + Direction inputDir = facing; BlockPos nextPos = worldPosition.offset(facing.getAxis() == Axis.X ? 1f * offset : 0f, (-1f), facing.getAxis() == Axis.Z ? 1f * offset : 0f); DirectBeltInputBehaviour behaviour = diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/mixer/MechanicalMixerTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/mixer/MechanicalMixerTileEntity.java index 2e18ba5ac..b1d090624 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/mixer/MechanicalMixerTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/mixer/MechanicalMixerTileEntity.java @@ -241,7 +241,7 @@ public class MechanicalMixerTileEntity extends BasinOperatingTileEntity { return ((r instanceof CraftingRecipe && !(r instanceof IShapedRecipe) && AllConfigs.SERVER.recipes.allowShapelessInMixer.get() && r.getIngredients() .size() > 1 - && !MechanicalPressTileEntity.canCompress(r)) && !AllRecipeTypes.isManualRecipe(r) + && !MechanicalPressTileEntity.canCompress(r)) && !AllRecipeTypes.shouldIgnoreInAutomation(r) || r.getType() == AllRecipeTypes.MIXING.getType()); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/press/MechanicalPressTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/press/MechanicalPressTileEntity.java index da42a1883..b96180260 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/press/MechanicalPressTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/press/MechanicalPressTileEntity.java @@ -3,9 +3,7 @@ package com.simibubi.create.content.contraptions.components.press; import java.util.ArrayList; import java.util.List; import java.util.Optional; -import java.util.Set; -import com.google.common.collect.ImmutableSet; import com.simibubi.create.AllBlocks; import com.simibubi.create.AllRecipeTypes; import com.simibubi.create.AllSoundEvents; @@ -32,7 +30,6 @@ import net.minecraft.core.particles.ItemParticleOption; import net.minecraft.core.particles.ParticleTypes; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.Tag; -import net.minecraft.resources.ResourceLocation; import net.minecraft.util.Mth; import net.minecraft.world.Container; import net.minecraft.world.entity.Entity; @@ -41,7 +38,6 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.crafting.CraftingRecipe; import net.minecraft.world.item.crafting.Ingredient; import net.minecraft.world.item.crafting.Recipe; -import net.minecraft.world.item.crafting.RecipeSerializer; import net.minecraft.world.level.block.SoundType; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; @@ -345,17 +341,9 @@ public class MechanicalPressTileEntity extends BasinOperatingTileEntity { return AllRecipeTypes.PRESSING.find(pressingInv, level); } - private static final Set RECIPE_DENY_SET = - ImmutableSet.of(new ResourceLocation("occultism", "spirit_trade"), new ResourceLocation("occultism", "ritual")); - public static boolean canCompress(Recipe recipe) { if (!(recipe instanceof CraftingRecipe) || !AllConfigs.SERVER.recipes.allowShapedSquareInPress.get()) return false; - - RecipeSerializer serializer = recipe.getSerializer(); - if (serializer != null && RECIPE_DENY_SET.contains(serializer.getRegistryName())) - return false; - NonNullList ingredients = recipe.getIngredients(); return (ingredients.size() == 4 || ingredients.size() == 9) && ItemHelper.matchAllIngredients(ingredients); } @@ -363,7 +351,7 @@ public class MechanicalPressTileEntity extends BasinOperatingTileEntity { @Override protected boolean matchStaticFilters(Recipe recipe) { return (recipe instanceof CraftingRecipe && !(recipe instanceof MechanicalCraftingRecipe) - && canCompress(recipe) && !AllRecipeTypes.isManualRecipe(recipe)) + && canCompress(recipe) && !AllRecipeTypes.shouldIgnoreInAutomation(recipe)) || recipe.getType() == AllRecipeTypes.COMPACTING.getType(); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/saw/SawTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/saw/SawTileEntity.java index defb4f3e6..d1f34a84f 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/saw/SawTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/saw/SawTileEntity.java @@ -365,7 +365,7 @@ public class SawTileEntity extends BlockBreakingKineticTileEntity { return startedSearch.stream() .filter(RecipeConditions.outputMatchesFilter(filtering)) .filter(RecipeConditions.firstIngredientMatches(inventory.getStackInSlot(0))) - .filter(r -> !AllRecipeTypes.isManualRecipe(r)) + .filter(r -> !AllRecipeTypes.shouldIgnoreInAutomation(r)) .collect(Collectors.toList()); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/AbstractContraptionEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/AbstractContraptionEntity.java index 79b834323..a3db0949f 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/AbstractContraptionEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/AbstractContraptionEntity.java @@ -64,7 +64,7 @@ public abstract class AbstractContraptionEntity extends Entity implements IEntit protected Contraption contraption; protected boolean initialized; protected boolean prevPosInvalid; - private boolean ticking; + private boolean skipActorStop; public AbstractContraptionEntity(EntityType entityTypeIn, Level worldIn) { super(entityTypeIn, worldIn); @@ -222,7 +222,9 @@ public abstract class AbstractContraptionEntity extends Entity implements IEntit return; } - collidingEntities.entrySet().removeIf(e -> e.getValue().incrementAndGet() > 3); + collidingEntities.entrySet() + .removeIf(e -> e.getValue() + .incrementAndGet() > 3); xo = getX(); yo = getY(); @@ -248,7 +250,7 @@ public abstract class AbstractContraptionEntity extends Entity implements IEntit if (!level.isClientSide) contraption.stalled = false; - ticking = true; + skipActorStop = true; for (MutablePair pair : contraption.getActors()) { MovementContext context = pair.right; StructureBlockInfo blockInfo = pair.left; @@ -285,7 +287,7 @@ public abstract class AbstractContraptionEntity extends Entity implements IEntit contraption.stop(level); return; } - ticking = false; + skipActorStop = false; for (Entity entity : getPassengers()) { if (!(entity instanceof OrientedContraptionEntity)) @@ -440,8 +442,10 @@ public abstract class AbstractContraptionEntity extends Entity implements IEntit return; if (contraption == null) return; - + StructureTransform transform = makeStructureTransform(); + + contraption.stop(level); AllPackets.channel.send(PacketDistributor.TRACKING_ENTITY.with(() -> this), new ContraptionDisassemblyPacket(this.getId(), transform)); @@ -460,8 +464,9 @@ public abstract class AbstractContraptionEntity extends Entity implements IEntit ((AbstractContraptionEntity) entity).disassemble(); } + skipActorStop = true; discard(); - + ejectPassengers(); moveCollidedEntitiesOnDisassembly(transform); AllSoundEvents.CONTRAPTION_DISASSEMBLE.playOnServer(level, blockPosition()); @@ -480,9 +485,8 @@ public abstract class AbstractContraptionEntity extends Entity implements IEntit @Override public void remove(RemovalReason p_146834_) { - if (!level.isClientSide && !isRemoved() && contraption != null) - if (!ticking) - contraption.stop(level); + if (!level.isClientSide && !isRemoved() && contraption != null && !skipActorStop) + contraption.stop(level); if (contraption != null) contraption.onEntityRemoved(this); super.remove(p_146834_); diff --git a/src/main/java/com/simibubi/create/foundation/block/CopperBlockSet.java b/src/main/java/com/simibubi/create/foundation/block/CopperBlockSet.java index 0a2c93745..b266d1bd0 100644 --- a/src/main/java/com/simibubi/create/foundation/block/CopperBlockSet.java +++ b/src/main/java/com/simibubi/create/foundation/block/CopperBlockSet.java @@ -38,6 +38,7 @@ import net.minecraft.world.level.block.WeatheringCopperStairBlock; import net.minecraft.world.level.block.state.BlockBehaviour.Properties; import net.minecraft.world.level.block.state.BlockState; import net.minecraftforge.client.model.generators.ModelProvider; +import net.minecraftforge.fml.util.ObfuscationReflectionHelper; public class CopperBlockSet { protected static final WeatherState[] WEATHER_STATES = WeatherState.values(); @@ -325,7 +326,8 @@ public class CopperBlockSet { new WeatheringCopperStairBlock(state, Blocks.AIR.defaultBlockState(), p); // WeatheringCopperStairBlock does not have a constructor that takes a Supplier, // so setting the field directly is the easiest solution - block.stateSupplier = defaultStateSupplier; + ObfuscationReflectionHelper.setPrivateValue(StairBlock.class, block, defaultStateSupplier, + "stateSupplier"); return block; }; } diff --git a/src/main/resources/META-INF/accesstransformer.cfg b/src/main/resources/META-INF/accesstransformer.cfg index c9b47b34d..dbf7cf3d1 100644 --- a/src/main/resources/META-INF/accesstransformer.cfg +++ b/src/main/resources/META-INF/accesstransformer.cfg @@ -26,7 +26,6 @@ public net.minecraft.world.item.crafting.RecipeManager f_44007_ # recipes public net.minecraft.world.level.BaseSpawner f_45443_ # spawnPotentials public net.minecraft.world.level.BaseSpawner f_45444_ # nextSpawnData public net.minecraft.world.level.biome.BiomeManager f_47863_ # biomeZoomSeed -public-f net.minecraft.world.level.block.StairBlock stateSupplier public net.minecraft.world.level.block.entity.BeaconBlockEntity f_58648_ # beamSections public net.minecraft.world.level.chunk.HashMapPalette f_62658_ # values public net.minecraft.world.level.chunk.PaletteResize diff --git a/src/main/resources/META-INF/mods.toml b/src/main/resources/META-INF/mods.toml index 4a3ddd01e..fda36255c 100644 --- a/src/main/resources/META-INF/mods.toml +++ b/src/main/resources/META-INF/mods.toml @@ -5,7 +5,7 @@ license="MIT" [[mods]] modId="create" -version="0.4e" +version="0.4f" displayName="Create" #updateJSONURL="" displayURL="https://www.curseforge.com/minecraft/mc-mods/create" From 727b0a463e7cffde79fbfafaa16cb0407f2bde84 Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Mon, 21 Mar 2022 02:38:03 +0100 Subject: [PATCH 25/29] Damage Control - Updated dependencies to 1.18.2 - Started work on compilation errors --- gradle.properties | 16 +++--- .../java/com/simibubi/create/AllItems.java | 4 +- .../java/com/simibubi/create/AllTags.java | 30 +++++------ src/main/java/com/simibubi/create/Create.java | 4 +- .../jei/ToolboxColoringRecipeMaker.java | 4 +- .../contraptions/base/KineticTileEntity.java | 2 +- .../SequencedAssemblyRecipeBuilder.java | 4 +- .../processing/ProcessingRecipeBuilder.java | 6 +-- .../elementary/SimpleKineticTileEntity.java | 2 +- .../curiosities/bell/SoulPulseEffect.java | 2 +- .../tools/BlueprintOverlayRenderer.java | 7 +-- .../logistics/item/filter/ItemAttribute.java | 26 ++++++---- .../palettes/AllPaletteStoneTypes.java | 4 +- .../content/palettes/PaletteBlockPartial.java | 18 +++---- .../content/palettes/PaletteBlockPattern.java | 10 ++-- .../palettes/PalettesVariantEntry.java | 6 +-- .../schematics/SchematicChunkSource.java | 27 ++++------ .../content/schematics/SchematicWorld.java | 9 ++-- .../foundation/data/CreateRegistrate.java | 10 ++-- .../create/foundation/data/NamedTag.java | 42 --------------- .../data/recipe/CreateRecipeProvider.java | 38 +++++++------- .../data/recipe/StandardRecipeGen.java | 12 ++--- .../foundation/fluid/FluidIngredient.java | 6 +-- .../ponder/element/WorldSectionElement.java | 2 +- .../worldWrappers/WrappedClientWorld.java | 52 +++++++++++-------- .../worldWrappers/WrappedServerWorld.java | 31 ++++------- .../utility/worldWrappers/WrappedWorld.java | 31 +++++------ src/main/resources/pack.mcmeta | 2 +- 28 files changed, 183 insertions(+), 224 deletions(-) delete mode 100644 src/main/java/com/simibubi/create/foundation/data/NamedTag.java diff --git a/gradle.properties b/gradle.properties index c121035f5..504689cf8 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,9 +4,9 @@ org.gradle.jvmargs = -Xmx3G org.gradle.daemon = false # mod version info -mod_version = 0.4f -minecraft_version = 1.18.1 -forge_version = 39.1.0 +mod_version = 0.4.1 +minecraft_version = 1.18.2 +forge_version = 40.0.19 # build dependency versions forgegradle_version = 5.1.+ @@ -15,13 +15,13 @@ mixin_version = 0.8.5 librarian_version = 1.+ shadow_version = 7.1.0 cursegradle_version = 1.4.0 -parchment_version = 2022.01.23 +parchment_version = 2022.03.13 # dependency versions -registrate_version = MC1.18-1.0.21 -flywheel_version = 1.18-0.6.1.62 -jei_minecraft_version = 1.18.1 -jei_version = 9.4.1.112 +registrate_version = MC1.18.2-1.0.24 +flywheel_version = 1.18-0.6.2.64 +jei_minecraft_version = 1.18.2 +jei_version = 9.5.3.143 # curseforge information projectId = 328085 diff --git a/src/main/java/com/simibubi/create/AllItems.java b/src/main/java/com/simibubi/create/AllItems.java index 9113d0f7c..f87b7aea6 100644 --- a/src/main/java/com/simibubi/create/AllItems.java +++ b/src/main/java/com/simibubi/create/AllItems.java @@ -62,7 +62,7 @@ import com.tterrag.registrate.util.entry.ItemEntry; import net.minecraft.resources.ResourceLocation; import net.minecraft.tags.ItemTags; -import net.minecraft.tags.Tag; +import net.minecraft.tags.TagKey; import net.minecraft.world.food.FoodProperties; import net.minecraft.world.item.BlockItem; import net.minecraft.world.item.Item; @@ -370,7 +370,7 @@ public class AllItems { } @SafeVarargs - private static ItemEntry taggedIngredient(String name, Tag.Named... tags) { + private static ItemEntry taggedIngredient(String name, TagKey... tags) { return REGISTRATE.item(name, Item::new) .tag(tags) .register(); diff --git a/src/main/java/com/simibubi/create/AllTags.java b/src/main/java/com/simibubi/create/AllTags.java index 82d724a79..b571387ba 100644 --- a/src/main/java/com/simibubi/create/AllTags.java +++ b/src/main/java/com/simibubi/create/AllTags.java @@ -17,7 +17,7 @@ import net.minecraft.resources.ResourceLocation; import net.minecraft.tags.BlockTags; import net.minecraft.tags.FluidTags; import net.minecraft.tags.ItemTags; -import net.minecraft.tags.Tag; +import net.minecraft.tags.TagKey; import net.minecraft.world.item.BlockItem; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; @@ -34,24 +34,24 @@ public class AllTags { private static final CreateRegistrate REGISTRATE = Create.registrate() .creativeModeTab(() -> Create.BASE_CREATIVE_TAB); - public static Tag.Named tag(Function> wrapperFactory, String namespace, + public static TagKey tag(Function> wrapperFactory, String namespace, String path) { return wrapperFactory.apply(new ResourceLocation(namespace, path)); } - public static Tag.Named forgeTag(Function> wrapperFactory, String path) { + public static TagKey forgeTag(Function> wrapperFactory, String path) { return tag(wrapperFactory, "forge", path); } - public static Tag.Named forgeBlockTag(String path) { + public static TagKey forgeBlockTag(String path) { return forgeTag(BlockTags::createOptional, path); } - public static Tag.Named forgeItemTag(String path) { + public static TagKey forgeItemTag(String path) { return forgeTag(ItemTags::createOptional, path); } - public static Tag.Named forgeFluidTag(String path) { + public static TagKey forgeFluidTag(String path) { return forgeTag(FluidTags::createOptional, path); } @@ -124,7 +124,7 @@ public class AllTags { ; - public final Tag.Named tag; + public final TagKey tag; AllBlockTags() { this(MOD); @@ -167,7 +167,7 @@ public class AllTags { .add(values)); } - public void includeIn(Tag.Named parent) { + public void includeIn(TagKey parent) { REGISTRATE.addDataGenerator(ProviderType.BLOCK_TAGS, prov -> prov.tag(parent) .addTag(tag)); } @@ -176,7 +176,7 @@ public class AllTags { includeIn(parent.tag); } - public void includeAll(Tag.Named child) { + public void includeAll(TagKey child) { REGISTRATE.addDataGenerator(ProviderType.BLOCK_TAGS, prov -> prov.tag(tag) .addTag(child)); } @@ -200,7 +200,7 @@ public class AllTags { ; - public final Tag.Named tag; + public final TagKey tag; AllItemTags() { this(MOD); @@ -239,7 +239,7 @@ public class AllTags { .add(values)); } - public void includeIn(Tag.Named parent) { + public void includeIn(TagKey parent) { REGISTRATE.addDataGenerator(ProviderType.ITEM_TAGS, prov -> prov.tag(parent) .addTag(tag)); } @@ -248,7 +248,7 @@ public class AllTags { includeIn(parent.tag); } - public void includeAll(Tag.Named child) { + public void includeAll(TagKey child) { REGISTRATE.addDataGenerator(ProviderType.ITEM_TAGS, prov -> prov.tag(tag) .addTag(child)); } @@ -264,7 +264,7 @@ public class AllTags { ; - public final Tag.Named tag; + public final TagKey tag; AllFluidTags() { this(MOD); @@ -303,7 +303,7 @@ public class AllTags { .add(values)); } - public void includeIn(Tag.Named parent) { + public void includeIn(TagKey parent) { REGISTRATE.addDataGenerator(ProviderType.FLUID_TAGS, prov -> prov.tag(parent) .addTag(tag)); } @@ -312,7 +312,7 @@ public class AllTags { includeIn(parent.tag); } - public void includeAll(Tag.Named child) { + public void includeAll(TagKey child) { REGISTRATE.addDataGenerator(ProviderType.FLUID_TAGS, prov -> prov.tag(tag) .addTag(child)); } diff --git a/src/main/java/com/simibubi/create/Create.java b/src/main/java/com/simibubi/create/Create.java index 41e28504c..8aeaae1ff 100644 --- a/src/main/java/com/simibubi/create/Create.java +++ b/src/main/java/com/simibubi/create/Create.java @@ -31,7 +31,7 @@ import com.simibubi.create.foundation.data.recipe.SequencedAssemblyRecipeGen; import com.simibubi.create.foundation.data.recipe.StandardRecipeGen; import com.simibubi.create.foundation.networking.AllPackets; import com.simibubi.create.foundation.worldgen.AllWorldFeatures; -import com.tterrag.registrate.util.NonNullLazyValue; +import com.tterrag.registrate.util.nullness.NonNullSupplier; import net.minecraft.core.particles.ParticleType; import net.minecraft.data.DataGenerator; @@ -74,7 +74,7 @@ public class Create { public static final ServerLagger LAGGER = new ServerLagger(); public static final Random RANDOM = new Random(); - private static final NonNullLazyValue REGISTRATE = CreateRegistrate.lazy(ID); + private static final NonNullSupplier REGISTRATE = CreateRegistrate.lazy(ID); public Create() { onCtor(); diff --git a/src/main/java/com/simibubi/create/compat/jei/ToolboxColoringRecipeMaker.java b/src/main/java/com/simibubi/create/compat/jei/ToolboxColoringRecipeMaker.java index 4098d62a8..74999d5ec 100644 --- a/src/main/java/com/simibubi/create/compat/jei/ToolboxColoringRecipeMaker.java +++ b/src/main/java/com/simibubi/create/compat/jei/ToolboxColoringRecipeMaker.java @@ -8,7 +8,7 @@ import com.simibubi.create.Create; import net.minecraft.core.NonNullList; import net.minecraft.resources.ResourceLocation; -import net.minecraft.tags.Tag; +import net.minecraft.tags.TagKey; import net.minecraft.world.item.DyeColor; import net.minecraft.world.item.DyeItem; import net.minecraft.world.item.Item; @@ -32,7 +32,7 @@ public final class ToolboxColoringRecipeMaker { .map(color -> { DyeItem dye = DyeItem.byColor(color); ItemStack dyeStack = new ItemStack(dye); - Tag colorTag = color.getTag(); + TagKey colorTag = color.getTag(); Ingredient.Value dyeList = new Ingredient.ItemValue(dyeStack); Ingredient.Value colorList = new Ingredient.TagValue(colorTag); Stream colorIngredientStream = Stream.of(dyeList, colorList); diff --git a/src/main/java/com/simibubi/create/content/contraptions/base/KineticTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/base/KineticTileEntity.java index 543465645..753d54586 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/base/KineticTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/base/KineticTileEntity.java @@ -534,7 +534,7 @@ public class KineticTileEntity extends SmartTileEntity .forEach(offset -> { if (axis.choose(offset.getX(), offset.getY(), offset.getZ()) != 0) return; - if (offset.distSqr(0, 0, 0, false) != BlockPos.ZERO.distSqr(1, 1, 0, false)) + if (offset.distSqr(BlockPos.ZERO) != 2) return; neighbours.add(worldPosition.offset(offset)); }); diff --git a/src/main/java/com/simibubi/create/content/contraptions/itemAssembly/SequencedAssemblyRecipeBuilder.java b/src/main/java/com/simibubi/create/content/contraptions/itemAssembly/SequencedAssemblyRecipeBuilder.java index e42a5837a..18924d88a 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/itemAssembly/SequencedAssemblyRecipeBuilder.java +++ b/src/main/java/com/simibubi/create/content/contraptions/itemAssembly/SequencedAssemblyRecipeBuilder.java @@ -15,7 +15,7 @@ import com.simibubi.create.content.contraptions.processing.ProcessingRecipeBuild import net.minecraft.data.recipes.FinishedRecipe; import net.minecraft.resources.ResourceLocation; -import net.minecraft.tags.Tag; +import net.minecraft.tags.TagKey; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.crafting.Ingredient; @@ -52,7 +52,7 @@ public class SequencedAssemblyRecipeBuilder { return require(Ingredient.of(ingredient)); } - public SequencedAssemblyRecipeBuilder require(Tag.Named tag) { + public SequencedAssemblyRecipeBuilder require(TagKey tag) { return require(Ingredient.of(tag)); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/processing/ProcessingRecipeBuilder.java b/src/main/java/com/simibubi/create/content/contraptions/processing/ProcessingRecipeBuilder.java index b87345a22..4d5ab1e33 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/processing/ProcessingRecipeBuilder.java +++ b/src/main/java/com/simibubi/create/content/contraptions/processing/ProcessingRecipeBuilder.java @@ -14,7 +14,7 @@ import com.simibubi.create.foundation.utility.recipe.IRecipeTypeInfo; import net.minecraft.core.NonNullList; import net.minecraft.data.recipes.FinishedRecipe; import net.minecraft.resources.ResourceLocation; -import net.minecraft.tags.Tag; +import net.minecraft.tags.TagKey; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.crafting.Ingredient; @@ -103,7 +103,7 @@ public class ProcessingRecipeBuilder> { // Datagen shortcuts - public ProcessingRecipeBuilder require(Tag.Named tag) { + public ProcessingRecipeBuilder require(TagKey tag) { return require(Ingredient.of(tag)); } @@ -120,7 +120,7 @@ public class ProcessingRecipeBuilder> { return require(FluidIngredient.fromFluid(fluid, amount)); } - public ProcessingRecipeBuilder require(Tag.Named fluidTag, int amount) { + public ProcessingRecipeBuilder require(TagKey fluidTag, int amount) { return require(FluidIngredient.fromTag(fluidTag, amount)); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/elementary/SimpleKineticTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/relays/elementary/SimpleKineticTileEntity.java index 267f7f9b0..87c9243d2 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/elementary/SimpleKineticTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/elementary/SimpleKineticTileEntity.java @@ -28,7 +28,7 @@ public class SimpleKineticTileEntity extends KineticTileEntity { BlockPos.betweenClosedStream(new BlockPos(-1, -1, -1), new BlockPos(1, 1, 1)) .forEach(offset -> { - if (offset.distSqr(0, 0, 0, false) == BlockPos.ZERO.distSqr(1, 1, 0, false)) + if (offset.distSqr(BlockPos.ZERO) == 2) neighbours.add(worldPosition.offset(offset)); }); return neighbours; diff --git a/src/main/java/com/simibubi/create/content/curiosities/bell/SoulPulseEffect.java b/src/main/java/com/simibubi/create/content/curiosities/bell/SoulPulseEffect.java index 745f67a60..892020b1f 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/bell/SoulPulseEffect.java +++ b/src/main/java/com/simibubi/create/content/curiosities/bell/SoulPulseEffect.java @@ -119,7 +119,7 @@ public class SoulPulseEffect { for (int z = 0; z < MAX_DISTANCE; z++) { BlockPos candidate = new BlockPos(x, y, z); - int dist = (int) Math.round(Math.sqrt(candidate.distSqr(0, 0, 0, false))); + int dist = (int) Math.round(Math.sqrt(candidate.distSqr(BlockPos.ZERO))); if (dist > MAX_DISTANCE) continue; if (dist <= 0) diff --git a/src/main/java/com/simibubi/create/content/curiosities/tools/BlueprintOverlayRenderer.java b/src/main/java/com/simibubi/create/content/curiosities/tools/BlueprintOverlayRenderer.java index d3be9e46e..8748d0837 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/tools/BlueprintOverlayRenderer.java +++ b/src/main/java/com/simibubi/create/content/curiosities/tools/BlueprintOverlayRenderer.java @@ -25,7 +25,7 @@ import net.minecraft.client.Minecraft; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.ListTag; import net.minecraft.tags.ItemTags; -import net.minecraft.tags.Tag; +import net.minecraft.tags.TagKey; import net.minecraft.world.inventory.CraftingContainer; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; @@ -206,7 +206,8 @@ public class BlueprintOverlayRenderer { } } - public static void renderOverlay(ForgeIngameGui gui, PoseStack poseStack, float partialTicks, int width, int height) { + public static void renderOverlay(ForgeIngameGui gui, PoseStack poseStack, float partialTicks, int width, + int height) { if (!active || empty) return; @@ -279,7 +280,7 @@ public class BlueprintOverlayRenderer { ItemAttribute fromNBT = ItemAttribute.fromNBT((CompoundTag) attributes.get(0)); if (fromNBT instanceof ItemAttribute.InTag) { ItemAttribute.InTag inTag = (ItemAttribute.InTag) fromNBT; - Tag itag = ItemTags.getAllTags() + TagKey itag = ItemTags.getAllTags() .getTag(inTag.tagName); if (itag != null) return Ingredient.of(itag) diff --git a/src/main/java/com/simibubi/create/content/logistics/item/filter/ItemAttribute.java b/src/main/java/com/simibubi/create/content/logistics/item/filter/ItemAttribute.java index 6a2e7e982..2e14f7435 100644 --- a/src/main/java/com/simibubi/create/content/logistics/item/filter/ItemAttribute.java +++ b/src/main/java/com/simibubi/create/content/logistics/item/filter/ItemAttribute.java @@ -29,6 +29,7 @@ import com.simibubi.create.foundation.utility.Lang; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.chat.TranslatableComponent; import net.minecraft.resources.ResourceLocation; +import net.minecraft.tags.TagKey; import net.minecraft.world.Container; import net.minecraft.world.entity.EquipmentSlot; import net.minecraft.world.entity.LivingEntity; @@ -49,6 +50,7 @@ import net.minecraftforge.fml.ModList; import net.minecraftforge.forgespi.language.IModInfo; import net.minecraftforge.items.ItemStackHandler; import net.minecraftforge.items.wrapper.RecipeWrapper; +import net.minecraftforge.registries.ForgeRegistries; public interface ItemAttribute { @@ -131,14 +133,16 @@ public interface ItemAttribute { DUMMY(s -> false), PLACEABLE(s -> s.getItem() instanceof BlockItem), CONSUMABLE(ItemStack::isEdible), - FLUID_CONTAINER(s -> s.getCapability(CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY).isPresent()), + FLUID_CONTAINER(s -> s.getCapability(CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY) + .isPresent()), ENCHANTED(ItemStack::isEnchanted), MAX_ENCHANTED(StandardTraits::maxEnchanted), RENAMED(ItemStack::hasCustomHoverName), DAMAGED(ItemStack::isDamaged), BADLY_DAMAGED(s -> s.isDamaged() && s.getDamageValue() / s.getMaxDamage() > 3 / 4f), NOT_STACKABLE(((Predicate) ItemStack::isStackable).negate()), - EQUIPABLE(s -> LivingEntity.getEquipmentSlotForItem(s).getType() != EquipmentSlot.Type.HAND), + EQUIPABLE(s -> LivingEntity.getEquipmentSlotForItem(s) + .getType() != EquipmentSlot.Type.HAND), FURNACE_FUEL(AbstractFurnaceBlockEntity::isFuel), WASHABLE(InWorldProcessing::isWashable), HAUNTABLE(InWorldProcessing::isHauntable), @@ -167,7 +171,8 @@ public interface ItemAttribute { return EnchantmentHelper.getEnchantments(s) .entrySet() .stream() - .anyMatch(e -> e.getKey().getMaxLevel() <= e.getValue()); + .anyMatch(e -> e.getKey() + .getMaxLevel() <= e.getValue()); } private StandardTraits(BiPredicate test) { @@ -235,16 +240,19 @@ public interface ItemAttribute { @Override public boolean appliesTo(ItemStack stack) { - return stack.getItem() - .getTags() - .contains(tagName); + return ForgeRegistries.ITEMS.getHolder(stack.getItem()) + .get() + .tags() + .anyMatch(t -> t.location() + .equals(tagName)); } @Override public List listAttributesOf(ItemStack stack) { - return stack.getItem() - .getTags() - .stream() + return ForgeRegistries.ITEMS.getHolder(stack.getItem()) + .get() + .tags() + .map(TagKey::location) .map(InTag::new) .collect(Collectors.toList()); } diff --git a/src/main/java/com/simibubi/create/content/palettes/AllPaletteStoneTypes.java b/src/main/java/com/simibubi/create/content/palettes/AllPaletteStoneTypes.java index 92299feb7..c13c9ed0f 100644 --- a/src/main/java/com/simibubi/create/content/palettes/AllPaletteStoneTypes.java +++ b/src/main/java/com/simibubi/create/content/palettes/AllPaletteStoneTypes.java @@ -12,7 +12,7 @@ import com.simibubi.create.foundation.utility.Lang; import com.tterrag.registrate.util.nullness.NonNullSupplier; import net.minecraft.tags.ItemTags; -import net.minecraft.tags.Tag; +import net.minecraft.tags.TagKey; import net.minecraft.world.item.Item; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Blocks; @@ -60,7 +60,7 @@ public enum AllPaletteStoneTypes { public NonNullSupplier baseBlock; public PaletteBlockPattern[] variantTypes; - public Tag.Named materialTag; + public TagKey materialTag; private AllPaletteStoneTypes(PaletteBlockPattern[] variantTypes, Function> factory) { diff --git a/src/main/java/com/simibubi/create/content/palettes/PaletteBlockPartial.java b/src/main/java/com/simibubi/create/content/palettes/PaletteBlockPartial.java index 835a07c36..5d917b39e 100644 --- a/src/main/java/com/simibubi/create/content/palettes/PaletteBlockPartial.java +++ b/src/main/java/com/simibubi/create/content/palettes/PaletteBlockPartial.java @@ -23,7 +23,7 @@ import net.minecraft.data.recipes.ShapelessRecipeBuilder; import net.minecraft.resources.ResourceLocation; import net.minecraft.tags.BlockTags; import net.minecraft.tags.ItemTags; -import net.minecraft.tags.Tag; +import net.minecraft.tags.TagKey; import net.minecraft.world.item.BlockItem; import net.minecraft.world.item.Item; import net.minecraft.world.level.block.Block; @@ -90,9 +90,9 @@ public abstract class PaletteBlockPartial { return true; } - protected abstract Iterable> getBlockTags(); + protected abstract Iterable> getBlockTags(); - protected abstract Iterable> getItemTags(); + protected abstract Iterable> getItemTags(); protected abstract B createBlock(Supplier block); @@ -121,12 +121,12 @@ public abstract class PaletteBlockPartial { } @Override - protected Iterable> getBlockTags() { + protected Iterable> getBlockTags() { return Arrays.asList(BlockTags.STAIRS); } @Override - protected Iterable> getItemTags() { + protected Iterable> getItemTags() { return Arrays.asList(ItemTags.STAIRS); } @@ -184,12 +184,12 @@ public abstract class PaletteBlockPartial { } @Override - protected Iterable> getBlockTags() { + protected Iterable> getBlockTags() { return Arrays.asList(BlockTags.SLABS); } @Override - protected Iterable> getItemTags() { + protected Iterable> getItemTags() { return Arrays.asList(ItemTags.SLABS); } @@ -242,12 +242,12 @@ public abstract class PaletteBlockPartial { } @Override - protected Iterable> getBlockTags() { + protected Iterable> getBlockTags() { return Arrays.asList(BlockTags.WALLS); } @Override - protected Iterable> getItemTags() { + protected Iterable> getItemTags() { return Arrays.asList(ItemTags.WALLS); } diff --git a/src/main/java/com/simibubi/create/content/palettes/PaletteBlockPattern.java b/src/main/java/com/simibubi/create/content/palettes/PaletteBlockPattern.java index 64a483349..2c80a9a02 100644 --- a/src/main/java/com/simibubi/create/content/palettes/PaletteBlockPattern.java +++ b/src/main/java/com/simibubi/create/content/palettes/PaletteBlockPattern.java @@ -28,7 +28,7 @@ import com.tterrag.registrate.util.nullness.NonNullSupplier; import net.minecraft.client.renderer.RenderType; import net.minecraft.core.Direction.Axis; import net.minecraft.resources.ResourceLocation; -import net.minecraft.tags.Tag; +import net.minecraft.tags.TagKey; import net.minecraft.world.item.Item; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockBehaviour.Properties; @@ -71,8 +71,8 @@ public class PaletteBlockPattern { private String[] textures; private String id; private boolean isTranslucent; - private Tag.Named[] blockTags; - private Tag.Named[] itemTags; + private TagKey[] blockTags; + private TagKey[] itemTags; private Optional> ctFactory; private IPatternBlockStateGenerator blockStateGenerator; @@ -106,11 +106,11 @@ public class PaletteBlockPattern { return isTranslucent; } - public Tag.Named[] getBlockTags() { + public TagKey[] getBlockTags() { return blockTags; } - public Tag.Named[] getItemTags() { + public TagKey[] getItemTags() { return itemTags; } diff --git a/src/main/java/com/simibubi/create/content/palettes/PalettesVariantEntry.java b/src/main/java/com/simibubi/create/content/palettes/PalettesVariantEntry.java index 656abe88b..f6d8c1435 100644 --- a/src/main/java/com/simibubi/create/content/palettes/PalettesVariantEntry.java +++ b/src/main/java/com/simibubi/create/content/palettes/PalettesVariantEntry.java @@ -13,7 +13,7 @@ import com.tterrag.registrate.util.entry.BlockEntry; import com.tterrag.registrate.util.nullness.NonNullSupplier; import net.minecraft.client.renderer.RenderType; -import net.minecraft.tags.Tag; +import net.minecraft.tags.TagKey; import net.minecraft.world.item.BlockItem; import net.minecraft.world.item.Item; import net.minecraft.world.level.block.Block; @@ -41,10 +41,10 @@ public class PalettesVariantEntry { ItemBuilder> itemBuilder = builder.item(); - Tag.Named[] blockTags = pattern.getBlockTags(); + TagKey[] blockTags = pattern.getBlockTags(); if (blockTags != null) builder.tag(blockTags); - Tag.Named[] itemTags = pattern.getItemTags(); + TagKey[] itemTags = pattern.getItemTags(); if (itemTags != null) itemBuilder.tag(itemTags); diff --git a/src/main/java/com/simibubi/create/content/schematics/SchematicChunkSource.java b/src/main/java/com/simibubi/create/content/schematics/SchematicChunkSource.java index 48b250207..1a51bb12b 100644 --- a/src/main/java/com/simibubi/create/content/schematics/SchematicChunkSource.java +++ b/src/main/java/com/simibubi/create/content/schematics/SchematicChunkSource.java @@ -8,13 +8,13 @@ import javax.annotation.Nullable; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; +import net.minecraft.core.Holder; import net.minecraft.core.Registry; import net.minecraft.core.RegistryAccess; import net.minecraft.resources.ResourceKey; import net.minecraft.server.level.ChunkHolder; import net.minecraft.sounds.SoundEvent; import net.minecraft.sounds.SoundSource; -import net.minecraft.tags.TagContainer; import net.minecraft.util.profiling.ProfilerFiller; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.player.Player; @@ -82,7 +82,7 @@ public class SchematicChunkSource extends ChunkSource { } @Override - public void tick(BooleanSupplier pHasTimeLeft) {} + public void tick(BooleanSupplier p_202162_, boolean p_202163_) {} @Override public int getLoadedChunksCount() { @@ -94,7 +94,7 @@ public class SchematicChunkSource extends ChunkSource { private static final class DummyLevel extends Level { private RegistryAccess access; - private DummyLevel(WritableLevelData p_46450_, ResourceKey p_46451_, DimensionType p_46452_, + private DummyLevel(WritableLevelData p_46450_, ResourceKey p_46451_, Holder p_46452_, Supplier p_46453_, boolean p_46454_, boolean p_46455_, long p_46456_) { super(p_46450_, p_46451_, p_46452_, p_46453_, p_46454_, p_46455_, p_46456_); } @@ -126,7 +126,7 @@ public class SchematicChunkSource extends ChunkSource { } @Override - public Biome getUncachedNoiseBiome(int pX, int pY, int pZ) { + public Holder getUncachedNoiseBiome(int pX, int pY, int pZ) { return null; } @@ -139,12 +139,12 @@ public class SchematicChunkSource extends ChunkSource { public void sendBlockUpdated(BlockPos pPos, BlockState pOldState, BlockState pNewState, int pFlags) {} @Override - public void playSound(Player pPlayer, double pX, double pY, double pZ, SoundEvent pSound, SoundSource pCategory, - float pVolume, float pPitch) {} + public void playSound(Player pPlayer, double pX, double pY, double pZ, SoundEvent pSound, + SoundSource pCategory, float pVolume, float pPitch) {} @Override - public void playSound(Player pPlayer, Entity pEntity, SoundEvent pEvent, SoundSource pCategory, float pVolume, - float pPitch) {} + public void playSound(Player pPlayer, Entity pEntity, SoundEvent pEvent, SoundSource pCategory, + float pVolume, float pPitch) {} @Override public String gatherChunkSourceStats() { @@ -182,11 +182,6 @@ public class SchematicChunkSource extends ChunkSource { return null; } - @Override - public TagContainer getTagManager() { - return null; - } - @Override protected LevelEntityGetter getEntities() { return null; @@ -203,9 +198,9 @@ public class SchematicChunkSource extends ChunkSource { } } - private static final DummyLevel DUMMY_LEVEL = new DummyLevel(null, null, - RegistryAccess.builtin().registryOrThrow(Registry.DIMENSION_TYPE_REGISTRY).getOrThrow(DimensionType.OVERWORLD_LOCATION), - null, false, false, 0); + private static final DummyLevel DUMMY_LEVEL = new DummyLevel(null, null, RegistryAccess.BUILTIN.get() + .registryOrThrow(Registry.DIMENSION_TYPE_REGISTRY) + .getHolderOrThrow(DimensionType.OVERWORLD_LOCATION), null, false, false, 0); public EmptierChunk(RegistryAccess registryAccess) { super(DUMMY_LEVEL.withAccess(registryAccess), null); diff --git a/src/main/java/com/simibubi/create/content/schematics/SchematicWorld.java b/src/main/java/com/simibubi/create/content/schematics/SchematicWorld.java index 2fa4526b9..b03fc9b00 100644 --- a/src/main/java/com/simibubi/create/content/schematics/SchematicWorld.java +++ b/src/main/java/com/simibubi/create/content/schematics/SchematicWorld.java @@ -14,6 +14,7 @@ import com.simibubi.create.foundation.utility.worldWrappers.WrappedWorld; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; +import net.minecraft.core.Holder; import net.minecraft.server.level.ServerLevel; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.decoration.ArmorStand; @@ -138,8 +139,9 @@ public class SchematicWorld extends WrappedWorld implements ServerLevelAccessor } @Override - public Biome getBiome(BlockPos pos) { - return ForgeRegistries.BIOMES.getValue(Biomes.PLAINS.location()); + public Holder getBiome(BlockPos pos) { + return ForgeRegistries.BIOMES.getHolder(Biomes.PLAINS.location()) + .orElse(null); } @Override @@ -168,8 +170,7 @@ public class SchematicWorld extends WrappedWorld implements ServerLevelAccessor } @Override - public List getEntitiesOfClass(Class arg0, AABB arg1, - Predicate arg2) { + public List getEntitiesOfClass(Class arg0, AABB arg1, Predicate arg2) { return Collections.emptyList(); } diff --git a/src/main/java/com/simibubi/create/foundation/data/CreateRegistrate.java b/src/main/java/com/simibubi/create/foundation/data/CreateRegistrate.java index 7a1e8502b..92b34bdc9 100644 --- a/src/main/java/com/simibubi/create/foundation/data/CreateRegistrate.java +++ b/src/main/java/com/simibubi/create/foundation/data/CreateRegistrate.java @@ -23,7 +23,6 @@ import com.tterrag.registrate.builders.BlockBuilder; import com.tterrag.registrate.builders.BlockEntityBuilder.BlockEntityFactory; import com.tterrag.registrate.builders.Builder; import com.tterrag.registrate.builders.FluidBuilder; -import com.tterrag.registrate.util.NonNullLazyValue; import com.tterrag.registrate.util.entry.RegistryEntry; import com.tterrag.registrate.util.nullness.NonNullBiFunction; import com.tterrag.registrate.util.nullness.NonNullConsumer; @@ -55,9 +54,9 @@ public class CreateRegistrate extends AbstractRegistrate { super(modid); } - public static NonNullLazyValue lazy(String modid) { - return new NonNullLazyValue<>( - () -> new CreateRegistrate(modid).registerEventListeners(FMLJavaModLoadingContext.get() + public static NonNullSupplier lazy(String modid) { + return NonNullSupplier + .lazy(() -> new CreateRegistrate(modid).registerEventListeners(FMLJavaModLoadingContext.get() .getModEventBus())); } @@ -187,7 +186,8 @@ public class CreateRegistrate extends AbstractRegistrate { /* Util */ - public static NonNullConsumer connectedTextures(Supplier behavior) { + public static NonNullConsumer connectedTextures( + Supplier behavior) { return entry -> onClient(() -> () -> registerCTBehviour(entry, behavior)); } diff --git a/src/main/java/com/simibubi/create/foundation/data/NamedTag.java b/src/main/java/com/simibubi/create/foundation/data/NamedTag.java deleted file mode 100644 index 5a7293a5d..000000000 --- a/src/main/java/com/simibubi/create/foundation/data/NamedTag.java +++ /dev/null @@ -1,42 +0,0 @@ -package com.simibubi.create.foundation.data; - -import java.util.Collections; -import java.util.List; - -import javax.annotation.Nullable; -import javax.annotation.ParametersAreNonnullByDefault; - -import net.minecraft.MethodsReturnNonnullByDefault; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.tags.Tag; - -@ParametersAreNonnullByDefault -@MethodsReturnNonnullByDefault -public class NamedTag implements Tag.Named { - private final ResourceLocation id; - private final Tag tag; - - public NamedTag(@Nullable Tag tag, ResourceLocation id) { - this.tag = tag; - this.id = id; - } - - @Override - public ResourceLocation getName() { - return id; - } - - @Override - public boolean contains(T p_230235_1_) { - if (tag == null) - return false; - return tag.contains(p_230235_1_); - } - - @Override - public List getValues() { - if (tag == null) - return Collections.emptyList(); - return tag.getValues(); - } -} diff --git a/src/main/java/com/simibubi/create/foundation/data/recipe/CreateRecipeProvider.java b/src/main/java/com/simibubi/create/foundation/data/recipe/CreateRecipeProvider.java index b978da112..894d493d7 100644 --- a/src/main/java/com/simibubi/create/foundation/data/recipe/CreateRecipeProvider.java +++ b/src/main/java/com/simibubi/create/foundation/data/recipe/CreateRecipeProvider.java @@ -13,7 +13,7 @@ import net.minecraft.data.DataGenerator; import net.minecraft.data.recipes.FinishedRecipe; import net.minecraft.data.recipes.RecipeProvider; import net.minecraft.tags.ItemTags; -import net.minecraft.tags.Tag; +import net.minecraft.tags.TagKey; import net.minecraft.world.item.Item; import net.minecraft.world.item.Items; import net.minecraft.world.level.ItemLike; @@ -48,27 +48,27 @@ public abstract class CreateRecipeProvider extends RecipeProvider { protected static class I { - static Tag.Named redstone() { + static TagKey redstone() { return Tags.Items.DUSTS_REDSTONE; } - static Tag.Named planks() { + static TagKey planks() { return ItemTags.PLANKS; } - static Tag.Named woodSlab() { + static TagKey woodSlab() { return ItemTags.WOODEN_SLABS; } - static Tag.Named gold() { + static TagKey gold() { return AllTags.forgeItemTag("ingots/gold"); } - static Tag.Named goldSheet() { + static TagKey goldSheet() { return AllTags.forgeItemTag("plates/gold"); } - static Tag.Named stone() { + static TagKey stone() { return Tags.Items.STONE; } @@ -92,27 +92,27 @@ public abstract class CreateRecipeProvider extends RecipeProvider { return AllBlocks.ANDESITE_CASING.get(); } - static Tag.Named brass() { + static TagKey brass() { return AllTags.forgeItemTag("ingots/brass"); } - static Tag.Named brassSheet() { + static TagKey brassSheet() { return AllTags.forgeItemTag("plates/brass"); } - static Tag.Named iron() { + static TagKey iron() { return Tags.Items.INGOTS_IRON; } - static Tag.Named ironNugget() { + static TagKey ironNugget() { return AllTags.forgeItemTag("nuggets/iron"); } - static Tag.Named zinc() { + static TagKey zinc() { return AllTags.forgeItemTag("ingots/zinc"); } - static Tag.Named ironSheet() { + static TagKey ironSheet() { return AllTags.forgeItemTag("plates/iron"); } @@ -132,11 +132,11 @@ public abstract class CreateRecipeProvider extends RecipeProvider { return Items.COPPER_BLOCK; } - static Tag.Named brassBlock() { + static TagKey brassBlock() { return AllTags.forgeItemTag("storage_blocks/brass"); } - static Tag.Named zincBlock() { + static TagKey zincBlock() { return AllTags.forgeItemTag("storage_blocks/zinc"); } @@ -144,19 +144,19 @@ public abstract class CreateRecipeProvider extends RecipeProvider { return Items.COPPER_INGOT; } - static Tag.Named copperSheet() { + static TagKey copperSheet() { return AllTags.forgeItemTag("plates/copper"); } - static Tag.Named copperNugget() { + static TagKey copperNugget() { return AllTags.forgeItemTag("nuggets/copper"); } - static Tag.Named brassNugget() { + static TagKey brassNugget() { return AllTags.forgeItemTag("nuggets/brass"); } - static Tag.Named zincNugget() { + static TagKey zincNugget() { return AllTags.forgeItemTag("nuggets/zinc"); } diff --git a/src/main/java/com/simibubi/create/foundation/data/recipe/StandardRecipeGen.java b/src/main/java/com/simibubi/create/foundation/data/recipe/StandardRecipeGen.java index 36c3f301e..937f48edc 100644 --- a/src/main/java/com/simibubi/create/foundation/data/recipe/StandardRecipeGen.java +++ b/src/main/java/com/simibubi/create/foundation/data/recipe/StandardRecipeGen.java @@ -41,7 +41,7 @@ import net.minecraft.data.recipes.SimpleCookingRecipeBuilder; import net.minecraft.data.recipes.SpecialRecipeBuilder; import net.minecraft.resources.ResourceLocation; import net.minecraft.tags.ItemTags; -import net.minecraft.tags.Tag; +import net.minecraft.tags.TagKey; import net.minecraft.world.item.DyeColor; import net.minecraft.world.item.Item; import net.minecraft.world.item.Items; @@ -1122,13 +1122,13 @@ public class StandardRecipeGen extends CreateRecipeProvider { } GeneratedRecipe metalCompacting(List> variants, - List>> ingredients) { + List>> ingredients) { GeneratedRecipe result = null; for (int i = 0; i + 1 < variants.size(); i++) { ItemProviderEntry currentEntry = variants.get(i); ItemProviderEntry nextEntry = variants.get(i + 1); - Supplier> currentIngredient = ingredients.get(i); - Supplier> nextIngredient = ingredients.get(i + 1); + Supplier> currentIngredient = ingredients.get(i); + Supplier> nextIngredient = ingredients.get(i + 1); result = create(nextEntry).withSuffix("_from_compacting") .unlockedBy(currentEntry::get) @@ -1197,7 +1197,7 @@ public class StandardRecipeGen extends CreateRecipeProvider { return this; } - GeneratedRecipeBuilder unlockedByTag(Supplier> tag) { + GeneratedRecipeBuilder unlockedByTag(Supplier> tag) { this.unlockedBy = () -> ItemPredicate.Builder.item() .of(tag.get()) .build(); @@ -1258,7 +1258,7 @@ public class StandardRecipeGen extends CreateRecipeProvider { return unlockedBy(item).viaCookingIngredient(() -> Ingredient.of(item.get())); } - GeneratedCookingRecipeBuilder viaCookingTag(Supplier> tag) { + GeneratedCookingRecipeBuilder viaCookingTag(Supplier> tag) { return unlockedByTag(tag).viaCookingIngredient(() -> Ingredient.of(tag.get())); } diff --git a/src/main/java/com/simibubi/create/foundation/fluid/FluidIngredient.java b/src/main/java/com/simibubi/create/foundation/fluid/FluidIngredient.java index 5695d738c..614b05090 100644 --- a/src/main/java/com/simibubi/create/foundation/fluid/FluidIngredient.java +++ b/src/main/java/com/simibubi/create/foundation/fluid/FluidIngredient.java @@ -19,7 +19,7 @@ import net.minecraft.nbt.CompoundTag; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.resources.ResourceLocation; import net.minecraft.tags.SerializationTags; -import net.minecraft.tags.Tag; +import net.minecraft.tags.TagKey; import net.minecraft.util.GsonHelper; import net.minecraft.world.level.material.FlowingFluid; import net.minecraft.world.level.material.Fluid; @@ -31,7 +31,7 @@ public abstract class FluidIngredient implements Predicate { public List matchingFluidStacks; - public static FluidIngredient fromTag(Tag.Named tag, int amount) { + public static FluidIngredient fromTag(TagKey tag, int amount) { FluidTagIngredient ingredient = new FluidTagIngredient(); ingredient.tag = tag; ingredient.amountRequired = amount; @@ -198,7 +198,7 @@ public abstract class FluidIngredient implements Predicate { public static class FluidTagIngredient extends FluidIngredient { - protected Tag tag; + protected TagKey tag; @Override protected boolean testInternal(FluidStack t) { diff --git a/src/main/java/com/simibubi/create/foundation/ponder/element/WorldSectionElement.java b/src/main/java/com/simibubi/create/foundation/ponder/element/WorldSectionElement.java index 5eedc857e..ad2549630 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/element/WorldSectionElement.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/element/WorldSectionElement.java @@ -436,7 +436,7 @@ public class WorldSectionElement extends AnimatedSceneElement { } if (!fluidState.isEmpty() && ItemBlockRenderTypes.canRenderInLayer(fluidState, layer)) - dispatcher.renderLiquid(pos, world, builder, fluidState); + dispatcher.renderLiquid(pos, world, builder, state, fluidState); poseStack.popPose(); }); diff --git a/src/main/java/com/simibubi/create/foundation/utility/worldWrappers/WrappedClientWorld.java b/src/main/java/com/simibubi/create/foundation/utility/worldWrappers/WrappedClientWorld.java index ea5e0fb16..fb8025832 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/worldWrappers/WrappedClientWorld.java +++ b/src/main/java/com/simibubi/create/foundation/utility/worldWrappers/WrappedClientWorld.java @@ -5,7 +5,6 @@ import java.util.List; import javax.annotation.Nullable; import javax.annotation.ParametersAreNonnullByDefault; -import mezz.jei.api.MethodsReturnNonnullByDefault; import net.minecraft.client.Minecraft; import net.minecraft.client.multiplayer.ClientLevel; import net.minecraft.core.BlockPos; @@ -27,15 +26,14 @@ import net.minecraftforge.api.distmarker.OnlyIn; @OnlyIn(Dist.CLIENT) @SuppressWarnings("deprecation") @ParametersAreNonnullByDefault -@MethodsReturnNonnullByDefault public class WrappedClientWorld extends ClientLevel { private static final Minecraft mc = Minecraft.getInstance(); protected Level world; private WrappedClientWorld(Level world) { - super(mc.getConnection(), mc.level.getLevelData(), world.dimension(), world.dimensionType(), - mc.getConnection().serverChunkRadius, mc.level.getServerSimulationDistance(), - world.getProfilerSupplier(), mc.levelRenderer, world.isDebug(), world.getBiomeManager().biomeZoomSeed); + super(mc.getConnection(), mc.level.getLevelData(), world.dimension(), world.dimensionTypeRegistration(), + mc.getConnection().serverChunkRadius, mc.level.getServerSimulationDistance(), world.getProfilerSupplier(), + mc.levelRenderer, world.isDebug(), world.getBiomeManager().biomeZoomSeed); this.world = world; } @@ -47,7 +45,7 @@ public class WrappedClientWorld extends ClientLevel { public boolean hasChunkAt(BlockPos pos) { return world.hasChunkAt(pos); } - + @Override public boolean isLoaded(BlockPos pos) { return world.isLoaded(pos); @@ -58,8 +56,8 @@ public class WrappedClientWorld extends ClientLevel { return world.getBlockState(pos); } - // FIXME: blockstate#getCollisionShape with WrappedClientWorld gives unreliable data (maybe) - + // FIXME: blockstate#getCollisionShape with WrappedClientWorld gives unreliable + // data (maybe) @Override public int getBrightness(LightLayer type, BlockPos pos) { @@ -78,7 +76,8 @@ public class WrappedClientWorld extends ClientLevel { @Nullable @Override - public T getNearestEntity(List p_217361_1_, TargetingConditions p_217361_2_, @Nullable LivingEntity p_217361_3_, double p_217361_4_, double p_217361_6_, double p_217361_8_) { + public T getNearestEntity(List p_217361_1_, TargetingConditions p_217361_2_, + @Nullable LivingEntity p_217361_3_, double p_217361_4_, double p_217361_6_, double p_217361_8_) { return world.getNearestEntity(p_217361_1_, p_217361_2_, p_217361_3_, p_217361_4_, p_217361_6_, p_217361_8_); } @@ -89,35 +88,45 @@ public class WrappedClientWorld extends ClientLevel { // FIXME: Emissive Lighting might not light stuff properly - @Override - public void addParticle(ParticleOptions p_195594_1_, double p_195594_2_, double p_195594_4_, double p_195594_6_, double p_195594_8_, double p_195594_10_, double p_195594_12_) { + public void addParticle(ParticleOptions p_195594_1_, double p_195594_2_, double p_195594_4_, double p_195594_6_, + double p_195594_8_, double p_195594_10_, double p_195594_12_) { world.addParticle(p_195594_1_, p_195594_2_, p_195594_4_, p_195594_6_, p_195594_8_, p_195594_10_, p_195594_12_); } @Override - public void addParticle(ParticleOptions p_195590_1_, boolean p_195590_2_, double p_195590_3_, double p_195590_5_, double p_195590_7_, double p_195590_9_, double p_195590_11_, double p_195590_13_) { - world.addParticle(p_195590_1_, p_195590_2_, p_195590_3_, p_195590_5_, p_195590_7_, p_195590_9_, p_195590_11_, p_195590_13_); + public void addParticle(ParticleOptions p_195590_1_, boolean p_195590_2_, double p_195590_3_, double p_195590_5_, + double p_195590_7_, double p_195590_9_, double p_195590_11_, double p_195590_13_) { + world.addParticle(p_195590_1_, p_195590_2_, p_195590_3_, p_195590_5_, p_195590_7_, p_195590_9_, p_195590_11_, + p_195590_13_); } @Override - public void addAlwaysVisibleParticle(ParticleOptions p_195589_1_, double p_195589_2_, double p_195589_4_, double p_195589_6_, double p_195589_8_, double p_195589_10_, double p_195589_12_) { - world.addAlwaysVisibleParticle(p_195589_1_, p_195589_2_, p_195589_4_, p_195589_6_, p_195589_8_, p_195589_10_, p_195589_12_); + public void addAlwaysVisibleParticle(ParticleOptions p_195589_1_, double p_195589_2_, double p_195589_4_, + double p_195589_6_, double p_195589_8_, double p_195589_10_, double p_195589_12_) { + world.addAlwaysVisibleParticle(p_195589_1_, p_195589_2_, p_195589_4_, p_195589_6_, p_195589_8_, p_195589_10_, + p_195589_12_); } @Override - public void addAlwaysVisibleParticle(ParticleOptions p_217404_1_, boolean p_217404_2_, double p_217404_3_, double p_217404_5_, double p_217404_7_, double p_217404_9_, double p_217404_11_, double p_217404_13_) { - world.addAlwaysVisibleParticle(p_217404_1_, p_217404_2_, p_217404_3_, p_217404_5_, p_217404_7_, p_217404_9_, p_217404_11_, p_217404_13_); + public void addAlwaysVisibleParticle(ParticleOptions p_217404_1_, boolean p_217404_2_, double p_217404_3_, + double p_217404_5_, double p_217404_7_, double p_217404_9_, double p_217404_11_, double p_217404_13_) { + world.addAlwaysVisibleParticle(p_217404_1_, p_217404_2_, p_217404_3_, p_217404_5_, p_217404_7_, p_217404_9_, + p_217404_11_, p_217404_13_); } @Override - public void playLocalSound(double p_184134_1_, double p_184134_3_, double p_184134_5_, SoundEvent p_184134_7_, SoundSource p_184134_8_, float p_184134_9_, float p_184134_10_, boolean p_184134_11_) { - world.playLocalSound(p_184134_1_, p_184134_3_, p_184134_5_, p_184134_7_,p_184134_8_, p_184134_9_, p_184134_10_, p_184134_11_); + public void playLocalSound(double p_184134_1_, double p_184134_3_, double p_184134_5_, SoundEvent p_184134_7_, + SoundSource p_184134_8_, float p_184134_9_, float p_184134_10_, boolean p_184134_11_) { + world.playLocalSound(p_184134_1_, p_184134_3_, p_184134_5_, p_184134_7_, p_184134_8_, p_184134_9_, p_184134_10_, + p_184134_11_); } @Override - public void playSound(@Nullable Player p_184148_1_, double p_184148_2_, double p_184148_4_, double p_184148_6_, SoundEvent p_184148_8_, SoundSource p_184148_9_, float p_184148_10_, float p_184148_11_) { - world.playSound(p_184148_1_, p_184148_2_, p_184148_4_, p_184148_6_, p_184148_8_, p_184148_9_, p_184148_10_, p_184148_11_); + public void playSound(@Nullable Player p_184148_1_, double p_184148_2_, double p_184148_4_, double p_184148_6_, + SoundEvent p_184148_8_, SoundSource p_184148_9_, float p_184148_10_, float p_184148_11_) { + world.playSound(p_184148_1_, p_184148_2_, p_184148_4_, p_184148_6_, p_184148_8_, p_184148_9_, p_184148_10_, + p_184148_11_); } @Nullable @@ -125,6 +134,7 @@ public class WrappedClientWorld extends ClientLevel { public BlockEntity getBlockEntity(BlockPos p_175625_1_) { return world.getBlockEntity(p_175625_1_); } + public Level getWrappedWorld() { return world; } diff --git a/src/main/java/com/simibubi/create/foundation/utility/worldWrappers/WrappedServerWorld.java b/src/main/java/com/simibubi/create/foundation/utility/worldWrappers/WrappedServerWorld.java index 41c1205a6..9996c4ddb 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/worldWrappers/WrappedServerWorld.java +++ b/src/main/java/com/simibubi/create/foundation/utility/worldWrappers/WrappedServerWorld.java @@ -8,12 +8,12 @@ import javax.annotation.ParametersAreNonnullByDefault; import net.minecraft.MethodsReturnNonnullByDefault; import net.minecraft.Util; import net.minecraft.core.BlockPos; +import net.minecraft.core.Holder; import net.minecraft.server.level.ServerChunkCache; import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; import net.minecraft.sounds.SoundEvent; import net.minecraft.sounds.SoundSource; -import net.minecraft.tags.TagContainer; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.crafting.RecipeManager; @@ -34,7 +34,7 @@ public class WrappedServerWorld extends ServerLevel { public WrappedServerWorld(Level world) { super(world.getServer(), Util.backgroundExecutor(), world.getServer().storageSource, - (ServerLevelData) world.getLevelData(), world.dimension(), world.dimensionType(), + (ServerLevelData) world.getLevelData(), world.dimension(), world.dimensionTypeRegistration(), new DummyStatusListener(), ((ServerChunkCache) world.getChunkSource()).getGenerator(), world.isDebug(), world.getBiomeManager().biomeZoomSeed, Collections.emptyList(), false); this.world = world; @@ -59,15 +59,14 @@ public class WrappedServerWorld extends ServerLevel { public LevelTicks getBlockTicks() { return super.getBlockTicks(); } - + @Override public LevelTicks getFluidTicks() { return super.getFluidTicks(); } @Override - public void levelEvent(Player player, int type, BlockPos pos, int data) { - } + public void levelEvent(Player player, int type, BlockPos pos, int data) {} @Override public List players() { @@ -76,13 +75,11 @@ public class WrappedServerWorld extends ServerLevel { @Override public void playSound(Player player, double x, double y, double z, SoundEvent soundIn, SoundSource category, - float volume, float pitch) { - } + float volume, float pitch) {} @Override - public void playSound(Player p_217384_1_, Entity p_217384_2_, SoundEvent p_217384_3_, - SoundSource p_217384_4_, float p_217384_5_, float p_217384_6_) { - } + public void playSound(Player p_217384_1_, Entity p_217384_2_, SoundEvent p_217384_3_, SoundSource p_217384_4_, + float p_217384_5_, float p_217384_6_) {} @Override public Entity getEntity(int id) { @@ -101,8 +98,7 @@ public class WrappedServerWorld extends ServerLevel { } @Override - public void setMapData(String mapId, MapItemSavedData mapDataIn) { - } + public void setMapData(String mapId, MapItemSavedData mapDataIn) {} @Override public int getFreeMapId() { @@ -110,8 +106,7 @@ public class WrappedServerWorld extends ServerLevel { } @Override - public void destroyBlockProgress(int breakerId, BlockPos pos, int progress) { - } + public void destroyBlockProgress(int breakerId, BlockPos pos, int progress) {} @Override public RecipeManager getRecipeManager() { @@ -119,12 +114,8 @@ public class WrappedServerWorld extends ServerLevel { } @Override - public TagContainer getTagManager() { - return world.getTagManager(); - } - - @Override - public Biome getUncachedNoiseBiome(int p_225604_1_, int p_225604_2_, int p_225604_3_) { + public Holder getUncachedNoiseBiome(int p_225604_1_, int p_225604_2_, int p_225604_3_) { return world.getUncachedNoiseBiome(p_225604_1_, p_225604_2_, p_225604_3_); } + } diff --git a/src/main/java/com/simibubi/create/foundation/utility/worldWrappers/WrappedWorld.java b/src/main/java/com/simibubi/create/foundation/utility/worldWrappers/WrappedWorld.java index e27910d2e..871f848da 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/worldWrappers/WrappedWorld.java +++ b/src/main/java/com/simibubi/create/foundation/utility/worldWrappers/WrappedWorld.java @@ -8,11 +8,11 @@ import javax.annotation.Nullable; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; +import net.minecraft.core.Holder; import net.minecraft.core.RegistryAccess; import net.minecraft.core.SectionPos; import net.minecraft.sounds.SoundEvent; import net.minecraft.sounds.SoundSource; -import net.minecraft.tags.TagContainer; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.crafting.RecipeManager; @@ -39,8 +39,8 @@ public class WrappedWorld extends Level { protected LevelEntityGetter entityGetter = new DummyLevelEntityGetter<>(); public WrappedWorld(Level world) { - super((WritableLevelData) world.getLevelData(), world.dimension(), world.dimensionType(), world::getProfiler, - world.isClientSide, world.isDebug(), 0); + super((WritableLevelData) world.getLevelData(), world.dimension(), world.dimensionTypeRegistration(), + world::getProfiler, world.isClientSide, world.isDebug(), 0); this.world = world; } @@ -136,8 +136,7 @@ public class WrappedWorld extends Level { } @Override - public void setMapData(String pMapId, MapItemSavedData pData) { - } + public void setMapData(String pMapId, MapItemSavedData pData) {} @Override public int getFreeMapId() { @@ -158,12 +157,7 @@ public class WrappedWorld extends Level { } @Override - public TagContainer getTagManager() { - return world.getTagManager(); - } - - @Override - public Biome getUncachedNoiseBiome(int p_225604_1_, int p_225604_2_, int p_225604_3_) { + public Holder getUncachedNoiseBiome(int p_225604_1_, int p_225604_2_, int p_225604_3_) { return world.getUncachedNoiseBiome(p_225604_1_, p_225604_2_, p_225604_3_); } @@ -183,12 +177,10 @@ public class WrappedWorld extends Level { } @Override - public void updateNeighbourForOutputSignal(BlockPos p_175666_1_, Block p_175666_2_) { - } + public void updateNeighbourForOutputSignal(BlockPos p_175666_1_, Block p_175666_2_) {} @Override - public void gameEvent(Entity pEntity, GameEvent pEvent, BlockPos pPos) { - } + public void gameEvent(Entity pEntity, GameEvent pEvent, BlockPos pPos) {} @Override public String gatherChunkSourceStats() { @@ -200,9 +192,12 @@ public class WrappedWorld extends Level { return entityGetter; } - // Intentionally copied from LevelHeightAccessor. Workaround for issues caused when other mods (such as Lithium) - // override the vanilla implementations in ways which cause WrappedWorlds to return incorrect, default height info. - // WrappedWorld subclasses should implement their own getMinBuildHeight and getHeight overrides where they deviate + // Intentionally copied from LevelHeightAccessor. Workaround for issues caused + // when other mods (such as Lithium) + // override the vanilla implementations in ways which cause WrappedWorlds to + // return incorrect, default height info. + // WrappedWorld subclasses should implement their own getMinBuildHeight and + // getHeight overrides where they deviate // from the defaults for their dimension. @Override diff --git a/src/main/resources/pack.mcmeta b/src/main/resources/pack.mcmeta index 768dbe3db..121c35266 100644 --- a/src/main/resources/pack.mcmeta +++ b/src/main/resources/pack.mcmeta @@ -1,6 +1,6 @@ { "pack": { "description": "Create resources", - "pack_format": 8 + "pack_format": 9 } } From 2fa65727d5f563311e0c0950f44e36fc69d105be Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Tue, 22 Mar 2022 00:29:46 +0100 Subject: [PATCH 26/29] Holder Holdups - Finished work on compilation errors --- .../java/com/simibubi/create/AllItems.java | 6 +- .../create/AllMovementBehaviours.java | 2 +- .../java/com/simibubi/create/AllTags.java | 56 +++++++++++-------- src/main/java/com/simibubi/create/Create.java | 2 +- .../dispenser/DispenserMovementBehaviour.java | 26 +++------ .../BlockMovementChecks.java | 7 +-- .../processing/InWorldProcessing.java | 23 +++++--- .../contraptions/relays/belt/BeltBlock.java | 11 +++- .../tools/BlueprintOverlayRenderer.java | 10 +++- .../weapons/BuiltinPotatoProjectileTypes.java | 53 +++++++++++------- .../palettes/AllPaletteStoneTypes.java | 8 ++- .../MechanicalCraftingRecipeBuilder.java | 4 +- .../foundation/fluid/FluidIngredient.java | 21 ++++--- .../item/TagDependentIngredientItem.java | 17 +++--- .../accessor/DispenserBlockAccessor.java | 14 +++++ .../behaviour/ValueBoxRenderer.java | 11 +++- .../foundation/worldgen/AllWorldFeatures.java | 25 +++++---- .../worldgen/ConfigDrivenDecorator.java | 5 +- .../worldgen/ConfigDrivenFeatureEntry.java | 18 ++---- .../resources/META-INF/accesstransformer.cfg | 1 + src/main/resources/META-INF/mods.toml | 8 +-- src/main/resources/create.mixins.json | 3 +- 22 files changed, 188 insertions(+), 143 deletions(-) create mode 100644 src/main/java/com/simibubi/create/foundation/mixin/accessor/DispenserBlockAccessor.java diff --git a/src/main/java/com/simibubi/create/AllItems.java b/src/main/java/com/simibubi/create/AllItems.java index f87b7aea6..523d16e81 100644 --- a/src/main/java/com/simibubi/create/AllItems.java +++ b/src/main/java/com/simibubi/create/AllItems.java @@ -60,7 +60,6 @@ import com.simibubi.create.foundation.item.TagDependentIngredientItem; import com.simibubi.create.foundation.item.TooltipHelper; import com.tterrag.registrate.util.entry.ItemEntry; -import net.minecraft.resources.ResourceLocation; import net.minecraft.tags.ItemTags; import net.minecraft.tags.TagKey; import net.minecraft.world.food.FoodProperties; @@ -308,7 +307,8 @@ public class AllItems { public static final ItemEntry WAND_OF_SYMMETRY = REGISTRATE.item("wand_of_symmetry", SymmetryWandItem::new) - .properties(p -> p.stacksTo(1).rarity(Rarity.UNCOMMON)) + .properties(p -> p.stacksTo(1) + .rarity(Rarity.UNCOMMON)) .model(AssetLookup.itemModelWithPartials()) .register(); @@ -380,7 +380,7 @@ public class AllItems { String metalName = metal.getName(); return REGISTRATE .item("crushed_" + metalName + "_ore", - props -> new TagDependentIngredientItem(props, new ResourceLocation("forge", "ores/" + metalName))) + props -> new TagDependentIngredientItem(props, AllTags.forgeItemTag("ores/" + metalName))) .tag(CRUSHED_ORES.tag) .register(); } diff --git a/src/main/java/com/simibubi/create/AllMovementBehaviours.java b/src/main/java/com/simibubi/create/AllMovementBehaviours.java index 03cd553c3..857ea7ab4 100644 --- a/src/main/java/com/simibubi/create/AllMovementBehaviours.java +++ b/src/main/java/com/simibubi/create/AllMovementBehaviours.java @@ -57,7 +57,7 @@ public class AllMovementBehaviours { addMovementBehaviour(Blocks.BELL, new BellMovementBehaviour()); addMovementBehaviour(Blocks.CAMPFIRE, new CampfireMovementBehaviour()); - DispenserMovementBehaviour.gatherMovedDispenseItemBehaviours(); + DispenserMovementBehaviour.gatherMovedDispenseItemBehaviours(); addMovementBehaviour(Blocks.DISPENSER, new DispenserMovementBehaviour()); addMovementBehaviour(Blocks.DROPPER, new DropperMovementBehaviour()); } diff --git a/src/main/java/com/simibubi/create/AllTags.java b/src/main/java/com/simibubi/create/AllTags.java index b571387ba..b13bace98 100644 --- a/src/main/java/com/simibubi/create/AllTags.java +++ b/src/main/java/com/simibubi/create/AllTags.java @@ -4,6 +4,7 @@ import static com.simibubi.create.AllTags.NameSpace.FORGE; import static com.simibubi.create.AllTags.NameSpace.MOD; import static com.simibubi.create.AllTags.NameSpace.TIC; +import java.util.Collections; import java.util.function.Function; import com.simibubi.create.foundation.data.CreateRegistrate; @@ -15,8 +16,6 @@ import com.tterrag.registrate.util.nullness.NonNullFunction; import net.minecraft.resources.ResourceLocation; import net.minecraft.tags.BlockTags; -import net.minecraft.tags.FluidTags; -import net.minecraft.tags.ItemTags; import net.minecraft.tags.TagKey; import net.minecraft.world.item.BlockItem; import net.minecraft.world.item.Item; @@ -28,6 +27,7 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.material.Fluid; import net.minecraft.world.level.material.Fluids; import net.minecraftforge.common.Tags; +import net.minecraftforge.registries.ForgeRegistries; public class AllTags { @@ -44,15 +44,18 @@ public class AllTags { } public static TagKey forgeBlockTag(String path) { - return forgeTag(BlockTags::createOptional, path); + return forgeTag(r -> ForgeRegistries.BLOCKS.tags() + .createOptionalTagKey(r, Collections.emptySet()), path); } public static TagKey forgeItemTag(String path) { - return forgeTag(ItemTags::createOptional, path); + return forgeTag(r -> ForgeRegistries.ITEMS.tags() + .createOptionalTagKey(r, Collections.emptySet()), path); } public static TagKey forgeFluidTag(String path) { - return forgeTag(FluidTags::createOptional, path); + return forgeTag(r -> ForgeRegistries.FLUIDS.tags() + .createOptionalTagKey(r, Collections.emptySet()), path); } public static NonNullFunction, BlockBuilder> axeOrPickaxe() { @@ -71,10 +74,10 @@ public class AllTags { public static NonNullFunction, ItemBuilder>> tagBlockAndItem( String... path) { return b -> { - for (String p : path) + for (String p : path) b.tag(forgeBlockTag(p)); - ItemBuilder> item = b.item(); - for (String p : path) + ItemBuilder> item = b.item(); + for (String p : path) item.tag(forgeItemTag(p)); return item; }; @@ -82,9 +85,7 @@ public class AllTags { public enum NameSpace { - MOD(Create.ID, false, true), - FORGE("forge"), - TIC("tconstruct") + MOD(Create.ID, false, true), FORGE("forge"), TIC("tconstruct") ; @@ -119,6 +120,7 @@ public class AllTags { WRENCH_PICKUP, WG_STONE(FORGE), + RELOCATION_NOT_SUPPORTED(FORGE), SLIMY_LOGS(TIC), @@ -145,9 +147,10 @@ public class AllTags { AllBlockTags(NameSpace namespace, String path, boolean optional, boolean alwaysDatagen) { ResourceLocation id = new ResourceLocation(namespace.id, path == null ? Lang.asId(name()) : path); if (optional) { - tag = BlockTags.createOptional(id); + tag = ForgeRegistries.BLOCKS.tags() + .createOptionalTagKey(id, Collections.emptySet()); } else { - tag = BlockTags.bind(id.toString()); + tag = TagKey.create(ForgeRegistries.BLOCKS.getRegistryKey(), id); } if (alwaysDatagen) { REGISTRATE.addDataGenerator(ProviderType.BLOCK_TAGS, prov -> prov.tag(tag)); @@ -155,7 +158,9 @@ public class AllTags { } public boolean matches(Block block) { - return tag.contains(block); + return ForgeRegistries.BLOCKS.getHolder(block) + .map(h -> h.containsTag(tag)) + .orElse(false); } public boolean matches(BlockState state) { @@ -221,9 +226,10 @@ public class AllTags { AllItemTags(NameSpace namespace, String path, boolean optional, boolean alwaysDatagen) { ResourceLocation id = new ResourceLocation(namespace.id, path == null ? Lang.asId(name()) : path); if (optional) { - tag = ItemTags.createOptional(id); + tag = ForgeRegistries.ITEMS.tags() + .createOptionalTagKey(id, Collections.emptySet()); } else { - tag = ItemTags.bind(id.toString()); + tag = TagKey.create(ForgeRegistries.ITEMS.getRegistryKey(), id); } if (alwaysDatagen) { REGISTRATE.addDataGenerator(ProviderType.ITEM_TAGS, prov -> prov.tag(tag)); @@ -231,7 +237,9 @@ public class AllTags { } public boolean matches(ItemStack stack) { - return tag.contains(stack.getItem()); + return ForgeRegistries.ITEMS.getHolder(stack.getItem()) + .map(h -> h.containsTag(tag)) + .orElse(false); } public void add(Item... values) { @@ -285,17 +293,19 @@ public class AllTags { AllFluidTags(NameSpace namespace, String path, boolean optional, boolean alwaysDatagen) { ResourceLocation id = new ResourceLocation(namespace.id, path == null ? Lang.asId(name()) : path); if (optional) { - tag = FluidTags.createOptional(id); + tag = ForgeRegistries.FLUIDS.tags() + .createOptionalTagKey(id, Collections.emptySet()); } else { - tag = FluidTags.bind(id.toString()); + tag = TagKey.create(ForgeRegistries.FLUIDS.getRegistryKey(), id); } - if (alwaysDatagen) { + if (alwaysDatagen) REGISTRATE.addDataGenerator(ProviderType.FLUID_TAGS, prov -> prov.tag(tag)); - } } public boolean matches(Fluid fluid) { - return fluid != null && fluid.is(tag); + return fluid != null && ForgeRegistries.FLUIDS.getHolder(fluid) + .map(h -> h.containsTag(tag)) + .orElse(false); } public void add(Fluid... values) { @@ -347,7 +357,7 @@ public class AllTags { AllBlockTags.WRENCH_PICKUP.add(Blocks.REDSTONE_WIRE, Blocks.REDSTONE_TORCH, Blocks.REPEATER, Blocks.LEVER, Blocks.COMPARATOR, Blocks.OBSERVER, Blocks.REDSTONE_WALL_TORCH, Blocks.PISTON, Blocks.STICKY_PISTON, Blocks.TRIPWIRE, Blocks.TRIPWIRE_HOOK, Blocks.DAYLIGHT_DETECTOR, Blocks.TARGET); - + AllBlockTags.ORE_OVERRIDE_STONE.includeAll(BlockTags.STONE_ORE_REPLACEABLES); } diff --git a/src/main/java/com/simibubi/create/Create.java b/src/main/java/com/simibubi/create/Create.java index 8aeaae1ff..c27666bd6 100644 --- a/src/main/java/com/simibubi/create/Create.java +++ b/src/main/java/com/simibubi/create/Create.java @@ -57,7 +57,7 @@ public class Create { public static final String ID = "create"; public static final String NAME = "Create"; - public static final String VERSION = "0.4f"; + public static final String VERSION = "0.4.1"; public static final Logger LOGGER = LogManager.getLogger(); diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/DispenserMovementBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/DispenserMovementBehaviour.java index 008fe9ba2..48bbc0caf 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/DispenserMovementBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/DispenserMovementBehaviour.java @@ -2,11 +2,9 @@ package com.simibubi.create.content.contraptions.components.actors.dispenser; import java.util.HashMap; -import javax.annotation.ParametersAreNonnullByDefault; - import com.simibubi.create.content.contraptions.components.structureMovement.MovementContext; +import com.simibubi.create.foundation.mixin.accessor.DispenserBlockAccessor; -import net.minecraft.MethodsReturnNonnullByDefault; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.core.dispenser.AbstractProjectileDispenseBehavior; @@ -16,23 +14,26 @@ import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.DispenserBlock; -import net.minecraft.world.level.block.state.BlockBehaviour; import net.minecraft.world.phys.Vec3; public class DispenserMovementBehaviour extends DropperMovementBehaviour { private static final HashMap MOVED_DISPENSE_ITEM_BEHAVIOURS = new HashMap<>(); private static final HashMap MOVED_PROJECTILE_DISPENSE_BEHAVIOURS = new HashMap<>(); - private static final DispenserLookup BEHAVIOUR_LOOKUP = new DispenserLookup(); private static boolean spawneggsRegistered = false; public static void gatherMovedDispenseItemBehaviours() { IMovedDispenseItemBehaviour.init(); } - public static void registerMovedDispenseItemBehaviour(Item item, IMovedDispenseItemBehaviour movedDispenseItemBehaviour) { + public static void registerMovedDispenseItemBehaviour(Item item, + IMovedDispenseItemBehaviour movedDispenseItemBehaviour) { MOVED_DISPENSE_ITEM_BEHAVIOURS.put(item, movedDispenseItemBehaviour); } + public static DispenseItemBehavior getDispenseMethod(ItemStack itemstack) { + return ((DispenserBlockAccessor) Blocks.DISPENSER).create$callGetDispenseMethod(itemstack); + } + @Override protected void activate(MovementContext context, BlockPos pos) { if (!spawneggsRegistered) { @@ -59,7 +60,7 @@ public class DispenserMovementBehaviour extends DropperMovementBehaviour { return; } - DispenseItemBehavior idispenseitembehavior = BEHAVIOUR_LOOKUP.getDispenseMethod(itemstack); + DispenseItemBehavior idispenseitembehavior = getDispenseMethod(itemstack); if (idispenseitembehavior instanceof AbstractProjectileDispenseBehavior) { // Projectile behaviours can be converted most of the time IMovedDispenseItemBehaviour iMovedDispenseItemBehaviour = MovedProjectileDispenserBehaviour.of((AbstractProjectileDispenseBehavior) idispenseitembehavior); setItemStackAt(location, iMovedDispenseItemBehaviour.dispense(itemstack, context, pos), context); @@ -85,15 +86,4 @@ public class DispenserMovementBehaviour extends DropperMovementBehaviour { } } - @ParametersAreNonnullByDefault - @MethodsReturnNonnullByDefault - private static class DispenserLookup extends DispenserBlock { - protected DispenserLookup() { - super(BlockBehaviour.Properties.copy(Blocks.DISPENSER)); - } - - public DispenseItemBehavior getDispenseMethod(ItemStack itemStack) { - return super.getDispenseMethod(itemStack); - } - } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/BlockMovementChecks.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/BlockMovementChecks.java index eee909ddb..66d7b09a1 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/BlockMovementChecks.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/BlockMovementChecks.java @@ -5,7 +5,6 @@ import java.util.List; import com.simibubi.create.AllBlocks; import com.simibubi.create.AllTags.AllBlockTags; -import com.simibubi.create.Create; import com.simibubi.create.content.contraptions.components.actors.AttachedActorBlock; import com.simibubi.create.content.contraptions.components.actors.HarvesterBlock; import com.simibubi.create.content.contraptions.components.actors.PloughBlock; @@ -36,7 +35,6 @@ import com.simibubi.create.foundation.config.ContraptionMovementSetting; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; -import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.BasePressurePlateBlock; import net.minecraft.world.level.block.BaseRailBlock; @@ -75,7 +73,6 @@ public class BlockMovementChecks { private static final List BRITTLE_CHECKS = new ArrayList<>(); private static final List ATTACHED_CHECKS = new ArrayList<>(); private static final List NOT_SUPPORTIVE_CHECKS = new ArrayList<>(); - public static final ResourceLocation NON_MOVABLE = Create.asResource("non_movable"); // Registration // Add new checks to the front instead of the end @@ -194,7 +191,7 @@ public class BlockMovementChecks { return true; if (state.getDestroySpeed(world, pos) == -1) return false; - if (state.getBlock().getTags().contains(NON_MOVABLE)) + if (AllBlockTags.RELOCATION_NOT_SUPPORTED.matches(state)) return false; if (ContraptionMovementSetting.get(state.getBlock()) == ContraptionMovementSetting.UNMOVABLE) return false; @@ -255,7 +252,7 @@ public class BlockMovementChecks { return true; if (block instanceof WoolCarpetBlock) return true; - return AllBlockTags.BRITTLE.tag.contains(block); + return AllBlockTags.BRITTLE.matches(block); } private static boolean isBlockAttachedTowardsFallback(BlockState state, Level world, BlockPos pos, diff --git a/src/main/java/com/simibubi/create/content/contraptions/processing/InWorldProcessing.java b/src/main/java/com/simibubi/create/content/contraptions/processing/InWorldProcessing.java index 47c42026d..1d46c76b0 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/processing/InWorldProcessing.java +++ b/src/main/java/com/simibubi/create/content/contraptions/processing/InWorldProcessing.java @@ -56,6 +56,7 @@ import net.minecraft.world.phys.Vec3; import net.minecraftforge.items.ItemHandlerHelper; import net.minecraftforge.items.ItemStackHandler; import net.minecraftforge.items.wrapper.RecipeWrapper; +import net.minecraftforge.registries.ForgeRegistries; public class InWorldProcessing { @@ -292,8 +293,8 @@ public class InWorldProcessing { } if (entity.isOnFire()) { entity.clearFire(); - level.playSound(null, entity.blockPosition(), SoundEvents.GENERIC_EXTINGUISH_FIRE, SoundSource.NEUTRAL, - 0.7F, 1.6F + (level.random.nextFloat() - level.random.nextFloat()) * 0.4F); + level.playSound(null, entity.blockPosition(), SoundEvents.GENERIC_EXTINGUISH_FIRE, + SoundSource.NEUTRAL, 0.7F, 1.6F + (level.random.nextFloat() - level.random.nextFloat()) * 0.4F); } } @@ -467,14 +468,20 @@ public class InWorldProcessing { if (block == Blocks.SOUL_FIRE || block == Blocks.SOUL_CAMPFIRE && blockState.getOptionalValue(CampfireBlock.LIT) .orElse(false) - || AllBlocks.LIT_BLAZE_BURNER.has(blockState) && blockState.getOptionalValue(LitBlazeBurnerBlock.FLAME_TYPE) - .map(flame -> flame == LitBlazeBurnerBlock.FlameType.SOUL).orElse(false)) + || AllBlocks.LIT_BLAZE_BURNER.has(blockState) + && blockState.getOptionalValue(LitBlazeBurnerBlock.FLAME_TYPE) + .map(flame -> flame == LitBlazeBurnerBlock.FlameType.SOUL) + .orElse(false)) return Type.HAUNTING; - if (block == Blocks.FIRE - || BlockTags.CAMPFIRES.contains(block) && blockState.getOptionalValue(CampfireBlock.LIT) + if (block == Blocks.FIRE || ForgeRegistries.BLOCKS.getHolder(block) + .map(h -> h.containsTag(BlockTags.CAMPFIRES)) + .orElse(false) + && blockState.getOptionalValue(CampfireBlock.LIT) .orElse(false) - || AllBlocks.LIT_BLAZE_BURNER.has(blockState) && blockState.getOptionalValue(LitBlazeBurnerBlock.FLAME_TYPE) - .map(flame -> flame == LitBlazeBurnerBlock.FlameType.REGULAR).orElse(false) + || AllBlocks.LIT_BLAZE_BURNER.has(blockState) + && blockState.getOptionalValue(LitBlazeBurnerBlock.FLAME_TYPE) + .map(flame -> flame == LitBlazeBurnerBlock.FlameType.REGULAR) + .orElse(false) || getHeatLevelOf(blockState) == BlazeBurnerBlock.HeatLevel.SMOULDERING) return Type.SMOKING; if (block == Blocks.LAVA || getHeatLevelOf(blockState).isAtLeast(BlazeBurnerBlock.HeatLevel.FADING)) diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltBlock.java b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltBlock.java index 5dfddd725..020711c3b 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltBlock.java @@ -82,6 +82,7 @@ import net.minecraftforge.client.IBlockRenderProperties; import net.minecraftforge.common.Tags; import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.IItemHandler; +import net.minecraftforge.registries.ForgeRegistries; public class BeltBlock extends HorizontalKineticBlock implements ITE, ISpecialBlockItemRequirement { @@ -130,7 +131,8 @@ public class BeltBlock extends HorizontalKineticBlock implements ITE h.containsTag(Tags.Items.DYES)) + .orElse(false); boolean hasWater = EmptyingByBasin.emptyItem(world, heldItem, true) .getFirst() .getFluid() @@ -603,7 +607,8 @@ public class BeltBlock extends HorizontalKineticBlock implements ITE itag = ItemTags.getAllTags() - .getTag(inTag.tagName); + TagKey itag = ForgeRegistries.ITEMS.tags() + .getTagNames() + .filter(tk -> tk.location() + .equals(inTag.tagName)) + .findAny() + .orElse(null); if (itag != null) return Ingredient.of(itag) .getItems(); diff --git a/src/main/java/com/simibubi/create/content/curiosities/weapons/BuiltinPotatoProjectileTypes.java b/src/main/java/com/simibubi/create/content/curiosities/weapons/BuiltinPotatoProjectileTypes.java index f9ddc997f..4724fdbdd 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/weapons/BuiltinPotatoProjectileTypes.java +++ b/src/main/java/com/simibubi/create/content/curiosities/weapons/BuiltinPotatoProjectileTypes.java @@ -22,6 +22,7 @@ import net.minecraft.world.effect.MobEffect; import net.minecraft.world.effect.MobEffectInstance; import net.minecraft.world.effect.MobEffects; import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.animal.Fox; import net.minecraft.world.entity.item.FallingBlockEntity; @@ -147,7 +148,7 @@ public class BuiltinPotatoProjectileTypes { .knockback(0.1f) .renderTumbling() .soundPitch(1.1f) - .onEntityHit(potion(MobEffects.MOVEMENT_SLOWDOWN, 2,160, true)) + .onEntityHit(potion(MobEffects.MOVEMENT_SLOWDOWN, 2, 160, true)) .registerAndAssign(AllItems.HONEYED_APPLE.get()), GOLDEN_APPLE = create("golden_apple").damage(1) @@ -160,8 +161,7 @@ public class BuiltinPotatoProjectileTypes { Entity entity = ray.getEntity(); Level world = entity.level; - if (!(entity instanceof ZombieVillager) - || !((ZombieVillager) entity).hasEffect(MobEffects.WEAKNESS)) + if (!(entity instanceof ZombieVillager) || !((ZombieVillager) entity).hasEffect(MobEffects.WEAKNESS)) return foodEffects(Foods.GOLDEN_APPLE, false).test(ray); if (world.isClientSide) return false; @@ -261,7 +261,8 @@ public class BuiltinPotatoProjectileTypes { private static Predicate setFire(int seconds) { return ray -> { - ray.getEntity().setSecondsOnFire(seconds); + ray.getEntity() + .setSecondsOnFire(seconds); return false; }; } @@ -294,8 +295,10 @@ public class BuiltinPotatoProjectileTypes { } private static void applyEffect(LivingEntity entity, MobEffectInstance effect) { - if (effect.getEffect().isInstantenous()) - effect.getEffect().applyInstantenousEffect(null, null, entity, effect.getDuration(), 1.0); + if (effect.getEffect() + .isInstantenous()) + effect.getEffect() + .applyInstantenousEffect(null, null, entity, effect.getDuration(), 1.0); else entity.addEffect(effect); } @@ -319,12 +322,14 @@ public class BuiltinPotatoProjectileTypes { BlockState blockState = world.getBlockState(hitPos); if (!blockState.canSustainPlant(world, hitPos, face, (IPlantable) cropBlock.get())) return false; - world.setBlock(placePos, cropBlock.get().defaultBlockState(), 3); + world.setBlock(placePos, cropBlock.get() + .defaultBlockState(), 3); return true; }; } - private static BiPredicate placeBlockOnGround(IRegistryDelegate block) { + private static BiPredicate placeBlockOnGround( + IRegistryDelegate block) { return (world, ray) -> { if (world.isClientSide()) return true; @@ -340,18 +345,23 @@ public class BuiltinPotatoProjectileTypes { return false; if (face == Direction.UP) { - world.setBlock(placePos, block.get().defaultBlockState(), 3); - } else if (world instanceof Level) { + world.setBlock(placePos, block.get() + .defaultBlockState(), 3); + } else if (world instanceof Level level) { double y = ray.getLocation().y - 0.5; if (!world.isEmptyBlock(placePos.above())) y = Math.min(y, placePos.getY()); if (!world.isEmptyBlock(placePos.below())) y = Math.max(y, placePos.getY()); - FallingBlockEntity falling = new FallingBlockEntity((Level) world, placePos.getX() + 0.5, y, - placePos.getZ() + 0.5, block.get().defaultBlockState()); - falling.time = 1; - world.addFreshEntity(falling); + BlockState fallingState = block.get() + .defaultBlockState(); + + FallingBlockEntity fallingBlockEntity = new FallingBlockEntity(EntityType.FALLING_BLOCK, level); + fallingBlockEntity.setPos(placePos.getX() + 0.5, y, placePos.getZ() + 0.5); + fallingBlockEntity.time = 1; + fallingBlockEntity.blockState = fallingState; + world.addFreshEntity(fallingBlockEntity); } return true; @@ -373,18 +383,23 @@ public class BuiltinPotatoProjectileTypes { double entityZ = livingEntity.getZ(); for (int teleportTry = 0; teleportTry < 16; ++teleportTry) { - double teleportX = entityX + (livingEntity.getRandom().nextDouble() - 0.5D) * teleportDiameter; - double teleportY = Mth.clamp(entityY + (livingEntity.getRandom().nextInt((int) teleportDiameter) - (int) (teleportDiameter / 2)), 0.0D, world.getHeight() - 1); - double teleportZ = entityZ + (livingEntity.getRandom().nextDouble() - 0.5D) * teleportDiameter; + double teleportX = entityX + (livingEntity.getRandom() + .nextDouble() - 0.5D) * teleportDiameter; + double teleportY = Mth.clamp(entityY + (livingEntity.getRandom() + .nextInt((int) teleportDiameter) - (int) (teleportDiameter / 2)), 0.0D, world.getHeight() - 1); + double teleportZ = entityZ + (livingEntity.getRandom() + .nextDouble() - 0.5D) * teleportDiameter; - EntityTeleportEvent.ChorusFruit event = ForgeEventFactory.onChorusFruitTeleport(livingEntity, teleportX, teleportY, teleportZ); + EntityTeleportEvent.ChorusFruit event = + ForgeEventFactory.onChorusFruitTeleport(livingEntity, teleportX, teleportY, teleportZ); if (event.isCanceled()) return false; if (livingEntity.randomTeleport(event.getTargetX(), event.getTargetY(), event.getTargetZ(), true)) { if (livingEntity.isPassenger()) livingEntity.stopRiding(); - SoundEvent soundevent = livingEntity instanceof Fox ? SoundEvents.FOX_TELEPORT : SoundEvents.CHORUS_FRUIT_TELEPORT; + SoundEvent soundevent = + livingEntity instanceof Fox ? SoundEvents.FOX_TELEPORT : SoundEvents.CHORUS_FRUIT_TELEPORT; world.playSound(null, entityX, entityY, entityZ, soundevent, SoundSource.PLAYERS, 1.0F, 1.0F); livingEntity.playSound(soundevent, 1.0F, 1.0F); livingEntity.setDeltaMovement(Vec3.ZERO); diff --git a/src/main/java/com/simibubi/create/content/palettes/AllPaletteStoneTypes.java b/src/main/java/com/simibubi/create/content/palettes/AllPaletteStoneTypes.java index c13c9ed0f..e477914ef 100644 --- a/src/main/java/com/simibubi/create/content/palettes/AllPaletteStoneTypes.java +++ b/src/main/java/com/simibubi/create/content/palettes/AllPaletteStoneTypes.java @@ -3,6 +3,7 @@ package com.simibubi.create.content.palettes; import static com.simibubi.create.content.palettes.PaletteBlockPattern.STANDARD_RANGE; import static com.simibubi.create.content.palettes.PaletteBlockPattern.VANILLA_RANGE; +import java.util.Collections; import java.util.function.Function; import com.simibubi.create.AllTags; @@ -11,11 +12,11 @@ import com.simibubi.create.foundation.data.CreateRegistrate; import com.simibubi.create.foundation.utility.Lang; import com.tterrag.registrate.util.nullness.NonNullSupplier; -import net.minecraft.tags.ItemTags; import net.minecraft.tags.TagKey; import net.minecraft.world.item.Item; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Blocks; +import net.minecraftforge.registries.ForgeRegistries; public enum AllPaletteStoneTypes { @@ -57,7 +58,7 @@ public enum AllPaletteStoneTypes { private Function> factory; private PalettesVariantEntry variants; - + public NonNullSupplier baseBlock; public PaletteBlockPattern[] variantTypes; public TagKey materialTag; @@ -81,7 +82,8 @@ public enum AllPaletteStoneTypes { NonNullSupplier baseBlock = paletteStoneVariants.factory.apply(registrate); paletteStoneVariants.baseBlock = baseBlock; String id = Lang.asId(paletteStoneVariants.name()); - paletteStoneVariants.materialTag = AllTags.tag(ItemTags::createOptional, Create.ID, "stone_types/" + id); + paletteStoneVariants.materialTag = AllTags.tag(r -> ForgeRegistries.ITEMS.tags() + .createOptionalTagKey(r, Collections.emptySet()), Create.ID, "stone_types/" + id); paletteStoneVariants.variants = new PalettesVariantEntry(id, paletteStoneVariants); } } diff --git a/src/main/java/com/simibubi/create/foundation/data/recipe/MechanicalCraftingRecipeBuilder.java b/src/main/java/com/simibubi/create/foundation/data/recipe/MechanicalCraftingRecipeBuilder.java index 0058a8eb5..54a12eb5f 100644 --- a/src/main/java/com/simibubi/create/foundation/data/recipe/MechanicalCraftingRecipeBuilder.java +++ b/src/main/java/com/simibubi/create/foundation/data/recipe/MechanicalCraftingRecipeBuilder.java @@ -18,7 +18,7 @@ import com.simibubi.create.AllRecipeTypes; import net.minecraft.data.recipes.FinishedRecipe; import net.minecraft.resources.ResourceLocation; -import net.minecraft.tags.SetTag; +import net.minecraft.tags.TagKey; import net.minecraft.world.item.Item; import net.minecraft.world.item.crafting.Ingredient; import net.minecraft.world.item.crafting.RecipeSerializer; @@ -62,7 +62,7 @@ public class MechanicalCraftingRecipeBuilder { /** * Adds a key to the recipe pattern. */ - public MechanicalCraftingRecipeBuilder key(Character p_200469_1_, SetTag p_200469_2_) { + public MechanicalCraftingRecipeBuilder key(Character p_200469_1_, TagKey p_200469_2_) { return this.key(p_200469_1_, Ingredient.of(p_200469_2_)); } diff --git a/src/main/java/com/simibubi/create/foundation/fluid/FluidIngredient.java b/src/main/java/com/simibubi/create/foundation/fluid/FluidIngredient.java index 614b05090..3e59bc848 100644 --- a/src/main/java/com/simibubi/create/foundation/fluid/FluidIngredient.java +++ b/src/main/java/com/simibubi/create/foundation/fluid/FluidIngredient.java @@ -18,12 +18,12 @@ import net.minecraft.core.Registry; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.resources.ResourceLocation; -import net.minecraft.tags.SerializationTags; import net.minecraft.tags.TagKey; import net.minecraft.util.GsonHelper; import net.minecraft.world.level.material.FlowingFluid; import net.minecraft.world.level.material.Fluid; import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.registries.ForgeRegistries; public abstract class FluidIngredient implements Predicate { @@ -207,8 +207,9 @@ public abstract class FluidIngredient implements Predicate { if (accepted.getFluid() .isSame(t.getFluid())) return true; - return t.getFluid() - .is(tag); + return ForgeRegistries.FLUIDS.getHolder(t.getFluid()) + .map(h -> h.containsTag(tag)) + .orElse(false); } @Override @@ -230,22 +231,20 @@ public abstract class FluidIngredient implements Predicate { @Override protected void readInternal(JsonObject json) { - ResourceLocation id = new ResourceLocation(GsonHelper.getAsString(json, "fluidTag")); - tag = SerializationTags.getInstance().getTagOrThrow(Registry.FLUID_REGISTRY, id, rl -> { - return new JsonSyntaxException("Unknown fluid tag '" + rl + "'"); - }); + ResourceLocation resourcelocation = new ResourceLocation(GsonHelper.getAsString(json, "fluidTag")); + tag = TagKey.create(Registry.FLUID_REGISTRY, resourcelocation); } @Override protected void writeInternal(JsonObject json) { - json.addProperty("fluidTag", SerializationTags.getInstance().getIdOrThrow(Registry.FLUID_REGISTRY, tag, () -> { - return new IllegalStateException("Unknown fluid tag"); - }).toString()); + json.addProperty("fluidTag", tag.location() + .toString()); } @Override protected List determineMatchingFluidStacks() { - return tag.getValues() + return ForgeRegistries.FLUIDS.tags() + .getTag(tag) .stream() .map(f -> { if (f instanceof FlowingFluid) diff --git a/src/main/java/com/simibubi/create/foundation/item/TagDependentIngredientItem.java b/src/main/java/com/simibubi/create/foundation/item/TagDependentIngredientItem.java index c65d2d3af..2f422ea7e 100644 --- a/src/main/java/com/simibubi/create/foundation/item/TagDependentIngredientItem.java +++ b/src/main/java/com/simibubi/create/foundation/item/TagDependentIngredientItem.java @@ -1,18 +1,18 @@ package com.simibubi.create.foundation.item; import net.minecraft.core.NonNullList; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.tags.ItemTags; -import net.minecraft.tags.Tag; +import net.minecraft.tags.TagKey; import net.minecraft.world.item.CreativeModeTab; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; +import net.minecraftforge.registries.ForgeRegistries; +import net.minecraftforge.registries.tags.ITagManager; public class TagDependentIngredientItem extends Item { - private ResourceLocation tag; + private TagKey tag; - public TagDependentIngredientItem(Properties properties, ResourceLocation tag) { + public TagDependentIngredientItem(Properties properties, TagKey tag) { super(properties); this.tag = tag; } @@ -24,9 +24,10 @@ public class TagDependentIngredientItem extends Item { } public boolean shouldHide() { - Tag tag = ItemTags.getAllTags() - .getTag(this.tag); - return tag == null || tag.getValues() + ITagManager tags = ForgeRegistries.ITEMS.tags(); + if (tags == null || !tags.isKnownTagName(tag)) + return false; + return tags.getTag(tag) .isEmpty(); } diff --git a/src/main/java/com/simibubi/create/foundation/mixin/accessor/DispenserBlockAccessor.java b/src/main/java/com/simibubi/create/foundation/mixin/accessor/DispenserBlockAccessor.java new file mode 100644 index 000000000..6f6e4c833 --- /dev/null +++ b/src/main/java/com/simibubi/create/foundation/mixin/accessor/DispenserBlockAccessor.java @@ -0,0 +1,14 @@ +package com.simibubi.create.foundation.mixin.accessor; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Invoker; + +import net.minecraft.core.dispenser.DispenseItemBehavior; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.block.DispenserBlock; + +@Mixin(DispenserBlock.class) +public interface DispenserBlockAccessor { + @Invoker("getDispenseMethod") + DispenseItemBehavior create$callGetDispenseMethod(ItemStack stack); +} diff --git a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/ValueBoxRenderer.java b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/ValueBoxRenderer.java index 56d201d34..8b0d511d3 100644 --- a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/ValueBoxRenderer.java +++ b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/ValueBoxRenderer.java @@ -17,11 +17,14 @@ import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.FenceBlock; import net.minecraftforge.client.model.ItemMultiLayerBakedModel; +import net.minecraftforge.registries.ForgeRegistries; public class ValueBoxRenderer { - public static void renderItemIntoValueBox(ItemStack filter, PoseStack ms, MultiBufferSource buffer, int light, int overlay) { - ItemRenderer itemRenderer = Minecraft.getInstance().getItemRenderer(); + public static void renderItemIntoValueBox(ItemStack filter, PoseStack ms, MultiBufferSource buffer, int light, + int overlay) { + ItemRenderer itemRenderer = Minecraft.getInstance() + .getItemRenderer(); BakedModel modelWithOverrides = itemRenderer.getModel(filter, null, null, 0); boolean blockItem = modelWithOverrides.isGui3d() && !(modelWithOverrides instanceof ItemMultiLayerBakedModel); float scale = (!blockItem ? .5f : 1f) - 1 / 64f; @@ -41,7 +44,9 @@ public class ValueBoxRenderer { return NUDGE; if (block instanceof FenceBlock) return NUDGE; - if (BlockTags.BUTTONS.contains(block)) + if (ForgeRegistries.BLOCKS.getHolder(block) + .map(h -> h.containsTag(BlockTags.BUTTONS)) + .orElse(false)) return NUDGE; if (block == Blocks.END_ROD) return NUDGE; diff --git a/src/main/java/com/simibubi/create/foundation/worldgen/AllWorldFeatures.java b/src/main/java/com/simibubi/create/foundation/worldgen/AllWorldFeatures.java index 4cbd7ead6..11a703644 100644 --- a/src/main/java/com/simibubi/create/foundation/worldgen/AllWorldFeatures.java +++ b/src/main/java/com/simibubi/create/foundation/worldgen/AllWorldFeatures.java @@ -3,10 +3,10 @@ package com.simibubi.create.foundation.worldgen; import java.util.HashMap; import java.util.Map; +import com.google.common.collect.ImmutableList; import com.simibubi.create.AllBlocks; import com.simibubi.create.Create; import com.simibubi.create.foundation.utility.Couple; -import com.simibubi.create.foundation.utility.Pair; import net.minecraft.core.Registry; import net.minecraft.data.BuiltinRegistries; @@ -14,7 +14,6 @@ import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.biome.Biome.BiomeCategory; import net.minecraft.world.level.levelgen.GenerationStep; import net.minecraft.world.level.levelgen.GenerationStep.Decoration; -import net.minecraft.world.level.levelgen.feature.ConfiguredFeature; import net.minecraft.world.level.levelgen.feature.Feature; import net.minecraft.world.level.levelgen.placement.PlacedFeature; import net.minecraftforge.common.ForgeConfigSpec; @@ -33,8 +32,9 @@ public class AllWorldFeatures { // - public static final ConfigDrivenFeatureEntry ZINC_ORE = register("zinc_ore", 12, 8, OVERWORLD_BIOMES).between(-63, 70) - .withBlocks(Couple.create(AllBlocks.ZINC_ORE, AllBlocks.DEEPSLATE_ZINC_ORE)); + public static final ConfigDrivenFeatureEntry ZINC_ORE = + register("zinc_ore", 12, 8, OVERWORLD_BIOMES).between(-63, 70) + .withBlocks(Couple.create(AllBlocks.ZINC_ORE, AllBlocks.DEEPSLATE_ZINC_ORE)); public static final ConfigDrivenFeatureEntry STRIATED_ORES_OVERWORLD = register("striated_ores_overworld", 32, 1 / 12f, OVERWORLD_BIOMES).between(-30, 70) @@ -72,10 +72,12 @@ public class AllWorldFeatures { .forEach(entry -> { String id = Create.ID + "_" + entry.getKey() .getPath(); - ConfigDrivenFeatureEntry value = entry.getValue(); - Pair, PlacedFeature> feature = value.getFeature(); - Registry.register(BuiltinRegistries.CONFIGURED_FEATURE, id, feature.getFirst()); - Registry.register(BuiltinRegistries.PLACED_FEATURE, id, feature.getSecond()); + ConfigDrivenFeatureEntry featureEntry = entry.getValue(); + featureEntry.configuredFeature = BuiltinRegistries.register(BuiltinRegistries.CONFIGURED_FEATURE, id, + featureEntry.factory.apply(featureEntry)); + featureEntry.placedFeature = + BuiltinRegistries.register(BuiltinRegistries.PLACED_FEATURE, id, new PlacedFeature( + featureEntry.configuredFeature, ImmutableList.of(new ConfigDrivenDecorator(featureEntry.id)))); }); } @@ -84,10 +86,9 @@ public class AllWorldFeatures { Decoration decoStep = GenerationStep.Decoration.UNDERGROUND_ORES; ENTRIES.values() .forEach(entry -> { - if (!entry.biomeFilter.test(event.getName(), event.getCategory())) - return; - generation.addFeature(decoStep, entry.getFeature() - .getSecond()); + ConfigDrivenFeatureEntry value = entry; + if (value.biomeFilter.test(event.getName(), event.getCategory())) + generation.addFeature(decoStep, value.placedFeature); }); } diff --git a/src/main/java/com/simibubi/create/foundation/worldgen/ConfigDrivenDecorator.java b/src/main/java/com/simibubi/create/foundation/worldgen/ConfigDrivenDecorator.java index 26f4a49ba..a1af6270d 100644 --- a/src/main/java/com/simibubi/create/foundation/worldgen/ConfigDrivenDecorator.java +++ b/src/main/java/com/simibubi/create/foundation/worldgen/ConfigDrivenDecorator.java @@ -38,8 +38,9 @@ public class ConfigDrivenDecorator extends PlacementModifier { @Override public Stream getPositions(PlacementContext context, Random random, BlockPos pos) { - ConfigDrivenOreConfiguration config = (ConfigDrivenOreConfiguration) entry().getFeature() - .getFirst().config; + ConfigDrivenOreConfiguration config = (ConfigDrivenOreConfiguration) entry().configuredFeature.value() + .config(); + float frequency = config.getFrequency(); int floored = Mth.floor(frequency); int count = floored + (random.nextFloat() < frequency - floored ? 1 : 0); diff --git a/src/main/java/com/simibubi/create/foundation/worldgen/ConfigDrivenFeatureEntry.java b/src/main/java/com/simibubi/create/foundation/worldgen/ConfigDrivenFeatureEntry.java index fc0b01a12..b2b87db7c 100644 --- a/src/main/java/com/simibubi/create/foundation/worldgen/ConfigDrivenFeatureEntry.java +++ b/src/main/java/com/simibubi/create/foundation/worldgen/ConfigDrivenFeatureEntry.java @@ -2,16 +2,15 @@ package com.simibubi.create.foundation.worldgen; import java.util.ArrayList; import java.util.List; -import java.util.Optional; import java.util.function.Function; import com.google.common.collect.ImmutableList; import com.simibubi.create.Create; import com.simibubi.create.foundation.config.ConfigBase; import com.simibubi.create.foundation.utility.Couple; -import com.simibubi.create.foundation.utility.Pair; import com.tterrag.registrate.util.nullness.NonNullSupplier; +import net.minecraft.core.Holder; import net.minecraft.data.worldgen.features.OreFeatures; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.levelgen.feature.ConfiguredFeature; @@ -37,7 +36,8 @@ public class ConfigDrivenFeatureEntry extends ConfigBase { protected ConfigFloat frequency; Function> factory; - Optional, PlacedFeature>> feature = Optional.empty(); + Holder> configuredFeature; + Holder placedFeature; public ConfigDrivenFeatureEntry(String id, int clusterSize, float frequency) { this.id = id; @@ -79,25 +79,17 @@ public class ConfigDrivenFeatureEntry extends ConfigBase { return this; } - public Pair, PlacedFeature> getFeature() { - if (!feature.isPresent()) { - ConfiguredFeature configured = factory.apply(this); - feature = Optional.of(Pair.of(configured, configured.placed(new ConfigDrivenDecorator(id)))); - } - return feature.get(); - } - private ConfiguredFeature layersFactory(ConfigDrivenFeatureEntry entry) { ConfigDrivenOreConfiguration config = new ConfigDrivenOreConfiguration(ImmutableList.of(), 0, id); LayeredOreFeature.LAYER_PATTERNS.put(Create.asResource(id), layers.stream() .map(NonNullSupplier::get) .toList()); - return LayeredOreFeature.INSTANCE.configured(config); + return new ConfiguredFeature<>(LayeredOreFeature.INSTANCE, config); } private ConfiguredFeature standardFactory(ConfigDrivenFeatureEntry entry) { ConfigDrivenOreConfiguration config = new ConfigDrivenOreConfiguration(createTarget(), 0, id); - return VanillaStyleOreFeature.INSTANCE.configured(config); + return new ConfiguredFeature<>(VanillaStyleOreFeature.INSTANCE, config); } private List createTarget() { diff --git a/src/main/resources/META-INF/accesstransformer.cfg b/src/main/resources/META-INF/accesstransformer.cfg index dbf7cf3d1..fa9a613a4 100644 --- a/src/main/resources/META-INF/accesstransformer.cfg +++ b/src/main/resources/META-INF/accesstransformer.cfg @@ -6,6 +6,7 @@ protected net.minecraft.client.particle.Particle f_107205_ # stoppedByCollision public net.minecraft.client.renderer.ItemInHandRenderer f_109300_ # mainHandItem public net.minecraft.client.renderer.ItemInHandRenderer f_109301_ # offHandItem public net.minecraft.client.renderer.entity.ItemRenderer f_115096_ # textureManager +public net.minecraft.world.entity.item.FallingBlockEntity f_31946_ # blockState public-f net.minecraft.network.protocol.game.ClientboundPlayerAbilitiesPacket f_132663_ # flyingSpeed diff --git a/src/main/resources/META-INF/mods.toml b/src/main/resources/META-INF/mods.toml index fda36255c..e19cc36fd 100644 --- a/src/main/resources/META-INF/mods.toml +++ b/src/main/resources/META-INF/mods.toml @@ -5,7 +5,7 @@ license="MIT" [[mods]] modId="create" -version="0.4f" +version="0.4.1" displayName="Create" #updateJSONURL="" displayURL="https://www.curseforge.com/minecraft/mc-mods/create" @@ -18,20 +18,20 @@ Technology that empowers the player.''' [[dependencies.create]] modId="forge" mandatory=true - versionRange="[39.0.46,)" + versionRange="[40.0.0,)" ordering="NONE" side="BOTH" [[dependencies.create]] modId="minecraft" mandatory=true - versionRange="[1.18.1,1.19)" + versionRange="[1.18.2,1.19)" ordering="NONE" side="BOTH" [[dependencies.create]] modId="flywheel" mandatory=true - versionRange="[1.18-0.6.1,1.18-0.6.2)" + versionRange="[1.18-0.6.2,1.18-0.6.3)" ordering="AFTER" side="CLIENT" diff --git a/src/main/resources/create.mixins.json b/src/main/resources/create.mixins.json index deba44920..170ae7622 100644 --- a/src/main/resources/create.mixins.json +++ b/src/main/resources/create.mixins.json @@ -7,7 +7,8 @@ "mixins": [ "CustomItemUseEffectsMixin", "accessor.AbstractProjectileDispenseBehaviorAccessor", - "accessor.LivingEntityAccessor" + "accessor.LivingEntityAccessor", + "accessor.DispenserBlockAccessor" ], "client": [ "DestroyProgressMixin", From 1525cbb14b88a2a8cc6b15fde019b151d41ba6c3 Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Tue, 22 Mar 2022 19:11:08 +0100 Subject: [PATCH 27/29] Too Intrusive - Fixed unregistered holders in the item registry --- src/generated/resources/.cache/cache | 32 +++++++++--------- .../resources/assets/create/lang/en_ud.json | 1 + .../resources/assets/create/lang/en_us.json | 1 + .../assets/create/lang/unfinished/de_de.json | 3 +- .../assets/create/lang/unfinished/es_cl.json | 3 +- .../assets/create/lang/unfinished/es_es.json | 3 +- .../assets/create/lang/unfinished/fr_fr.json | 3 +- .../assets/create/lang/unfinished/it_it.json | 3 +- .../assets/create/lang/unfinished/ja_jp.json | 3 +- .../assets/create/lang/unfinished/ko_kr.json | 3 +- .../assets/create/lang/unfinished/nl_nl.json | 3 +- .../assets/create/lang/unfinished/pl_pl.json | 3 +- .../assets/create/lang/unfinished/pt_br.json | 3 +- .../assets/create/lang/unfinished/pt_pt.json | 3 +- .../assets/create/lang/unfinished/ru_ru.json | 3 +- .../assets/create/lang/unfinished/zh_cn.json | 3 +- .../assets/create/lang/unfinished/zh_tw.json | 3 +- .../java/com/simibubi/create/AllItems.java | 17 ++++++---- .../curiosities/armor/CopperBacktankItem.java | 33 +++++++++++++++---- 19 files changed, 83 insertions(+), 43 deletions(-) diff --git a/src/generated/resources/.cache/cache b/src/generated/resources/.cache/cache index 06754926f..f113565e7 100644 --- a/src/generated/resources/.cache/cache +++ b/src/generated/resources/.cache/cache @@ -530,22 +530,22 @@ bf2b0310500213ff853c748c236eb5d01f61658e assets/create/blockstates/yellow_toolbo 6801fa1f466f172700e573e5b8ee8ee5f9ca4583 assets/create/blockstates/yellow_valve_handle.json 7f39521b211441f5c3e06d60c5978cebe16cacfb assets/create/blockstates/zinc_block.json b7181bcd8182b2f17088e5aa881f374c9c65470c assets/create/blockstates/zinc_ore.json -64a8442735a333c7444cac12cfb22c454ca06b6b assets/create/lang/en_ud.json -3025898bb663b49ed550213a215cef18b0088e0a assets/create/lang/en_us.json -8c61dfd075c622ae55e357356e892c5beee2c3aa assets/create/lang/unfinished/de_de.json -a8b0d479a7817127bc52569167f32378e11420ce assets/create/lang/unfinished/es_cl.json -2dde88b654172a69c9f68eb54584e7f68c8600fc assets/create/lang/unfinished/es_es.json -88a8d4a8658ff96b778112769c2b9f8ee1af12f6 assets/create/lang/unfinished/fr_fr.json -42281c85374f9583bfb714cc2a634bf59e5cec19 assets/create/lang/unfinished/it_it.json -0ca86935c39301220f609bdf5145b34b55bdd6bd assets/create/lang/unfinished/ja_jp.json -eafcb60d35104abe3453542628772d32ac631e33 assets/create/lang/unfinished/ko_kr.json -99775dd562ee0457f39b54f5d850c1bc6529a840 assets/create/lang/unfinished/nl_nl.json -c3f46417c4b5e3c0a83f5a1affcf21ecd2d4694f assets/create/lang/unfinished/pl_pl.json -6b09310200f780020965bcd5db768d28081efcf5 assets/create/lang/unfinished/pt_br.json -cfcfc82ad5b307b7395f66057dbda849e70c08f9 assets/create/lang/unfinished/pt_pt.json -34f8b480a8af8e449a3dfb8c978bbceeb934824f assets/create/lang/unfinished/ru_ru.json -396ff04a12796b38deb0697e36f970c75db814e6 assets/create/lang/unfinished/zh_cn.json -1116935a6b993de72ec7e15a8f44d06a7de3ebe7 assets/create/lang/unfinished/zh_tw.json +7880ce16e8b649e26d01cecee271648027f26651 assets/create/lang/en_ud.json +aca02d2ab91e288e65e07470a117ace325299130 assets/create/lang/en_us.json +64aa458040affc16c4412297cdb5ee13ad010660 assets/create/lang/unfinished/de_de.json +7f36bcf491d6890a563c8d03c281e300576f446d assets/create/lang/unfinished/es_cl.json +0c44dc2a7f3157c463a26900ec75b0278b372cc9 assets/create/lang/unfinished/es_es.json +ee7d298b7234ba25b373eb9d9f2a3ec52aeca233 assets/create/lang/unfinished/fr_fr.json +e642827b0c2530c490f6a4961cba9f6d91d3783c assets/create/lang/unfinished/it_it.json +e92011006f03ed066b51eb5d03011a982589ff37 assets/create/lang/unfinished/ja_jp.json +6441efd98496beff0dcfbd15fd1dd20f5e26eaaf assets/create/lang/unfinished/ko_kr.json +2313eaab1f7eabd4d6d481c139e3fe84ebb4a1eb assets/create/lang/unfinished/nl_nl.json +5a35cb79c97578730d20f766a59443afe484ad03 assets/create/lang/unfinished/pl_pl.json +1112631bcb7d1503dec6e605ef1c4828a1726551 assets/create/lang/unfinished/pt_br.json +36b1368644fb946a97044610932e2a11ddf508b3 assets/create/lang/unfinished/pt_pt.json +8ffe7f27cd6fce29116f9e0920c792376545aa2c assets/create/lang/unfinished/ru_ru.json +967dd607e8784ad7d8851c18f89e32661543a394 assets/create/lang/unfinished/zh_cn.json +5cd389eba3817fc4d5cbaa0ce15ccdb7fbe6c0bf assets/create/lang/unfinished/zh_tw.json 487a511a01b2a4531fb672f917922312db78f958 assets/create/models/block/acacia_window.json b48060cba1a382f373a05bf0039054053eccf076 assets/create/models/block/acacia_window_pane_noside.json 3066db1bf03cffa1a9c7fbacf47ae586632f4eb3 assets/create/models/block/acacia_window_pane_noside_alt.json diff --git a/src/generated/resources/assets/create/lang/en_ud.json b/src/generated/resources/assets/create/lang/en_ud.json index 2ed4baaf7..62214810c 100644 --- a/src/generated/resources/assets/create/lang/en_ud.json +++ b/src/generated/resources/assets/create/lang/en_ud.json @@ -559,6 +559,7 @@ "item.create.chromatic_compound": "punod\u026Fo\u0186 \u0254\u0131\u0287\u0250\u026Fo\u0279\u0265\u0186", "item.create.cinder_flour": "\u0279no\u05DF\u2132 \u0279\u01DDpu\u0131\u0186", "item.create.copper_backtank": "\u029Eu\u0250\u0287\u029E\u0254\u0250\u15FA \u0279\u01DDddo\u0186", + "item.create.copper_backtank_placeable": "\u01DD\u05DFq\u0250\u01DD\u0254\u0250\u05DF\u0500 \u029Eu\u0250\u0287\u029E\u0254\u0250\u15FA \u0279\u01DDddo\u0186", "item.create.copper_nugget": "\u0287\u01DDbbnN \u0279\u01DDddo\u0186", "item.create.copper_sheet": "\u0287\u01DD\u01DD\u0265S \u0279\u01DDddo\u0186", "item.create.crafter_slot_cover": "\u0279\u01DD\u028Co\u0186 \u0287o\u05DFS \u0279\u01DD\u0287\u025F\u0250\u0279\u0186", diff --git a/src/generated/resources/assets/create/lang/en_us.json b/src/generated/resources/assets/create/lang/en_us.json index 8d203ef3f..6198ed78e 100644 --- a/src/generated/resources/assets/create/lang/en_us.json +++ b/src/generated/resources/assets/create/lang/en_us.json @@ -566,6 +566,7 @@ "item.create.chromatic_compound": "Chromatic Compound", "item.create.cinder_flour": "Cinder Flour", "item.create.copper_backtank": "Copper Backtank", + "item.create.copper_backtank_placeable": "Copper Backtank Placeable", "item.create.copper_nugget": "Copper Nugget", "item.create.copper_sheet": "Copper Sheet", "item.create.crafter_slot_cover": "Crafter Slot Cover", diff --git a/src/generated/resources/assets/create/lang/unfinished/de_de.json b/src/generated/resources/assets/create/lang/unfinished/de_de.json index d310f1953..078550333 100644 --- a/src/generated/resources/assets/create/lang/unfinished/de_de.json +++ b/src/generated/resources/assets/create/lang/unfinished/de_de.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 1323", + "_": "Missing Localizations: 1324", "_": "->------------------------] Game Elements [------------------------<-", @@ -567,6 +567,7 @@ "item.create.chromatic_compound": "Chromatische Verbindung", "item.create.cinder_flour": "Aschenmehl", "item.create.copper_backtank": "UNLOCALIZED: Copper Backtank", + "item.create.copper_backtank_placeable": "UNLOCALIZED: Copper Backtank Placeable", "item.create.copper_nugget": "Kupferklumpen", "item.create.copper_sheet": "Kupferblech", "item.create.crafter_slot_cover": "Handwerkseinheit Slot Abdeckung", diff --git a/src/generated/resources/assets/create/lang/unfinished/es_cl.json b/src/generated/resources/assets/create/lang/unfinished/es_cl.json index 1c1611ee1..0d445ef6d 100644 --- a/src/generated/resources/assets/create/lang/unfinished/es_cl.json +++ b/src/generated/resources/assets/create/lang/unfinished/es_cl.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 334", + "_": "Missing Localizations: 335", "_": "->------------------------] Game Elements [------------------------<-", @@ -567,6 +567,7 @@ "item.create.chromatic_compound": "Compuesto Cromático", "item.create.cinder_flour": "Harina de Cenizas", "item.create.copper_backtank": "Mochila-Tanque de Cobre", + "item.create.copper_backtank_placeable": "UNLOCALIZED: Copper Backtank Placeable", "item.create.copper_nugget": "Nugget de Cobre", "item.create.copper_sheet": "Plancha de Cobre", "item.create.crafter_slot_cover": "Cubre Ranuras", diff --git a/src/generated/resources/assets/create/lang/unfinished/es_es.json b/src/generated/resources/assets/create/lang/unfinished/es_es.json index 7bf020e5e..f69d63309 100644 --- a/src/generated/resources/assets/create/lang/unfinished/es_es.json +++ b/src/generated/resources/assets/create/lang/unfinished/es_es.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 5", + "_": "Missing Localizations: 6", "_": "->------------------------] Game Elements [------------------------<-", @@ -567,6 +567,7 @@ "item.create.chromatic_compound": "Compuesto cromático", "item.create.cinder_flour": "Harina del Nether", "item.create.copper_backtank": "Depósito trasero de cobre", + "item.create.copper_backtank_placeable": "UNLOCALIZED: Copper Backtank Placeable", "item.create.copper_nugget": "Pepita de cobre", "item.create.copper_sheet": "Lámina de cobre", "item.create.crafter_slot_cover": "Tapa de ranura del ensamblador mecánico", diff --git a/src/generated/resources/assets/create/lang/unfinished/fr_fr.json b/src/generated/resources/assets/create/lang/unfinished/fr_fr.json index 9f618147c..a8b4ed9da 100644 --- a/src/generated/resources/assets/create/lang/unfinished/fr_fr.json +++ b/src/generated/resources/assets/create/lang/unfinished/fr_fr.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 1585", + "_": "Missing Localizations: 1586", "_": "->------------------------] Game Elements [------------------------<-", @@ -567,6 +567,7 @@ "item.create.chromatic_compound": "Composé chromatique", "item.create.cinder_flour": "Farine de braise", "item.create.copper_backtank": "UNLOCALIZED: Copper Backtank", + "item.create.copper_backtank_placeable": "UNLOCALIZED: Copper Backtank Placeable", "item.create.copper_nugget": "Pépite de cuivre", "item.create.copper_sheet": "Plaques de cuivre", "item.create.crafter_slot_cover": "Couvercle", diff --git a/src/generated/resources/assets/create/lang/unfinished/it_it.json b/src/generated/resources/assets/create/lang/unfinished/it_it.json index 31fd96277..59111a369 100644 --- a/src/generated/resources/assets/create/lang/unfinished/it_it.json +++ b/src/generated/resources/assets/create/lang/unfinished/it_it.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 1274", + "_": "Missing Localizations: 1275", "_": "->------------------------] Game Elements [------------------------<-", @@ -567,6 +567,7 @@ "item.create.chromatic_compound": "Composto cromatico", "item.create.cinder_flour": "Cenere farinosa", "item.create.copper_backtank": "UNLOCALIZED: Copper Backtank", + "item.create.copper_backtank_placeable": "UNLOCALIZED: Copper Backtank Placeable", "item.create.copper_nugget": "Pepita di rame", "item.create.copper_sheet": "Lamiera di rame", "item.create.crafter_slot_cover": "Rivestimento per slot da costruzione", diff --git a/src/generated/resources/assets/create/lang/unfinished/ja_jp.json b/src/generated/resources/assets/create/lang/unfinished/ja_jp.json index 36904deb2..e43406f13 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ja_jp.json +++ b/src/generated/resources/assets/create/lang/unfinished/ja_jp.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 0", + "_": "Missing Localizations: 1", "_": "->------------------------] Game Elements [------------------------<-", @@ -567,6 +567,7 @@ "item.create.chromatic_compound": "色彩ã®åŒ–åˆç‰©", "item.create.cinder_flour": "ãƒã‚¶ãƒ¼ãƒ©ãƒƒã‚¯ã®ç²‰", "item.create.copper_backtank": "銅ã®ãƒãƒƒã‚¯ã‚¿ãƒ³ã‚¯", + "item.create.copper_backtank_placeable": "UNLOCALIZED: Copper Backtank Placeable", "item.create.copper_nugget": "銅塊", "item.create.copper_sheet": "銅æ¿", "item.create.crafter_slot_cover": "クラフタースロットカãƒãƒ¼", diff --git a/src/generated/resources/assets/create/lang/unfinished/ko_kr.json b/src/generated/resources/assets/create/lang/unfinished/ko_kr.json index b57c8c4e7..67151bd04 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ko_kr.json +++ b/src/generated/resources/assets/create/lang/unfinished/ko_kr.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 0", + "_": "Missing Localizations: 1", "_": "->------------------------] Game Elements [------------------------<-", @@ -567,6 +567,7 @@ "item.create.chromatic_compound": "색채 혼합물", "item.create.cinder_flour": "잿가루", "item.create.copper_backtank": "구리 산소통", + "item.create.copper_backtank_placeable": "UNLOCALIZED: Copper Backtank Placeable", "item.create.copper_nugget": "구리 ì¡°ê°", "item.create.copper_sheet": "구리 íŒ", "item.create.crafter_slot_cover": "조합기 슬롯 ë®ê°œ", diff --git a/src/generated/resources/assets/create/lang/unfinished/nl_nl.json b/src/generated/resources/assets/create/lang/unfinished/nl_nl.json index f4f70d369..8d6addeac 100644 --- a/src/generated/resources/assets/create/lang/unfinished/nl_nl.json +++ b/src/generated/resources/assets/create/lang/unfinished/nl_nl.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 1938", + "_": "Missing Localizations: 1939", "_": "->------------------------] Game Elements [------------------------<-", @@ -567,6 +567,7 @@ "item.create.chromatic_compound": "UNLOCALIZED: Chromatic Compound", "item.create.cinder_flour": "UNLOCALIZED: Cinder Flour", "item.create.copper_backtank": "UNLOCALIZED: Copper Backtank", + "item.create.copper_backtank_placeable": "UNLOCALIZED: Copper Backtank Placeable", "item.create.copper_nugget": "Koper klompje", "item.create.copper_sheet": "UNLOCALIZED: Copper Sheet", "item.create.crafter_slot_cover": "UNLOCALIZED: Crafter Slot Cover", diff --git a/src/generated/resources/assets/create/lang/unfinished/pl_pl.json b/src/generated/resources/assets/create/lang/unfinished/pl_pl.json index cd35cc35b..2a7bee84e 100644 --- a/src/generated/resources/assets/create/lang/unfinished/pl_pl.json +++ b/src/generated/resources/assets/create/lang/unfinished/pl_pl.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 373", + "_": "Missing Localizations: 374", "_": "->------------------------] Game Elements [------------------------<-", @@ -567,6 +567,7 @@ "item.create.chromatic_compound": "ZwiÄ…zek chromatyczny", "item.create.cinder_flour": "Rozżarzona mÄ…ka", "item.create.copper_backtank": "Miedziany zbiornik w plecaku", + "item.create.copper_backtank_placeable": "UNLOCALIZED: Copper Backtank Placeable", "item.create.copper_nugget": "BryÅ‚ka miedzi", "item.create.copper_sheet": "Arkusz miedzi", "item.create.crafter_slot_cover": "Przykrywka na slot stoÅ‚u rzemieÅ›lniczego", diff --git a/src/generated/resources/assets/create/lang/unfinished/pt_br.json b/src/generated/resources/assets/create/lang/unfinished/pt_br.json index cfe4a9fd5..edaca3809 100644 --- a/src/generated/resources/assets/create/lang/unfinished/pt_br.json +++ b/src/generated/resources/assets/create/lang/unfinished/pt_br.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 1185", + "_": "Missing Localizations: 1186", "_": "->------------------------] Game Elements [------------------------<-", @@ -567,6 +567,7 @@ "item.create.chromatic_compound": "Composto Cromático", "item.create.cinder_flour": "Farinha de Netherrack", "item.create.copper_backtank": "Tanque Traseiro", + "item.create.copper_backtank_placeable": "UNLOCALIZED: Copper Backtank Placeable", "item.create.copper_nugget": "Pepita de Cobre", "item.create.copper_sheet": "Chapa de Cobre", "item.create.crafter_slot_cover": "Cobertura do slot de fabricador", diff --git a/src/generated/resources/assets/create/lang/unfinished/pt_pt.json b/src/generated/resources/assets/create/lang/unfinished/pt_pt.json index c039f38f5..1e7043d4b 100644 --- a/src/generated/resources/assets/create/lang/unfinished/pt_pt.json +++ b/src/generated/resources/assets/create/lang/unfinished/pt_pt.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 1557", + "_": "Missing Localizations: 1558", "_": "->------------------------] Game Elements [------------------------<-", @@ -567,6 +567,7 @@ "item.create.chromatic_compound": "Composto Cromático", "item.create.cinder_flour": "Farinha de Netherrack", "item.create.copper_backtank": "Tanque Traseiro", + "item.create.copper_backtank_placeable": "UNLOCALIZED: Copper Backtank Placeable", "item.create.copper_nugget": "Pepita de Cobre", "item.create.copper_sheet": "Chapa de Cobre", "item.create.crafter_slot_cover": "Cobertura do slot de fabricador", diff --git a/src/generated/resources/assets/create/lang/unfinished/ru_ru.json b/src/generated/resources/assets/create/lang/unfinished/ru_ru.json index e12ca6f84..37af0100f 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ru_ru.json +++ b/src/generated/resources/assets/create/lang/unfinished/ru_ru.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 378", + "_": "Missing Localizations: 379", "_": "->------------------------] Game Elements [------------------------<-", @@ -567,6 +567,7 @@ "item.create.chromatic_compound": "ХроматичеÑкий компаунд", "item.create.cinder_flour": "ÐÐµÐ·ÐµÑ€Ð°ÐºÐ¾Ð²Ð°Ñ Ð¿Ñ‹Ð»ÑŒ", "item.create.copper_backtank": "Медный баллон", + "item.create.copper_backtank_placeable": "UNLOCALIZED: Copper Backtank Placeable", "item.create.copper_nugget": "КуÑочек меди", "item.create.copper_sheet": "Медный лиÑÑ‚", "item.create.crafter_slot_cover": "Крышка на Ñлот крафтера", diff --git a/src/generated/resources/assets/create/lang/unfinished/zh_cn.json b/src/generated/resources/assets/create/lang/unfinished/zh_cn.json index 158b6193d..4ff97c351 100644 --- a/src/generated/resources/assets/create/lang/unfinished/zh_cn.json +++ b/src/generated/resources/assets/create/lang/unfinished/zh_cn.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 0", + "_": "Missing Localizations: 1", "_": "->------------------------] Game Elements [------------------------<-", @@ -567,6 +567,7 @@ "item.create.chromatic_compound": "异彩化åˆç‰©", "item.create.cinder_flour": "下界é¢ç²‰", "item.create.copper_backtank": "铜制背ç½", + "item.create.copper_backtank_placeable": "UNLOCALIZED: Copper Backtank Placeable", "item.create.copper_nugget": "铜粒", "item.create.copper_sheet": "é“œæ¿", "item.create.crafter_slot_cover": "åˆæˆå™¨ç›–æ¿", diff --git a/src/generated/resources/assets/create/lang/unfinished/zh_tw.json b/src/generated/resources/assets/create/lang/unfinished/zh_tw.json index 184e4e13e..d223fe30f 100644 --- a/src/generated/resources/assets/create/lang/unfinished/zh_tw.json +++ b/src/generated/resources/assets/create/lang/unfinished/zh_tw.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 392", + "_": "Missing Localizations: 393", "_": "->------------------------] Game Elements [------------------------<-", @@ -567,6 +567,7 @@ "item.create.chromatic_compound": "異彩化åˆç‰©", "item.create.cinder_flour": "地ç„麵粉", "item.create.copper_backtank": "銅製後背包", + "item.create.copper_backtank_placeable": "UNLOCALIZED: Copper Backtank Placeable", "item.create.copper_nugget": "銅粒", "item.create.copper_sheet": "銅æ¿", "item.create.crafter_slot_cover": "åˆæˆå™¨è“‹æ¿", diff --git a/src/main/java/com/simibubi/create/AllItems.java b/src/main/java/com/simibubi/create/AllItems.java index 523d16e81..9e7ae4cad 100644 --- a/src/main/java/com/simibubi/create/AllItems.java +++ b/src/main/java/com/simibubi/create/AllItems.java @@ -40,6 +40,7 @@ import com.simibubi.create.content.curiosities.ShadowSteelItem; import com.simibubi.create.content.curiosities.TreeFertilizerItem; import com.simibubi.create.content.curiosities.armor.CopperArmorItem; import com.simibubi.create.content.curiosities.armor.CopperBacktankItem; +import com.simibubi.create.content.curiosities.armor.CopperBacktankItem.CopperBacktankBlockItem; import com.simibubi.create.content.curiosities.armor.DivingBootsItem; import com.simibubi.create.content.curiosities.armor.DivingHelmetItem; import com.simibubi.create.content.curiosities.symmetry.SymmetryWandItem; @@ -63,7 +64,6 @@ import com.tterrag.registrate.util.entry.ItemEntry; import net.minecraft.tags.ItemTags; import net.minecraft.tags.TagKey; import net.minecraft.world.food.FoodProperties; -import net.minecraft.world.item.BlockItem; import net.minecraft.world.item.Item; import net.minecraft.world.item.Rarity; import net.minecraftforge.common.Tags; @@ -243,13 +243,18 @@ public class AllItems { REGISTRATE.item("crafting_blueprint", BlueprintItem::new) .register(); + // wrapped by COPPER_BACKTANK for block placement uses. + // must be registered as of 1.18.2 + public static final ItemEntry COPPER_BACKTANK_PLACEABLE = REGISTRATE + .item("copper_backtank_placeable", p -> new CopperBacktankBlockItem(AllBlocks.COPPER_BACKTANK.get(), p)) + .model((c, p) -> p.getExistingFile(p.mcLoc("item/barrier"))) + .register(); + public static final ItemEntry - COPPER_BACKTANK = - REGISTRATE - .item("copper_backtank", p -> new CopperBacktankItem(p, new BlockItem(AllBlocks.COPPER_BACKTANK.get(), p))) - .model(AssetLookup.customGenericItemModel("_", "item")) - .register(), + COPPER_BACKTANK = REGISTRATE.item("copper_backtank", p -> new CopperBacktankItem(p, COPPER_BACKTANK_PLACEABLE)) + .model(AssetLookup.customGenericItemModel("_", "item")) + .register(), DIVING_HELMET = REGISTRATE.item("diving_helmet", DivingHelmetItem::new) .register(), diff --git a/src/main/java/com/simibubi/create/content/curiosities/armor/CopperBacktankItem.java b/src/main/java/com/simibubi/create/content/curiosities/armor/CopperBacktankItem.java index 03ee34001..eef4852c6 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/armor/CopperBacktankItem.java +++ b/src/main/java/com/simibubi/create/content/curiosities/armor/CopperBacktankItem.java @@ -1,6 +1,7 @@ package com.simibubi.create.content.curiosities.armor; import com.simibubi.create.content.curiosities.armor.CapacityEnchantment.ICapacityEnchantable; +import com.tterrag.registrate.util.entry.ItemEntry; import net.minecraft.core.NonNullList; import net.minecraft.nbt.CompoundTag; @@ -11,27 +12,29 @@ import net.minecraft.world.item.BlockItem; import net.minecraft.world.item.CreativeModeTab; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.context.UseOnContext; +import net.minecraft.world.level.block.Block; public class CopperBacktankItem extends CopperArmorItem implements ICapacityEnchantable { public static final int DURABILITY_BAR = 0xEFEFEF; - private BlockItem blockItem; + private ItemEntry blockItem; - public CopperBacktankItem(Properties p_i48534_3_, BlockItem blockItem) { + public CopperBacktankItem(Properties p_i48534_3_, ItemEntry copperBacktankPlaceable) { super(EquipmentSlot.CHEST, p_i48534_3_); - this.blockItem = blockItem; + this.blockItem = copperBacktankPlaceable; } @Override public InteractionResult useOn(UseOnContext p_195939_1_) { - return blockItem.useOn(p_195939_1_); + return blockItem.get() + .useOn(p_195939_1_); } @Override public boolean canBeDepleted() { return false; } - + @Override public boolean isEnchantable(ItemStack p_77616_1_) { return true; @@ -41,7 +44,7 @@ public class CopperBacktankItem extends CopperArmorItem implements ICapacityEnch public void fillItemCategory(CreativeModeTab p_150895_1_, NonNullList p_150895_2_) { if (!allowdedIn(p_150895_1_)) return; - + ItemStack stack = new ItemStack(this); CompoundTag nbt = new CompoundTag(); nbt.putInt("Air", BackTankUtil.maxAirWithoutEnchants()); @@ -68,5 +71,21 @@ public class CopperBacktankItem extends CopperArmorItem implements ICapacityEnch CompoundTag orCreateTag = stack.getOrCreateTag(); return orCreateTag.getInt("Air"); } - + + public static class CopperBacktankBlockItem extends BlockItem { + + public CopperBacktankBlockItem(Block pBlock, Properties pProperties) { + super(pBlock, pProperties); + } + + @Override + public void fillItemCategory(CreativeModeTab pGroup, NonNullList pItems) {} + + @Override + public String getDescriptionId() { + return this.getOrCreateDescriptionId(); + } + + } + } From b32c83e74da234c89dfd6353d27f3c19ba5d8031 Mon Sep 17 00:00:00 2001 From: PepperCode1 <44146161+PepperCode1@users.noreply.github.com> Date: Wed, 23 Mar 2022 01:48:53 -0700 Subject: [PATCH 28/29] Tagging along - Fix glowing shader for 1.18.2 - Optimize and compress tag code - Convert MovementBehaviour to interface - Remove manual refmap remapping as it is no longer necessary - Update Gradle --- build.gradle | 6 -- gradle/wrapper/gradle-wrapper.jar | Bin 59536 -> 59821 bytes gradle/wrapper/gradle-wrapper.properties | 2 +- gradlew | 10 +-- .../java/com/simibubi/create/AllItems.java | 2 +- .../create/AllMovementBehaviours.java | 2 +- .../java/com/simibubi/create/AllTags.java | 73 ++++++++++-------- .../actors/BellMovementBehaviour.java | 2 +- .../BlockBreakingMovementBehaviour.java | 2 +- .../actors/CampfireMovementBehaviour.java | 2 +- .../actors/HarvesterMovementBehaviour.java | 2 +- .../PortableStorageInterfaceMovement.java | 2 +- .../actors/SeatMovementBehaviour.java | 6 +- .../dispenser/DispenserMovementBehaviour.java | 40 +++++----- .../dispenser/DropperMovementBehaviour.java | 8 +- .../IMovedDispenseItemBehaviour.java | 2 +- .../MovedDefaultDispenseItemBehaviour.java | 4 +- .../CrushingWheelControllerTileEntity.java | 5 +- .../deployer/DeployerMovementBehaviour.java | 2 +- .../components/fan/EncasedFanTileEntity.java | 2 +- .../BlockMovementChecks.java | 2 +- .../structureMovement/MovementBehaviour.java | 40 +++++----- .../StabilizedBearingMovementBehaviour.java | 2 +- .../fluids/tank/FluidTankModel.java | 2 +- .../processing/BasinMovementBehaviour.java | 4 +- .../processing/InWorldProcessing.java | 5 +- .../contraptions/relays/belt/BeltBlock.java | 5 +- .../contraptions/relays/belt/BeltHelper.java | 2 +- .../curiosities/bell/BasicParticleData.java | 4 +- .../curiosities/tools/BlueprintItem.java | 3 +- .../tools/BlueprintOverlayRenderer.java | 29 +++---- .../weapons/BuiltinPotatoProjectileTypes.java | 14 ++-- .../block/funnel/FunnelMovementBehaviour.java | 4 +- .../redstone/ContactMovementBehaviour.java | 2 +- .../logistics/item/filter/ItemAttribute.java | 29 +++---- .../palettes/AllPaletteStoneTypes.java | 4 +- .../foundation/fluid/FluidIngredient.java | 11 ++- .../item/TagDependentIngredientItem.java | 7 +- .../accessor/FallingBlockEntityAccessor.java | 16 ++++ .../behaviour/ValueBoxRenderer.java | 18 ++--- .../belt/DirectBeltInputBehaviour.java | 1 + .../resources/META-INF/accesstransformer.cfg | 1 - src/main/resources/META-INF/mods.toml | 2 +- .../create/shaders/core/glowing_shader.fsh | 1 - .../create/shaders/core/glowing_shader.json | 3 +- .../create/shaders/core/glowing_shader.vsh | 3 +- src/main/resources/create.mixins.json | 5 +- 47 files changed, 195 insertions(+), 198 deletions(-) create mode 100644 src/main/java/com/simibubi/create/foundation/mixin/accessor/FallingBlockEntityAccessor.java diff --git a/build.gradle b/build.gradle index 7584c368d..7fe024dcc 100644 --- a/build.gradle +++ b/build.gradle @@ -48,8 +48,6 @@ minecraft { arg '-mixin.config=flywheel.mixins.json' //jvmArgs '-XX:+UnlockCommercialFeatures' // uncomment for profiling property 'forge.logging.console.level', 'info' - property 'mixin.env.remapRefMap', 'true' - property 'mixin.env.refMapRemappingFile', "${projectDir}/build/createSrgToMcp/output.srg" mods { create { source sourceSets.main @@ -67,8 +65,6 @@ minecraft { workingDirectory project.file('run/server') arg '-mixin.config=create.mixins.json' property 'forge.logging.console.level', 'info' - property 'mixin.env.remapRefMap', 'true' - property 'mixin.env.refMapRemappingFile', "${projectDir}/build/createSrgToMcp/output.srg" mods { create { source sourceSets.main @@ -80,8 +76,6 @@ minecraft { workingDirectory project.file('run') property 'forge.logging.markers', 'REGISTRIES,REGISTRYDUMP' property 'forge.logging.console.level', 'debug' - property 'mixin.env.remapRefMap', 'true' - property 'mixin.env.refMapRemappingFile', "${projectDir}/build/createSrgToMcp/output.srg" args '--mod', 'create', '--all', '--output', file('src/generated/resources/'), '--existing', file('src/main/resources') mods { create { diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 7454180f2ae8848c63b8b4dea2cb829da983f2fa..41d9927a4d4fb3f96a785543079b8df6723c946b 100644 GIT binary patch delta 8958 zcmY+KWl$VIlZIh&f(Hri?gR<$?iyT!TL`X;1^2~W7YVSq1qtqM!JWlDxLm%}UESUM zndj}Uny%^UnjhVhFb!8V3s(a#fIy>`VW15{5nuy;_V&a5O#0S&!a4dSkUMz_VHu3S zGA@p9Q$T|Sj}tYGWdjH;Mpp8m&yu&YURcrt{K;R|kM~(*{v%QwrBJIUF+K1kX5ZmF zty3i{d`y0;DgE+de>vN@yYqFPe1Ud{!&G*Q?iUc^V=|H%4~2|N zW+DM)W!`b&V2mQ0Y4u_)uB=P@-2`v|Wm{>CxER1P^ z>c}ZPZ)xxdOCDu59{X^~2id7+6l6x)U}C4Em?H~F`uOxS1?}xMxTV|5@}PlN%Cg$( zwY6c}r60=z5ZA1L zTMe;84rLtYvcm?M(H~ZqU;6F7Evo{P7!LGcdwO|qf1w+)MsnvK5^c@Uzj<{ zUoej1>95tuSvDJ|5K6k%&UF*uE6kBn47QJw^yE&#G;u^Z9oYWrK(+oL97hBsUMc_^ z;-lmxebwlB`Er_kXp2$`&o+rPJAN<`WX3ws2K{q@qUp}XTfV{t%KrsZ5vM!Q#4{V& zq>iO$MCiLq#%wXj%`W$_%FRg_WR*quv65TdHhdpV&jlq<=K^K`&!Kl5mA6p4n~p3u zWE{20^hYpn1M}}VmSHBXl1*-)2MP=0_k)EPr#>EoZukiXFDz?Di1I>2@Z^P$pvaF+ zN+qUy63jek2m59;YG)`r^F3-O)0RDIXPhf)XOOdkmu`3SMMSW(g+`Ajt{=h1dt~ks ztrhhP|L4G%5x79N#kwAHh5N){@{fzE7n&%dnisCm65Za<8r_hKvfx4Bg*`%-*-Mvn zFvn~)VP@}1sAyD+B{{8l{EjD10Av&Mz9^Xff*t`lU=q=S#(|>ls520;n3<}X#pyh& z*{CJf7$*&~!9jMnw_D~ikUKJ2+UnXmN6qak{xx%W;BKuXt7@ky!LPI1qk?gDwG@@o zkY+BkIie>{{q==5)kXw(*t#I?__Kwi>`=+s?Gq6X+vtSsaAO&Tf+Bl$vKnzc&%BHM z=loWOQq~n}>l=EL(5&6((ESsQC3^@4jlO5Od{qN#sWV)vqXw}aA>*uvwZopNN(|-T zRTF%5Y_k1R$;(d-)n;hWex{;7b6KgdAVE@&0pd(*qDzBO#YZV%kh%pYt1`hnQ(Fa& zYiDrOTDqk5M7hzp9kI2h!PxNnuJ&xl*zF8sx6!67bA49R1bmUF5bpK&&{eI0U~cH}PM z3aW1$lRb|ItkG5~_eBNu$|I|vYIdAA9a!pVq<+UTx*M}fG`23zxXp&E=FfnY- zEzKj;Cu_s4v>leO7M2-mE(UzKHL4c$c`3dS*19OpLV^4NI*hWWnJQ9lvzP4c;c?do zqrcsKT*i~eIHl0D3r4N{)+RsB6XhrC^;sp2cf_Eq#6*CV;t8v=V!ISe>>9kPgh}NI z=1UZutslxcT$Ad;_P^;Oouoa(cs!Ctpvi>%aQ+Zp=1d|h{W9Wmf7JWxa(~<#tSZ?C%wu4_5F!fc!<@PIBeJ)Nr^$bB6!_Gic_7}c3J{QI~Gg5g5jTp9}V6KYgrgaX>pJt}7$!wOht&KO|+z{Iw@YL|@~D zMww}+lG}rm2^peNx>58ME||ZQxFQeVSX8iogHLq_vXb`>RnoEKaTWBF-$JD#Q4BMv zt2(2Qb*x-?ur1Y(NsW8AdtX0#rDB?O(Vs4_xA(u-o!-tBG03OI!pQD+2UytbL5>lG z*(F)KacHqMa4?dxa(Vcrw>IIAeB$3cx#;;5r2X;HE8|}eYdAgCw#tpXNy7C3w1q`9 zGxZ6;@1G%8shz9e+!K2MO*{_RjO}Jo6eL3{TSZ>nY7)Qs`Dhi5><@oh0r)gT7H-?3 zLDsd^@m%JvrS8sta5`QiZNs^*GT}Hiy^zjK2^Ni%`Z|ma)D2 zuyumbvw$M8$haCTI~6M%d4+P)uX%u{Sfg4Al+F7c6;O-*)DKI7E8izSOKB#FcV{M+ zEvY0FBkq!$J0EW$Cxl}3{JwV^ki-T?q6C30Y5e&p@8Rd?$ST-Ghn*-`tB{k54W<>F z5I)TFpUC!E9298=sk>m#FI4sUDy_!8?51FqqW!9LN1(zuDnB3$!pEUjL>N>RNgAG~-9Xm|1lqHseW(%v&6K(DZ3Pano(1-Qe?3%J&>0`~w^Q-p&@ zg@HjvhJk?*hpF7$9P|gkzz`zBz_5Z!C4_-%fCcAgiSilzFQef!@amHDrW!YZS@?7C zs2Y9~>yqO+rkih?kXztzvnB^6W=f52*iyuZPv$c42$WK7>PHb z6%MYIr5D32KPdwL1hJf{_#jn?`k(taW?mwmZVvrr=y~fNcV$`}v(8};o9AjOJumS4 z`889O91^pkF+|@$d9wVoZ3;^j;^sUs&Ubo_qD&MTL%O z&*SE0ujG~zm;?x)8TLC&ft))nyI zcg44@*Q{cYT+qGrA=In_X{NNCD+B0w#;@g)jvBU;_8od6U>;7HIo@F*=g8CQUo(u^ z3r4FJ7#<@)MXO&5+DgKE&^>^`r!loe7CWE*1k0*0wLFzSOV8jvlX~WOQ?$1v zk$Or}!;ix0g78^6W;+<=J>z@CBs!<<)HvF(Ls-&`matpesJ5kkjC)6nGB@b{ii6-Uoho$BT%iJgugTOeZ$5Xo4D7Pd< zC*LJh5V@2#5%aBZCgzlQi3@<_!VfiL07ywc)ZbwKPfcR|ElQoS(8x|a7#IR}7#Io= zwg4$8S{egr-NffD)Fg&X9bJSoM25pF&%hf>(T&9bI}=#dPQyNYz;ZZ7EZ=u1n701SWKkZ9n(-qU ztN`sdWL1uxQ1mKS@x11;O|@^AD9!NeoPx}?EKIr!2>1Qq4gjfGU)tr6?Z5l7JAS3j zZeq{vG{rb%DFE4%$szK}d2UzB{4>L?Tv+NAlE*&Nq6g+XauaSI+N2Y8PJLw+aNg1p zbxr|hI8wcMP&&+(Cu|%+Jq|r>+BHk@{AvfBXKiVldN)@}TBS0LdIpnANCVE26WL-} zV}HJ^?m&$Rkq;Zf*i-hoasnpJVyTH__dbGWrB_R55d*>pTyl6(?$EO@>RCmTX1Hzr zT2)rOng?D4FfZ_C49hjMV*UonG2DlG$^+k=Y%|?Dqae4}JOU=8=fgY4Uh!pa9eEqf zFX&WLPu!jArN*^(>|H>dj~g`ONZhaaD%h_HHrHkk%d~TR_RrX{&eM#P@3x=S^%_6h zh=A)A{id16$zEFq@-D7La;kTuE!oopx^9{uA3y<}9 z^bQ@U<&pJV6kq7LRF47&!UAvgkBx=)KS_X!NY28^gQr27P=gKh0+E>$aCx&^vj2uc}ycsfSEP zedhTgUwPx%?;+dESs!g1z}5q9EC+fol}tAH9#fhZQ?q1GjyIaR@}lGCSpM-014T~l zEwriqt~ftwz=@2tn$xP&-rJt?nn5sy8sJ5Roy;pavj@O+tm}d_qmAlvhG(&k>(arz z;e|SiTr+0<&6(-An0*4{7akwUk~Yf4M!!YKj^swp9WOa%al`%R>V7mi z+5+UodFAaPdi4(8_FO&O!Ymb#@yxkuVMrog(7gkj$G@FLA#ENMxG)4f<}S%Fn?Up$+C%{02AgMKa^ z4SFGWp6U>{Q6VRJV}yjxXT*e`1XaX}(dW1F&RNhpTzvCtzuu;LMhMfJ2LBEy?{^GHG!OF!! zDvs64TG)?MX&9NCE#H3(M0K>O>`ca0WT2YR>PTe&tn?~0FV!MRtdb@v?MAUG&Ef7v zW%7>H(;Mm)RJkt18GXv!&np z?RUxOrCfs;m{fBz5MVlq59idhov21di5>WXWD-594L-X5;|@kyWi@N+(jLuh=o+5l zGGTi~)nflP_G}Yg5Pi%pl88U4+^*ihDoMP&zA*^xJE_X*Ah!jODrijCqQ^{=&hD7& z^)qv3;cu?olaT3pc{)Kcy9jA2E8I)#Kn8qO>70SQ5P8YSCN=_+_&)qg)OYBg|-k^d3*@jRAeB?;yd-O1A0wJ z?K*RDm|wE<(PBz~+C%2CTtzCTUohxP2*1kE8Of~{KRAvMrO_}NN&@P7SUO{;zx0iK z@or9R8ydYOFZf(cHASCAatL%;62IL27~SmASr(7F&NMr+#gNw@z1VM z_ALFwo3)SoANEwRerBdRV`>y`t72#aF2ConmWQp(Xy|msN9$yxhZ1jAQ67lq{vbC5 zujj|MlGo`6Bfn0TfKgi(k=gq0`K~W+X(@GzYlPI4g0M;owH3yG14rhK>lG8lS{`!K z+Nc@glT-DGz?Ym?v#Hq|_mEdPAlHH5jZuh*6glq!+>Lk$S%ED2@+ea6CE@&1-9a?s znglt|fmIK}fg<9@XgHe4*q!aO<-;Xj$T?IzB-{&2`#eA6rdtCi80mpP&vw(Uytxu$#YzNI_cB>LS zmim>ys;ir;*Dzbr22ZDxO2s;671&J0U<9(n1yj)J zHFNz=ufPcQVEG+ePjB<5C;=H0{>Mi*xD>hQq8`Vi7TjJ$V04$`h3EZGL|}a07oQdR z?{cR(z+d>arn^AUug&voOzzi$ZqaS)blz-z3zr;10x;oP2)|Cyb^WtN2*wNn`YX!Y z+$Pji<7|!XyMCEw4so}xXLU)p)BA~2fl>y2Tt}o9*BPm?AXA8UE8a;>rOgyCwZBFa zyl42y`bc3}+hiZL_|L_LY29vVerM+BVE@YxK>TGm@dHi@Uw*7AIq?QA9?THL603J% zIBJ4y3n8OFzsOI;NH%DZ!MDwMl<#$)d9eVVeqVl(5ZX$PPbt*p_(_9VSXhaUPa9Qu z7)q4vqYKX7ieVSjOmVEbLj4VYtnDpe*0Y&+>0dS^bJ<8s*eHq3tjRAw^+Mu4W^-E= z4;&namG4G;3pVDyPkUw#0kWEO1;HI6M51(1<0|*pa(I!sj}F^)avrE`ShVMKBz}nE zzKgOPMSEp6M>hJzyTHHcjV%W*;Tdb}1xJjCP#=iQuBk_Eho6yCRVp&e!}4IBJ&?ksVc&u#g3+G$oNlJ?mWfADjeBS-Ph3`DKk-~Z70XugH8sq2eba@4 zIC1H_J$`9b$K`J)sGX3d!&>OmC@@rx1TL~NinQOYy72Q_+^&Mg>Ku(fTgaXdr$p_V z#gav1o{k~c>#)u3r@~6v^o)Lf=C{rAlL@!s457pq)pO;Cojx7U{urO4cvXP|E>+dV zmr2?!-5)tk-&*ap^D^2x7NG6nOop2zNFQ9v8-EZ{WCz-h36C)<^|f{V#R_WE^@(T0+d-at5hXX{U?zak*ac-XnyINo+yBD~~3O1I=a z99|CI>502&s-Qi5bv>^2#cQ%ut<4d7KgQ^kE|=%6#VlGiY8$rdJUH{sra;P~cyb_i zeX(kS%w0C?mjhJl9TZp8RS;N~y3(EXEz13oPhOSE4WaTljGkVXWd~|#)vsG6_76I)Kb z8ro?;{j^lxNsaxE-cfP;g(e;mhh3)&ba}li?woV2#7ByioiD>s%L_D;?#;C#z;a(N z-_WY<=SH42m9bFQ>Nb z@4K$@4l8pD7AKxCR>t0%`Qoy9=hA?<<^Vcj8;-E+oBe3ReW1`el8np8E$k{LgFQ}2 z2t8a`wOXFdJ9!5$&mEfD1CnJ)TB+RJih88-Zos9@HZ# zL#{qfbF0ARTXkR@G{lwlOH~nnL)1jcyu!qv2`57S&%oKz0}r{~l9U_UHaJ5!8#nrs z?2FrL`mxnzu&{bweD&62)ilz*?pYIvt`T!XFVVA78})p1YEy7 z8fK#s?b~Yo$n7&_a?EBdXH-_W)Z44?!;DFx6pZ?~RArtBI*Qm4~6nX6Z_T*i$bQPE;Qz?DAPstpGSqr-AJ zo%m9cA`oDDm?&dTaoh_>@F>a?!y4qt_;NGN9Z<%SS;fX-cSu|>+Pba22`CRb#|HZa z;{)yHE>M-pc1C0mrnT~80!u&dvVTYFV8xTQ#g;6{c<9d!FDqU%TK5T6h*w*p980D~ zUyCb`y3{-?(mJFP)0*-Nt;mI$-gc4VQumh|rs&j_^R{sgTPF`1Xja2YWstsKFuQ(d zmZMxV$p$|qQUXchu&8%J(9|)B?`~rIx&)LqDS>ob5%gTeTP#Sbny#y*rnJ&?(l=!( zoV~}LJ1DPLnF8oyM(2ScrQ0{Q4m4-BWnS4wilgCW-~~;}pw=&<+HggRD_3c@3RQIr z9+-%!%}u_{`YS=&>h%kPO3ce}>y!d-zqiniNR-b5r97u;+K6HA2tS>Z#cV{+eFI`* zd8RMGAUtX1KWfPV;q<-5JAykS+2sY$2~UX+4461a(%{P#{rwFPu0xpIuYlbgD{C7C z=U{FUarVTYX6ZUq3wE@G^QT4H2Re;n$Fz9cJ>hABl)9T8pozqbA1)H-%1=WKm^QMu zjnUZ&Pu>q+X&6Co*y#@pxc-4waKMInEPGmE_>3@Ym3S*dedSradmc5mlJn`i0vMW6 zhBnGQD^Z;&S0lnS0curqDO@({J7kTtRE+Ra?nl^HP9<)W&C>~`!258f$XDbyQOQXG zP8hhySnarOpgu8xv8@WlXnm(Uk~)_3$Sg0vTbU3 z{W!5B(L3{Yy3K5PN<@jEarAtja`}@KYva&zFRF*s+_%jIXh$T(S=an8?=Ry3H*NRqWgsM`&!#|@kf1>=4q%bFw7^Rhz!z5I zyI^zU8_R1WN9`88Z=n>pIZQ`Ixr~_9G%Q}@A7rd#*%y7G zXl^Id=^ZL?Rx}}gWXCqzj9C6;x(~mAH|$JteXa1MH<6UQig@!Hf~t}B%tP0I|H&;y zO6N0}svOa1a^PyP9N5?4W6VF%=Bj{qHUgc8@siw4bafT=UPFSoQqKgyUX>sXTBZ=x zOh^Ad!{kOM9v{%5y}`-8u*T&C7Vq6mD%GR}UeU(*epO&qgC-CkD;%=l)ZuinSzHM` z{@`j&_vC6dDe{Yb9k@1zeV_K6!l(@=6ucoI=R^cH=6{i71%4W3$J-?<8Qn#$-DMtA z6Qqi)t?4ifrt%3jSA#6ji#{f(($KBL-iQh-xrC||3U3lq`9>r)>X%oLvtimuHW-)} zy}>9~|M>w4eES`g7;iBM%Se5-OP%1U6gNWp3AZqT8C6OlFFfQ$|7LL;tBV)(qlp4K zruar^K8FnJN3@_}B;G`a~H`t|3+6d>q3#`ctTkE-D^1#d9NalQ04lH*qUW2!V zhk7#z8OwHhSl8w14;KctfO8ubZJ4$dEdpXE78wABz=n5*=q9ex3S}`e7x~~V-jmHOhtX2*n+pBslo3uosdE7xABK=V#-t{1Hd~?i z{i~%Bw6NYF+F$aK$M`r#xe=NxhA5=p%i7!$);sd>Q}#`G?Q~fygrMXmZw?0#5#17W}6Tj+&kFexG{!mYl5FoA99}3G9l;3lVQ^ z48^~gsVppE*x91WheqI(A%F0Z#$#1UJP1R12Mj9r)y(A?a+iquX+d8WD4WAQJ_!oq z9rTISr7bPd(GTP57xm$}C}&kjMivi;zi^Y9g3&X0A;ovdJ?{%_wHgt%%9P&N4H z^XzV(uNA4 zAP`hgP6BEN5`YXh|DF~6Pud?~gWfhUKoPX4>z|}0aocC&K+AoV%|SX*N!wGq3|y< zg4lP(04XIPmt6}$N!dTk+pZv>u;MTB{L4hp9uXk7>aS!6jqM2lVr%{)H3$O127TSZ z0x9hi0k-P?nWFdQ0K`pykqUIT&jD~B0tHP{ffS(}fZ(aW$oBWTSfHO!A^><6vA?qar%tzN-5NQO zL&|F{nGiQyzNJ+bM$Y`n=Lx^3wTG^o2bGB@cwr1eb+6c-1tN=U+Db;bc~eJ!hwM{SbI=#g?$!PjDB+) zPgU_2EIxocr*EOJG52-~!gml&|D|C2OQ3Y(zAhL}iae4-Ut0F*!z!VEdfw8#`LAi# zhJ_EM*~;S|FMV6y%-SduHjPOI3cFM(GpH|HES<}*=vqY+64%dJYc|k?n6Br7)D#~# zEqO(xepfaf2F{>{E2`xb=AO%A<7RtUq6kU_Iu0m?@0K(+<}u3gVw5fy=Y4CC*{IE3 zLP3YBJ7x+U(os5=&NT%gKi23bbaZ`@;%ln)wp4GpDUT$J8NtFDHJzIe_-t}{!HAsh zJ4<^WovY};)9IKAskSebdQiXv$y5}THuJZ}ouoElIZRui=6lrupV|_Jz=9^&;@HwL;J#@23k?A;k`0Bgf;ioO>W`IQ+4? z7A)eKoY4%+g%=w;=Vm8}H>@U*=*AWNtPqgWRqib#5RTGA@Q=43FrQn3J`GkTUV5yp0U`EOTqjfp+-9;0F8!dMEwwcK%(6`8sDD^aR04 zd6O5vh|Xk?&3dy4f|1QK&Ulf{h6Iq;d-&*ti#Ck>wZFG;GHwc?b;X~eBITx49>2d8 z4HcK&1&DvEGT6kXdzAm4oO8%c}8OBt~8H956_;YP-ss*uMf==a+%w~F>Qkm7r)IAuxuoX}h92$gHqbFUun#8m zWHdy`Zrm#=Pa98x8cO0vd@Tgkr*lm0{dky+Gocr0P8y%HGEI#c3qLqIRc`Oq_C%*; zG+QTr(#Q|yHKv6R@!DmLlwJQ3FAB)Yor-I4zyDyqM4yp5n2TrQH>gRt*Zw0+WI-Sj`EgmYHh=t9! zF6lz^xpqGGpo6!5`sc0a^FVhy_Uxq|@~(1@IIzV)nTpY9sY`CV!?8e&bB8=M&sYEb z2i}fvKdhp9Hs68Y-!QJ<=wE(iQ5+49tqt;Rh|jhYrI5VW-mIz|UY{h8E=rC5sh#DU z?wGgk-Tn!I?+Zer7pHlF_Z^!Kd1qkS3&lv#%s6-<5Y%jQL${cge5=G5Ab?D&|9$Y~ zf%rJC2+=2vg;y0-SJb3<@3%}BO$T$C66q$L_H33a`VUbgW~N(4B=v5(<=My|#|J7q z*Ox4wL4kbJd_~EjLTABSu4U7Jk#`y(6O*U6(k6XxM}CtGZB(H@3~kh*zaGRXM}Iwp zQ%xFk2>@wiZrVCV_G4G~v;NebCQ%T7{SDyPpSv&dT@Cn)Mx@IK*IdNrj{*4pkV4wv z)y0J538h>cpB7iPSzA~x24T`{dzNkpvGIqvt1Dvdq@o-`B=$hkczX8$yFMhsWNK-X zxr$kR$tMD0@W)Vxe1^t9qVmsg&K^F@u84)(n2dttIEAZFN6VD$&tskpG%SI7whGL3 z)DeRiwe&?8m7U{G`oW8!SCi*dM>oYL%UKQnKxV_0RXAEBQg1kStExGEUVwLJ0orGGwb7uv+kPDl7_E2*iD|J*=8A@;XCvwq0aw5oJYN*Yh&o=l} z2z8YKb-fIAH5spql4eXqp*)o2*b>#1@DSt?zZi{GPj0gH&Nm+EI<3^z0w%YTEV4xw zI6$+=Faa|Y4o5i0zm5lOg|&tmnJ806DBovU@Ll6XsA;NRrTK~t*AAJIAS=v-UZ%Pr z$oddI@NRir&erzCwq|)ciJemr-E061j{0Vc@Ys7K(mW|JYj*$+i1Q8XlIK8T?TYS(AXu$`2U zQ@fHxc=AVHl_}cRZQ)w0anMEoqRKKIvS^`<-aMf*FM`NsG&Uowneo+Ji$7DUDYc7*Hjg;-&aHM%3 zXO6cz$$G};Uqh+iY7Wpme>PHG4cu(q;xyskNLs$^uRRMfEg?8Cj~aE-ajM%CXkx0F z>C?g3tIA#9sBQOpe`J+04{q7^TqhFk^F1jFtk4JDRO*`d-fx`GYHb=&(JiaM1b?Y^ zO3Kj3sj76ieol|N$;>j@t#tKj=@*gP+mv}KwlTcPYgR$+)2(gk)2JNE=jSauPq!$< z<|?Sb%W)wS)b>b6i{8!x!^!xIdU3{CJFVnTcw0j{M%DUCF=_>eYYEUWnA-|B(+KYL z_W_`JI&&u^@t0})@DH^1LDuT0s3dMpCHIbYBgOT4Zh_4yHbSqRbtIKndeT4Q*Jg91 z@>rO!^t-G~*AIW;FQ$3J=b;oGg8?CTa~qNCb>&cgp@e;?0AqA&paz~(%PYO+QBo4( zp?}ZdSMWx0iJm7HVNk9A#^9Osa#GPJ!_pYEW}($8>&2}fbr@&ygZ?${A7_9?X$(&5 z#~-hxdPQwCNEpf=^+WH-3`2LxrrBMTa}~qJC9S;VzhG!On^JLyW6WkF{8aAE$sM+( zxr8xLW(KIjI`Rm(24r3OJBk<3GF=G!uSP0-G&AY32mLm8q=#Xom&Pqv=1C{d3>1^ zAjsmV@XZ%BKq^eUfBpa8KvO8ob|F3hAjJv*yo2Bhl0)KUus{qA9m8jf)KnOGGTa6~4>3@J_VzkL|vYPl*uL+Ot*Q7W!f5rJw5+AsjP_IfL+-S*2p| zB7!FhjvkUTxQkGWGSg{X;h~dK>gAJivW?88Nu!3o>ySDaABn$rAYt086#27fbjPQS zhq>55ASvm*60qRdVOY9=bU^+{Pi#!OaZwENN;zy5?EztOHK-Q5;rCuiFl}BSc1YaQ zC-S{=KsGDz@Ji9O5W;XxE0xI|@3o6(2~i4b8Ii9VT;^G$*dRw(V?=br)D&q^XkeBX z+gl~+R@rVD-Hwv@7RHV?Bip5KMI)aV^&snt?H<$Nt=OPx#VxF&BGi?2A2+lNOYywNUGMeGL;|(=UjGDtLG0sN&LpGx;|U;xa13s z;W_|SPk^G}!M9_^pO zA3bt3-tca%^42sHeDtfcC0S3w3H1ny!Bxpa=*k?XRPpx9Bb-gx1J9Yvx)4J(8cG+q z(iCPZ9dsf3#QVyZgD_MW#G#qgV)olu$59&3(PzQfw@%4uZ~<5J=ABvdY43(Qnp{;G zHg3>@T#>DbTuhFl3)fb3TFqdh)V2aq7!;&JOHseTWukvA7}(iGUq;v-{2J0iHSNHq z;+)h!p6Ok^+Sp8-jgL($n6Qu47xyE`cFO5SdZR6;R!FET`tm#0D37z339Suxjpv+s z*=%2-N$N?X&0?x_uut3erF@aBGj;9$k9?3FlbDO{RQa1_qtxrh4!4#fjp4x~akvdTp@ zos?^Q&XE;3N93s4rHQGPrV7+au1$$aB6$hLy*Yz_kN$~dweb9PcB!eYVQTGjFuJP> zZCEwBtb>TIgIO^qAzq@Bv-qud_ZD-2W<_at&ml-gv`tPt$@DF5`HlA zM>DmmMkpv&Zm-8)Y#0bLQf4MpD4_-7M8eu6rh(tL8dq8onHs#R9J~dGd2IaXXMC~h z91pKhnQa%Fsn29nAA1;x(%oC zhca~qQDJaMf?wFrl-Pj;e$bZMYmMF!Y3Lv&Sb?Sjn#!NVx&NDyc^$b4uYyo2OmERa zRz;yDGd@JTykzFLe|Wk-y7#3x`6$wt$zR8r48mdUvfbeL+4D|Z``~7$PrE@qc7rZe zVsIoIbCwzjLZ@_M1*bD{HaYn();Z1-q*-I{tEnTZ(}Zmk&%MXSNBX>o| z-u*RNkAyKC-Srp7c-=@5f)xMWg>o2WWl}j6j9=8+D8;T z>0*0q#;qw8%U8i;6s0fu#I*%(g*@@a2Er@@nyI}{=@W{Z-;`=wN4N~>6Xrh&z#g}l zN1g5}0-#(nHUTv_rl2{yUZ;h#t&Fd?tY!7L%ClY)>uH-Ny2ET$lW$S)IQiN79H)D^ zb&0AXYkupy0~w8)*>Sj_p9}4L?lGTq%VG|2p`nWGhnM^!g|j-|O{%9Q%swOq63|*W zw$(N_laI}`ilB+o!a-wl?er~;;3+)$_akSQ!8YO_&-e*SI7n^(QQ;X0ZE`{4f!gAl z5$d+9CKVNonM!NO_frREICIAxOv)wm>}-k?iRisM`R7;=lyo|E_YR~FpS&PS`Lg0f zl-ON<0S%Uix8J%#yZdkCz4YNhcec<|7*P(JsM#>-L>+tYg_71q9~70FAc^6KW5jql zw!crdgVLH1G_eET=|SEc977;)ezVC|{PJZfra|}@rD;0s&@61mTEBJtILllg{%{vN zfhb&lq0yChaLhnJ-Qb62MB7`>M;|_ceHKZAeeh@#8tbrK!ArP6oXIhMK;dhEJTY`@ z0Tq>MIe0`7tGv)N*F0IGYSJv0vN?Az8g+4K9S!pW2~9F4W(_U_T=jCZrzuZ3*|__T zONp_UWmyePv8C~rckc?Xji;Z5OEqg zC*Um)i;Wh4TEwqReQdVVbUKT^2>Tpi6z_^-uF*adUFug4i@JhzpWT^Sk&E>CyP2?H zWf6x}ehuTs6wvzCnTU&gYzT029Nz19(In1WC z`(1IGmi!O%2AR|BjQa4Q0~u)kM%}?xQyjWuQ16^Gp++;`vr7!k--UZWM*~7Zl|ceO@I3`OpaRhD;YoCuo5IC0uHx>9 z478hu@H|e0Zlo)Zj@01#;8BDs@991xe~^9uG2}UXLM(m7fa}AMwX*tjioBeV&Q8Gx zSq$6wZFkRBK`cMI>R(@W@+lo2t)L+4q-negWRLWZBz*|%=W4v62JrmzNuOtA*x)QE z5L%=OH#@KMdB%Jp^r?0tE}5-*6oP`-lO7Sf)0)n*e<{HA=&qhLR)oD8-+V}Z4=md) z+k9lKf64DB2hAT)UaCP~di?-V3~JBH7itYyk~L6hrnxM%?RKntqd`=!b|e7eFnAcu z3*V;g{xr7TSTm$}DY%~SMpl>m{Sj!We+WfxSEor?YeiAxYUy25pn(?T()E>ByP^c@ zipwvWrhIK((R((VU+;@LmOnDu)ZXB3YArzzin!Z^0;PyJWnlfflo|q8(QY;o1*5CO z##hnkO{uynTMdk`~DOC#1 zdiYxQoy}=@7(ke#A8$YZZVtk4wo$8x28&I;cY3Ro-|kW=*yiiHgCLZeAr)UtVx>Tu z|LvL0hq|1-jC0I4x#>&QZCfrVB=zT!nR|~Uz`9%~2 znl{uZ{VEszW`Fad^q_HB!K9*|U-stK%?~;g?&&+12A}Rq$z($Bzuk^2X(Y=hF?-dQ ztc3DsQKI;qhWIV`99Q#R3xnU0AvY!i*BECj-z9l74|%O=V@nlv|qqC^r^-~C?E zGW%c|uYgnfJ(gjsTm_cIqcv*mYM{+i+&@F@+69ZQOK&u#v4oxUSQJ=tvqQ3W=*m;| z>SkBi8LYb-qRY7Sthh*0%3XAC%$z1rhOJzuX=PkTOa=DlocZUpE#KxVNH5)_4n=T( zGi3YrH7e~sPNYVBd~Grcq#CF~rN{p9Zza-Ntnwfma@TB)=3g36*0lSZg#ixEjFe%+ zX=&LDZ5zqculZ`=RYc^ln(~;nN|Qh6gN=!6f9-N2h+3NWbIxYud&;4SX*tWf5slk4 z{q@@l71UAZgj~*6edXb57fBUxvAS7s(RI=X868JM0+^DCn2yC>;v%S;qPOjB>YVsz(Zx9a>>BK&M zIQK>7_n)4ud0X5YM}^i*keH{ehLsiy9@NvOpsFeQjdI6anLGvVbBw_*fU1TzdVS$i z*4j7z!I5RF#rSz|8ibi$;qE{4`aqWYik7QB5U&F5C*;TO_x+gtzPGpzNt!7~nsBT7)Ckc(K~%uv&{{6A`mmBJVAk-{s~52Vu|HbCH7_W1~ZCX^RflOakGg=jo2Z z<*s;5-J+2@^LRDZ-7EV&Pq+FTErw@pfFqvx^i%E7Fx#^n(E`m2(c>K-O5`M`Yek9el zzTGs5qD6*G;y#~xu3>qWuO?-amKYtvRA}I9z#UspEeM;wOERYeot_n_EUMJf$4_u?E!6X~?q)tPoZb^_;8Y_Ox2h1m<+Le-fsRd|T8db<8#$bqez zua^Z|>h%zdnuU^ww$#-dZ9NTM`FN+!IlLkz*FqWb!x^Z|C{KyGjZ+>G;;7Mb@LY|H zc+Gp`L((Dw7pnDlHNm&;SfHedhx*kad$I^uGz{`0BYelq0yEUHpNKSkvj$|dpvY3{7*YGyhXA^LP0&wOw9oNoC=QoVx1<2Dne8qqZL zm>nFh5DX(-RnQwvHCZQwn^#Z=E!SPVlaRJ78Bo@}!!9dRt^qZy?-*`Pt4WSmgucJv zV1yFkcjlEM^uz-;b#Q7ZCP@Lk)m}uPX={R4B=56k7WNh11BN~0T*vr@!!ow^B0hOR zQ)4)&(e%>bNNL%bm<&8H{*l_L7s0$2GUgX2Vd;=4d9Dm2v3TaL+;L>{K7h7 zV#k?xDPm(NDE31$ z<}|X)pEY6myjK+^gaIMk&Yj2~F0rSKemNqlsVm4c|N7mp_C*L01s;GNx#D-*&gk!qQr}^?_r@q!8fuXw!)fA7xkd} zb>vHvdx~H$5qqAWrow7}+8zBM65-JOt5z za=T6f7MK`XJuQog8kIEboPdhcaVJeHy)5z7EBLK5NRr()E|#K0L0N^JD@pUA^Czb` zbUZ_558y+vqAGeyHCbrvOvLD67Ph}06959VzQ_|>RrXQAqE+AQ(-AaKdxoWaF8hdt z{O3W@b^*o#-f1VuU>YMV03ELF7zkCN4Q&b#prz%3Nne0lSbRo@@ z^ihv%oIl~Qyl6Q;a#$*jOC%x0_;eis*)J7=f@Ct*)xF5 zo}u~@-I}2|$b%5L7>@+Z?4o+1r&v6ceIy+vroK&jCQ<4q&45HP2wCol4hVm3pZtjf zHz1D7oyaSKJ~T{Gx}7ONLA)D5k(%%`WswrDyzX*rn}i}}TB4^y#@mAwPzoC)`?rYv zHgx|trUN#mu*VzUV~8TnJM2Qh*ZM5B{x&y>5An`(M7=Z*Q>TdiH@j*2=moNuOtvpz z+G`@~-`%~+AgPKgke@XiRPgndh@bp*-HRsh;HTtz@-y_uhb%7ylVOTqG0#u?Vn5c5 zEp*XRo|8hcgG^$#{$O9CJ&NE;TrfRpSnLmes&MO{m=N%zc`}gb!eQ7odl$oy1%PI} z#AIxx%oRVy&{O~9xnK4$EY>(eQj}!HKIV$Fz*H=-=Kn)N0D6u`(;iO|VraI4fu_W` z;b5{7;Lyx4za}DU#+U7}=H0dAS#YJJ&g2!P@Htu-AL&w=-)*%P9h2{wR|@?Ff9~)b z^+e_3Hetq7W%ls{!?<6&Y$Z;NNB41pvrv)|MET6AZXFXJeFqbFW5@i5WGzl?bP+~? z*&_puH;wKv2)9T_d+P`bLvJFqX#j&xa*-;0nGBbQf0DC>o~=J_Wmtf*2SZQr?{i~X z9-IbRH8{iy?<0v9Ir1?$66+igy|yDQ5J~A9sFX@Pe<*kCY8+MwH?I z`P}zfQ6l^AO8ehZ=l^ZR;R%uu4;BK*=?W9t|0{+-at(MQZ(CtG=EJFNaFMlKCMXu30(gJUqj5+ z`GM|!keqcj;FKTa_qq;{*dHRXAq157hlB@kL#8%yAm2AgfU|*rDKX@FLlp=HL8ddv zAWLCHe@DcDeB2}fl7#=0+#<05c3=VqM*O3bkr@9X4nO|)q0hU;Gye{L8ZN*NH8Id@mP-u;Fmb8YuorjLrW&ndip8CN%_qp982r w1WEnz9^$&s1hkp_3#lPJQ~!HI7WYYjA7>z!`?f%npAh2%rB@vD|Lau$2O)#1n*aa+ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 84d1f85fd..00e33edef 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.4.1-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew index c53aefaa5..1b6c78733 100755 --- a/gradlew +++ b/gradlew @@ -1,7 +1,7 @@ #!/bin/sh # -# Copyright © 2015-2021 the original authors. +# Copyright © 2015-2021 the original authors. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -32,10 +32,10 @@ # Busybox and similar reduced shells will NOT work, because this script # requires all of these POSIX shell features: # * functions; -# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», -# «${var#prefix}», «${var%suffix}», and «$( cmd )»; -# * compound commands having a testable exit status, especially «case»; -# * various built-in commands including «command», «set», and «ulimit». +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». # # Important for patching: # diff --git a/src/main/java/com/simibubi/create/AllItems.java b/src/main/java/com/simibubi/create/AllItems.java index 9e7ae4cad..03c4a9785 100644 --- a/src/main/java/com/simibubi/create/AllItems.java +++ b/src/main/java/com/simibubi/create/AllItems.java @@ -253,7 +253,7 @@ public class AllItems { public static final ItemEntry COPPER_BACKTANK = REGISTRATE.item("copper_backtank", p -> new CopperBacktankItem(p, COPPER_BACKTANK_PLACEABLE)) - .model(AssetLookup.customGenericItemModel("_", "item")) + .model(AssetLookup.customGenericItemModel("_", "item")) .register(), DIVING_HELMET = REGISTRATE.item("diving_helmet", DivingHelmetItem::new) diff --git a/src/main/java/com/simibubi/create/AllMovementBehaviours.java b/src/main/java/com/simibubi/create/AllMovementBehaviours.java index 857ea7ab4..03cd553c3 100644 --- a/src/main/java/com/simibubi/create/AllMovementBehaviours.java +++ b/src/main/java/com/simibubi/create/AllMovementBehaviours.java @@ -57,7 +57,7 @@ public class AllMovementBehaviours { addMovementBehaviour(Blocks.BELL, new BellMovementBehaviour()); addMovementBehaviour(Blocks.CAMPFIRE, new CampfireMovementBehaviour()); - DispenserMovementBehaviour.gatherMovedDispenseItemBehaviours(); + DispenserMovementBehaviour.gatherMovedDispenseItemBehaviours(); addMovementBehaviour(Blocks.DISPENSER, new DispenserMovementBehaviour()); addMovementBehaviour(Blocks.DROPPER, new DropperMovementBehaviour()); } diff --git a/src/main/java/com/simibubi/create/AllTags.java b/src/main/java/com/simibubi/create/AllTags.java index b13bace98..9a0536f1e 100644 --- a/src/main/java/com/simibubi/create/AllTags.java +++ b/src/main/java/com/simibubi/create/AllTags.java @@ -5,7 +5,6 @@ import static com.simibubi.create.AllTags.NameSpace.MOD; import static com.simibubi.create.AllTags.NameSpace.TIC; import java.util.Collections; -import java.util.function.Function; import com.simibubi.create.foundation.data.CreateRegistrate; import com.simibubi.create.foundation.utility.Lang; @@ -16,6 +15,8 @@ import com.tterrag.registrate.util.nullness.NonNullFunction; import net.minecraft.resources.ResourceLocation; import net.minecraft.tags.BlockTags; +import net.minecraft.tags.FluidTags; +import net.minecraft.tags.ItemTags; import net.minecraft.tags.TagKey; import net.minecraft.world.item.BlockItem; import net.minecraft.world.item.Item; @@ -25,37 +26,36 @@ import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.material.Fluid; +import net.minecraft.world.level.material.FluidState; import net.minecraft.world.level.material.Fluids; import net.minecraftforge.common.Tags; import net.minecraftforge.registries.ForgeRegistries; +import net.minecraftforge.registries.IForgeRegistry; +import net.minecraftforge.registries.IForgeRegistryEntry; public class AllTags { private static final CreateRegistrate REGISTRATE = Create.registrate() .creativeModeTab(() -> Create.BASE_CREATIVE_TAB); - public static TagKey tag(Function> wrapperFactory, String namespace, - String path) { - return wrapperFactory.apply(new ResourceLocation(namespace, path)); + public static > TagKey optionalTag(IForgeRegistry registry, ResourceLocation id) { + return registry.tags().createOptionalTagKey(id, Collections.emptySet()); } - public static TagKey forgeTag(Function> wrapperFactory, String path) { - return tag(wrapperFactory, "forge", path); + public static > TagKey forgeTag(IForgeRegistry registry, String path) { + return optionalTag(registry, new ResourceLocation("forge", path)); } public static TagKey forgeBlockTag(String path) { - return forgeTag(r -> ForgeRegistries.BLOCKS.tags() - .createOptionalTagKey(r, Collections.emptySet()), path); + return forgeTag(ForgeRegistries.BLOCKS, path); } public static TagKey forgeItemTag(String path) { - return forgeTag(r -> ForgeRegistries.ITEMS.tags() - .createOptionalTagKey(r, Collections.emptySet()), path); + return forgeTag(ForgeRegistries.ITEMS, path); } public static TagKey forgeFluidTag(String path) { - return forgeTag(r -> ForgeRegistries.FLUIDS.tags() - .createOptionalTagKey(r, Collections.emptySet()), path); + return forgeTag(ForgeRegistries.FLUIDS, path); } public static NonNullFunction, BlockBuilder> axeOrPickaxe() { @@ -85,7 +85,9 @@ public class AllTags { public enum NameSpace { - MOD(Create.ID, false, true), FORGE("forge"), TIC("tconstruct") + MOD(Create.ID, false, true), + FORGE("forge"), + TIC("tconstruct") ; @@ -119,8 +121,8 @@ public class AllTags { WINDOWABLE, WRENCH_PICKUP, - WG_STONE(FORGE), RELOCATION_NOT_SUPPORTED(FORGE), + WG_STONE(FORGE), SLIMY_LOGS(TIC), @@ -147,24 +149,22 @@ public class AllTags { AllBlockTags(NameSpace namespace, String path, boolean optional, boolean alwaysDatagen) { ResourceLocation id = new ResourceLocation(namespace.id, path == null ? Lang.asId(name()) : path); if (optional) { - tag = ForgeRegistries.BLOCKS.tags() - .createOptionalTagKey(id, Collections.emptySet()); + tag = optionalTag(ForgeRegistries.BLOCKS, id); } else { - tag = TagKey.create(ForgeRegistries.BLOCKS.getRegistryKey(), id); + tag = BlockTags.create(id); } if (alwaysDatagen) { REGISTRATE.addDataGenerator(ProviderType.BLOCK_TAGS, prov -> prov.tag(tag)); } } + @SuppressWarnings("deprecation") public boolean matches(Block block) { - return ForgeRegistries.BLOCKS.getHolder(block) - .map(h -> h.containsTag(tag)) - .orElse(false); + return block.builtInRegistryHolder().is(tag); } public boolean matches(BlockState state) { - return matches(state.getBlock()); + return state.is(tag); } public void add(Block... values) { @@ -226,20 +226,22 @@ public class AllTags { AllItemTags(NameSpace namespace, String path, boolean optional, boolean alwaysDatagen) { ResourceLocation id = new ResourceLocation(namespace.id, path == null ? Lang.asId(name()) : path); if (optional) { - tag = ForgeRegistries.ITEMS.tags() - .createOptionalTagKey(id, Collections.emptySet()); + tag = optionalTag(ForgeRegistries.ITEMS, id); } else { - tag = TagKey.create(ForgeRegistries.ITEMS.getRegistryKey(), id); + tag = ItemTags.create(id); } if (alwaysDatagen) { REGISTRATE.addDataGenerator(ProviderType.ITEM_TAGS, prov -> prov.tag(tag)); } } + @SuppressWarnings("deprecation") + public boolean matches(Item item) { + return item.builtInRegistryHolder().is(tag); + } + public boolean matches(ItemStack stack) { - return ForgeRegistries.ITEMS.getHolder(stack.getItem()) - .map(h -> h.containsTag(tag)) - .orElse(false); + return stack.is(tag); } public void add(Item... values) { @@ -293,19 +295,22 @@ public class AllTags { AllFluidTags(NameSpace namespace, String path, boolean optional, boolean alwaysDatagen) { ResourceLocation id = new ResourceLocation(namespace.id, path == null ? Lang.asId(name()) : path); if (optional) { - tag = ForgeRegistries.FLUIDS.tags() - .createOptionalTagKey(id, Collections.emptySet()); + tag = optionalTag(ForgeRegistries.FLUIDS, id); } else { - tag = TagKey.create(ForgeRegistries.FLUIDS.getRegistryKey(), id); + tag = FluidTags.create(id); } - if (alwaysDatagen) + if (alwaysDatagen) { REGISTRATE.addDataGenerator(ProviderType.FLUID_TAGS, prov -> prov.tag(tag)); + } } + @SuppressWarnings("deprecation") public boolean matches(Fluid fluid) { - return fluid != null && ForgeRegistries.FLUIDS.getHolder(fluid) - .map(h -> h.containsTag(tag)) - .orElse(false); + return fluid.is(tag); + } + + public boolean matches(FluidState state) { + return state.is(tag); } public void add(Fluid... values) { diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/BellMovementBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/BellMovementBehaviour.java index dc1e5cc4b..056929ba4 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/actors/BellMovementBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/BellMovementBehaviour.java @@ -11,7 +11,7 @@ import net.minecraft.world.level.Level; import net.minecraft.world.level.block.Block; import net.minecraft.world.phys.Vec3; -public class BellMovementBehaviour extends MovementBehaviour { +public class BellMovementBehaviour implements MovementBehaviour { @Override public boolean renderAsNormalTileEntity() { diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/BlockBreakingMovementBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/BlockBreakingMovementBehaviour.java index f567aee19..0b6c18dd5 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/actors/BlockBreakingMovementBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/BlockBreakingMovementBehaviour.java @@ -21,7 +21,7 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.Vec3; -public class BlockBreakingMovementBehaviour extends MovementBehaviour { +public class BlockBreakingMovementBehaviour implements MovementBehaviour { @Override public void startMoving(MovementContext context) { diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/CampfireMovementBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/CampfireMovementBehaviour.java index 54f1fd342..a107be587 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/actors/CampfireMovementBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/CampfireMovementBehaviour.java @@ -8,7 +8,7 @@ import com.simibubi.create.content.contraptions.components.structureMovement.Mov import net.minecraft.core.particles.ParticleTypes; import net.minecraft.world.level.block.CampfireBlock; -public class CampfireMovementBehaviour extends MovementBehaviour { +public class CampfireMovementBehaviour implements MovementBehaviour { @Override public boolean renderAsNormalTileEntity() { return true; diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/HarvesterMovementBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/HarvesterMovementBehaviour.java index 1140900f2..9d37b474d 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/actors/HarvesterMovementBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/HarvesterMovementBehaviour.java @@ -35,7 +35,7 @@ import net.minecraft.world.level.block.state.properties.Property; import net.minecraft.world.phys.Vec3; import net.minecraftforge.common.IPlantable; -public class HarvesterMovementBehaviour extends MovementBehaviour { +public class HarvesterMovementBehaviour implements MovementBehaviour { @Override public boolean isActive(MovementContext context) { diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/PortableStorageInterfaceMovement.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/PortableStorageInterfaceMovement.java index 647f5bf37..b04b03cfe 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/actors/PortableStorageInterfaceMovement.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/PortableStorageInterfaceMovement.java @@ -24,7 +24,7 @@ import net.minecraft.world.phys.Vec3; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; -public class PortableStorageInterfaceMovement extends MovementBehaviour { +public class PortableStorageInterfaceMovement implements MovementBehaviour { static final String _workingPos_ = "WorkingPos"; static final String _clientPrevPos_ = "ClientPrevPos"; diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/SeatMovementBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/SeatMovementBehaviour.java index 9e1c4b40e..e2631c473 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/actors/SeatMovementBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/SeatMovementBehaviour.java @@ -17,11 +17,11 @@ import net.minecraft.world.level.block.state.properties.SlabType; import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.Vec3; -public class SeatMovementBehaviour extends MovementBehaviour { +public class SeatMovementBehaviour implements MovementBehaviour { @Override public void startMoving(MovementContext context) { - super.startMoving(context); + MovementBehaviour.super.startMoving(context); int indexOf = context.contraption.getSeats() .indexOf(context.localPos); context.data.putInt("SeatIndex", indexOf); @@ -29,7 +29,7 @@ public class SeatMovementBehaviour extends MovementBehaviour { @Override public void visitNewPosition(MovementContext context, BlockPos pos) { - super.visitNewPosition(context, pos); + MovementBehaviour.super.visitNewPosition(context, pos); AbstractContraptionEntity contraptionEntity = context.contraption.entity; if (contraptionEntity == null) diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/DispenserMovementBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/DispenserMovementBehaviour.java index 48bbc0caf..8ca9d9684 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/DispenserMovementBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/DispenserMovementBehaviour.java @@ -19,7 +19,7 @@ import net.minecraft.world.phys.Vec3; public class DispenserMovementBehaviour extends DropperMovementBehaviour { private static final HashMap MOVED_DISPENSE_ITEM_BEHAVIOURS = new HashMap<>(); private static final HashMap MOVED_PROJECTILE_DISPENSE_BEHAVIOURS = new HashMap<>(); - private static boolean spawneggsRegistered = false; + private static boolean spawnEggsRegistered = false; public static void gatherMovedDispenseItemBehaviours() { IMovedDispenseItemBehaviour.init(); @@ -36,35 +36,35 @@ public class DispenserMovementBehaviour extends DropperMovementBehaviour { @Override protected void activate(MovementContext context, BlockPos pos) { - if (!spawneggsRegistered) { - spawneggsRegistered = true; - IMovedDispenseItemBehaviour.initSpawneggs(); + if (!spawnEggsRegistered) { + spawnEggsRegistered = true; + IMovedDispenseItemBehaviour.initSpawnEggs(); } - + DispenseItemLocation location = getDispenseLocation(context); if (location.isEmpty()) { context.world.levelEvent(1001, pos, 0); } else { - ItemStack itemstack = getItemStackAt(location, context); + ItemStack itemStack = getItemStackAt(location, context); // Special dispense item behaviour for moving contraptions - if (MOVED_DISPENSE_ITEM_BEHAVIOURS.containsKey(itemstack.getItem())) { - setItemStackAt(location, MOVED_DISPENSE_ITEM_BEHAVIOURS.get(itemstack.getItem()).dispense(itemstack, context, pos), context); + if (MOVED_DISPENSE_ITEM_BEHAVIOURS.containsKey(itemStack.getItem())) { + setItemStackAt(location, MOVED_DISPENSE_ITEM_BEHAVIOURS.get(itemStack.getItem()).dispense(itemStack, context, pos), context); return; } - ItemStack backup = itemstack.copy(); + ItemStack backup = itemStack.copy(); // If none is there, try vanilla registry try { - if (MOVED_PROJECTILE_DISPENSE_BEHAVIOURS.containsKey(itemstack.getItem())) { - setItemStackAt(location, MOVED_PROJECTILE_DISPENSE_BEHAVIOURS.get(itemstack.getItem()).dispense(itemstack, context, pos), context); + if (MOVED_PROJECTILE_DISPENSE_BEHAVIOURS.containsKey(itemStack.getItem())) { + setItemStackAt(location, MOVED_PROJECTILE_DISPENSE_BEHAVIOURS.get(itemStack.getItem()).dispense(itemStack, context, pos), context); return; } - DispenseItemBehavior idispenseitembehavior = getDispenseMethod(itemstack); - if (idispenseitembehavior instanceof AbstractProjectileDispenseBehavior) { // Projectile behaviours can be converted most of the time - IMovedDispenseItemBehaviour iMovedDispenseItemBehaviour = MovedProjectileDispenserBehaviour.of((AbstractProjectileDispenseBehavior) idispenseitembehavior); - setItemStackAt(location, iMovedDispenseItemBehaviour.dispense(itemstack, context, pos), context); - MOVED_PROJECTILE_DISPENSE_BEHAVIOURS.put(itemstack.getItem(), iMovedDispenseItemBehaviour); // buffer conversion if successful + DispenseItemBehavior behavior = getDispenseMethod(itemStack); + if (behavior instanceof AbstractProjectileDispenseBehavior) { // Projectile behaviours can be converted most of the time + IMovedDispenseItemBehaviour movedBehaviour = MovedProjectileDispenserBehaviour.of((AbstractProjectileDispenseBehavior) behavior); + setItemStackAt(location, movedBehaviour.dispense(itemStack, context, pos), context); + MOVED_PROJECTILE_DISPENSE_BEHAVIOURS.put(itemStack.getItem(), movedBehaviour); // buffer conversion if successful return; } @@ -74,15 +74,15 @@ public class DispenserMovementBehaviour extends DropperMovementBehaviour { Direction clostestFacing = Direction.getNearest(facingVec.x, facingVec.y, facingVec.z); ContraptionBlockSource blockSource = new ContraptionBlockSource(context, pos, clostestFacing); - if (idispenseitembehavior.getClass() != DefaultDispenseItemBehavior.class) { // There is a dispense item behaviour registered for the vanilla dispenser - setItemStackAt(location, idispenseitembehavior.dispense(blockSource, itemstack), context); + if (behavior.getClass() != DefaultDispenseItemBehavior.class) { // There is a dispense item behaviour registered for the vanilla dispenser + setItemStackAt(location, behavior.dispense(blockSource, itemStack), context); return; } } catch (NullPointerException ignored) { - itemstack = backup; // Something went wrong with the TE being null in ContraptionBlockSource, reset the stack + itemStack = backup; // Something went wrong with the TE being null in ContraptionBlockSource, reset the stack } - setItemStackAt(location, defaultBehaviour.dispense(itemstack, context, pos), context); // the default: launch the item + setItemStackAt(location, DEFAULT_BEHAVIOUR.dispense(itemStack, context, pos), context); // the default: launch the item } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/DropperMovementBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/DropperMovementBehaviour.java index f7a710d0e..9e28bce93 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/DropperMovementBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/DropperMovementBehaviour.java @@ -14,8 +14,8 @@ import net.minecraft.world.ContainerHelper; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; -public class DropperMovementBehaviour extends MovementBehaviour { - protected static final MovedDefaultDispenseItemBehaviour defaultBehaviour = new MovedDefaultDispenseItemBehaviour(); +public class DropperMovementBehaviour implements MovementBehaviour { + protected static final MovedDefaultDispenseItemBehaviour DEFAULT_BEHAVIOUR = new MovedDefaultDispenseItemBehaviour(); private static final Random RNG = new Random(); protected void activate(MovementContext context, BlockPos pos) { @@ -23,7 +23,7 @@ public class DropperMovementBehaviour extends MovementBehaviour { if (location.isEmpty()) { context.world.levelEvent(1001, pos, 0); } else { - setItemStackAt(location, defaultBehaviour.dispense(getItemStackAt(location, context), context, pos), context); + setItemStackAt(location, DEFAULT_BEHAVIOUR.dispense(getItemStackAt(location, context), context, pos), context); } } @@ -81,7 +81,7 @@ public class DropperMovementBehaviour extends MovementBehaviour { @Override public void stopMoving(MovementContext context) { - super.stopMoving(context); + MovementBehaviour.super.stopMoving(context); writeExtraData(context); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/IMovedDispenseItemBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/IMovedDispenseItemBehaviour.java index f73fdee8e..7143b9a05 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/IMovedDispenseItemBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/IMovedDispenseItemBehaviour.java @@ -35,7 +35,7 @@ import net.minecraft.world.phys.Vec3; public interface IMovedDispenseItemBehaviour { - static void initSpawneggs() { + static void initSpawnEggs() { final IMovedDispenseItemBehaviour spawnEggDispenseBehaviour = new MovedDefaultDispenseItemBehaviour() { @Override protected ItemStack dispenseStack(ItemStack itemStack, MovementContext context, BlockPos pos, Vec3 facing) { diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/MovedDefaultDispenseItemBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/MovedDefaultDispenseItemBehaviour.java index a4f4c475d..d81a88c44 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/MovedDefaultDispenseItemBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/MovedDefaultDispenseItemBehaviour.java @@ -15,7 +15,7 @@ import net.minecraft.world.phys.Vec3; import net.minecraftforge.items.ItemHandlerHelper; public class MovedDefaultDispenseItemBehaviour implements IMovedDispenseItemBehaviour { - private static final MovedDefaultDispenseItemBehaviour defaultInstance = new MovedDefaultDispenseItemBehaviour(); + private static final MovedDefaultDispenseItemBehaviour DEFAULT_INSTANCE = new MovedDefaultDispenseItemBehaviour(); public static void doDispense(Level p_82486_0_, ItemStack p_82486_1_, int p_82486_2_, Vec3 facing, BlockPos p_82486_4_, MovementContext context) { double d0 = p_82486_4_.getX() + facing.x + .5; @@ -87,7 +87,7 @@ public class MovedDefaultDispenseItemBehaviour implements IMovedDispenseItemBeha consumedFrom.shrink(1); ItemStack remainder = ItemHandlerHelper.insertItem(context.contraption.inventory, output.copy(), false); if (!remainder.isEmpty()) - defaultInstance.dispenseStack(output, context, pos, facing); + DEFAULT_INSTANCE.dispenseStack(output, context, pos, facing); return consumedFrom; } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/crusher/CrushingWheelControllerTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/crusher/CrushingWheelControllerTileEntity.java index 36ab77f47..120001d63 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/crusher/CrushingWheelControllerTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/crusher/CrushingWheelControllerTileEntity.java @@ -145,20 +145,19 @@ public class CrushingWheelControllerTileEntity extends SmartTileEntity { // Output Items if (facing != Direction.UP) { - Direction inputDir = facing; BlockPos nextPos = worldPosition.offset(facing.getAxis() == Axis.X ? 1f * offset : 0f, (-1f), facing.getAxis() == Axis.Z ? 1f * offset : 0f); DirectBeltInputBehaviour behaviour = TileEntityBehaviour.get(level, nextPos, DirectBeltInputBehaviour.TYPE); if (behaviour != null) { boolean changed = false; - if (!behaviour.canInsertFromSide(inputDir)) + if (!behaviour.canInsertFromSide(facing)) return; for (int slot = 0; slot < inventory.getSlots(); slot++) { ItemStack stack = inventory.getStackInSlot(slot); if (stack.isEmpty()) continue; - ItemStack remainder = behaviour.handleInsertion(stack, inputDir, false); + ItemStack remainder = behaviour.handleInsertion(stack, facing, false); if (remainder.equals(stack, false)) continue; inventory.setStackInSlot(slot, remainder); diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerMovementBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerMovementBehaviour.java index 92e302c8e..45d47c096 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerMovementBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerMovementBehaviour.java @@ -47,7 +47,7 @@ import net.minecraftforge.common.util.BlockSnapshot; import net.minecraftforge.event.ForgeEventFactory; import net.minecraftforge.items.IItemHandler; -public class DeployerMovementBehaviour extends MovementBehaviour { +public class DeployerMovementBehaviour implements MovementBehaviour { @Override public Vec3 getActiveAreaOffset(MovementContext context) { diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/fan/EncasedFanTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/fan/EncasedFanTileEntity.java index 670ecdbac..540952db0 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/fan/EncasedFanTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/fan/EncasedFanTileEntity.java @@ -96,7 +96,7 @@ public class EncasedFanTileEntity extends GeneratingKineticTileEntity implements return false; BlockState checkState = level.getBlockState(worldPosition.below()); - if (!checkState.is(AllBlockTags.FAN_HEATERS.tag)) + if (!AllBlockTags.FAN_HEATERS.matches(checkState)) return false; if (checkState.hasProperty(BlazeBurnerBlock.HEAT_LEVEL) && !checkState.getValue(BlazeBurnerBlock.HEAT_LEVEL) diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/BlockMovementChecks.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/BlockMovementChecks.java index 66d7b09a1..1e9819474 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/BlockMovementChecks.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/BlockMovementChecks.java @@ -252,7 +252,7 @@ public class BlockMovementChecks { return true; if (block instanceof WoolCarpetBlock) return true; - return AllBlockTags.BRITTLE.matches(block); + return AllBlockTags.BRITTLE.matches(state); } private static boolean isBlockAttachedTowardsFallback(BlockState state, Level world, BlockPos pos, diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/MovementBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/MovementBehaviour.java index 21a3db6ee..1d2a3445e 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/MovementBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/MovementBehaviour.java @@ -17,23 +17,26 @@ import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.items.ItemHandlerHelper; -public abstract class MovementBehaviour { +public interface MovementBehaviour { - public boolean isActive(MovementContext context) { + default boolean isActive(MovementContext context) { return true; } - public void tick(MovementContext context) {} + default void tick(MovementContext context) { + } - public void startMoving(MovementContext context) {} + default void startMoving(MovementContext context) { + } - public void visitNewPosition(MovementContext context, BlockPos pos) {} + default void visitNewPosition(MovementContext context, BlockPos pos) { + } - public Vec3 getActiveAreaOffset(MovementContext context) { + default Vec3 getActiveAreaOffset(MovementContext context) { return Vec3.ZERO; } - public void dropItem(MovementContext context, ItemStack stack) { + default void dropItem(MovementContext context, ItemStack stack) { ItemStack remainder; if (AllConfigs.SERVER.kinetics.moveItemsToStorage.get()) remainder = ItemHandlerHelper.insertItem(context.contraption.inventory, stack, false); @@ -49,32 +52,31 @@ public abstract class MovementBehaviour { context.world.addFreshEntity(itemEntity); } - public void stopMoving(MovementContext context) { - + default void onSpeedChanged(MovementContext context, Vec3 oldMotion, Vec3 motion) { } - public void writeExtraData(MovementContext context) { - + default void stopMoving(MovementContext context) { } - public boolean renderAsNormalTileEntity() { + default void writeExtraData(MovementContext context) { + } + + default boolean renderAsNormalTileEntity() { return false; } - public boolean hasSpecialInstancedRendering() { + default boolean hasSpecialInstancedRendering() { return false; } @OnlyIn(Dist.CLIENT) - public void renderInContraption(MovementContext context, VirtualRenderWorld renderWorld, - ContraptionMatrices matrices, MultiBufferSource buffer) {} + default void renderInContraption(MovementContext context, VirtualRenderWorld renderWorld, + ContraptionMatrices matrices, MultiBufferSource buffer) { + } @OnlyIn(Dist.CLIENT) @Nullable - public ActorInstance createInstance(MaterialManager materialManager, VirtualRenderWorld simulationWorld, MovementContext context) { + default ActorInstance createInstance(MaterialManager materialManager, VirtualRenderWorld simulationWorld, MovementContext context) { return null; } - - public void onSpeedChanged(MovementContext context, Vec3 oldMotion, Vec3 motion) { - } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/StabilizedBearingMovementBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/StabilizedBearingMovementBehaviour.java index feb82bd90..c912fc053 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/StabilizedBearingMovementBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/StabilizedBearingMovementBehaviour.java @@ -28,7 +28,7 @@ import net.minecraft.world.level.block.state.properties.BlockStateProperties; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; -public class StabilizedBearingMovementBehaviour extends MovementBehaviour { +public class StabilizedBearingMovementBehaviour implements MovementBehaviour { @Override @OnlyIn(Dist.CLIENT) diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankModel.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankModel.java index e9328c4cc..34a326704 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankModel.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankModel.java @@ -23,7 +23,7 @@ import net.minecraftforge.client.model.data.ModelProperty; public class FluidTankModel extends CTModel { - protected static ModelProperty CULL_PROPERTY = new ModelProperty<>(); + protected static final ModelProperty CULL_PROPERTY = new ModelProperty<>(); public static FluidTankModel standard(BakedModel originalModel) { return new FluidTankModel(originalModel, AllSpriteShifts.FLUID_TANK, AllSpriteShifts.COPPER_CASING); diff --git a/src/main/java/com/simibubi/create/content/contraptions/processing/BasinMovementBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/processing/BasinMovementBehaviour.java index 117cac968..3d590017a 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/processing/BasinMovementBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/processing/BasinMovementBehaviour.java @@ -13,7 +13,7 @@ import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.phys.Vec3; import net.minecraftforge.items.ItemStackHandler; -public class BasinMovementBehaviour extends MovementBehaviour { +public class BasinMovementBehaviour implements MovementBehaviour { public Map getOrReadInventory(MovementContext context) { Map map = new HashMap<>(); map.put("InputItems", new ItemStackHandler(9)); @@ -29,7 +29,7 @@ public class BasinMovementBehaviour extends MovementBehaviour { @Override public void tick(MovementContext context) { - super.tick(context); + MovementBehaviour.super.tick(context); if (context.temporaryData == null || (boolean) context.temporaryData) { Vec3 facingVec = context.rotation.apply(Vec3.atLowerCornerOf(Direction.UP.getNormal())); facingVec.normalize(); diff --git a/src/main/java/com/simibubi/create/content/contraptions/processing/InWorldProcessing.java b/src/main/java/com/simibubi/create/content/contraptions/processing/InWorldProcessing.java index 1d46c76b0..dc8899c45 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/processing/InWorldProcessing.java +++ b/src/main/java/com/simibubi/create/content/contraptions/processing/InWorldProcessing.java @@ -56,7 +56,6 @@ import net.minecraft.world.phys.Vec3; import net.minecraftforge.items.ItemHandlerHelper; import net.minecraftforge.items.ItemStackHandler; import net.minecraftforge.items.wrapper.RecipeWrapper; -import net.minecraftforge.registries.ForgeRegistries; public class InWorldProcessing { @@ -473,9 +472,7 @@ public class InWorldProcessing { .map(flame -> flame == LitBlazeBurnerBlock.FlameType.SOUL) .orElse(false)) return Type.HAUNTING; - if (block == Blocks.FIRE || ForgeRegistries.BLOCKS.getHolder(block) - .map(h -> h.containsTag(BlockTags.CAMPFIRES)) - .orElse(false) + if (block == Blocks.FIRE || blockState.is(BlockTags.CAMPFIRES) && blockState.getOptionalValue(CampfireBlock.LIT) .orElse(false) || AllBlocks.LIT_BLAZE_BURNER.has(blockState) diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltBlock.java b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltBlock.java index 020711c3b..09b4cec8d 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltBlock.java @@ -82,7 +82,6 @@ import net.minecraftforge.client.IBlockRenderProperties; import net.minecraftforge.common.Tags; import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.IItemHandler; -import net.minecraftforge.registries.ForgeRegistries; public class BeltBlock extends HorizontalKineticBlock implements ITE, ISpecialBlockItemRequirement { @@ -251,9 +250,7 @@ public class BeltBlock extends HorizontalKineticBlock implements ITE h.containsTag(Tags.Items.DYES)) - .orElse(false); + boolean isDye = heldItem.is(Tags.Items.DYES); boolean hasWater = EmptyingByBasin.emptyItem(world, heldItem, true) .getFirst() .getFluid() diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltHelper.java b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltHelper.java index 09f9ad254..baec3ff7f 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltHelper.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltHelper.java @@ -17,7 +17,7 @@ public class BeltHelper { public static boolean isItemUpright(ItemStack stack) { return stack.getCapability(CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY) - .isPresent() || stack.is(AllItemTags.UPRIGHT_ON_BELT.tag); + .isPresent() || AllItemTags.UPRIGHT_ON_BELT.matches(stack); } public static BeltTileEntity getSegmentTE(LevelAccessor world, BlockPos pos) { diff --git a/src/main/java/com/simibubi/create/content/curiosities/bell/BasicParticleData.java b/src/main/java/com/simibubi/create/content/curiosities/bell/BasicParticleData.java index c4ea97fb2..d4cad8071 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/bell/BasicParticleData.java +++ b/src/main/java/com/simibubi/create/content/curiosities/bell/BasicParticleData.java @@ -11,12 +11,12 @@ import net.minecraft.client.multiplayer.ClientLevel; import net.minecraft.client.particle.Particle; import net.minecraft.client.particle.ParticleEngine; import net.minecraft.client.particle.SpriteSet; -import net.minecraft.core.Registry; import net.minecraft.core.particles.ParticleOptions; import net.minecraft.core.particles.ParticleType; import net.minecraft.network.FriendlyByteBuf; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.registries.ForgeRegistries; @ParametersAreNonnullByDefault @MethodsReturnNonnullByDefault @@ -61,7 +61,7 @@ public abstract class BasicParticleData implements ParticleO @Override public String writeToString() { - return Registry.PARTICLE_TYPE.getKey(getType()).toString(); + return ForgeRegistries.PARTICLE_TYPES.getKey(getType()).toString(); } @Override diff --git a/src/main/java/com/simibubi/create/content/curiosities/tools/BlueprintItem.java b/src/main/java/com/simibubi/create/content/curiosities/tools/BlueprintItem.java index a6175d379..0b278081c 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/tools/BlueprintItem.java +++ b/src/main/java/com/simibubi/create/content/curiosities/tools/BlueprintItem.java @@ -13,6 +13,7 @@ import net.minecraft.core.NonNullList; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.ListTag; import net.minecraft.resources.ResourceLocation; +import net.minecraft.tags.ItemTags; import net.minecraft.util.GsonHelper; import net.minecraft.world.InteractionResult; import net.minecraft.world.entity.EntityType; @@ -121,7 +122,7 @@ public class BlueprintItem extends Item { filterItem.getOrCreateTag() .putInt("WhitelistMode", WhitelistMode.WHITELIST_DISJ.ordinal()); ListTag attributes = new ListTag(); - ItemAttribute at = new ItemAttribute.InTag(resourcelocation); + ItemAttribute at = new ItemAttribute.InTag(ItemTags.create(resourcelocation)); CompoundTag compoundNBT = new CompoundTag(); at.serializeNBT(compoundNBT); compoundNBT.putBoolean("Inverted", false); diff --git a/src/main/java/com/simibubi/create/content/curiosities/tools/BlueprintOverlayRenderer.java b/src/main/java/com/simibubi/create/content/curiosities/tools/BlueprintOverlayRenderer.java index d70bb9f19..2b4333a9a 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/tools/BlueprintOverlayRenderer.java +++ b/src/main/java/com/simibubi/create/content/curiosities/tools/BlueprintOverlayRenderer.java @@ -24,13 +24,11 @@ import net.minecraft.ChatFormatting; import net.minecraft.client.Minecraft; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.ListTag; -import net.minecraft.tags.TagKey; import net.minecraft.world.inventory.CraftingContainer; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.item.crafting.CraftingRecipe; -import net.minecraft.world.item.crafting.Ingredient; import net.minecraft.world.item.crafting.RecipeType; import net.minecraft.world.phys.EntityHitResult; import net.minecraft.world.phys.HitResult; @@ -40,6 +38,8 @@ import net.minecraftforge.client.gui.IIngameOverlay; import net.minecraftforge.items.ItemHandlerHelper; import net.minecraftforge.items.ItemStackHandler; import net.minecraftforge.registries.ForgeRegistries; +import net.minecraftforge.registries.tags.ITag; +import net.minecraftforge.registries.tags.ITagManager; public class BlueprintOverlayRenderer { @@ -278,17 +278,20 @@ public class BlueprintOverlayRenderer { ListTag attributes = tag.getList("MatchedAttributes", net.minecraft.nbt.Tag.TAG_COMPOUND); if (whitelistMode == WhitelistMode.WHITELIST_DISJ && attributes.size() == 1) { ItemAttribute fromNBT = ItemAttribute.fromNBT((CompoundTag) attributes.get(0)); - if (fromNBT instanceof ItemAttribute.InTag) { - ItemAttribute.InTag inTag = (ItemAttribute.InTag) fromNBT; - TagKey itag = ForgeRegistries.ITEMS.tags() - .getTagNames() - .filter(tk -> tk.location() - .equals(inTag.tagName)) - .findAny() - .orElse(null); - if (itag != null) - return Ingredient.of(itag) - .getItems(); + if (fromNBT instanceof ItemAttribute.InTag inTag) { + ITagManager tagManager = ForgeRegistries.ITEMS.tags(); + if (tagManager.isKnownTagName(inTag.tag)) { + ITag taggedItems = tagManager.getTag(inTag.tag); + if (!taggedItems.isEmpty()) { + ItemStack[] stacks = new ItemStack[taggedItems.size()]; + int i = 0; + for (Item item : taggedItems) { + stacks[i] = new ItemStack(item); + i++; + } + return stacks; + } + } } } } diff --git a/src/main/java/com/simibubi/create/content/curiosities/weapons/BuiltinPotatoProjectileTypes.java b/src/main/java/com/simibubi/create/content/curiosities/weapons/BuiltinPotatoProjectileTypes.java index 4724fdbdd..7ada41f2a 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/weapons/BuiltinPotatoProjectileTypes.java +++ b/src/main/java/com/simibubi/create/content/curiosities/weapons/BuiltinPotatoProjectileTypes.java @@ -8,6 +8,7 @@ import com.mojang.authlib.GameProfile; import com.mojang.datafixers.util.Pair; import com.simibubi.create.AllItems; import com.simibubi.create.Create; +import com.simibubi.create.foundation.mixin.accessor.FallingBlockEntityAccessor; import com.simibubi.create.foundation.utility.WorldAttached; import net.minecraft.core.BlockPos; @@ -22,7 +23,6 @@ import net.minecraft.world.effect.MobEffect; import net.minecraft.world.effect.MobEffectInstance; import net.minecraft.world.effect.MobEffects; import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.animal.Fox; import net.minecraft.world.entity.item.FallingBlockEntity; @@ -354,14 +354,10 @@ public class BuiltinPotatoProjectileTypes { if (!world.isEmptyBlock(placePos.below())) y = Math.max(y, placePos.getY()); - BlockState fallingState = block.get() - .defaultBlockState(); - - FallingBlockEntity fallingBlockEntity = new FallingBlockEntity(EntityType.FALLING_BLOCK, level); - fallingBlockEntity.setPos(placePos.getX() + 0.5, y, placePos.getZ() + 0.5); - fallingBlockEntity.time = 1; - fallingBlockEntity.blockState = fallingState; - world.addFreshEntity(fallingBlockEntity); + FallingBlockEntity falling = FallingBlockEntityAccessor.create$callInit(level, placePos.getX() + 0.5, y, + placePos.getZ() + 0.5, block.get().defaultBlockState()); + falling.time = 1; + world.addFreshEntity(falling); } return true; diff --git a/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelMovementBehaviour.java b/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelMovementBehaviour.java index 3430fd6f0..b9327e582 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelMovementBehaviour.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelMovementBehaviour.java @@ -19,7 +19,7 @@ import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.Vec3; import net.minecraftforge.items.ItemHandlerHelper; -public class FunnelMovementBehaviour extends MovementBehaviour { +public class FunnelMovementBehaviour implements MovementBehaviour { private final boolean hasFilter; @@ -47,7 +47,7 @@ public class FunnelMovementBehaviour extends MovementBehaviour { @Override public void visitNewPosition(MovementContext context, BlockPos pos) { - super.visitNewPosition(context, pos); + MovementBehaviour.super.visitNewPosition(context, pos); if (context.state.getValue(FunnelBlock.EXTRACTING)) extract(context, pos); diff --git a/src/main/java/com/simibubi/create/content/logistics/block/redstone/ContactMovementBehaviour.java b/src/main/java/com/simibubi/create/content/logistics/block/redstone/ContactMovementBehaviour.java index 8e5c66519..46cfd53ca 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/redstone/ContactMovementBehaviour.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/redstone/ContactMovementBehaviour.java @@ -12,7 +12,7 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.phys.Vec3; import net.minecraft.world.ticks.TickPriority; -public class ContactMovementBehaviour extends MovementBehaviour { +public class ContactMovementBehaviour implements MovementBehaviour { @Override public Vec3 getActiveAreaOffset(MovementContext context) { diff --git a/src/main/java/com/simibubi/create/content/logistics/item/filter/ItemAttribute.java b/src/main/java/com/simibubi/create/content/logistics/item/filter/ItemAttribute.java index 2e14f7435..38e965d9f 100644 --- a/src/main/java/com/simibubi/create/content/logistics/item/filter/ItemAttribute.java +++ b/src/main/java/com/simibubi/create/content/logistics/item/filter/ItemAttribute.java @@ -29,6 +29,7 @@ import com.simibubi.create.foundation.utility.Lang; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.chat.TranslatableComponent; import net.minecraft.resources.ResourceLocation; +import net.minecraft.tags.ItemTags; import net.minecraft.tags.TagKey; import net.minecraft.world.Container; import net.minecraft.world.entity.EquipmentSlot; @@ -50,14 +51,13 @@ import net.minecraftforge.fml.ModList; import net.minecraftforge.forgespi.language.IModInfo; import net.minecraftforge.items.ItemStackHandler; import net.minecraftforge.items.wrapper.RecipeWrapper; -import net.minecraftforge.registries.ForgeRegistries; public interface ItemAttribute { static List types = new ArrayList<>(); static ItemAttribute standard = register(StandardTraits.DUMMY); - static ItemAttribute inTag = register(new InTag(new ResourceLocation("dummy"))); + static ItemAttribute inTag = register(new InTag(ItemTags.LOGS)); static ItemAttribute inItemGroup = register(new InItemGroup(CreativeModeTab.TAB_MISC)); static ItemAttribute addedBy = register(new InItemGroup.AddedBy("dummy")); static ItemAttribute hasEnchant = register(EnchantAttribute.EMPTY); @@ -232,27 +232,20 @@ public interface ItemAttribute { public static class InTag implements ItemAttribute { - public ResourceLocation tagName; + public TagKey tag; - public InTag(ResourceLocation tagName) { - this.tagName = tagName; + public InTag(TagKey tag) { + this.tag = tag; } @Override public boolean appliesTo(ItemStack stack) { - return ForgeRegistries.ITEMS.getHolder(stack.getItem()) - .get() - .tags() - .anyMatch(t -> t.location() - .equals(tagName)); + return stack.is(tag); } @Override public List listAttributesOf(ItemStack stack) { - return ForgeRegistries.ITEMS.getHolder(stack.getItem()) - .get() - .tags() - .map(TagKey::location) + return stack.getTags() .map(InTag::new) .collect(Collectors.toList()); } @@ -264,18 +257,18 @@ public interface ItemAttribute { @Override public Object[] getTranslationParameters() { - return new Object[] { "#" + tagName.toString() }; + return new Object[] { "#" + tag.location() }; } @Override public void writeNBT(CompoundTag nbt) { - nbt.putString("space", tagName.getNamespace()); - nbt.putString("path", tagName.getPath()); + nbt.putString("space", tag.location().getNamespace()); + nbt.putString("path", tag.location().getPath()); } @Override public ItemAttribute readNBT(CompoundTag nbt) { - return new InTag(new ResourceLocation(nbt.getString("space"), nbt.getString("path"))); + return new InTag(ItemTags.create(new ResourceLocation(nbt.getString("space"), nbt.getString("path")))); } } diff --git a/src/main/java/com/simibubi/create/content/palettes/AllPaletteStoneTypes.java b/src/main/java/com/simibubi/create/content/palettes/AllPaletteStoneTypes.java index e477914ef..290617f1f 100644 --- a/src/main/java/com/simibubi/create/content/palettes/AllPaletteStoneTypes.java +++ b/src/main/java/com/simibubi/create/content/palettes/AllPaletteStoneTypes.java @@ -3,7 +3,6 @@ package com.simibubi.create.content.palettes; import static com.simibubi.create.content.palettes.PaletteBlockPattern.STANDARD_RANGE; import static com.simibubi.create.content.palettes.PaletteBlockPattern.VANILLA_RANGE; -import java.util.Collections; import java.util.function.Function; import com.simibubi.create.AllTags; @@ -82,8 +81,7 @@ public enum AllPaletteStoneTypes { NonNullSupplier baseBlock = paletteStoneVariants.factory.apply(registrate); paletteStoneVariants.baseBlock = baseBlock; String id = Lang.asId(paletteStoneVariants.name()); - paletteStoneVariants.materialTag = AllTags.tag(r -> ForgeRegistries.ITEMS.tags() - .createOptionalTagKey(r, Collections.emptySet()), Create.ID, "stone_types/" + id); + paletteStoneVariants.materialTag = AllTags.optionalTag(ForgeRegistries.ITEMS, Create.asResource("stone_types/" + id)); paletteStoneVariants.variants = new PalettesVariantEntry(id, paletteStoneVariants); } } diff --git a/src/main/java/com/simibubi/create/foundation/fluid/FluidIngredient.java b/src/main/java/com/simibubi/create/foundation/fluid/FluidIngredient.java index 3e59bc848..10097c729 100644 --- a/src/main/java/com/simibubi/create/foundation/fluid/FluidIngredient.java +++ b/src/main/java/com/simibubi/create/foundation/fluid/FluidIngredient.java @@ -14,10 +14,10 @@ import com.google.gson.JsonObject; import com.google.gson.JsonParser; import com.google.gson.JsonSyntaxException; -import net.minecraft.core.Registry; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.resources.ResourceLocation; +import net.minecraft.tags.FluidTags; import net.minecraft.tags.TagKey; import net.minecraft.util.GsonHelper; import net.minecraft.world.level.material.FlowingFluid; @@ -200,6 +200,7 @@ public abstract class FluidIngredient implements Predicate { protected TagKey tag; + @SuppressWarnings("deprecation") @Override protected boolean testInternal(FluidStack t) { if (tag == null) @@ -207,9 +208,7 @@ public abstract class FluidIngredient implements Predicate { if (accepted.getFluid() .isSame(t.getFluid())) return true; - return ForgeRegistries.FLUIDS.getHolder(t.getFluid()) - .map(h -> h.containsTag(tag)) - .orElse(false); + return t.getFluid().is(tag); } @Override @@ -231,8 +230,8 @@ public abstract class FluidIngredient implements Predicate { @Override protected void readInternal(JsonObject json) { - ResourceLocation resourcelocation = new ResourceLocation(GsonHelper.getAsString(json, "fluidTag")); - tag = TagKey.create(Registry.FLUID_REGISTRY, resourcelocation); + ResourceLocation name = new ResourceLocation(GsonHelper.getAsString(json, "fluidTag")); + tag = FluidTags.create(name); } @Override diff --git a/src/main/java/com/simibubi/create/foundation/item/TagDependentIngredientItem.java b/src/main/java/com/simibubi/create/foundation/item/TagDependentIngredientItem.java index 2f422ea7e..b7fbc2115 100644 --- a/src/main/java/com/simibubi/create/foundation/item/TagDependentIngredientItem.java +++ b/src/main/java/com/simibubi/create/foundation/item/TagDependentIngredientItem.java @@ -24,11 +24,8 @@ public class TagDependentIngredientItem extends Item { } public boolean shouldHide() { - ITagManager tags = ForgeRegistries.ITEMS.tags(); - if (tags == null || !tags.isKnownTagName(tag)) - return false; - return tags.getTag(tag) - .isEmpty(); + ITagManager tagManager = ForgeRegistries.ITEMS.tags(); + return !tagManager.isKnownTagName(tag) || tagManager.getTag(tag).isEmpty(); } } diff --git a/src/main/java/com/simibubi/create/foundation/mixin/accessor/FallingBlockEntityAccessor.java b/src/main/java/com/simibubi/create/foundation/mixin/accessor/FallingBlockEntityAccessor.java new file mode 100644 index 000000000..c1254840f --- /dev/null +++ b/src/main/java/com/simibubi/create/foundation/mixin/accessor/FallingBlockEntityAccessor.java @@ -0,0 +1,16 @@ +package com.simibubi.create.foundation.mixin.accessor; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Invoker; + +import net.minecraft.world.entity.item.FallingBlockEntity; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.state.BlockState; + +@Mixin(FallingBlockEntity.class) +public interface FallingBlockEntityAccessor { + @Invoker("") + static FallingBlockEntity create$callInit(Level level, double x, double y, double z, BlockState state) { + throw new AssertionError(); + } +} diff --git a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/ValueBoxRenderer.java b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/ValueBoxRenderer.java index 8b0d511d3..b478f1dee 100644 --- a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/ValueBoxRenderer.java +++ b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/ValueBoxRenderer.java @@ -17,7 +17,6 @@ import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.FenceBlock; import net.minecraftforge.client.model.ItemMultiLayerBakedModel; -import net.minecraftforge.registries.ForgeRegistries; public class ValueBoxRenderer { @@ -34,22 +33,21 @@ public class ValueBoxRenderer { itemRenderer.renderStatic(filter, TransformType.FIXED, light, overlay, ms, buffer, 0); } + @SuppressWarnings("deprecation") private static float customZOffset(Item item) { - float NUDGE = -.1f; + float nudge = -.1f; if (item instanceof FilterItem) - return NUDGE; + return nudge; if (item instanceof BlockItem) { Block block = ((BlockItem) item).getBlock(); if (block instanceof AbstractShaftBlock) - return NUDGE; + return nudge; if (block instanceof FenceBlock) - return NUDGE; - if (ForgeRegistries.BLOCKS.getHolder(block) - .map(h -> h.containsTag(BlockTags.BUTTONS)) - .orElse(false)) - return NUDGE; + return nudge; + if (block.builtInRegistryHolder().is(BlockTags.BUTTONS)) + return nudge; if (block == Blocks.END_ROD) - return NUDGE; + return nudge; } return 0; } diff --git a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/belt/DirectBeltInputBehaviour.java b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/belt/DirectBeltInputBehaviour.java index 6da53b0fc..e82d6ab5a 100644 --- a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/belt/DirectBeltInputBehaviour.java +++ b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/belt/DirectBeltInputBehaviour.java @@ -70,6 +70,7 @@ public class DirectBeltInputBehaviour extends TileEntityBehaviour { return ItemHandlerHelper.insertItemStacked(lazy.orElse(null), inserted.stack.copy(), simulate); } + // TODO: verify that this side is consistent across all calls public boolean canInsertFromSide(Direction side) { return canInsert.test(side); } diff --git a/src/main/resources/META-INF/accesstransformer.cfg b/src/main/resources/META-INF/accesstransformer.cfg index fa9a613a4..dbf7cf3d1 100644 --- a/src/main/resources/META-INF/accesstransformer.cfg +++ b/src/main/resources/META-INF/accesstransformer.cfg @@ -6,7 +6,6 @@ protected net.minecraft.client.particle.Particle f_107205_ # stoppedByCollision public net.minecraft.client.renderer.ItemInHandRenderer f_109300_ # mainHandItem public net.minecraft.client.renderer.ItemInHandRenderer f_109301_ # offHandItem public net.minecraft.client.renderer.entity.ItemRenderer f_115096_ # textureManager -public net.minecraft.world.entity.item.FallingBlockEntity f_31946_ # blockState public-f net.minecraft.network.protocol.game.ClientboundPlayerAbilitiesPacket f_132663_ # flyingSpeed diff --git a/src/main/resources/META-INF/mods.toml b/src/main/resources/META-INF/mods.toml index e19cc36fd..4c8b47241 100644 --- a/src/main/resources/META-INF/mods.toml +++ b/src/main/resources/META-INF/mods.toml @@ -1,5 +1,5 @@ modLoader="javafml" -loaderVersion="[38,)" +loaderVersion="[40,)" issueTrackerURL="https://github.com/Creators-of-Create/Create/issues" license="MIT" diff --git a/src/main/resources/assets/create/shaders/core/glowing_shader.fsh b/src/main/resources/assets/create/shaders/core/glowing_shader.fsh index e8d3a0929..ff27aab0f 100644 --- a/src/main/resources/assets/create/shaders/core/glowing_shader.fsh +++ b/src/main/resources/assets/create/shaders/core/glowing_shader.fsh @@ -8,7 +8,6 @@ uniform vec4 ColorModulator; uniform float FogStart; uniform float FogEnd; uniform vec4 FogColor; -uniform float GameTime; in float vertexDistance; in vec4 vertexColor; diff --git a/src/main/resources/assets/create/shaders/core/glowing_shader.json b/src/main/resources/assets/create/shaders/core/glowing_shader.json index 6180e3b04..c57451b1c 100644 --- a/src/main/resources/assets/create/shaders/core/glowing_shader.json +++ b/src/main/resources/assets/create/shaders/core/glowing_shader.json @@ -25,6 +25,7 @@ { "name": "ColorModulator", "type": "float", "count": 4, "values": [ 1.0, 1.0, 1.0, 1.0 ] }, { "name": "FogStart", "type": "float", "count": 1, "values": [ 0.0 ] }, { "name": "FogEnd", "type": "float", "count": 1, "values": [ 1.0 ] }, - { "name": "FogColor", "type": "float", "count": 4, "values": [ 0.0, 0.0, 0.0, 0.0 ] } + { "name": "FogColor", "type": "float", "count": 4, "values": [ 0.0, 0.0, 0.0, 0.0 ] }, + { "name": "FogShape", "type": "int", "count": 1, "values": [ 0 ] } ] } diff --git a/src/main/resources/assets/create/shaders/core/glowing_shader.vsh b/src/main/resources/assets/create/shaders/core/glowing_shader.vsh index 9bff895bf..b47f08e7d 100644 --- a/src/main/resources/assets/create/shaders/core/glowing_shader.vsh +++ b/src/main/resources/assets/create/shaders/core/glowing_shader.vsh @@ -15,6 +15,7 @@ uniform sampler2D Sampler2; uniform mat4 ModelViewMat; uniform mat4 ProjMat; uniform mat3 IViewRotMat; +uniform int FogShape; out float vertexDistance; out vec4 vertexColor; @@ -26,7 +27,7 @@ out vec4 normal; void main() { gl_Position = ProjMat * ModelViewMat * vec4(Position, 1.0); - vertexDistance = cylindrical_distance(ModelViewMat, IViewRotMat * Position); + vertexDistance = fog_distance(ModelViewMat, IViewRotMat * Position, FogShape); vertexColor = Color; lightMapColor = texelFetch(Sampler2, UV2 / 16, 0); texCoord0 = UV0; diff --git a/src/main/resources/create.mixins.json b/src/main/resources/create.mixins.json index 170ae7622..1327b92db 100644 --- a/src/main/resources/create.mixins.json +++ b/src/main/resources/create.mixins.json @@ -7,8 +7,9 @@ "mixins": [ "CustomItemUseEffectsMixin", "accessor.AbstractProjectileDispenseBehaviorAccessor", - "accessor.LivingEntityAccessor", - "accessor.DispenserBlockAccessor" + "accessor.DispenserBlockAccessor", + "accessor.FallingBlockEntityAccessor", + "accessor.LivingEntityAccessor" ], "client": [ "DestroyProgressMixin", From a31d7139586e27cb18cf68f1d581be73f38e60d1 Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Wed, 23 Mar 2022 18:02:03 +0100 Subject: [PATCH 29/29] Sibling in hiding - Removed copper backtanks' helper item from creative tab, fixed its model loading issues --- src/generated/resources/.cache/cache | 1 + .../create/models/item/copper_backtank_placeable.json | 3 +++ src/main/java/com/simibubi/create/AllItems.java | 2 +- .../content/curiosities/armor/CopperBacktankBlock.java | 7 ++++++- 4 files changed, 11 insertions(+), 2 deletions(-) create mode 100644 src/generated/resources/assets/create/models/item/copper_backtank_placeable.json diff --git a/src/generated/resources/.cache/cache b/src/generated/resources/.cache/cache index f113565e7..04f1d9048 100644 --- a/src/generated/resources/.cache/cache +++ b/src/generated/resources/.cache/cache @@ -1619,6 +1619,7 @@ dcb09deae110077bcddf090996b51cc66e9a7de3 assets/create/models/item/cogwheel.json 7717e3b21cff39f497f07687c70c1fa40eaa756d assets/create/models/item/content_observer.json 9dbd63c9e1b09a663fd4b83d76e3ab5967086167 assets/create/models/item/controller_rail.json 10397036fc0bb1e18a767cfd7b19b10d805a83fe assets/create/models/item/copper_backtank.json +3652f8f7b454940050f090ab32d38e04b93e14f8 assets/create/models/item/copper_backtank_placeable.json 759bcb5fe7dfdd628716f9b4ff19a5ab00393381 assets/create/models/item/copper_casing.json 751324b03f657f4166460eb10a64dae47cb97bd4 assets/create/models/item/copper_nugget.json 177dafb51d70c55ec62036332868efed4e01f353 assets/create/models/item/copper_sheet.json diff --git a/src/generated/resources/assets/create/models/item/copper_backtank_placeable.json b/src/generated/resources/assets/create/models/item/copper_backtank_placeable.json new file mode 100644 index 000000000..ff77c281b --- /dev/null +++ b/src/generated/resources/assets/create/models/item/copper_backtank_placeable.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/barrier" +} \ No newline at end of file diff --git a/src/main/java/com/simibubi/create/AllItems.java b/src/main/java/com/simibubi/create/AllItems.java index 03c4a9785..41147d22c 100644 --- a/src/main/java/com/simibubi/create/AllItems.java +++ b/src/main/java/com/simibubi/create/AllItems.java @@ -247,7 +247,7 @@ public class AllItems { // must be registered as of 1.18.2 public static final ItemEntry COPPER_BACKTANK_PLACEABLE = REGISTRATE .item("copper_backtank_placeable", p -> new CopperBacktankBlockItem(AllBlocks.COPPER_BACKTANK.get(), p)) - .model((c, p) -> p.getExistingFile(p.mcLoc("item/barrier"))) + .model((c, p) -> p.withExistingParent(c.getName(), p.mcLoc("item/barrier"))) .register(); public static final ItemEntry diff --git a/src/main/java/com/simibubi/create/content/curiosities/armor/CopperBacktankBlock.java b/src/main/java/com/simibubi/create/content/curiosities/armor/CopperBacktankBlock.java index e2eda105f..a83030faa 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/armor/CopperBacktankBlock.java +++ b/src/main/java/com/simibubi/create/content/curiosities/armor/CopperBacktankBlock.java @@ -12,6 +12,7 @@ import com.simibubi.create.foundation.block.ITE; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.core.Direction.Axis; +import net.minecraft.core.NonNullList; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.ListTag; import net.minecraft.network.chat.Component; @@ -23,6 +24,7 @@ import net.minecraft.world.entity.EquipmentSlot; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.BlockItem; +import net.minecraft.world.item.CreativeModeTab; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.context.BlockPlaceContext; import net.minecraft.world.item.enchantment.EnchantmentHelper; @@ -63,7 +65,10 @@ public class CopperBacktankBlock extends HorizontalKineticBlock builder.add(BlockStateProperties.WATERLOGGED); super.createBlockStateDefinition(builder); } - + + @Override + public void fillItemCategory(CreativeModeTab pTab, NonNullList pItems) {} + @Override public boolean hasAnalogOutputSignal(BlockState p_149740_1_) { return true;