From c7aca258af552908f40d0804dd627e0c2cf605fa Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Wed, 6 Apr 2022 21:36:15 +0200 Subject: [PATCH 01/31] Update bug_report.yml --- .github/ISSUE_TEMPLATE/bug_report.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index 95883df8e..1fe35e576 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.1" - "0.4.0f" - "0.4.0e" - "0.4.0d" @@ -101,6 +102,7 @@ body: label: Minecraft Version description: The version of Minecraft you were using when the bug occured options: + - "1.18.2" - "1.18.1" - "1.18" - "1.17.1" From 385ffb45336b0f8db349d1ce768d276897d59996 Mon Sep 17 00:00:00 2001 From: FortressNebula Date: Fri, 8 Apr 2022 12:26:52 +0100 Subject: [PATCH 02/31] Add support for other mod IDs with virtual fluids --- .../create/foundation/data/CreateRegistrate.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) 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 92b34bdc9..32e661e8c 100644 --- a/src/main/java/com/simibubi/create/foundation/data/CreateRegistrate.java +++ b/src/main/java/com/simibubi/create/foundation/data/CreateRegistrate.java @@ -30,6 +30,7 @@ import com.tterrag.registrate.util.nullness.NonNullFunction; import com.tterrag.registrate.util.nullness.NonNullSupplier; import net.minecraft.client.resources.model.BakedModel; +import net.minecraft.resources.ResourceLocation; import net.minecraft.tags.BlockTags; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EntityType; @@ -168,12 +169,26 @@ public class CreateRegistrate extends AbstractRegistrate { Create.asResource("fluid/" + name + "_flow"), attributesFactory, factory)); } + public FluidBuilder virtualFluid(String name, ResourceLocation still, ResourceLocation flow, + BiFunction attributesFactory, + NonNullFunction factory) { + return entry(name, + c -> new VirtualFluidBuilder<>(self(), self(), name, c, still, + flow, attributesFactory, factory)); + } + public FluidBuilder virtualFluid(String name) { return entry(name, c -> new VirtualFluidBuilder<>(self(), self(), name, c, Create.asResource("fluid/" + name + "_still"), Create.asResource("fluid/" + name + "_flow"), null, VirtualFluid::new)); } + public FluidBuilder virtualFluid(String name, ResourceLocation still, ResourceLocation flow) { + return entry(name, + c -> new VirtualFluidBuilder<>(self(), self(), name, c, still, + flow, null, VirtualFluid::new)); + } + public FluidBuilder standardFluid(String name) { return fluid(name, Create.asResource("fluid/" + name + "_still"), Create.asResource("fluid/" + name + "_flow")); } From c48c28cd2f7776fdfff67570f9cc987308264cb9 Mon Sep 17 00:00:00 2001 From: PepperCode1 <44146161+PepperCode1@users.noreply.github.com> Date: Sun, 10 Apr 2022 13:25:04 -0700 Subject: [PATCH 03/31] Fix schematics rendering layers in the wrong order --- .../create/content/schematics/client/SchematicRenderer.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/simibubi/create/content/schematics/client/SchematicRenderer.java b/src/main/java/com/simibubi/create/content/schematics/client/SchematicRenderer.java index fb9fb0b63..5eea3f169 100644 --- a/src/main/java/com/simibubi/create/content/schematics/client/SchematicRenderer.java +++ b/src/main/java/com/simibubi/create/content/schematics/client/SchematicRenderer.java @@ -1,6 +1,6 @@ package com.simibubi.create.content.schematics.client; -import java.util.HashMap; +import java.util.LinkedHashMap; import java.util.Map; import java.util.Random; @@ -33,7 +33,7 @@ public class SchematicRenderer { private static final ThreadLocal THREAD_LOCAL_OBJECTS = ThreadLocal.withInitial(ThreadLocalObjects::new); - private final Map bufferCache = new HashMap<>(getLayerCount()); + private final Map bufferCache = new LinkedHashMap<>(getLayerCount()); private boolean active; private boolean changed; protected SchematicWorld schematic; From 343c0fab622ff0ad34b61886f033bc579c248ff0 Mon Sep 17 00:00:00 2001 From: Jozufozu Date: Sun, 10 Apr 2022 17:37:13 -0700 Subject: [PATCH 04/31] Material refactor pt 1 - PartialModels don't actually need reference states, use air instead - Bump flywheel build --- gradle.properties | 2 +- .../contraptions/base/HalfShaftInstance.java | 2 +- .../components/actors/DrillActorInstance.java | 16 ++++++++-------- .../components/actors/DrillInstance.java | 2 +- .../actors/HarvesterActorInstance.java | 4 +++- .../components/actors/PIInstance.java | 6 +++--- .../crafter/MechanicalCrafterInstance.java | 2 +- .../components/crank/HandCrankInstance.java | 2 +- .../deployer/DeployerActorInstance.java | 4 ++-- .../components/deployer/DeployerInstance.java | 6 +++--- .../contraptions/components/fan/FanInstance.java | 4 ++-- .../components/flywheel/FlyWheelInstance.java | 12 ++++++------ .../components/flywheel/engine/EngineBlock.java | 1 - .../flywheel/engine/EngineInstance.java | 4 +++- .../millstone/MillStoneCogInstance.java | 2 +- .../components/mixer/MixerInstance.java | 6 +++--- .../components/press/PressInstance.java | 2 +- .../contraptions/components/saw/SawInstance.java | 2 +- .../bearing/BearingInstance.java | 2 +- .../bearing/StabilizedBearingInstance.java | 4 ++-- .../chassis/StickerInstance.java | 10 +++++----- .../gantry/GantryCarriageInstance.java | 2 +- .../structureMovement/glue/GlueInstance.java | 6 +++--- .../structureMovement/glue/GlueModel.java | 10 ++++------ .../pulley/HosePulleyInstance.java | 10 +++++----- .../pulley/RopePulleyInstance.java | 6 +++--- .../structureMovement/render/FlwContraption.java | 2 +- .../render/FlwContraptionManager.java | 6 +++--- .../contraptions/fluids/PumpCogInstance.java | 4 ++-- .../fluids/pipes/FluidValveInstance.java | 2 +- .../contraptions/relays/belt/BeltInstance.java | 8 ++++---- .../elementary/BracketedKineticTileInstance.java | 5 ++--- .../relays/encased/EncasedCogInstance.java | 4 ++-- .../relays/encased/SplitShaftInstance.java | 2 +- .../contraptions/relays/gauge/GaugeInstance.java | 6 +++--- .../relays/gearbox/GearboxInstance.java | 2 +- .../armor/CopperBacktankInstance.java | 2 +- .../curiosities/toolbox/ToolBoxInstance.java | 4 ++-- .../block/belts/tunnel/BeltTunnelInstance.java | 4 ++-- .../logistics/block/depot/EjectorInstance.java | 2 +- .../block/diodes/BrassDiodeInstance.java | 2 +- .../logistics/block/funnel/FunnelInstance.java | 4 ++-- .../block/mechanicalArm/ArmInstance.java | 14 +++++++------- .../block/redstone/AnalogLeverInstance.java | 4 ++-- .../schematics/block/SchematicannonInstance.java | 4 ++-- src/main/resources/META-INF/mods.toml | 2 +- 46 files changed, 106 insertions(+), 106 deletions(-) diff --git a/gradle.properties b/gradle.properties index bef758929..943a79117 100644 --- a/gradle.properties +++ b/gradle.properties @@ -19,7 +19,7 @@ parchment_version = 2022.03.13 # dependency versions registrate_version = MC1.18.2-1.0.25 -flywheel_version = 1.18-0.6.2.64 +flywheel_version = 1.18-0.7.0.67 jei_minecraft_version = 1.18.2 jei_version = 9.5.3.143 diff --git a/src/main/java/com/simibubi/create/content/contraptions/base/HalfShaftInstance.java b/src/main/java/com/simibubi/create/content/contraptions/base/HalfShaftInstance.java index 6ddaf3acf..81f84dc08 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/base/HalfShaftInstance.java +++ b/src/main/java/com/simibubi/create/content/contraptions/base/HalfShaftInstance.java @@ -16,7 +16,7 @@ public class HalfShaftInstance extends SingleRotatingInstance { @Override protected Instancer getModel() { Direction dir = getShaftDirection(); - return getRotatingMaterial().getModel(AllBlockPartials.SHAFT_HALF, blockState, dir); + return getRotatingMaterial().getModel(AllBlockPartials.SHAFT_HALF, dir); } protected Direction getShaftDirection() { diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/DrillActorInstance.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/DrillActorInstance.java index 304fe9cd1..4c78fa5af 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/actors/DrillActorInstance.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/DrillActorInstance.java @@ -39,14 +39,14 @@ public class DrillActorInstance extends ActorInstance { else eulerY = facing.toYRot() + ((axis == Direction.Axis.X) ? 180 : 0); - drillHead = material.getModel(AllBlockPartials.DRILL_HEAD, state).createInstance(); - - drillHead.setPosition(context.localPos) - .setBlockLight(localBlockLight()) - .setRotationOffset(0) - .setRotationAxis(0, 0, 1) - .setLocalRotation(new Quaternion(eulerX, eulerY, 0, true)) - .setSpeed(getSpeed(facing)); + drillHead = material.getModel(AllBlockPartials.DRILL_HEAD) + .createInstance() + .setPosition(context.localPos) + .setBlockLight(localBlockLight()) + .setRotationOffset(0) + .setRotationAxis(0, 0, 1) + .setLocalRotation(new Quaternion(eulerX, eulerY, 0, true)) + .setSpeed(getSpeed(facing)); } @Override diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/DrillInstance.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/DrillInstance.java index cf949ebd4..dc95e478a 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/actors/DrillInstance.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/DrillInstance.java @@ -21,6 +21,6 @@ public class DrillInstance extends SingleRotatingInstance { protected Instancer getModel() { BlockState referenceState = blockEntity.getBlockState(); Direction facing = referenceState.getValue(BlockStateProperties.FACING); - return getRotatingMaterial().getModel(AllBlockPartials.DRILL_HEAD, referenceState, facing); + return getRotatingMaterial().getModel(AllBlockPartials.DRILL_HEAD, facing); } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/HarvesterActorInstance.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/HarvesterActorInstance.java index de07acdd9..341558f91 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/actors/HarvesterActorInstance.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/HarvesterActorInstance.java @@ -3,6 +3,7 @@ package com.simibubi.create.content.contraptions.components.actors; import com.jozufozu.flywheel.api.Material; import com.jozufozu.flywheel.api.MaterialManager; import com.jozufozu.flywheel.core.Materials; +import com.jozufozu.flywheel.core.Models; import com.jozufozu.flywheel.core.materials.model.ModelData; import com.jozufozu.flywheel.core.virtual.VirtualRenderWorld; import com.simibubi.create.AllBlockPartials; @@ -41,7 +42,8 @@ public class HarvesterActorInstance extends ActorInstance { facing = state.getValue(BlockStateProperties.HORIZONTAL_FACING); - harvester = material.getModel(AllBlockPartials.HARVESTER_BLADE, state).createInstance(); + harvester = material.model(Models.partial(AllBlockPartials.HARVESTER_BLADE)) + .createInstance(); horizontalAngle = facing.toYRot() + ((facing.getAxis() == Direction.Axis.X) ? 180 : 0); diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/PIInstance.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/PIInstance.java index ec28142a6..06556b27e 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/actors/PIInstance.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/PIInstance.java @@ -33,11 +33,11 @@ public class PIInstance { this.lit = lit; middle = materialManager.defaultSolid() .material(Materials.TRANSFORMED) - .getModel(PortableStorageInterfaceRenderer.getMiddleForState(blockState, lit), blockState) + .getModel(PortableStorageInterfaceRenderer.getMiddleForState(blockState, lit)) .createInstance(); top = materialManager.defaultSolid() .material(Materials.TRANSFORMED) - .getModel(PortableStorageInterfaceRenderer.getTopForState(blockState), blockState) + .getModel(PortableStorageInterfaceRenderer.getTopForState(blockState)) .createInstance(); } @@ -66,7 +66,7 @@ public class PIInstance { this.lit = lit; materialManager.defaultSolid() .material(Materials.TRANSFORMED) - .getModel(PortableStorageInterfaceRenderer.getMiddleForState(blockState, lit), blockState) + .getModel(PortableStorageInterfaceRenderer.getMiddleForState(blockState, lit)) .stealInstance(middle); } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/crafter/MechanicalCrafterInstance.java b/src/main/java/com/simibubi/create/content/contraptions/components/crafter/MechanicalCrafterInstance.java index f0536efbf..cff0e0884 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/crafter/MechanicalCrafterInstance.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/crafter/MechanicalCrafterInstance.java @@ -23,7 +23,7 @@ public class MechanicalCrafterInstance extends SingleRotatingInstance { protected Instancer getModel() { Direction facing = blockState.getValue(MechanicalCrafterBlock.HORIZONTAL_FACING); - return getRotatingMaterial().getModel(AllBlockPartials.SHAFTLESS_COGWHEEL, blockState, facing, rotateToFace(facing)); + return getRotatingMaterial().getModel(AllBlockPartials.SHAFTLESS_COGWHEEL, facing, rotateToFace(facing)); } private Supplier rotateToFace(Direction facing) { diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/crank/HandCrankInstance.java b/src/main/java/com/simibubi/create/content/contraptions/components/crank/HandCrankInstance.java index c3eaeb218..248388787 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/crank/HandCrankInstance.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/crank/HandCrankInstance.java @@ -31,7 +31,7 @@ public class HandCrankInstance extends SingleRotatingInstance implements Dynamic facing = blockState.getValue(BlockStateProperties.FACING); Direction opposite = facing.getOpposite(); - Instancer model = getTransformMaterial().getModel(renderedHandle, blockState, opposite); + Instancer model = getTransformMaterial().getModel(renderedHandle, opposite); crank = model.createInstance(); rotateCrank(); diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerActorInstance.java b/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerActorInstance.java index 7477c48d1..0ab7684ae 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerActorInstance.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerActorInstance.java @@ -61,8 +61,8 @@ public class DeployerActorInstance extends ActorInstance { xRot = facing == Direction.UP ? 270 : facing == Direction.DOWN ? 90 : 0; zRot = rotatePole ? 90 : 0; - pole = mat.getModel(AllBlockPartials.DEPLOYER_POLE, state).createInstance(); - hand = mat.getModel(handPose, state).createInstance(); + pole = mat.getModel(AllBlockPartials.DEPLOYER_POLE).createInstance(); + hand = mat.getModel(handPose).createInstance(); Direction.Axis axis = ((IRotate) state.getBlock()).getRotationAxis(state); shaft = materialManager.defaultSolid() diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerInstance.java b/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerInstance.java index 9087f5eab..4733a6b3a 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerInstance.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerInstance.java @@ -47,11 +47,11 @@ public class DeployerInstance extends ShaftInstance implements DynamicInstance, xRot = facing == Direction.UP ? 270 : facing == Direction.DOWN ? 90 : 0; zRot = rotatePole ? 90 : 0; - pole = getOrientedMaterial().getModel(AllBlockPartials.DEPLOYER_POLE, blockState).createInstance(); + pole = getOrientedMaterial().getModel(AllBlockPartials.DEPLOYER_POLE).createInstance(); currentHand = this.tile.getHandPose(); - hand = getOrientedMaterial().getModel(currentHand, blockState).createInstance(); + hand = getOrientedMaterial().getModel(currentHand).createInstance(); progress = getProgress(AnimationTickHolder.getPartialTicks()); updateRotation(pole, hand, yRot, xRot, zRot); @@ -64,7 +64,7 @@ public class DeployerInstance extends ShaftInstance implements DynamicInstance, if (currentHand != handPose) { currentHand = handPose; - getOrientedMaterial().getModel(currentHand, blockState) + getOrientedMaterial().getModel(currentHand) .stealInstance(hand); } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/fan/FanInstance.java b/src/main/java/com/simibubi/create/content/contraptions/components/fan/FanInstance.java index 9a7dfa93b..f10ab9464 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/fan/FanInstance.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/fan/FanInstance.java @@ -25,10 +25,10 @@ public class FanInstance extends KineticTileInstance { direction = blockState.getValue(FACING); opposite = direction.getOpposite(); - shaft = getRotatingMaterial().getModel(AllBlockPartials.SHAFT_HALF, blockState, opposite).createInstance(); + shaft = getRotatingMaterial().getModel(AllBlockPartials.SHAFT_HALF, opposite).createInstance(); fan = modelManager.defaultCutout() .material(AllMaterialSpecs.ROTATING) - .getModel(AllBlockPartials.ENCASED_FAN_INNER, blockState, opposite) + .getModel(AllBlockPartials.ENCASED_FAN_INNER, opposite) .createInstance(); setup(shaft); diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/flywheel/FlyWheelInstance.java b/src/main/java/com/simibubi/create/content/contraptions/components/flywheel/FlyWheelInstance.java index 30e087aae..589888f14 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/flywheel/FlyWheelInstance.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/flywheel/FlyWheelInstance.java @@ -54,7 +54,7 @@ public class FlyWheelInstance extends KineticTileInstance im BlockState referenceState = blockState.rotate(Rotation.CLOCKWISE_90); wheel = getTransformMaterial() - .getModel(AllBlockPartials.FLYWHEEL, referenceState, referenceState.getValue(HORIZONTAL_FACING)) + .getModel(AllBlockPartials.FLYWHEEL, referenceState.getValue(HORIZONTAL_FACING)) .createInstance(); connection = FlywheelBlock.getConnection(blockState); @@ -68,13 +68,13 @@ public class FlyWheelInstance extends KineticTileInstance im Material mat = getTransformMaterial(); - upperRotating = mat.getModel(AllBlockPartials.FLYWHEEL_UPPER_ROTATING, blockState) + upperRotating = mat.getModel(AllBlockPartials.FLYWHEEL_UPPER_ROTATING) .createInstance(); - lowerRotating = mat.getModel(AllBlockPartials.FLYWHEEL_LOWER_ROTATING, blockState) + lowerRotating = mat.getModel(AllBlockPartials.FLYWHEEL_LOWER_ROTATING) .createInstance(); - upperSliding = mat.getModel(AllBlockPartials.FLYWHEEL_UPPER_SLIDING, blockState) + upperSliding = mat.getModel(AllBlockPartials.FLYWHEEL_UPPER_SLIDING) .createInstance(); - lowerSliding = mat.getModel(AllBlockPartials.FLYWHEEL_LOWER_SLIDING, blockState) + lowerSliding = mat.getModel(AllBlockPartials.FLYWHEEL_LOWER_SLIDING) .createInstance(); connectors = Lists.newArrayList(upperRotating, lowerRotating, upperSliding, lowerSliding); @@ -168,7 +168,7 @@ public class FlyWheelInstance extends KineticTileInstance im protected Instancer shaftModel() { Direction opposite = facing.getOpposite(); - return getRotatingMaterial().getModel(AllBlockPartials.SHAFT_HALF, blockState, opposite); + return getRotatingMaterial().getModel(AllBlockPartials.SHAFT_HALF, opposite); } protected void transformConnector(TransformStack ms, boolean upper, boolean rotating, float angle, diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/flywheel/engine/EngineBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/flywheel/engine/EngineBlock.java index c3eb5bdfc..5354e321e 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/flywheel/engine/EngineBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/flywheel/engine/EngineBlock.java @@ -84,7 +84,6 @@ public abstract class EngineBlock extends HorizontalDirectionalBlock implements return pos.relative(state.getValue(FACING).getOpposite()); } - @Nullable @OnlyIn(Dist.CLIENT) public abstract PartialModel getFrameModel(); diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/flywheel/engine/EngineInstance.java b/src/main/java/com/simibubi/create/content/contraptions/components/flywheel/engine/EngineInstance.java index 2cd886817..ee67b4786 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/flywheel/engine/EngineInstance.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/flywheel/engine/EngineInstance.java @@ -2,8 +2,10 @@ package com.simibubi.create.content.contraptions.components.flywheel.engine; import com.jozufozu.flywheel.api.MaterialManager; import com.jozufozu.flywheel.backend.instancing.blockentity.BlockEntityInstance; +import com.jozufozu.flywheel.core.Materials; import com.jozufozu.flywheel.core.PartialModel; import com.jozufozu.flywheel.core.materials.model.ModelData; +import com.jozufozu.flywheel.core.model.ModelUtil; import com.simibubi.create.foundation.utility.AngleHelper; import net.minecraft.core.Direction; @@ -26,7 +28,7 @@ public class EngineInstance extends BlockEntityInstance { Direction facing = blockState.getValue(BlockStateProperties.HORIZONTAL_FACING); - this.frame = getTransformMaterial().getModel(frame, blockState).createInstance(); + this.frame = getTransformMaterial().getModel(frame).createInstance(); float angle = AngleHelper.rad(AngleHelper.horizontalAngle(facing)); diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/millstone/MillStoneCogInstance.java b/src/main/java/com/simibubi/create/content/contraptions/components/millstone/MillStoneCogInstance.java index 1e8831261..28737db56 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/millstone/MillStoneCogInstance.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/millstone/MillStoneCogInstance.java @@ -15,6 +15,6 @@ public class MillStoneCogInstance extends SingleRotatingInstance { @Override protected Instancer getModel() { - return getRotatingMaterial().getModel(AllBlockPartials.MILLSTONE_COG, blockEntity.getBlockState()); + return getRotatingMaterial().getModel(AllBlockPartials.MILLSTONE_COG); } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/mixer/MixerInstance.java b/src/main/java/com/simibubi/create/content/contraptions/components/mixer/MixerInstance.java index 8104dd20b..cf1e2dfb8 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/mixer/MixerInstance.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/mixer/MixerInstance.java @@ -22,13 +22,13 @@ public class MixerInstance extends EncasedCogInstance implements DynamicInstance super(dispatcher, tile, false); this.mixer = tile; - mixerHead = getRotatingMaterial().getModel(AllBlockPartials.MECHANICAL_MIXER_HEAD, blockState) + mixerHead = getRotatingMaterial().getModel(AllBlockPartials.MECHANICAL_MIXER_HEAD) .createInstance(); mixerHead.setRotationAxis(Direction.Axis.Y); mixerPole = getOrientedMaterial() - .getModel(AllBlockPartials.MECHANICAL_MIXER_POLE, blockState) + .getModel(AllBlockPartials.MECHANICAL_MIXER_POLE) .createInstance(); @@ -42,7 +42,7 @@ public class MixerInstance extends EncasedCogInstance implements DynamicInstance protected Instancer getCogModel() { return materialManager.defaultSolid() .material(AllMaterialSpecs.ROTATING) - .getModel(AllBlockPartials.SHAFTLESS_COGWHEEL, blockEntity.getBlockState()); + .getModel(AllBlockPartials.SHAFTLESS_COGWHEEL); } @Override diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/press/PressInstance.java b/src/main/java/com/simibubi/create/content/contraptions/components/press/PressInstance.java index ff842943e..0d33238c5 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/press/PressInstance.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/press/PressInstance.java @@ -22,7 +22,7 @@ public class PressInstance extends ShaftInstance implements DynamicInstance { pressHead = dispatcher.defaultSolid() .material(Materials.ORIENTED) - .getModel(AllBlockPartials.MECHANICAL_PRESS_HEAD, blockState) + .getModel(AllBlockPartials.MECHANICAL_PRESS_HEAD) .createInstance(); Quaternion q = Vector3f.YP.rotationDegrees(AngleHelper.horizontalAngle(blockState.getValue(MechanicalPressBlock.HORIZONTAL_FACING))); diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/saw/SawInstance.java b/src/main/java/com/simibubi/create/content/contraptions/components/saw/SawInstance.java index bba424cbf..f35867d28 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/saw/SawInstance.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/saw/SawInstance.java @@ -25,7 +25,7 @@ public class SawInstance extends SingleRotatingInstance { .isHorizontal()) { BlockState referenceState = blockState.rotate(blockEntity.getLevel(), blockEntity.getBlockPos(), Rotation.CLOCKWISE_180); Direction facing = referenceState.getValue(BlockStateProperties.FACING); - return getRotatingMaterial().getModel(AllBlockPartials.SHAFT_HALF, referenceState, facing); + return getRotatingMaterial().getModel(AllBlockPartials.SHAFT_HALF, facing); } else { return getRotatingMaterial().getModel(shaft()); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/BearingInstance.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/BearingInstance.java index e4f303402..a0af457fb 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/BearingInstance.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/BearingInstance.java @@ -35,7 +35,7 @@ public class BearingInstance e PartialModel top = bearing.isWoodenTop() ? AllBlockPartials.BEARING_TOP_WOODEN : AllBlockPartials.BEARING_TOP; - topInstance = getOrientedMaterial().getModel(top, blockState).createInstance(); + topInstance = getOrientedMaterial().getModel(top).createInstance(); topInstance.setPosition(getInstancePosition()).setRotation(blockOrientation); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/StabilizedBearingInstance.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/StabilizedBearingInstance.java index 88d9b7998..b9aa31cc1 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/StabilizedBearingInstance.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/StabilizedBearingInstance.java @@ -38,7 +38,7 @@ public class StabilizedBearingInstance extends ActorInstance { topInstance = materialManager.defaultSolid() .material(Materials.ORIENTED) - .getModel(AllBlockPartials.BEARING_TOP, blockState) + .getModel(AllBlockPartials.BEARING_TOP) .createInstance(); int blockLight = localBlockLight(); @@ -48,7 +48,7 @@ public class StabilizedBearingInstance extends ActorInstance { shaft = materialManager.defaultSolid() .material(AllMaterialSpecs.ROTATING) - .getModel(AllBlockPartials.SHAFT_HALF, blockState, blockState.getValue(BlockStateProperties.FACING).getOpposite()) + .getModel(AllBlockPartials.SHAFT_HALF, blockState.getValue(BlockStateProperties.FACING).getOpposite()) .createInstance(); // not rotating so no need to set speed, axis, etc. diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/chassis/StickerInstance.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/chassis/StickerInstance.java index e94e2b5ce..bd88c3937 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/chassis/StickerInstance.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/chassis/StickerInstance.java @@ -17,20 +17,20 @@ public class StickerInstance extends BlockEntityInstance impl float lastOffset = Float.NaN; final Direction facing; final boolean fakeWorld; - final int offset; + final int extended; private final ModelData head; public StickerInstance(MaterialManager modelManager, StickerTileEntity tile) { super(modelManager, tile); - head = getTransformMaterial().getModel(AllBlockPartials.STICKER_HEAD, blockState).createInstance(); + head = getTransformMaterial().getModel(AllBlockPartials.STICKER_HEAD).createInstance(); fakeWorld = tile.getLevel() != Minecraft.getInstance().level; facing = blockState.getValue(StickerBlock.FACING); - offset = blockState.getValue(StickerBlock.EXTENDED) ? 1 : 0; + extended = blockState.getValue(StickerBlock.EXTENDED) ? 1 : 0; - animateHead(offset); + animateHead(extended); } @Override @@ -38,7 +38,7 @@ public class StickerInstance extends BlockEntityInstance impl float offset = blockEntity.piston.getValue(AnimationTickHolder.getPartialTicks()); if (fakeWorld) - offset = this.offset; + offset = this.extended; if (Mth.equal(offset, lastOffset)) return; diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/gantry/GantryCarriageInstance.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/gantry/GantryCarriageInstance.java index f84270b53..ea45e5a85 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/gantry/GantryCarriageInstance.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/gantry/GantryCarriageInstance.java @@ -30,7 +30,7 @@ public class GantryCarriageInstance extends ShaftInstance implements DynamicInst super(dispatcher, tile); gantryCogs = getTransformMaterial() - .getModel(AllBlockPartials.GANTRY_COGS, blockState) + .getModel(AllBlockPartials.GANTRY_COGS) .createInstance(); facing = blockState.getValue(GantryCarriageBlock.FACING); diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/glue/GlueInstance.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/glue/GlueInstance.java index 7282da1e1..5559845a1 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/glue/GlueInstance.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/glue/GlueInstance.java @@ -31,7 +31,7 @@ public class GlueInstance extends EntityInstance implements Tic public GlueInstance(MaterialManager materialManager, SuperGlueEntity entity) { super(materialManager, entity); - Instancer instancer = getInstancer(materialManager, entity); + Instancer instancer = getInstancer(materialManager); Direction face = entity.getFacingDirection(); rotation = new Quaternion(AngleHelper.verticalAngle(face), AngleHelper.horizontalAngle(face), 0, true); @@ -42,10 +42,10 @@ public class GlueInstance extends EntityInstance implements Tic .update(); } - private Instancer getInstancer(MaterialManager materialManager, SuperGlueEntity entity) { + private Instancer getInstancer(MaterialManager materialManager) { MaterialGroup group = GlueModel.USE_ATLAS ? materialManager.defaultCutout() : materialManager.cutout(RenderType.entityCutout(TEXTURE)); - return group.material(Materials.ORIENTED).model(entity.getType(), GlueModel::get); + return group.material(Materials.ORIENTED).model(GlueModel.INSTANCE); } @Override diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/glue/GlueModel.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/glue/GlueModel.java index 0c279a640..c8316e4fd 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/glue/GlueModel.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/glue/GlueModel.java @@ -1,7 +1,9 @@ package com.simibubi.create.content.contraptions.components.structureMovement.glue; +import com.jozufozu.flywheel.api.ModelSupplier; import com.jozufozu.flywheel.api.vertex.VertexList; import com.jozufozu.flywheel.core.Formats; +import com.jozufozu.flywheel.core.SimpleModelSupplier; import com.jozufozu.flywheel.core.model.Model; import com.jozufozu.flywheel.core.vertex.PosTexNormalWriterUnsafe; import com.mojang.blaze3d.platform.MemoryTracker; @@ -14,16 +16,12 @@ import net.minecraft.world.phys.Vec3; public class GlueModel implements Model { - public static final GlueModel INSTANCE = new GlueModel(); + public static final ModelSupplier INSTANCE = new SimpleModelSupplier(GlueModel::new); static final boolean USE_ATLAS = false; - public static GlueModel get() { - return INSTANCE; - } - private final VertexList reader; - private GlueModel() { + protected GlueModel() { PosTexNormalWriterUnsafe writer = Formats.POS_TEX_NORMAL.createWriter(MemoryTracker.create(size())); createGlueModel(writer); reader = writer.intoReader(); diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/pulley/HosePulleyInstance.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/pulley/HosePulleyInstance.java index 62d7c0e65..82ee19872 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/pulley/HosePulleyInstance.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/pulley/HosePulleyInstance.java @@ -15,27 +15,27 @@ public class HosePulleyInstance extends AbstractPulleyInstance { } protected Instancer getRopeModel() { - return getOrientedMaterial().getModel(AllBlockPartials.HOSE, blockState); + return getOrientedMaterial().getModel(AllBlockPartials.HOSE); } protected Instancer getMagnetModel() { return materialManager.defaultCutout() .material(Materials.ORIENTED) - .getModel(AllBlockPartials.HOSE_MAGNET, blockState); + .getModel(AllBlockPartials.HOSE_MAGNET); } protected Instancer getHalfMagnetModel() { return materialManager.defaultCutout() .material(Materials.ORIENTED) - .getModel(AllBlockPartials.HOSE_HALF_MAGNET, blockState); + .getModel(AllBlockPartials.HOSE_HALF_MAGNET); } protected Instancer getCoilModel() { - return getOrientedMaterial().getModel(AllBlockPartials.HOSE_COIL, blockState, rotatingAbout); + return getOrientedMaterial().getModel(AllBlockPartials.HOSE_COIL, rotatingAbout); } protected Instancer getHalfRopeModel() { - return getOrientedMaterial().getModel(AllBlockPartials.HOSE_HALF, blockState); + return getOrientedMaterial().getModel(AllBlockPartials.HOSE_HALF); } protected float getOffset() { diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/pulley/RopePulleyInstance.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/pulley/RopePulleyInstance.java index 5eac17ee0..f12027ff4 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/pulley/RopePulleyInstance.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/pulley/RopePulleyInstance.java @@ -22,15 +22,15 @@ public class RopePulleyInstance extends AbstractPulleyInstance { } protected Instancer getHalfMagnetModel() { - return getOrientedMaterial().getModel(AllBlockPartials.ROPE_HALF_MAGNET, blockState); + return getOrientedMaterial().getModel(AllBlockPartials.ROPE_HALF_MAGNET); } protected Instancer getCoilModel() { - return getOrientedMaterial().getModel(AllBlockPartials.ROPE_COIL, blockState, rotatingAbout); + return getOrientedMaterial().getModel(AllBlockPartials.ROPE_COIL, rotatingAbout); } protected Instancer getHalfRopeModel() { - return getOrientedMaterial().getModel(AllBlockPartials.ROPE_HALF, blockState); + return getOrientedMaterial().getModel(AllBlockPartials.ROPE_HALF); } protected float getOffset() { diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/render/FlwContraption.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/render/FlwContraption.java index 566f4aeed..e937d4347 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/render/FlwContraption.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/render/FlwContraption.java @@ -181,7 +181,7 @@ public class FlwContraption extends ContraptionRenderInfo { private final ContraptionInstanceManager tileInstanceManager; public ContraptionInstanceWorld(FlwContraption parent) { - switch (Backend.getEngine()) { + switch (Backend.getBackendType()) { case INSTANCING -> { InstancingEngine engine = InstancingEngine.builder(CreateContexts.CWORLD) .setGroupFactory(ContraptionGroup.forContraption(parent)) diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/render/FlwContraptionManager.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/render/FlwContraptionManager.java index 4b68fd1a8..4a50d28bb 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/render/FlwContraptionManager.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/render/FlwContraptionManager.java @@ -4,10 +4,10 @@ import static org.lwjgl.opengl.GL11.glBindTexture; import static org.lwjgl.opengl.GL12.GL_TEXTURE_3D; import com.jozufozu.flywheel.backend.Backend; -import com.jozufozu.flywheel.backend.RenderLayer; +import com.jozufozu.flywheel.api.RenderLayer; import com.jozufozu.flywheel.backend.gl.GlStateTracker; import com.jozufozu.flywheel.backend.gl.GlTextureUnit; -import com.jozufozu.flywheel.config.FlwEngine; +import com.jozufozu.flywheel.config.BackendType; import com.jozufozu.flywheel.core.Formats; import com.jozufozu.flywheel.core.Materials; import com.jozufozu.flywheel.core.compile.ProgramContext; @@ -43,7 +43,7 @@ public class FlwContraptionManager extends ContraptionRenderingWorld getModel() { BlockState referenceState = blockEntity.getBlockState(); Direction facing = referenceState.getValue(BlockStateProperties.FACING); - return getRotatingMaterial().getModel(AllBlockPartials.MECHANICAL_PUMP_COG, referenceState, facing); + return getRotatingMaterial().getModel(AllBlockPartials.MECHANICAL_PUMP_COG, facing); } @Override diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/FluidValveInstance.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/FluidValveInstance.java index d8d688604..ba772fded 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/FluidValveInstance.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/FluidValveInstance.java @@ -40,7 +40,7 @@ public class FluidValveInstance extends ShaftInstance implements DynamicInstance pointer = materialManager.defaultSolid() .material(Materials.TRANSFORMED) - .getModel(AllBlockPartials.FLUID_VALVE_POINTER, blockState).createInstance(); + .getModel(AllBlockPartials.FLUID_VALVE_POINTER).createInstance(); transformPointer(); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltInstance.java b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltInstance.java index 0a518ce6c..637a909ee 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltInstance.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltInstance.java @@ -62,9 +62,9 @@ public class BeltInstance extends KineticTileInstance { PartialModel beltPartial = BeltRenderer.getBeltPartial(diagonal, start, end, bottom); SpriteShiftEntry spriteShift = BeltRenderer.getSpriteShiftEntry(color, diagonal, bottom); - Instancer beltModel = materialManager.defaultSolid() - .material(AllMaterialSpecs.BELTS) - .getModel(beltPartial, blockState); + Instancer beltModel = materialManager.defaultSolid() + .material(AllMaterialSpecs.BELTS) + .getModel(beltPartial); keys.add(setup(beltModel.createInstance(), bottom, spriteShift)); @@ -143,7 +143,7 @@ public class BeltInstance extends KineticTileInstance { return modelTransform; }; - return getRotatingMaterial().getModel(AllBlockPartials.BELT_PULLEY, blockState, dir, ms); + return getRotatingMaterial().getModel(AllBlockPartials.BELT_PULLEY, dir, ms); } private Direction getOrientation() { diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/elementary/BracketedKineticTileInstance.java b/src/main/java/com/simibubi/create/content/contraptions/relays/elementary/BracketedKineticTileInstance.java index e6ab3d5ef..0eeb76a45 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/elementary/BracketedKineticTileInstance.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/elementary/BracketedKineticTileInstance.java @@ -38,8 +38,7 @@ public class BracketedKineticTileInstance extends SingleRotatingInstance { BlockPos pos = blockEntity.getBlockPos(); float offset = BracketedKineticTileRenderer.getShaftAngleOffset(axis, pos); Direction facing = Direction.fromAxisAndDirection(axis, AxisDirection.POSITIVE); - Instancer half = getRotatingMaterial().getModel(AllBlockPartials.COGWHEEL_SHAFT, blockState, - facing, () -> this.rotateToAxis(axis)); + Instancer half = getRotatingMaterial().getModel(AllBlockPartials.COGWHEEL_SHAFT, facing, () -> this.rotateToAxis(axis)); additionalShaft = setup(half.createInstance(), speed); additionalShaft.setRotationOffset(offset); @@ -52,7 +51,7 @@ public class BracketedKineticTileInstance extends SingleRotatingInstance { Axis axis = KineticTileEntityRenderer.getRotationAxisOf(blockEntity); Direction facing = Direction.fromAxisAndDirection(axis, AxisDirection.POSITIVE); - return getRotatingMaterial().getModel(AllBlockPartials.SHAFTLESS_LARGE_COGWHEEL, blockState, facing, + return getRotatingMaterial().getModel(AllBlockPartials.SHAFTLESS_LARGE_COGWHEEL, facing, () -> this.rotateToAxis(axis)); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/encased/EncasedCogInstance.java b/src/main/java/com/simibubi/create/content/contraptions/relays/encased/EncasedCogInstance.java index 62d6f45bc..e639affe0 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/encased/EncasedCogInstance.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/encased/EncasedCogInstance.java @@ -58,7 +58,7 @@ public class EncasedCogInstance extends KineticTileInstance { for (Direction d : Iterate.directionsInAxis(axis)) { if (!def.hasShaftTowards(blockEntity.getLevel(), blockEntity.getBlockPos(), blockState, d)) continue; - RotatingData data = setup(getRotatingMaterial().getModel(AllBlockPartials.SHAFT_HALF, blockState, d) + RotatingData data = setup(getRotatingMaterial().getModel(AllBlockPartials.SHAFT_HALF, d) .createInstance()); if (d.getAxisDirection() == AxisDirection.POSITIVE) rotatingTopShaft = Optional.of(data); @@ -94,7 +94,7 @@ public class EncasedCogInstance extends KineticTileInstance { Direction.fromAxisAndDirection(referenceState.getValue(BlockStateProperties.AXIS), AxisDirection.POSITIVE); PartialModel partial = large ? AllBlockPartials.SHAFTLESS_LARGE_COGWHEEL : AllBlockPartials.SHAFTLESS_COGWHEEL; - return getRotatingMaterial().getModel(partial, referenceState, facing, () -> { + return getRotatingMaterial().getModel(partial, facing, () -> { PoseStack poseStack = new PoseStack(); TransformStack.cast(poseStack) .centre() diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/encased/SplitShaftInstance.java b/src/main/java/com/simibubi/create/content/contraptions/relays/encased/SplitShaftInstance.java index d6ded2749..a2daa223d 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/encased/SplitShaftInstance.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/encased/SplitShaftInstance.java @@ -30,7 +30,7 @@ public class SplitShaftInstance extends KineticTileInstance half = rotatingMaterial.getModel(AllBlockPartials.SHAFT_HALF, blockState, dir); + Instancer half = rotatingMaterial.getModel(AllBlockPartials.SHAFT_HALF, dir); float splitSpeed = speed * tile.getRotationSpeedModifier(dir); diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/gauge/GaugeInstance.java b/src/main/java/com/simibubi/create/content/contraptions/relays/gauge/GaugeInstance.java index b27f44012..3da739fca 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/gauge/GaugeInstance.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/gauge/GaugeInstance.java @@ -32,7 +32,7 @@ public abstract class GaugeInstance extends ShaftInstance implements DynamicInst GaugeTileEntity gaugeTile = (GaugeTileEntity) tile; GaugeBlock gaugeBlock = (GaugeBlock) blockState.getBlock(); - Instancer dialModel = getTransformMaterial().getModel(AllBlockPartials.GAUGE_DIAL, blockState); + Instancer dialModel = getTransformMaterial().getModel(AllBlockPartials.GAUGE_DIAL); Instancer headModel = getHeadModel(); ms = new PoseStack(); @@ -150,7 +150,7 @@ public abstract class GaugeInstance extends ShaftInstance implements DynamicInst @Override protected Instancer getHeadModel() { - return getTransformMaterial().getModel(AllBlockPartials.GAUGE_HEAD_SPEED, blockState); + return getTransformMaterial().getModel(AllBlockPartials.GAUGE_HEAD_SPEED); } } @@ -161,7 +161,7 @@ public abstract class GaugeInstance extends ShaftInstance implements DynamicInst @Override protected Instancer getHeadModel() { - return getTransformMaterial().getModel(AllBlockPartials.GAUGE_HEAD_STRESS, blockState); + return getTransformMaterial().getModel(AllBlockPartials.GAUGE_HEAD_STRESS); } } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/gearbox/GearboxInstance.java b/src/main/java/com/simibubi/create/content/contraptions/relays/gearbox/GearboxInstance.java index ae7173155..5458da064 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/gearbox/GearboxInstance.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/gearbox/GearboxInstance.java @@ -40,7 +40,7 @@ public class GearboxInstance extends KineticTileInstance { if (boxAxis == axis) continue; - Instancer shaft = rotatingMaterial.getModel(AllBlockPartials.SHAFT_HALF, blockState, direction); + Instancer shaft = rotatingMaterial.getModel(AllBlockPartials.SHAFT_HALF, direction); RotatingData key = shaft.createInstance(); diff --git a/src/main/java/com/simibubi/create/content/curiosities/armor/CopperBacktankInstance.java b/src/main/java/com/simibubi/create/content/curiosities/armor/CopperBacktankInstance.java index 26d1b9139..3bf2cf240 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/armor/CopperBacktankInstance.java +++ b/src/main/java/com/simibubi/create/content/curiosities/armor/CopperBacktankInstance.java @@ -15,7 +15,7 @@ public class CopperBacktankInstance extends SingleRotatingInstance { @Override protected Instancer getModel() { - return getRotatingMaterial().getModel(AllBlockPartials.COPPER_BACKTANK_SHAFT, blockState); + return getRotatingMaterial().getModel(AllBlockPartials.COPPER_BACKTANK_SHAFT); } } diff --git a/src/main/java/com/simibubi/create/content/curiosities/toolbox/ToolBoxInstance.java b/src/main/java/com/simibubi/create/content/curiosities/toolbox/ToolBoxInstance.java index aac661c5e..79ec8d4dc 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/toolbox/ToolBoxInstance.java +++ b/src/main/java/com/simibubi/create/content/curiosities/toolbox/ToolBoxInstance.java @@ -32,12 +32,12 @@ public class ToolBoxInstance extends BlockEntityInstance impl Instancer drawerModel = materialManager.defaultSolid() .material(Materials.TRANSFORMED) - .getModel(AllBlockPartials.TOOLBOX_DRAWER, blockState); + .getModel(AllBlockPartials.TOOLBOX_DRAWER); drawers = new ModelData[]{drawerModel.createInstance(), drawerModel.createInstance()}; lid = materialManager.defaultCutout() .material(Materials.TRANSFORMED) - .getModel(AllBlockPartials.TOOLBOX_LIDS.get(blockEntity.getColor()), blockState) + .getModel(AllBlockPartials.TOOLBOX_LIDS.get(blockEntity.getColor())) .createInstance(); } diff --git a/src/main/java/com/simibubi/create/content/logistics/block/belts/tunnel/BeltTunnelInstance.java b/src/main/java/com/simibubi/create/content/logistics/block/belts/tunnel/BeltTunnelInstance.java index 9f0402373..34d9f6be8 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/belts/tunnel/BeltTunnelInstance.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/belts/tunnel/BeltTunnelInstance.java @@ -29,8 +29,8 @@ public class BeltTunnelInstance extends BlockEntityInstance(Direction.class); Instancer model = modelManager.defaultSolid() - .material(AllMaterialSpecs.FLAPS) - .getModel(AllBlockPartials.BELT_TUNNEL_FLAP, blockState); + .material(AllMaterialSpecs.FLAPS) + .getModel(AllBlockPartials.BELT_TUNNEL_FLAP); int blockLight = world.getBrightness(LightLayer.BLOCK, pos); int skyLight = world.getBrightness(LightLayer.SKY, pos); diff --git a/src/main/java/com/simibubi/create/content/logistics/block/depot/EjectorInstance.java b/src/main/java/com/simibubi/create/content/logistics/block/depot/EjectorInstance.java index 1a37a1141..ae76e46cb 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/depot/EjectorInstance.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/depot/EjectorInstance.java @@ -21,7 +21,7 @@ public class EjectorInstance extends ShaftInstance implements DynamicInstance { super(dispatcher, tile); this.tile = tile; - plate = getTransformMaterial().getModel(AllBlockPartials.EJECTOR_TOP, blockState).createInstance(); + plate = getTransformMaterial().getModel(AllBlockPartials.EJECTOR_TOP).createInstance(); pivotPlate(); } diff --git a/src/main/java/com/simibubi/create/content/logistics/block/diodes/BrassDiodeInstance.java b/src/main/java/com/simibubi/create/content/logistics/block/diodes/BrassDiodeInstance.java index 450726b17..a8fae6f8f 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/diodes/BrassDiodeInstance.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/diodes/BrassDiodeInstance.java @@ -19,7 +19,7 @@ public class BrassDiodeInstance extends BlockEntityInstance implem PartialModel flapPartial = (blockState.getBlock() instanceof FunnelBlock ? AllBlockPartials.FUNNEL_FLAP : AllBlockPartials.BELT_FUNNEL_FLAP); Instancer model = modelManager.defaultSolid() - .material(AllMaterialSpecs.FLAPS) - .getModel(flapPartial, blockState); + .material(AllMaterialSpecs.FLAPS) + .getModel(flapPartial); int blockLight = world.getBrightness(LightLayer.BLOCK, pos); int skyLight = world.getBrightness(LightLayer.SKY, pos); diff --git a/src/main/java/com/simibubi/create/content/logistics/block/mechanicalArm/ArmInstance.java b/src/main/java/com/simibubi/create/content/logistics/block/mechanicalArm/ArmInstance.java index 2feb23b98..859f126b7 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/mechanicalArm/ArmInstance.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/mechanicalArm/ArmInstance.java @@ -49,13 +49,13 @@ public class ArmInstance extends SingleRotatingInstance implements DynamicInstan Material mat = getTransformMaterial(); - base = mat.getModel(AllBlockPartials.ARM_BASE, blockState).createInstance(); - lowerBody = mat.getModel(AllBlockPartials.ARM_LOWER_BODY, blockState).createInstance(); - upperBody = mat.getModel(AllBlockPartials.ARM_UPPER_BODY, blockState).createInstance(); - head = mat.getModel(AllBlockPartials.ARM_HEAD, blockState).createInstance(); - claw = mat.getModel(AllBlockPartials.ARM_CLAW_BASE, blockState).createInstance(); + base = mat.getModel(AllBlockPartials.ARM_BASE).createInstance(); + lowerBody = mat.getModel(AllBlockPartials.ARM_LOWER_BODY).createInstance(); + upperBody = mat.getModel(AllBlockPartials.ARM_UPPER_BODY).createInstance(); + head = mat.getModel(AllBlockPartials.ARM_HEAD).createInstance(); + claw = mat.getModel(AllBlockPartials.ARM_CLAW_BASE).createInstance(); - Instancer clawHalfModel = mat.getModel(AllBlockPartials.ARM_CLAW_GRIP, blockState); + Instancer clawHalfModel = mat.getModel(AllBlockPartials.ARM_CLAW_GRIP); ModelData clawGrip1 = clawHalfModel.createInstance(); ModelData clawGrip2 = clawHalfModel.createInstance(); @@ -172,7 +172,7 @@ public class ArmInstance extends SingleRotatingInstance implements DynamicInstan @Override protected Instancer getModel() { - return getRotatingMaterial().getModel(AllBlockPartials.ARM_COG, blockEntity.getBlockState()); + return getRotatingMaterial().getModel(AllBlockPartials.ARM_COG); } @Override diff --git a/src/main/java/com/simibubi/create/content/logistics/block/redstone/AnalogLeverInstance.java b/src/main/java/com/simibubi/create/content/logistics/block/redstone/AnalogLeverInstance.java index 4195b9dde..1e0ce0a05 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/redstone/AnalogLeverInstance.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/redstone/AnalogLeverInstance.java @@ -28,8 +28,8 @@ public class AnalogLeverInstance extends BlockEntityInstance mat = getTransformMaterial(); - handle = mat.getModel(AllBlockPartials.ANALOG_LEVER_HANDLE, blockState).createInstance(); - indicator = mat.getModel(AllBlockPartials.ANALOG_LEVER_INDICATOR, blockState).createInstance(); + handle = mat.getModel(AllBlockPartials.ANALOG_LEVER_HANDLE).createInstance(); + indicator = mat.getModel(AllBlockPartials.ANALOG_LEVER_INDICATOR).createInstance(); transform(indicator); diff --git a/src/main/java/com/simibubi/create/content/schematics/block/SchematicannonInstance.java b/src/main/java/com/simibubi/create/content/schematics/block/SchematicannonInstance.java index fc68495df..80ccf0598 100644 --- a/src/main/java/com/simibubi/create/content/schematics/block/SchematicannonInstance.java +++ b/src/main/java/com/simibubi/create/content/schematics/block/SchematicannonInstance.java @@ -22,8 +22,8 @@ public class SchematicannonInstance extends BlockEntityInstance mat = getTransformMaterial(); - connector = mat.getModel(AllBlockPartials.SCHEMATICANNON_CONNECTOR, blockState).createInstance(); - pipe = mat.getModel(AllBlockPartials.SCHEMATICANNON_PIPE, blockState).createInstance(); + connector = mat.getModel(AllBlockPartials.SCHEMATICANNON_CONNECTOR).createInstance(); + pipe = mat.getModel(AllBlockPartials.SCHEMATICANNON_PIPE).createInstance(); } @Override diff --git a/src/main/resources/META-INF/mods.toml b/src/main/resources/META-INF/mods.toml index 4c8b47241..5d823cc34 100644 --- a/src/main/resources/META-INF/mods.toml +++ b/src/main/resources/META-INF/mods.toml @@ -32,6 +32,6 @@ Technology that empowers the player.''' [[dependencies.create]] modId="flywheel" mandatory=true - versionRange="[1.18-0.6.2,1.18-0.6.3)" + versionRange="[1.18-0.7.0,1.18-0.7.1)" ordering="AFTER" side="CLIENT" From f8ef7be48ddac73275ec0f7a67388c7e314c7ec4 Mon Sep 17 00:00:00 2001 From: glutzer Date: Sun, 24 Apr 2022 16:31:29 -0500 Subject: [PATCH 05/31] Update FluidFillingBehaviour.java now properly fills infinitely --- .../fluids/actors/FluidFillingBehaviour.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/FluidFillingBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/FluidFillingBehaviour.java index 98a1d6278..b221fba44 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/FluidFillingBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/FluidFillingBehaviour.java @@ -72,7 +72,7 @@ public class FluidFillingBehaviour extends FluidManipulationBehaviour { (p, d) -> infinityCheckFrontier.add(new BlockPosEntry(p, d)), true); int maxBlocks = maxBlocks(); - if (infinityCheckVisited.size() > maxBlocks && maxBlocks != -1) { + if (infinityCheckVisited.size() > maxBlocks && maxBlocks != -1 && !fillInfinite()) { if (!infinite) { reset(); infinite = true; @@ -163,9 +163,11 @@ public class FluidFillingBehaviour extends FluidManipulationBehaviour { if (visited.size() >= maxBlocks && maxBlocks != -1) { infinite = true; - visited.clear(); - queue.clear(); - return false; + if (!fillInfinite()) { + visited.clear(); + queue.clear(); + return false; + } } SpaceType spaceType = getAtPos(world, currentPos, fluid); From 149d5b98603a12b06723241cad6ae6305bc8648f Mon Sep 17 00:00:00 2001 From: Fortress Nebula <79470293+FortressNebula@users.noreply.github.com> Date: Mon, 25 Apr 2022 18:45:05 +0100 Subject: [PATCH 06/31] Make `BasinRecipe` use `IRecipeTypeInfo` --- .../create/content/contraptions/processing/BasinRecipe.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/simibubi/create/content/contraptions/processing/BasinRecipe.java b/src/main/java/com/simibubi/create/content/contraptions/processing/BasinRecipe.java index a2b7b0e0e..b51643b44 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/processing/BasinRecipe.java +++ b/src/main/java/com/simibubi/create/content/contraptions/processing/BasinRecipe.java @@ -8,6 +8,8 @@ import java.util.List; import javax.annotation.Nonnull; + +import com.simibubi.create.foundation.utility.recipe.IRecipeTypeInfo; import com.simibubi.create.AllRecipeTypes; import com.simibubi.create.content.contraptions.processing.ProcessingRecipeBuilder.ProcessingRecipeParams; import com.simibubi.create.content.contraptions.processing.burner.BlazeBurnerBlock.HeatLevel; @@ -173,7 +175,7 @@ public class BasinRecipe extends ProcessingRecipe { return basinRecipe; } - protected BasinRecipe(AllRecipeTypes type, ProcessingRecipeParams params) { + protected BasinRecipe(IRecipeTypeInfo type, ProcessingRecipeParams params) { super(type, params); } From d8dd101fdf5c6e755b28b6f300e1e7fc10816c99 Mon Sep 17 00:00:00 2001 From: PepperCode1 <44146161+PepperCode1@users.noreply.github.com> Date: Sat, 7 May 2022 22:19:12 -0700 Subject: [PATCH 07/31] Types of points - Refactor the ArmInteractionPoint system - ArmInteractionPointTypes are now used instead of instances - Point types can now have a priority that determines the primary type at a certain location - Points can now deserialize arbitrary data - Points' cached BlockState is now updated before it is used - Points now store the Level directly - Default types are now registered in AllArmInteractionPointTypes - Add point types for campfires and respawn anchors - Fix arms being able to insert any item into composters - Delete unused flag models and texture - Make all BehaviorType instances final --- .../com/simibubi/create/AllBlockPartials.java | 3 - src/main/java/com/simibubi/create/Create.java | 2 + .../fluids/actors/FluidDrainingBehaviour.java | 4 +- .../fluids/actors/FluidFillingBehaviour.java | 4 +- .../logistics/block/depot/DepotBehaviour.java | 2 +- .../AllArmInteractionPointTypes.java | 689 ++++++++++++++++++ .../block/mechanicalArm/ArmAngleTarget.java | 2 +- .../mechanicalArm/ArmInteractionPoint.java | 542 +++----------- .../ArmInteractionPointHandler.java | 33 +- .../ArmInteractionPointType.java | 66 ++ .../block/mechanicalArm/ArmTileEntity.java | 75 +- .../logistics/item/filter/ItemAttribute.java | 22 +- .../TransportedItemStackHandlerBehaviour.java | 3 +- .../filtering/FilteringBehaviour.java | 2 +- .../fluid/SmartFluidTankBehaviour.java | 4 +- .../inventory/TankManipulationBehaviour.java | 2 +- .../behaviour/linked/LinkBehaviour.java | 2 +- .../scrollvalue/ScrollValueBehaviour.java | 2 +- .../behaviour/simple/DeferralBehaviour.java | 2 +- .../block/mechanical_arm/flag/long_in.json | 31 - .../block/mechanical_arm/flag/long_out.json | 31 - .../block/mechanical_arm/flag/short_in.json | 31 - .../block/mechanical_arm/flag/short_out.json | 31 - .../create/textures/block/marker_flag.png | Bin 196 -> 0 bytes 24 files changed, 942 insertions(+), 643 deletions(-) create mode 100644 src/main/java/com/simibubi/create/content/logistics/block/mechanicalArm/AllArmInteractionPointTypes.java create mode 100644 src/main/java/com/simibubi/create/content/logistics/block/mechanicalArm/ArmInteractionPointType.java delete mode 100644 src/main/resources/assets/create/models/block/mechanical_arm/flag/long_in.json delete mode 100644 src/main/resources/assets/create/models/block/mechanical_arm/flag/long_out.json delete mode 100644 src/main/resources/assets/create/models/block/mechanical_arm/flag/short_in.json delete mode 100644 src/main/resources/assets/create/models/block/mechanical_arm/flag/short_out.json delete mode 100644 src/main/resources/assets/create/textures/block/marker_flag.png diff --git a/src/main/java/com/simibubi/create/AllBlockPartials.java b/src/main/java/com/simibubi/create/AllBlockPartials.java index fb4ea5e54..077d5747b 100644 --- a/src/main/java/com/simibubi/create/AllBlockPartials.java +++ b/src/main/java/com/simibubi/create/AllBlockPartials.java @@ -89,9 +89,6 @@ public class AllBlockPartials { ARM_HEAD = block("mechanical_arm/head"), ARM_CLAW_BASE = block("mechanical_arm/claw_base"), ARM_CLAW_GRIP = block("mechanical_arm/claw_grip"), - FLAG_SHORT_IN = block("mechanical_arm/flag/short_in"), FLAG_SHORT_OUT = block("mechanical_arm/flag/short_out"), - FLAG_LONG_IN = block("mechanical_arm/flag/long_in"), FLAG_LONG_OUT = block("mechanical_arm/flag/long_out"), - MECHANICAL_PUMP_ARROW = block("mechanical_pump/arrow"), MECHANICAL_PUMP_COG = block("mechanical_pump/cog"), FLUID_PIPE_CASING = block("fluid_pipe/casing"), FLUID_VALVE_POINTER = block("fluid_valve/pointer"), diff --git a/src/main/java/com/simibubi/create/Create.java b/src/main/java/com/simibubi/create/Create.java index c27666bd6..951b0f95e 100644 --- a/src/main/java/com/simibubi/create/Create.java +++ b/src/main/java/com/simibubi/create/Create.java @@ -13,6 +13,7 @@ import com.simibubi.create.content.contraptions.TorquePropagator; import com.simibubi.create.content.contraptions.components.flywheel.engine.FurnaceEngineInteractions; import com.simibubi.create.content.curiosities.weapons.BuiltinPotatoProjectileTypes; import com.simibubi.create.content.logistics.RedstoneLinkNetworkHandler; +import com.simibubi.create.content.logistics.block.mechanicalArm.AllArmInteractionPointTypes; import com.simibubi.create.content.palettes.AllPaletteBlocks; import com.simibubi.create.content.palettes.PalettesItemGroup; import com.simibubi.create.content.schematics.SchematicProcessor; @@ -94,6 +95,7 @@ public class Create { AllTileEntities.register(); AllMovementBehaviours.register(); AllInteractionBehaviours.register(); + AllArmInteractionPointTypes.register(); AllWorldFeatures.register(); AllEnchantments.register(); AllConfigs.register(modLoadingContext); diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/FluidDrainingBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/FluidDrainingBehaviour.java index 58b2d3f29..c538b7ef4 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/FluidDrainingBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/FluidDrainingBehaviour.java @@ -30,6 +30,8 @@ import net.minecraftforge.fluids.FluidStack; public class FluidDrainingBehaviour extends FluidManipulationBehaviour { + public static final BehaviourType TYPE = new BehaviourType<>(); + Fluid fluid; // Execution @@ -322,8 +324,6 @@ public class FluidDrainingBehaviour extends FluidManipulationBehaviour { tileEntity.sendData(); } - public static BehaviourType TYPE = new BehaviourType<>(); - @Override public BehaviourType getType() { return TYPE; diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/FluidFillingBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/FluidFillingBehaviour.java index 98a1d6278..344e57610 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/FluidFillingBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/FluidFillingBehaviour.java @@ -41,6 +41,8 @@ import net.minecraft.world.ticks.LevelTicks; public class FluidFillingBehaviour extends FluidManipulationBehaviour { + public static final BehaviourType TYPE = new BehaviourType<>(); + PriorityQueue queue; List infinityCheckFrontier; @@ -298,8 +300,6 @@ public class FluidFillingBehaviour extends FluidManipulationBehaviour { infinityCheckVisited.clear(); } - public static BehaviourType TYPE = new BehaviourType<>(); - @Override public BehaviourType getType() { return TYPE; diff --git a/src/main/java/com/simibubi/create/content/logistics/block/depot/DepotBehaviour.java b/src/main/java/com/simibubi/create/content/logistics/block/depot/DepotBehaviour.java index f2f5e3e59..0fef416a1 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/depot/DepotBehaviour.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/depot/DepotBehaviour.java @@ -40,7 +40,7 @@ import net.minecraftforge.items.ItemStackHandler; public class DepotBehaviour extends TileEntityBehaviour { - public static BehaviourType TYPE = new BehaviourType<>(); + public static final BehaviourType TYPE = new BehaviourType<>(); TransportedItemStack heldItem; List incoming; diff --git a/src/main/java/com/simibubi/create/content/logistics/block/mechanicalArm/AllArmInteractionPointTypes.java b/src/main/java/com/simibubi/create/content/logistics/block/mechanicalArm/AllArmInteractionPointTypes.java new file mode 100644 index 000000000..77178b5bb --- /dev/null +++ b/src/main/java/com/simibubi/create/content/logistics/block/mechanicalArm/AllArmInteractionPointTypes.java @@ -0,0 +1,689 @@ +package com.simibubi.create.content.logistics.block.mechanicalArm; + +import java.util.Optional; +import java.util.function.Function; + +import javax.annotation.Nullable; + +import org.apache.commons.lang3.mutable.MutableBoolean; + +import com.simibubi.create.AllBlocks; +import com.simibubi.create.Create; +import com.simibubi.create.content.contraptions.base.KineticTileEntity; +import com.simibubi.create.content.contraptions.components.crafter.MechanicalCrafterBlock; +import com.simibubi.create.content.contraptions.components.crafter.MechanicalCrafterTileEntity; +import com.simibubi.create.content.contraptions.components.deployer.DeployerBlock; +import com.simibubi.create.content.contraptions.components.saw.SawBlock; +import com.simibubi.create.content.contraptions.processing.burner.BlazeBurnerBlock; +import com.simibubi.create.content.contraptions.relays.belt.BeltHelper; +import com.simibubi.create.content.contraptions.relays.belt.BeltTileEntity; +import com.simibubi.create.content.logistics.block.belts.tunnel.BeltTunnelBlock; +import com.simibubi.create.content.logistics.block.chute.AbstractChuteBlock; +import com.simibubi.create.content.logistics.block.funnel.AbstractFunnelBlock; +import com.simibubi.create.content.logistics.block.funnel.BeltFunnelBlock; +import com.simibubi.create.content.logistics.block.funnel.BeltFunnelBlock.Shape; +import com.simibubi.create.content.logistics.block.funnel.FunnelBlock; +import com.simibubi.create.content.logistics.block.funnel.FunnelTileEntity; +import com.simibubi.create.foundation.advancement.AllTriggers; +import com.simibubi.create.foundation.item.SmartInventory; +import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; +import com.simibubi.create.foundation.tileEntity.behaviour.belt.TransportedItemStackHandlerBehaviour; +import com.simibubi.create.foundation.tileEntity.behaviour.belt.TransportedItemStackHandlerBehaviour.TransportedResult; +import com.simibubi.create.foundation.tileEntity.behaviour.filtering.FilteringBehaviour; +import com.simibubi.create.foundation.tileEntity.behaviour.inventory.InvManipulationBehaviour; +import com.simibubi.create.foundation.utility.VecHelper; + +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.Containers; +import net.minecraft.world.InteractionResultHolder; +import net.minecraft.world.WorldlyContainer; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.world.item.RecordItem; +import net.minecraft.world.item.crafting.CampfireCookingRecipe; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.CampfireBlock; +import net.minecraft.world.level.block.ComposterBlock; +import net.minecraft.world.level.block.JukeboxBlock; +import net.minecraft.world.level.block.RespawnAnchorBlock; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.CampfireBlockEntity; +import net.minecraft.world.level.block.entity.JukeboxBlockEntity; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.properties.BlockStateProperties; +import net.minecraft.world.phys.Vec3; +import net.minecraftforge.common.util.LazyOptional; +import net.minecraftforge.items.IItemHandler; +import net.minecraftforge.items.wrapper.CombinedInvWrapper; +import net.minecraftforge.items.wrapper.SidedInvWrapper; + +public class AllArmInteractionPointTypes { + + public static final BasinType BASIN = register("basin", BasinType::new); + public static final BeltType BELT = register("belt", BeltType::new); + public static final BlazeBurnerType BLAZE_BURNER = register("blaze_burner", BlazeBurnerType::new); + public static final ChuteType CHUTE = register("chute", ChuteType::new); + public static final CrafterType CRAFTER = register("crafter", CrafterType::new); + public static final CrushingWheelsType CRUSHING_WHEELS = register("crushing_wheels", CrushingWheelsType::new); + public static final DeployerType DEPLOYER = register("deployer", DeployerType::new); + public static final DepotType DEPOT = register("depot", DepotType::new); + public static final FunnelType FUNNEL = register("funnel", FunnelType::new); + public static final MillstoneType MILLSTONE = register("millstone", MillstoneType::new); + public static final SawType SAW = register("saw", SawType::new); + + public static final CampfireType CAMPFIRE = register("campfire", CampfireType::new); + public static final ComposterType COMPOSTER = register("composter", ComposterType::new); + public static final JukeboxType JUKEBOX = register("jukebox", JukeboxType::new); + public static final RespawnAnchorType RESPAWN_ANCHOR = register("respawn_anchor", RespawnAnchorType::new); + + private static T register(String id, Function factory) { + T type = factory.apply(Create.asResource(id)); + ArmInteractionPointType.register(type); + return type; + } + + public static void register() { + } + + // + + public static class BasinType extends ArmInteractionPointType { + public BasinType(ResourceLocation id) { + super(id); + } + + @Override + public boolean canCreatePoint(Level level, BlockPos pos, BlockState state) { + return AllBlocks.BASIN.has(state); + } + + @Override + public ArmInteractionPoint createPoint(Level level, BlockPos pos, BlockState state) { + return new ArmInteractionPoint(this, level, pos, state); + } + } + + public static class BeltType extends ArmInteractionPointType { + public BeltType(ResourceLocation id) { + super(id); + } + + @Override + public boolean canCreatePoint(Level level, BlockPos pos, BlockState state) { + return AllBlocks.BELT.has(state) && !(level.getBlockState(pos.above()) + .getBlock() instanceof BeltTunnelBlock); + } + + @Override + public ArmInteractionPoint createPoint(Level level, BlockPos pos, BlockState state) { + return new BeltPoint(this, level, pos, state); + } + } + + public static class BlazeBurnerType extends ArmInteractionPointType { + public BlazeBurnerType(ResourceLocation id) { + super(id); + } + + @Override + public boolean canCreatePoint(Level level, BlockPos pos, BlockState state) { + return AllBlocks.BLAZE_BURNER.has(state); + } + + @Override + public ArmInteractionPoint createPoint(Level level, BlockPos pos, BlockState state) { + return new BlazeBurnerPoint(this, level, pos, state); + } + } + + public static class ChuteType extends ArmInteractionPointType { + public ChuteType(ResourceLocation id) { + super(id); + } + + @Override + public boolean canCreatePoint(Level level, BlockPos pos, BlockState state) { + return AbstractChuteBlock.isChute(state); + } + + @Override + public ArmInteractionPoint createPoint(Level level, BlockPos pos, BlockState state) { + return new TopFaceArmInteractionPoint(this, level, pos, state); + } + } + + public static class CrafterType extends ArmInteractionPointType { + public CrafterType(ResourceLocation id) { + super(id); + } + + @Override + public boolean canCreatePoint(Level level, BlockPos pos, BlockState state) { + return AllBlocks.MECHANICAL_CRAFTER.has(state); + } + + @Override + public ArmInteractionPoint createPoint(Level level, BlockPos pos, BlockState state) { + return new CrafterPoint(this, level, pos, state); + } + } + + public static class CrushingWheelsType extends ArmInteractionPointType { + public CrushingWheelsType(ResourceLocation id) { + super(id); + } + + @Override + public boolean canCreatePoint(Level level, BlockPos pos, BlockState state) { + return AllBlocks.CRUSHING_WHEEL_CONTROLLER.has(state); + } + + @Override + public ArmInteractionPoint createPoint(Level level, BlockPos pos, BlockState state) { + return new TopFaceArmInteractionPoint(this, level, pos, state); + } + } + + public static class DeployerType extends ArmInteractionPointType { + public DeployerType(ResourceLocation id) { + super(id); + } + + @Override + public boolean canCreatePoint(Level level, BlockPos pos, BlockState state) { + return AllBlocks.DEPLOYER.has(state); + } + + @Override + public ArmInteractionPoint createPoint(Level level, BlockPos pos, BlockState state) { + return new DeployerPoint(this, level, pos, state); + } + } + + public static class DepotType extends ArmInteractionPointType { + public DepotType(ResourceLocation id) { + super(id); + } + + @Override + public boolean canCreatePoint(Level level, BlockPos pos, BlockState state) { + return AllBlocks.DEPOT.has(state) || AllBlocks.WEIGHTED_EJECTOR.has(state); + } + + @Override + public ArmInteractionPoint createPoint(Level level, BlockPos pos, BlockState state) { + return new DepotPoint(this, level, pos, state); + } + } + + public static class FunnelType extends ArmInteractionPointType { + public FunnelType(ResourceLocation id) { + super(id); + } + + @Override + public boolean canCreatePoint(Level level, BlockPos pos, BlockState state) { + return state.getBlock() instanceof AbstractFunnelBlock + && !(state.hasProperty(FunnelBlock.EXTRACTING) && state.getValue(FunnelBlock.EXTRACTING)) + && !(state.hasProperty(BeltFunnelBlock.SHAPE) && state.getValue(BeltFunnelBlock.SHAPE) == Shape.PUSHING); + } + + @Override + public ArmInteractionPoint createPoint(Level level, BlockPos pos, BlockState state) { + return new FunnelPoint(this, level, pos, state); + } + } + + public static class MillstoneType extends ArmInteractionPointType { + public MillstoneType(ResourceLocation id) { + super(id); + } + + @Override + public boolean canCreatePoint(Level level, BlockPos pos, BlockState state) { + return AllBlocks.MILLSTONE.has(state); + } + + @Override + public ArmInteractionPoint createPoint(Level level, BlockPos pos, BlockState state) { + return new ArmInteractionPoint(this, level, pos, state); + } + } + + public static class SawType extends ArmInteractionPointType { + public SawType(ResourceLocation id) { + super(id); + } + + @Override + public boolean canCreatePoint(Level level, BlockPos pos, BlockState state) { + return AllBlocks.MECHANICAL_SAW.has(state) && state.getValue(SawBlock.FACING) == Direction.UP + && ((KineticTileEntity) level.getBlockEntity(pos)).getSpeed() != 0; + } + + @Override + public ArmInteractionPoint createPoint(Level level, BlockPos pos, BlockState state) { + return new DepotPoint(this, level, pos, state); + } + } + + public static class CampfireType extends ArmInteractionPointType { + public CampfireType(ResourceLocation id) { + super(id); + } + + @Override + public boolean canCreatePoint(Level level, BlockPos pos, BlockState state) { + return state.getBlock() instanceof CampfireBlock; + } + + @Override + public ArmInteractionPoint createPoint(Level level, BlockPos pos, BlockState state) { + return new CampfirePoint(this, level, pos, state); + } + } + + public static class ComposterType extends ArmInteractionPointType { + public ComposterType(ResourceLocation id) { + super(id); + } + + @Override + public boolean canCreatePoint(Level level, BlockPos pos, BlockState state) { + return state.is(Blocks.COMPOSTER); + } + + @Override + public ArmInteractionPoint createPoint(Level level, BlockPos pos, BlockState state) { + return new ComposterPoint(this, level, pos, state); + } + } + + public static class JukeboxType extends ArmInteractionPointType { + public JukeboxType(ResourceLocation id) { + super(id); + } + + @Override + public boolean canCreatePoint(Level level, BlockPos pos, BlockState state) { + return state.is(Blocks.JUKEBOX); + } + + @Override + public ArmInteractionPoint createPoint(Level level, BlockPos pos, BlockState state) { + return new JukeboxPoint(this, level, pos, state); + } + } + + public static class RespawnAnchorType extends ArmInteractionPointType { + public RespawnAnchorType(ResourceLocation id) { + super(id); + } + + @Override + public boolean canCreatePoint(Level level, BlockPos pos, BlockState state) { + return state.is(Blocks.RESPAWN_ANCHOR); + } + + @Override + public ArmInteractionPoint createPoint(Level level, BlockPos pos, BlockState state) { + return new RespawnAnchorPoint(this, level, pos, state); + } + } + + // + + public static class DepositOnlyArmInteractionPoint extends ArmInteractionPoint { + public DepositOnlyArmInteractionPoint(ArmInteractionPointType type, Level level, BlockPos pos, BlockState state) { + super(type, level, pos, state); + } + + @Override + public void cycleMode() { + } + + @Override + public ItemStack extract(int slot, int amount, boolean simulate) { + return ItemStack.EMPTY; + } + + @Override + public int getSlotCount() { + return 0; + } + } + + public static class TopFaceArmInteractionPoint extends ArmInteractionPoint { + public TopFaceArmInteractionPoint(ArmInteractionPointType type, Level level, BlockPos pos, BlockState state) { + super(type, level, pos, state); + } + + @Override + protected Vec3 getInteractionPositionVector() { + return Vec3.atLowerCornerOf(pos).add(.5f, 1, .5f); + } + } + + public static class BeltPoint extends DepotPoint { + public BeltPoint(ArmInteractionPointType type, Level level, BlockPos pos, BlockState state) { + super(type, level, pos, state); + } + + @Override + public void keepAlive() { + super.keepAlive(); + BeltTileEntity beltTE = BeltHelper.getSegmentTE(level, pos); + if (beltTE == null) + return; + TransportedItemStackHandlerBehaviour transport = + beltTE.getBehaviour(TransportedItemStackHandlerBehaviour.TYPE); + if (transport == null) + return; + MutableBoolean found = new MutableBoolean(false); + transport.handleProcessingOnAllItems(tis -> { + if (found.isTrue()) + return TransportedResult.doNothing(); + tis.lockedExternally = true; + found.setTrue(); + return TransportedResult.doNothing(); + }); + } + } + + public static class BlazeBurnerPoint extends DepositOnlyArmInteractionPoint { + public BlazeBurnerPoint(ArmInteractionPointType type, Level level, BlockPos pos, BlockState state) { + super(type, level, pos, state); + } + + @Override + public ItemStack insert(ItemStack stack, boolean simulate) { + ItemStack input = stack.copy(); + InteractionResultHolder res = BlazeBurnerBlock.tryInsert(cachedState, level, pos, input, false, false, simulate); + ItemStack remainder = res.getObject(); + if (input.isEmpty()) { + return remainder; + } else { + if (!simulate) + Containers.dropItemStack(level, pos.getX(), pos.getY(), pos.getZ(), remainder); + return input; + } + } + } + + public static class CrafterPoint extends ArmInteractionPoint { + public CrafterPoint(ArmInteractionPointType type, Level level, BlockPos pos, BlockState state) { + super(type, level, pos, state); + } + + @Override + protected Direction getInteractionDirection() { + return cachedState.getValue(MechanicalCrafterBlock.HORIZONTAL_FACING) + .getOpposite(); + } + + @Override + protected Vec3 getInteractionPositionVector() { + return super.getInteractionPositionVector() + .add(Vec3.atLowerCornerOf(getInteractionDirection().getNormal()).scale(.5f)); + } + + @Override + public void updateCachedState() { + BlockState oldState = cachedState; + super.updateCachedState(); + if (oldState != cachedState) + cachedAngles = null; + } + + @Override + public ItemStack extract(int slot, int amount, boolean simulate) { + BlockEntity te = level.getBlockEntity(pos); + if (!(te instanceof MechanicalCrafterTileEntity)) + return ItemStack.EMPTY; + MechanicalCrafterTileEntity crafter = (MechanicalCrafterTileEntity) te; + SmartInventory inventory = crafter.getInventory(); + inventory.allowExtraction(); + ItemStack extract = super.extract(slot, amount, simulate); + inventory.forbidExtraction(); + return extract; + } + } + + public static class DeployerPoint extends ArmInteractionPoint { + public DeployerPoint(ArmInteractionPointType type, Level level, BlockPos pos, BlockState state) { + super(type, level, pos, state); + } + + @Override + protected Direction getInteractionDirection() { + return cachedState.getValue(DeployerBlock.FACING) + .getOpposite(); + } + + @Override + protected Vec3 getInteractionPositionVector() { + return super.getInteractionPositionVector() + .add(Vec3.atLowerCornerOf(getInteractionDirection().getNormal()).scale(.65f)); + } + + @Override + public void updateCachedState() { + BlockState oldState = cachedState; + super.updateCachedState(); + if (oldState != cachedState) + cachedAngles = null; + } + } + + public static class DepotPoint extends ArmInteractionPoint { + public DepotPoint(ArmInteractionPointType type, Level level, BlockPos pos, BlockState state) { + super(type, level, pos, state); + } + + @Override + protected Vec3 getInteractionPositionVector() { + return Vec3.atLowerCornerOf(pos).add(.5f, 14 / 16f, .5f); + } + } + + public static class FunnelPoint extends DepositOnlyArmInteractionPoint { + public FunnelPoint(ArmInteractionPointType type, Level level, BlockPos pos, BlockState state) { + super(type, level, pos, state); + } + + @Override + protected Vec3 getInteractionPositionVector() { + return VecHelper.getCenterOf(pos) + .add(Vec3.atLowerCornerOf(FunnelBlock.getFunnelFacing(cachedState) + .getNormal()).scale(-.15f)); + } + + @Override + protected Direction getInteractionDirection() { + return FunnelBlock.getFunnelFacing(cachedState) + .getOpposite(); + } + + @Override + public void updateCachedState() { + BlockState oldState = cachedState; + super.updateCachedState(); + if (oldState != cachedState) + cachedAngles = null; + } + + @Override + public ItemStack insert(ItemStack stack, boolean simulate) { + FilteringBehaviour filtering = TileEntityBehaviour.get(level, pos, FilteringBehaviour.TYPE); + InvManipulationBehaviour inserter = TileEntityBehaviour.get(level, pos, InvManipulationBehaviour.TYPE); + if (cachedState.getOptionalValue(BlockStateProperties.POWERED).orElse(false)) + return stack; + if (inserter == null) + return stack; + if (filtering != null && !filtering.test(stack)) + return stack; + if (simulate) + inserter.simulate(); + ItemStack insert = inserter.insert(stack); + if (!simulate && insert.getCount() != stack.getCount()) { + BlockEntity tileEntity = level.getBlockEntity(pos); + if (tileEntity instanceof FunnelTileEntity) { + FunnelTileEntity funnelTileEntity = (FunnelTileEntity) tileEntity; + funnelTileEntity.onTransfer(stack); + if (funnelTileEntity.hasFlap()) + funnelTileEntity.flap(true); + } + } + return insert; + } + } + + public static class CampfirePoint extends DepositOnlyArmInteractionPoint { + public CampfirePoint(ArmInteractionPointType type, Level level, BlockPos pos, BlockState state) { + super(type, level, pos, state); + } + + @Override + public ItemStack insert(ItemStack stack, boolean simulate) { + BlockEntity blockEntity = level.getBlockEntity(pos); + if (!(blockEntity instanceof CampfireBlockEntity campfireBE)) + return stack; + Optional recipe = campfireBE.getCookableRecipe(stack); + if (recipe.isEmpty()) + return stack; + if (simulate) { + boolean hasSpace = false; + for (ItemStack campfireStack : campfireBE.getItems()) { + if (campfireStack.isEmpty()) { + hasSpace = true; + break; + } + } + if (!hasSpace) + return stack; + ItemStack remainder = stack.copy(); + remainder.shrink(1); + return remainder; + } + ItemStack remainder = stack.copy(); + campfireBE.placeFood(remainder, recipe.get().getCookingTime()); + return remainder; + } + } + + public static class ComposterPoint extends ArmInteractionPoint { + public ComposterPoint(ArmInteractionPointType type, Level level, BlockPos pos, BlockState state) { + super(type, level, pos, state); + } + + @Override + protected Vec3 getInteractionPositionVector() { + return Vec3.atLowerCornerOf(pos).add(.5f, 13 / 16f, .5f); + } + + @Override + public void updateCachedState() { + BlockState oldState = cachedState; + super.updateCachedState(); + if (oldState != cachedState) + cachedHandler.invalidate(); + } + + @Nullable + @Override + protected IItemHandler getHandler() { + if (!cachedHandler.isPresent()) { + cachedHandler = LazyOptional.of(() -> { + ComposterBlock composterBlock = (ComposterBlock) Blocks.COMPOSTER; + WorldlyContainer container = composterBlock.getContainer(cachedState, level, pos); + SidedInvWrapper insertionHandler = new SidedInvWrapper(container, Direction.UP); + SidedInvWrapper extractionHandler = new SidedInvWrapper(container, Direction.DOWN); + return new CombinedInvWrapper(insertionHandler, extractionHandler); + }); + } + return cachedHandler.orElse(null); + } + } + + public static class JukeboxPoint extends TopFaceArmInteractionPoint { + public JukeboxPoint(ArmInteractionPointType type, Level level, BlockPos pos, BlockState state) { + super(type, level, pos, state); + } + + @Override + public int getSlotCount() { + return 1; + } + + @Override + public ItemStack insert(ItemStack stack, boolean simulate) { + Item item = stack.getItem(); + if (!(item instanceof RecordItem)) + return stack; + if (cachedState.getValue(JukeboxBlock.HAS_RECORD)) + return stack; + BlockEntity blockEntity = level.getBlockEntity(pos); + if (!(blockEntity instanceof JukeboxBlockEntity jukeboxBE)) + return stack; + if (!jukeboxBE.getRecord() + .isEmpty()) + return stack; + ItemStack remainder = stack.copy(); + ItemStack toInsert = remainder.split(1); + if (!simulate) { + jukeboxBE.setRecord(toInsert); + level.setBlock(pos, cachedState.setValue(JukeboxBlock.HAS_RECORD, true), 2); + level.levelEvent(null, 1010, pos, Item.getId(item)); + AllTriggers.triggerForNearbyPlayers(AllTriggers.MUSICAL_ARM, level, pos, 10); + } + return remainder; + } + + @Override + public ItemStack extract(int slot, int amount, boolean simulate) { + if (!cachedState.getValue(JukeboxBlock.HAS_RECORD)) + return ItemStack.EMPTY; + BlockEntity blockEntity = level.getBlockEntity(pos); + if (!(blockEntity instanceof JukeboxBlockEntity jukeboxBE)) + return ItemStack.EMPTY; + ItemStack record = jukeboxBE.getRecord(); + if (record.isEmpty()) + return ItemStack.EMPTY; + if (!simulate) { + level.levelEvent(1010, pos, 0); + jukeboxBE.clearContent(); + level.setBlock(pos, cachedState.setValue(JukeboxBlock.HAS_RECORD, false), 2); + } + return record; + } + } + + public static class RespawnAnchorPoint extends DepositOnlyArmInteractionPoint { + public RespawnAnchorPoint(ArmInteractionPointType type, Level level, BlockPos pos, BlockState state) { + super(type, level, pos, state); + } + + @Override + protected Vec3 getInteractionPositionVector() { + return Vec3.atLowerCornerOf(pos).add(.5f, 1, .5f); + } + + @Override + public ItemStack insert(ItemStack stack, boolean simulate) { + if (!stack.is(Items.GLOWSTONE)) + return stack; + if (cachedState.getValue(RespawnAnchorBlock.CHARGE) == 4) + return stack; + if (!simulate) + RespawnAnchorBlock.charge(level, pos, cachedState); + ItemStack remainder = stack.copy(); + remainder.shrink(1); + return remainder; + } + } + +} diff --git a/src/main/java/com/simibubi/create/content/logistics/block/mechanicalArm/ArmAngleTarget.java b/src/main/java/com/simibubi/create/content/logistics/block/mechanicalArm/ArmAngleTarget.java index 85d02b1f1..2181b41ae 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/mechanicalArm/ArmAngleTarget.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/mechanicalArm/ArmAngleTarget.java @@ -11,7 +11,7 @@ import net.minecraft.world.phys.Vec3; public class ArmAngleTarget { - static ArmAngleTarget NO_TARGET = new ArmAngleTarget(); + static final ArmAngleTarget NO_TARGET = new ArmAngleTarget(); float baseAngle; float lowerArmAngle; diff --git a/src/main/java/com/simibubi/create/content/logistics/block/mechanicalArm/ArmInteractionPoint.java b/src/main/java/com/simibubi/create/content/logistics/block/mechanicalArm/ArmInteractionPoint.java index 88a52fc29..add92ccd5 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/mechanicalArm/ArmInteractionPoint.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/mechanicalArm/ArmInteractionPoint.java @@ -1,119 +1,66 @@ package com.simibubi.create.content.logistics.block.mechanicalArm; -import java.util.HashMap; -import java.util.function.Supplier; - import javax.annotation.Nullable; -import org.apache.commons.lang3.mutable.MutableBoolean; - -import com.jozufozu.flywheel.core.PartialModel; -import com.mojang.blaze3d.vertex.PoseStack; -import com.simibubi.create.AllBlockPartials; -import com.simibubi.create.AllBlocks; -import com.simibubi.create.Create; -import com.simibubi.create.content.contraptions.base.KineticTileEntity; -import com.simibubi.create.content.contraptions.components.crafter.MechanicalCrafterBlock; -import com.simibubi.create.content.contraptions.components.crafter.MechanicalCrafterTileEntity; -import com.simibubi.create.content.contraptions.components.deployer.DeployerBlock; -import com.simibubi.create.content.contraptions.components.saw.SawBlock; import com.simibubi.create.content.contraptions.components.structureMovement.StructureTransform; -import com.simibubi.create.content.contraptions.processing.burner.BlazeBurnerBlock; -import com.simibubi.create.content.contraptions.relays.belt.BeltHelper; -import com.simibubi.create.content.contraptions.relays.belt.BeltTileEntity; -import com.simibubi.create.content.logistics.block.belts.tunnel.BeltTunnelBlock; -import com.simibubi.create.content.logistics.block.chute.AbstractChuteBlock; -import com.simibubi.create.content.logistics.block.funnel.AbstractFunnelBlock; -import com.simibubi.create.content.logistics.block.funnel.BeltFunnelBlock; -import com.simibubi.create.content.logistics.block.funnel.BeltFunnelBlock.Shape; -import com.simibubi.create.content.logistics.block.funnel.FunnelBlock; -import com.simibubi.create.content.logistics.block.funnel.FunnelTileEntity; -import com.simibubi.create.foundation.advancement.AllTriggers; -import com.simibubi.create.foundation.item.SmartInventory; -import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; -import com.simibubi.create.foundation.tileEntity.behaviour.belt.TransportedItemStackHandlerBehaviour; -import com.simibubi.create.foundation.tileEntity.behaviour.belt.TransportedItemStackHandlerBehaviour.TransportedResult; -import com.simibubi.create.foundation.tileEntity.behaviour.filtering.FilteringBehaviour; -import com.simibubi.create.foundation.tileEntity.behaviour.inventory.InvManipulationBehaviour; import com.simibubi.create.foundation.utility.NBTHelper; import com.simibubi.create.foundation.utility.VecHelper; +import net.minecraft.ChatFormatting; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.NbtUtils; -import net.minecraft.world.Containers; -import net.minecraft.world.InteractionResultHolder; -import net.minecraft.world.item.Item; +import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.RecordItem; -import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.Level; -import net.minecraft.world.level.LevelAccessor; -import net.minecraft.world.level.block.Blocks; -import net.minecraft.world.level.block.ComposterBlock; -import net.minecraft.world.level.block.JukeboxBlock; import net.minecraft.world.level.block.entity.BlockEntity; -import net.minecraft.world.level.block.entity.JukeboxBlockEntity; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.block.state.properties.BlockStateProperties; import net.minecraft.world.phys.Vec3; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.common.util.LazyOptional; import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.ItemHandlerHelper; -import net.minecraftforge.items.wrapper.InvWrapper; -public abstract class ArmInteractionPoint { - public enum Mode { - DEPOSIT, TAKE - } +public class ArmInteractionPoint { - protected BlockPos pos; - protected BlockState state; - protected Mode mode; + protected final ArmInteractionPointType type; + protected Level level; + protected final BlockPos pos; + protected Mode mode = Mode.DEPOSIT; - protected LazyOptional cachedHandler; + protected BlockState cachedState; + protected LazyOptional cachedHandler = LazyOptional.empty(); protected ArmAngleTarget cachedAngles; - protected static final HashMap> POINTS = new HashMap<>(); - - static { - addPoint(new Saw(), Saw::new); - addPoint(new Belt(), Belt::new); - addPoint(new Depot(), Depot::new); - addPoint(new Chute(), Chute::new); - addPoint(new Basin(), Basin::new); - addPoint(new Funnel(), Funnel::new); - addPoint(new Jukebox(), Jukebox::new); - addPoint(new Crafter(), Crafter::new); - addPoint(new Deployer(), Deployer::new); - addPoint(new Composter(), Composter::new); - addPoint(new Millstone(), Millstone::new); - addPoint(new BlazeBurner(), BlazeBurner::new); - addPoint(new CrushingWheels(), CrushingWheels::new); + public ArmInteractionPoint(ArmInteractionPointType type, Level level, BlockPos pos, BlockState state) { + this.type = type; + this.level = level; + this.pos = pos; + this.cachedState = state; } - public static void addPoint(ArmInteractionPoint instance, Supplier factory) { - if (POINTS.containsKey(instance)) - Create.LOGGER.warn("Point for " + instance.getClass().getSimpleName() + " was overridden"); - POINTS.put(instance, factory); + public ArmInteractionPointType getType() { + return type; } - public ArmInteractionPoint() { - cachedHandler = LazyOptional.empty(); + public Level getLevel() { + return level; } - @OnlyIn(Dist.CLIENT) - protected void transformFlag(PoseStack stack) {} - - protected PartialModel getFlagType() { - return mode == Mode.TAKE ? AllBlockPartials.FLAG_LONG_OUT : AllBlockPartials.FLAG_LONG_IN; + public void setLevel(Level level) { + this.level = level; } - protected void cycleMode() { + public BlockPos getPos() { + return pos; + } + + public Mode getMode() { + return mode; + } + + public void cycleMode() { mode = mode == Mode.DEPOSIT ? Mode.TAKE : Mode.DEPOSIT; } @@ -125,22 +72,7 @@ public abstract class ArmInteractionPoint { return Direction.DOWN; } - protected boolean isStillValid(BlockGetter reader) { - return isValid(reader, pos, reader.getBlockState(pos)); - } - - protected void keepAlive(LevelAccessor world) {} - - protected abstract boolean isValid(BlockGetter reader, BlockPos pos, BlockState state); - - protected static boolean isInteractable(BlockGetter reader, BlockPos pos, BlockState state) { - for (ArmInteractionPoint armInteractionPoint : POINTS.keySet()) - if (armInteractionPoint.isValid(reader, pos, state)) - return true; - return false; - } - - protected ArmAngleTarget getTargetAngles(BlockPos armPos, boolean ceiling) { + public ArmAngleTarget getTargetAngles(BlockPos armPos, boolean ceiling) { if (cachedAngles == null) cachedAngles = new ArmAngleTarget(armPos, getInteractionPositionVector(), getInteractionDirection(), ceiling); @@ -148,10 +80,21 @@ public abstract class ArmInteractionPoint { return cachedAngles; } + public void updateCachedState() { + cachedState = level.getBlockState(pos); + } + + public boolean isValid() { + updateCachedState(); + return type.canCreatePoint(level, pos, cachedState); + } + + public void keepAlive() {} + @Nullable - protected IItemHandler getHandler(Level world) { + protected IItemHandler getHandler() { if (!cachedHandler.isPresent()) { - BlockEntity te = world.getBlockEntity(pos); + BlockEntity te = level.getBlockEntity(pos); if (te == null) return null; cachedHandler = te.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, Direction.UP); @@ -159,393 +102,106 @@ public abstract class ArmInteractionPoint { return cachedHandler.orElse(null); } - protected ItemStack insert(Level world, ItemStack stack, boolean simulate) { - IItemHandler handler = getHandler(world); + public ItemStack insert(ItemStack stack, boolean simulate) { + IItemHandler handler = getHandler(); if (handler == null) return stack; return ItemHandlerHelper.insertItem(handler, stack, simulate); } - protected ItemStack extract(Level world, int slot, int amount, boolean simulate) { - IItemHandler handler = getHandler(world); + public ItemStack extract(int slot, int amount, boolean simulate) { + IItemHandler handler = getHandler(); if (handler == null) return ItemStack.EMPTY; return handler.extractItem(slot, amount, simulate); } - protected ItemStack extract(Level world, int slot, boolean simulate) { - return extract(world, slot, 64, simulate); + public ItemStack extract(int slot, boolean simulate) { + return extract(slot, 64, simulate); } - protected int getSlotCount(Level world) { - IItemHandler handler = getHandler(world); + public int getSlotCount() { + IItemHandler handler = getHandler(); if (handler == null) return 0; return handler.getSlots(); } - @Nullable - protected static ArmInteractionPoint createAt(BlockGetter world, BlockPos pos) { - BlockState state = world.getBlockState(pos); - ArmInteractionPoint point = null; - - for (ArmInteractionPoint armInteractionPoint : POINTS.keySet()) - if (armInteractionPoint.isValid(world, pos, state)) - point = POINTS.get(armInteractionPoint) - .get(); - - if (point != null) { - point.state = state; - point.pos = pos; - point.mode = Mode.DEPOSIT; - } - - return point; + protected void serialize(CompoundTag nbt, BlockPos anchor) { + NBTHelper.writeEnum(nbt, "Mode", mode); } - protected CompoundTag serialize(BlockPos anchor) { + protected void deserialize(CompoundTag nbt, BlockPos anchor) { + mode = NBTHelper.readEnum(nbt, "Mode", Mode.class); + } + + public final CompoundTag serialize(BlockPos anchor) { CompoundTag nbt = new CompoundTag(); + nbt.putString("Type", type.getId().toString()); nbt.put("Pos", NbtUtils.writeBlockPos(pos.subtract(anchor))); - NBTHelper.writeEnum(nbt, "Mode", mode); + serialize(nbt, anchor); return nbt; } - protected static ArmInteractionPoint deserialize(BlockGetter world, BlockPos anchor, CompoundTag nbt) { - BlockPos pos = NbtUtils.readBlockPos(nbt.getCompound("Pos")); - ArmInteractionPoint interactionPoint = createAt(world, pos.offset(anchor)); - if (interactionPoint == null) + @Nullable + public static ArmInteractionPoint deserialize(CompoundTag nbt, Level level, BlockPos anchor) { + ResourceLocation id = ResourceLocation.tryParse(nbt.getString("Type")); + if (id == null) return null; - interactionPoint.mode = NBTHelper.readEnum(nbt, "Mode", Mode.class); - return interactionPoint; + ArmInteractionPointType type = ArmInteractionPointType.get(id); + if (type == null) + return null; + BlockPos pos = NbtUtils.readBlockPos(nbt.getCompound("Pos")).offset(anchor); + ArmInteractionPoint point = type.createPoint(level, pos, level.getBlockState(pos)); + if (point == null) + return null; + point.deserialize(nbt, anchor); + return point; } - protected static void transformPos(StructureTransform transform, CompoundTag nbt) { + public static void transformPos(CompoundTag nbt, StructureTransform transform) { BlockPos pos = NbtUtils.readBlockPos(nbt.getCompound("Pos")); pos = transform.applyWithoutOffset(pos); nbt.put("Pos", NbtUtils.writeBlockPos(pos)); } - public static abstract class TopFaceArmInteractionPoint extends ArmInteractionPoint { - - @Override - protected Vec3 getInteractionPositionVector() { - return Vec3.atLowerCornerOf(pos).add(.5f, 1, .5f); - } - + public static boolean isInteractable(Level level, BlockPos pos, BlockState state) { + return ArmInteractionPointType.getPrimaryType(level, pos, state) != null; } - public static class Depot extends ArmInteractionPoint { - - @Override - protected Vec3 getInteractionPositionVector() { - return Vec3.atLowerCornerOf(pos).add(.5f, 14 / 16f, .5f); - } - - @Override - protected boolean isValid(BlockGetter reader, BlockPos pos, BlockState state) { - return AllBlocks.DEPOT.has(state) || AllBlocks.WEIGHTED_EJECTOR.has(state); - } - + @Nullable + public static ArmInteractionPoint create(Level level, BlockPos pos, BlockState state) { + ArmInteractionPointType type = ArmInteractionPointType.getPrimaryType(level, pos, state); + if (type == null) + return null; + return type.createPoint(level, pos, state); } - public static class Saw extends Depot { + public enum Mode { + DEPOSIT("mechanical_arm.deposit_to", ChatFormatting.GOLD, 0xFFCB74), + TAKE("mechanical_arm.extract_from", ChatFormatting.AQUA, 0x4F8A8B); - @Override - protected boolean isValid(BlockGetter reader, BlockPos pos, BlockState state) { - return AllBlocks.MECHANICAL_SAW.has(state) && state.getValue(SawBlock.FACING) == Direction.UP - && ((KineticTileEntity) reader.getBlockEntity(pos)).getSpeed() != 0; + private final String translationKey; + private final ChatFormatting chatColor; + private final int color; + + Mode(String translationKey, ChatFormatting chatColor, int color) { + this.translationKey = translationKey; + this.chatColor = chatColor; + this.color = color; } - } - - public static class Millstone extends ArmInteractionPoint { - - @Override - protected boolean isValid(BlockGetter reader, BlockPos pos, BlockState state) { - return AllBlocks.MILLSTONE.has(state); + public String getTranslationKey() { + return translationKey; } - } - - public static class CrushingWheels extends TopFaceArmInteractionPoint { - - @Override - protected boolean isValid(BlockGetter reader, BlockPos pos, BlockState state) { - return AllBlocks.CRUSHING_WHEEL_CONTROLLER.has(state); + public ChatFormatting getChatColor() { + return chatColor; } - } - - public static class Composter extends TopFaceArmInteractionPoint { - - @Override - protected Vec3 getInteractionPositionVector() { - return Vec3.atLowerCornerOf(pos).add(.5f, 13 / 16f, .5f); - } - - @Override - protected boolean isValid(BlockGetter reader, BlockPos pos, BlockState state) { - return Blocks.COMPOSTER.equals(state.getBlock()); - } - - @Nullable - @Override - protected IItemHandler getHandler(Level world) { - return new InvWrapper( - ((ComposterBlock) Blocks.COMPOSTER).getContainer(world.getBlockState(pos), world, pos)); + public int getColor() { + return color; } } - public static class Deployer extends ArmInteractionPoint { - - @Override - protected boolean isValid(BlockGetter reader, BlockPos pos, BlockState state) { - return AllBlocks.DEPLOYER.has(state); - } - - @Override - protected Direction getInteractionDirection() { - return state.getValue(DeployerBlock.FACING) - .getOpposite(); - } - - @Override - protected Vec3 getInteractionPositionVector() { - return super.getInteractionPositionVector() - .add(Vec3.atLowerCornerOf(getInteractionDirection().getNormal()).scale(.65f)); - } - - } - - public static class BlazeBurner extends ArmInteractionPoint { - - @Override - protected boolean isValid(BlockGetter reader, BlockPos pos, BlockState state) { - return AllBlocks.BLAZE_BURNER.has(state); - } - - @Override - protected ItemStack extract(Level world, int slot, int amount, boolean simulate) { - return ItemStack.EMPTY; - } - - @Override - protected ItemStack insert(Level world, ItemStack stack, boolean simulate) { - ItemStack input = stack.copy(); - InteractionResultHolder res = BlazeBurnerBlock.tryInsert(state, world, pos, input, false, false, simulate); - ItemStack remainder = res.getObject(); - if (input.isEmpty()) { - return remainder; - } else { - if (!simulate) - Containers.dropItemStack(world, pos.getX(), pos.getY(), pos.getZ(), remainder); - return input; - } - } - - @Override - protected void cycleMode() {} - - } - - public static class Crafter extends ArmInteractionPoint { - - @Override - protected boolean isValid(BlockGetter reader, BlockPos pos, BlockState state) { - return AllBlocks.MECHANICAL_CRAFTER.has(state); - } - - @Override - protected Direction getInteractionDirection() { - return state.getValue(MechanicalCrafterBlock.HORIZONTAL_FACING) - .getOpposite(); - } - - @Override - protected ItemStack extract(Level world, int slot, int amount, boolean simulate) { - BlockEntity te = world.getBlockEntity(pos); - if (!(te instanceof MechanicalCrafterTileEntity)) - return ItemStack.EMPTY; - MechanicalCrafterTileEntity crafter = (MechanicalCrafterTileEntity) te; - SmartInventory inventory = crafter.getInventory(); - inventory.allowExtraction(); - ItemStack extract = super.extract(world, slot, amount, simulate); - inventory.forbidExtraction(); - return extract; - } - - @Override - protected Vec3 getInteractionPositionVector() { - return super.getInteractionPositionVector() - .add(Vec3.atLowerCornerOf(getInteractionDirection().getNormal()).scale(.5f)); - } - - } - - public static class Basin extends ArmInteractionPoint { - - @Override - protected boolean isValid(BlockGetter reader, BlockPos pos, BlockState state) { - return AllBlocks.BASIN.has(state); - } - - } - - public static class Jukebox extends TopFaceArmInteractionPoint { - - @Override - protected boolean isValid(BlockGetter reader, BlockPos pos, BlockState state) { - return state.getBlock() instanceof JukeboxBlock; - } - - @Override - protected int getSlotCount(Level world) { - return 1; - } - - @Override - protected ItemStack insert(Level world, ItemStack stack, boolean simulate) { - BlockEntity tileEntity = world.getBlockEntity(pos); - if (!(tileEntity instanceof JukeboxBlockEntity)) - return stack; - if (!(state.getBlock() instanceof JukeboxBlock)) - return stack; - JukeboxBlock jukeboxBlock = (JukeboxBlock) state.getBlock(); - JukeboxBlockEntity jukeboxTE = (JukeboxBlockEntity) tileEntity; - if (!jukeboxTE.getRecord() - .isEmpty()) - return stack; - if (!(stack.getItem() instanceof RecordItem)) - return stack; - ItemStack remainder = stack.copy(); - ItemStack toInsert = remainder.split(1); - if (!simulate && !world.isClientSide) { - jukeboxBlock.setRecord(world, pos, state, toInsert); - world.levelEvent(null, 1010, pos, Item.getId(toInsert.getItem())); - AllTriggers.triggerForNearbyPlayers(AllTriggers.MUSICAL_ARM, world, pos, 10); - } - return remainder; - } - - @Override - protected ItemStack extract(Level world, int slot, int amount, boolean simulate) { - BlockEntity tileEntity = world.getBlockEntity(pos); - if (!(tileEntity instanceof JukeboxBlockEntity)) - return ItemStack.EMPTY; - if (!(state.getBlock() instanceof JukeboxBlock)) - return ItemStack.EMPTY; - JukeboxBlockEntity jukeboxTE = (JukeboxBlockEntity) tileEntity; - ItemStack itemstack = jukeboxTE.getRecord(); - if (itemstack.isEmpty()) - return ItemStack.EMPTY; - if (!simulate && !world.isClientSide) { - world.levelEvent(1010, pos, 0); - jukeboxTE.clearContent(); - world.setBlock(pos, state.setValue(JukeboxBlock.HAS_RECORD, false), 2); - } - return itemstack; - } - - } - - public static class Belt extends Depot { - - @Override - protected boolean isValid(BlockGetter reader, BlockPos pos, BlockState state) { - return AllBlocks.BELT.has(state) && !(reader.getBlockState(pos.above()) - .getBlock() instanceof BeltTunnelBlock); - } - - @Override - protected void keepAlive(LevelAccessor world) { - super.keepAlive(world); - BeltTileEntity beltTE = BeltHelper.getSegmentTE(world, pos); - if (beltTE == null) - return; - TransportedItemStackHandlerBehaviour transport = - beltTE.getBehaviour(TransportedItemStackHandlerBehaviour.TYPE); - if (transport == null) - return; - MutableBoolean found = new MutableBoolean(false); - transport.handleProcessingOnAllItems(tis -> { - if (found.isTrue()) - return TransportedResult.doNothing(); - tis.lockedExternally = true; - found.setTrue(); - return TransportedResult.doNothing(); - }); - } - - } - - public static class Chute extends TopFaceArmInteractionPoint { - - @Override - protected boolean isValid(BlockGetter reader, BlockPos pos, BlockState state) { - return AbstractChuteBlock.isChute(state); - } - } - - public static class Funnel extends ArmInteractionPoint { - - @Override - protected Vec3 getInteractionPositionVector() { - return VecHelper.getCenterOf(pos) - .add(Vec3.atLowerCornerOf(FunnelBlock.getFunnelFacing(state) - .getNormal()).scale(-.15f)); - } - - @Override - protected int getSlotCount(Level world) { - return 0; - } - - @Override - protected ItemStack extract(Level world, int slot, int amount, boolean simulate) { - return ItemStack.EMPTY; - } - - @Override - protected Direction getInteractionDirection() { - return FunnelBlock.getFunnelFacing(state) - .getOpposite(); - } - - @Override - protected ItemStack insert(Level world, ItemStack stack, boolean simulate) { - FilteringBehaviour filtering = TileEntityBehaviour.get(world, pos, FilteringBehaviour.TYPE); - InvManipulationBehaviour inserter = TileEntityBehaviour.get(world, pos, InvManipulationBehaviour.TYPE); - BlockState state = world.getBlockState(pos); - if (state.getOptionalValue(BlockStateProperties.POWERED).orElse(false)) - return stack; - if (inserter == null) - return stack; - if (filtering != null && !filtering.test(stack)) - return stack; - if (simulate) - inserter.simulate(); - ItemStack insert = inserter.insert(stack); - if (!simulate && insert.getCount() != stack.getCount()) { - BlockEntity tileEntity = world.getBlockEntity(pos); - if (tileEntity instanceof FunnelTileEntity) { - FunnelTileEntity funnelTileEntity = (FunnelTileEntity) tileEntity; - funnelTileEntity.onTransfer(stack); - if (funnelTileEntity.hasFlap()) - funnelTileEntity.flap(true); - } - } - return insert; - } - - @Override - protected boolean isValid(BlockGetter reader, BlockPos pos, BlockState state) { - return state.getBlock() instanceof AbstractFunnelBlock - && !(state.hasProperty(FunnelBlock.EXTRACTING) && state.getValue(FunnelBlock.EXTRACTING)) - && !(state.hasProperty(BeltFunnelBlock.SHAPE) && state.getValue(BeltFunnelBlock.SHAPE) == Shape.PUSHING); - } - - @Override - protected void cycleMode() {} - - } } diff --git a/src/main/java/com/simibubi/create/content/logistics/block/mechanicalArm/ArmInteractionPointHandler.java b/src/main/java/com/simibubi/create/content/logistics/block/mechanicalArm/ArmInteractionPointHandler.java index b6a907e87..e5ef2ddc0 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/mechanicalArm/ArmInteractionPointHandler.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/mechanicalArm/ArmInteractionPointHandler.java @@ -16,7 +16,7 @@ import net.minecraft.ChatFormatting; import net.minecraft.client.Minecraft; import net.minecraft.client.player.LocalPlayer; import net.minecraft.core.BlockPos; -import net.minecraft.network.chat.TranslatableComponent; +import net.minecraft.network.chat.MutableComponent; import net.minecraft.world.InteractionResult; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; @@ -52,9 +52,10 @@ public class ArmInteractionPointHandler { return; ArmInteractionPoint selected = getSelected(pos); + BlockState state = world.getBlockState(pos); if (selected == null) { - ArmInteractionPoint point = ArmInteractionPoint.createAt(world, pos); + ArmInteractionPoint point = ArmInteractionPoint.create(world, pos, state); if (point == null) return; selected = point; @@ -63,10 +64,9 @@ public class ArmInteractionPointHandler { selected.cycleMode(); if (player != null) { - String key = selected.mode == Mode.DEPOSIT ? "mechanical_arm.deposit_to" : "mechanical_arm.extract_from"; - ChatFormatting colour = selected.mode == Mode.DEPOSIT ? ChatFormatting.GOLD : ChatFormatting.AQUA; - TranslatableComponent translatedBlock = new TranslatableComponent(selected.state.getBlock() - .getDescriptionId()); + String key = selected.getMode().getTranslationKey(); + ChatFormatting colour = selected.getMode().getChatColor(); + MutableComponent translatedBlock = state.getBlock().getName(); player.displayClientMessage((Lang.translate(key, translatedBlock.withStyle(ChatFormatting.WHITE, colour)).withStyle(colour)), true); } @@ -95,7 +95,7 @@ public class ArmInteractionPointHandler { int removed = 0; for (Iterator iterator = currentSelection.iterator(); iterator.hasNext();) { ArmInteractionPoint point = iterator.next(); - if (point.pos.closerThan(pos, ArmTileEntity.getRange())) + if (point.getPos().closerThan(pos, ArmTileEntity.getRange())) continue; iterator.remove(); removed++; @@ -109,7 +109,7 @@ public class ArmInteractionPointHandler { int inputs = 0; int outputs = 0; for (ArmInteractionPoint armInteractionPoint : currentSelection) { - if (armInteractionPoint.mode == Mode.DEPOSIT) + if (armInteractionPoint.getMode() == Mode.DEPOSIT) outputs++; else inputs++; @@ -179,22 +179,22 @@ public class ArmInteractionPointHandler { } private static void drawOutlines(Collection selection) { - Level world = Minecraft.getInstance().level; for (Iterator iterator = selection.iterator(); iterator.hasNext();) { ArmInteractionPoint point = iterator.next(); - BlockPos pos = point.pos; - BlockState state = world.getBlockState(pos); - if (!point.isValid(world, pos, state)) { + if (!point.isValid()) { iterator.remove(); continue; } - VoxelShape shape = state.getShape(world, pos); + Level level = point.getLevel(); + BlockPos pos = point.getPos(); + BlockState state = level.getBlockState(pos); + VoxelShape shape = state.getShape(level, pos); if (shape.isEmpty()) continue; - int color = point.mode == Mode.DEPOSIT ? 0xffcb74 : 0x4f8a8b; + int color = point.getMode().getColor(); CreateClient.OUTLINER.showAABB(point, shape.bounds() .move(pos)) .colored(color) @@ -214,10 +214,9 @@ public class ArmInteractionPointHandler { } private static ArmInteractionPoint getSelected(BlockPos pos) { - for (ArmInteractionPoint point : currentSelection) { - if (point.pos.equals(pos)) + for (ArmInteractionPoint point : currentSelection) + if (point.getPos().equals(pos)) return point; - } return null; } diff --git a/src/main/java/com/simibubi/create/content/logistics/block/mechanicalArm/ArmInteractionPointType.java b/src/main/java/com/simibubi/create/content/logistics/block/mechanicalArm/ArmInteractionPointType.java new file mode 100644 index 000000000..05a7fa3db --- /dev/null +++ b/src/main/java/com/simibubi/create/content/logistics/block/mechanicalArm/ArmInteractionPointType.java @@ -0,0 +1,66 @@ +package com.simibubi.create.content.logistics.block.mechanicalArm; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.function.Consumer; + +import javax.annotation.Nullable; + +import net.minecraft.core.BlockPos; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.state.BlockState; + +public abstract class ArmInteractionPointType { + + private static final Map TYPES = new HashMap<>(); + private static final List SORTED_TYPES = new ArrayList<>(); + + protected final ResourceLocation id; + + public ArmInteractionPointType(ResourceLocation id) { + this.id = id; + } + + public static void register(ArmInteractionPointType type) { + ResourceLocation id = type.getId(); + if (TYPES.containsKey(id)) + throw new IllegalArgumentException("Tried to override ArmInteractionPointType registration for id '" + id + "'. This is not supported!"); + TYPES.put(id, type); + SORTED_TYPES.add(type); + SORTED_TYPES.sort((t1, t2) -> t2.getPriority() - t1.getPriority()); + } + + @Nullable + public static ArmInteractionPointType get(ResourceLocation id) { + return TYPES.get(id); + } + + public static void forEach(Consumer action) { + SORTED_TYPES.forEach(action); + } + + @Nullable + public static ArmInteractionPointType getPrimaryType(Level level, BlockPos pos, BlockState state) { + for (ArmInteractionPointType type : SORTED_TYPES) + if (type.canCreatePoint(level, pos, state)) + return type; + return null; + } + + public final ResourceLocation getId() { + return id; + } + + public abstract boolean canCreatePoint(Level level, BlockPos pos, BlockState state); + + @Nullable + public abstract ArmInteractionPoint createPoint(Level level, BlockPos pos, BlockState state); + + public int getPriority() { + return 0; + } + +} diff --git a/src/main/java/com/simibubi/create/content/logistics/block/mechanicalArm/ArmTileEntity.java b/src/main/java/com/simibubi/create/content/logistics/block/mechanicalArm/ArmTileEntity.java index 0d2ae41c7..72f796bb2 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/mechanicalArm/ArmTileEntity.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/mechanicalArm/ArmTileEntity.java @@ -9,7 +9,6 @@ import com.simibubi.create.Create; import com.simibubi.create.content.contraptions.base.KineticTileEntity; import com.simibubi.create.content.contraptions.components.structureMovement.ITransformableTE; import com.simibubi.create.content.contraptions.components.structureMovement.StructureTransform; -import com.simibubi.create.content.logistics.block.mechanicalArm.ArmInteractionPoint.Jukebox; import com.simibubi.create.content.logistics.block.mechanicalArm.ArmInteractionPoint.Mode; import com.simibubi.create.foundation.advancement.AllTriggers; import com.simibubi.create.foundation.config.AllConfigs; @@ -35,6 +34,7 @@ import net.minecraft.sounds.SoundEvents; import net.minecraft.sounds.SoundSource; import net.minecraft.util.Mth; import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; import net.minecraft.world.level.block.JukeboxBlock; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; @@ -116,7 +116,7 @@ public class ArmTileEntity extends KineticTileEntity implements ITransformableTE if (phase == Phase.MOVE_TO_INPUT) { ArmInteractionPoint point = getTargetedInteractionPoint(); if (point != null) - point.keepAlive(level); + point.keepAlive(); } return; } @@ -164,9 +164,9 @@ public class ArmTileEntity extends KineticTileEntity implements ITransformableTE private boolean checkForMusicAmong(List list) { for (ArmInteractionPoint armInteractionPoint : list) { - if (!(armInteractionPoint instanceof Jukebox)) + if (!(armInteractionPoint instanceof AllArmInteractionPointTypes.JukeboxPoint)) continue; - BlockState state = level.getBlockState(armInteractionPoint.pos); + BlockState state = level.getBlockState(armInteractionPoint.getPos()); if (state.getOptionalValue(JukeboxBlock.HAS_RECORD).orElse(false)) return true; } @@ -236,9 +236,9 @@ public class ArmTileEntity extends KineticTileEntity implements ITransformableTE InteractionPoints: for (int i = startIndex; i < scanRange; i++) { ArmInteractionPoint armInteractionPoint = inputs.get(i); - if (!armInteractionPoint.isStillValid(level)) + if (!armInteractionPoint.isValid()) continue; - for (int j = 0; j < armInteractionPoint.getSlotCount(level); j++) { + for (int j = 0; j < armInteractionPoint.getSlotCount(); j++) { if (getDistributableAmount(armInteractionPoint, j) == 0) continue; @@ -274,10 +274,10 @@ public class ArmTileEntity extends KineticTileEntity implements ITransformableTE for (int i = startIndex; i < scanRange; i++) { ArmInteractionPoint armInteractionPoint = outputs.get(i); - if (!armInteractionPoint.isStillValid(level)) + if (!armInteractionPoint.isValid()) continue; - ItemStack remainder = armInteractionPoint.insert(level, held, true); + ItemStack remainder = armInteractionPoint.insert(held, true); if (remainder.equals(heldItem, false)) continue; @@ -311,7 +311,7 @@ public class ArmTileEntity extends KineticTileEntity implements ITransformableTE } protected int getDistributableAmount(ArmInteractionPoint armInteractionPoint, int i) { - ItemStack stack = armInteractionPoint.extract(level, i, true); + ItemStack stack = armInteractionPoint.extract(i, true); ItemStack remainder = simulateInsertion(stack); if (stack.sameItem(remainder)) { return stack.getCount() - remainder.getCount(); @@ -320,11 +320,21 @@ public class ArmTileEntity extends KineticTileEntity implements ITransformableTE } } + private ItemStack simulateInsertion(ItemStack stack) { + for (ArmInteractionPoint armInteractionPoint : outputs) { + if (armInteractionPoint.isValid()) + stack = armInteractionPoint.insert(stack, true); + if (stack.isEmpty()) + break; + } + return stack; + } + protected void depositItem() { ArmInteractionPoint armInteractionPoint = getTargetedInteractionPoint(); - if (armInteractionPoint != null) { + if (armInteractionPoint != null && armInteractionPoint.isValid()) { ItemStack toInsert = heldItem.copy(); - ItemStack remainder = armInteractionPoint.insert(level, toInsert, false); + ItemStack remainder = armInteractionPoint.insert(toInsert, false); heldItem = remainder; } phase = heldItem.isEmpty() ? Phase.SEARCH_INPUTS : Phase.SEARCH_OUTPUTS; @@ -339,14 +349,14 @@ public class ArmTileEntity extends KineticTileEntity implements ITransformableTE protected void collectItem() { ArmInteractionPoint armInteractionPoint = getTargetedInteractionPoint(); - if (armInteractionPoint != null) - for (int i = 0; i < armInteractionPoint.getSlotCount(level); i++) { + if (armInteractionPoint != null && armInteractionPoint.isValid()) + for (int i = 0; i < armInteractionPoint.getSlotCount(); i++) { int amountExtracted = getDistributableAmount(armInteractionPoint, i); if (amountExtracted == 0) continue; ItemStack prevHeld = heldItem; - heldItem = armInteractionPoint.extract(level, i, amountExtracted, false); + heldItem = armInteractionPoint.extract(i, amountExtracted, false); phase = Phase.SEARCH_OUTPUTS; chasedPointProgress = 0; chasedPointIndex = -1; @@ -366,15 +376,6 @@ public class ArmTileEntity extends KineticTileEntity implements ITransformableTE setChanged(); } - private ItemStack simulateInsertion(ItemStack stack) { - for (ArmInteractionPoint armInteractionPoint : outputs) { - stack = armInteractionPoint.insert(level, stack, true); - if (stack.isEmpty()) - break; - } - return stack; - } - public void redstoneUpdate() { if (level.isClientSide) return; @@ -392,8 +393,8 @@ public class ArmTileEntity extends KineticTileEntity implements ITransformableTE if (interactionPointTag == null) return; - for (Tag inbt : interactionPointTag) { - ArmInteractionPoint.transformPos(transform, (CompoundTag) inbt); + for (Tag tag : interactionPointTag) { + ArmInteractionPoint.transformPos((CompoundTag) tag, transform); } notifyUpdate(); @@ -408,15 +409,15 @@ public class ArmTileEntity extends KineticTileEntity implements ITransformableTE outputs.clear(); boolean hasBlazeBurner = false; - for (Tag inbt : interactionPointTag) { - ArmInteractionPoint point = ArmInteractionPoint.deserialize(level, worldPosition, (CompoundTag) inbt); + for (Tag tag : interactionPointTag) { + ArmInteractionPoint point = ArmInteractionPoint.deserialize((CompoundTag) tag, level, worldPosition); if (point == null) continue; - if (point.mode == Mode.DEPOSIT) + if (point.getMode() == Mode.DEPOSIT) outputs.add(point); - if (point.mode == Mode.TAKE) + else if (point.getMode() == Mode.TAKE) inputs.add(point); - hasBlazeBurner |= point instanceof ArmInteractionPoint.BlazeBurner; + hasBlazeBurner |= point instanceof AllArmInteractionPointTypes.BlazeBurnerPoint; } if (!level.isClientSide) { @@ -496,6 +497,10 @@ public class ArmTileEntity extends KineticTileEntity implements ITransformableTE previousPoint == null ? ArmAngleTarget.NO_TARGET : previousPoint.getTargetAngles(worldPosition, ceiling); if (previousPoint != null) previousBaseAngle = previousPoint.getTargetAngles(worldPosition, ceiling).baseAngle; + + ArmInteractionPoint targetedPoint = getTargetedInteractionPoint(); + if (targetedPoint != null) + targetedPoint.updateCachedState(); } } @@ -518,6 +523,16 @@ public class ArmTileEntity extends KineticTileEntity implements ITransformableTE return true; } + public void setLevel(Level level) { + super.setLevel(level); + for (ArmInteractionPoint input : inputs) { + input.setLevel(level); + } + for (ArmInteractionPoint output : outputs) { + output.setLevel(level); + } + } + private class SelectionModeValueBox extends CenteredSideValueBoxTransform { public SelectionModeValueBox() { 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 38e965d9f..52e12f2cf 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 @@ -77,6 +77,13 @@ public interface ItemAttribute { return attributeType; } + static ItemAttribute fromNBT(CompoundTag nbt) { + for (ItemAttribute itemAttribute : types) + if (itemAttribute.canRead(nbt)) + return itemAttribute.readNBT(nbt.getCompound(itemAttribute.getNBTKey())); + return null; + } + default boolean appliesTo(ItemStack stack, Level world) { return appliesTo(stack); } @@ -87,29 +94,20 @@ public interface ItemAttribute { return listAttributesOf(stack); } - public List listAttributesOf(ItemStack stack); + List listAttributesOf(ItemStack stack); - public String getTranslationKey(); + String getTranslationKey(); void writeNBT(CompoundTag nbt); ItemAttribute readNBT(CompoundTag nbt); - public default void serializeNBT(CompoundTag nbt) { + default void serializeNBT(CompoundTag nbt) { CompoundTag compound = new CompoundTag(); writeNBT(compound); nbt.put(getNBTKey(), compound); } - public static ItemAttribute fromNBT(CompoundTag nbt) { - for (ItemAttribute itemAttribute : types) { - if (!itemAttribute.canRead(nbt)) - continue; - return itemAttribute.readNBT(nbt.getCompound(itemAttribute.getNBTKey())); - } - return null; - } - default Object[] getTranslationParameters() { return new String[0]; } diff --git a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/belt/TransportedItemStackHandlerBehaviour.java b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/belt/TransportedItemStackHandlerBehaviour.java index d3f200641..869e52ad0 100644 --- a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/belt/TransportedItemStackHandlerBehaviour.java +++ b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/belt/TransportedItemStackHandlerBehaviour.java @@ -17,7 +17,8 @@ import net.minecraft.world.phys.Vec3; public class TransportedItemStackHandlerBehaviour extends TileEntityBehaviour { - public static BehaviourType TYPE = new BehaviourType<>(); + public static final BehaviourType TYPE = new BehaviourType<>(); + private ProcessingCallback processingCallback; private PositionGetter positionGetter; diff --git a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/filtering/FilteringBehaviour.java b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/filtering/FilteringBehaviour.java index a2cfc964f..332a688f8 100644 --- a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/filtering/FilteringBehaviour.java +++ b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/filtering/FilteringBehaviour.java @@ -25,7 +25,7 @@ import net.minecraftforge.items.ItemHandlerHelper; public class FilteringBehaviour extends TileEntityBehaviour { - public static BehaviourType TYPE = new BehaviourType<>(); + public static final BehaviourType TYPE = new BehaviourType<>(); ValueBoxTransform slotPositioning; boolean showCount; diff --git a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/fluid/SmartFluidTankBehaviour.java b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/fluid/SmartFluidTankBehaviour.java index 1b237343e..b6682cbdd 100644 --- a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/fluid/SmartFluidTankBehaviour.java +++ b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/fluid/SmartFluidTankBehaviour.java @@ -22,9 +22,9 @@ import net.minecraftforge.fluids.capability.IFluidHandler; public class SmartFluidTankBehaviour extends TileEntityBehaviour { - public static BehaviourType + public static final BehaviourType - TYPE = new BehaviourType<>(), INPUT = new BehaviourType<>("Input"), OUTPUT = new BehaviourType<>("Output"); + TYPE = new BehaviourType<>(), INPUT = new BehaviourType<>("Input"), oOUTPUT = new BehaviourType<>("Output"); private static final int SYNC_RATE = 8; diff --git a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/inventory/TankManipulationBehaviour.java b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/inventory/TankManipulationBehaviour.java index 786d43e1c..42a77735f 100644 --- a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/inventory/TankManipulationBehaviour.java +++ b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/inventory/TankManipulationBehaviour.java @@ -15,7 +15,7 @@ import net.minecraftforge.fluids.capability.IFluidHandler.FluidAction; public class TankManipulationBehaviour extends CapManipulationBehaviourBase { - public static BehaviourType OBSERVE = new BehaviourType<>(); + public static final BehaviourType OBSERVE = new BehaviourType<>(); private BehaviourType behaviourType; public TankManipulationBehaviour(SmartTileEntity te, InterfaceProvider target) { diff --git a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/linked/LinkBehaviour.java b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/linked/LinkBehaviour.java index 791b9c48f..38eea1d12 100644 --- a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/linked/LinkBehaviour.java +++ b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/linked/LinkBehaviour.java @@ -23,7 +23,7 @@ import net.minecraft.world.phys.Vec3; public class LinkBehaviour extends TileEntityBehaviour implements IRedstoneLinkable { - public static BehaviourType TYPE = new BehaviourType<>(); + public static final BehaviourType TYPE = new BehaviourType<>(); enum Mode { TRANSMIT, RECEIVE diff --git a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/scrollvalue/ScrollValueBehaviour.java b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/scrollvalue/ScrollValueBehaviour.java index 1daf7a9d9..9a58529e3 100644 --- a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/scrollvalue/ScrollValueBehaviour.java +++ b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/scrollvalue/ScrollValueBehaviour.java @@ -18,7 +18,7 @@ import net.minecraft.world.phys.Vec3; public class ScrollValueBehaviour extends TileEntityBehaviour { - public static BehaviourType TYPE = new BehaviourType<>(); + public static final BehaviourType TYPE = new BehaviourType<>(); ValueBoxTransform slotPositioning; Vec3 textShift; diff --git a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/simple/DeferralBehaviour.java b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/simple/DeferralBehaviour.java index 0d50db1f8..d1191916f 100644 --- a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/simple/DeferralBehaviour.java +++ b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/simple/DeferralBehaviour.java @@ -10,7 +10,7 @@ import net.minecraft.nbt.CompoundTag; public class DeferralBehaviour extends TileEntityBehaviour { - public static BehaviourType TYPE = new BehaviourType<>(); + public static final BehaviourType TYPE = new BehaviourType<>(); private boolean needsUpdate; private Supplier callback; diff --git a/src/main/resources/assets/create/models/block/mechanical_arm/flag/long_in.json b/src/main/resources/assets/create/models/block/mechanical_arm/flag/long_in.json deleted file mode 100644 index 7996d1e8a..000000000 --- a/src/main/resources/assets/create/models/block/mechanical_arm/flag/long_in.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "credit": "Made with Blockbench", - "parent": "block/block", - "textures": { - "4": "create:block/marker_flag" - }, - "elements": [ - { - "from": [0, 0, 0], - "to": [1, 16, 1], - "rotation": {"angle": 0, "axis": "y", "origin": [8, -3, 10]}, - "faces": { - "north": {"uv": [1, 0, 2, 16], "texture": "#4"}, - "east": {"uv": [0, 0, 1, 16], "texture": "#4"}, - "south": {"uv": [1, 0, 2, 16], "texture": "#4"}, - "west": {"uv": [0, 0, 1, 16], "texture": "#4"}, - "up": {"uv": [0, 0, 1, 1], "texture": "#4"}, - "down": {"uv": [0, 0, 1, 1], "texture": "#4"} - } - }, - { - "from": [0.4, 7.5, 1], - "to": [0.4, 15.5, 9], - "rotation": {"angle": 0, "axis": "y", "origin": [8, -3, 10]}, - "faces": { - "east": {"uv": [16, 0, 8, 8], "texture": "#4", "tintindex": 0}, - "west": {"uv": [8, 0, 16, 8], "texture": "#4", "tintindex": 0} - } - } - ] -} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/mechanical_arm/flag/long_out.json b/src/main/resources/assets/create/models/block/mechanical_arm/flag/long_out.json deleted file mode 100644 index 6dae60cdb..000000000 --- a/src/main/resources/assets/create/models/block/mechanical_arm/flag/long_out.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "credit": "Made with Blockbench", - "parent": "block/block", - "textures": { - "4": "create:block/marker_flag" - }, - "elements": [ - { - "from": [0, 0, 0], - "to": [1, 16, 1], - "rotation": {"angle": 0, "axis": "y", "origin": [8, -3, 10]}, - "faces": { - "north": {"uv": [1, 0, 2, 16], "texture": "#4"}, - "east": {"uv": [0, 0, 1, 16], "texture": "#4"}, - "south": {"uv": [1, 0, 2, 16], "texture": "#4"}, - "west": {"uv": [0, 0, 1, 16], "texture": "#4"}, - "up": {"uv": [0, 0, 1, 1], "texture": "#4"}, - "down": {"uv": [0, 0, 1, 1], "texture": "#4"} - } - }, - { - "from": [0.4, 7.5, 1], - "to": [0.4, 15.5, 9], - "rotation": {"angle": 0, "axis": "y", "origin": [8, -3, 10]}, - "faces": { - "east": {"uv": [16, 8, 8, 16], "texture": "#4", "tintindex": 0}, - "west": {"uv": [8, 8, 16, 16], "texture": "#4", "tintindex": 0} - } - } - ] -} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/mechanical_arm/flag/short_in.json b/src/main/resources/assets/create/models/block/mechanical_arm/flag/short_in.json deleted file mode 100644 index 84f72eb0c..000000000 --- a/src/main/resources/assets/create/models/block/mechanical_arm/flag/short_in.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "credit": "Made with Blockbench", - "parent": "block/block", - "textures": { - "4": "create:block/marker_flag" - }, - "elements": [ - { - "from": [0, 0, 0], - "to": [1, 8, 1], - "rotation": {"angle": 0, "axis": "y", "origin": [8, -3, 10]}, - "faces": { - "north": {"uv": [1, 8, 2, 16], "texture": "#4"}, - "east": {"uv": [0, 0, 1, 8], "texture": "#4"}, - "south": {"uv": [1, 0, 2, 8], "texture": "#4"}, - "west": {"uv": [0, 0, 1, 8], "texture": "#4"}, - "up": {"uv": [0, 0, 1, 1], "texture": "#4"}, - "down": {"uv": [0, 0, 1, 1], "texture": "#4"} - } - }, - { - "from": [0.4, -0.5, 1], - "to": [0.4, 7.5, 9], - "rotation": {"angle": 0, "axis": "y", "origin": [8, -3, 10]}, - "faces": { - "east": {"uv": [16, 0, 8, 8], "texture": "#4", "tintindex": 0}, - "west": {"uv": [8, 0, 16, 8], "texture": "#4", "tintindex": 0} - } - } - ] -} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/mechanical_arm/flag/short_out.json b/src/main/resources/assets/create/models/block/mechanical_arm/flag/short_out.json deleted file mode 100644 index 24223d31a..000000000 --- a/src/main/resources/assets/create/models/block/mechanical_arm/flag/short_out.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "credit": "Made with Blockbench", - "parent": "block/block", - "textures": { - "4": "create:block/marker_flag" - }, - "elements": [ - { - "from": [0, 0, 0], - "to": [1, 8, 1], - "rotation": {"angle": 0, "axis": "y", "origin": [8, -3, 10]}, - "faces": { - "north": {"uv": [1, 8, 2, 16], "texture": "#4"}, - "east": {"uv": [0, 0, 1, 8], "texture": "#4"}, - "south": {"uv": [1, 0, 2, 8], "texture": "#4"}, - "west": {"uv": [0, 0, 1, 8], "texture": "#4"}, - "up": {"uv": [0, 0, 1, 1], "texture": "#4"}, - "down": {"uv": [0, 0, 1, 1], "texture": "#4"} - } - }, - { - "from": [0.4, -0.5, 1], - "to": [0.4, 7.5, 9], - "rotation": {"angle": 0, "axis": "y", "origin": [8, -3, 10]}, - "faces": { - "east": {"uv": [16, 8, 8, 16], "texture": "#4", "tintindex": 0}, - "west": {"uv": [8, 8, 16, 16], "texture": "#4", "tintindex": 0} - } - } - ] -} \ No newline at end of file diff --git a/src/main/resources/assets/create/textures/block/marker_flag.png b/src/main/resources/assets/create/textures/block/marker_flag.png deleted file mode 100644 index c3a12462de4e6a665dd049bd2a64ff3fe1ccb845..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 196 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFpO1)z4*}Q$iB}dyzkZ From 5a747ce93c1e5b0386474e03e14d381d505acf66 Mon Sep 17 00:00:00 2001 From: patryk3211 Date: Tue, 10 May 2022 14:51:38 +0200 Subject: [PATCH 08/31] Added support for wearing goggles on curios head slot --- build.gradle | 7 +++++ gradle.properties | 2 ++ src/main/java/com/simibubi/create/Create.java | 5 +++ .../java/com/simibubi/create/compat/Mods.java | 3 +- .../simibubi/create/compat/curios/Curios.java | 31 +++++++++++++++++++ .../data/curios/tags/items/head.json | 6 ++++ 6 files changed, 53 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/simibubi/create/compat/curios/Curios.java create mode 100644 src/main/resources/data/curios/tags/items/head.json diff --git a/build.gradle b/build.gradle index 7fe024dcc..b5c3bafa4 100644 --- a/build.gradle +++ b/build.gradle @@ -135,6 +135,10 @@ repositories { //location of the maven for dynamic trees url 'https://harleyoconnor.com/maven' } + maven { + //location of the maven for curios api + url = "https://maven.theillusivec4.top/" + } } configurations { @@ -157,6 +161,9 @@ dependencies { compileOnly fg.deobf("mezz.jei:jei-${jei_minecraft_version}:${jei_version}:api") runtimeOnly fg.deobf("mezz.jei:jei-${jei_minecraft_version}:${jei_version}") + compileOnly fg.deobf("top.theillusivec4.curios:curios-forge:${curios_minecraft_version}-${curios_version}:api") + runtimeOnly fg.deobf("top.theillusivec4.curios:curios-forge:${curios_minecraft_version}-${curios_version}") + // implementation fg.deobf("curse.maven:druidcraft-340991:3101903") // implementation fg.deobf("com.ferreusveritas.dynamictrees:DynamicTrees-1.16.5:0.10.0-Beta25") // runtimeOnly fg.deobf("vazkii.arl:AutoRegLib:1.4-35.69") diff --git a/gradle.properties b/gradle.properties index 943a79117..fa671c50f 100644 --- a/gradle.properties +++ b/gradle.properties @@ -22,6 +22,8 @@ registrate_version = MC1.18.2-1.0.25 flywheel_version = 1.18-0.7.0.67 jei_minecraft_version = 1.18.2 jei_version = 9.5.3.143 +curios_minecraft_version = 1.18.2 +curios_version = 5.0.7.0 # curseforge information projectId = 328085 diff --git a/src/main/java/com/simibubi/create/Create.java b/src/main/java/com/simibubi/create/Create.java index 951b0f95e..a98390755 100644 --- a/src/main/java/com/simibubi/create/Create.java +++ b/src/main/java/com/simibubi/create/Create.java @@ -2,6 +2,9 @@ package com.simibubi.create; import java.util.Random; +import com.simibubi.create.compat.Mods; +import com.simibubi.create.compat.curios.Curios; + import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -119,6 +122,8 @@ public class Create { DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> CreateClient.onCtorClient(modEventBus, forgeEventBus)); + + Mods.CURIOS.executeIfInstalled(() -> Curios::init); } public static void init(final FMLCommonSetupEvent event) { diff --git a/src/main/java/com/simibubi/create/compat/Mods.java b/src/main/java/com/simibubi/create/compat/Mods.java index 1aba89709..52201bb24 100644 --- a/src/main/java/com/simibubi/create/compat/Mods.java +++ b/src/main/java/com/simibubi/create/compat/Mods.java @@ -12,7 +12,8 @@ import net.minecraftforge.fml.ModList; */ public enum Mods { DYNAMICTREES, - TCONSTRUCT; + TCONSTRUCT, + CURIOS; /** * @return a boolean of whether the mod is loaded or not based on mod id diff --git a/src/main/java/com/simibubi/create/compat/curios/Curios.java b/src/main/java/com/simibubi/create/compat/curios/Curios.java new file mode 100644 index 000000000..5d55aef84 --- /dev/null +++ b/src/main/java/com/simibubi/create/compat/curios/Curios.java @@ -0,0 +1,31 @@ +package com.simibubi.create.compat.curios; + +import com.simibubi.create.AllItems; +import com.simibubi.create.content.contraptions.goggles.GogglesItem; + +import net.minecraftforge.fml.InterModComms; +import net.minecraftforge.fml.event.lifecycle.InterModEnqueueEvent; +import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; +import top.theillusivec4.curios.api.CuriosCapability; +import top.theillusivec4.curios.api.SlotTypeMessage; +import top.theillusivec4.curios.api.SlotTypePreset; + +import java.util.concurrent.atomic.AtomicBoolean; + +public class Curios { + public static void init() { + FMLJavaModLoadingContext.get().getModEventBus().addListener(Curios::onInterModEnqueue); + + GogglesItem.addIsWearingPredicate(player -> { + AtomicBoolean hasGoggles = new AtomicBoolean(false); + player.getCapability(CuriosCapability.INVENTORY).ifPresent(handler -> { + hasGoggles.set(handler.getCurios().get("head").getStacks().getStackInSlot(0).getItem() == AllItems.GOGGLES.get()); + }); + return hasGoggles.get(); + }); + } + + private static void onInterModEnqueue(final InterModEnqueueEvent event) { + InterModComms.sendTo("curios", SlotTypeMessage.REGISTER_TYPE, () -> SlotTypePreset.HEAD.getMessageBuilder().build()); + } +} diff --git a/src/main/resources/data/curios/tags/items/head.json b/src/main/resources/data/curios/tags/items/head.json new file mode 100644 index 000000000..635bc6fe7 --- /dev/null +++ b/src/main/resources/data/curios/tags/items/head.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "create:goggles" + ] +} From 5af222a99b84c1e66075cfa94983bc383a2c9fcb Mon Sep 17 00:00:00 2001 From: patryk3211 Date: Wed, 11 May 2022 14:23:55 +0200 Subject: [PATCH 09/31] Goggles render correctly when worn as a Curio --- .../simibubi/create/compat/curios/Curios.java | 18 ++++- .../create/compat/curios/CuriosRenderers.java | 21 ++++++ .../compat/curios/GogglesCurioRenderer.java | 67 +++++++++++++++++++ 3 files changed, 103 insertions(+), 3 deletions(-) create mode 100644 src/main/java/com/simibubi/create/compat/curios/CuriosRenderers.java create mode 100644 src/main/java/com/simibubi/create/compat/curios/GogglesCurioRenderer.java diff --git a/src/main/java/com/simibubi/create/compat/curios/Curios.java b/src/main/java/com/simibubi/create/compat/curios/Curios.java index 5d55aef84..566677125 100644 --- a/src/main/java/com/simibubi/create/compat/curios/Curios.java +++ b/src/main/java/com/simibubi/create/compat/curios/Curios.java @@ -1,31 +1,43 @@ package com.simibubi.create.compat.curios; +import java.util.concurrent.atomic.AtomicBoolean; + import com.simibubi.create.AllItems; import com.simibubi.create.content.contraptions.goggles.GogglesItem; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.fml.DistExecutor; import net.minecraftforge.fml.InterModComms; +import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; import net.minecraftforge.fml.event.lifecycle.InterModEnqueueEvent; import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; import top.theillusivec4.curios.api.CuriosCapability; import top.theillusivec4.curios.api.SlotTypeMessage; import top.theillusivec4.curios.api.SlotTypePreset; - -import java.util.concurrent.atomic.AtomicBoolean; +import top.theillusivec4.curios.api.type.inventory.ICurioStacksHandler; public class Curios { public static void init() { FMLJavaModLoadingContext.get().getModEventBus().addListener(Curios::onInterModEnqueue); + FMLJavaModLoadingContext.get().getModEventBus().addListener(Curios::onClientSetup); GogglesItem.addIsWearingPredicate(player -> { AtomicBoolean hasGoggles = new AtomicBoolean(false); player.getCapability(CuriosCapability.INVENTORY).ifPresent(handler -> { - hasGoggles.set(handler.getCurios().get("head").getStacks().getStackInSlot(0).getItem() == AllItems.GOGGLES.get()); + ICurioStacksHandler stacksHandler = handler.getCurios().get("head"); + if(stacksHandler != null) hasGoggles.set(stacksHandler.getStacks().getStackInSlot(0).getItem() == AllItems.GOGGLES.get()); }); return hasGoggles.get(); }); + + DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> FMLJavaModLoadingContext.get().getModEventBus().addListener(CuriosRenderers::onLayerRegister)); } private static void onInterModEnqueue(final InterModEnqueueEvent event) { InterModComms.sendTo("curios", SlotTypeMessage.REGISTER_TYPE, () -> SlotTypePreset.HEAD.getMessageBuilder().build()); } + + private static void onClientSetup(final FMLClientSetupEvent event) { + CuriosRenderers.register(); + } } diff --git a/src/main/java/com/simibubi/create/compat/curios/CuriosRenderers.java b/src/main/java/com/simibubi/create/compat/curios/CuriosRenderers.java new file mode 100644 index 000000000..740d251b0 --- /dev/null +++ b/src/main/java/com/simibubi/create/compat/curios/CuriosRenderers.java @@ -0,0 +1,21 @@ +package com.simibubi.create.compat.curios; + +import com.simibubi.create.AllItems; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.model.geom.builders.LayerDefinition; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.client.event.EntityRenderersEvent; +import top.theillusivec4.curios.api.client.CuriosRendererRegistry; + +@OnlyIn(Dist.CLIENT) +public class CuriosRenderers { + public static void register() { + CuriosRendererRegistry.register(AllItems.GOGGLES.get(), () -> new GogglesCurioRenderer(Minecraft.getInstance().getEntityModels().bakeLayer(GogglesCurioRenderer.LAYER))); + } + + public static void onLayerRegister(final EntityRenderersEvent.RegisterLayerDefinitions event) { + event.registerLayerDefinition(GogglesCurioRenderer.LAYER, () -> LayerDefinition.create(GogglesCurioRenderer.mesh(), 1, 1)); + } +} diff --git a/src/main/java/com/simibubi/create/compat/curios/GogglesCurioRenderer.java b/src/main/java/com/simibubi/create/compat/curios/GogglesCurioRenderer.java new file mode 100644 index 000000000..940822439 --- /dev/null +++ b/src/main/java/com/simibubi/create/compat/curios/GogglesCurioRenderer.java @@ -0,0 +1,67 @@ +package com.simibubi.create.compat.curios; + +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.math.Vector3f; +import com.simibubi.create.Create; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.model.EntityModel; +import net.minecraft.client.model.HumanoidModel; +import net.minecraft.client.model.geom.ModelLayerLocation; +import net.minecraft.client.model.geom.ModelPart; +import net.minecraft.client.model.geom.PartPose; +import net.minecraft.client.model.geom.builders.CubeDeformation; +import net.minecraft.client.model.geom.builders.CubeListBuilder; +import net.minecraft.client.model.geom.builders.MeshDefinition; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.block.model.ItemTransforms; +import net.minecraft.client.renderer.entity.RenderLayerParent; +import net.minecraft.client.renderer.texture.OverlayTexture; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.item.ItemStack; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import top.theillusivec4.curios.api.SlotContext; +import top.theillusivec4.curios.api.client.ICurioRenderer; + +@OnlyIn(Dist.CLIENT) +public class GogglesCurioRenderer implements ICurioRenderer { + public static final ModelLayerLocation LAYER = new ModelLayerLocation(new ResourceLocation(Create.ID, "goggles"), "goggles"); + + private final HumanoidModel model; + + public GogglesCurioRenderer(ModelPart part) { + this.model = new HumanoidModel<>(part); + } + + @Override + public > void render(ItemStack stack, SlotContext slotContext, PoseStack matrixStack, RenderLayerParent renderLayerParent, MultiBufferSource renderTypeBuffer, int light, float limbSwing, float limbSwingAmount, float partialTicks, float ageInTicks, float netHeadYaw, float headPitch) { + // Prepare values for transformation + model.setupAnim(slotContext.entity(), limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch); + model.prepareMobModel(slotContext.entity(), limbSwing, limbSwingAmount, partialTicks); + ICurioRenderer.followHeadRotations(slotContext.entity(), model.head); + + // Translate and rotate with our head + matrixStack.pushPose(); + matrixStack.translate(model.head.x / 16.0, model.head.y / 16.0, model.head.z / 16.0); + matrixStack.mulPose(Vector3f.YP.rotation(model.head.yRot)); + matrixStack.mulPose(Vector3f.XP.rotation(model.head.xRot)); + + // Translate and scale to our head + matrixStack.translate(0, -0.25, 0); + matrixStack.mulPose(Vector3f.ZP.rotationDegrees(180.0f)); + matrixStack.scale(0.625f, 0.625f, 0.625f); + + // Render + Minecraft.getInstance().getItemRenderer().renderStatic(stack, ItemTransforms.TransformType.HEAD, light, OverlayTexture.NO_OVERLAY, matrixStack, renderTypeBuffer, 0); + matrixStack.popPose(); + } + + public static MeshDefinition mesh() { + CubeListBuilder builder = new CubeListBuilder(); + MeshDefinition mesh = HumanoidModel.createMesh(CubeDeformation.NONE, 0); + mesh.getRoot().addOrReplaceChild("head", builder, PartPose.ZERO); + return mesh; + } +} From 2ed5ee9f3b274f036f5080358cd302d26cfef0e1 Mon Sep 17 00:00:00 2001 From: patryk3211 Date: Wed, 11 May 2022 14:42:43 +0200 Subject: [PATCH 10/31] Goggles are on your eyes if you wear something on your head. --- .../simibubi/create/compat/curios/GogglesCurioRenderer.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/main/java/com/simibubi/create/compat/curios/GogglesCurioRenderer.java b/src/main/java/com/simibubi/create/compat/curios/GogglesCurioRenderer.java index 940822439..25a243fc2 100644 --- a/src/main/java/com/simibubi/create/compat/curios/GogglesCurioRenderer.java +++ b/src/main/java/com/simibubi/create/compat/curios/GogglesCurioRenderer.java @@ -18,6 +18,7 @@ import net.minecraft.client.renderer.block.model.ItemTransforms; import net.minecraft.client.renderer.entity.RenderLayerParent; import net.minecraft.client.renderer.texture.OverlayTexture; import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.EquipmentSlot; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.item.ItemStack; import net.minecraftforge.api.distmarker.Dist; @@ -53,6 +54,11 @@ public class GogglesCurioRenderer implements ICurioRenderer { matrixStack.mulPose(Vector3f.ZP.rotationDegrees(180.0f)); matrixStack.scale(0.625f, 0.625f, 0.625f); + if(!slotContext.entity().getItemBySlot(EquipmentSlot.HEAD).isEmpty()) { + matrixStack.mulPose(Vector3f.ZP.rotationDegrees(180.0f)); + matrixStack.translate(0, -0.25, 0); + } + // Render Minecraft.getInstance().getItemRenderer().renderStatic(stack, ItemTransforms.TransformType.HEAD, light, OverlayTexture.NO_OVERLAY, matrixStack, renderTypeBuffer, 0); matrixStack.popPose(); From 43af1526416c581895b4d02a5ab7fe3eb5dfb123 Mon Sep 17 00:00:00 2001 From: Talrey Date: Thu, 12 May 2022 13:45:04 -0700 Subject: [PATCH 11/31] found a typo in OUTPUT --- .../tileEntity/behaviour/fluid/SmartFluidTankBehaviour.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/fluid/SmartFluidTankBehaviour.java b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/fluid/SmartFluidTankBehaviour.java index b6682cbdd..565518ec4 100644 --- a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/fluid/SmartFluidTankBehaviour.java +++ b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/fluid/SmartFluidTankBehaviour.java @@ -24,7 +24,7 @@ public class SmartFluidTankBehaviour extends TileEntityBehaviour { public static final BehaviourType - TYPE = new BehaviourType<>(), INPUT = new BehaviourType<>("Input"), oOUTPUT = new BehaviourType<>("Output"); + TYPE = new BehaviourType<>(), INPUT = new BehaviourType<>("Input"), OUTPUT = new BehaviourType<>("Output"); private static final int SYNC_RATE = 8; From 71af8410469714799597a127d79425ad874d00a8 Mon Sep 17 00:00:00 2001 From: Talrey Date: Fri, 13 May 2022 12:37:15 -0700 Subject: [PATCH 12/31] world of fluidtanks --- .../api/connectivity/ConnectivityHandler.java | 372 ++++++++++++++++++ .../BlockMovementChecks.java | 5 +- .../fluids/tank/FluidTankBlock.java | 12 +- .../fluids/tank/FluidTankCTBehaviour.java | 3 +- .../fluids/tank/FluidTankItem.java | 5 +- .../fluids/tank/FluidTankModel.java | 9 +- .../fluids/tank/FluidTankTileEntity.java | 89 ++++- .../tileEntity/IMultiTileContainer.java | 67 +++- 8 files changed, 540 insertions(+), 22 deletions(-) create mode 100644 src/main/java/com/simibubi/create/api/connectivity/ConnectivityHandler.java diff --git a/src/main/java/com/simibubi/create/api/connectivity/ConnectivityHandler.java b/src/main/java/com/simibubi/create/api/connectivity/ConnectivityHandler.java new file mode 100644 index 000000000..b1801c729 --- /dev/null +++ b/src/main/java/com/simibubi/create/api/connectivity/ConnectivityHandler.java @@ -0,0 +1,372 @@ +package com.simibubi.create.api.connectivity; + +import com.simibubi.create.content.contraptions.fluids.tank.CreativeFluidTankTileEntity; +import com.simibubi.create.foundation.tileEntity.IMultiTileContainer; + +import com.simibubi.create.foundation.utility.Iterate; + +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityType; + +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.IFluidTank; +import net.minecraftforge.fluids.capability.CapabilityFluidHandler; + +import net.minecraftforge.fluids.capability.IFluidHandler; + +import net.minecraftforge.items.CapabilityItemHandler; + +import org.apache.commons.lang3.tuple.Pair; + +import javax.annotation.Nullable; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.PriorityQueue; +import java.util.Set; + +public class ConnectivityHandler { + + public static void formMulti (T be) { + SearchCache cache = new SearchCache<>(); + List frontier = new ArrayList<>(); + frontier.add(be); + formMulti(be.getType(), be.getLevel(), cache, frontier); + } + + private static void formMulti (BlockEntityType type, BlockGetter level, SearchCache cache, List frontier) { + PriorityQueue> creationQueue = makeCreationQueue(); + Set visited = new HashSet<>(); + Direction.Axis mainAxis = frontier.get(0).getMainConnectionAxis(); + + // essentially, if it's a vertical multi then the search won't be restricted by Y + // alternately, a horizontal multi search shouldn't be restricted by X or Z + int minX = (mainAxis == Direction.Axis.Y ? Integer.MAX_VALUE : Integer.MIN_VALUE); + int minY = (mainAxis != Direction.Axis.Y ? Integer.MAX_VALUE : Integer.MIN_VALUE); + int minZ = (mainAxis == Direction.Axis.Y ? Integer.MAX_VALUE : Integer.MIN_VALUE); + + for (T be : frontier) { + BlockPos pos = be.getBlockPos(); + minX = Math.min(pos.getX(), minX); + minY = Math.min(pos.getY(), minY); + minZ = Math.min(pos.getZ(), minZ); + } + if (mainAxis == Direction.Axis.Y) minX -= frontier.get(0).getMaxWidth(); + if (mainAxis != Direction.Axis.Y) minY -= frontier.get(0).getMaxWidth(); + if (mainAxis == Direction.Axis.Y) minZ -= frontier.get(0).getMaxWidth(); + + while (!frontier.isEmpty()) { + T part = frontier.remove(0); + BlockPos partPos = part.getBlockPos(); + if (visited.contains(partPos)) continue; + + visited.add(partPos); + + int amount = tryToFormNewMulti(part, cache, true); + if (amount > 1) { + creationQueue.add(Pair.of(amount, part)); + } + + for (Direction.Axis axis : Iterate.axes) { + Direction dir = Direction.get(Direction.AxisDirection.NEGATIVE, axis); + BlockPos next = partPos.relative(dir); + + if (next.getX() <= minX || next.getY() <= minY || next.getZ() <= minZ) continue; + if (visited.contains(next)) continue; + T nextBe = partAt(type, level, next); + if (nextBe == null) continue; + if (nextBe.isRemoved()) continue; + frontier.add(nextBe); + } + } + visited.clear(); + + while (!creationQueue.isEmpty()) { + Pair next = creationQueue.poll(); + T toCreate = next.getValue(); + if (visited.contains(toCreate.getBlockPos())) continue; + + visited.add(toCreate.getBlockPos()); + tryToFormNewMulti(toCreate, cache, false); + } + } + + private static int tryToFormNewMulti (T be, SearchCache cache, boolean simulate) { + int bestWidth = 1; + int bestAmount = -1; + if (!be.isController()) return 0; + + int radius = be.getMaxWidth(); + for (int w = 1; w <= radius; w++) { + int amount = tryToFormNewMultiOfWidth(be, w, cache, true); + if (amount < bestAmount) continue; + bestWidth = w; + bestAmount = amount; + } + + if (!simulate) { + int beWidth = be.getWidth(); + if (beWidth == bestWidth && beWidth*beWidth * be.getHeight() == bestAmount) return bestAmount; + + splitMultiAndInvalidate(be, cache, false); + if (be.hasFluid()) be.setTankSize(0, bestAmount); + + tryToFormNewMultiOfWidth(be, bestWidth, cache, false); + + be.preventConnectivityUpdate(); + be.setWidth(bestWidth); + be.setHeight(bestAmount / bestWidth / bestWidth); + be.notifyMultiUpdated(); + } + return bestAmount; + } + + private static int tryToFormNewMultiOfWidth (T be, int width, SearchCache cache, boolean simulate) { + int amount = 0; + int height = 0; + BlockEntityType type = be.getType(); + Level level = be.getLevel(); + if (level == null) return 0; + BlockPos origin = be.getBlockPos(); + + // optional fluid handling + IFluidTank beTank = null; + FluidStack fluid = FluidStack.EMPTY; + if (be.hasFluid()) { + beTank = be.getTank(0); + fluid = beTank.getFluid(); + } + Direction.Axis axis = be.getMainConnectionAxis(); + + Search: + for (int yOffset = 0; yOffset < be.getMaxLength(axis, width); yOffset++) { + for (int xOffset = 0; xOffset < width; xOffset++) { + for (int zOffset = 0; zOffset < width; zOffset++) { + BlockPos pos = switch (axis) { + case X -> origin.offset(yOffset, xOffset, zOffset); + case Y -> origin.offset(xOffset, yOffset, zOffset); + case Z -> origin.offset(xOffset, zOffset, yOffset); + }; + Optional part = cache.getOrCache(type, level, pos); + if (part.isEmpty()) break Search; + + T controller = part.get(); + int otherWidth = controller.getWidth(); + if (otherWidth > width) break Search; + if (otherWidth == width && controller.getHeight() == be.getMaxLength(axis, width)) break Search; + + Direction.Axis conAxis = controller.getMainConnectionAxis(); + if (axis != conAxis) break Search; + + BlockPos conPos = controller.getBlockPos(); + if (!conPos.equals(origin)) { + if (axis == Direction.Axis.Y) { // vertical multi, like a FluidTank + if (conPos.getX() < origin.getX()) break Search; + if (conPos.getZ() < origin.getZ()) break Search; + if (conPos.getX() + otherWidth > origin.getX() + width) break Search; + if (conPos.getZ() + otherWidth > origin.getZ() + width) break Search; + } else { // horizontal multi, like an ItemVault + if (axis == Direction.Axis.Z && conPos.getX() < origin.getX()) break Search; + if (conPos.getY() < origin.getY()) break Search; + if (axis == Direction.Axis.X && conPos.getZ() < origin.getZ()) break Search; + if (axis == Direction.Axis.Z && conPos.getX() + otherWidth > origin.getX() + width) break Search; + if (conPos.getY() + otherWidth > origin.getY() + width) break Search; + if (axis == Direction.Axis.X && conPos.getZ() + otherWidth > origin.getZ() + width) break Search; + } + } + FluidStack otherFluid = controller.getFluid(0); + if (!fluid.isEmpty() && !otherFluid.isEmpty() && !fluid.isFluidEqual(otherFluid)) break Search; + } + } + amount += width * width; + height++; + } + + if (simulate) return amount; + + Object extraData = be.getExtraData(); + + for (int yOffset = 0; yOffset < height; yOffset++) { + for (int xOffset = 0; xOffset < width; xOffset++) { + for (int zOffset = 0; zOffset < width; zOffset++) { + BlockPos pos = switch (axis) { + case X -> origin.offset(yOffset, xOffset, zOffset); + case Y -> origin.offset(xOffset, yOffset, zOffset); + case Z -> origin.offset(xOffset, zOffset, yOffset); + }; + T part = partAt(type, level, pos); + if (part == null) continue; + if (part == be) continue; + + extraData = be.modifyExtraData(extraData); + + if (part.hasFluid()) { + IFluidTank tankAt = part.getTank(0); + FluidStack fluidAt = tankAt.getFluid(); + if (!fluidAt.isEmpty()) { + // making this generic would be a rather large mess, unfortunately + if (beTank != null && fluid.isEmpty() && beTank instanceof CreativeFluidTankTileEntity.CreativeSmartFluidTank) { + ((CreativeFluidTankTileEntity.CreativeSmartFluidTank)beTank).setContainedFluid(fluidAt); + } + } + tankAt.drain(tankAt.getCapacity(), IFluidHandler.FluidAction.EXECUTE); + } + + splitMultiAndInvalidate(part, cache, false); + part.setController(origin); + part.preventConnectivityUpdate(); + cache.put(pos, be); + part.setHeight(height); + part.notifyMultiUpdated(); + } + } + } + be.setExtraData(extraData); + be.notifyMultiUpdated(); + return amount; + } + + public static void splitMulti (T be) { + splitMultiAndInvalidate(be, null, false); + } + + // tryReconnect helps whenever only a few tanks have been removed + private static void splitMultiAndInvalidate (T be, @Nullable SearchCache cache, boolean tryReconnect) { + Level level = be.getLevel(); + if (level == null) return; + + be = be.getControllerTE(); + if (be == null) return; + + int height = be.getHeight(); + int width = be.getWidth(); + if (width == 1 && height == 1) return; + + BlockPos origin = be.getBlockPos(); + List frontier = new ArrayList<>(); + Direction.Axis axis = be.getMainConnectionAxis(); + + // fluid handling, if present + FluidStack toDistribute = FluidStack.EMPTY; + int maxCapacity = 0; + if (be.hasFluid()) { + toDistribute = be.getFluid(0); + maxCapacity = be.getTankSize(0); + if (!toDistribute.isEmpty() && !be.isRemoved()) toDistribute.shrink(maxCapacity); + be.setTankSize(0, 1); + } + + for (int yOffset = 0; yOffset < height; yOffset++) { + for (int xOffset = 0; xOffset < width; xOffset++) { + for (int zOffset = 0; zOffset < width; zOffset++) { + BlockPos pos = switch (axis) { + case X -> origin.offset(yOffset, xOffset, zOffset); + case Y -> origin.offset(xOffset, yOffset, zOffset); + case Z -> origin.offset(xOffset, zOffset, yOffset); + }; + T partAt = partAt(be.getType(), level, pos); + if (partAt == null) continue; + if (!partAt.getController().equals(origin)) continue; + + T controllerBE = partAt.getControllerTE(); + partAt.setExtraData ( (controllerBE == null ? null : controllerBE.getExtraData())); + partAt.removeController(true); + + if (!toDistribute.isEmpty() && partAt != be) { + FluidStack copy = toDistribute.copy(); + IFluidTank tank = partAt.getTank(0); + // making this generic would be a rather large mess, unfortunately + if (tank instanceof CreativeFluidTankTileEntity.CreativeSmartFluidTank creativeTank) { + if (creativeTank.isEmpty()) creativeTank.setContainedFluid(toDistribute); + } + else { + int split = Math.min(maxCapacity, toDistribute.getAmount()); + copy.setAmount(split); + toDistribute.shrink(split); + tank.fill(copy, IFluidHandler.FluidAction.EXECUTE); + } + } + if (tryReconnect) { + frontier.add(partAt); + partAt.preventConnectivityUpdate(); + } + if (cache != null) { + cache.put(pos, partAt); + } + } + } + } + if (be.hasItems()) { + be.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY).invalidate(); + } + if (be.hasFluid()) { + be.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY).invalidate(); + } + if (tryReconnect) { + formMulti(be.getType(), level, cache == null ? new SearchCache<>() : cache, frontier); + } + } + + private static PriorityQueue> makeCreationQueue () { + return new PriorityQueue<>((one, two) -> two.getKey() - one.getKey()); + } + + @Nullable + public static T partAt (BlockEntityType type, BlockGetter level, BlockPos pos) { + BlockEntity be = level.getBlockEntity(pos); + if (be != null && be.getType() == type) return checked(be); + + return null; + } + + public static boolean isConnected (BlockGetter level, BlockPos pos, BlockPos other) { + T one = checked(level.getBlockEntity(pos)); + T two = checked(level.getBlockEntity(other)); + if (one == null || two == null) return false; + return one.getController().equals(two.getController()); + } + + @Nullable + @SuppressWarnings("unchecked") + private static T checked (BlockEntity be) { + if (be instanceof IMultiTileContainer) return (T)be; + return null; + } + + private static class SearchCache { + Map> controllerMap; + + public SearchCache () { controllerMap = new HashMap<>(); } + + void put (BlockPos pos, T target) { controllerMap.put(pos, Optional.of(target)); } + + void putEmpty (BlockPos pos) { controllerMap.put(pos, Optional.empty()); } + + boolean hasVisited (BlockPos pos) { return controllerMap.containsKey(pos); } + + Optional getOrCache (BlockEntityType type, BlockGetter level, BlockPos pos) { + if (hasVisited(pos)) return controllerMap.get(pos); + + T partAt = partAt(type, level, pos); + if (partAt == null) { + putEmpty(pos); + return Optional.empty(); + } + T controller = checked(level.getBlockEntity(partAt.getController())); + if (controller == null) { + putEmpty(pos); + return Optional.empty(); + } + put(pos, controller); + return Optional.of(controller); + } + } +} 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 1e9819474..18e989689 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,6 +5,7 @@ import java.util.List; import com.simibubi.create.AllBlocks; import com.simibubi.create.AllTags.AllBlockTags; +import com.simibubi.create.api.connectivity.ConnectivityHandler; 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; @@ -330,7 +331,7 @@ public class BlockMovementChecks { return direction.getAxis() != state.getValue(SailBlock.FACING) .getAxis(); if (state.getBlock() instanceof FluidTankBlock) - return FluidTankConnectivityHandler.isConnected(world, pos, pos.relative(direction)); + return ConnectivityHandler.isConnected(world, pos, pos.relative(direction)); //FluidTankConnectivityHandler.isConnected(world, pos, pos.relative(direction)); if (state.getBlock() instanceof ItemVaultBlock) return ItemVaultConnectivityHandler.isConnected(world, pos, pos.relative(direction)); if (AllBlocks.STICKER.has(state) && state.getValue(StickerBlock.EXTENDED)) { @@ -349,7 +350,7 @@ public class BlockMovementChecks { return state.getValue(HarvesterBlock.FACING) == facing; if (AllBlocks.MECHANICAL_PLOUGH.has(state)) return state.getValue(PloughBlock.FACING) == facing; - + if (AllBlocks.CART_ASSEMBLER.has(state)) return Direction.DOWN == facing; if (AllBlocks.MECHANICAL_SAW.has(state)) diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankBlock.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankBlock.java index f128fba7a..920d78f34 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankBlock.java @@ -1,6 +1,7 @@ package com.simibubi.create.content.contraptions.fluids.tank; import com.simibubi.create.AllTileEntities; +import com.simibubi.create.api.connectivity.ConnectivityHandler; import com.simibubi.create.content.contraptions.fluids.actors.GenericItemFilling; import com.simibubi.create.content.contraptions.fluids.tank.CreativeFluidTankTileEntity.CreativeSmartFluidTank; import com.simibubi.create.content.contraptions.processing.EmptyingByBasin; @@ -90,10 +91,10 @@ public class FluidTankBlock extends Block implements IWrenchable, ITE p_206840_1_) { p_206840_1_.add(TOP, BOTTOM, SHAPE); } - + @Override public int getLightEmission(BlockState state, BlockGetter world, BlockPos pos) { - FluidTankTileEntity tankAt = FluidTankConnectivityHandler.anyTankAt(world, pos); + FluidTankTileEntity tankAt = ConnectivityHandler.partAt(getTileEntityType(), world, pos); //FluidTankConnectivityHandler.anyTankAt(world, pos); if (tankAt == null) return 0; FluidTankTileEntity controllerTE = tankAt.getControllerTE(); @@ -120,7 +121,7 @@ public class FluidTankBlock extends Block implements IWrenchable, ITE getTileEntityClass() { return FluidTankTileEntity.class; } - + @Override public BlockEntityType getTileEntityType() { return creative ? AllTileEntities.CREATIVE_FLUID_TANK.get() : AllTileEntities.FLUID_TANK.get(); diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankCTBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankCTBehaviour.java index 283981a69..0e9843af9 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankCTBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankCTBehaviour.java @@ -1,5 +1,6 @@ package com.simibubi.create.content.contraptions.fluids.tank; +import com.simibubi.create.api.connectivity.ConnectivityHandler; import com.simibubi.create.foundation.block.connected.CTSpriteShiftEntry; import com.simibubi.create.foundation.block.connected.HorizontalCTBehaviour; @@ -21,6 +22,6 @@ public class FluidTankCTBehaviour extends HorizontalCTBehaviour { @Override public boolean connectsTo(BlockState state, BlockState other, BlockAndTintGetter reader, BlockPos pos, BlockPos otherPos, Direction face) { - return state.getBlock() == other.getBlock() && FluidTankConnectivityHandler.isConnected(reader, pos, otherPos); + return state.getBlock() == other.getBlock() && ConnectivityHandler.isConnected(reader, pos, otherPos); //FluidTankConnectivityHandler.isConnected(reader, pos, otherPos); } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankItem.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankItem.java index b2697c105..80745e342 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankItem.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankItem.java @@ -1,5 +1,8 @@ package com.simibubi.create.content.contraptions.fluids.tank; +import com.simibubi.create.AllTileEntities; +import com.simibubi.create.api.connectivity.ConnectivityHandler; + import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.nbt.CompoundTag; @@ -71,7 +74,7 @@ public class FluidTankItem extends BlockItem { if (!FluidTankBlock.isTank(placedOnState)) return; - FluidTankTileEntity tankAt = FluidTankConnectivityHandler.anyTankAt(world, placedOnPos); + FluidTankTileEntity tankAt = ConnectivityHandler.partAt(AllTileEntities.FLUID_TANK.get(), world, placedOnPos); //FluidTankConnectivityHandler.anyTankAt(world, placedOnPos); if (tankAt == null) return; FluidTankTileEntity controllerTE = tankAt.getControllerTE(); 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 34a326704..5796a7e59 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 @@ -7,6 +7,7 @@ import java.util.List; import java.util.Random; import com.simibubi.create.AllSpriteShifts; +import com.simibubi.create.api.connectivity.ConnectivityHandler; import com.simibubi.create.foundation.block.connected.CTModel; import com.simibubi.create.foundation.block.connected.CTSpriteShiftEntry; import com.simibubi.create.foundation.utility.Iterate; @@ -28,20 +29,20 @@ public class FluidTankModel extends CTModel { public static FluidTankModel standard(BakedModel originalModel) { return new FluidTankModel(originalModel, AllSpriteShifts.FLUID_TANK, AllSpriteShifts.COPPER_CASING); } - + public static FluidTankModel creative(BakedModel originalModel) { return new FluidTankModel(originalModel, AllSpriteShifts.CREATIVE_FLUID_TANK, AllSpriteShifts.CREATIVE_CASING); } - + private FluidTankModel(BakedModel originalModel, CTSpriteShiftEntry side, CTSpriteShiftEntry top) { super(originalModel, new FluidTankCTBehaviour(side, top)); } - + @Override protected Builder gatherModelData(Builder builder, BlockAndTintGetter world, BlockPos pos, BlockState state) { CullData cullData = new CullData(); for (Direction d : Iterate.horizontalDirections) - cullData.setCulled(d, FluidTankConnectivityHandler.isConnected(world, pos, pos.relative(d))); + cullData.setCulled(d, ConnectivityHandler.isConnected(world, pos, pos.relative(d))); //FluidTankConnectivityHandler.isConnected(world, pos, pos.relative(d))); return super.gatherModelData(builder, world, pos, state).withInitial(CULL_PROPERTY, cullData); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankTileEntity.java index d1eed27d2..d4f0d71c3 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankTileEntity.java @@ -7,6 +7,8 @@ import java.util.List; import javax.annotation.Nonnull; import javax.annotation.Nullable; +import com.simibubi.create.Create; +import com.simibubi.create.api.connectivity.ConnectivityHandler; import com.simibubi.create.content.contraptions.fluids.tank.FluidTankBlock.Shape; import com.simibubi.create.content.contraptions.goggles.IHaveGoggleInformation; import com.simibubi.create.foundation.config.AllConfigs; @@ -79,7 +81,8 @@ public class FluidTankTileEntity extends SmartTileEntity implements IHaveGoggleI return; if (!isController()) return; - FluidTankConnectivityHandler.formTanks(this); + //FluidTankConnectivityHandler.formTanks(this); + ConnectivityHandler.formMulti(this); } @Override @@ -103,7 +106,7 @@ public class FluidTankTileEntity extends SmartTileEntity implements IHaveGoggleI if (fluidLevel != null) fluidLevel.tick(); } - + @Override public BlockPos getLastKnownPos() { return lastKnownPos; @@ -145,7 +148,7 @@ public class FluidTankTileEntity extends SmartTileEntity implements IHaveGoggleI for (int xOffset = 0; xOffset < width; xOffset++) { for (int zOffset = 0; zOffset < width; zOffset++) { BlockPos pos = this.worldPosition.offset(xOffset, yOffset, zOffset); - FluidTankTileEntity tankAt = FluidTankConnectivityHandler.anyTankAt(level, pos); + FluidTankTileEntity tankAt = ConnectivityHandler.partAt(getType(), level, pos); //FluidTankConnectivityHandler.anyTankAt(level, pos); if (tankAt == null) continue; level.updateNeighbourForOutputSignal(pos, tankAt.getBlockState() @@ -161,7 +164,7 @@ public class FluidTankTileEntity extends SmartTileEntity implements IHaveGoggleI setChanged(); sendData(); } - + if (isVirtual()) { if (fluidLevel == null) fluidLevel = new InterpolatedChasingValue().start(getFillState()); @@ -462,4 +465,82 @@ public class FluidTankTileEntity extends SmartTileEntity implements IHaveGoggleI this.fluidLevel = fluidLevel; } + @Override + public void preventConnectivityUpdate() { updateConnectivity = false; } + + @Override + public void notifyMultiUpdated () { + BlockState state = this.getBlockState(); + if (FluidTankBlock.isTank(state)) { // safety + state = state.setValue(FluidTankBlock.BOTTOM, getController().getY() == getBlockPos().getY()); + state = state.setValue(FluidTankBlock.TOP, getController().getY() + height - 1 == getBlockPos().getY()); + level.setBlock(getBlockPos(), state, 22); + } + setWindows(window); + onFluidStackChanged(tankInventory.getFluid()); + setChanged(); + } + + @Override + public void setExtraData (@Nullable Object data) { + if (data instanceof Boolean) window = (boolean)data; + } + + @Override + @Nullable + public Object getExtraData () { return window; } + + @Override + public Object modifyExtraData (Object data) { + if (data instanceof Boolean windows) { + windows |= window; + return windows; + } + return data; + } + + @Override + public Direction.Axis getMainConnectionAxis() { return Direction.Axis.Y; } + + @Override + public int getMaxLength (Direction.Axis longAxis, int width) { + if (longAxis == Direction.Axis.Y) return getMaxHeight(); + return getMaxWidth(); + } + + @Override + public int getMaxWidth () { return MAX_SIZE; } + + @Override + public int getHeight () { return height; } + + @Override + public void setHeight (int height) { this.height = height; } + + @Override + public int getWidth () { return width; } + + @Override + public void setWidth (int width) { this.width = width; } + + @Override + public boolean hasFluid () { return true; } + + @Override + public int getTankSize (int tank) { return getCapacityMultiplier(); } + + @Override + public void setTankSize (int tank, int blocks) { + applyFluidTankSize(blocks); + } + + @Override + public IFluidTank getTank (int tank) { + return tankInventory; + } + + @Override + public FluidStack getFluid (int tank) { + return tankInventory.getFluid().copy(); + } } diff --git a/src/main/java/com/simibubi/create/foundation/tileEntity/IMultiTileContainer.java b/src/main/java/com/simibubi/create/foundation/tileEntity/IMultiTileContainer.java index 77a1161e8..68d3eaa6d 100644 --- a/src/main/java/com/simibubi/create/foundation/tileEntity/IMultiTileContainer.java +++ b/src/main/java/com/simibubi/create/foundation/tileEntity/IMultiTileContainer.java @@ -1,12 +1,69 @@ package com.simibubi.create.foundation.tileEntity; import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.properties.BlockStateProperties; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.IFluidTank; + +import javax.annotation.Nullable; public interface IMultiTileContainer { - - public BlockPos getController(); - public boolean isController(); - public void setController(BlockPos pos); - public BlockPos getLastKnownPos(); + BlockPos getController(); + T getControllerTE (); + boolean isController(); + void setController(BlockPos pos); + void removeController (boolean keepContents); + BlockPos getLastKnownPos(); + + void preventConnectivityUpdate (); + void notifyMultiUpdated (); + + // only used for FluidTank windows at present. Might be useful for similar properties on other things? + default void setExtraData (@Nullable Object data) {} + @Nullable + default Object getExtraData () { return null; } + default Object modifyExtraData (Object data) { return data; } + + // multiblock structural information + Direction.Axis getMainConnectionAxis(); + default Direction.Axis getMainAxisOf (BlockEntity be) { // this feels redundant, but it gives us a default to use when defining ::getMainConnectionAxis + BlockState state = be.getBlockState(); + + Direction.Axis axis; + if (state.hasProperty(BlockStateProperties.HORIZONTAL_AXIS)) { + axis = state.getValue(BlockStateProperties.HORIZONTAL_AXIS); + } + else if (state.hasProperty(BlockStateProperties.FACING)) { + axis = state.getValue(BlockStateProperties.FACING).getAxis(); + } + else if (state.hasProperty(BlockStateProperties.HORIZONTAL_FACING)) { + axis = state.getValue(BlockStateProperties.HORIZONTAL_FACING).getAxis(); + } + else axis = Direction.Axis.Y; + + return axis; + } + + int getMaxLength (Direction.Axis longAxis, int width); + int getMaxWidth (); + + int getHeight (); + void setHeight (int height); + int getWidth (); + void setWidth (int width); + + // optional item handling + default boolean hasItems () { return false; } + + // optional fluid handling + // done here rather than through the Capability to allow greater flexibility + default boolean hasFluid () { return false; } + default int getTankSize (int tank) { return 0; } + default void setTankSize (int tank, int blocks) {} + default IFluidTank getTank (int tank) { return null; } + default FluidStack getFluid (int tank) { return FluidStack.EMPTY; } } From 5ca51bd58c3d7dfd74b23f779e23ce121af8920c Mon Sep 17 00:00:00 2001 From: Talrey Date: Fri, 13 May 2022 13:01:29 -0700 Subject: [PATCH 13/31] itemvault hunters --- .../api/connectivity/ConnectivityHandler.java | 1 + .../BlockMovementChecks.java | 2 +- .../logistics/block/vault/ItemVaultBlock.java | 11 ++-- .../block/vault/ItemVaultCTBehaviour.java | 3 +- .../logistics/block/vault/ItemVaultItem.java | 4 +- .../block/vault/ItemVaultTileEntity.java | 58 ++++++++++++++++--- 6 files changed, 65 insertions(+), 14 deletions(-) diff --git a/src/main/java/com/simibubi/create/api/connectivity/ConnectivityHandler.java b/src/main/java/com/simibubi/create/api/connectivity/ConnectivityHandler.java index b1801c729..747e4bff8 100644 --- a/src/main/java/com/simibubi/create/api/connectivity/ConnectivityHandler.java +++ b/src/main/java/com/simibubi/create/api/connectivity/ConnectivityHandler.java @@ -225,6 +225,7 @@ public class ConnectivityHandler { part.preventConnectivityUpdate(); cache.put(pos, be); part.setHeight(height); + part.setWidth(width); part.notifyMultiUpdated(); } } 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 18e989689..5832da41a 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 @@ -333,7 +333,7 @@ public class BlockMovementChecks { if (state.getBlock() instanceof FluidTankBlock) return ConnectivityHandler.isConnected(world, pos, pos.relative(direction)); //FluidTankConnectivityHandler.isConnected(world, pos, pos.relative(direction)); if (state.getBlock() instanceof ItemVaultBlock) - return ItemVaultConnectivityHandler.isConnected(world, pos, pos.relative(direction)); + return ConnectivityHandler.isConnected(world, pos, pos.relative(direction)); //ItemVaultConnectivityHandler.isConnected(world, pos, pos.relative(direction)); if (AllBlocks.STICKER.has(state) && state.getValue(StickerBlock.EXTENDED)) { return direction == state.getValue(StickerBlock.FACING) && !isNotSupportive(world.getBlockState(pos.relative(direction)), direction.getOpposite()); diff --git a/src/main/java/com/simibubi/create/content/logistics/block/vault/ItemVaultBlock.java b/src/main/java/com/simibubi/create/content/logistics/block/vault/ItemVaultBlock.java index e8fb413b8..34bbde3e7 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/vault/ItemVaultBlock.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/vault/ItemVaultBlock.java @@ -4,6 +4,7 @@ import javax.annotation.Nullable; import com.simibubi.create.AllBlocks; import com.simibubi.create.AllTileEntities; +import com.simibubi.create.api.connectivity.ConnectivityHandler; import com.simibubi.create.content.contraptions.wrench.IWrenchable; import com.simibubi.create.foundation.block.ITE; import com.simibubi.create.foundation.item.ItemHelper; @@ -85,7 +86,8 @@ public class ItemVaultBlock extends Block implements IWrenchable, ITE 2), 22); + } + itemCapability.invalidate(); + setChanged(); + } + + @Override + public Direction.Axis getMainConnectionAxis() { return getMainAxisOf(this); } + + @Override + public int getMaxLength (Direction.Axis longAxis, int width) { + if (longAxis == Direction.Axis.Y) return getMaxWidth(); + return getMaxLength(width); + } + + @Override + public int getMaxWidth () { + return 3; + } + + @Override + public int getHeight () { return length; } + + @Override + public int getWidth () { return radius; } + + @Override + public void setHeight (int height) { this.length = height; } + + @Override + public void setWidth (int width) { this.radius = width; } + + @Override + public boolean hasItems () { return true; } } From b1f8b1293f94f362a4fb770e00aa873a5995a91d Mon Sep 17 00:00:00 2001 From: Talrey Date: Fri, 13 May 2022 14:20:25 -0700 Subject: [PATCH 14/31] getting creative --- .../content/contraptions/fluids/tank/FluidTankItem.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankItem.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankItem.java index 80745e342..43bb3b288 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankItem.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankItem.java @@ -1,5 +1,6 @@ package com.simibubi.create.content.contraptions.fluids.tank; +import com.simibubi.create.AllBlocks; import com.simibubi.create.AllTileEntities; import com.simibubi.create.api.connectivity.ConnectivityHandler; @@ -74,7 +75,11 @@ public class FluidTankItem extends BlockItem { if (!FluidTankBlock.isTank(placedOnState)) return; - FluidTankTileEntity tankAt = ConnectivityHandler.partAt(AllTileEntities.FLUID_TANK.get(), world, placedOnPos); //FluidTankConnectivityHandler.anyTankAt(world, placedOnPos); + boolean creative = getBlock().equals(AllBlocks.CREATIVE_FLUID_TANK.get()); + FluidTankTileEntity tankAt = ConnectivityHandler.partAt( + creative ? AllTileEntities.CREATIVE_FLUID_TANK.get() : AllTileEntities.FLUID_TANK.get(), world, placedOnPos + ); + //FluidTankConnectivityHandler.anyTankAt(world, placedOnPos); if (tankAt == null) return; FluidTankTileEntity controllerTE = tankAt.getControllerTE(); From 2ad8ffe0edf86359410aae41d14572e4bd555ff2 Mon Sep 17 00:00:00 2001 From: Talrey Date: Fri, 13 May 2022 14:36:26 -0700 Subject: [PATCH 15/31] tanks for the fill up --- .../simibubi/create/api/connectivity/ConnectivityHandler.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/com/simibubi/create/api/connectivity/ConnectivityHandler.java b/src/main/java/com/simibubi/create/api/connectivity/ConnectivityHandler.java index 747e4bff8..d98ac5e58 100644 --- a/src/main/java/com/simibubi/create/api/connectivity/ConnectivityHandler.java +++ b/src/main/java/com/simibubi/create/api/connectivity/ConnectivityHandler.java @@ -216,6 +216,7 @@ public class ConnectivityHandler { if (beTank != null && fluid.isEmpty() && beTank instanceof CreativeFluidTankTileEntity.CreativeSmartFluidTank) { ((CreativeFluidTankTileEntity.CreativeSmartFluidTank)beTank).setContainedFluid(fluidAt); } + if (be.hasFluid() && beTank != null) beTank.fill(fluidAt, IFluidHandler.FluidAction.EXECUTE); } tankAt.drain(tankAt.getCapacity(), IFluidHandler.FluidAction.EXECUTE); } From b088843aa174f91698137481688b10806fc7e156 Mon Sep 17 00:00:00 2001 From: Talrey Date: Fri, 13 May 2022 15:20:13 -0700 Subject: [PATCH 16/31] cleanup and style --- .../api/connectivity/ConnectivityHandler.java | 32 +- .../fluids/tank/FluidTankBlock.java | 5 +- .../tank/FluidTankConnectivityHandler.java | 381 ------------------ .../fluids/tank/FluidTankItem.java | 1 - .../fluids/tank/FluidTankTileEntity.java | 34 +- .../logistics/block/vault/ItemVaultBlock.java | 2 - .../vault/ItemVaultConnectivityHandler.java | 329 --------------- .../logistics/block/vault/ItemVaultItem.java | 1 - .../block/vault/ItemVaultTileEntity.java | 18 +- 9 files changed, 42 insertions(+), 761 deletions(-) delete mode 100644 src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankConnectivityHandler.java delete mode 100644 src/main/java/com/simibubi/create/content/logistics/block/vault/ItemVaultConnectivityHandler.java diff --git a/src/main/java/com/simibubi/create/api/connectivity/ConnectivityHandler.java b/src/main/java/com/simibubi/create/api/connectivity/ConnectivityHandler.java index d98ac5e58..9dd41c073 100644 --- a/src/main/java/com/simibubi/create/api/connectivity/ConnectivityHandler.java +++ b/src/main/java/com/simibubi/create/api/connectivity/ConnectivityHandler.java @@ -35,14 +35,14 @@ import java.util.Set; public class ConnectivityHandler { - public static void formMulti (T be) { + public static void formMulti(T be) { SearchCache cache = new SearchCache<>(); List frontier = new ArrayList<>(); frontier.add(be); formMulti(be.getType(), be.getLevel(), cache, frontier); } - private static void formMulti (BlockEntityType type, BlockGetter level, SearchCache cache, List frontier) { + private static void formMulti(BlockEntityType type, BlockGetter level, SearchCache cache, List frontier) { PriorityQueue> creationQueue = makeCreationQueue(); Set visited = new HashSet<>(); Direction.Axis mainAxis = frontier.get(0).getMainConnectionAxis(); @@ -99,7 +99,7 @@ public class ConnectivityHandler { } } - private static int tryToFormNewMulti (T be, SearchCache cache, boolean simulate) { + private static int tryToFormNewMulti(T be, SearchCache cache, boolean simulate) { int bestWidth = 1; int bestAmount = -1; if (!be.isController()) return 0; @@ -129,7 +129,7 @@ public class ConnectivityHandler { return bestAmount; } - private static int tryToFormNewMultiOfWidth (T be, int width, SearchCache cache, boolean simulate) { + private static int tryToFormNewMultiOfWidth(T be, int width, SearchCache cache, boolean simulate) { int amount = 0; int height = 0; BlockEntityType type = be.getType(); @@ -236,12 +236,12 @@ public class ConnectivityHandler { return amount; } - public static void splitMulti (T be) { + public static void splitMulti(T be) { splitMultiAndInvalidate(be, null, false); } // tryReconnect helps whenever only a few tanks have been removed - private static void splitMultiAndInvalidate (T be, @Nullable SearchCache cache, boolean tryReconnect) { + private static void splitMultiAndInvalidate(T be, @Nullable SearchCache cache, boolean tryReconnect) { Level level = be.getLevel(); if (level == null) return; @@ -279,7 +279,7 @@ public class ConnectivityHandler { if (!partAt.getController().equals(origin)) continue; T controllerBE = partAt.getControllerTE(); - partAt.setExtraData ( (controllerBE == null ? null : controllerBE.getExtraData())); + partAt.setExtraData((controllerBE == null ? null : controllerBE.getExtraData())); partAt.removeController(true); if (!toDistribute.isEmpty() && partAt != be) { @@ -317,19 +317,19 @@ public class ConnectivityHandler { } } - private static PriorityQueue> makeCreationQueue () { + private static PriorityQueue> makeCreationQueue() { return new PriorityQueue<>((one, two) -> two.getKey() - one.getKey()); } @Nullable - public static T partAt (BlockEntityType type, BlockGetter level, BlockPos pos) { + public static T partAt(BlockEntityType type, BlockGetter level, BlockPos pos) { BlockEntity be = level.getBlockEntity(pos); if (be != null && be.getType() == type) return checked(be); return null; } - public static boolean isConnected (BlockGetter level, BlockPos pos, BlockPos other) { + public static boolean isConnected(BlockGetter level, BlockPos pos, BlockPos other) { T one = checked(level.getBlockEntity(pos)); T two = checked(level.getBlockEntity(other)); if (one == null || two == null) return false; @@ -338,7 +338,7 @@ public class ConnectivityHandler { @Nullable @SuppressWarnings("unchecked") - private static T checked (BlockEntity be) { + private static T checked(BlockEntity be) { if (be instanceof IMultiTileContainer) return (T)be; return null; } @@ -346,15 +346,15 @@ public class ConnectivityHandler { private static class SearchCache { Map> controllerMap; - public SearchCache () { controllerMap = new HashMap<>(); } + public SearchCache() { controllerMap = new HashMap<>(); } - void put (BlockPos pos, T target) { controllerMap.put(pos, Optional.of(target)); } + void put(BlockPos pos, T target) { controllerMap.put(pos, Optional.of(target)); } - void putEmpty (BlockPos pos) { controllerMap.put(pos, Optional.empty()); } + void putEmpty(BlockPos pos) { controllerMap.put(pos, Optional.empty()); } - boolean hasVisited (BlockPos pos) { return controllerMap.containsKey(pos); } + boolean hasVisited(BlockPos pos) { return controllerMap.containsKey(pos); } - Optional getOrCache (BlockEntityType type, BlockGetter level, BlockPos pos) { + Optional getOrCache(BlockEntityType type, BlockGetter level, BlockPos pos) { if (hasVisited(pos)) return controllerMap.get(pos); T partAt = partAt(type, level, pos); diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankBlock.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankBlock.java index 920d78f34..d649dca3a 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankBlock.java @@ -94,7 +94,7 @@ public class FluidTankBlock extends Block implements IWrenchable, ITE frontier = new ArrayList<>(); - frontier.add(te); - formTanks(te.getType(), te.getLevel(), cache, frontier); - } - - private static void formTanks(BlockEntityType type, BlockGetter world, TankSearchCache cache, - List frontier) { - PriorityQueue> creationQueue = makeCreationQueue(); - Set visited = new HashSet<>(); - - int minX = Integer.MAX_VALUE; - int minZ = Integer.MAX_VALUE; - for (FluidTankTileEntity fluidTankTileEntity : frontier) { - BlockPos pos = fluidTankTileEntity.getBlockPos(); - minX = Math.min(pos.getX(), minX); - minZ = Math.min(pos.getZ(), minZ); - } - minX -= FluidTankTileEntity.getMaxSize(); - minZ -= FluidTankTileEntity.getMaxSize(); - - while (!frontier.isEmpty()) { - FluidTankTileEntity tank = frontier.remove(0); - BlockPos tankPos = tank.getBlockPos(); - if (visited.contains(tankPos)) - continue; - - visited.add(tankPos); - - int amount = tryToFormNewTank(tank, cache, true); - if (amount > 1) - creationQueue.add(Pair.of(amount, tank)); - - for (Axis axis : Iterate.axes) { - Direction d = Direction.get(AxisDirection.NEGATIVE, axis); - BlockPos next = tankPos.relative(d); - - if (next.getX() <= minX || next.getZ() <= minZ) - continue; - if (visited.contains(next)) - continue; - FluidTankTileEntity nextTank = tankAt(type, world, next); - if (nextTank == null) - continue; - if (nextTank.isRemoved()) - continue; - frontier.add(nextTank); - } - } - - visited.clear(); - - while (!creationQueue.isEmpty()) { - Pair next = creationQueue.poll(); - FluidTankTileEntity toCreate = next.getValue(); - if (visited.contains(toCreate.getBlockPos())) - continue; - visited.add(toCreate.getBlockPos()); - tryToFormNewTank(toCreate, cache, false); - } - - } - - public static void splitTank(FluidTankTileEntity te) { - splitTankAndInvalidate(te, null, false); - } - - private static int tryToFormNewTank(FluidTankTileEntity te, TankSearchCache cache, boolean simulate) { - int bestWidth = 1; - int bestAmount = -1; - - if (!te.isController()) - return 0; - - for (int w = 1; w <= FluidTankTileEntity.getMaxSize(); w++) { - int amount = tryToFormNewTankOfWidth(te, w, cache, true); - if (amount < bestAmount) - continue; - bestWidth = w; - bestAmount = amount; - } - - if (!simulate) { - if (te.width == bestWidth && te.width * te.width * te.height == bestAmount) - return bestAmount; - - splitTankAndInvalidate(te, cache, false); - te.applyFluidTankSize(bestAmount); - tryToFormNewTankOfWidth(te, bestWidth, cache, simulate); - te.updateConnectivity = false; - te.width = bestWidth; - te.height = bestAmount / bestWidth / bestWidth; - - BlockState state = te.getBlockState(); - if (FluidTankBlock.isTank(state)) { - state = state.setValue(FluidTankBlock.BOTTOM, true); - state = state.setValue(FluidTankBlock.TOP, te.height == 1); - te.getLevel() - .setBlock(te.getBlockPos(), state, 22); - } - - te.setWindows(te.window); - te.onFluidStackChanged(te.tankInventory.getFluid()); - te.setChanged(); - } - - return bestAmount; - } - - private static int tryToFormNewTankOfWidth(FluidTankTileEntity te, int width, TankSearchCache cache, - boolean simulate) { - int amount = 0; - int height = 0; - BlockEntityType type = te.getType(); - Level world = te.getLevel(); - BlockPos origin = te.getBlockPos(); - LazyOptional capability = te.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY); - FluidTank teTank = (FluidTank) capability.orElse(null); - FluidStack fluid = capability.map(ifh -> ifh.getFluidInTank(0)) - .orElse(FluidStack.EMPTY); - - Search: - - for (int yOffset = 0; yOffset < FluidTankTileEntity.getMaxHeight(); yOffset++) { - for (int xOffset = 0; xOffset < width; xOffset++) { - for (int zOffset = 0; zOffset < width; zOffset++) { - - BlockPos pos = origin.offset(xOffset, yOffset, zOffset); - Optional tank = cache.getOrCache(type, world, pos); - if (!tank.isPresent()) - break Search; - - FluidTankTileEntity controller = tank.get(); - int otherWidth = controller.width; - if (otherWidth > width) - break Search; - - BlockPos controllerPos = controller.getBlockPos(); - if (!controllerPos.equals(origin)) { - if (controllerPos.getX() < origin.getX()) - break Search; - if (controllerPos.getZ() < origin.getZ()) - break Search; - if (controllerPos.getX() + otherWidth > origin.getX() + width) - break Search; - if (controllerPos.getZ() + otherWidth > origin.getZ() + width) - break Search; - } - - FluidStack otherFluid = controller.getTankInventory() - .getFluid(); - if (!fluid.isEmpty() && !otherFluid.isEmpty() && !fluid.isFluidEqual(otherFluid)) - break Search; - - } - } - - amount += width * width; - height++; - } - - if (simulate) - return amount; - - boolean opaque = false; - - for (int yOffset = 0; yOffset < height; yOffset++) { - for (int xOffset = 0; xOffset < width; xOffset++) { - for (int zOffset = 0; zOffset < width; zOffset++) { - BlockPos pos = origin.offset(xOffset, yOffset, zOffset); - FluidTankTileEntity tank = tankAt(type, world, pos); - if (tank == te) - continue; - - opaque |= !tank.window; - FluidTank tankTank = tank.tankInventory; - FluidStack fluidInTank = tankTank.getFluid(); - if (!fluidInTank.isEmpty()) { - if (teTank.isEmpty() && teTank instanceof CreativeSmartFluidTank) - ((CreativeSmartFluidTank) teTank).setContainedFluid(fluidInTank); - teTank.fill(fluidInTank, FluidAction.EXECUTE); - } - tankTank.setFluid(FluidStack.EMPTY); - - splitTankAndInvalidate(tank, cache, false); - tank.setController(origin); - tank.updateConnectivity = false; - cache.put(pos, te); - - BlockState state = world.getBlockState(pos); - if (!FluidTankBlock.isTank(state)) - continue; - state = state.setValue(FluidTankBlock.BOTTOM, yOffset == 0); - state = state.setValue(FluidTankBlock.TOP, yOffset == height - 1); - world.setBlock(pos, state, 22); - } - } - } - - te.setWindows(!opaque); - - return amount; - } - - private static void splitTankAndInvalidate(FluidTankTileEntity te, @Nullable TankSearchCache cache, - boolean tryReconnect) { - // tryReconnect helps whenever only few tanks have been removed - - te = te.getControllerTE(); - if (te == null) - return; - - int height = te.height; - int width = te.width; - if (width == 1 && height == 1) - return; - - Level world = te.getLevel(); - BlockPos origin = te.getBlockPos(); - List frontier = new ArrayList<>(); - FluidStack toDistribute = te.tankInventory.getFluid() - .copy(); - int maxCapacity = FluidTankTileEntity.getCapacityMultiplier(); - if (!toDistribute.isEmpty() && !te.isRemoved()) - toDistribute.shrink(maxCapacity); - te.applyFluidTankSize(1); - - for (int yOffset = 0; yOffset < height; yOffset++) { - for (int xOffset = 0; xOffset < width; xOffset++) { - for (int zOffset = 0; zOffset < width; zOffset++) { - - BlockPos pos = origin.offset(xOffset, yOffset, zOffset); - FluidTankTileEntity tankAt = tankAt(te.getType(), world, pos); - if (tankAt == null) - continue; - if (!tankAt.getController() - .equals(origin)) - continue; - FluidTankTileEntity controllerTE = tankAt.getControllerTE(); - tankAt.window = controllerTE == null || controllerTE.window; - tankAt.removeController(true); - - if (!toDistribute.isEmpty() && tankAt != te) { - FluidStack copy = toDistribute.copy(); - FluidTank tankInventory = tankAt.tankInventory; - if (tankInventory.isEmpty() && tankInventory instanceof CreativeSmartFluidTank) - ((CreativeSmartFluidTank) tankInventory).setContainedFluid(toDistribute); - else { - int split = Math.min(maxCapacity, toDistribute.getAmount()); - copy.setAmount(split); - toDistribute.shrink(split); - tankInventory.fill(copy, FluidAction.EXECUTE); - } - } - - if (tryReconnect) { - frontier.add(tankAt); - tankAt.updateConnectivity = false; - } - if (cache != null) - cache.put(pos, tankAt); - } - } - } - - te.fluidCapability.invalidate(); - if (tryReconnect) - formTanks(te.getType(), world, cache == null ? new TankSearchCache() : cache, frontier); - } - - private static PriorityQueue> makeCreationQueue() { - return new PriorityQueue<>(new Comparator>() { - @Override - public int compare(Pair o1, Pair o2) { - return o2.getKey() - o1.getKey(); - } - }); - } - - @Nullable - public static FluidTankTileEntity tankAt(BlockEntityType type, BlockGetter world, BlockPos pos) { - BlockEntity te = world.getBlockEntity(pos); - if (te instanceof FluidTankTileEntity && te.getType() == type) - return (FluidTankTileEntity) te; - return null; - } - - @Nullable - public static FluidTankTileEntity anyTankAt(BlockGetter world, BlockPos pos) { - BlockEntity te = world.getBlockEntity(pos); - if (te instanceof FluidTankTileEntity) - return (FluidTankTileEntity) te; - return null; - } - - private static class TankSearchCache { - Map> controllerMap; - - public TankSearchCache() { - controllerMap = new HashMap<>(); - } - - void put(BlockPos pos, FluidTankTileEntity target) { - controllerMap.put(pos, Optional.of(target)); - } - - void putEmpty(BlockPos pos) { - controllerMap.put(pos, Optional.empty()); - } - - boolean hasVisited(BlockPos pos) { - return controllerMap.containsKey(pos); - } - - Optional getOrCache(BlockEntityType type, BlockGetter world, BlockPos pos) { - if (hasVisited(pos)) - return controllerMap.get(pos); - FluidTankTileEntity tankAt = tankAt(type, world, pos); - if (tankAt == null) { - putEmpty(pos); - return Optional.empty(); - } - FluidTankTileEntity controller = tankAt.getControllerTE(); - if (controller == null) { - putEmpty(pos); - return Optional.empty(); - } - put(pos, controller); - return Optional.of(controller); - } - - } - - public static boolean isConnected(BlockGetter world, BlockPos tankPos, BlockPos otherTankPos) { - BlockEntity te1 = world.getBlockEntity(tankPos); - BlockEntity te2 = world.getBlockEntity(otherTankPos); - if (!(te1 instanceof FluidTankTileEntity) || !(te2 instanceof FluidTankTileEntity)) - return false; - return ((FluidTankTileEntity) te1).getController() - .equals(((FluidTankTileEntity) te2).getController()); - } - -} diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankItem.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankItem.java index 43bb3b288..22fb7387e 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankItem.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankItem.java @@ -79,7 +79,6 @@ public class FluidTankItem extends BlockItem { FluidTankTileEntity tankAt = ConnectivityHandler.partAt( creative ? AllTileEntities.CREATIVE_FLUID_TANK.get() : AllTileEntities.FLUID_TANK.get(), world, placedOnPos ); - //FluidTankConnectivityHandler.anyTankAt(world, placedOnPos); if (tankAt == null) return; FluidTankTileEntity controllerTE = tankAt.getControllerTE(); diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankTileEntity.java index d4f0d71c3..01973135d 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankTileEntity.java @@ -7,7 +7,6 @@ import java.util.List; import javax.annotation.Nonnull; import javax.annotation.Nullable; -import com.simibubi.create.Create; import com.simibubi.create.api.connectivity.ConnectivityHandler; import com.simibubi.create.content.contraptions.fluids.tank.FluidTankBlock.Shape; import com.simibubi.create.content.contraptions.goggles.IHaveGoggleInformation; @@ -81,7 +80,6 @@ public class FluidTankTileEntity extends SmartTileEntity implements IHaveGoggleI return; if (!isController()) return; - //FluidTankConnectivityHandler.formTanks(this); ConnectivityHandler.formMulti(this); } @@ -148,7 +146,7 @@ public class FluidTankTileEntity extends SmartTileEntity implements IHaveGoggleI for (int xOffset = 0; xOffset < width; xOffset++) { for (int zOffset = 0; zOffset < width; zOffset++) { BlockPos pos = this.worldPosition.offset(xOffset, yOffset, zOffset); - FluidTankTileEntity tankAt = ConnectivityHandler.partAt(getType(), level, pos); //FluidTankConnectivityHandler.anyTankAt(level, pos); + FluidTankTileEntity tankAt = ConnectivityHandler.partAt(getType(), level, pos); if (tankAt == null) continue; level.updateNeighbourForOutputSignal(pos, tankAt.getBlockState() @@ -469,7 +467,7 @@ public class FluidTankTileEntity extends SmartTileEntity implements IHaveGoggleI public void preventConnectivityUpdate() { updateConnectivity = false; } @Override - public void notifyMultiUpdated () { + public void notifyMultiUpdated() { BlockState state = this.getBlockState(); if (FluidTankBlock.isTank(state)) { // safety state = state.setValue(FluidTankBlock.BOTTOM, getController().getY() == getBlockPos().getY()); @@ -482,16 +480,16 @@ public class FluidTankTileEntity extends SmartTileEntity implements IHaveGoggleI } @Override - public void setExtraData (@Nullable Object data) { + public void setExtraData(@Nullable Object data) { if (data instanceof Boolean) window = (boolean)data; } @Override @Nullable - public Object getExtraData () { return window; } + public Object getExtraData() { return window; } @Override - public Object modifyExtraData (Object data) { + public Object modifyExtraData(Object data) { if (data instanceof Boolean windows) { windows |= window; return windows; @@ -503,44 +501,44 @@ public class FluidTankTileEntity extends SmartTileEntity implements IHaveGoggleI public Direction.Axis getMainConnectionAxis() { return Direction.Axis.Y; } @Override - public int getMaxLength (Direction.Axis longAxis, int width) { + public int getMaxLength(Direction.Axis longAxis, int width) { if (longAxis == Direction.Axis.Y) return getMaxHeight(); return getMaxWidth(); } @Override - public int getMaxWidth () { return MAX_SIZE; } + public int getMaxWidth() { return MAX_SIZE; } @Override - public int getHeight () { return height; } + public int getHeight() { return height; } @Override - public void setHeight (int height) { this.height = height; } + public void setHeight(int height) { this.height = height; } @Override - public int getWidth () { return width; } + public int getWidth() { return width; } @Override - public void setWidth (int width) { this.width = width; } + public void setWidth(int width) { this.width = width; } @Override - public boolean hasFluid () { return true; } + public boolean hasFluid() { return true; } @Override - public int getTankSize (int tank) { return getCapacityMultiplier(); } + public int getTankSize(int tank) { return getCapacityMultiplier(); } @Override - public void setTankSize (int tank, int blocks) { + public void setTankSize(int tank, int blocks) { applyFluidTankSize(blocks); } @Override - public IFluidTank getTank (int tank) { + public IFluidTank getTank(int tank) { return tankInventory; } @Override - public FluidStack getFluid (int tank) { + public FluidStack getFluid(int tank) { return tankInventory.getFluid().copy(); } } diff --git a/src/main/java/com/simibubi/create/content/logistics/block/vault/ItemVaultBlock.java b/src/main/java/com/simibubi/create/content/logistics/block/vault/ItemVaultBlock.java index 34bbde3e7..f7cdb74ea 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/vault/ItemVaultBlock.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/vault/ItemVaultBlock.java @@ -87,7 +87,6 @@ public class ItemVaultBlock extends Block implements IWrenchable, ITE frontier = new ArrayList<>(); - frontier.add(te); - formVaults(te.getType(), te.getLevel(), cache, frontier); - } - - private static void formVaults(BlockEntityType type, BlockGetter world, VaultSearchCache cache, - List frontier) { - PriorityQueue> creationQueue = makeCreationQueue(); - Set visited = new HashSet<>(); - - int minY = Integer.MAX_VALUE; - for (ItemVaultTileEntity fluidTankTileEntity : frontier) { - BlockPos pos = fluidTankTileEntity.getBlockPos(); - minY = Math.min(pos.getY(), minY); - } - - minY -= 3; - - while (!frontier.isEmpty()) { - ItemVaultTileEntity tank = frontier.remove(0); - BlockPos tankPos = tank.getBlockPos(); - if (visited.contains(tankPos)) - continue; - - visited.add(tankPos); - - int amount = tryToFormNewVault(tank, cache, true); - if (amount > 1) - creationQueue.add(Pair.of(amount, tank)); - - for (Axis axis : Iterate.axes) { - Direction d = Direction.fromAxisAndDirection(axis, AxisDirection.NEGATIVE); - BlockPos next = tankPos.relative(d); - - if (next.getY() <= minY) - continue; - if (visited.contains(next)) - continue; - ItemVaultTileEntity nextTank = vaultAt(type, world, next); - if (nextTank == null) - continue; - if (nextTank.isRemoved()) - continue; - frontier.add(nextTank); - } - } - - visited.clear(); - - while (!creationQueue.isEmpty()) { - Pair next = creationQueue.poll(); - ItemVaultTileEntity toCreate = next.getValue(); - if (visited.contains(toCreate.getBlockPos())) - continue; - visited.add(toCreate.getBlockPos()); - tryToFormNewVault(toCreate, cache, false); - } - - } - - public static void splitVault(ItemVaultTileEntity te) { - splitVaultAndInvalidate(te, null, false); - } - - private static int tryToFormNewVault(ItemVaultTileEntity te, VaultSearchCache cache, boolean simulate) { - int bestWidth = 1; - int bestAmount = -1; - - if (!te.isController()) - return 0; - - for (int w = 1; w <= 3; w++) { - int amount = tryToFormNewVaultOfRadius(te, w, cache, true); - if (amount < bestAmount) - continue; - bestWidth = w; - bestAmount = amount; - } - - if (!simulate) { - if (te.radius == bestWidth && te.radius * te.radius * te.length == bestAmount) - return bestAmount; - - splitVaultAndInvalidate(te, cache, false); - tryToFormNewVaultOfRadius(te, bestWidth, cache, simulate); - te.updateConnectivity = false; - te.radius = bestWidth; - te.length = bestAmount / bestWidth / bestWidth; - - BlockState state = te.getBlockState(); - if (ItemVaultBlock.isVault(state)) - te.getLevel() - .setBlock(te.getBlockPos(), state.setValue(ItemVaultBlock.LARGE, te.radius > 2), 22); - - te.itemCapability.invalidate(); - te.setChanged(); - } - - return bestAmount; - } - - private static int tryToFormNewVaultOfRadius(ItemVaultTileEntity te, int width, VaultSearchCache cache, - boolean simulate) { - int amount = 0; - int height = 0; - BlockEntityType type = te.getType(); - Level world = te.getLevel(); - BlockPos origin = te.getBlockPos(); - boolean alongZ = ItemVaultBlock.getVaultBlockAxis(te.getBlockState()) == Axis.Z; - - Search: - - for (int yOffset = 0; yOffset < ItemVaultTileEntity.getMaxLength(width); yOffset++) { - for (int xOffset = 0; xOffset < width; xOffset++) { - for (int zOffset = 0; zOffset < width; zOffset++) { - - BlockPos pos = - alongZ ? origin.offset(xOffset, zOffset, yOffset) : origin.offset(yOffset, xOffset, zOffset); - Optional tank = cache.getOrCache(type, world, pos); - if (!tank.isPresent()) - break Search; - - ItemVaultTileEntity controller = tank.get(); - int otherWidth = controller.radius; - if (otherWidth > width) - break Search; - if (otherWidth == width && controller.length == ItemVaultTileEntity.getMaxLength(width)) - break Search; - if ((ItemVaultBlock.getVaultBlockAxis(controller.getBlockState()) == Axis.Z) != alongZ) - break Search; - - BlockPos controllerPos = controller.getBlockPos(); - if (!controllerPos.equals(origin)) { - if (alongZ && controllerPos.getX() < origin.getX()) - break Search; - if (controllerPos.getY() < origin.getY()) - break Search; - if (!alongZ && controllerPos.getZ() < origin.getZ()) - break Search; - if (alongZ && controllerPos.getX() + otherWidth > origin.getX() + width) - break Search; - if (controllerPos.getY() + otherWidth > origin.getY() + width) - break Search; - if (!alongZ && controllerPos.getZ() + otherWidth > origin.getZ() + width) - break Search; - } - - } - } - - amount += width * width; - height++; - } - - if (simulate) - return amount; - - for (int yOffset = 0; yOffset < height; yOffset++) { - for (int xOffset = 0; xOffset < width; xOffset++) { - for (int zOffset = 0; zOffset < width; zOffset++) { - BlockPos pos = - alongZ ? origin.offset(xOffset, zOffset, yOffset) : origin.offset(yOffset, xOffset, zOffset); - ItemVaultTileEntity tank = vaultAt(type, world, pos); - if (tank == te) - continue; - - splitVaultAndInvalidate(tank, cache, false); - tank.setController(origin); - tank.updateConnectivity = false; - cache.put(pos, te); - - BlockState state = world.getBlockState(pos); - if (!ItemVaultBlock.isVault(state)) - continue; - state = state.setValue(ItemVaultBlock.LARGE, width > 2); - world.setBlock(pos, state, 22); - } - } - } - - return amount; - } - - private static void splitVaultAndInvalidate(ItemVaultTileEntity te, @Nullable VaultSearchCache cache, - boolean tryReconnect) { - // tryReconnect helps whenever only few tanks have been removed - - te = te.getControllerTE(); - if (te == null) - return; - - int height = te.length; - int width = te.radius; - BlockState state = te.getBlockState(); - boolean alongZ = ItemVaultBlock.getVaultBlockAxis(state) == Axis.Z; - if (width == 1 && height == 1) - return; - - Level world = te.getLevel(); - BlockPos origin = te.getBlockPos(); - List frontier = new ArrayList<>(); - - for (int yOffset = 0; yOffset < height; yOffset++) { - for (int xOffset = 0; xOffset < width; xOffset++) { - for (int zOffset = 0; zOffset < width; zOffset++) { - - BlockPos pos = - alongZ ? origin.offset(xOffset, zOffset, yOffset) : origin.offset(yOffset, xOffset, zOffset); - ItemVaultTileEntity tankAt = vaultAt(te.getType(), world, pos); - if (tankAt == null) - continue; - if (!tankAt.getController() - .equals(origin)) - continue; - - tankAt.removeController(true); - - if (tryReconnect) { - frontier.add(tankAt); - tankAt.updateConnectivity = false; - } - if (cache != null) - cache.put(pos, tankAt); - } - } - } - - te.itemCapability.invalidate(); - if (tryReconnect) - formVaults(te.getType(), world, cache == null ? new VaultSearchCache() : cache, frontier); - } - - private static PriorityQueue> makeCreationQueue() { - return new PriorityQueue<>(new Comparator>() { - @Override - public int compare(Pair o1, Pair o2) { - return o2.getKey() - o1.getKey(); - } - }); - } - - @Nullable - public static ItemVaultTileEntity vaultAt(BlockEntityType type, BlockGetter world, BlockPos pos) { - BlockEntity te = world.getBlockEntity(pos); - if (te instanceof ItemVaultTileEntity && te.getType() == type) - return (ItemVaultTileEntity) te; - return null; - } - - private static class VaultSearchCache { - Map> controllerMap; - - public VaultSearchCache() { - controllerMap = new HashMap<>(); - } - - void put(BlockPos pos, ItemVaultTileEntity target) { - controllerMap.put(pos, Optional.of(target)); - } - - void putEmpty(BlockPos pos) { - controllerMap.put(pos, Optional.empty()); - } - - boolean hasVisited(BlockPos pos) { - return controllerMap.containsKey(pos); - } - - Optional getOrCache(BlockEntityType type, BlockGetter world, BlockPos pos) { - if (hasVisited(pos)) - return controllerMap.get(pos); - ItemVaultTileEntity tankAt = vaultAt(type, world, pos); - if (tankAt == null) { - putEmpty(pos); - return Optional.empty(); - } - ItemVaultTileEntity controller = tankAt.getControllerTE(); - if (controller == null) { - putEmpty(pos); - return Optional.empty(); - } - put(pos, controller); - return Optional.of(controller); - } - - } - - public static boolean isConnected(BlockGetter world, BlockPos tankPos, BlockPos otherTankPos) { - BlockEntity te1 = world.getBlockEntity(tankPos); - BlockEntity te2 = world.getBlockEntity(otherTankPos); - if (!(te1 instanceof ItemVaultTileEntity) || !(te2 instanceof ItemVaultTileEntity)) - return false; - return ((ItemVaultTileEntity) te1).getController() - .equals(((ItemVaultTileEntity) te2).getController()); - } - -} diff --git a/src/main/java/com/simibubi/create/content/logistics/block/vault/ItemVaultItem.java b/src/main/java/com/simibubi/create/content/logistics/block/vault/ItemVaultItem.java index 935a3e7d2..fdd76e9bd 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/vault/ItemVaultItem.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/vault/ItemVaultItem.java @@ -66,7 +66,6 @@ public class ItemVaultItem extends BlockItem { if (!ItemVaultBlock.isVault(placedOnState)) return; ItemVaultTileEntity tankAt = ConnectivityHandler.partAt(AllTileEntities.ITEM_VAULT.get(), world, placedOnPos); - //ItemVaultConnectivityHandler.vaultAt(AllTileEntities.ITEM_VAULT.get(), world, placedOnPos); if (tankAt == null) return; ItemVaultTileEntity controllerTE = tankAt.getControllerTE(); diff --git a/src/main/java/com/simibubi/create/content/logistics/block/vault/ItemVaultTileEntity.java b/src/main/java/com/simibubi/create/content/logistics/block/vault/ItemVaultTileEntity.java index 11fd2ac49..bc774e1e0 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/vault/ItemVaultTileEntity.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/vault/ItemVaultTileEntity.java @@ -63,7 +63,6 @@ public class ItemVaultTileEntity extends SmartTileEntity implements IMultiTileCo return; if (!isController()) return; - //ItemVaultConnectivityHandler.formVaults(this); ConnectivityHandler.formMulti(this); } @@ -250,7 +249,6 @@ public class ItemVaultTileEntity extends SmartTileEntity implements IMultiTileCo BlockPos vaultPos = alongZ ? worldPosition.offset(xOffset, zOffset, yOffset) : worldPosition.offset(yOffset, xOffset, zOffset); ItemVaultTileEntity vaultAt = - //ItemVaultConnectivityHandler.vaultAt(AllTileEntities.ITEM_VAULT.get(), level, vaultPos); ConnectivityHandler.partAt(AllTileEntities.ITEM_VAULT.get(), level, vaultPos); invs[yOffset * radius * radius + xOffset * radius + zOffset] = vaultAt != null ? vaultAt.inventory : new ItemStackHandler(); @@ -270,7 +268,7 @@ public class ItemVaultTileEntity extends SmartTileEntity implements IMultiTileCo public void preventConnectivityUpdate() { updateConnectivity = false; } @Override - public void notifyMultiUpdated () { + public void notifyMultiUpdated() { BlockState state = this.getBlockState(); if (ItemVaultBlock.isVault(state)) { // safety level.setBlock(getBlockPos(), state.setValue(ItemVaultBlock.LARGE, radius > 2), 22); @@ -283,28 +281,28 @@ public class ItemVaultTileEntity extends SmartTileEntity implements IMultiTileCo public Direction.Axis getMainConnectionAxis() { return getMainAxisOf(this); } @Override - public int getMaxLength (Direction.Axis longAxis, int width) { + public int getMaxLength(Direction.Axis longAxis, int width) { if (longAxis == Direction.Axis.Y) return getMaxWidth(); return getMaxLength(width); } @Override - public int getMaxWidth () { + public int getMaxWidth() { return 3; } @Override - public int getHeight () { return length; } + public int getHeight() { return length; } @Override - public int getWidth () { return radius; } + public int getWidth() { return radius; } @Override - public void setHeight (int height) { this.length = height; } + public void setHeight(int height) { this.length = height; } @Override - public void setWidth (int width) { this.radius = width; } + public void setWidth(int width) { this.radius = width; } @Override - public boolean hasItems () { return true; } + public boolean hasItems() { return true; } } From 964704675381256e0db4674580dee80b18b7077b Mon Sep 17 00:00:00 2001 From: Talrey Date: Fri, 13 May 2022 15:32:05 -0700 Subject: [PATCH 17/31] items and fluids should be sub-interfaces --- .../api/connectivity/ConnectivityHandler.java | 36 ++++++++++--------- .../fluids/tank/FluidTankTileEntity.java | 4 +-- .../block/vault/ItemVaultTileEntity.java | 4 +-- .../tileEntity/IMultiTileContainer.java | 24 ++++++++----- 4 files changed, 39 insertions(+), 29 deletions(-) diff --git a/src/main/java/com/simibubi/create/api/connectivity/ConnectivityHandler.java b/src/main/java/com/simibubi/create/api/connectivity/ConnectivityHandler.java index 9dd41c073..fbf9c4dc3 100644 --- a/src/main/java/com/simibubi/create/api/connectivity/ConnectivityHandler.java +++ b/src/main/java/com/simibubi/create/api/connectivity/ConnectivityHandler.java @@ -117,7 +117,7 @@ public class ConnectivityHandler { if (beWidth == bestWidth && beWidth*beWidth * be.getHeight() == bestAmount) return bestAmount; splitMultiAndInvalidate(be, cache, false); - if (be.hasFluid()) be.setTankSize(0, bestAmount); + if (be instanceof IMultiTileContainer.Fluid ifluid && ifluid.hasTank()) ifluid.setTankSize(0, bestAmount); tryToFormNewMultiOfWidth(be, bestWidth, cache, false); @@ -140,8 +140,8 @@ public class ConnectivityHandler { // optional fluid handling IFluidTank beTank = null; FluidStack fluid = FluidStack.EMPTY; - if (be.hasFluid()) { - beTank = be.getTank(0); + if (be instanceof IMultiTileContainer.Fluid ifluid && ifluid.hasTank()) { + beTank = ifluid.getTank(0); fluid = beTank.getFluid(); } Direction.Axis axis = be.getMainConnectionAxis(); @@ -182,8 +182,10 @@ public class ConnectivityHandler { if (axis == Direction.Axis.X && conPos.getZ() + otherWidth > origin.getZ() + width) break Search; } } - FluidStack otherFluid = controller.getFluid(0); - if (!fluid.isEmpty() && !otherFluid.isEmpty() && !fluid.isFluidEqual(otherFluid)) break Search; + if (controller instanceof IMultiTileContainer.Fluid ifluidCon && ifluidCon.hasTank()) { + FluidStack otherFluid = ifluidCon.getFluid(0); + if (!fluid.isEmpty() && !otherFluid.isEmpty() && !fluid.isFluidEqual(otherFluid)) break Search; + } } } amount += width * width; @@ -208,15 +210,17 @@ public class ConnectivityHandler { extraData = be.modifyExtraData(extraData); - if (part.hasFluid()) { - IFluidTank tankAt = part.getTank(0); + if (part instanceof IMultiTileContainer.Fluid ifluidPart && ifluidPart.hasTank()) { + IFluidTank tankAt = ifluidPart.getTank(0); FluidStack fluidAt = tankAt.getFluid(); if (!fluidAt.isEmpty()) { // making this generic would be a rather large mess, unfortunately if (beTank != null && fluid.isEmpty() && beTank instanceof CreativeFluidTankTileEntity.CreativeSmartFluidTank) { ((CreativeFluidTankTileEntity.CreativeSmartFluidTank)beTank).setContainedFluid(fluidAt); } - if (be.hasFluid() && beTank != null) beTank.fill(fluidAt, IFluidHandler.FluidAction.EXECUTE); + if (be instanceof IMultiTileContainer.Fluid ifluidBE && ifluidBE.hasTank() && beTank != null) { + beTank.fill(fluidAt, IFluidHandler.FluidAction.EXECUTE); + } } tankAt.drain(tankAt.getCapacity(), IFluidHandler.FluidAction.EXECUTE); } @@ -259,11 +263,11 @@ public class ConnectivityHandler { // fluid handling, if present FluidStack toDistribute = FluidStack.EMPTY; int maxCapacity = 0; - if (be.hasFluid()) { - toDistribute = be.getFluid(0); - maxCapacity = be.getTankSize(0); + if (be instanceof IMultiTileContainer.Fluid ifluidBE && ifluidBE.hasTank()) { + toDistribute = ifluidBE.getFluid(0); + maxCapacity = ifluidBE.getTankSize(0); if (!toDistribute.isEmpty() && !be.isRemoved()) toDistribute.shrink(maxCapacity); - be.setTankSize(0, 1); + ifluidBE.setTankSize(0, 1); } for (int yOffset = 0; yOffset < height; yOffset++) { @@ -284,7 +288,7 @@ public class ConnectivityHandler { if (!toDistribute.isEmpty() && partAt != be) { FluidStack copy = toDistribute.copy(); - IFluidTank tank = partAt.getTank(0); + IFluidTank tank = (partAt instanceof IMultiTileContainer.Fluid ifluidPart ? ifluidPart.getTank(0) : null); // making this generic would be a rather large mess, unfortunately if (tank instanceof CreativeFluidTankTileEntity.CreativeSmartFluidTank creativeTank) { if (creativeTank.isEmpty()) creativeTank.setContainedFluid(toDistribute); @@ -293,7 +297,7 @@ public class ConnectivityHandler { int split = Math.min(maxCapacity, toDistribute.getAmount()); copy.setAmount(split); toDistribute.shrink(split); - tank.fill(copy, IFluidHandler.FluidAction.EXECUTE); + if (tank != null) tank.fill(copy, IFluidHandler.FluidAction.EXECUTE); } } if (tryReconnect) { @@ -306,10 +310,10 @@ public class ConnectivityHandler { } } } - if (be.hasItems()) { + if (be instanceof IMultiTileContainer.Inventory iinv && iinv.hasInventory()) { be.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY).invalidate(); } - if (be.hasFluid()) { + if (be instanceof IMultiTileContainer.Fluid ifluid && ifluid.hasTank()) { be.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY).invalidate(); } if (tryReconnect) { diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankTileEntity.java index 01973135d..b92e7ab30 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankTileEntity.java @@ -36,7 +36,7 @@ import net.minecraftforge.fluids.capability.IFluidHandler; import net.minecraftforge.fluids.capability.IFluidHandler.FluidAction; import net.minecraftforge.fluids.capability.templates.FluidTank; -public class FluidTankTileEntity extends SmartTileEntity implements IHaveGoggleInformation, IMultiTileContainer { +public class FluidTankTileEntity extends SmartTileEntity implements IHaveGoggleInformation, IMultiTileContainer.Fluid { private static final int MAX_SIZE = 3; @@ -522,7 +522,7 @@ public class FluidTankTileEntity extends SmartTileEntity implements IHaveGoggleI public void setWidth(int width) { this.width = width; } @Override - public boolean hasFluid() { return true; } + public boolean hasTank() { return true; } @Override public int getTankSize(int tank) { return getCapacityMultiplier(); } diff --git a/src/main/java/com/simibubi/create/content/logistics/block/vault/ItemVaultTileEntity.java b/src/main/java/com/simibubi/create/content/logistics/block/vault/ItemVaultTileEntity.java index bc774e1e0..fefba7a4a 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/vault/ItemVaultTileEntity.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/vault/ItemVaultTileEntity.java @@ -26,7 +26,7 @@ import net.minecraftforge.items.IItemHandlerModifiable; import net.minecraftforge.items.ItemStackHandler; import net.minecraftforge.items.wrapper.CombinedInvWrapper; -public class ItemVaultTileEntity extends SmartTileEntity implements IMultiTileContainer { +public class ItemVaultTileEntity extends SmartTileEntity implements IMultiTileContainer.Inventory { protected LazyOptional itemCapability; @@ -304,5 +304,5 @@ public class ItemVaultTileEntity extends SmartTileEntity implements IMultiTileCo public void setWidth(int width) { this.radius = width; } @Override - public boolean hasItems() { return true; } + public boolean hasInventory() { return true; } } diff --git a/src/main/java/com/simibubi/create/foundation/tileEntity/IMultiTileContainer.java b/src/main/java/com/simibubi/create/foundation/tileEntity/IMultiTileContainer.java index 68d3eaa6d..f51bd0e53 100644 --- a/src/main/java/com/simibubi/create/foundation/tileEntity/IMultiTileContainer.java +++ b/src/main/java/com/simibubi/create/foundation/tileEntity/IMultiTileContainer.java @@ -56,14 +56,20 @@ public interface IMultiTileContainer { int getWidth (); void setWidth (int width); - // optional item handling - default boolean hasItems () { return false; } + public interface Inventory extends IMultiTileContainer { + default boolean hasInventory() { return false; } + } - // optional fluid handling - // done here rather than through the Capability to allow greater flexibility - default boolean hasFluid () { return false; } - default int getTankSize (int tank) { return 0; } - default void setTankSize (int tank, int blocks) {} - default IFluidTank getTank (int tank) { return null; } - default FluidStack getFluid (int tank) { return FluidStack.EMPTY; } + public interface Fluid extends IMultiTileContainer { + // done here rather than through the Capability to allow greater flexibility + default boolean hasTank() { return false; } + + default int getTankSize(int tank) { return 0; } + + default void setTankSize(int tank, int blocks) {} + + default IFluidTank getTank(int tank) { return null; } + + default FluidStack getFluid(int tank) { return FluidStack.EMPTY; } + } } From 823a888919f1381805e5d68f1e3647197e098388 Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Tue, 17 May 2022 01:08:18 +0200 Subject: [PATCH 18/31] Update README.md --- README.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 112aeea57..c9338058e 100644 --- a/README.md +++ b/README.md @@ -11,14 +11,13 @@ Welcome to Create, a mod offering a variety of tools and blocks for Building, De The added elements of tech are designed to leave as many design choices to the player as possible, where item processing doesn't happen inside a single block with funny textures, it requires a set of actors working together in many possible arrangements. -Check out the wiki and in-game Tool-tips for further info on how to use these features, and stay tuned for an ever-growing selection of possibilities for Creative and Survival Minecraft. +Check out the in-game Documentation for further info on how to use the added features, and stay tuned for an ever-growing selection of possibilities for Creative and Survival Minecraft. [](https://github.com/Creators-of-Create/Create/issues "Report Issues") [](https://www.youtube.com/channel/UCrKV2QTuyGcv4E3eSJpBiYA/playlists "Watch Videos") [](https://discord.gg/hmaD7Se "Feedback & Help") [](https://www.patreon.com/simibubi "Support Us") -- Support for Minecraft 1.12: Not planned -- Support for Fabric: Not planned

Find out more about Create on our Project Page

+

Looking for the Fabric port? Find it here

From 283a682d1c1b205c4dc0d0ae40b75d15e87364a7 Mon Sep 17 00:00:00 2001 From: PepperCode1 <44146161+PepperCode1@users.noreply.github.com> Date: Tue, 17 May 2022 23:52:41 -0700 Subject: [PATCH 19/31] Oops-put - Fix an accidental field rename --- .../tileEntity/behaviour/fluid/SmartFluidTankBehaviour.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/fluid/SmartFluidTankBehaviour.java b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/fluid/SmartFluidTankBehaviour.java index b6682cbdd..565518ec4 100644 --- a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/fluid/SmartFluidTankBehaviour.java +++ b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/fluid/SmartFluidTankBehaviour.java @@ -24,7 +24,7 @@ public class SmartFluidTankBehaviour extends TileEntityBehaviour { public static final BehaviourType - TYPE = new BehaviourType<>(), INPUT = new BehaviourType<>("Input"), oOUTPUT = new BehaviourType<>("Output"); + TYPE = new BehaviourType<>(), INPUT = new BehaviourType<>("Input"), OUTPUT = new BehaviourType<>("Output"); private static final int SYNC_RATE = 8; From 428507038dccf3f8e2a272411c578f5fdabcc759 Mon Sep 17 00:00:00 2001 From: Grimmauld Date: Thu, 19 May 2022 18:44:31 +0200 Subject: [PATCH 20/31] T00lb0x - fixed NPE when hitting toolbox hotkey on the same tick as it was placed - fixes #2914 --- .../create/content/curiosities/toolbox/ToolboxHandler.java | 2 ++ .../content/curiosities/toolbox/ToolboxHandlerClient.java | 6 ++---- .../content/curiosities/toolbox/ToolboxTileEntity.java | 5 +++++ 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/simibubi/create/content/curiosities/toolbox/ToolboxHandler.java b/src/main/java/com/simibubi/create/content/curiosities/toolbox/ToolboxHandler.java index d83fa6462..2c80bc741 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/toolbox/ToolboxHandler.java +++ b/src/main/java/com/simibubi/create/content/curiosities/toolbox/ToolboxHandler.java @@ -1,6 +1,7 @@ package com.simibubi.create.content.curiosities.toolbox; import java.util.List; +import java.util.Objects; import java.util.WeakHashMap; import java.util.stream.Collectors; @@ -111,6 +112,7 @@ public class ToolboxHandler { .sorted((p1, p2) -> Double.compare(distance(location, p1), distance(location, p2))) .limit(maxAmount) .map(toolboxes.get(world)::get) + .filter(ToolboxTileEntity::isFullyInitialized) .collect(Collectors.toList()); } diff --git a/src/main/java/com/simibubi/create/content/curiosities/toolbox/ToolboxHandlerClient.java b/src/main/java/com/simibubi/create/content/curiosities/toolbox/ToolboxHandlerClient.java index 3bcd6701f..2834b92b7 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/toolbox/ToolboxHandlerClient.java +++ b/src/main/java/com/simibubi/create/content/curiosities/toolbox/ToolboxHandlerClient.java @@ -6,6 +6,7 @@ import static com.simibubi.create.foundation.gui.AllGuiTextures.TOOLBELT_SELECTE import static com.simibubi.create.foundation.gui.AllGuiTextures.TOOLBELT_SELECTED_ON; import java.util.Collections; +import java.util.Comparator; import java.util.List; import com.google.common.collect.ImmutableList; @@ -111,10 +112,7 @@ public class ToolboxHandlerClient { Level level = player.level; List toolboxes = ToolboxHandler.getNearest(player.level, player, 8); - - if (!toolboxes.isEmpty()) - Collections.sort(toolboxes, (te1, te2) -> te1.getUniqueId() - .compareTo(te2.getUniqueId())); + toolboxes.sort(Comparator.comparing(ToolboxTileEntity::getUniqueId)); CompoundTag compound = player.getPersistentData() .getCompound("CreateToolboxData"); diff --git a/src/main/java/com/simibubi/create/content/curiosities/toolbox/ToolboxTileEntity.java b/src/main/java/com/simibubi/create/content/curiosities/toolbox/ToolboxTileEntity.java index e80788d53..1d0fed5a3 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/toolbox/ToolboxTileEntity.java +++ b/src/main/java/com/simibubi/create/content/curiosities/toolbox/ToolboxTileEntity.java @@ -380,6 +380,11 @@ public class ToolboxTileEntity extends SmartTileEntity implements MenuProvider, return uniqueId; } + public boolean isFullyInitialized() { + // returns true when uniqueId has been initialized + return uniqueId != null; + } + public void setCustomName(Component customName) { this.customName = customName; } From 657f42c67a2e217de5f25ffe2ebc30dc7ef3c710 Mon Sep 17 00:00:00 2001 From: Grimmauld Date: Thu, 19 May 2022 19:33:39 +0200 Subject: [PATCH 21/31] Off by .5 error - Contraptions no longer jump half a block when assembled on a cart assembler - fixes #2880 --- .../structureMovement/mounted/CartAssemblerTileEntity.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/mounted/CartAssemblerTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/mounted/CartAssemblerTileEntity.java index 29f90ea2d..c22259db3 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/mounted/CartAssemblerTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/mounted/CartAssemblerTileEntity.java @@ -162,7 +162,7 @@ public class CartAssemblerTileEntity extends SmartTileEntity implements IDisplay OrientedContraptionEntity entity = OrientedContraptionEntity.create(world, contraption, initialOrientation); if (couplingFound) entity.setCouplingId(cart.getUUID()); - entity.setPos(pos.getX(), pos.getY(), pos.getZ()); + entity.setPos(pos.getX() + .5, pos.getY(), pos.getZ() + .5); world.addFreshEntity(entity); entity.startRiding(cart); From f8180ee91d92779f6ca600327e06d74f7a51997f Mon Sep 17 00:00:00 2001 From: Grimmauld Date: Thu, 19 May 2022 21:18:21 +0200 Subject: [PATCH 22/31] Smarter funnel extraction - Funnels will no longer deadlock their extraction size if the first item of an inventory has a low max stack size but can't even be extracted because of filtering. - fixes #2919 --- .../java/com/simibubi/create/foundation/item/ItemHelper.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 995a0eebc..b2a454fb8 100644 --- a/src/main/java/com/simibubi/create/foundation/item/ItemHelper.java +++ b/src/main/java/com/simibubi/create/foundation/item/ItemHelper.java @@ -229,7 +229,7 @@ public class ItemHelper { for (int slot = 0; slot < inv.getSlots(); slot++) { if (extracting.isEmpty()) { ItemStack stackInSlot = inv.getStackInSlot(slot); - if (stackInSlot.isEmpty()) + if (stackInSlot.isEmpty() || !test.test(stackInSlot)) continue; int maxExtractionCountForItem = amountFunction.apply(stackInSlot); if (maxExtractionCountForItem == 0) From f724504b44f74f989d083d8c16dbe4d15741fdbb Mon Sep 17 00:00:00 2001 From: Grimmauld Date: Thu, 19 May 2022 22:45:35 +0200 Subject: [PATCH 23/31] Azaleas can dream - Azaleas (and all other Bonemealable blocks tagged with #minecraft:saplings) are now eligible for tree fertilizer - fix #2942 --- .../curiosities/TreeFertilizerItem.java | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/simibubi/create/content/curiosities/TreeFertilizerItem.java b/src/main/java/com/simibubi/create/content/curiosities/TreeFertilizerItem.java index efc548e31..d2b15211c 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/TreeFertilizerItem.java +++ b/src/main/java/com/simibubi/create/content/curiosities/TreeFertilizerItem.java @@ -4,14 +4,18 @@ import com.simibubi.create.foundation.utility.worldWrappers.PlacementSimulationS import net.minecraft.core.BlockPos; import net.minecraft.server.level.ServerLevel; +import net.minecraft.tags.BlockTags; import net.minecraft.world.InteractionResult; import net.minecraft.world.item.BoneMealItem; import net.minecraft.world.item.Item; import net.minecraft.world.item.context.UseOnContext; +import net.minecraft.world.level.block.AzaleaBlock; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.BonemealableBlock; import net.minecraft.world.level.block.SaplingBlock; import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.properties.BlockStateProperties; public class TreeFertilizerItem extends Item { @@ -24,7 +28,7 @@ public class TreeFertilizerItem extends Item { BlockState state = context.getLevel() .getBlockState(context.getClickedPos()); Block block = state.getBlock(); - if (block instanceof SaplingBlock) { + if (block instanceof BonemealableBlock bonemealableBlock && state.is(BlockTags.SAPLINGS)) { if (context.getLevel().isClientSide) { BoneMealItem.addGrowthParticles(context.getLevel(), context.getClickedPos(), 100); @@ -38,11 +42,11 @@ public class TreeFertilizerItem extends Item { if (context.getLevel() .getBlockState(saplingPos.offset(pos)) .getBlock() == block) - world.setBlockAndUpdate(pos.above(10), state.setValue(SaplingBlock.STAGE, 1)); + world.setBlockAndUpdate(pos.above(10), withStage(state, 1)); } - ((SaplingBlock) block).performBonemeal(world, world.getRandom(), BlockPos.ZERO.above(10), - state.setValue(SaplingBlock.STAGE, 1)); + bonemealableBlock.performBonemeal(world, world.getRandom(), BlockPos.ZERO.above(10), + withStage(state, 1)); for (BlockPos pos : world.blocksAdded.keySet()) { BlockPos actualPos = pos.offset(saplingPos).below(10); @@ -76,6 +80,12 @@ public class TreeFertilizerItem extends Item { return super.useOn(context); } + private BlockState withStage(BlockState original, int stage) { + if (!original.hasProperty(BlockStateProperties.STAGE)) + return original; + return original.setValue(BlockStateProperties.STAGE, 1); + } + private static class TreesDreamWorld extends PlacementSimulationServerWorld { private final BlockPos saplingPos; private final BlockState soil; From 8ee62cc506094bf079e4c29892527732d871cb62 Mon Sep 17 00:00:00 2001 From: Grimmauld Date: Thu, 19 May 2022 23:22:40 +0200 Subject: [PATCH 24/31] Good Gold - Nether Gold crushing now gives 18 nuggets instead of 7.5. This is between overworld gold ore and deepslate gold ore and actually above what furnace smelting would give. - closes #3019 --- src/generated/resources/.cache/cache | 2 +- .../data/create/recipes/crushing/nether_gold_ore.json | 6 +----- .../create/foundation/data/recipe/CrushingRecipeGen.java | 2 +- 3 files changed, 3 insertions(+), 7 deletions(-) diff --git a/src/generated/resources/.cache/cache b/src/generated/resources/.cache/cache index df0d768d3..684ccbaf6 100644 --- a/src/generated/resources/.cache/cache +++ b/src/generated/resources/.cache/cache @@ -4105,7 +4105,7 @@ a7c97582bae243ab04ff5ff9914b24af25d40d59 data/create/recipes/crushing/iron_horse 554b6555888fe01de349efaaab36b68a338ac397 data/create/recipes/crushing/iron_ore.json c9a9d6d28a7eac1210108d52840b60b26d58bcfe data/create/recipes/crushing/lapis_ore.json e870d049abc5cd5f389f70414c67e76ddc14060d data/create/recipes/crushing/leather_horse_armor.json -cc5a817901d6f0d68e4ceb3e65d7f2187ab37ceb data/create/recipes/crushing/nether_gold_ore.json +cab15acd2d62f1d70e0972b443f7987048d5183a data/create/recipes/crushing/nether_gold_ore.json 6cd97c6f12687790943db810f85036b02586c753 data/create/recipes/crushing/nether_quartz_ore.json 6e424d7e9f7d8b585384053a713db28f9d36448b data/create/recipes/crushing/nether_wart_block.json 8003e7db3ee11066b365c251f04f84028820de94 data/create/recipes/crushing/netherrack.json diff --git a/src/generated/resources/data/create/recipes/crushing/nether_gold_ore.json b/src/generated/resources/data/create/recipes/crushing/nether_gold_ore.json index da323cc75..314ad7599 100644 --- a/src/generated/resources/data/create/recipes/crushing/nether_gold_ore.json +++ b/src/generated/resources/data/create/recipes/crushing/nether_gold_ore.json @@ -8,11 +8,7 @@ "results": [ { "item": "minecraft:gold_nugget", - "count": 7 - }, - { - "item": "minecraft:gold_nugget", - "chance": 0.5 + "count": 18 }, { "item": "create:experience_nugget", 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 bae6790ca..65f37968c 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 @@ -95,7 +95,7 @@ public class CrushingRecipeGen extends ProcessingRecipeGen { DEEP_REDSTONE_ORE = deepslateOre(() -> Items.DEEPSLATE_REDSTONE_ORE, () -> Items.REDSTONE, 7.5f, 350), DEEP_LAPIS_ORE = deepslateOre(() -> Items.DEEPSLATE_LAPIS_ORE, () -> Items.LAPIS_LAZULI, 12.5f, 350), - NETHER_GOLD_ORE = netherOre(() -> Items.NETHER_GOLD_ORE, () -> Items.GOLD_NUGGET, 7.5f, 350), + NETHER_GOLD_ORE = netherOre(() -> Items.NETHER_GOLD_ORE, () -> Items.GOLD_NUGGET, 18, 350), NETHER_QUARTZ_ORE = netherOre(() -> Items.NETHER_QUARTZ_ORE, () -> Items.QUARTZ, 2.25f, 350), RAW_COPPER_ORE = rawOre(() -> Items.RAW_COPPER, AllItems.CRUSHED_COPPER::get, 1), From 06dc9d17f93727408e21d906826c0c1ab3f30d49 Mon Sep 17 00:00:00 2001 From: TropheusJ Date: Fri, 20 May 2022 16:58:56 -0400 Subject: [PATCH 25/31] fix potential dupe glitch with stackable fluid containers happens on fabric in https://github.com/Fabricators-of-Create/Create/issues/296 --- .../contraptions/fluids/actors/ItemDrainTileEntity.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/ItemDrainTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/ItemDrainTileEntity.java index d85ad6bb6..9fbdb599a 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/ItemDrainTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/ItemDrainTileEntity.java @@ -76,6 +76,7 @@ public class ItemDrainTileEntity extends SmartTileEntity implements IHaveGoggleI return returned; transportedStack = transportedStack.copy(); + transportedStack.stack = inserted.copy(); transportedStack.beltPosition = side.getAxis() .isVertical() ? .5f : 0; transportedStack.prevSideOffset = transportedStack.sideOffset; @@ -277,7 +278,7 @@ public class ItemDrainTileEntity extends SmartTileEntity implements IHaveGoggleI heldItem = TransportedItemStack.read(compound.getCompound("HeldItem")); super.read(compound, clientPacket); } - + @Override public LazyOptional getCapability(Capability cap, Direction side) { if (side != null && side.getAxis() From ad6a44b53bcc30d529f682a4c653ad17ccb48c2e Mon Sep 17 00:00:00 2001 From: MelanX Date: Sun, 22 May 2022 16:19:53 +0200 Subject: [PATCH 26/31] Updates to de_de.json by MelanX (#2930) --- .../resources/assets/create/lang/de_de.json | 3017 +++++++++-------- 1 file changed, 1612 insertions(+), 1405 deletions(-) diff --git a/src/main/resources/assets/create/lang/de_de.json b/src/main/resources/assets/create/lang/de_de.json index 7ca810e13..23cca9689 100644 --- a/src/main/resources/assets/create/lang/de_de.json +++ b/src/main/resources/assets/create/lang/de_de.json @@ -1,1411 +1,1618 @@ { "_": "->------------------------] Game Elements [------------------------<-", - "block.create.acacia_window": "Akazienholzfenster", - "block.create.acacia_window_pane": "Akazienholzfensterscheibe", - "block.create.adjustable_chain_gearshift": "Verstellbares Kettengetriebe", - "block.create.adjustable_crate": "Verstellbare Kiste", - "block.create.adjustable_pulse_repeater": "Verstellbarer Pulsverstärker", - "block.create.adjustable_repeater": "Verstellbarer Verstärker", - "block.create.analog_lever": "Analoger Schalter", - "block.create.andesite_belt_funnel": "Riementrichter aus Andesit", - "block.create.andesite_bricks": "Andesitziegel", - "block.create.andesite_bricks_slab": "Andesitziegelstufe", - "block.create.andesite_bricks_stairs": "Andesitziegeltreppe", - "block.create.andesite_bricks_wall": "Andesitziegelmauer", - "block.create.andesite_casing": "Andesitrahmen", - "block.create.andesite_cobblestone": "Andesitbruchstein", - "block.create.andesite_cobblestone_slab": "Andesitbruchsteinstufe", - "block.create.andesite_cobblestone_stairs": "Andesitbruchsteintreppe", - "block.create.andesite_cobblestone_wall": "Andesitbruchsteinmauer", - "block.create.andesite_encased_shaft": "Andesitummantelte Welle", - "block.create.andesite_funnel": "Andesittrichter", - "block.create.andesite_pillar": "Andesitsäule", - "block.create.andesite_tunnel": "Andesittunnel", - "block.create.basin": "Behälter", - "block.create.belt": "Mechanischer Riemen", - "block.create.birch_window": "Birkenholzfenster", - "block.create.birch_window_pane": "Birkenholzfensterscheibe", - "block.create.black_sail": "Schwarzes Segel", - "block.create.black_seat": "Schwarzer Sitz", - "block.create.black_valve_handle": "Schwarzer Ventilgriff", - "block.create.blaze_burner": "Lohenbrenner", - "block.create.blue_sail": "Blaues Segel", - "block.create.blue_seat": "Blauer Sitz", - "block.create.blue_valve_handle": "Blauer Ventilgriff", - "block.create.brass_belt_funnel": "Riementrichter aus Messing", - "block.create.brass_block": "Messing Block", - "block.create.brass_casing": "Messingrahmen", - "block.create.brass_encased_shaft": "Messingummantelte Welle", - "block.create.brass_funnel": "Messingtrichter", - "block.create.brass_tunnel": "Messingtunnel", - "block.create.brown_sail": "Braunes Segel", - "block.create.brown_seat": "Brauner Sitz", - "block.create.brown_valve_handle": "Brauner Ventilgriff", - "block.create.cart_assembler": "Lorenmonteur", - "block.create.chiseled_dark_scoria": "Gemeißelte dunkle Schlacke", - "block.create.chiseled_dolomite": "Gemeißeltes Dolomit", - "block.create.chiseled_gabbro": "Gemeißeltes Gabbro", - "block.create.chiseled_limestone": "Gemeißelter Kalkstein", - "block.create.chiseled_scoria": "Gemeißelte Schlacke", - "block.create.chiseled_weathered_limestone": "Gemeißelter verwitterter Kalkstein", - "block.create.chocolate": "Schokolade", - "block.create.chute": "Rinne", - "block.create.clockwork_bearing": "Uhrwerk-Lager", - "block.create.clutch": "Kupplung", - "block.create.cogwheel": "Zahnrad", - "block.create.content_observer": "Inhaltsbeobachter", - "block.create.controller_rail": "Steuerungsschiene", - "block.create.copper_block": "Kupfer Block", - "block.create.copper_casing": "Kupferrahmen", - "block.create.copper_ore": "Kupfererz", - "block.create.copper_shingles": "Kupferschindeln", - "block.create.copper_tiles": "Kupferfliesen", - "block.create.copper_valve_handle": "Kupfer Ventilgriff", - "block.create.creative_crate": "Kreative anpassbare Kiste", - "block.create.creative_fluid_tank": "Kreativer Flüssigkeitstank", - "block.create.creative_motor": "Kreativer Motor", - "block.create.crushing_wheel": "Mahlwerkrad", - "block.create.crushing_wheel_controller": "Mahlwerkrad Steurung", - "block.create.cuckoo_clock": "Kuckucksuhr", - "block.create.cyan_sail": "Türkises Segel", - "block.create.cyan_seat": "Türkiser Sitz", - "block.create.cyan_valve_handle": "Türkiser Ventilgriff", - "block.create.dark_oak_window": "Schwarzeichenholzfenster", - "block.create.dark_oak_window_pane": "Schwarzeichenholzfensterscheibe", - "block.create.dark_scoria": "Dunkle Schlacke", - "block.create.dark_scoria_bricks": "Dunkle Schlackenziegel", - "block.create.dark_scoria_bricks_slab": "Dunkle Schlackenziegelstufe", - "block.create.dark_scoria_bricks_stairs": "Dunkle Schlackenziegeltreppe", - "block.create.dark_scoria_bricks_wall": "Dunkle Schlackenziegelmauer", - "block.create.dark_scoria_cobblestone": "Dunkler Schlackebruchstein", - "block.create.dark_scoria_cobblestone_slab": "Dunkle Schlackebruchsteinstufe", - "block.create.dark_scoria_cobblestone_stairs": "Dunkle Schlackebruchsteintreppe", - "block.create.dark_scoria_cobblestone_wall": "Dunkle Schlackebruchsteinmauer", - "block.create.dark_scoria_pillar": "Dunkle Schlackesäule", - "block.create.deployer": "Einsatzgerät", - "block.create.depot": "Depot", - "block.create.diorite_bricks": "Dioritziegel", - "block.create.diorite_bricks_slab": "Dioritziegelstufe", - "block.create.diorite_bricks_stairs": "Dioritziegeltreppe", - "block.create.diorite_bricks_wall": "Dioritziegelmauer", - "block.create.diorite_cobblestone": "Dioritbruchstein", - "block.create.diorite_cobblestone_slab": "Dioritbruchsteinstufe", - "block.create.diorite_cobblestone_stairs": "Dioritbruchsteintreppe", - "block.create.diorite_cobblestone_wall": "Dioritbruchsteinmauer", - "block.create.diorite_pillar": "Dioritsäule", - "block.create.dolomite": "Dolomit", - "block.create.dolomite_bricks": "Dolomitziegel", - "block.create.dolomite_bricks_slab": "Dolomitziegelstufe", - "block.create.dolomite_bricks_stairs": "Dolomitziegeltreppe", - "block.create.dolomite_bricks_wall": "Dolomitziegelmauer", - "block.create.dolomite_cobblestone": "Dolomitbruchstein", - "block.create.dolomite_cobblestone_slab": "Dolomitbruchsteinstufe", - "block.create.dolomite_cobblestone_stairs": "Dolomitbruchsteintreppe", - "block.create.dolomite_cobblestone_wall": "Dolomitbruchsteinmauer", - "block.create.dolomite_pillar": "Dolomitsäule", - "block.create.encased_chain_drive": "Ummantelter Kettenriemen", - "block.create.encased_fan": "Ummantelter Lüfter", - "block.create.encased_fluid_pipe": "Ummanteltes Rohr", - "block.create.fancy_andesite_bricks": "Schicke Andesitziegel", - "block.create.fancy_andesite_bricks_slab": "Schicke Andesitziegelstufe", - "block.create.fancy_andesite_bricks_stairs": "Schicke Andesitziegeltreppe", - "block.create.fancy_andesite_bricks_wall": "Schicke Andesitziegelmauer", - "block.create.fancy_dark_scoria_bricks": "Schicke dunkle Schlackenziegel", - "block.create.fancy_dark_scoria_bricks_slab": "Schicke dunkle Schlackenziegelstufe", - "block.create.fancy_dark_scoria_bricks_stairs": "Schicke dunkle Schlackenziegeltreppe", - "block.create.fancy_dark_scoria_bricks_wall": "Schicke dunkle Schlackenziegelmauer", - "block.create.fancy_diorite_bricks": "Schöne Dioritziegel", - "block.create.fancy_diorite_bricks_slab": "Schöne Dioritziegelstufe", - "block.create.fancy_diorite_bricks_stairs": "Schöne Dioritziegeltreppe", - "block.create.fancy_diorite_bricks_wall": "Schöne Dioritziegelmauer", - "block.create.fancy_dolomite_bricks": "Schöne Dolomitziegel", - "block.create.fancy_dolomite_bricks_slab": "Schöne Dolomitziegelstufe", - "block.create.fancy_dolomite_bricks_stairs": "Schöne Dolomitziegeltreppe", - "block.create.fancy_dolomite_bricks_wall": "Schöne Dolomitziegelmauer", - "block.create.fancy_gabbro_bricks": "Schöne Gabbroziegel", - "block.create.fancy_gabbro_bricks_slab": "Schöne Gabbroziegelstufe", - "block.create.fancy_gabbro_bricks_stairs": "Schöne Gabbroziegeltreppe", - "block.create.fancy_gabbro_bricks_wall": "Schöne Gabbroziegelmauer", - "block.create.fancy_granite_bricks": "Schöne Granitziegel", - "block.create.fancy_granite_bricks_slab": "Schöne Granitziegelstufe", - "block.create.fancy_granite_bricks_stairs": "Schöne Granitziegeltreppe", - "block.create.fancy_granite_bricks_wall": "Schöne Granitziegelmauer", - "block.create.fancy_limestone_bricks": "Schöne Kalksteinziegel", - "block.create.fancy_limestone_bricks_slab": "Schöne Kalksteinziegelstufe", - "block.create.fancy_limestone_bricks_stairs": "Schöne Kalksteinziegeltreppe", - "block.create.fancy_limestone_bricks_wall": "Schöne Kalksteinziegelmauer", - "block.create.fancy_scoria_bricks": "Schöne Schlackenziegel", - "block.create.fancy_scoria_bricks_slab": "Schöne Schlackenziegelstufe", - "block.create.fancy_scoria_bricks_stairs": "Schöne Schlackenziegeltreppe", - "block.create.fancy_scoria_bricks_wall": "Schöne Schlackenziegelmauer", - "block.create.fancy_weathered_limestone_bricks": "Schöne Verwitterte Kalksteinziegel", - "block.create.fancy_weathered_limestone_bricks_slab": "Schöne Verwitterte Kalksteinziegelstufe", - "block.create.fancy_weathered_limestone_bricks_stairs": "Schöne Verwitterte Kalksteinziegeltreppe", - "block.create.fancy_weathered_limestone_bricks_wall": "Schöne Verwitterte Kalksteinziegelmauer", - "block.create.fluid_pipe": "Flüssigkeitsrohr", - "block.create.fluid_tank": "Flüssigkeitstank", - "block.create.fluid_valve": "Flüssigkeitsventil", - "block.create.flywheel": "Schwungrad", - "block.create.framed_glass": "Gerahmtes Glas", - "block.create.framed_glass_pane": "Gerahmte Glasscheibe", - "block.create.furnace_engine": "Ofenmotor", - "block.create.gabbro": "Gabbro", - "block.create.gabbro_bricks": "Gabbroziegel", - "block.create.gabbro_bricks_slab": "Gabbroziegelstufe", - "block.create.gabbro_bricks_stairs": "Gabbroziegeltreppe", - "block.create.gabbro_bricks_wall": "Gabbroziegelmauer", - "block.create.gabbro_cobblestone": "Gabbrobruchstein", - "block.create.gabbro_cobblestone_slab": "Gabbrobruchstein", - "block.create.gabbro_cobblestone_stairs": "Gabbrobruchstein", - "block.create.gabbro_cobblestone_wall": "Gabbrobruchstein", - "block.create.gabbro_pillar": "Gabbrosäule", - "block.create.gantry_carriage": "Portalkranwagen", - "block.create.gantry_shaft": "Portalkranachse", - "block.create.gearbox": "Getriebe", - "block.create.gearshift": "Gangschaltung", - "block.create.glass_fluid_pipe": "Glasrohr", - "block.create.granite_bricks": "Granitziegel", - "block.create.granite_bricks_slab": "Granitziegelstufe", - "block.create.granite_bricks_stairs": "Granitziegeltreppe", - "block.create.granite_bricks_wall": "Granitziegelmauer", - "block.create.granite_cobblestone": "Granitbruchstein", - "block.create.granite_cobblestone_slab": "Granitbruchsteinstufe", - "block.create.granite_cobblestone_stairs": "Granitbruchtreppe", - "block.create.granite_cobblestone_wall": "Granitbruchsteinmauer", - "block.create.granite_pillar": "Granitsäule", - "block.create.gray_sail": "Graues Segel", - "block.create.gray_seat": "Grauer Sitz", - "block.create.gray_valve_handle": "Grauer Ventilgriff", - "block.create.green_sail": "Grünes Segel", - "block.create.green_seat": "Grüner Sitz", - "block.create.green_valve_handle": "Grüner Ventilgriff", - "block.create.hand_crank": "Handkurbel", - "block.create.honey": "Honig", - "block.create.horizontal_framed_glass": "Horizontal Gerahmtes Glas", - "block.create.horizontal_framed_glass_pane": "Horizontal Gerahmte Glasscheibe", - "block.create.hose_pulley": "Umlenkrolle", - "block.create.item_drain": "Abfluss", - "block.create.jungle_window": "Tropenholzfenster", - "block.create.jungle_window_pane": "Tropenholzfensterscheibe", - "block.create.large_cogwheel": "Großes Zahnrad", - "block.create.layered_andesite": "Geschichteter Andesit", - "block.create.layered_dark_scoria": "Geschichtete Dunkle Schlacke", - "block.create.layered_diorite": "Geschichteter Diorit", - "block.create.layered_dolomite": "Geschichteter Dolomit", - "block.create.layered_gabbro": "Geschichteter Gabbro", - "block.create.layered_granite": "Geschichteter Granit", - "block.create.layered_limestone": "Geschichteter Kalkstein", - "block.create.layered_scoria": "Geschichtete Schlacke", - "block.create.layered_weathered_limestone": "Geschichteter Verwitterter Kalkstein", - "block.create.light_blue_sail": "Hellblaues Segel", - "block.create.light_blue_seat": "Hellblauer Sitz", - "block.create.light_blue_valve_handle": "Hellblauer Ventilgriff", - "block.create.light_gray_sail": "Hellgraues Segel", - "block.create.light_gray_seat": "Hellgrauer Sitz", - "block.create.light_gray_valve_handle": "Hellgrauer Ventilgriff", - "block.create.lime_sail": "Hellgrünes Segel", - "block.create.lime_seat": "Hellgrüner Sitz", - "block.create.lime_valve_handle": "Hellgrüner Ventilgriff", - "block.create.limesand": "Kalksand", - "block.create.limestone": "Kalkstein", - "block.create.limestone_bricks": "Kalksteinziegel", - "block.create.limestone_bricks_slab": "Kalksteinziegelstufe", - "block.create.limestone_bricks_stairs": "Kalksteinziegeltreppe", - "block.create.limestone_bricks_wall": "Kalksteinziegelmauer", - "block.create.limestone_cobblestone": "Kalkbruchstein", - "block.create.limestone_cobblestone_slab": "Kalkbruchsteinstufe", - "block.create.limestone_cobblestone_stairs": "Kalkbruchsteintreppe", - "block.create.limestone_cobblestone_wall": "Kalkbruchsteinmauer", - "block.create.limestone_pillar": "Kalksteinsäule", - "block.create.linear_chassis": "Schubgerüst", - "block.create.lit_blaze_burner": "Aktiver Lohenbrenner", - "block.create.magenta_sail": "Magenta Segel", - "block.create.magenta_seat": "Magenta Sitz", - "block.create.magenta_valve_handle": "Magenta Ventilgriff", - "block.create.mechanical_arm": "Mechanischer Arm", - "block.create.mechanical_bearing": "Mechanisches Lager", - "block.create.mechanical_crafter": "Mechanische Handwerkseinheit", - "block.create.mechanical_drill": "Mechanischer Bohrer", - "block.create.mechanical_harvester": "Mechanische Erntemaschine", - "block.create.mechanical_mixer": "Mechanischer Mixer", - "block.create.mechanical_piston": "Mechanischer Kolben", - "block.create.mechanical_piston_head": "Mechanisches Kolbenende", - "block.create.mechanical_plough": "Mechanischer Pflug", - "block.create.mechanical_press": "Mechanische Presse", - "block.create.mechanical_pump": "Mechanische Pumpe", - "block.create.mechanical_saw": "Mechanische Säge", - "block.create.metal_bracket": "Metallhalterung", - "block.create.millstone": "Mahlstein", - "block.create.minecart_anchor": "Lorenanker", - "block.create.mossy_andesite": "Moosiger Andesit", - "block.create.mossy_dark_scoria": "Moosige Dunkle Schlacke", - "block.create.mossy_diorite": "Moosiger Diorit", - "block.create.mossy_dolomite": "Moosiger Dolomit", - "block.create.mossy_gabbro": "Moosiger Gabbro", - "block.create.mossy_granite": "Moosiger Granit", - "block.create.mossy_limestone": "Moosiger Kalkstein", - "block.create.mossy_scoria": "Moosige Schlacke", - "block.create.mossy_weathered_limestone": "Moosiger Verwitterter Kalkstein", - "block.create.mysterious_cuckoo_clock": "Kuckucksuhr", - "block.create.natural_scoria": "Natürliche Schlacke", - "block.create.nixie_tube": "Nixie-Röhre", - "block.create.nozzle": "Düse", - "block.create.oak_window": "Eichenfenster", - "block.create.oak_window_pane": "Eichenfensterscheibe", - "block.create.orange_sail": "Oranges Segel", - "block.create.orange_seat": "Oranger Sitz", - "block.create.orange_valve_handle": "Oranger Ventilgriff", - "block.create.ornate_iron_window": "Kunstvolles Eisenfenster", - "block.create.ornate_iron_window_pane": "Kunstvolle Eisenfensterscheibe", - "block.create.overgrown_andesite": "Überwachsener Andesit", - "block.create.overgrown_dark_scoria": "Überwachsene Dunkle Schlacke", - "block.create.overgrown_diorite": "Überwachsener Diorit", - "block.create.overgrown_dolomite": "Überwachsener Dolomit", - "block.create.overgrown_gabbro": "Überwachsener Gabbro", - "block.create.overgrown_granite": "Überwachsener Granit", - "block.create.overgrown_limestone": "Überwachsener Kalkstein", - "block.create.overgrown_scoria": "Überwachsener Schlacke", - "block.create.overgrown_weathered_limestone": "Überwachsener Verwitterter Kalkstein", - "block.create.paved_andesite": "Gepflasterter Andesit", - "block.create.paved_andesite_slab": "Gepflasterte Andesitstufe", - "block.create.paved_andesite_stairs": "Gepflasterte Andesittreppe", - "block.create.paved_andesite_wall": "Gepflasterte Andesitmauer", - "block.create.paved_dark_scoria": "Gepflasterte Dunkle Schlacke", - "block.create.paved_dark_scoria_slab": "Gepflasterte Dunkle Schlackenstufe", - "block.create.paved_dark_scoria_stairs": "Gepflasterte Dunkle Schlackentreppe", - "block.create.paved_dark_scoria_wall": "Gepflasterte Dunkle Schlackenmauer", - "block.create.paved_diorite": "Gepflasterter Diorit", - "block.create.paved_diorite_slab": "Gepflasterte Dioritstufe", - "block.create.paved_diorite_stairs": "Gepflasterte Diorittreppe", - "block.create.paved_diorite_wall": "Gepflasterte Dioritmauer", - "block.create.paved_dolomite": "Gepflasterter Dolomit", - "block.create.paved_dolomite_slab": "Gepflasterte Dolomitstufe", - "block.create.paved_dolomite_stairs": "Gepflasterte Dolomittreppe", - "block.create.paved_dolomite_wall": "Gepflasterte Dolomitmauer", - "block.create.paved_gabbro": "Gepflasterter Gabbro", - "block.create.paved_gabbro_slab": "Gepflasterte Gabbrostufe", - "block.create.paved_gabbro_stairs": "Gepflasterte Gabbrotreppe", - "block.create.paved_gabbro_wall": "Gepflasterte Gabbromauer", - "block.create.paved_granite": "Gepflasterter Granit", - "block.create.paved_granite_slab": "Gepflasterte Granitstufe", - "block.create.paved_granite_stairs": "Gepflasterte Granittreppe", - "block.create.paved_granite_wall": "Gepflasterte Granitmauer", - "block.create.paved_limestone": "Gepflasterter Kalkstein", - "block.create.paved_limestone_slab": "Gepflasterte Kalksteinstufe", - "block.create.paved_limestone_stairs": "Gepflasterte Kalksteintreppe", - "block.create.paved_limestone_wall": "Gepflasterte Kalksteinmauer", - "block.create.paved_scoria": "Gepflasterte Schlacke", - "block.create.paved_scoria_slab": "Gepflasterte Schlackenstufe", - "block.create.paved_scoria_stairs": "Gepflasterte Schlackentreppe", - "block.create.paved_scoria_wall": "Gepflasterte Schlackenmauer", - "block.create.paved_weathered_limestone": "Gepflasterter Verwitterter Kalkstein", - "block.create.paved_weathered_limestone_slab": "Gepflasterte Verwitterte Kalksteinstufe", - "block.create.paved_weathered_limestone_stairs": "Gepflasterte Verwitterte Kalksteintreppe", - "block.create.paved_weathered_limestone_wall": "Gepflasterte Verwitterte Kalksteinmauer", - "block.create.pink_sail": "Rosa Segel", - "block.create.pink_seat": "Rosa Sitz", - "block.create.pink_valve_handle": "Rosa Ventilgriff", - "block.create.piston_extension_pole": "Kolben-Pleuelverlängerung", - "block.create.polished_dark_scoria": "Polierte Dunkle Schlacke", - "block.create.polished_dark_scoria_slab": "Polierte Dunkle Schlackenstufe", - "block.create.polished_dark_scoria_stairs": "Polierte Dunkle Schlackentreppe", - "block.create.polished_dark_scoria_wall": "Polierte Dunkle Schlackenmauer", - "block.create.polished_dolomite": "Polierter Dolomit", - "block.create.polished_dolomite_slab": "Polierte Dolomitstufe", - "block.create.polished_dolomite_stairs": "Polierte Dolomittreppe", - "block.create.polished_dolomite_wall": "Polierte Dolomitmauer", - "block.create.polished_gabbro": "Polierter Gabbro", - "block.create.polished_gabbro_slab": "Polierte Gabbrostufe", - "block.create.polished_gabbro_stairs": "Polierte Gabbrotreppe", - "block.create.polished_gabbro_wall": "Polierte Gabbromauer", - "block.create.polished_limestone": "Polierter Kalkstein", - "block.create.polished_limestone_slab": "Polierte Kalksteinstufe", - "block.create.polished_limestone_stairs": "Polierte Kalksteintreppe", - "block.create.polished_limestone_wall": "Polierte Kalksteinmauer", - "block.create.polished_scoria": "Polierte Schlacke", - "block.create.polished_scoria_slab": "Polierte Schlackenstufe", - "block.create.polished_scoria_stairs": "Polierte Schlackentreppe", - "block.create.polished_scoria_wall": "Polierte Schlackenmauer", - "block.create.polished_weathered_limestone": "Polierter Verwitterter Kalkstein", - "block.create.polished_weathered_limestone_slab": "Polierte Verwitterte Kalksteinstufe", - "block.create.polished_weathered_limestone_stairs": "Polierte Verwitterte Kalksteintreppe", - "block.create.polished_weathered_limestone_wall": "Polierte Verwitterte Kalksteinmauer", - "block.create.portable_fluid_interface": "Portable Flüssigkeitsschnittstelle", - "block.create.portable_storage_interface": "Portable Lagerschnittstelle", - "block.create.powered_latch": "RS-Flipflop", - "block.create.powered_toggle_latch": "T-Flipflop", - "block.create.pulley_magnet": "Rollenmagnet", - "block.create.pulse_repeater": "Pulsierender Verstärker", - "block.create.pulse_repeater.tooltip": "PULSIERENDER VERSTÄRKER", - "block.create.pulse_repeater.tooltip.summary": "Ein einfacher Schaltkreis, um durchgehende Redstone-Signale auf eine Länge von _1_ _tick_ zu reduzieren.", - - "block.create.adjustable_repeater.tooltip": "VERZÖGERNDER VERSTÄRKER", - "block.create.adjustable_repeater.tooltip.summary": "Ein fortgeschrittener _Redstone-Verstärker_ mit einer _konfigurierbaren_ _Verzögerung_ von bis zu 30 Minuten.", - "block.create.purple_sail": "Lila Segel", - "block.create.purple_seat": "Lila Sitz", - "block.create.purple_valve_handle": "Lila Ventilgriff", - "block.create.radial_chassis": "Drehgerüst", - "block.create.red_sail": "Rote Segel", - "block.create.red_seat": "Roter Sitz", - "block.create.red_valve_handle": "Roter Ventilgriff", - "block.create.redstone_contact": "Redstone-Kontakt", - "block.create.redstone_link": "Redstone-Verbindung", - "block.create.refined_radiance_casing": "Glanzgehäuse", - "block.create.reinforced_rail": "Verstärkte Schiene", - "block.create.rope": "Seil", - "block.create.rope_pulley": "Seilrolle", - "block.create.rotation_speed_controller": "Rotationsgeschwindigkeitsregler", - "block.create.sail_frame": "Segelrahmen", - "block.create.schematic_table": "Bauplantisch", - "block.create.schematicannon": "Bauplankanone", - "block.create.scoria": "Schlacke", - "block.create.scoria_bricks": "Schlackenziegel", - "block.create.scoria_bricks_slab": "Schlackenziegelstufe", - "block.create.scoria_bricks_stairs": "Schlackenziegeltreppe", - "block.create.scoria_bricks_wall": "Schlackenziegelmauer", - "block.create.scoria_cobblestone": "Schlackenbruchstein", - "block.create.scoria_cobblestone_slab": "Schlackenpflasterstufe", - "block.create.scoria_cobblestone_stairs": "Schlackenpflastertreppe", - "block.create.scoria_cobblestone_wall": "Schlackenpflastermauer", - "block.create.scoria_pillar": "Schlackensäule", - "block.create.secondary_linear_chassis": "Sekundäres Schubgerüst", - "block.create.sequenced_gearshift": "Sequenzielle Gangschaltung", - "block.create.shadow_steel_casing": "Schattengehäuse", - "block.create.shaft": "Welle", - "block.create.shaft.tooltip": "WELLE", - "block.create.shaft.tooltip.summary": "_Überträgt_ _Rotation_ entlang ihrer Achse.", - - "block.create.cogwheel.tooltip": "ZAHNRAD", - "block.create.cogwheel.tooltip.summary": "_Überträgt_ _Rotation_ entlang seiner Achse und auf benachbarte _Zahnräder._", - - "block.create.large_cogwheel.tooltip": "GROẞES ZAHNRAD", - "block.create.large_cogwheel.tooltip.summary": "Eine größere Version des _Zahnrads,_ ermöglicht eine _Änderung_ der _Rotationsgeschwindigket_, wenn es mit einem kleinerem Zahnrad verbunden wird.", - - "block.create.encased_shaft.tooltip": "EINGESCHLOSSENE WELLE", - "block.create.encased_shaft.tooltip.summary": "_Überträgt_ _Rotation_ entlang ihrer Achse. Nützlich für die Übertragung von Rotation durch Wände hindurch.", - - "block.create.gearbox.tooltip": "GETRIEBE", - "block.create.gearbox.tooltip.summary": "_Leitet_ _Rotation_ in _vier_ _Richtungen_ weiter. Kehrt geradlinige Verbindungen um.", - - "block.create.gearshift.tooltip": "GANGSCHALTUNG", - "block.create.gearshift.tooltip.summary": "Ein kontrollierbarer _Rotationsschalter_ für angeschlossene Wellen.", - "block.create.gearshift.tooltip.condition1": "Wenn aktiv", - "block.create.gearshift.tooltip.behaviour1": "_Kehrt_ die ausgehende Drehrichtung _um._", - - "block.create.clutch.tooltip": "KUPPLUNG", - "block.create.clutch.tooltip.summary": "Ein kontrollierbarer _Rotationsschalter_ für angeschlossene Wellen.", - "block.create.clutch.tooltip.condition1": "Wenn aktiv", - "block.create.clutch.tooltip.behaviour1": "_Stoppt_ das Weiterleiten von Rotation zur anderen Seite.", - - "item.create.belt_connector.tooltip": "MECHANISCHER RIEMEN", - "item.create.belt_connector.tooltip.summary": "Verbindet zwei _Wellen_ mit einem _Mechanischen_ _Riemen._ Verbundene Wellen haben die exakt gleiche Rotationsgeschwindigkeit und Richtung.", - "item.create.belt_connector.tooltip.control1": "R-Klick auf Welle", - "item.create.belt_connector.tooltip.action1": "Wählt die Welle als Verbindungspunkt für den Riemen aus. Beide ausgewählten Wellen müssen _horizontal,_ _vertikal_ oder _diagonal_ entlang der Richtung des Riemens zeigen.", - "item.create.belt_connector.tooltip.control2": "R-Klick beim Schleichen", - "item.create.belt_connector.tooltip.action2": "_Setzt_ die erste ausgewählte Position des Riemens _zurück._", - - "block.create.water_wheel.tooltip": "WASSERRAD", - "block.create.water_wheel.tooltip.summary": "Liefert _Rotationsenergie_ von benachbarten _Wasserströmungen._", - - "block.create.encased_fan.tooltip": "EINGESCHLOSSENER PROPELLER", - "block.create.encased_fan.tooltip.summary": "Wandelt _Rotationsenergie_ in _Luftstöme_ um und wieder zurück. Hat mehrere Verwendungsmöglichkeiten.", - "block.create.encased_fan.tooltip.condition1": "Wenn über Feuer", - "block.create.encased_fan.tooltip.behaviour1": "Liefert _Rotationsenergie_ (muss vertikal ausgerichtet sein)", - "block.create.encased_fan.tooltip.condition2": "Wenn angetrieben", - "block.create.encased_fan.tooltip.behaviour2": "_Bläst_ Dinge auf einer Seite von sich weg, _zieht_ sie auf der anderen zu sich hin. Kraft und Geschwindigkeit sind abhängig von der eingehenden Rotation.", - "block.create.encased_fan.tooltip.condition3": "Wenn Luft durch spezielle Blöcke fließt", - "block.create.encased_fan.tooltip.behaviour3": "Werden Gegenstände vor dem Block verarbeitet: _Wasser_ wäscht, _Feuer_ räuchert, und _Lava_ schmilzt den Gegenstand.", - "block.create.smart_chute": "Schlaue Rinne", - "block.create.smart_fluid_pipe": "Schlaues Flüssigkeitsrohr", - "block.create.speedometer": "Tachometer", - "block.create.spout": "Ausguss", - "block.create.spruce_window": "Fichtenfenster", - "block.create.spruce_window_pane": "Fichtenfensterscheibe", - "block.create.sticker": "Ankleber", - "block.create.sticky_mechanical_piston": "Klebriger Mechanischer Kolben", - "block.create.stockpile_switch": "Vorratssensor", - "block.create.stressometer": "Stressometer", - "block.create.tiled_glass": "Glasfliesen", - "block.create.tiled_glass_pane": "Glasfliesenscheibe", - "block.create.turntable": "Drehtisch", - "block.create.crushing_wheel.tooltip": "MAHLWERKRAD", - "block.create.crushing_wheel.tooltip.summary": "Riesige, drehbare Räder, die alles _zermalmen_ das zwischen ihnen landet.", - "block.create.crushing_wheel.tooltip.condition1": "Wenn mit einem anderem Mahlwerkrad verbunden", - "block.create.crushing_wheel.tooltip.behaviour1": "Formt einen Schredder, mit dem man verschiedene Sachen verarbeiten kann. Die Zähne der Räder müssen ineinandergreifen und mit der _gleichen_ _Geschwindigkeit_ in _gegengesetzte_ _Richtungen_ drehen.", - - "block.create.mechanical_press.tooltip": "MECHANISCHE PRESSE", - "block.create.mechanical_press.tooltip.summary": "Ein starker Kolben, welcher Gegenstände unter ihm zusammenpresst. Benötigt konstante _Rotationsenergie._", - "block.create.mechanical_press.tooltip.condition1": "Wenn durch Redstone aktiviert", - "block.create.mechanical_press.tooltip.behaviour1": "_Fängt_ _an_, Gegenstände, die darunter liegen, zusammenzudrücken.", - "block.create.mechanical_press.tooltip.condition2": "Wenn über einem Mechanischem Riemen", - "block.create.mechanical_press.tooltip.behaviour2": "Presst _automatisch_ alle auf dem Riemen vorbeigeführten Gegenstände zusammen.", - "block.create.mechanical_press.tooltip.condition3": "UNLOCALIZED: When above Basin", - "block.create.mechanical_press.tooltip.behaviour3": "UNLOCALIZED: Starts to _compact items_ in the basin whenever all necessary ingredients are present.", - - "block.create.mechanical_piston.tooltip": "MECHANISCHER KOLBEN", - "block.create.mechanical_piston.tooltip.summary": "Eine fortgeschrittene Version des _Kolbens,_ welcher _Rotationsenergie_ benutzt, um verbundene Strukturen präzise zu bewegen. _Kolben-Pleuelverlängerungen_ auf der Hinterseite bestimmen die _Reichweite_ des Kolbens. Ohne Verlängerungen bewegt sich dieser nicht. Verwende ein _Schubgerüst,_ um mehr als nur eine Reihe von Blöcken zu bewegen.", - "block.create.mechanical_piston.tooltip.condition1": "Wenn angetrieben", - "block.create.mechanical_piston.tooltip.behaviour1": "Fängt an, die angeschlossene Struktur zu bewegen. Geschwindigkeit und Richtung korrelieren mit der eingehenden Rotationsgeschwindigkeit.", - - "block.create.piston_extension_pole.tooltip": "KOLBEN-PLEUELVERÄNGERUNG", - "block.create.piston_extension_pole.tooltip.summary": "Wird benutzt, um die Reichweite von _Mechanischen_ _Kolben_ zu erhöhen.", - "block.create.piston_extension_pole.tooltip.condition1": "Wenn an einem Mechanischen Kolben angebracht", - "block.create.piston_extension_pole.tooltip.behaviour1": "Erhöht die Länge des Kolbens um 1 Block.", - - "block.create.mechanical_bearing.tooltip": "MECHANISCHES LAGER", - "block.create.mechanical_bearing.tooltip.summary": "Wird benutzt, um _größere_ _Strukturen_ zu drehen oder um _Rotationsenergie_ aus Wind zu erzeugen.", - "block.create.mechanical_bearing.tooltip.condition1": "Wenn angetrieben", - "block.create.mechanical_bearing.tooltip.behaviour1": "Fängt an, angeschlossene _Drehgerüste_ und an ihnen angebrachte Blöcke zu drehen.", - - "block.create.linear_chassis.tooltip": "SCHUBGERÜST", - "block.create.linear_chassis.tooltip.summary": "Eine konfigurierbare Basis für Strukturen, die durch _Mechanische_ _Kolben_ bewegt werden sollen. Diese Blöcke müssen die erste Reihe von Blöcken vor dem Kloben bilden.", - "block.create.linear_chassis.tooltip.condition1": "Wenn durch einen Mechanischen Kolben bewegt", - "block.create.linear_chassis.tooltip.behaviour1": "_Bewegt_ alle _verbundenen_ _Gerüste_ mit der gleichen Orientierung, und angebrachte Blöcke davor. Wenn der Kolben zurückgezogen wird, werden Blöcke nur zurückgezogen, wenn die Fläche des Gerüsts _klebrig_ ist (Siehe [Strg]).", - "block.create.linear_chassis.tooltip.condition2": "UNLOCALIZED: With Wrench", - "block.create.linear_chassis.tooltip.behaviour2": "UNLOCALIZED: Configure the _range_ for this chassis block. Hold CTRL to modify the range of all attached chassis blocks as well.", - "block.create.linear_chassis.tooltip.control1": "Wenn mit einem Schleimball R-geklickt", - "block.create.linear_chassis.tooltip.action1": "Lässt die Oberfläche _klebrig_ werden. Wenn der Kolben zurückgezogen wird, _zieht_ das Gerüst alle verbundenen Blöcke _zurück_ in seine Spalte und innerhalb der konfigurierten Reichweite.", - - "block.create.radial_chassis.tooltip": "DREHGERÜST", - "block.create.radial_chassis.tooltip.summary": "Wird für das Drehen von Strukturen mit dem _Mechanischem_ _Lager_ benutzt.", - "block.create.radial_chassis.tooltip.condition1": "Wenn durch ein Lager gedreht", - "block.create.radial_chassis.tooltip.behaviour1": "_Dreht_ alle an _klebrigen_ Seiten angebrachten Blöcke (Siehe [Strg]) innerhalb der konfigurierten Reichweite um sich. _Überträgt_ die Rotation zu weiter angebrachten Rotationsgerüsten.", - "block.create.radial_chassis.tooltip.condition2": "UNLOCALIZED: With Wrench", - "block.create.radial_chassis.tooltip.behaviour2": "UNLOCALIZED: Configure the _range_ for this chassis block. Hold CTRL to modify the range of all attached chassis blocks as well.", - "block.create.radial_chassis.tooltip.control1": "Wenn mit einem Schleimball R-geklickt", - "block.create.radial_chassis.tooltip.action1": "Lässt die geklickte Fläche _klebrig_ werden. Wenn das Gerüst gedreht wird, werden alle verbundenen Blöcke an dieser Seite mit dem Gerüst mitgedreht.", - - "block.create.mechanical_drill.tooltip": "MECHANISCHER BOHRER", - "block.create.mechanical_drill.tooltip.summary": "Ein mechanisches Gerät, welches sich dazu eignet _Blöcke_ _zu_ _brechen._", - "block.create.mechanical_drill.tooltip.condition1": "Wenn angetrieben", - "block.create.mechanical_drill.tooltip.behaviour1": "Funktioniert als _stationärer_ Blockbrecher. _Schadet_ außerdem _Wesen_ in seiner effektiven Reichweite.", - "block.create.mechanical_drill.tooltip.condition2": "Wenn durch einem Mechanischen Kolben bewegt", - "block.create.mechanical_drill.tooltip.behaviour2": "Bricht Blöcke die der Bohrer trifft.", - - "block.create.mechanical_harvester.tooltip": "MECHANISCHE ERNTEMASCHINE", - "block.create.mechanical_harvester.tooltip.summary": "Ein mechanischer Pflanzenschneider für die Automatisierung deiner Ernte.", - "block.create.mechanical_harvester.tooltip.condition1": "Wenn durch einem Mechanischen Kolben bewegt", - "block.create.mechanical_harvester.tooltip.behaviour1": "Werden alle _reifen_ _Pflanzen_ _geerntet_, die die Klinge treffen, und auf ihren anfänglichen Wachstumszustand zurückgesetzt.", - "block.create.vertical_framed_glass": "Vertikal Gerahmtes Glas", - "block.create.vertical_framed_glass_pane": "Vertikal Gerahmte Glasscheibe", - "block.create.water_wheel": "Wasserrad", - "block.create.weathered_limestone": "Verwitterter Kalkstein", - "block.create.weathered_limestone_bricks": "Verwitterte Kalksteinziegel", - "block.create.weathered_limestone_bricks_slab": "Verwitterte Kalksteinziegelstufe", - "block.create.weathered_limestone_bricks_stairs": "Verwitterte Kalksteinziegeltreppe", - "block.create.weathered_limestone_bricks_wall": "Verwitterte Kalksteinziegelmauer", - "block.create.weathered_limestone_cobblestone": "Verwittertes Kalksteinpflaster", - "block.create.weathered_limestone_cobblestone_slab": "Verwitterte Kalksteinpflasterstufe", - "block.create.weathered_limestone_cobblestone_stairs": "Verwitterte Kalksteinpflastertreppe", - "block.create.weathered_limestone_cobblestone_wall": "Verwitterte Limestonepflastermauer", - "block.create.weathered_limestone_pillar": "Verwitterte Kalksteinsäule", - "block.create.weighted_ejector": "Gewichteter Werfer", - "block.create.white_sail": "Weiße Segel", - "block.create.white_seat": "Weißer Sitz", - "block.create.white_valve_handle": "Weißer Ventilgriff", - "block.create.windmill_bearing": "Windmühlenlager", - "block.create.wooden_bracket": "Holzhalterung", - "block.create.yellow_sail": "Gelbes Segel", - "block.create.yellow_seat": "Gelber Sitz", - "block.create.yellow_valve_handle": "Gelber Ventilgriff", - "block.create.zinc_block": "Zinkblock", - "block.create.zinc_ore": "Zinkerz", - - "block.create.redstone_link.tooltip": "REDSTONE-VERBINDUNG", - "block.create.redstone_link.tooltip.summary": "Endpunkte für _Drahtlose_ _Redstone-Verbindungen._ Mithilfe von Gegenständen kann die Frequenz eingestellt werden. Signalreichweite ist begrenzt, aber angemessen.", - "block.create.redstone_link.tooltip.condition1": "Wenn aktiv", - "block.create.redstone_link.tooltip.behaviour1": "Liefern eingehende Verbindungen mit derselben _Frequenz_ ein Redstone-Signal.", - "block.create.redstone_link.tooltip.control1": "Wenn mit einem Gegenstand R-geklickt", - "block.create.redstone_link.tooltip.action1": "Setzt die _Frequenz_ auf diesen Gegenstand. Insgesamt können _zwei_ _verschiedene_ _Gegenstände_ benutzt werden, um die Frequenz zu definieren.", - "block.create.redstone_link.tooltip.control2": "Wenn während dem Schleichen R-geklickt", - "block.create.redstone_link.tooltip.action2": "Schaltet zwischen _Empfänger-_ und _Transmittermodus_ um.", - - "block.create.redstone_contact.tooltip": "REDSTONE-KONTAKT", - "block.create.redstone_contact.tooltip.summary": "Ein einfaches Gerät für fortgeschrittene Redstone-Apparate.", - "block.create.redstone_contact.tooltip.condition1": "Wenn gegenüber einem anderen Kontakt", - "block.create.redstone_contact.tooltip.behaviour1": "Liefert ein _Redstone-Signal._", - "block.create.redstone_contact.tooltip.condition2": "Wenn durch einen Mechanischen Kolben bewegt", - "block.create.redstone_contact.tooltip.behaviour2": "Löst im Vorbeifahren stationären Kontakte aus", - - - "entity.create.contraption": "Vorrichtung", - "entity.create.gantry_contraption": "Portalkran Vorrichtung", - "entity.create.seat": "Sitz", - "entity.create.stationary_contraption": "Stationäre Vorrichtung", - "entity.create.super_glue": "Superkleber", - - "fluid.create.milk": "Milch", - "fluid.create.potion": "Trank", - "fluid.create.tea": "Bauherrentee", - - "item.create.andesite_alloy": "Andesitlegierung", - "item.create.attribute_filter": "Attribut Filter", - "item.create.bar_of_chocolate": "Schokoladentafel", - "item.create.belt_connector": "Mechanischer Riemen", - "item.create.blaze_cake": "Lohenkuchen", - "item.create.blaze_cake_base": "Lohenkuchenbasis", - "item.create.brass_hand": "Messing Hand", - "item.create.brass_ingot": "Messingbarren", - "item.create.brass_nugget": "Messingklumpen", - "item.create.brass_sheet": "Messingblech", - "item.create.builders_tea": "Baumeisters Tee", - "item.create.chest_minecart_contraption": "Güterloren Vorrichtung", - "item.create.chocolate_bucket": "Schokoladeneimer", - "item.create.chocolate_glazed_berries": "Schokoladenglasierte Beeren", - "item.create.chromatic_compound": "Chromatische Verbindung", - "item.create.cinder_flour": "Aschenmehl", - "item.create.copper_ingot": "Kupferbarren", - "item.create.copper_nugget": "Kupferklumpen", - "item.create.copper_sheet": "Kupferblech", - "item.create.crafter_slot_cover": "Handwerkseinheit Slot Abdeckung", - "item.create.crushed_aluminum_ore": "Zerkleinertes Aluminiumerz", - "item.create.crushed_brass": "Zerkleinertes Messing", - "item.create.crushed_copper_ore": "Zerkleinertes Kupfererz", - "item.create.crushed_gold_ore": "Zerkleinertes Golderz", - "item.create.crushed_iron_ore": "Zerkleinertes Eisenerz", - "item.create.crushed_lead_ore": "Zerkleinertes Bleierz", - "item.create.crushed_nickel_ore": "Zerkleinertes Nickelerz", - "item.create.crushed_osmium_ore": "Zerkleinertes Osmiumerz", - "item.create.crushed_platinum_ore": "Zerkleinertes Platinerz", - "item.create.crushed_quicksilver_ore": "Zerkleinertes Quecksilbererz", - "item.create.crushed_silver_ore": "Zerkleinertes Silbererz", - "item.create.crushed_tin_ore": "Zerkleinertes Zinnerz", - "item.create.crushed_uranium_ore": "Zerkleinertes Uranerz", - "item.create.crushed_zinc_ore": "Zerkleinertes Zinkerz", - "item.create.deforester": "Entforster", - "item.create.dough": "Teig", - "item.create.electron_tube": "Elektronenröhre", - "item.create.empty_blaze_burner": "Leerer Lohenbrenner", - "item.create.empty_schematic": "Leerer Bauplan", - "item.create.extendo_grip": "Extendo Griff", - "item.create.filter": "Filter", - "item.create.furnace_minecart_contraption": "Antriebsloren Vorrichtung", - "item.create.goggles": "Ingenieursbrille", - "item.create.golden_sheet": "Goldblech", - "item.create.handheld_blockzapper": "Blockpistole", - "item.create.handheld_worldshaper": "Geländeformer", - "item.create.honey_bucket": "Honigeimer", - "item.create.honeyed_apple": "Honigapfel", - "item.create.integrated_circuit": "Integrierter Schaltkreis", - "item.create.iron_sheet": "Eisenblech", - "item.create.lapis_sheet": "Lapislazuliblech", - "item.create.minecart_contraption": "Loren Vorrichtung", - "item.create.minecart_coupling": "Lorenkupplung", - "item.create.polished_rose_quartz": "Polierter Rosenquarz", - "item.create.powdered_obsidian": "Pulverisierter Obsidian", - "item.create.propeller": "Propeller", - "item.create.red_sand_paper": "Rotes Schmirgelpapier", - "item.create.refined_radiance": "Raffinierter Glanz", - "item.create.rose_quartz": "Rosenquarz", - "item.create.sand_paper": "Schmirgelpapier", - "item.create.schematic": "Bauplan", - "item.create.schematic_and_quill": "Bauplan und Feder", - "item.create.shadow_steel": "Schattenstahl", - "item.create.super_glue": "Superkleber", - "item.create.sweet_roll": "Rosinenschnecke", - "item.create.tree_fertilizer": "Baumdünger", - "item.create.vertical_gearbox": "Vertikales Getriebe", - "item.create.wand_of_symmetry": "Symmetriestab", - "item.create.wheat_flour": "Weizenmehl", - "item.create.whisk": "Rührstab", - "item.create.wrench": "Schraubenschlüssel", - "item.create.zinc_ingot": "Zinkbarren", - "item.create.zinc_nugget": "Zinkklumpen", - - - "_": "->------------------------] Advancements [------------------------<-", - - "advancement.create.root": "Willkommen zu Create", - "advancement.create.root.desc": "Es ist Zeit mit dem Bauen von tollen Apparaten zu starten!", - "advancement.create.andesite_alloy": "Alliterationen in Massen", - "advancement.create.andesite_alloy.desc": "Create's Materialien haben verrückte Namen, Eisenlegierung ist im Deutschen leider keine.", - "advancement.create.its_alive": "Es ist am leben!", - "advancement.create.its_alive.desc": "Gucke deinem erstem beweglichen Teil beim drehen zu.", - "advancement.create.shifting_gears": "Wechsel deine Gänge", - "advancement.create.shifting_gears.desc": "Verbinde ein großes Zahnrad mit einem kleinem, um die Geschwindigkeit deiner Apparate zu verändern.", - "advancement.create.overstressed": "Überfordert", - "advancement.create.overstressed.desc": "Erfahre die Limits der Belastung aus erster Hand.", - "advancement.create.belt": "Befördere es alles", - "advancement.create.belt.desc": "Verbinde zwei Wellen mit einem Mechanischem Riemen", - "advancement.create.tunnel": "Geht in Deckung!", - "advancement.create.tunnel.desc": "Verschönere deinen Mechanischem Riemen mit einem Tunnel.", - "advancement.create.splitter_tunnel": "Divide & Conquer", - "advancement.create.splitter_tunnel.desc": "Mache einen Teiler aus einer Gruppe von Messingtunneln.", - "advancement.create.chute": "Abstürzen", - "advancement.create.chute.desc": "Platziere eine Rinne, das vertikale Gegenstück des Riemens.", - "advancement.create.upward_chute": "Luftentführung", - "advancement.create.upward_chute.desc": "Sieh einen geworfenen Gegenstand in eine propellerbetriebene Rinne fliegen.", - "advancement.create.belt_funnel": "Klappernde Klappen", - "advancement.create.belt_funnel.desc": "Platziere einen seitwärts schauenden Riementrichter auf einem Förderband oder einem Depot um einen speziellen Typ zu erstellen.", - "advancement.create.belt_funnel_kiss": "Die Hühnchen und die Klappen", - "advancement.create.belt_funnel_kiss.desc": "Lasse zwei an Mechanischen Riemen befestigte Riementrichter sich küssen.", - "advancement.create.fan": "Mechanischer Luftbändiger", - "advancement.create.fan.desc": "Reite den Luftstrom eines eingeschlossenen Propellers.", - "advancement.create.fan_lava": "geothermische Heizung", - "advancement.create.fan_lava.desc": "Bleibe in einem Luftzug, der Dinge schmilzt, hängen.", - "advancement.create.fan_water": "Verrücktes Waschen", - "advancement.create.fan_water.desc": "Bleibe in einem Luftzug, der Dinge wäscht, hängen.", - "advancement.create.fan_smoke": "Mechanischer Balg", - "advancement.create.fan_smoke.desc": "Bleibe in einem Luftzug, der Items räuchert, hängen.", - "advancement.create.wrench": "Komfortabel Einstellen", - "advancement.create.wrench.desc": "Stelle einen Schraubenschlüssel her, der beim Bauen von Vorrichtungen hilft. ", - "advancement.create.goggles": "Stress-O-Vision", - "advancement.create.goggles.desc": "Stelle Ingenieursbrillen her, die beim Bekommen von kinetischen Informationen von Bauteilen, hilft.", - "advancement.create.speedometer": "Aber wie schnell genau?", - "advancement.create.speedometer.desc": "Platziere und schalte ein Tachometer ein. Schau es dir durch deine Ingenieursbrille an und lese den genauen Wert ab.", - "advancement.create.stressometer": "Aber wie belastet genau?", - "advancement.create.stressometer.desc": "Platziere und schalte ein Stressometer ein. Schau es dir durch deine Ingenieursbrille an und lese den genauen Wert ab.", - "advancement.create.aesthetics": "Boom, Ästhetik!", - "advancement.create.aesthetics.desc": "Plaziere Halterungen an Wellen, Rohren und Zahnrädern.", - "advancement.create.reinforced": "Boom, verstärkt!!", - "advancement.create.reinforced.desc": "Verwende passende Rahmen für Wellen, Rohre und Riemen.", - "advancement.create.water_wheel": "Angespannte Hydraulik", - "advancement.create.water_wheel.desc": "Plaziere ein Wasserrad und versuche es zum drehen zu bringen!", - "advancement.create.chocolate_wheel": "Leckere Energie", - "advancement.create.chocolate_wheel.desc": "Lasse ein Wasserad mit geschmolzerner Schokolade laufen.", - "advancement.create.lava_wheel": "Magmarad", - "advancement.create.lava_wheel.desc": "Das sollte nicht funktioniert haben.", - "advancement.create.cuckoo": "Ist es Zeit?", - "advancement.create.cuckoo.desc": "Bekomme mit, wie eine Kuckucksuhr Schlafenszeit ankündigt.", - "advancement.create.millstone": "Taschenmahlstein", - "advancement.create.millstone.desc": "Plaziere und aktiviere einen Mahlstein.", - "advancement.create.windmill": "Eine leichte Brise", - "advancement.create.windmill.desc": "Baue eine Windmühle.", - "advancement.create.maxed_windmill": "Eine starke Briese", - "advancement.create.maxed_windmill.desc": "Baue eine Windmühle mit maximaler stärke.", - "advancement.create.andesite_casing": "Das Andesit Alter", - "advancement.create.andesite_casing.desc": "Verwende Andesite Legierungen und Holz, um einen einfachen Rahmen zu erstellen.", - "advancement.create.mechanical_drill": "Stationäre Brecher", - "advancement.create.mechanical_drill.desc": "Plaziere und treibe einen Mechanischen Bohrer.", - "advancement.create.press": "Presse macht 'Bonk'!", - "advancement.create.press.desc": "Plaziere und treibe eine Mechanische Presse an um Bleche zu erstellen.", - "advancement.create.polished_rose_quartz": "Pinke Diamanten", - "advancement.create.polished_rose_quartz.desc": "Verwende ein Schmiergelpapier um Rosenquarz zu polieren bis er transparent wird.", - "advancement.create.electron_tube": "Piep piep", - "advancement.create.electron_tube.desc": "Mache ein paar Elektronenröhren, nützlich in weniger primitiven Maschienerien.", - "advancement.create.mechanical_saw": "Stationäres Hacken", - "advancement.create.mechanical_saw.desc": "Plaziere und verwende eine Mechanische Säge.", - "advancement.create.basin": "Beckenbetrieb", - "advancement.create.basin.desc": "Stelle ein Behälter auf und versuche Items reinzuwerfen.", - "advancement.create.mixer": "Misch es zusammen", - "advancement.create.mixer.desc": "Plaziere einen mechanischen Mixer über dem Behälter, treibe ihn an und starte mit dem Mixen von Zutaten.", - "advancement.create.blaze_burner": "Ein lebender Kamin", - "advancement.create.blaze_burner.desc": "Bekomme einen Lohenbrenner.", - "advancement.create.compact": "Automatische Verdichtunge", - "advancement.create.compact.desc": "Verwende eine Presse und einen Behälter um ein paar Items zu verdichten.", - "advancement.create.brass": "Tatsächliche Legierungen", - "advancement.create.brass.desc": "Verwende zerkleinertes Kupfererz und zerkleinertes Zinkerz um messing herzustellen.", - "advancement.create.brass_casing": "Das Messingzeitalter", - "advancement.create.brass_casing.desc": "Verwende das neu erhaltene Messing und etwas Holz, um mehr fortgeschrittene Rahmen herzustellen.", - "advancement.create.copper_casing": "Das Kupferzeitalter", - "advancement.create.copper_casing.desc": "Verwende Kupferbleche und Holz, um Kupferrahmen herzustellen.", - "advancement.create.spout": "Platsch", - "advancement.create.spout.desc": "Schaue einem Flüssigkeitsitem zu, wie es von einem Ausguss gefüllt wird.", - "advancement.create.spout_potion": "Globale Brauerei", - "advancement.create.spout_potion.desc": "Schaue einem Ausguss zu, wie er eine Flasche mit einem Trank füllt.", - "advancement.create.chocolate": "Eine Welt der Fantasie", - "advancement.create.chocolate.desc": "Bekomme einen Schokoladeneimer", - "advancement.create.item_drain": "Entwässerung", - "advancement.create.item_drain.desc": "Schaue einem mit Flüssigkeit gefülltem Item zu, wie es in einem Abfluss getrocknet wird.", - "advancement.create.chained_item_drain": "Lass es rollen!", - "advancement.create.chained_item_drain.desc": "Schaue einem Gegenstand zu, wie er über mehrere verbundene Abflüsse rollt.", - "advancement.create.glass_pipe": "Flussspion", - "advancement.create.glass_pipe.desc": "Beobachte durch ein Rohr mit Fenster, wie Flüssigkeiten durch ein Rohr fließen. Gerade Rohre bekommen ein Fenster, wenn du mit einem Schraubenschlüssel auf diese klickst.", - "advancement.create.pipe_collision": "Lass niemals die Ströme kreuzen!", - "advancement.create.pipe_collision.desc": "Schaue zwei Flüssigkeiten zu, wie sie sich in deinen Rohren treffen.", - "advancement.create.pipe_spill": "Da ist ein Leck!", - "advancement.create.pipe_spill.desc": "Schaue eiem offenem Rohrende zu, wie es Flüssigkeiten aufsaugt oder rauslässt.", - "advancement.create.hose_pulley": "Industrielles Verschütten", - "advancement.create.hose_pulley.desc": "Lass eine Umlenkrolle ab und schau ihr zu, wie sie Wasser aufsaugt oder rauslässt.", - "advancement.create.infinite_water": "Die Ozeane entwässern", - "advancement.create.infinite_water.desc": "Pumpe aus einem Gewässer, das groß genug ist, um als unendlich bezeichnet zu werden.", - "advancement.create.infinite_lava": "Den Kern des Planeten aufsaugen", - "advancement.create.infinite_lava.desc": "Pumpe aus einem Lavasee, der groß genug ist, um als unendlich bezeichnet zu werden.", - "advancement.create.infinite_chocolate": "In Fantasie ertrinken", - "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.extendo_grip": "Boioioing!", - "advancement.create.extendo_grip.desc": "Beschaffe einen Extendo Griff.", - "advancement.create.dual_extendo_grip": "Ultimatives Boing-Zeitalter", - "advancement.create.dual_extendo_grip.desc": "Schwinge zwei Extendo Griffe gleichzeitig für eine übermenschliche Reichweite.", - "advancement.create.eob": "Ende der Beta", - "advancement.create.eob.desc": "Erwarte mehr Inhalt in der Zukunft. <3", - - - "_": "->------------------------] UI & Messages [------------------------<-", - - "itemGroup.create.base": "Create", - "itemGroup.create.palettes": "Create Paletten", - - "death.attack.create.crush": "%1$s stolperte in ein Mahlwerk", - "death.attack.create.fan_fire": "%1$s hat heiße Luft eingeatmet", - "death.attack.create.fan_lava": "%1$s wurde von Lava verweht", - "death.attack.create.mechanical_drill": "%1$s wurde von einem Bohrer durchlöchert", - "death.attack.create.mechanical_saw": "%1$s wurde zersägt", - "death.attack.create.cuckoo_clock_explosion": "%1$s wurde durch eine falsche Kuckucksuhr gesprengt", - - "create.block.deployer.damage_source_name": "einem Finger", - "create.block.cart_assembler.invalid": "Platziere deinen Lorenmonteur auf einer Schiene.", - - "create.recipe.crushing": "Mahlen (Mahlwerk)", - "create.recipe.milling": "Mahlen (Mahlstein)", - "create.recipe.fan_washing": "Sammelwaschen", - "create.recipe.fan_washing.fan": "Propeller hinter fließendem Wasser", - "create.recipe.fan_smoking": "Sammelräuchern", - "create.recipe.fan_smoking.fan": "Propeller hinter Feuer", - "create.recipe.fan_blasting": "Sammelschmelzen", - "create.recipe.fan_blasting.fan": "Propeller hinter Lava", - "create.recipe.pressing": "Mechanische Presse", - "create.recipe.mixing": "Mixen", - "create.recipe.automatic_shapeless": "Automatisiertes Formloses Bauen", - "create.recipe.automatic_brewing": "Automatisiertes Brauen", - "create.recipe.packing": "Komprimieren", - "create.recipe.automatic_packing": "Automatisiertes Packen", - "create.recipe.sawing": "Sägen", - "create.recipe.mechanical_crafting": "Mechanisches Bauen", - "create.recipe.automatic_shaped": "Automatisiertes Geformtes Bauen", - "create.recipe.block_cutting": "Schneiden von Blöcken", - "create.recipe.wood_cutting": "Schneiden von Holz", - "create.recipe.blockzapper_upgrade": "Blockpistole", - "create.recipe.sandpaper_polishing": "Schleifen", - "create.recipe.mystery_conversion": "Mysteriöse Konvertierung", - "create.recipe.spout_filling": "Befüllung per Ausguss", - "create.recipe.draining": "Gegenstandsablassung", - "create.recipe.processing.chance": "Chance: %1$s%%", - "create.recipe.heat_requirement.none": "Keine Hitze benötigt", - "create.recipe.heat_requirement.heated": "Wenig Hitze benötigt", - "create.recipe.heat_requirement.superheated": "Viel Hitze benötigt", - - "create.generic.range": "Reichweite", - "create.generic.radius": "Radius", - "create.generic.width": "Breite", - "create.generic.height": "Höhe", - "create.generic.length": "Länge", - "create.generic.speed": "Geschwindigkeit", - "create.generic.delay": "Verzögerung", - "create.generic.unit.ticks": "Ticks", - "create.generic.unit.seconds": "Sekunden", - "create.generic.unit.minutes": "Minuten", - "create.generic.unit.rpm": "RPM", - "create.generic.unit.stress": "su", - "create.generic.unit.degrees": "°", - "create.generic.unit.millibuckets": "%1$smB", - "create.generic.clockwise": "Uhrzeigersinn", - "create.generic.counter_clockwise": "Gegen-Uhrzeigersinn", - - "create.action.scroll": "Wechseln", - "create.action.confirm": "Bestätigen", - "create.action.abort": "Abbrechen", - "create.action.saveToFile": "Speichern", - "create.action.discard": "Löschen", - - "create.keyinfo.toolmenu": "Werkzeugmenü", - "create.keyinfo.scrollup": "Simuliere Mausrad hoch (In der Welt)", - "create.keyinfo.scrolldown": "Simuliere Mausrad runter (In der Welt)", - - "create.gui.scrollInput.defaultTitle": "Wähle eine Option:", - "create.gui.scrollInput.scrollToModify": "Mausrad zum Ändern", - "create.gui.scrollInput.scrollToAdjustAmount": "Mausrad um Betrag anzupassen", - "create.gui.scrollInput.scrollToSelect": "Mausrad zum Auswählen", - "create.gui.scrollInput.shiftScrollsFaster": "Shift zum schnelleren Auswählen", - "create.gui.toolmenu.focusKey": "Halte [%1$s] zum Fokussieren", - "create.gui.toolmenu.cycle": "[Mausrad] zum Wechseln", - "create.gui.symmetryWand.mirrorType": "Spiegeln", - "create.gui.symmetryWand.orientation": "Orientierung", - - "create.symmetry.mirror.plane": "Einfach Spiegeln", - "create.symmetry.mirror.doublePlane": "Rechteckig", - "create.symmetry.mirror.triplePlane": "Achteckig", - - "create.orientation.orthogonal": "Orthogonal", - "create.orientation.diagonal": "Diagonal", - "create.orientation.horizontal": "Horizontal", - "create.orientation.alongZ": "Entlang Z", - "create.orientation.alongX": "Entlang X", - - "create.gui.blockzapper.title": "Blockpistole", - "create.gui.blockzapper.replaceMode": "Austauschmodus", - "create.gui.blockzapper.searchDiagonal": "Diagonalen folgen", - "create.gui.blockzapper.searchFuzzy": "Materialgrenzen ignorieren", - "create.gui.blockzapper.range": "Reichweite", - "create.gui.blockzapper.needsUpgradedAmplifier": "Benötigt besseren Verstärker", - "create.gui.blockzapper.patternSection": "Muster", - "create.gui.blockzapper.pattern.solid": "Fest", - "create.gui.blockzapper.pattern.checkered": "Schachbrett", - "create.gui.blockzapper.pattern.inversecheckered": "Inverses Schachbrett", - "create.gui.blockzapper.pattern.chance25": "25%-Chance", - "create.gui.blockzapper.pattern.chance50": "50%-Chance", - "create.gui.blockzapper.pattern.chance75": "75%-Chance", - "create.gui.terrainzapper.title": "Tragbarer Geländeformer", - "create.gui.terrainzapper.placement": "Platzierung", - "create.gui.terrainzapper.placement.merged": "Zusammengeführt", - "create.gui.terrainzapper.placement.attached": "Angefügt", - "create.gui.terrainzapper.placement.inserted": "Eingefügt", - "create.gui.terrainzapper.brush": "Pinsel", - "create.gui.terrainzapper.brush.cuboid": "Quader", - "create.gui.terrainzapper.brush.sphere": "Kugel", - "create.gui.terrainzapper.brush.cylinder": "Zylinder", - "create.gui.terrainzapper.tool": "Werkzeug", - "create.gui.terrainzapper.tool.fill": "Füllen", - "create.gui.terrainzapper.tool.place": "Platzieren", - "create.gui.terrainzapper.tool.replace": "Ersetzen", - "create.gui.terrainzapper.tool.clear": "Löschen", - "create.gui.terrainzapper.tool.overlay": "Überlagern", - "create.gui.terrainzapper.tool.flatten": "Abflachen", - - "create.terrainzapper.shiftRightClickToSet": "Shift-Rechts-Klick um eine Form auszuwählen", - - "create.blockzapper.usingBlock": "Auswahl: %1$s", - "create.blockzapper.componentUpgrades": "Bauteil-Upgrades:", - "create.blockzapper.component.body": "Rumpf", - "create.blockzapper.component.amplifier": "Verstärker", - "create.blockzapper.component.accelerator": "Beschleuniger", - "create.blockzapper.component.retriever": "Empfänger", - "create.blockzapper.component.scope": "Fernrohr", - "create.blockzapper.componentTier.none": "Nichts", - "create.blockzapper.componentTier.brass": "Messing", - "create.blockzapper.componentTier.chromatic": "Chromatisch", - "create.blockzapper.leftClickToSet": "Linksklick auf einen Block zum Auswählen", - "create.blockzapper.empty": "Keine Blöcke übrig!", - - "create.minecart_coupling.two_couplings_max": "Jede Lore kann nicht mehr als zwei Kupplungen haben", - "create.minecart_coupling.unloaded": "Teile des Zuges scheinen in nicht geladenen Chunks zu sein", - "create.minecart_coupling.no_loops": "Kupplungen können keine Schleife bilden", - "create.minecart_coupling.removed": "Alle Kupplungen wurden von der Lore entfernt", - "create.minecart_coupling.too_far": "Loren sind zu weit entfernt", - - "create.contraptions.movement_mode": "Bewegungsmodus", - "create.contraptions.movement_mode.move_place": "Platziere immer wenn gestoppt", - "create.contraptions.movement_mode.move_place_returned": "Platziere nur in Ausgangsposition", - "create.contraptions.movement_mode.move_never_place": "Platziere nur wenn Anker zerstört", - "create.contraptions.movement_mode.rotate_place": "Platziere immer wenn gestoppt", - "create.contraptions.movement_mode.rotate_place_returned": "Platziere nur nahe des Ausgangswinkels", - "create.contraptions.movement_mode.rotate_never_place": "Platziere nur wenn Anker zerstört", - "create.contraptions.cart_movement_mode": "Loren-Bewegungsmodus", - "create.contraptions.cart_movement_mode.rotate": "Zeige immer in Bewegungsrichtung", - "create.contraptions.cart_movement_mode.rotate_paused": "Pausiere Akteure beim drehen", - "create.contraptions.cart_movement_mode.rotation_locked": "Sperre Rotation", - "create.contraptions.windmill.rotation_direction": "Rotationsrichtung", - "create.contraptions.clockwork.clock_hands": "Uhrzeiger", - "create.contraptions.clockwork.hour_first": "Stundenzeiger zuerst", - "create.contraptions.clockwork.minute_first": "Minutenzeiger zuerst", - "create.contraptions.clockwork.hour_first_24": "24-Stunden-Zeiger zuerst", - - "create.logistics.filter": "Filter", - "create.logistics.recipe_filter": "Rezeptfilter", - "create.logistics.fluid_filter": "Flüssigkeitsfilter", - "create.logistics.firstFrequency": "Freq. #1", - "create.logistics.secondFrequency": "Freq. #2", - "create.logistics.filter.apply": "Filter angewendet auf %1$s.", - "create.logistics.filter.apply_click_again": "Filter angewendet auf %1$s, klicke nochmal um Menge zu kopieren.", - "create.logistics.filter.apply_count": "Extraktionsmenge auf Filter angewendet.", - - "create.gui.goggles.generator_stats": "Generator Statistik:", - "create.gui.goggles.kinetic_stats": "Kinetische Statistik:", - "create.gui.goggles.at_current_speed": "bei derzeitiger Geschwindigkeit", - "create.gui.goggles.pole_length": "Stab Länge:", - "create.gui.goggles.fluid_container": "Flüssigkeitstank Info:", - "create.gui.goggles.fluid_container.capacity": "Kapazität:", - "create.gui.assembly.exception": "Diese Vorrichtung konnte nicht gebaut werden:", - "create.gui.assembly.exception.unmovableBlock": "Unbeweglicher Block (%4$s) bei [%1$s,%2$s,%3$s]", - "create.gui.assembly.exception.chunkNotLoaded": "Der Block bei [%1$s,%2$s,%3$s] war nicht in einem geladenen Chunk", - "create.gui.assembly.exception.structureTooLarge": "In dieser Vorrichtung sind zu viele Blöcke enthalten.\nDas konfigurierte Maximum ist: %1$s", - "create.gui.assembly.exception.tooManyPistonPoles": "Es sind zu viele Pleuelverlängerungen an diesen Kolben angebracht.\nDas konfigurierte Maximum ist: %1$s", - "create.gui.assembly.exception.noPistonPoles": "Dem Kolben fehlen ein paar Pleuelverlängerungen", - "create.gui.assembly.exception.not_enough_sails": "Angebrachte Struktur enthält nicht genug segelähnliche Blöcke: %1$s\nEin Minimum von %2$s ist erforderlich", - "create.gui.gauge.info_header": "Messgerät Information:", - "create.gui.speedometer.title": "Rotationsgeschwindigkeit", - "create.gui.stressometer.title": "Netzwerkbelastung", - "create.gui.stressometer.capacity": "Verbleibende Kapazität", - "create.gui.stressometer.overstressed": "Überbelastet", - "create.gui.stressometer.no_rotation": "Keine Rotation", - "create.gui.contraptions.not_fast_enough": "Wie es scheint dreht sich dieses %1$s _nicht_ _schnell_ _genug_.", - "create.gui.contraptions.network_overstressed": "Wie es scheint ist diese Vorrichtung _überbelastet_. Füge mehr Quellen hinzu oder _verlangsame_ die Komponenten mit hoher _Belastungsauswirkung_.", - "create.gui.adjustable_crate.title": "Lagerraum", - "create.gui.adjustable_crate.storageSpace": "Lagerraum", - "create.gui.stockpile_switch.title": "Vorratssensor", - "create.gui.stockpile_switch.invert_signal": "Invertiere Signal", - "create.gui.stockpile_switch.move_to_lower_at": "Gehe zu unterer Spur bei %1$s%%", - "create.gui.stockpile_switch.move_to_upper_at": "Gehe zu oberer Spur bei %1$s%%", - "create.gui.sequenced_gearshift.title": "Sequenzielle Gangschaltung", - "create.gui.sequenced_gearshift.instruction": "Befehl", - "create.gui.sequenced_gearshift.instruction.turn_angle.descriptive": "Drehe um Winkel", - "create.gui.sequenced_gearshift.instruction.turn_angle": "Drehe", - "create.gui.sequenced_gearshift.instruction.turn_angle.angle": "Winkel", - "create.gui.sequenced_gearshift.instruction.turn_distance.descriptive": "Drehe um Kolben/Seilrolle/Portalkran zu bewegen", - "create.gui.sequenced_gearshift.instruction.turn_distance": "Kolben", - "create.gui.sequenced_gearshift.instruction.turn_distance.distance": "Distanz", - "create.gui.sequenced_gearshift.instruction.delay.descriptive": "Timed Delay", - "create.gui.sequenced_gearshift.instruction.delay": "Verzögerung", - "create.gui.sequenced_gearshift.instruction.delay.duration": "Dauer", - "create.gui.sequenced_gearshift.instruction.end.descriptive": "Beende", - "create.gui.sequenced_gearshift.instruction.end": "Beende", - "create.gui.sequenced_gearshift.instruction.await.descriptive": "Warte auf neues Redstone Signal", - "create.gui.sequenced_gearshift.instruction.await": "Warte", - "create.gui.sequenced_gearshift.speed": "Geschwindigkeit, Richtung", - "create.gui.sequenced_gearshift.speed.forward": "Eingangsgeschwindigkeit, Vorwärts", - "create.gui.sequenced_gearshift.speed.forward_fast": "Doppelte Geschwindigkeit, Vorwärts", - "create.gui.sequenced_gearshift.speed.back": "Eingangsgeschwindigkeit, Umgekehrt", - "create.gui.sequenced_gearshift.speed.back_fast": "Doppelte Geschwindigkeit, Umgekehrt", - - "create.schematicAndQuill.dimensions": "Bauplangröße: %1$sx%2$sx%3$s", - "create.schematicAndQuill.firstPos": "Erste Position festgelegt.", - "create.schematicAndQuill.secondPos": "Zweite Position festgelegt.", - "create.schematicAndQuill.noTarget": "Halte [Strg] zur Auswahl von Luft.", - "create.schematicAndQuill.abort": "Auswahl zurückgesetzt.", - "create.schematicAndQuill.title": "Bauplanname:", - "create.schematicAndQuill.convert": "Speichere und lade sofort hoch", - "create.schematicAndQuill.fallbackName": "Mein Bauplan", - "create.schematicAndQuill.saved": "Gespeichert als %1$s", - - "create.schematic.invalid": "[!] Ungültiger Gegenstand - Benutze einen Bauplantisch.", - "create.schematic.position": "Position", - "create.schematic.rotation": "Rotation", - "create.schematic.rotation.none": "Nein", - "create.schematic.rotation.cw90": "90° im Uhrzeigersinn", - "create.schematic.rotation.cw180": "180° im Uhrzeigersinn", - "create.schematic.rotation.cw270": "270° im Uhrzeigersinn", - "create.schematic.mirror": "Spiegeln", - "create.schematic.mirror.none": "Nein", - "create.schematic.mirror.frontBack": "Vor-Zurück", - "create.schematic.mirror.leftRight": "Links-Rechts", - "create.schematic.tool.deploy": "Positionieren", - "create.schematic.tool.move": "XZ Bewegen", - "create.schematic.tool.movey": "Y Bewegen", - "create.schematic.tool.rotate": "Rotieren", - "create.schematic.tool.print": "Drucken", - "create.schematic.tool.flip": "Umdrehen", - "create.schematic.tool.deploy.description.0": "Bewegt die Struktur an einen anderen ort.", - "create.schematic.tool.deploy.description.1": "Mit Rechtsklick auf den Boden platzieren.", - "create.schematic.tool.deploy.description.2": "[Strg] halten, um in einer bestimmten Entfernung zu arbeiten.", - "create.schematic.tool.deploy.description.3": "[Strg]-Mausrad um die Entfernung zu ändern.", - "create.schematic.tool.move.description.0": "Bewegt das Schema horizontal", - "create.schematic.tool.move.description.1": "Zeig auf das Schema und benutze [Strg]-Mausrad.", - "create.schematic.tool.move.description.2": "", - "create.schematic.tool.move.description.3": "", - "create.schematic.tool.movey.description.0": "Bewegt das Schema vertikal", - "create.schematic.tool.movey.description.1": "[Strg]-Mausrad zum hoch- und runterbewegen", - "create.schematic.tool.movey.description.2": "", - "create.schematic.tool.movey.description.3": "", - "create.schematic.tool.flip.description.0": "Kehrt das Schema entlang der ausgewählten Oberfläche um.", - "create.schematic.tool.flip.description.1": "Zeige auf das Schema und benutze [Strg]-Mausrad.", - "create.schematic.tool.flip.description.2": "", - "create.schematic.tool.flip.description.3": "", - "create.schematic.tool.rotate.description.0": "Rotiert das Schema um seine Mitte.", - "create.schematic.tool.rotate.description.1": "[Strg]-Mausrad für eine Drehung um 90°", - "create.schematic.tool.rotate.description.2": "", - "create.schematic.tool.rotate.description.3": "", - "create.schematic.tool.print.description.0": "Platziert sofort die Struktur in der Welt", - "create.schematic.tool.print.description.1": "[Rechtsklick] zum Bestätigen der Platzierung an der aktuellen Position.", - "create.schematic.tool.print.description.2": "Dieses Werkzeug ist nur für den Kreativ-Modus.", - "create.schematic.tool.print.description.3": "", - - "create.schematics.synchronizing": "Synchronisation...", - "create.schematics.uploadTooLarge": "Dein Bauplan ist zu groß.", - "create.schematics.maxAllowedSize": "Die maximale Bauplan-Dateigröße ist:", - - "create.gui.schematicTable.refresh": "Aktualisiere Dateien", - "create.gui.schematicTable.open_folder": "Öffne Ordner", - "create.gui.schematicTable.title": "Bauplantisch", - "create.gui.schematicTable.availableSchematics": "Verfügbare Baupläne", - "create.gui.schematicTable.noSchematics": "Keine gespeicherten Baupläne", - "create.gui.schematicTable.uploading": "Hochladen...", - "create.gui.schematicTable.finished": "Hochgeladen!", - "create.gui.schematicannon.title": "Bauplankanone", - "create.gui.schematicannon.listPrinter": "Materiallistendruck", - "create.gui.schematicannon.gunpowderLevel": "Schwarzpulver bei %1$s%%", - "create.gui.schematicannon.shotsRemaining": "%1$s Schuss übrig", - "create.gui.schematicannon.shotsRemainingWithBackup": "Mit Reserve: %1$s", - "create.gui.schematicannon.optionEnabled": "Aktiviert", - "create.gui.schematicannon.optionDisabled": "Deaktiviert", - "create.gui.schematicannon.showOptions": "Zeige Drucker Einstellungen", - "create.gui.schematicannon.option.dontReplaceSolid": "Feste Blöcke nicht ersetzen", - "create.gui.schematicannon.option.replaceWithSolid": "Feste Blöcke mit festen ersetzen", - "create.gui.schematicannon.option.replaceWithAny": "Feste Blöcke immer ersetzen", - "create.gui.schematicannon.option.replaceWithEmpty": "Feste Blöcke mit Leere ersetzen", - "create.gui.schematicannon.option.skipMissing": "Fehlende Blöcke ignorieren", - "create.gui.schematicannon.option.skipTileEntities": "Tile Entities ignorieren", - "create.gui.schematicannon.slot.gunpowder": "Füge Schwarzpulver hinzu um die Kanone zu betreiben", - "create.gui.schematicannon.slot.listPrinter": "Platziere hier Bücher um eine Checkliste für deinen Bauplan zu drucken", - "create.gui.schematicannon.slot.schematic": "Füge Bauplan hier hinzu. Stelle sicher dass er an einer spezifischen Position bereitgestellt wird.", - "create.gui.schematicannon.option.skipMissing.description": "Wenn die Bauplankanone einen benötigten Block nicht finden kann, wird sie einfach beim nächsten weiter machen.", - "create.gui.schematicannon.option.skipTileEntities.description": "Die Bauplankanone wird versuchen, Blöcke mit extra Daten, beispielsweise Truhen, nicht zu ersetzen.", - "create.gui.schematicannon.option.dontReplaceSolid.description": "Die Kanone wird ausschließlich nicht feste Blöcke und Luft in ihrem Arbeitsbereich ersetzen.", - "create.gui.schematicannon.option.replaceWithSolid.description": "Die Kanone wird feste Blöcke nur dann ersetzen, wenn an der Position vorher bereits ein fester Block war.", - "create.gui.schematicannon.option.replaceWithAny.description": "Die Kanone wird feste Blöcke ersetzen, wenn der Bauplan an der Position einen Block enthält.", - "create.gui.schematicannon.option.replaceWithEmpty.description": "Die Kanone wird alle Blöcke im Arbeitsbereich entfernen.", - - "create.schematicannon.status.idle": "Aus", - "create.schematicannon.status.ready": "Bereit", - "create.schematicannon.status.running": "An", - "create.schematicannon.status.schematicInvalid": "Bauplan ungültig", - "create.schematicannon.status.schematicNotPlaced": "Bauplan nicht positioniert", - "create.schematicannon.status.schematicExpired": "Bauplandatei abgelaufen", - "create.schematicannon.status.finished": "Fertig", - "create.schematicannon.status.paused": "Pausiert", - "create.schematicannon.status.stopped": "Gestoppt", - "create.schematicannon.status.noGunpowder": "Schwarzpulver leer", - "create.schematicannon.status.targetNotLoaded": "Kein Block geladen", - "create.schematicannon.status.targetOutsideRange": "Ziel zu weit weg", - "create.schematicannon.status.searching": "Suchen", - "create.schematicannon.status.skipping": "Überspringen", - "create.schematicannon.status.missingBlock": "Fehlender Block:", - "create.schematicannon.status.placing": "Platzieren", - - "create.materialChecklist": "Material Checkliste", - "create.materialChecklist.blocksNotLoaded": "* Haftungsausschluss *\n\nMaterialliste könnte inakkurat seit da es möglich ist dass releveante Chunks nicht geladen sind.", - - "create.gui.filter.deny_list": "Verweigert-Liste", - "create.gui.filter.deny_list.description": "Gegenstände werden nur weitergegeben wenn sie NICHT mit einem der oben genannten übereinstimmen. Eine leere Verweigert-Liste akzeptiert alles.", - "create.gui.filter.allow_list": "Erlaubt-Liste", - "create.gui.filter.allow_list.description": "Gegenstände werden nur weitergegeben wenn sie mit einem der oben genannten übereinstimmen. Eine leere Erlaubt-Liste lehnt alles ab.", - "create.gui.filter.respect_data": "Respektiere Daten", - "create.gui.filter.respect_data.description": "Gegenstände stimmen nur überein wenn ihre Haltbarkeit, Verzauberungen, und andere Attribute ebenfalls passen.", - "create.gui.filter.ignore_data": "Ignoriere Daten", - "create.gui.filter.ignore_data.description": "Gegenstände stimmen unabhängig ihrer Attribute überein.", - - "create.item_attributes.placeable": "ist plazierbar", - "create.item_attributes.placeable.inverted": "ist nicht plazierbar", - "create.item_attributes.consumable": "kann man essen", - "create.item_attributes.consumable.inverted": "kann man nicht essen", - "create.item_attributes.smeltable": "kann geschmolzen werden", - "create.item_attributes.smeltable.inverted": "kann nicht geschmolzen werden", - "create.item_attributes.washable": "kann gewaschen werden", - "create.item_attributes.washable.inverted": "kann nicht gewaschen werden", - "create.item_attributes.smokable": "kann geräuchert werden", - "create.item_attributes.smokable.inverted": "kann nicht geräuchert werden", - "create.item_attributes.crushable": "kann zerkleinert werden", - "create.item_attributes.crushable.inverted": "kann nicht zerkleinert werden", - "create.item_attributes.blastable": "ist im Schmelzofen schmelzbar", - "create.item_attributes.blastable.inverted": "ist nicht im Schmelzofen schmelzbar", - "create.item_attributes.enchanted": "ist verzaubert", - "create.item_attributes.enchanted.inverted": "ist nicht verzaubert", - "create.item_attributes.damaged": "ist beschädigt", - "create.item_attributes.damaged.inverted": "ist nicht beschädigt", - "create.item_attributes.badly_damaged": "ist stark beschädigt", - "create.item_attributes.badly_damaged.inverted": "ist nicht stark beschädigt", - "create.item_attributes.not_stackable": "kann nicht gestapelt werden", - "create.item_attributes.not_stackable.inverted": "kann gestapelt werden", - "create.item_attributes.equipable": "kann ausgerüstet werden", - "create.item_attributes.equipable.inverted": "kann nicht ausgerüstet werden", - "create.item_attributes.furnace_fuel": "ist Brennstoff", - "create.item_attributes.furnace_fuel.inverted": "ist nicht Brennstoff", - "create.item_attributes.in_tag": "ist mit %1$s makiert", - "create.item_attributes.in_tag.inverted": "ist nicht mit %1$s markoiert", - "create.item_attributes.in_item_group": "ist in der Gruppe '%1$s'", - "create.item_attributes.in_item_group.inverted": "ist nicht in der Gruppe '%1$s'", - "create.item_attributes.added_by": "wurde von %1$s hinzugefügt", - "create.item_attributes.added_by.inverted": "wurde nicht von %1$s hinzugefügt", - "create.item_attributes.has_enchant": "ist mit %1$s verzaubert", - "create.item_attributes.has_enchant.inverted": "ist nicht mit %1$s verzaubert", - "create.item_attributes.color": "ist %1$s gefärbt", - "create.item_attributes.color.inverted": "ist nicht %1$s gefärbt", - "create.item_attributes.max_enchanted": "ist mit dem maximalen Level verzaubert", - "create.item_attributes.max_enchanted.inverted": "ist nicht mit dem maximalen Level verzaubert", - "create.item_attributes.has_fluid": "enthält %1$s", - "create.item_attributes.has_fluid.inverted": "enthält nicht %1$s", - "create.item_attributes.has_name": "hat den Benutzerdefinierten Namen %1$s", - "create.item_attributes.has_name.inverted": "hat nicht den benutzerdefinierten Namen %1$s", - "create.item_attributes.book_author": "wurde verfasst von %1$s", - "create.item_attributes.book_author.inverted": "wurde nicht von %1$s verfasst", - "create.item_attributes.book_copy_original": "ist ein Original", - "create.item_attributes.book_copy_original.inverted": "ist kein Original", - "create.item_attributes.book_copy_first": "ist die erste Kopie", - "create.item_attributes.book_copy_first.inverted": "ist nicht die erste Kopie", - "create.item_attributes.book_copy_second": "ist die zweite Kopie", - "create.item_attributes.book_copy_second.inverted": "ist nicht die Zweite Kopie", - "create.item_attributes.book_copy_tattered": "ist ein zerfetztes Durcheinander", - "create.item_attributes.book_copy_tattered.inverted": "sit kein zerfetztes Durcheinander", - "create.item_attributes.astralsorcery_crystal": "hat das Kristallattribut %1$s", - "create.item_attributes.astralsorcery_crystal.inverted": "hat nicht das Kristallattribut %1$s", - "create.item_attributes.astralsorcery_constellation": "ist abgestimmt auf %1$s", - "create.item_attributes.astralsorcery_constellation.inverted": "ist nicht abgestimmt auf %1$s", - "create.item_attributes.astralsorcery_perk_gem": "hat das Vorteilsattribut %1$s", - "create.item_attributes.astralsorcery_perk_gem.inverted": "hat nicht das Vorteilsattribut %1$s", - "create.item_attributes.astralsorcery_amulet": "verbessert %1$s", - "create.item_attributes.astralsorcery_amulet.inverted": "verbessert nicht %1$s", - - "create.gui.attribute_filter.no_selected_attributes": "Keine Attribute ausgewählt", - "create.gui.attribute_filter.selected_attributes": "Ausgewählte Attribute:", - "create.gui.attribute_filter.add_attribute": "Füge Attribut zur Liste hinzu", - "create.gui.attribute_filter.add_inverted_attribute": "Füge gegenteiliges Attribut zur Liste hinzu", - "create.gui.attribute_filter.allow_list_disjunctive": "Erlaubt-Liste (Irgendeins)", - "create.gui.attribute_filter.allow_list_disjunctive.description": "Gegenstände werden weitergereicht wenn sie irgendeins der ausgewählten Attribute haben.", - "create.gui.attribute_filter.allow_list_conjunctive": "Erlaubt-Liste (Alle)", - "create.gui.attribute_filter.allow_list_conjunctive.description": "Gegenstände werden nur weitergereicht wenn sie ALLE der ausgewählten Attribute haben.", - "create.gui.attribute_filter.deny_list": "Verweigert-Liste", - "create.gui.attribute_filter.deny_list.description": "Gegenstände werden nur weitergereicht wenn sie KEINES der ausgewählten Attribute haben.", - "create.gui.attribute_filter.add_reference_item": "Füge Referenz-Gegenstand hinzu", - - "create.tooltip.holdForDescription": "Halte [%1$s] für eine Zusammenfassung", - "create.tooltip.holdForControls": "Halte [%1$s] für die Steuerung", - "create.tooltip.holdKey": "Halte [%1$s]", - "create.tooltip.holdKeyOrKey": "Halte [%1$s] oder [%2$s]", - "create.tooltip.keyShift": "Shift", - "create.tooltip.keyCtrl": "Strg", - "create.tooltip.speedRequirement": "Geschwindigkeitsanforderung: %1$s", - "create.tooltip.speedRequirement.none": "Keine", - "create.tooltip.speedRequirement.medium": "Moderat", - "create.tooltip.speedRequirement.fast": "Schnell", - "create.tooltip.stressImpact": "Kinetische Belastungsauswirkung: %1$s", - "create.tooltip.stressImpact.low": "Niedrig", - "create.tooltip.stressImpact.medium": "Moderat", - "create.tooltip.stressImpact.high": "Hoch", - "create.tooltip.stressImpact.overstressed": "Überbelastet", - "create.tooltip.capacityProvided": "Kinetische Belastungskapazität: %1$s", - "create.tooltip.capacityProvided.low": "Niedrig", - "create.tooltip.capacityProvided.medium": "Mittel", - "create.tooltip.capacityProvided.high": "Groß", - "create.tooltip.generationSpeed": "Generiert mit %1$s %2$s", - "create.tooltip.analogStrength": "Analoge Stärke: %1$s/15", - - "create.mechanical_arm.extract_from": "Nehme Gegenstände von %1$s", - "create.mechanical_arm.deposit_to": "Lege Gegenstände in %1$s", - "create.mechanical_arm.summary": "Mechanischer Arm hat %1$s Eingabe(n) und %2$s Ausgabe(n).", - "create.mechanical_arm.points_outside_range": "%1$s ausgewählte(r) Interaktionspunkt(e) entfernt aufgrund Reichweitenlimitierungen.", - - "create.weighted_ejector.target_set": "Ziel ausgewählt", - "create.weighted_ejector.target_not_valid": "Werfe auf angrenzenden Block (Ziel war nicht gültig)", - "create.weighted_ejector.no_target": "Werfe auf angrenzenden Block (Kein Ziel war ausgewählt)", - "create.weighted_ejector.targeting": "Werfe nach [%1$s,%2$s,%3$s]", - "create.weighted_ejector.stack_size": "Geworfene Stapelgröße", - - "create.logistics.when_multiple_outputs_available": "Wenn mehrere Ausgaben verfügbar sind", - - "create.mechanical_arm.selection_mode.round_robin": "Round Robin", - "create.mechanical_arm.selection_mode.forced_round_robin": "Gezwungener Round Robin", - "create.mechanical_arm.selection_mode.prefer_first": "Bevorzuge erstes Ziel", - - "create.tunnel.selection_mode.split": "Aufteilung", - "create.tunnel.selection_mode.forced_split": "Gezwungene Aufteilung", - "create.tunnel.selection_mode.round_robin": "Round Robin", - "create.tunnel.selection_mode.forced_round_robin": "Gezwungener Round Robin", - "create.tunnel.selection_mode.prefer_nearest": "Bevorzuge Naheliegensten", - "create.tunnel.selection_mode.randomize": "Zufällig", - "create.tunnel.selection_mode.synchronize": "Synchronisiere Eingaben", - - "create.tooltip.chute.header": "Rinnen Information", - "create.tooltip.chute.items_move_down": "Gegenstände bewegen sich nach unten", - "create.tooltip.chute.items_move_up": "Gegenstände bewegen sich nach oben", - "create.tooltip.chute.no_fans_attached": "Keine angeschlossenen Propeller", - "create.tooltip.chute.fans_push_up": "Propeller schieben von unterhalb", - "create.tooltip.chute.fans_push_down": "Propeller schieben von oberhalb", - "create.tooltip.chute.fans_pull_up": "Propeller ziehen von oberhalb", - "create.tooltip.chute.fans_pull_down": "Propeller ziehen von unterhalb", - "create.tooltip.chute.contains": "Enthält: %1$s x%2$s", - - "create.hint.hose_pulley.title": "Endlose Versorgung", - "create.hint.hose_pulley": "Das angewählte Gewässer wird als unendlich betrachtet.", - "create.hint.mechanical_arm_no_targets.title": "Keine Ziele", - "create.hint.mechanical_arm_no_targets": "Es schein dieser _Mechanische_ _Arm_ hat keine _Ziele_. Wähle Riemen, Depots oder Trichter und andere Blöcke indem du sie _Rechts-Klickst_ während du den _Mechanischen_ _Arm_ in deiner _Hand_ _hälst_.", - "create.hint.empty_bearing.title": "Aktualisiere Lager", - "create.hint.empty_bearing": "_Rechts-Klicke_ das Lager mit einer _leeren_ _Hand_ um die Struktur die du davor gebaut hast _anzubringen_.", - "create.hint.full_deployer.title": "Einsatzgerät Gegenstand Überlauf", - "create.hint.full_deployer": "Es scheint, dieses _Einsatzgerät_ enthält _überflüssige_ _Gegenstände_ die _extrahiert_ werden müssen. Nutze _Trichter_ oder anderes um ihn von seinem Überfluss zu befreien.", - - "create.gui.config.overlay1": "Hi :)", - "create.gui.config.overlay2": "Dies ist ein Beispiel Overlay", - "create.gui.config.overlay3": "Klicke oder ziehe mit deiner Maus", - "create.gui.config.overlay4": "um diese Vorschau zu bewegen", - "create.gui.config.overlay5": "Drücke ESC um diesen Bildschirm zu verlassen", - "create.gui.config.overlay6": "und die neue Position zu speichern", - "create.gui.config.overlay7": "Benutze /create overlay reset", - "create.gui.config.overlay8": "um die Standardposition zurückzusetzen", - - "create.command.killTPSCommand": "killtps", - "create.command.killTPSCommand.status.slowed_by.0": "[Create]: Server Tick ist derzeitig um %s ms verlangsamt :o", - "create.command.killTPSCommand.status.slowed_by.1": "[Create]: Server Tick ist jetzt um %s ms verlangsamt >:)", - "create.command.killTPSCommand.status.slowed_by.2": "[Create]: Server Tick ist jetzt wieder auf normaler Geschwindigkeit :D", - "create.command.killTPSCommand.status.usage.0": "[Create]: Benutze /killtps stop um den Server Tick wieder auf normale Geschwindigkeit zu bringen", - "create.command.killTPSCommand.status.usage.1": "[Create]: Benutze /killtps start um den Server Tick künstlich zu verlangsamen", - "create.command.killTPSCommand.argument.tickTime": "tickTime", - - "create.subtitle.schematicannon_launch_block": "Bauplankanone schießt", - "create.subtitle.schematicannon_finish": "Bauplankanone endet", - "create.subtitle.slime_added": "Schleim matscht", - "create.subtitle.mechanical_press_activation": "Mechanische Presse wird aktiviert", - "create.subtitle.mechanical_press_item_break": "Metall klonkt", - "create.subtitle.blockzapper_place": "Blöcke zappen an Ort und Stelle", - "create.subtitle.blockzapper_confirm": "Bestätigendes Ding", - "create.subtitle.blockzapper_deny": "Ablehnendes Boop", - "create.subtitle.block_funnel_eat": "Trichter MAMPFT", - "create.subtitle.blaze_munch": "Lohe kaut glücklich", - - - "_": "->------------------------] Item Descriptions [------------------------<-", - - "item.create.example_item.tooltip": "BEISPIELGEGENSTAND (nur ein Marker, um zu zeigen, dass dieser Tooltip existiert)", - "item.create.example_item.tooltip.summary": "Eine Kurzbeschreibung eines Gegenstands. _Unterstriche_ heben einen Begriff hervor.", - "item.create.example_item.tooltip.condition1": "Wenn dies", - "item.create.example_item.tooltip.control1": "Wenn Strg gedrückt ist", - "item.create.example_item.tooltip.action1": "wird diese Steuerung gezeigt.", - "item.create.example_item.tooltip.behaviour1": "dann tut dieser Gegenstand das. (Verhalten wird mit der Shift-Taste angezeigt)", - "item.create.example_item.tooltip.condition2": "Und wenn dies", - "item.create.example_item.tooltip.behaviour2": "kannst du so viele Verhaltensweisen hinzufügen wie du magst", - - "block.create.wooden_bracket.tooltip": "Holzhalterung", - "block.create.wooden_bracket.tooltip.summary": "_Verziere_ deine _Wellen_, _Zahnräder_ und _Rohre_ mit einem gemütlichem und hölzernem Stück Verstärkung.", - - "block.create.metal_bracket.tooltip": "Metallhalterung", - "block.create.metal_bracket.tooltip.summary": "_Verziere_ deine _Wellen_, _Zahnräder_ und _Rohre_ mit einem industriellem und robustem Stück Verstärkung.", - - "block.create.copper_casing.tooltip": "Kupferrahmen", - "block.create.copper_casing.tooltip.summary": "Robustes Maschinengehäuse mit vielfältigen Einsatzmöglichkeiten. Sicher für die Dekoration.", - "block.create.copper_casing.tooltip.condition1": "Wenn auf ein Flüssigkeitsrohr geklickt", - "block.create.copper_casing.tooltip.behaviour1": "_Ummantelt_ das Flüssigkeitsrohr mit dem _Kupferrahmen_. Ummantelte Flüssigkeitsleitungen _verändern ihre Verbindungen nicht mehr_.", - - "block.create.encased_fluid_pipe.tooltip": "Ummantelte Flüssigkeitsleitung", - "block.create.encased_fluid_pipe.tooltip.summary": "Ein _Flüssigkeitsrohr_ mir einem _Kupferrahmen_ ummantelt.", - - "block.create.seat.tooltip": "Sitz", - "block.create.seat.tooltip.summary": "Setz dich hin und genieße die Fahrt! Der Sitz verankert den Spieler an einem sich bewegendem Apparat. Hervorragend auch für statische Möbel! Kommt in verschiedensten Farben.", - "block.create.seat.tooltip.condition1": "Rechtsklick auf den Sitz", - "block.create.seat.tooltip.behaviour1": "Setzt den Spieler auf den _Sitz_. Drücke L-Shift, um den _Sitz_ wieder zu verlassen.", - - "item.create.blaze_cake.tooltip": "Lohenkuchen", - "item.create.blaze_cake.tooltip.summary": "Ein leckeres Vergnügen für deine hart arbeitenden _Lohenbrenner_. Feuert die alle an!", - - "block.create.fluid_pipe.tooltip": "Flüssigkeitsrohr", - "block.create.fluid_pipe.tooltip.summary": "Wird zum herumbewegen von _Flüssigkeiten_ verwendet. Benötigt eine _Mechanische Pumpe_ um die _Flüssigkeiten_ zu bewegen.", - "block.create.fluid_pipe.tooltip.condition1": "Flüssigkeitstransport", - "block.create.fluid_pipe.tooltip.behaviour1": "Verbindet sich zu _Flüssigkeitspeichern_ wie _Tanks_ oder _Behältern_. Offene _Rohrenden_ können auch Flüssigkeitsblöcke platzieren oder die Flüssigkeit auslaufen lassen. Achte auf Lecks!", - "block.create.fluid_pipe.tooltip.condition2": "Rechtsklick mit dem Schraubenschlüssel", - "block.create.fluid_pipe.tooltip.behaviour2": "Plaziert, wenn möglich, ein Fenster in dem Rohr.", - - "block.create.hose_pulley.tooltip": "Umlenkrolle", - - "block.create.fluid_tank.tooltip": "Flüssigkeitstank", - "block.create.fluid_tank.tooltip.summary": "_Speichert_ alle deine geliebten _Flüssigkeiten_. Wächst in Höhe und Breite.", - "block.create.fluid_tank.tooltip.condition1": "Rechtsklick mit dem Schraubenschlüssel", - "block.create.fluid_tank.tooltip.behaviour1": "Ändert das optionale Fenster", - - "block.create.creative_fluid_tank.tooltip": "Kreativer Flüssigkeitstank", - "block.create.creative_fluid_tank.tooltip.summary": "Dieser _Flüssigkeitstank_ erlaubt unendliches reproduzieren von jeder _Flüssigkeit_.", - "block.create.creative_fluid_tank.tooltip.condition1": "Wenn eine Flüssigkeit im Tank ist", - "block.create.creative_fluid_tank.tooltip.behaviour1": "Jedes herausnehmen aus diesem Tank stellt eine _unendliche Versorgung_ der ausgewählten _Flüssigkeit_ bereit. Flüssigkeite, die in diesen Tank _eingefüllt_ werden, werden _zerstört_.", - "block.create.creative_fluid_tank.tooltip.condition2": "Rechtsklick mit dem Schraubenschlüssel", - "block.create.creative_fluid_tank.tooltip.behaviour2": "Ändert das optionale Fenster", - - "block.create.fluid_valve.tooltip": "Flüssigkeitsventil", - "block.create.fluid_valve.tooltip.summary": "Stoppt den Flüssigkeitsfluss durch ein Rohr.", - "block.create.fluid_valve.tooltip.condition1": "Kontrollierbarer Fluss", - "block.create.fluid_valve.tooltip.behaviour1": "_Rotationskraft_, die aufgebracht wird, schließt _Ventil_ und stoppt den Fluss von _Flüssigkeiten_. Kehre die _Rotationskraft_ um, um das _Ventiel_ wieder zu öffnen.", - - "block.create.mechanical_pump.tooltip": "Mechanische Pumpe", - "block.create.mechanical_pump.tooltip.summary": "Nimmt _Rotationskraft_ und verwendet diese um _Flüssigkeiten_ in einem _Rohr_ zu bewegen. Hat eine maximale Reichweite in beide Richtungen. (Standardmäßig 16 Blöcke)", - "block.create.mechanical_pump.tooltip.condition1": "Flüssigkeitsfluss", - "block.create.mechanical_pump.tooltip.behaviour1": "Angewandte _Rotationskraft_ erzeugt Druck, der die _Flüssigkeit_ durch das _Rohrnetzwerk_ zwingt. Kehre die _Rotationskraft_ um, um die Richtung zu ändern, in der die _Flüssigkeit_ fließt.", - "block.create.mechanical_pump.tooltip.control1": "Rechtsklick mit dem Schraubenschlüssel", - "block.create.mechanical_pump.tooltip.action1": "Dreht die Richtung der _Pumpe_, schaltet die Standardflussrichtung um.", - - "block.create.smart_fluid_pipe.tooltip": "Schlaues Flüssigkeitsrohr", - - "block.create.spout.tooltip": "Ausguss", - - "item.create.wand_of_symmetry.tooltip": "SYMMETRIESTAB", - "item.create.wand_of_symmetry.tooltip.summary": "Spiegelt deine Blockplatzierung perfekt über die konfigurierten Ebenen.", - "item.create.wand_of_symmetry.tooltip.condition1": "Wenn in der Schnellleiste", - - "item.create.wand_of_symmetry.tooltip.behaviour1": "Bleibt aktiv", - "item.create.wand_of_symmetry.tooltip.control1": "R-Klick auf Boden", - "item.create.wand_of_symmetry.tooltip.action1": "_Erstellt_ oder _Bewegt_ den Spiegel", - "item.create.wand_of_symmetry.tooltip.control2": "R-Klick in die Luft", - "item.create.wand_of_symmetry.tooltip.action2": "_Löscht_ den aktiven Spiegel", - "item.create.wand_of_symmetry.tooltip.control3": "R-Klick beim Schleichen", - "item.create.wand_of_symmetry.tooltip.action3": "Öffnet das _Konfigurationsmenü_", - - "item.create.handheld_blockzapper.tooltip": "BLOCKPISTOLE", - "item.create.handheld_blockzapper.tooltip.summary": "Ermöglicht das Platzieren und Austauschen von Blöcken aus großer Entfernung.", - "item.create.handheld_blockzapper.tooltip.control1": "L-Klick auf Block", - "item.create.handheld_blockzapper.tooltip.action1": "Legt die von dem Werkzeug platzierten Blöcke auf den angeschauten Block fest.", - "item.create.handheld_blockzapper.tooltip.control2": "R-Klick auf Block", - "item.create.handheld_blockzapper.tooltip.action2": "_Platziert_ oder _Ersetzt_ den ausgewählten Block.", - "item.create.handheld_blockzapper.tooltip.control3": "R-Klick beim Schleichen", - "item.create.handheld_blockzapper.tooltip.action3": "Öffnet das _Konfigurationsmenü_", - - "item.create.tree_fertilizer.tooltip": "BAUMDÜNGER", - "item.create.tree_fertilizer.tooltip.summary": "Eine Mischung aus Mineralien, die sich für weit verbreitete Baumarten eignet", - - "item.create.tree_fertilizer.tooltip.condition1": "Wenn auf einen Setzling angewendet", - "item.create.tree_fertilizer.tooltip.behaviour1": "Lässt Bäume unabhängig vom Platz um sie herum wachsen", - - "item.create.deforester.tooltip": "Entforster", - - "item.create.extendo_grip.tooltip": "Extendo Griff", - - "item.create.filter.tooltip": "Filter", - - "item.create.attribute_filter.tooltip": "Attribut Filter", - - "item.create.empty_schematic.tooltip": "LEERER BAUPLAN", - "item.create.empty_schematic.tooltip.summary": "Wird für die Herstellung und das Schreiben auf dem _Bauplantisch_ verwendet", - - "item.create.schematic.tooltip": "BAUPLAN", - "item.create.schematic.tooltip.summary": "Beschreibt eine Struktur, die in der Welt platziert werden kann. Positioniere das Hologramm wie gewünscht und verwende eine _Bauplankanone_, um die Struktur zu bauen.", - "item.create.schematic.tooltip.condition1": "Wenn gehalten", - "item.create.schematic.tooltip.behaviour1": "Kann mit den Werkzeugen auf dem Bildschirm positioniert werden", - "item.create.schematic.tooltip.control1": "R-Klick beim Schleichen", - "item.create.schematic.tooltip.action1": "Öffnet ein Menü zur Eingabe exakter _Koordinaten_.", - - "item.create.schematic_and_quill.tooltip": "BAUPLAN UND FEDER", - "item.create.schematic_and_quill.tooltip.summary": "Wird benutzt, um eine existierende Struktur in der Welt als eine .nbt-Datei zu speichern.", - "item.create.schematic_and_quill.tooltip.condition1": "Schritt 1", - "item.create.schematic_and_quill.tooltip.behaviour1": "Wähle zwei Eckpunkte mit R-Klick aus", - "item.create.schematic_and_quill.tooltip.condition2": "Schritt 2", - "item.create.schematic_and_quill.tooltip.behaviour2": "Auf den Oberflächen _Strg-Scrollen_ um die Größe zu verändern. Nochmals R-Klick um zu speichern.", - "item.create.schematic_and_quill.tooltip.control1": "R-Klick", - "item.create.schematic_and_quill.tooltip.action1": "Einen Eckpunkt auswählen / Speichern bestätigen", - "item.create.schematic_and_quill.tooltip.control2": "Strg gedrückt halten", - "item.create.schematic_and_quill.tooltip.action2": "Wählt Punkte _mitten_ _in_ _der_ _Luft._ _Scrolle,_ um die Distanz anzupassen.", - - "item.create.schematic_and_quill.tooltip.control3": "R-Klick beim Schleichen", - "item.create.schematic_and_quill.tooltip.action3": "_Setzt_ die Auswahl _zurück_ und löscht sie.", - - "block.create.schematicannon.tooltip": "BAUPLANKANONE", - "block.create.schematicannon.tooltip.summary": "Schießt Blöcke, um eine Struktur nach einem positionierten _Bauplan_ zu errichten. Benutzt Gegenstände aus benachbarten Inventaren und _Schießpulver_ als Treibstoff.", - "block.create.schematicannon.tooltip.condition1": "Wenn gerechtsklickt", - "block.create.schematicannon.tooltip.behaviour1": "Öffnet das _Interface_", - - "block.create.schematicannon.tooltip.control1": "Wenn R-Geklickt", - "block.create.schematicannon.tooltip.action1": "Öffnet das _Menü_", - - "block.create.schematic_table.tooltip": "BAUPLANTISCH", - "block.create.schematic_table.tooltip.summary": "Schreibt gespeicherte Baupläne auf einen _Leeren_ _Bauplan_", - "block.create.schematic_table.tooltip.condition1": "Wenn ein Leerer Bauplan bereitgestellt wird", - "block.create.schematic_table.tooltip.behaviour1": "Lädt eine ausgewählte Datei von deinem Bauplan-Ordner hoch", - - "item.create.goggles.tooltip": "Ingenieursbrille", - - "block.create.turntable.tooltip": "DREHTISCH", - "block.create.turntable.tooltip.summary": "Wandelt _Rotationsenergie_ in starkes Schwindelgefühl um.", - - "block.create.stockpile_switch.tooltip": "VORRATSSENSOR", - "block.create.stockpile_switch.tooltip.summary": "Schaltet ein Redstone-Signal ein oder aus, basierend auf der _Speichermenge_ im verbundenen Behälter.", - "block.create.adjustable_crate.tooltip.control1": "Wenn R-geklickt", - "block.create.adjustable_crate.tooltip.action1": "Öffnet das _Menü_", - "block.create.stockpile_switch.tooltip.condition1": "Wenn unter dem unteren Limit", - "block.create.stockpile_switch.tooltip.behaviour1": "Wird das Redstone-Signal ausgeschaltet.", - - "block.create.adjustable_crate.tooltip": "LAGERRAUM", - "block.create.adjustable_crate.tooltip.summary": "Dieser _Speicherbehälter_ erlaubt manuelle Kontrolle über seine Kapazität. Er kann bis zu _16_ _Stacks_ von jeglichem Gegenstand beinhalten.", - "block.create.creative_crate.tooltip": "BAUPLANKANONENMACHER", - "block.create.creative_crate.tooltip.summary": "Stellt einen unendlichen Vorrat an Blöcken für benachbarte _Bauplaenkanonen_ bereit.", - "block.create.creative_crate.tooltip.condition1": "Wenn Gegenstand in Filter Slot", - "block.create.creative_crate.tooltip.behaviour1": "Alles _extrahierende_ von diesem Container wird einen _endlosen Vorrat_ des angegebenen Gegenstands zur Verfügung stellen. In diese Kiste _eingefügte_ Gegenstände werden _entsorgt_.", - - "create.tooltip.wip": "WIP", - "create.tooltip.workInProgress": "Work in progress!", - "create.tooltip.randomWipDescription0": "Bitte halte dies fern von Kindern", - "create.tooltip.randomWipDescription1": "Ein Babypanda stirbt jedes mal wenn du diesen Gegenstand benutzt. Jedes. Mal.", - "create.tooltip.randomWipDescription2": "Benutzung auf eigene Gefahr.", - "create.tooltip.randomWipDescription3": "Dies ist nicht der Gegenstand den du suchst, *wackelt mit Finger* bitte geht auseinander.", - "create.tooltip.randomWipDescription4": "Dieser Gegenstand wird sich in 10 Sekunden selbst zerstören. 10, 9, 8...", - "create.tooltip.randomWipDescription5": "Glaub mir, es ist nutzlos.", - "create.tooltip.randomWipDescription6": "Bei der Verwendung dieses Gegenstands stimmst du hiermit unserem Haftungsausschluss zu und nimmst dessen Bedingungen an.", - "create.tooltip.randomWipDescription7": "Dieser ist nicht für dich. Wie wäre es mit dem?", - "create.tooltip.randomWipDescription8": "Benutze es und bereue deine Entscheidung umgehend.", + "block.create.acacia_window": "Akazienholzfenster", + "block.create.acacia_window_pane": "Akazienholzfensterscheibe", + "block.create.adjustable_chain_gearshift": "Verstellbares Kettengetriebe", + "block.create.analog_lever": "Analoger Schalter", + "block.create.andesite_belt_funnel": "Riementrichter aus Andesit", + "block.create.andesite_casing": "Andesitrahmen", + "block.create.andesite_encased_cogwheel": "Andesit-Zahnrad", + "block.create.andesite_encased_large_cogwheel": "Großes Andesit-Zahnrad", + "block.create.andesite_encased_shaft": "Andesitummantelte Welle", + "block.create.andesite_funnel": "Andesittrichter", + "block.create.andesite_pillar": "Andesitsäule", + "block.create.andesite_tunnel": "Andesittunnel", + "block.create.asurine": "Asurin", + "block.create.asurine_pillar": "Asurinsäule", + "block.create.basin": "Behälter", + "block.create.belt": "Mechanischer Riemen", + "block.create.birch_window": "Birkenholzfenster", + "block.create.birch_window_pane": "Birkenholzfensterscheibe", + "block.create.black_nixie_tube": "Schwarze Nixie-Röhre", + "block.create.black_sail": "Schwarzes Segel", + "block.create.black_seat": "Schwarzer Sitz", + "block.create.black_toolbox": "Schwarzer Werkzeugkasten", + "block.create.black_valve_handle": "Schwarzer Ventilgriff", + "block.create.blaze_burner": "Lohenbrenner", + "block.create.blue_nixie_tube": "Blaue Nixie-Röhre", + "block.create.blue_sail": "Blaues Segel", + "block.create.blue_seat": "Blauer Sitz", + "block.create.blue_toolbox": "Blauer Werkzeugkasten", + "block.create.blue_valve_handle": "Blauer Ventilgriff", + "block.create.brass_belt_funnel": "Riementrichter aus Messing", + "block.create.brass_block": "Messing Block", + "block.create.brass_casing": "Messingrahmen", + "block.create.brass_encased_cogwheel": "Messing-Zahnrad", + "block.create.brass_encased_large_cogwheel": "Großes Messing-Zahnrad", + "block.create.brass_encased_shaft": "Messingummantelte Welle", + "block.create.brass_funnel": "Messingtrichter", + "block.create.brass_tunnel": "Messingtunnel", + "block.create.brown_nixie_tube": "Braune Nixie-Röhre", + "block.create.brown_sail": "Braunes Segel", + "block.create.brown_seat": "Brauner Sitz", + "block.create.brown_toolbox": "Brauner Werkzeugkasten", + "block.create.brown_valve_handle": "Brauner Ventilgriff", + "block.create.calcite_pillar": "Kalzitsäule", + "block.create.cart_assembler": "Lorenmonteur", + "block.create.chocolate": "Schokolade", + "block.create.chute": "Rinne", + "block.create.clockwork_bearing": "Uhrwerk-Lager", + "block.create.clutch": "Kupplung", + "block.create.cogwheel": "Zahnrad", + "block.create.content_observer": "Inhaltsbeobachter", + "block.create.controller_rail": "Steuerungsschiene", + "block.create.copper_backtank": "Kupferner Rückentank", + "block.create.copper_casing": "Kupferrahmen", + "block.create.copper_shingle_slab": "Kupferschindelstufe", + "block.create.copper_shingle_stairs": "Kupferschindeltreppe", + "block.create.copper_shingles": "Kupferschindeln", + "block.create.copper_tile_slab": "Kupferfliesenstufe", + "block.create.copper_tile_stairs": "Kupferfliesentreppe", + "block.create.copper_tiles": "Kupferfliesen", + "block.create.copper_valve_handle": "Kupfer Ventilgriff", + "block.create.creative_crate": "Kreative anpassbare Kiste", + "block.create.creative_fluid_tank": "Kreativer Flüssigkeitstank", + "block.create.creative_motor": "Kreativer Motor", + "block.create.crimsite": "Karmesit", + "block.create.crimsite_pillar": "Karmesitsäule", + "block.create.crimson_window": "Karmesinfenster", + "block.create.crimson_window_pane": "Karmesinfensterscheibe", + "block.create.crushing_wheel": "Mahlwerkrad", + "block.create.crushing_wheel_controller": "Mahlwerkrad Steurung", + "block.create.cuckoo_clock": "Kuckucksuhr", + "block.create.cut_andesite": "Geschnittener Andesit", + "block.create.cut_andesite_brick_slab": "Geschnittene Andesitziegelstufe", + "block.create.cut_andesite_brick_stairs": "Geschnittene Andesitziegeltreppe", + "block.create.cut_andesite_brick_wall": "Geschnittene Andesitziegelmauer", + "block.create.cut_andesite_bricks": "Geschnittene Andesitziegelsteine", + "block.create.cut_andesite_slab": "Geschnittene Andesitstufe", + "block.create.cut_andesite_stairs": "Geschnittene Andesittreppe", + "block.create.cut_andesite_wall": "Geschnittene Andesitmauer", + "block.create.cut_asurine": "Geschnittenes Asurin", + "block.create.cut_asurine_brick_slab": "Geschnittene Asurinziegelstufe", + "block.create.cut_asurine_brick_stairs": "Geschnittene Asurinziegeltreppe", + "block.create.cut_asurine_brick_wall": "Geschnittene Asurinziegelmauer", + "block.create.cut_asurine_bricks": "Geschnittene Asurinziegelsteine", + "block.create.cut_asurine_slab": "Geschnittene Asurinstufe", + "block.create.cut_asurine_stairs": "Geschnittene Asurintreppe", + "block.create.cut_asurine_wall": "Geschnittene Asurinmauer", + "block.create.cut_calcite": "Geschnittener Kalzit", + "block.create.cut_calcite_brick_slab": "Geschnittene Kalzitziegelstufe", + "block.create.cut_calcite_brick_stairs": "Geschnittene Kalzitziegeltreppe", + "block.create.cut_calcite_brick_wall": "Geschnittene Kalzitziegelmauer", + "block.create.cut_calcite_bricks": "Geschnittene Kalzitziegelsteine", + "block.create.cut_calcite_slab": "Geschnittene Kalzitstufe", + "block.create.cut_calcite_stairs": "Geschnittene Kalzittreppe", + "block.create.cut_calcite_wall": "Geschnittene Kalzitmauer", + "block.create.cut_crimsite": "Geschnittenes Karmesit", + "block.create.cut_crimsite_brick_slab": "Geschnittene Karmesitziegelstufe", + "block.create.cut_crimsite_brick_stairs": "Geschnittene Karmesitziegeltreppe", + "block.create.cut_crimsite_brick_wall": "Geschnittene Karmesitziegelmauer", + "block.create.cut_crimsite_bricks": "Geschnittene Karmesitziegelsteine", + "block.create.cut_crimsite_slab": "Geschnittene Karmesitstufe", + "block.create.cut_crimsite_stairs": "Geschnittene Karmesittreppe", + "block.create.cut_crimsite_wall": "Geschnittene Karmesitmauer", + "block.create.cut_deepslate": "Geschnittener Tiefenschiefer", + "block.create.cut_deepslate_brick_slab": "Geschnittene Tiefenschieferziegelstufe", + "block.create.cut_deepslate_brick_stairs": "Geschnittene Tiefenschieferziegeltreppe", + "block.create.cut_deepslate_brick_wall": "Geschnittene Tiefenschieferziegelmauer", + "block.create.cut_deepslate_bricks": "Geschnittene Tiefenschiefersteine", + "block.create.cut_deepslate_slab": "Geschnittene Tiefenschieferstufe", + "block.create.cut_deepslate_stairs": "Geschnittene Tiefenschiefertreppe", + "block.create.cut_deepslate_wall": "Geschnittene Tiefenschiefermauer", + "block.create.cut_diorite": "Gescnittener Diorit", + "block.create.cut_diorite_brick_slab": "Geschnittene Dioritziegelstufe", + "block.create.cut_diorite_brick_stairs": "Geschnittene Dioritziegeltreppe", + "block.create.cut_diorite_brick_wall": "Geschnittene Dioritziegelmauer", + "block.create.cut_diorite_bricks": "Geschnittene Dioritziegelsteine", + "block.create.cut_diorite_slab": "Geschnittene Dioritstufe", + "block.create.cut_diorite_stairs": "Geschnittene Diorittreppe", + "block.create.cut_diorite_wall": "Geschnittene Dioritmauer", + "block.create.cut_dripstone": "Geschnittener Tropfstein", + "block.create.cut_dripstone_brick_slab": "Geschnittene Tropfsteinziegelstufe", + "block.create.cut_dripstone_brick_stairs": "Geschnittene Tropfsteinziegeltreppe", + "block.create.cut_dripstone_brick_wall": "Geschnittene Tropfsteinziegelmauer", + "block.create.cut_dripstone_bricks": "Geschnittener Tropfsteinziegelsteine", + "block.create.cut_dripstone_slab": "Geschnittene Tropfsteinstufe", + "block.create.cut_dripstone_stairs": "Geschnittene Tropfsteintreppe", + "block.create.cut_dripstone_wall": "Geschnittene Tropfsteinmauer", + "block.create.cut_granite": "Geschnittener Granit", + "block.create.cut_granite_brick_slab": "Geschnittene Granitziegelstufe", + "block.create.cut_granite_brick_stairs": "Geschnittene Granitziegeltreppe", + "block.create.cut_granite_brick_wall": "Geschnittene Granitziegelmauer", + "block.create.cut_granite_bricks": "Geschnittene Granitziegelsteine", + "block.create.cut_granite_slab": "Geschnittene Granitstufe", + "block.create.cut_granite_stairs": "Geschnittene Granittreppe", + "block.create.cut_granite_wall": "Geschnittene Granitmauer", + "block.create.cut_limestone": "Geschnittener Kalkstein", + "block.create.cut_limestone_brick_slab": "Geschnittene Kalksteinziegelstufe", + "block.create.cut_limestone_brick_stairs": "Geschnittene Kalksteinziegeltreppe", + "block.create.cut_limestone_brick_wall": "Geschnittene Kalksteinziegelmauer", + "block.create.cut_limestone_bricks": "Geschnittene Kalksteinziegelsteine", + "block.create.cut_limestone_slab": "Geschnittene Kalksteinstufe", + "block.create.cut_limestone_stairs": "Geschnittene Kalksteintreppe", + "block.create.cut_limestone_wall": "Geschnittene Kalksteinmauer", + "block.create.cut_ochrum": "Geschnittenes Ockrum", + "block.create.cut_ochrum_brick_slab": "Geschnittene Ockrumziegelstufe", + "block.create.cut_ochrum_brick_stairs": "Geschnittene Ockrumziegeltreppe", + "block.create.cut_ochrum_brick_wall": "Geschnittene Ockrumziegelmauer", + "block.create.cut_ochrum_bricks": "Geschnittene Ockrumziegelsteine", + "block.create.cut_ochrum_slab": "Geschnittene Ockrumstufe", + "block.create.cut_ochrum_stairs": "Geschnittene Ockrumtreppe", + "block.create.cut_ochrum_wall": "Geschnittene Ockrummauer", + "block.create.cut_scorchia": "Geschnittenes Scorchia", + "block.create.cut_scorchia_brick_slab": "Geschnittene Scorchiaziegelstufe", + "block.create.cut_scorchia_brick_stairs": "Geschnittene Scorchiaziegeltreppe", + "block.create.cut_scorchia_brick_wall": "Geschnittene Scorchiaziegelmauer", + "block.create.cut_scorchia_bricks": "Geschnittene Scorchiaziegelsteine", + "block.create.cut_scorchia_slab": "Geschnittene Scorchiaziegelstufe", + "block.create.cut_scorchia_stairs": "Geschnittene Scorchiaziegeltreppe", + "block.create.cut_scorchia_wall": "Geschnittene Scorchiaziegelmauer", + "block.create.cut_scoria": "Geschnittenes Scoria", + "block.create.cut_scoria_brick_slab": "Geschnittene Scoriaziegelstufe", + "block.create.cut_scoria_brick_stairs": "Geschnittene Scoriaziegeltreppe", + "block.create.cut_scoria_brick_wall": "Geschnittene Scoriaziegelmauer", + "block.create.cut_scoria_bricks": "Geschnittene Scoriaziegelsteine", + "block.create.cut_scoria_slab": "Geschnittene Scoriaziegelstufe", + "block.create.cut_scoria_stairs": "Geschnittene Scoriaziegeltreppe", + "block.create.cut_scoria_wall": "Geschnittene Scoriaziegelmauer", + "block.create.cut_tuff": "Geschnittener Tuffstein", + "block.create.cut_tuff_brick_slab": "Geschnittene Tuffsteinziegelstufe", + "block.create.cut_tuff_brick_stairs": "Geschnittene Tuffsteinziegeltreppe", + "block.create.cut_tuff_brick_wall": "Geschnittene Tuffsteinziegelmauer", + "block.create.cut_tuff_bricks": "Geschnittene Tuffsteinziegelsteine", + "block.create.cut_tuff_slab": "Geschnittene Tuffsteinstufe", + "block.create.cut_tuff_stairs": "Geschnittene Tuffsteintreppe", + "block.create.cut_tuff_wall": "Geschnittene Tuffsteinmauer", + "block.create.cut_veridium": "Geschnittenes Veridium", + "block.create.cut_veridium_brick_slab": "Geschnittene Veridiumziegelstufe", + "block.create.cut_veridium_brick_stairs": "Geschnittene Veridiumziegeltreppe", + "block.create.cut_veridium_brick_wall": "Geschnittene Veridiumziegelmauer", + "block.create.cut_veridium_bricks": "Geschnittene Veridiumziegelsteine", + "block.create.cut_veridium_slab": "Geschnittene Veridiumziegelstufe", + "block.create.cut_veridium_stairs": "Geschnittene Veridiumziegeltreppe", + "block.create.cut_veridium_wall": "Geschnittene Veridiumziegelmauer", + "block.create.cyan_nixie_tube": "Türkise Nixie-Röhre", + "block.create.cyan_sail": "Türkises Segel", + "block.create.cyan_seat": "Türkiser Sitz", + "block.create.cyan_toolbox": "Türkiser Werkzeugkasten", + "block.create.cyan_valve_handle": "Türkiser Ventilgriff", + "block.create.dark_oak_window": "Schwarzeichenholzfenster", + "block.create.dark_oak_window_pane": "Schwarzeichenholzfensterscheibe", + "block.create.deepslate_pillar": "Tiefenschiefer-Säule", + "block.create.deepslate_zinc_ore": "Tiefenschiefer-Zinkerz", + "block.create.deployer": "Einsatzgerät", + "block.create.depot": "Depot", + "block.create.diorite_pillar": "Dioritsäule", + "block.create.dripstone_pillar": "Tropfstein-Säule", + "block.create.encased_chain_drive": "Ummantelter Kettenriemen", + "block.create.encased_fan": "Ummantelter Lüfter", + "block.create.encased_fluid_pipe": "Ummanteltes Rohr", + "block.create.exposed_copper_shingle_slab": "Angelaufene Kupferschindelstufe", + "block.create.exposed_copper_shingle_stairs": "Angelaufene Kupferschindeltreppe", + "block.create.exposed_copper_shingles": "Angelaufene Kupferschindel", + "block.create.exposed_copper_tile_slab": "Angelaufene Kupferfliesenstufe", + "block.create.exposed_copper_tile_stairs": "Angelaufene Kupferfliesentreppe", + "block.create.exposed_copper_tiles": "Angelaufene Kupferfliesen", + "block.create.fluid_pipe": "Flüssigkeitsrohr", + "block.create.fluid_tank": "Flüssigkeitstank", + "block.create.fluid_valve": "Flüssigkeitsventil", + "block.create.flywheel": "Schwungrad", + "block.create.framed_glass": "Gerahmtes Glas", + "block.create.framed_glass_pane": "Gerahmte Glasscheibe", + "block.create.furnace_engine": "Ofenmotor", + "block.create.gantry_carriage": "Portalkranwagen", + "block.create.gantry_shaft": "Portalkranachse", + "block.create.gearbox": "Getriebe", + "block.create.gearshift": "Gangschaltung", + "block.create.glass_fluid_pipe": "Glasrohr", + "block.create.granite_pillar": "Granitsäule", + "block.create.gray_nixie_tube": "Graue Nixie-Röhre", + "block.create.gray_sail": "Graues Segel", + "block.create.gray_seat": "Grauer Sitz", + "block.create.gray_toolbox": "Grauer Werkzeugkasten", + "block.create.gray_valve_handle": "Grauer Ventilgriff", + "block.create.green_nixie_tube": "Grüne Nixie-Röhre", + "block.create.green_sail": "Grünes Segel", + "block.create.green_seat": "Grüner Sitz", + "block.create.green_toolbox": "Grüner Werkzeugkasten", + "block.create.green_valve_handle": "Grüner Ventilgriff", + "block.create.hand_crank": "Handkurbel", + "block.create.haunted_bell": "Spukglocke", + "block.create.honey": "Honig", + "block.create.horizontal_framed_glass": "Horizontal Gerahmtes Glas", + "block.create.horizontal_framed_glass_pane": "Horizontal Gerahmte Glasscheibe", + "block.create.hose_pulley": "Umlenkrolle", + "block.create.item_drain": "Abfluss", + "block.create.item_vault": "Gegenstandstresor", + "block.create.jungle_window": "Tropenholzfenster", + "block.create.jungle_window_pane": "Tropenholzfensterscheibe", + "block.create.large_cogwheel": "Großes Zahnrad", + "block.create.layered_andesite": "Geschichteter Andesit", + "block.create.layered_asurine": "Geschichtetes Asurin", + "block.create.layered_calcite": "Geschichtetes Kalzit", + "block.create.layered_crimsite": "Geschichtetes Karmesit", + "block.create.layered_deepslate": "Geschichteter Tiefenschiefer", + "block.create.layered_diorite": "Geschichteter Diorit", + "block.create.layered_dripstone": "Geschichteter Tropfstein", + "block.create.layered_granite": "Geschichteter Granit", + "block.create.layered_limestone": "Geschichteter Kalkstein", + "block.create.layered_ochrum": "Geschichtetes Ockrum", + "block.create.layered_scorchia": "Geschichtetes Scorchia", + "block.create.layered_scoria": "Geschichtete Schlacke", + "block.create.layered_tuff": "Geschichteter Tuffstein", + "block.create.layered_veridium": "Geschichtetes Veridium", + "block.create.lectern_controller": "Lesepult-Kontroller", + "block.create.light_blue_nixie_tube": "Hellblaue Nixie-Röhre", + "block.create.light_blue_sail": "Hellblaues Segel", + "block.create.light_blue_seat": "Hellblauer Sitz", + "block.create.light_blue_toolbox": "Hellblauer Werkzeugkasten", + "block.create.light_blue_valve_handle": "Hellblauer Ventilgriff", + "block.create.light_gray_nixie_tube": "Hellgraue Nixie-Röhre", + "block.create.light_gray_sail": "Hellgraues Segel", + "block.create.light_gray_seat": "Hellgrauer Sitz", + "block.create.light_gray_toolbox": "Hellgrauer Werkzeugkasten", + "block.create.light_gray_valve_handle": "Hellgrauer Ventilgriff", + "block.create.lime_nixie_tube": "Hellgrüne Nixie-Röhre", + "block.create.lime_sail": "Hellgrünes Segel", + "block.create.lime_seat": "Hellgrüner Sitz", + "block.create.lime_toolbox": "Hellgrüner Werkzeugkasten", + "block.create.lime_valve_handle": "Hellgrüner Ventilgriff", + "block.create.limestone": "Kalkstein", + "block.create.limestone_pillar": "Kalksteinsäule", + "block.create.linear_chassis": "Schubgerüst", + "block.create.lit_blaze_burner": "Aktiver Lohenbrenner", + "block.create.magenta_nixie_tube": "Magenta Nixie-Röhre", + "block.create.magenta_sail": "Magenta Segel", + "block.create.magenta_seat": "Magenta Sitz", + "block.create.magenta_toolbox": "Magenta Werkzeugkasten", + "block.create.magenta_valve_handle": "Magenta Ventilgriff", + "block.create.mechanical_arm": "Mechanischer Arm", + "block.create.mechanical_bearing": "Mechanisches Lager", + "block.create.mechanical_crafter": "Mechanische Handwerkseinheit", + "block.create.mechanical_drill": "Mechanischer Bohrer", + "block.create.mechanical_harvester": "Mechanische Erntemaschine", + "block.create.mechanical_mixer": "Mechanischer Mixer", + "block.create.mechanical_piston": "Mechanischer Kolben", + "block.create.mechanical_piston_head": "Mechanisches Kolbenende", + "block.create.mechanical_plough": "Mechanischer Pflug", + "block.create.mechanical_press": "Mechanische Presse", + "block.create.mechanical_pump": "Mechanische Pumpe", + "block.create.mechanical_saw": "Mechanische Säge", + "block.create.metal_bracket": "Metallhalterung", + "block.create.millstone": "Mahlstein", + "block.create.minecart_anchor": "Lorenanker", + "block.create.mysterious_cuckoo_clock": "Kuckucksuhr", + "block.create.nixie_tube": "Nixie-Röhre", + "block.create.nozzle": "Düse", + "block.create.oak_window": "Eichenfenster", + "block.create.oak_window_pane": "Eichenfensterscheibe", + "block.create.ochrum": "Ockrum", + "block.create.ochrum_pillar": "Ockrum-Säule", + "block.create.orange_sail": "Oranges Segel", + "block.create.orange_seat": "Oranger Sitz", + "block.create.orange_toolbox": "Oranger Werkzeugkasten", + "block.create.orange_valve_handle": "Oranger Ventilgriff", + "block.create.ornate_iron_window": "Kunstvolles Eisenfenster", + "block.create.ornate_iron_window_pane": "Kunstvolle Eisenfensterscheibe", + "block.create.oxidized_copper_shingle_slab": "Oxidierte Kupferschindelstufe", + "block.create.oxidized_copper_shingle_stairs": "Oxidierte Kupfertreppe", + "block.create.oxidized_copper_shingles": "Oxidierte Kupferschindel", + "block.create.oxidized_copper_tile_slab": "Oxidierte Kupferfliesenstufe", + "block.create.oxidized_copper_tile_stairs": "Oxidierte Kupferfliesentreppe", + "block.create.oxidized_copper_tiles": "Oxidierte Kupferfliesen", + "block.create.peculiar_bell": "Seltsame Glocke", + "block.create.pink_nixie_tube": "Rosa Nixie-Röhre", + "block.create.pink_sail": "Rosa Segel", + "block.create.pink_seat": "Rosa Sitz", + "block.create.pink_toolbox": "Rosa Werkzeugkasten", + "block.create.pink_valve_handle": "Rosa Ventilgriff", + "block.create.piston_extension_pole": "Kolben-Pleuelverlängerung", + "block.create.polished_cut_andesite": "Polierter geschnittener Andesit", + "block.create.polished_cut_andesite_slab": "Polierte geschnittene Andesitstufe", + "block.create.polished_cut_andesite_stairs": "Polierte geschnittene Andesittreppe", + "block.create.polished_cut_andesite_wall": "Polierte geschnittene Andesitmauer", + "block.create.polished_cut_asurine": "Poliertes geschnittenes Asurin", + "block.create.polished_cut_asurine_slab": "Polierte geschnittene Asurinstufe", + "block.create.polished_cut_asurine_stairs": "Polierte geschnittene Asurintreppe", + "block.create.polished_cut_asurine_wall": "Polierte geschnittene Asurinmauer", + "block.create.polished_cut_calcite": "Polierter geschnittener Kalzit", + "block.create.polished_cut_calcite_slab": "Polierte geschnittene Kalzitstufe", + "block.create.polished_cut_calcite_stairs": "Polierte geschnittene Kalzittreppe", + "block.create.polished_cut_calcite_wall": "Polierte geschnittene Kalzitmauer", + "block.create.polished_cut_crimsite": "Poliertes geschnittenes Karmesit", + "block.create.polished_cut_crimsite_slab": "Polierte geschnittene Karmesitstufe", + "block.create.polished_cut_crimsite_stairs": "Polierte geschnittene Karmesittreppe", + "block.create.polished_cut_crimsite_wall": "Polierte geschnittene Karmesitmauer", + "block.create.polished_cut_deepslate": "Polierter geschnittener Tiefschiefer", + "block.create.polished_cut_deepslate_slab": "Polierte geschnittene Tiefschieferstufe", + "block.create.polished_cut_deepslate_stairs": "Polierte geschnittene Tiefschiefertreppe", + "block.create.polished_cut_deepslate_wall": "Polierte geschnittene Tiefschiefermauer", + "block.create.polished_cut_diorite": "Polierter geschnittener Diorit", + "block.create.polished_cut_diorite_slab": "Polierte geschnittene Dioritstufe", + "block.create.polished_cut_diorite_stairs": "Polierte geschnittene Diorittreppe", + "block.create.polished_cut_diorite_wall": "Polierte geschnittene Dioritmauer", + "block.create.polished_cut_dripstone": "Polierter geschnittener Tropfstein", + "block.create.polished_cut_dripstone_slab": "Polierte geschnittene Tropfsteinstufe", + "block.create.polished_cut_dripstone_stairs": "Polierte geschnittene Tropfsteintreppe", + "block.create.polished_cut_dripstone_wall": "Polierte geschnittene Tropfsteinmauer", + "block.create.polished_cut_granite": "Polierter geschnittener Granit", + "block.create.polished_cut_granite_slab": "Polierte geschnittene Granitstufe", + "block.create.polished_cut_granite_stairs": "Polierte geschnittene Granittreppe", + "block.create.polished_cut_granite_wall": "Polierte geschnittene Granitmauer", + "block.create.polished_cut_limestone": "Polierter geschnittener Kalkstein", + "block.create.polished_cut_limestone_slab": "Polierte geschnittene Kalksteinstufe", + "block.create.polished_cut_limestone_stairs": "Polierte geschnittene Kalksteintreppe", + "block.create.polished_cut_limestone_wall": "Polierte geschnittene Kalksteinmauer", + "block.create.polished_cut_ochrum": "Poliertes geschnittenes Ockrum", + "block.create.polished_cut_ochrum_slab": "Polierte geschnittene Ockrumstufe", + "block.create.polished_cut_ochrum_stairs": "Polierte geschnittene Ockrumtreppe", + "block.create.polished_cut_ochrum_wall": "Polierte geschnittene Ockrummauer", + "block.create.polished_cut_scorchia": "Poliertes geschnittenes Scorchia", + "block.create.polished_cut_scorchia_slab": "Polierte geschnittene Scorchiastufe", + "block.create.polished_cut_scorchia_stairs": "Polierte geschnittene Scorchiatreppe", + "block.create.polished_cut_scorchia_wall": "Polierte geschnittene Scorchiamauer", + "block.create.polished_cut_scoria": "Polierte geschnittene Schlacke", + "block.create.polished_cut_scoria_slab": "Polierte geschnittene Schlackenstufe", + "block.create.polished_cut_scoria_stairs": "Polierte geschnittene Schlackentreppe", + "block.create.polished_cut_scoria_wall": "Polierte geschnittene Schlackenmauer", + "block.create.polished_cut_tuff": "Polierter geschnittener Tuffstein", + "block.create.polished_cut_tuff_slab": "Polierte geschnittene Tuffsteinstufe", + "block.create.polished_cut_tuff_stairs": "Polierte geschnittene Tuffsteintreppe", + "block.create.polished_cut_tuff_wall": "Polierte geschnittene Tuffsteinmauer", + "block.create.polished_cut_veridium": "Poliertes geschnittenes Veridium", + "block.create.polished_cut_veridium_slab": "Polierte geschnittene Veridiumstufe", + "block.create.polished_cut_veridium_stairs": "Polierte geschnittene Veridiumtreppe", + "block.create.polished_cut_veridium_wall": "Polierte geschnittene Veridiummauer", + "block.create.portable_fluid_interface": "Portable Flüssigkeitsschnittstelle", + "block.create.portable_storage_interface": "Portable Lagerschnittstelle", + "block.create.powered_latch": "RS-Flipflop", + "block.create.powered_toggle_latch": "T-Flipflop", + "block.create.pulley_magnet": "Rollenmagnet", + "block.create.pulse_extender": "Pulsverlängerer", + "block.create.pulse_repeater": "Pulsierender Verstärker", + "block.create.purple_nixie_tube": "Violette Nixie-Röhre", + "block.create.purple_sail": "Violettes Segel", + "block.create.purple_seat": "Violetter Sitz", + "block.create.purple_toolbox": "Violetter Werkzeugkasten", + "block.create.purple_valve_handle": "Violetter Ventilgriff", + "block.create.radial_chassis": "Drehgerüst", + "block.create.raw_zinc_block": "Rohzinkblock", + "block.create.red_nixie_tube": "Rote Nixie-Röhre", + "block.create.red_sail": "Rote Segel", + "block.create.red_seat": "Roter Sitz", + "block.create.red_toolbox": "Roter Werkzeugkasten", + "block.create.red_valve_handle": "Roter Ventilgriff", + "block.create.redstone_contact": "Redstone-Kontakt", + "block.create.redstone_link": "Redstone-Verbindung", + "block.create.refined_radiance_casing": "Glanzgehäuse", + "block.create.rope": "Seil", + "block.create.rope_pulley": "Seilrolle", + "block.create.rotation_speed_controller": "Rotationsgeschwindigkeitsregler", + "block.create.sail_frame": "Segelrahmen", + "block.create.schematic_table": "Bauplantisch", + "block.create.schematicannon": "Bauplankanone", + "block.create.scorchia": "Scorchia", + "block.create.scorchia_pillar": "Scorchia-Säule", + "block.create.scoria": "Schlacke", + "block.create.scoria_pillar": "Schlackensäule", + "block.create.secondary_linear_chassis": "Sekundäres Schubgerüst", + "block.create.sequenced_gearshift": "Sequenzielle Gangschaltung", + "block.create.shadow_steel_casing": "Schattengehäuse", + "block.create.shaft": "Welle", + "block.create.small_andesite_brick_slab": "Kleine Andesitziegelstufe", + "block.create.small_andesite_brick_stairs": "Kleine Andesitziegeltreppe", + "block.create.small_andesite_brick_wall": "Kleine Andesitziegelmauer", + "block.create.small_andesite_bricks": "Kleine Andesitziegelsteine", + "block.create.small_asurine_brick_slab": "Kleine Asurinziegelstufe", + "block.create.small_asurine_brick_stairs": "Kleine Asurinziegeltreppe", + "block.create.small_asurine_brick_wall": "Kleine Asurinziegelmauer", + "block.create.small_asurine_bricks": "Kleine Asurinziegelsteine", + "block.create.small_calcite_brick_slab": "Kleine Kalzitziegelstufe", + "block.create.small_calcite_brick_stairs": "Kleine Kalzitziegeltreppe", + "block.create.small_calcite_brick_wall": "Kleine Kalzitziegelmauer", + "block.create.small_calcite_bricks": "Kleine Kalzitziegelsteine", + "block.create.small_crimsite_brick_slab": "Kleine Karmesitziegelstufe", + "block.create.small_crimsite_brick_stairs": "Kleine Karmesitziegeltreppe", + "block.create.small_crimsite_brick_wall": "Kleine Karmesitziegelmauer", + "block.create.small_crimsite_bricks": "Kleine Karmesitziegelsteine", + "block.create.small_deepslate_brick_slab": "Kleine Tiefenschieferziegelstufe", + "block.create.small_deepslate_brick_stairs": "Kleine Tiefenschieferziegeltreppe", + "block.create.small_deepslate_brick_wall": "Kleine Tiefenschieferziegelmauer", + "block.create.small_deepslate_bricks": "Kleine Tiefenschieferziegelsteine", + "block.create.small_diorite_brick_slab": "Kleine Dioritziegelstufe", + "block.create.small_diorite_brick_stairs": "Kleine Dioritziegeltreppe", + "block.create.small_diorite_brick_wall": "Kleine Dioritziegelmauer", + "block.create.small_diorite_bricks": "Kleine Dioritziegelsteine", + "block.create.small_dripstone_brick_slab": "Kleine Tropfsteinziegelstufe", + "block.create.small_dripstone_brick_stairs": "Kleine Tropfsteinziegeltreppe", + "block.create.small_dripstone_brick_wall": "Kleine Tropfsteinziegelmauer", + "block.create.small_dripstone_bricks": "Kleine Tropfsteinziegelsteine", + "block.create.small_granite_brick_slab": "Kleine Granitziegelstufe", + "block.create.small_granite_brick_stairs": "Kleine Granitziegeltreppe", + "block.create.small_granite_brick_wall": "Kleine Granitziegelmauer", + "block.create.small_granite_bricks": "Kleine Granitziegelsteine", + "block.create.small_limestone_brick_slab": "Kleine Kalksteinziegelstufe", + "block.create.small_limestone_brick_stairs": "Kleine Kalksteinziegeltreppe", + "block.create.small_limestone_brick_wall": "Kleine Kalksteinziegelmauer", + "block.create.small_limestone_bricks": "Kleine Kalksteinziegelsteine", + "block.create.small_ochrum_brick_slab": "Kleine Ockrumziegelstufe", + "block.create.small_ochrum_brick_stairs": "Kleine Ockrumziegeltreppe", + "block.create.small_ochrum_brick_wall": "Kleine Ockrumziegelmauer", + "block.create.small_ochrum_bricks": "Kleine Ockrumziegelsteine", + "block.create.small_scorchia_brick_slab": "Kleine Scorchiaziegelstufe", + "block.create.small_scorchia_brick_stairs": "Kleine Scorchiaziegeltreppe", + "block.create.small_scorchia_brick_wall": "Kleine Scorchiaziegelmauer", + "block.create.small_scorchia_bricks": "Kleine Scorchiaziegelsteine", + "block.create.small_scoria_brick_slab": "Kleine Scoriaziegelstufe", + "block.create.small_scoria_brick_stairs": "Kleine Scoriaziegeltreppe", + "block.create.small_scoria_brick_wall": "Kleine Scoriaziegelmauer", + "block.create.small_scoria_bricks": "Kleine Scoriaziegelsteine", + "block.create.small_tuff_brick_slab": "Kleine Tuffsteinziegelstufe", + "block.create.small_tuff_brick_stairs": "Kleine Tuffsteinziegeltreppe", + "block.create.small_tuff_brick_wall": "Kleine Tuffsteinziegelmauer", + "block.create.small_tuff_bricks": "Kleine Tuffsteinziegelsteine", + "block.create.small_veridium_brick_slab": "Kleine Veridiumziegelstufe", + "block.create.small_veridium_brick_stairs": "Kleine Veridiumziegeltreppe", + "block.create.small_veridium_brick_wall": "Kleine Veridiumziegelmauer", + "block.create.small_veridium_bricks": "Kleine Veridiumziegelsteine", + "block.create.smart_chute": "Schlaue Rinne", + "block.create.smart_fluid_pipe": "Schlaues Flüssigkeitsrohr", + "block.create.speedometer": "Tachometer", + "block.create.spout": "Ausguss", + "block.create.spruce_window": "Fichtenfenster", + "block.create.spruce_window_pane": "Fichtenfensterscheibe", + "block.create.sticker": "Ankleber", + "block.create.sticky_mechanical_piston": "Klebriger Mechanischer Kolben", + "block.create.stockpile_switch": "Vorratssensor", + "block.create.stressometer": "Stressometer", + "block.create.tiled_glass": "Glasfliesen", + "block.create.tiled_glass_pane": "Glasfliesenscheibe", + "block.create.tuff_pillar": "Tuffstein-Säule", + "block.create.turntable": "Drehtisch", + "block.create.veridium": "Veridium", + "block.create.veridium_pillar": "Veridium-Säule", + "block.create.vertical_framed_glass": "Vertikal Gerahmtes Glas", + "block.create.vertical_framed_glass_pane": "Vertikal Gerahmte Glasscheibe", + "block.create.warped_window": "Wirrfenster", + "block.create.warped_window_pane": "Wirrfensterscheibe", + "block.create.water_wheel": "Wasserrad", + "block.create.waxed_copper_shingle_slab": "Gewachste Kupferschindelstufe", + "block.create.waxed_copper_shingle_stairs": "Gewachste Kupferschindeltreppe", + "block.create.waxed_copper_shingles": "Gewachste Kupferschindel", + "block.create.waxed_copper_tile_slab": "Gewachste Kupferfliesenstufe", + "block.create.waxed_copper_tile_stairs": "Gewachste Kupferfliesentreppe", + "block.create.waxed_copper_tiles": "Gewachste Kupferfliesen", + "block.create.waxed_exposed_copper_shingle_slab": "Gewachste angelaufene Kupferschindelstufe", + "block.create.waxed_exposed_copper_shingle_stairs": "Gewachste angelaufene Kupferschindeltreppe", + "block.create.waxed_exposed_copper_shingles": "Gewachste angelaufene Kupferschindel", + "block.create.waxed_exposed_copper_tile_slab": "Gewachste angelaufene Kupferfliesenstufe", + "block.create.waxed_exposed_copper_tile_stairs": "Gewachste angelaufene Kupferfliesentreppe", + "block.create.waxed_exposed_copper_tiles": "Gewachste angelaufene Kupferfliesen", + "block.create.waxed_oxidized_copper_shingle_slab": "Gewachste oxidierte Kupferschindelstufe", + "block.create.waxed_oxidized_copper_shingle_stairs": "Gewachste oxidierte Kupferschindeltreppe", + "block.create.waxed_oxidized_copper_shingles": "Gewachste oxidierte Kupferschindel", + "block.create.waxed_oxidized_copper_tile_slab": "Gewachste oxidierte Kupferfliesenstufe", + "block.create.waxed_oxidized_copper_tile_stairs": "Gewachste oxidierte Kupferfliesentreppe", + "block.create.waxed_oxidized_copper_tiles": "Gewachste oxidierte Kupferfliesen", + "block.create.waxed_weathered_copper_shingle_slab": "Gewachste verwittere Kupferschindelstufe", + "block.create.waxed_weathered_copper_shingle_stairs": "Gewachste verwitterte Kupferschindeltreppe", + "block.create.waxed_weathered_copper_shingles": "Gewachste verwitterte Kupferschindel", + "block.create.waxed_weathered_copper_tile_slab": "Gewachste verwitterte Kupferfliesenstufe", + "block.create.waxed_weathered_copper_tile_stairs": "Gewachste verwitterte Kupferfliesentreppe", + "block.create.waxed_weathered_copper_tiles": "Gewachste verwitterte Kupferfliesen", + "block.create.weathered_copper_shingle_slab": "Verwitterte Kupferschindelstufe", + "block.create.weathered_copper_shingle_stairs": "Verwitterte Kupferschindeltreppe", + "block.create.weathered_copper_shingles": "Verwitterte Kupferschindel", + "block.create.weathered_copper_tile_slab": "Verwitterte Kupferfliesenstufe", + "block.create.weathered_copper_tile_stairs": "Verwitterte Kupferfliesentreppe", + "block.create.weathered_copper_tiles": "Verwitterte Kupferfliesen", + "block.create.weighted_ejector": "Gewichteter Werfer", + "block.create.white_nixie_tube": "Weiße Nixie-Röhre", + "block.create.white_sail": "Weiße Segel", + "block.create.white_seat": "Weißer Sitz", + "block.create.white_toolbox": "Weißer Werkzeugkasten", + "block.create.white_valve_handle": "Weißer Ventilgriff", + "block.create.windmill_bearing": "Windmühlenlager", + "block.create.wooden_bracket": "Holzhalterung", + "block.create.yellow_nixie_tube": "Gelbe Nixie-Röhre", + "block.create.yellow_sail": "Gelbes Segel", + "block.create.yellow_seat": "Gelber Sitz", + "block.create.yellow_toolbox": "Gelber Werkzeugkasten", + "block.create.yellow_valve_handle": "Gelber Ventilgriff", + "block.create.zinc_block": "Zinkblock", + "block.create.zinc_ore": "Zinkerz", + + "enchantment.create.capacity": "Kapazität", + "enchantment.create.potato_recovery": "Kartoffel-Wiederherstellung", + + "entity.create.contraption": "Vorrichtung", + "entity.create.crafting_blueprint": "Herstellungsblaupause", + "entity.create.gantry_contraption": "Portalkran Vorrichtung", + "entity.create.potato_projectile": "Kartoffel-Projektil", + "entity.create.seat": "Sitz", + "entity.create.stationary_contraption": "Stationäre Vorrichtung", + "entity.create.super_glue": "Superkleber", + + "fluid.create.potion": "Trank", + "fluid.create.tea": "Bauherrentee", + + "item.create.andesite_alloy": "Andesitlegierung", + "item.create.attribute_filter": "Attribut Filter", + "item.create.bar_of_chocolate": "Schokoladentafel", + "item.create.belt_connector": "Mechanischer Riemen", + "item.create.blaze_cake": "Lohenkuchen", + "item.create.blaze_cake_base": "Lohenkuchenbasis", + "item.create.brass_hand": "Messing Hand", + "item.create.brass_ingot": "Messingbarren", + "item.create.brass_nugget": "Messingklumpen", + "item.create.brass_sheet": "Messingblech", + "item.create.builders_tea": "Baumeister-Tee", + "item.create.chest_minecart_contraption": "Güterloren Vorrichtung", + "item.create.chocolate_bucket": "Schokoladeneimer", + "item.create.chocolate_glazed_berries": "Schokoladenglasierte Beeren", + "item.create.chromatic_compound": "Chromatische Verbindung", + "item.create.cinder_flour": "Aschenmehl", + "item.create.copper_backtank": "Kupferner Rückentank", + "item.create.copper_backtank_placeable": "Platzierbarer Kupferner Rückentank", + "item.create.copper_nugget": "Kupferklumpen", + "item.create.copper_sheet": "Kupferblech", + "item.create.crafter_slot_cover": "Handwerkseinheit Slot Abdeckung", + "item.create.crafting_blueprint": "Herstellungsblaupause", + "item.create.creative_blaze_cake": "Kreativer Lohenkuchen", + "item.create.crushed_aluminum_ore": "Zerkleinertes Aluminiumerz", + "item.create.crushed_copper_ore": "Zerkleinertes Kupfererz", + "item.create.crushed_gold_ore": "Zerkleinertes Golderz", + "item.create.crushed_iron_ore": "Zerkleinertes Eisenerz", + "item.create.crushed_lead_ore": "Zerkleinertes Bleierz", + "item.create.crushed_nickel_ore": "Zerkleinertes Nickelerz", + "item.create.crushed_osmium_ore": "Zerkleinertes Osmiumerz", + "item.create.crushed_platinum_ore": "Zerkleinertes Platinerz", + "item.create.crushed_quicksilver_ore": "Zerkleinertes Quecksilbererz", + "item.create.crushed_silver_ore": "Zerkleinertes Silbererz", + "item.create.crushed_tin_ore": "Zerkleinertes Zinnerz", + "item.create.crushed_uranium_ore": "Zerkleinertes Uranerz", + "item.create.crushed_zinc_ore": "Zerkleinertes Zinkerz", + "item.create.diving_boots": "Tauchstiefel", + "item.create.diving_helmet": "Tauchhelm", + "item.create.dough": "Teig", + "item.create.electron_tube": "Elektronenröhre", + "item.create.empty_blaze_burner": "Leerer Lohenbrenner", + "item.create.empty_schematic": "Leerer Bauplan", + "item.create.experience_nugget": "Erfahrungsklumpen", + "item.create.extendo_grip": "Extendo Griff", + "item.create.filter": "Filter", + "item.create.furnace_minecart_contraption": "Antriebsloren Vorrichtung", + "item.create.goggles": "Ingenieursbrille", + "item.create.golden_sheet": "Goldblech", + "item.create.handheld_worldshaper": "Geländeformer", + "item.create.honey_bucket": "Honigeimer", + "item.create.honeyed_apple": "Honigapfel", + "item.create.incomplete_cogwheel": "Unfertiges Zahnrad", + "item.create.incomplete_large_cogwheel": "Unfertiges großes Zahnrad", + "item.create.incomplete_precision_mechanism": "Unfertiges Präzisionsgetriebe", + "item.create.iron_sheet": "Eisenblech", + "item.create.linked_controller": "Verbundener Kontroller", + "item.create.minecart_contraption": "Loren Vorrichtung", + "item.create.minecart_coupling": "Lorenkupplung", + "item.create.polished_rose_quartz": "Polierter Rosenquarz", + "item.create.potato_cannon": "Kartoffelkanone", + "item.create.powdered_obsidian": "Pulverisierter Obsidian", + "item.create.precision_mechanism": "Präzisionsgetriebe", + "item.create.propeller": "Propeller", + "item.create.raw_zinc": "Rohzink", + "item.create.red_sand_paper": "Rotes Schmirgelpapier", + "item.create.refined_radiance": "Raffinierter Glanz", + "item.create.rose_quartz": "Rosenquarz", + "item.create.sand_paper": "Schmirgelpapier", + "item.create.schematic": "Bauplan", + "item.create.schematic_and_quill": "Bauplan und Feder", + "item.create.shadow_steel": "Schattenstahl", + "item.create.super_glue": "Superkleber", + "item.create.sweet_roll": "Rosinenschnecke", + "item.create.tree_fertilizer": "Baumdünger", + "item.create.vertical_gearbox": "Vertikales Getriebe", + "item.create.wand_of_symmetry": "Symmetriestab", + "item.create.wheat_flour": "Weizenmehl", + "item.create.whisk": "Rührstab", + "item.create.wrench": "Schraubenschlüssel", + "item.create.zinc_ingot": "Zinkbarren", + "item.create.zinc_nugget": "Zinkklumpen", + + + "_": "->------------------------] Advancements [------------------------<-", + + "advancement.create.root": "Willkommen zu Create", + "advancement.create.root.desc": "Es ist Zeit mit dem Bauen von tollen Apparaten zu starten!", + "advancement.create.andesite_alloy": "Alliterationen in Massen", + "advancement.create.andesite_alloy.desc": "Create's Materialien haben verrückte Namen, Eisenlegierung ist im Deutschen leider keine.", + "advancement.create.its_alive": "Es ist am leben!", + "advancement.create.its_alive.desc": "Gucke deinem erstem beweglichen Teil beim drehen zu.", + "advancement.create.shifting_gears": "Wechsel deine Gänge", + "advancement.create.shifting_gears.desc": "Verbinde ein großes Zahnrad mit einem kleinem, um die Geschwindigkeit deiner Apparate zu verändern.", + "advancement.create.overstressed": "Überfordert", + "advancement.create.overstressed.desc": "Erfahre die Limits der Belastung aus erster Hand.", + "advancement.create.belt": "Befördere es alles", + "advancement.create.belt.desc": "Verbinde zwei Wellen mit einem Mechanischem Riemen", + "advancement.create.tunnel": "Geht in Deckung!", + "advancement.create.tunnel.desc": "Verschönere deinen Mechanischem Riemen mit einem Tunnel.", + "advancement.create.splitter_tunnel": "Divide & Conquer", + "advancement.create.splitter_tunnel.desc": "Mache einen Teiler aus einer Gruppe von Messingtunneln.", + "advancement.create.chute": "Abstürzen", + "advancement.create.chute.desc": "Platziere eine Rinne, das vertikale Gegenstück des Riemens.", + "advancement.create.upward_chute": "Luftentführung", + "advancement.create.upward_chute.desc": "Sieh einen geworfenen Gegenstand in eine propellerbetriebene Rinne fliegen.", + "advancement.create.belt_funnel": "Klappernde Klappen", + "advancement.create.belt_funnel.desc": "Platziere einen seitwärts schauenden Riementrichter auf einem Förderband oder einem Depot um einen speziellen Typ zu erstellen.", + "advancement.create.belt_funnel_kiss": "Die Hühnchen und die Klappen", + "advancement.create.belt_funnel_kiss.desc": "Lasse zwei an Mechanischen Riemen befestigte Riementrichter sich küssen.", + "advancement.create.fan": "Mechanischer Luftbändiger", + "advancement.create.fan.desc": "Reite den Luftstrom eines eingeschlossenen Propellers.", + "advancement.create.fan_lava": "Geothermische Heizung", + "advancement.create.fan_lava.desc": "Bleibe in einem Luftzug, der Dinge schmilzt, hängen.", + "advancement.create.fan_water": "Verrücktes Waschen", + "advancement.create.fan_water.desc": "Bleibe in einem Luftzug, der Dinge wäscht, hängen.", + "advancement.create.fan_smoke": "Mechanischer Balg", + "advancement.create.fan_smoke.desc": "Bleibe in einem Luftzug, der Dinge räuchert, hängen.", + "advancement.create.wrench": "Komfortabel Einstellen", + "advancement.create.wrench.desc": "Stelle einen Schraubenschlüssel her, der beim Bauen von Vorrichtungen hilft. ", + "advancement.create.goggles": "Stress-O-Vision", + "advancement.create.goggles.desc": "Stelle Ingenieursbrillen her, die beim Bekommen von kinetischen Informationen von Bauteilen, hilft.", + "advancement.create.speedometer": "Aber wie schnell genau?", + "advancement.create.speedometer.desc": "Platziere und schalte ein Tachometer ein. Schau es dir durch deine Ingenieursbrille an und lese den genauen Wert ab.", + "advancement.create.stressometer": "Aber wie belastet genau?", + "advancement.create.stressometer.desc": "Platziere und schalte ein Stressometer ein. Schau es dir durch deine Ingenieursbrille an und lese den genauen Wert ab.", + "advancement.create.aesthetics": "Boom, Ästhetik!", + "advancement.create.aesthetics.desc": "Plaziere Halterungen an Wellen, Rohren und Zahnrädern.", + "advancement.create.reinforced": "Boom, verstärkt!!", + "advancement.create.reinforced.desc": "Verwende passende Rahmen für Wellen, Rohre und Riemen.", + "advancement.create.water_wheel": "Angespannte Hydraulik", + "advancement.create.water_wheel.desc": "Plaziere ein Wasserrad und versuche es zum drehen zu bringen!", + "advancement.create.chocolate_wheel": "Leckere Energie", + "advancement.create.chocolate_wheel.desc": "Lasse ein Wasserad mit geschmolzerner Schokolade laufen.", + "advancement.create.lava_wheel": "Magmarad", + "advancement.create.lava_wheel.desc": "Das sollte nicht funktioniert haben.", + "advancement.create.cuckoo": "Ist es Zeit?", + "advancement.create.cuckoo.desc": "Bekomme mit, wie eine Kuckucksuhr Schlafenszeit ankündigt.", + "advancement.create.millstone": "Taschenmahlstein", + "advancement.create.millstone.desc": "Plaziere und aktiviere einen Mahlstein.", + "advancement.create.windmill": "Eine leichte Brise", + "advancement.create.windmill.desc": "Baue eine Windmühle.", + "advancement.create.maxed_windmill": "Eine starke Briese", + "advancement.create.maxed_windmill.desc": "Baue eine Windmühle mit maximaler stärke.", + "advancement.create.andesite_casing": "Das Andesit Alter", + "advancement.create.andesite_casing.desc": "Verwende Andesite Legierungen und Holz, um einen einfachen Rahmen zu erstellen.", + "advancement.create.mechanical_drill": "Stationäre Brecher", + "advancement.create.mechanical_drill.desc": "Plaziere und treibe einen Mechanischen Bohrer.", + "advancement.create.press": "Presse macht 'Bonk'!", + "advancement.create.press.desc": "Plaziere und treibe eine Mechanische Presse an um Bleche zu erstellen.", + "advancement.create.polished_rose_quartz": "Pinke Diamanten", + "advancement.create.polished_rose_quartz.desc": "Verwende ein Schmiergelpapier um Rosenquarz zu polieren bis er transparent wird.", + "advancement.create.electron_tube": "Piep piep", + "advancement.create.electron_tube.desc": "Mache ein paar Elektronenröhren, nützlich in weniger primitiven Maschienerien.", + "advancement.create.mechanical_saw": "Stationäres Hacken", + "advancement.create.mechanical_saw.desc": "Plaziere und verwende eine Mechanische Säge.", + "advancement.create.basin": "Beckenbetrieb", + "advancement.create.basin.desc": "Stelle ein Behälter auf und versuche Gegenstände reinzuwerfen.", + "advancement.create.mixer": "Misch es zusammen", + "advancement.create.mixer.desc": "Plaziere einen mechanischen Mixer über dem Behälter, treibe ihn an und starte mit dem Mixen von Zutaten.", + "advancement.create.blaze_burner": "Ein lebender Kamin", + "advancement.create.blaze_burner.desc": "Bekomme einen Lohenbrenner.", + "advancement.create.compact": "Automatische Verdichtunge", + "advancement.create.compact.desc": "Verwende eine Presse und einen Behälter um ein paar Gegenstände zu verdichten.", + "advancement.create.brass": "Tatsächliche Legierungen", + "advancement.create.brass.desc": "Verwende zerkleinertes Kupfererz und zerkleinertes Zinkerz um messing herzustellen.", + "advancement.create.brass_casing": "Das Messingzeitalter", + "advancement.create.brass_casing.desc": "Verwende das neu erhaltene Messing und etwas Holz, um mehr fortgeschrittene Rahmen herzustellen.", + "advancement.create.copper_casing": "Das Kupferzeitalter", + "advancement.create.copper_casing.desc": "Verwende Kupferbleche und Holz, um Kupferrahmen herzustellen.", + "advancement.create.spout": "Platsch", + "advancement.create.spout.desc": "Schaue einem Flüssigkeitsgegenstand zu, wie es von einem Ausguss gefüllt wird.", + "advancement.create.spout_potion": "Globale Brauerei", + "advancement.create.spout_potion.desc": "Schaue einem Ausguss zu, wie er eine Flasche mit einem Trank füllt.", + "advancement.create.chocolate": "Eine Welt der Fantasie", + "advancement.create.chocolate.desc": "Bekomme einen Schokoladeneimer", + "advancement.create.item_drain": "Entwässerung", + "advancement.create.item_drain.desc": "Schaue einem mit Flüssigkeit gefülltem Gegenstand zu, wie es in einem Abfluss getrocknet wird.", + "advancement.create.chained_item_drain": "Lass es rollen!", + "advancement.create.chained_item_drain.desc": "Schaue einem Gegenstand zu, wie er über mehrere verbundene Abflüsse rollt.", + "advancement.create.glass_pipe": "Flussspion", + "advancement.create.glass_pipe.desc": "Beobachte durch ein Rohr mit Fenster, wie Flüssigkeiten durch ein Rohr fließen. Gerade Rohre bekommen ein Fenster, wenn du mit einem Schraubenschlüssel auf diese klickst.", + "advancement.create.pipe_collision": "Lass niemals die Ströme kreuzen!", + "advancement.create.pipe_collision.desc": "Schaue zwei Flüssigkeiten zu, wie sie sich in deinen Rohren treffen.", + "advancement.create.pipe_spill": "Da ist ein Leck!", + "advancement.create.pipe_spill.desc": "Schaue eiem offenem Rohrende zu, wie es Flüssigkeiten aufsaugt oder rauslässt.", + "advancement.create.hose_pulley": "Industrielles Verschütten", + "advancement.create.hose_pulley.desc": "Lass eine Umlenkrolle ab und schau ihr zu, wie sie Wasser aufsaugt oder rauslässt.", + "advancement.create.infinite_water": "Die Ozeane entwässern", + "advancement.create.infinite_water.desc": "Pumpe aus einem Gewässer, das groß genug ist, um als unendlich bezeichnet zu werden.", + "advancement.create.infinite_lava": "Den Kern des Planeten aufsaugen", + "advancement.create.infinite_lava.desc": "Pumpe aus einem Lavasee, der groß genug ist, um als unendlich bezeichnet zu werden.", + "advancement.create.infinite_chocolate": "In Fantasie ertrinken", + "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": "Platziere und aktiviere ein paar Mechanische Handwerkseinheiten.", + "advancement.create.clockwork_bearing": "Uhr-Apparat", + "advancement.create.clockwork_bearing.desc": "Montiere eine Struktur auf einem Uhrwerk-Lager.", + "advancement.create.nixie_tube": "Ein Zeichen von Stil", + "advancement.create.nixie_tube.desc": "Erhalte und platziere ein Paar Nixie-Röhren.", + "advancement.create.deployer": "Stupse, platziere und attackiere!", + "advancement.create.deployer.desc": "Platziere und betreibe ein Einsatzgerät, die perfekte Reflektion deiner selbst.", + "advancement.create.speed_controller": "Ingenieure hassen ihn!", + "advancement.create.speed_controller.desc": "Platziere einen Rotationsgeschwindigkeitsregler, das ultimative Gerät, um Zahnräder zu ändern.", + "advancement.create.flywheel": "Herz der Fabrik", + "advancement.create.flywheel.desc": "Verbinde einen Ofenmotor erfolgreich mit einem Schwungrad.", + "advancement.create.overstress_flywheel": "Hohe Stresslevel", + "advancement.create.overstress_flywheel.desc": "Überstresse einen Ofenmotor.", + "advancement.create.precision_mechanism": "Komplexe Kuriositäten", + "advancement.create.precision_mechanism.desc": "Montiere ein Präzisionsgetriebe.", + "advancement.create.mechanical_arm": "Beschäftigte Hände!", + "advancement.create.mechanical_arm.desc": "Stelle einen mechanischen Arm her, wähle Ein- und Ausgang, platziere ihn und gib ihm Energie; beobachte dann, wie es für dich all die Arbeit macht.", + "advancement.create.musical_arm": "Spiel mir meine Erkennungsmelodie!", + "advancement.create.musical_arm.desc": "Beobachte einen mechanischen Arm dabei, wie er einen Plattenspieler bedient.", + "advancement.create.arm_many_targets": "Organisiertron", + "advancement.create.arm_many_targets.desc": "Programmiere einen mechanischen Arm so, dass er zehn oder mehr Ausgänge hat.", + "advancement.create.arm_blaze_burner": "Verbrennertron", + "advancement.create.arm_blaze_burner.desc": "Weise einen mechanischen Arm an, einen Lohenbrenner zu befeuern.", + "advancement.create.fist_bump": "Verstampf es, Bro!", + "advancement.create.fist_bump.desc": "Lass zwei Einsatzgeräte aufeinander treffen.", + "advancement.create.crushing_wheel": "Ein gigantisches Paar", + "advancement.create.crushing_wheel.desc": "Stelle Mahlwerkräder her, um mehr Materialien effizienter zu zermahlen.", + "advancement.create.blaze_cake": "Zuckerrausch", + "advancement.create.blaze_cake.desc": "Backe deinem Lohenbrenner einen speziellen Kuchen.", + "advancement.create.wand_of_symmetry": "Strahlende Spiegel", + "advancement.create.wand_of_symmetry.desc": "Stelle einen Symmetriestab her.", + "advancement.create.extendo_grip": "Boioioing!", + "advancement.create.extendo_grip.desc": "Beschaffe einen Extendo Griff.", + "advancement.create.potato_cannon": "Fwump!", + "advancement.create.potato_cannon.desc": "Besiege einen Gegner mit deiner Kartoffelkanone.", + "advancement.create.dual_extendo_grip": "Ultimatives Boing-Zeitalter", + "advancement.create.dual_extendo_grip.desc": "Schwinge zwei Extendo Griffe gleichzeitig für eine übermenschliche Reichweite.", + "advancement.create.eob": "Ende der Beta", + "advancement.create.eob.desc": "Erwarte mehr Inhalt in der Zukunft. <3", + + + "_": "->------------------------] UI & Messages [------------------------<-", + + "itemGroup.create.base": "Create", + "itemGroup.create.palettes": "Create Paletten", + + "death.attack.create.crush": "%1$s stolperte in ein Mahlwerk", + "death.attack.create.crush.player": "%1$s wurde von %2$s in ein Mahlwerk gestoßen", + "death.attack.create.fan_fire": "%1$s hat heiße Luft eingeatmet", + "death.attack.create.fan_fire.player": "%1$s wurde von %2$s in einen Räucherofen gestoßen", + "death.attack.create.fan_lava": "%1$s wurde von Lava verweht", + "death.attack.create.fan_lava.player": "%1$s wurde von %2$s in einen Schmelzer geworfen", + "death.attack.create.mechanical_drill": "%1$s wurde von einem Bohrer durchlöchert", + "death.attack.create.mechanical_drill.player": "%1$s wurde von %2$s vor einen Bohrer gestoßen", + "death.attack.create.mechanical_saw": "%1$s wurde zersägt", + "death.attack.create.mechanical_saw.player": "%1$s wurde von %2$s in eine Säge gestoßen", + "death.attack.create.potato_cannon": "%1$s wurde von %2$s's Kartoffelkanone erschossen", + "death.attack.create.potato_cannon.item": "%1$s wurde von %2$s's %3$s erschossen", + "death.attack.create.cuckoo_clock_explosion": "%1$s wurde durch eine falsche Kuckucksuhr gesprengt", + "death.attack.create.cuckoo_clock_explosion.player": "%1$s wurde von einer manipulierten Kuckucksuhr in die Luft gejagt", + + "create.block.deployer.damage_source_name": "einem Finger", + "create.block.cart_assembler.invalid": "Platziere deinen Lorenmonteur auf einer Schiene.", + + "create.menu.return": "Zurück zum vorherigen Menü", + "create.menu.configure": "Konfigurieren...", + "create.menu.ponder_index": "Ponder-Verzeichnis", + "create.menu.only_ingame": "Im Pause-Menü verfügbar", + "create.menu.project_page": "Projektseite", + "create.menu.report_bugs": "Fehler melden", + "create.menu.support": "Unterstütze uns", + + "create.recipe.crushing": "Mahlen (Mahlwerk)", + "create.recipe.milling": "Mahlen (Mahlstein)", + "create.recipe.fan_washing": "Sammelwaschen", + "create.recipe.fan_washing.fan": "Propeller hinter fließendem Wasser", + "create.recipe.fan_smoking": "Sammelräuchern", + "create.recipe.fan_smoking.fan": "Propeller hinter Feuer", + "create.recipe.fan_haunting": "Sammelspuken", + "create.recipe.fan_haunting.fan": "Propeller hinter Seelenfeuer", + "create.recipe.fan_blasting": "Sammelschmelzen", + "create.recipe.fan_blasting.fan": "Propeller hinter Lava", + "create.recipe.pressing": "Mechanische Presse", + "create.recipe.mixing": "Mixen", + "create.recipe.deploying": "Einsetzen", + "create.recipe.automatic_shapeless": "Automatisiertes Formloses Bauen", + "create.recipe.automatic_brewing": "Automatisiertes Brauen", + "create.recipe.packing": "Komprimieren", + "create.recipe.automatic_packing": "Automatisiertes Packen", + "create.recipe.sawing": "Sägen", + "create.recipe.mechanical_crafting": "Mechanisches Bauen", + "create.recipe.automatic_shaped": "Automatisiertes Geformtes Bauen", + "create.recipe.block_cutting": "Schneiden von Blöcken", + "create.recipe.wood_cutting": "Schneiden von Holz", + "create.recipe.sandpaper_polishing": "Schleifen", + "create.recipe.mystery_conversion": "Mysteriöse Konvertierung", + "create.recipe.spout_filling": "Befüllung per Ausguss", + "create.recipe.draining": "Gegenstandsablassung", + "create.recipe.sequenced_assembly": "Sequentielles Bauen", + "create.recipe.assembly.next": "Danach: %1$s", + "create.recipe.assembly.step": "Schritt %1$s:", + "create.recipe.assembly.progress": "Fortschritt: %1$s/%2$s", + "create.recipe.assembly.pressing": "Verarbeite in einer Presse", + "create.recipe.assembly.spout_filling_fluid": "Gieße %1$s aus", + "create.recipe.assembly.deploying_item": "Setze %1$s ein", + "create.recipe.assembly.cutting": "Zerteile mit einer Säge", + "create.recipe.assembly.repeat": "Wiederhole die Sequenz %1$s mal", + "create.recipe.assembly.junk": "Zufälliges Nebenprodukt", + "create.recipe.processing.chance": "Chance: %1$s%%", + "create.recipe.deploying.not_consumed": "Nicht verbraucht", + "create.recipe.heat_requirement.none": "Keine Hitze benötigt", + "create.recipe.heat_requirement.heated": "Wenig Hitze benötigt", + "create.recipe.heat_requirement.superheated": "Viel Hitze benötigt", + + "create.generic.range": "Reichweite", + "create.generic.radius": "Radius", + "create.generic.width": "Breite", + "create.generic.height": "Höhe", + "create.generic.length": "Länge", + "create.generic.speed": "Geschwindigkeit", + "create.generic.delay": "Verzögerung", + "create.generic.unit.ticks": "Ticks", + "create.generic.unit.seconds": "Sekunden", + "create.generic.unit.minutes": "Minuten", + "create.generic.unit.rpm": "RPM", + "create.generic.unit.stress": "su", + "create.generic.unit.degrees": "°", + "create.generic.unit.millibuckets": "%1$smB", + "create.generic.clockwise": "Uhrzeigersinn", + "create.generic.counter_clockwise": "Gegen-Uhrzeigersinn", + + "create.action.scroll": "Wechseln", + "create.action.confirm": "Bestätigen", + "create.action.abort": "Abbrechen", + "create.action.saveToFile": "Speichern", + "create.action.discard": "Löschen", + + "create.keyinfo.toolmenu": "Werkzeugmenü", + "create.keyinfo.toolbelt": "Erreiche naheliegende Werkzeugkästen", + "create.keyinfo.scrollup": "Simuliere Mausrad hoch (In der Welt)", + "create.keyinfo.scrolldown": "Simuliere Mausrad runter (In der Welt)", + + "create.gui.scrollInput.defaultTitle": "Wähle eine Option:", + "create.gui.scrollInput.scrollToModify": "Mausrad zum Ändern", + "create.gui.scrollInput.scrollToAdjustAmount": "Mausrad um Betrag anzupassen", + "create.gui.scrollInput.scrollToSelect": "Mausrad zum Auswählen", + "create.gui.scrollInput.shiftScrollsFaster": "Shift zum schnelleren Auswählen", + "create.gui.toolmenu.focusKey": "Halte [%1$s] zum Fokussieren", + "create.gui.toolmenu.cycle": "[Mausrad] zum Wechseln", + + "create.toolbox.unequip": "Entfernen: %1$s", + "create.toolbox.outOfRange": "Werkzeugkasten des gehaltenen Gegenstands nicht in Reichweite", + "create.toolbox.detach": "Verfolgung stoppen und Gegenstand behalten", + "create.toolbox.depositAll": "Lege Gegenstände in nahegelegenen Werkzeugkasten zurück", + "create.toolbox.depositBox": "Lege Gegenstand in Werkzeugkasten zurück", + + "create.gui.symmetryWand.mirrorType": "Spiegeln", + "create.gui.symmetryWand.orientation": "Orientierung", + + "create.symmetry.mirror.plane": "Einfach Spiegeln", + "create.symmetry.mirror.doublePlane": "Rechteckig", + "create.symmetry.mirror.triplePlane": "Achteckig", + + "create.orientation.orthogonal": "Orthogonal", + "create.orientation.diagonal": "Diagonal", + "create.orientation.horizontal": "Horizontal", + "create.orientation.alongZ": "Entlang Z", + "create.orientation.alongX": "Entlang X", + + "create.gui.terrainzapper.title": "Tragbarer Geländeformer", + "create.gui.terrainzapper.searchDiagonal": "Folge Diagonalen", + "create.gui.terrainzapper.searchFuzzy": "Ignoriere Kantenmaterial", + "create.gui.terrainzapper.patternSection": "Muster", + "create.gui.terrainzapper.pattern.solid": "Ausgefüllt", + "create.gui.terrainzapper.pattern.checkered": "Schachbrett", + "create.gui.terrainzapper.pattern.inversecheckered": "Invertiertes Schachbrett", + "create.gui.terrainzapper.pattern.chance25": "25% ausgefüllt", + "create.gui.terrainzapper.pattern.chance50": "50% ausgefüllt", + "create.gui.terrainzapper.pattern.chance75": "75% ausgefüllt", + "create.gui.terrainzapper.placement": "Platzierung", + "create.gui.terrainzapper.placement.merged": "Zusammengeführt", + "create.gui.terrainzapper.placement.attached": "Angefügt", + "create.gui.terrainzapper.placement.inserted": "Eingefügt", + "create.gui.terrainzapper.brush": "Pinsel", + "create.gui.terrainzapper.brush.cuboid": "Quader", + "create.gui.terrainzapper.brush.sphere": "Kugel", + "create.gui.terrainzapper.brush.cylinder": "Zylinder", + "create.gui.terrainzapper.brush.surface": "Fläche", + "create.gui.terrainzapper.brush.cluster": "Haufen", + "create.gui.terrainzapper.tool": "Werkzeug", + "create.gui.terrainzapper.tool.fill": "Füllen", + "create.gui.terrainzapper.tool.place": "Platzieren", + "create.gui.terrainzapper.tool.replace": "Ersetzen", + "create.gui.terrainzapper.tool.clear": "Löschen", + "create.gui.terrainzapper.tool.overlay": "Überlagern", + "create.gui.terrainzapper.tool.flatten": "Abflachen", + + "create.terrainzapper.shiftRightClickToSet": "Shift-Rechts-Klick um eine Form auszuwählen", + "create.terrainzapper.usingBlock": "Nutze: %1$s", + "create.terrainzapper.leftClickToSet": "Linksklicke einen Block, um ein Material auszuwählen", + + "create.minecart_coupling.two_couplings_max": "Jede Lore kann nicht mehr als zwei Kupplungen haben", + "create.minecart_coupling.unloaded": "Teile des Zuges scheinen in nicht geladenen Chunks zu sein", + "create.minecart_coupling.no_loops": "Kupplungen können keine Schleife bilden", + "create.minecart_coupling.removed": "Alle Kupplungen wurden von der Lore entfernt", + "create.minecart_coupling.too_far": "Loren sind zu weit entfernt", + + "create.contraptions.movement_mode": "Bewegungsmodus", + "create.contraptions.movement_mode.move_place": "Platziere immer wenn gestoppt", + "create.contraptions.movement_mode.move_place_returned": "Platziere nur in Ausgangsposition", + "create.contraptions.movement_mode.move_never_place": "Platziere nur wenn Anker zerstört", + "create.contraptions.movement_mode.rotate_place": "Platziere immer wenn gestoppt", + "create.contraptions.movement_mode.rotate_place_returned": "Platziere nur nahe des Ausgangswinkels", + "create.contraptions.movement_mode.rotate_never_place": "Platziere nur wenn Anker zerstört", + "create.contraptions.cart_movement_mode": "Loren-Bewegungsmodus", + "create.contraptions.cart_movement_mode.rotate": "Zeige immer in Bewegungsrichtung", + "create.contraptions.cart_movement_mode.rotate_paused": "Pausiere Akteure beim drehen", + "create.contraptions.cart_movement_mode.rotation_locked": "Sperre Rotation", + "create.contraptions.windmill.rotation_direction": "Rotationsrichtung", + "create.contraptions.clockwork.clock_hands": "Uhrzeiger", + "create.contraptions.clockwork.hour_first": "Stundenzeiger zuerst", + "create.contraptions.clockwork.minute_first": "Minutenzeiger zuerst", + "create.contraptions.clockwork.hour_first_24": "24-Stunden-Zeiger zuerst", + + "create.logistics.filter": "Filter", + "create.logistics.recipe_filter": "Rezeptfilter", + "create.logistics.fluid_filter": "Flüssigkeitsfilter", + "create.logistics.firstFrequency": "Freq. #1", + "create.logistics.secondFrequency": "Freq. #2", + "create.logistics.filter.apply": "Filter angewendet auf %1$s.", + "create.logistics.filter.apply_click_again": "Filter angewendet auf %1$s, klicke nochmal um Menge zu kopieren.", + "create.logistics.filter.apply_count": "Extraktionsmenge auf Filter angewendet.", + + "create.gui.goggles.generator_stats": "Generator Statistik:", + "create.gui.goggles.kinetic_stats": "Kinetische Statistik:", + "create.gui.goggles.at_current_speed": "bei derzeitiger Geschwindigkeit", + "create.gui.goggles.pole_length": "Stab Länge:", + "create.gui.goggles.fluid_container": "Flüssigkeitstank Info:", + "create.gui.goggles.fluid_container.capacity": "Kapazität:", + "create.gui.assembly.exception": "Diese Vorrichtung konnte nicht gebaut werden:", + "create.gui.assembly.exception.unmovableBlock": "Unbeweglicher Block (%4$s) bei [%1$s,%2$s,%3$s]", + "create.gui.assembly.exception.chunkNotLoaded": "Der Block bei [%1$s,%2$s,%3$s] war nicht in einem geladenen Chunk", + "create.gui.assembly.exception.structureTooLarge": "In dieser Vorrichtung sind zu viele Blöcke enthalten.\nDas konfigurierte Maximum ist: %1$s", + "create.gui.assembly.exception.tooManyPistonPoles": "Es sind zu viele Pleuelverlängerungen an diesen Kolben angebracht.\nDas konfigurierte Maximum ist: %1$s", + "create.gui.assembly.exception.noPistonPoles": "Dem Kolben fehlen ein paar Pleuelverlängerungen", + "create.gui.assembly.exception.not_enough_sails": "Angebrachte Struktur enthält nicht genug segelähnliche Blöcke: %1$s\nEin Minimum von %2$s ist erforderlich", + "create.gui.gauge.info_header": "Messgerät Information:", + "create.gui.speedometer.title": "Rotationsgeschwindigkeit", + "create.gui.stressometer.title": "Netzwerkbelastung", + "create.gui.stressometer.capacity": "Verbleibende Kapazität", + "create.gui.stressometer.overstressed": "Überbelastet", + "create.gui.stressometer.no_rotation": "Keine Rotation", + "create.gui.contraptions.not_fast_enough": "Wie es scheint dreht sich dieses %1$s _nicht_ _schnell_ _genug_.", + "create.gui.contraptions.network_overstressed": "Wie es scheint ist diese Vorrichtung _überbelastet_. Füge mehr Quellen hinzu oder _verlangsame_ die Komponenten mit hoher _Belastungsauswirkung_.", + "create.gui.adjustable_crate.title": "Lagerraum", + "create.gui.adjustable_crate.storageSpace": "Lagerraum", + "create.gui.stockpile_switch.title": "Vorratssensor", + "create.gui.stockpile_switch.invert_signal": "Invertiere Signal", + "create.gui.stockpile_switch.move_to_lower_at": "Gehe zu unterer Spur bei %1$s%%", + "create.gui.stockpile_switch.move_to_upper_at": "Gehe zu oberer Spur bei %1$s%%", + "create.gui.sequenced_gearshift.title": "Sequenzielle Gangschaltung", + "create.gui.sequenced_gearshift.instruction": "Befehl", + "create.gui.sequenced_gearshift.instruction.turn_angle.descriptive": "Drehe um Winkel", + "create.gui.sequenced_gearshift.instruction.turn_angle": "Drehe", + "create.gui.sequenced_gearshift.instruction.turn_angle.angle": "Winkel", + "create.gui.sequenced_gearshift.instruction.turn_distance.descriptive": "Drehe um Kolben/Seilrolle/Portalkran zu bewegen", + "create.gui.sequenced_gearshift.instruction.turn_distance": "Kolben", + "create.gui.sequenced_gearshift.instruction.turn_distance.distance": "Distanz", + "create.gui.sequenced_gearshift.instruction.delay.descriptive": "Timed Delay", + "create.gui.sequenced_gearshift.instruction.delay": "Verzögerung", + "create.gui.sequenced_gearshift.instruction.delay.duration": "Dauer", + "create.gui.sequenced_gearshift.instruction.end.descriptive": "Beende", + "create.gui.sequenced_gearshift.instruction.end": "Beende", + "create.gui.sequenced_gearshift.instruction.await.descriptive": "Warte auf neues Redstone Signal", + "create.gui.sequenced_gearshift.instruction.await": "Warte", + "create.gui.sequenced_gearshift.speed": "Geschwindigkeit, Richtung", + "create.gui.sequenced_gearshift.speed.forward": "Eingangsgeschwindigkeit, Vorwärts", + "create.gui.sequenced_gearshift.speed.forward_fast": "Doppelte Geschwindigkeit, Vorwärts", + "create.gui.sequenced_gearshift.speed.back": "Eingangsgeschwindigkeit, Umgekehrt", + "create.gui.sequenced_gearshift.speed.back_fast": "Doppelte Geschwindigkeit, Umgekehrt", + + "create.schematicAndQuill.dimensions": "Bauplangröße: %1$sx%2$sx%3$s", + "create.schematicAndQuill.firstPos": "Erste Position festgelegt.", + "create.schematicAndQuill.secondPos": "Zweite Position festgelegt.", + "create.schematicAndQuill.noTarget": "Halte [Strg] zur Auswahl von Luft.", + "create.schematicAndQuill.abort": "Auswahl zurückgesetzt.", + "create.schematicAndQuill.title": "Bauplanname:", + "create.schematicAndQuill.convert": "Speichere und lade sofort hoch", + "create.schematicAndQuill.fallbackName": "Mein Bauplan", + "create.schematicAndQuill.saved": "Gespeichert als %1$s", + + "create.schematic.invalid": "[!] Ungültiger Gegenstand - Benutze einen Bauplantisch.", + "create.schematic.position": "Position", + "create.schematic.rotation": "Rotation", + "create.schematic.rotation.none": "Nein", + "create.schematic.rotation.cw90": "90° im Uhrzeigersinn", + "create.schematic.rotation.cw180": "180° im Uhrzeigersinn", + "create.schematic.rotation.cw270": "270° im Uhrzeigersinn", + "create.schematic.mirror": "Spiegeln", + "create.schematic.mirror.none": "Nein", + "create.schematic.mirror.frontBack": "Vor-Zurück", + "create.schematic.mirror.leftRight": "Links-Rechts", + "create.schematic.tool.deploy": "Positionieren", + "create.schematic.tool.move": "XZ Bewegen", + "create.schematic.tool.movey": "Y Bewegen", + "create.schematic.tool.rotate": "Rotieren", + "create.schematic.tool.print": "Drucken", + "create.schematic.tool.flip": "Umdrehen", + "create.schematic.tool.deploy.description.0": "Bewegt die Struktur an einen anderen ort.", + "create.schematic.tool.deploy.description.1": "Mit Rechtsklick auf den Boden platzieren.", + "create.schematic.tool.deploy.description.2": "[Strg] halten, um in einer bestimmten Entfernung zu arbeiten.", + "create.schematic.tool.deploy.description.3": "[Strg]-Mausrad um die Entfernung zu ändern.", + "create.schematic.tool.move.description.0": "Bewegt das Schema horizontal", + "create.schematic.tool.move.description.1": "Zeig auf das Schema und benutze [Strg]-Mausrad.", + "create.schematic.tool.move.description.2": "", + "create.schematic.tool.move.description.3": "", + "create.schematic.tool.movey.description.0": "Bewegt das Schema vertikal", + "create.schematic.tool.movey.description.1": "[Strg]-Mausrad zum hoch- und runterbewegen", + "create.schematic.tool.movey.description.2": "", + "create.schematic.tool.movey.description.3": "", + "create.schematic.tool.rotate.description.0": "Rotiert das Schema um seine Mitte.", + "create.schematic.tool.rotate.description.1": "[Strg]-Mausrad für eine Drehung um 90°", + "create.schematic.tool.rotate.description.2": "", + "create.schematic.tool.rotate.description.3": "", + "create.schematic.tool.print.description.0": "Platziert sofort die Struktur in der Welt", + "create.schematic.tool.print.description.1": "[Rechtsklick] zum Bestätigen der Platzierung an der aktuellen Position.", + "create.schematic.tool.print.description.2": "Dieses Werkzeug ist nur für den Kreativ-Modus.", + "create.schematic.tool.print.description.3": "", + "create.schematic.tool.flip.description.0": "Kehrt das Schema entlang der ausgewählten Oberfläche um.", + "create.schematic.tool.flip.description.1": "Zeige auf das Schema und benutze [Strg]-Mausrad.", + "create.schematic.tool.flip.description.2": "", + "create.schematic.tool.flip.description.3": "", + + "create.schematics.synchronizing": "Synchronisation...", + "create.schematics.uploadTooLarge": "Dein Bauplan ist zu groß.", + "create.schematics.maxAllowedSize": "Die maximale Bauplan-Dateigröße ist:", + + "create.gui.schematicTable.refresh": "Aktualisiere Dateien", + "create.gui.schematicTable.open_folder": "Öffne Ordner", + "create.gui.schematicTable.title": "Bauplantisch", + "create.gui.schematicTable.availableSchematics": "Verfügbare Baupläne", + "create.gui.schematicTable.noSchematics": "Keine gespeicherten Baupläne", + "create.gui.schematicTable.uploading": "Hochladen...", + "create.gui.schematicTable.finished": "Hochgeladen!", + "create.gui.schematicannon.title": "Bauplankanone", + "create.gui.schematicannon.listPrinter": "Materiallistendruck", + "create.gui.schematicannon.gunpowderLevel": "Schwarzpulver bei %1$s%%", + "create.gui.schematicannon.shotsRemaining": "%1$s Schuss übrig", + "create.gui.schematicannon.shotsRemainingWithBackup": "Mit Reserve: %1$s", + "create.gui.schematicannon.optionEnabled": "Aktiviert", + "create.gui.schematicannon.optionDisabled": "Deaktiviert", + "create.gui.schematicannon.showOptions": "Zeige Drucker Einstellungen", + "create.gui.schematicannon.option.dontReplaceSolid": "Feste Blöcke nicht ersetzen", + "create.gui.schematicannon.option.replaceWithSolid": "Feste Blöcke mit festen ersetzen", + "create.gui.schematicannon.option.replaceWithAny": "Feste Blöcke immer ersetzen", + "create.gui.schematicannon.option.replaceWithEmpty": "Feste Blöcke mit Leere ersetzen", + "create.gui.schematicannon.option.skipMissing": "Fehlende Blöcke ignorieren", + "create.gui.schematicannon.option.skipTileEntities": "Tile Entities ignorieren", + "create.gui.schematicannon.slot.gunpowder": "Füge Schwarzpulver hinzu um die Kanone zu betreiben", + "create.gui.schematicannon.slot.listPrinter": "Platziere hier Bücher um eine Checkliste für deinen Bauplan zu drucken", + "create.gui.schematicannon.slot.schematic": "Füge Bauplan hier hinzu. Stelle sicher dass er an einer spezifischen Position bereitgestellt wird.", + "create.gui.schematicannon.option.skipMissing.description": "Wenn die Bauplankanone einen benötigten Block nicht finden kann, wird sie einfach beim nächsten weiter machen.", + "create.gui.schematicannon.option.skipTileEntities.description": "Die Bauplankanone wird versuchen, Blöcke mit extra Daten, beispielsweise Truhen, nicht zu ersetzen.", + "create.gui.schematicannon.option.dontReplaceSolid.description": "Die Kanone wird ausschließlich nicht feste Blöcke und Luft in ihrem Arbeitsbereich ersetzen.", + "create.gui.schematicannon.option.replaceWithSolid.description": "Die Kanone wird feste Blöcke nur dann ersetzen, wenn an der Position vorher bereits ein fester Block war.", + "create.gui.schematicannon.option.replaceWithAny.description": "Die Kanone wird feste Blöcke ersetzen, wenn der Bauplan an der Position einen Block enthält.", + "create.gui.schematicannon.option.replaceWithEmpty.description": "Die Kanone wird alle Blöcke im Arbeitsbereich entfernen.", + + "create.schematicannon.status.idle": "Aus", + "create.schematicannon.status.ready": "Bereit", + "create.schematicannon.status.running": "An", + "create.schematicannon.status.finished": "Fertig", + "create.schematicannon.status.paused": "Pausiert", + "create.schematicannon.status.stopped": "Gestoppt", + "create.schematicannon.status.noGunpowder": "Schwarzpulver leer", + "create.schematicannon.status.targetNotLoaded": "Kein Block geladen", + "create.schematicannon.status.targetOutsideRange": "Ziel zu weit weg", + "create.schematicannon.status.searching": "Suchen", + "create.schematicannon.status.skipping": "Überspringen", + "create.schematicannon.status.missingBlock": "Fehlender Block:", + "create.schematicannon.status.placing": "Platzieren", + "create.schematicannon.status.clearing": "Blöcke löschen", + "create.schematicannon.status.schematicInvalid": "Bauplan ungültig", + "create.schematicannon.status.schematicNotPlaced": "Bauplan nicht positioniert", + "create.schematicannon.status.schematicExpired": "Bauplandatei abgelaufen", + + "create.materialChecklist": "Material Checkliste", + "create.materialChecklist.blocksNotLoaded": "* Haftungsausschluss *\n\nMaterialliste könnte inakkurat seit da es möglich ist dass releveante Chunks nicht geladen sind.", + + "create.gui.filter.deny_list": "Verweigert-Liste", + "create.gui.filter.deny_list.description": "Gegenstände werden nur weitergegeben wenn sie NICHT mit einem der oben genannten übereinstimmen. Eine leere Verweigert-Liste akzeptiert alles.", + "create.gui.filter.allow_list": "Erlaubt-Liste", + "create.gui.filter.allow_list.description": "Gegenstände werden nur weitergegeben wenn sie mit einem der oben genannten übereinstimmen. Eine leere Erlaubt-Liste lehnt alles ab.", + "create.gui.filter.respect_data": "Respektiere Daten", + "create.gui.filter.respect_data.description": "Gegenstände stimmen nur überein wenn ihre Haltbarkeit, Verzauberungen, und andere Attribute ebenfalls passen.", + "create.gui.filter.ignore_data": "Ignoriere Daten", + "create.gui.filter.ignore_data.description": "Gegenstände stimmen unabhängig ihrer Attribute überein.", + + "create.item_attributes.placeable": "ist plazierbar", + "create.item_attributes.placeable.inverted": "ist nicht plazierbar", + "create.item_attributes.consumable": "kann man essen", + "create.item_attributes.consumable.inverted": "kann man nicht essen", + "create.item_attributes.fluid_container": "kann Flüssigkeiten speichern", + "create.item_attributes.fluid_container.inverted": "kann Flüssigkeiten nicht speichern", + "create.item_attributes.enchanted": "ist verzaubert", + "create.item_attributes.enchanted.inverted": "ist nicht verzaubert", + "create.item_attributes.max_enchanted": "ist mit dem maximalen Level verzaubert", + "create.item_attributes.max_enchanted.inverted": "ist nicht mit dem maximalen Level verzaubert", + "create.item_attributes.renamed": "hat einen benutzerdefinierten Namen", + "create.item_attributes.renamed.inverted": "hat keinen benutzerdefinierten Namen", + "create.item_attributes.damaged": "ist beschädigt", + "create.item_attributes.damaged.inverted": "ist nicht beschädigt", + "create.item_attributes.badly_damaged": "ist stark beschädigt", + "create.item_attributes.badly_damaged.inverted": "ist nicht stark beschädigt", + "create.item_attributes.not_stackable": "kann nicht gestapelt werden", + "create.item_attributes.not_stackable.inverted": "kann gestapelt werden", + "create.item_attributes.equipable": "kann ausgerüstet werden", + "create.item_attributes.equipable.inverted": "kann nicht ausgerüstet werden", + "create.item_attributes.furnace_fuel": "ist Brennstoff", + "create.item_attributes.furnace_fuel.inverted": "ist nicht Brennstoff", + "create.item_attributes.washable": "kann gewaschen werden", + "create.item_attributes.washable.inverted": "kann nicht gewaschen werden", + "create.item_attributes.hauntable": "kann gespenstisch sein", + "create.item_attributes.hauntable.inverted": "kann nicht gespenstisch sein", + "create.item_attributes.crushable": "kann zerkleinert werden", + "create.item_attributes.crushable.inverted": "kann nicht zerkleinert werden", + "create.item_attributes.smeltable": "kann geschmolzen werden", + "create.item_attributes.smeltable.inverted": "kann nicht geschmolzen werden", + "create.item_attributes.smokable": "kann geräuchert werden", + "create.item_attributes.smokable.inverted": "kann nicht geräuchert werden", + "create.item_attributes.blastable": "ist im Schmelzofen schmelzbar", + "create.item_attributes.blastable.inverted": "ist nicht im Schmelzofen schmelzbar", + "create.item_attributes.shulker_level.full": "voll", + "create.item_attributes.shulker_level.empty": "leer", + "create.item_attributes.shulker_level.partial": "teilweise gefüllt", + "create.item_attributes.in_tag": "ist mit %1$s makiert", + "create.item_attributes.in_tag.inverted": "ist nicht mit %1$s markoiert", + "create.item_attributes.in_item_group": "ist in der Gruppe '%1$s'", + "create.item_attributes.in_item_group.inverted": "ist nicht in der Gruppe '%1$s'", + "create.item_attributes.added_by": "wurde von %1$s hinzugefügt", + "create.item_attributes.added_by.inverted": "wurde nicht von %1$s hinzugefügt", + "create.item_attributes.has_enchant": "ist mit %1$s verzaubert", + "create.item_attributes.has_enchant.inverted": "ist nicht mit %1$s verzaubert", + "create.item_attributes.color": "ist %1$s gefärbt", + "create.item_attributes.color.inverted": "ist nicht %1$s gefärbt", + "create.item_attributes.has_fluid": "enthält %1$s", + "create.item_attributes.has_fluid.inverted": "enthält nicht %1$s", + "create.item_attributes.has_name": "hat den Benutzerdefinierten Namen %1$s", + "create.item_attributes.has_name.inverted": "hat nicht den benutzerdefinierten Namen %1$s", + "create.item_attributes.book_author": "wurde verfasst von %1$s", + "create.item_attributes.book_author.inverted": "wurde nicht von %1$s verfasst", + "create.item_attributes.book_copy_original": "ist ein Original", + "create.item_attributes.book_copy_original.inverted": "ist kein Original", + "create.item_attributes.book_copy_first": "ist die erste Kopie", + "create.item_attributes.book_copy_first.inverted": "ist nicht die erste Kopie", + "create.item_attributes.book_copy_second": "ist die zweite Kopie", + "create.item_attributes.book_copy_second.inverted": "ist nicht die Zweite Kopie", + "create.item_attributes.book_copy_tattered": "ist ein zerfetztes Durcheinander", + "create.item_attributes.book_copy_tattered.inverted": "sit kein zerfetztes Durcheinander", + "create.item_attributes.astralsorcery_amulet": "verbessert %1$s", + "create.item_attributes.astralsorcery_amulet.inverted": "verbessert nicht %1$s", + "create.item_attributes.astralsorcery_constellation": "ist abgestimmt auf %1$s", + "create.item_attributes.astralsorcery_constellation.inverted": "ist nicht abgestimmt auf %1$s", + "create.item_attributes.astralsorcery_crystal": "hat das Kristallattribut %1$s", + "create.item_attributes.astralsorcery_crystal.inverted": "hat nicht das Kristallattribut %1$s", + "create.item_attributes.astralsorcery_perk_gem": "hat das Vorteilsattribut %1$s", + "create.item_attributes.astralsorcery_perk_gem.inverted": "hat nicht das Vorteilsattribut %1$s", + + "create.gui.attribute_filter.no_selected_attributes": "Keine Attribute ausgewählt", + "create.gui.attribute_filter.selected_attributes": "Ausgewählte Attribute:", + "create.gui.attribute_filter.add_attribute": "Füge Attribut zur Liste hinzu", + "create.gui.attribute_filter.add_inverted_attribute": "Füge gegenteiliges Attribut zur Liste hinzu", + "create.gui.attribute_filter.allow_list_disjunctive": "Erlaubt-Liste (Irgendeins)", + "create.gui.attribute_filter.allow_list_disjunctive.description": "Gegenstände werden weitergereicht wenn sie irgendeins der ausgewählten Attribute haben.", + "create.gui.attribute_filter.allow_list_conjunctive": "Erlaubt-Liste (Alle)", + "create.gui.attribute_filter.allow_list_conjunctive.description": "Gegenstände werden nur weitergereicht wenn sie ALLE der ausgewählten Attribute haben.", + "create.gui.attribute_filter.deny_list": "Verweigert-Liste", + "create.gui.attribute_filter.deny_list.description": "Gegenstände werden nur weitergereicht wenn sie KEINES der ausgewählten Attribute haben.", + "create.gui.attribute_filter.add_reference_item": "Füge Referenz-Gegenstand hinzu", + + "create.tooltip.holdForDescription": "Halte [%1$s] für eine Zusammenfassung", + "create.tooltip.holdForControls": "Halte [%1$s] für die Steuerung", + "create.tooltip.keyShift": "Shift", + "create.tooltip.keyCtrl": "Strg", + "create.tooltip.speedRequirement": "Geschwindigkeitsanforderung: %1$s", + "create.tooltip.speedRequirement.none": "Keine", + "create.tooltip.speedRequirement.slow": "Langsam", + "create.tooltip.speedRequirement.medium": "Moderat", + "create.tooltip.speedRequirement.fast": "Schnell", + "create.tooltip.stressImpact": "Kinetische Belastungsauswirkung: %1$s", + "create.tooltip.stressImpact.low": "Niedrig", + "create.tooltip.stressImpact.medium": "Moderat", + "create.tooltip.stressImpact.high": "Hoch", + "create.tooltip.stressImpact.overstressed": "Überbelastet", + "create.tooltip.capacityProvided": "Kinetische Belastungskapazität: %1$s", + "create.tooltip.capacityProvided.low": "Niedrig", + "create.tooltip.capacityProvided.medium": "Mittel", + "create.tooltip.capacityProvided.high": "Groß", + "create.tooltip.generationSpeed": "Generiert mit %1$s %2$s", + "create.tooltip.analogStrength": "Analoge Stärke: %1$s/15", + + "create.mechanical_arm.extract_from": "Nehme Gegenstände von %1$s", + "create.mechanical_arm.deposit_to": "Lege Gegenstände in %1$s", + "create.mechanical_arm.summary": "Mechanischer Arm hat %1$s Eingabe(n) und %2$s Ausgabe(n).", + "create.mechanical_arm.points_outside_range": "%1$s ausgewählte(r) Interaktionspunkt(e) entfernt aufgrund Reichweitenlimitierungen.", + + "create.weighted_ejector.target_set": "Ziel ausgewählt", + "create.weighted_ejector.target_not_valid": "Werfe auf angrenzenden Block (Ziel war nicht gültig)", + "create.weighted_ejector.no_target": "Werfe auf angrenzenden Block (Kein Ziel war ausgewählt)", + "create.weighted_ejector.targeting": "Werfe nach [%1$s,%2$s,%3$s]", + "create.weighted_ejector.stack_size": "Geworfene Stapelgröße", + + "create.logistics.when_multiple_outputs_available": "Wenn mehrere Ausgaben verfügbar sind", + + "create.mechanical_arm.selection_mode.round_robin": "Round Robin", + "create.mechanical_arm.selection_mode.forced_round_robin": "Gezwungener Round Robin", + "create.mechanical_arm.selection_mode.prefer_first": "Bevorzuge erstes Ziel", + + "create.tunnel.selection_mode.split": "Aufteilung", + "create.tunnel.selection_mode.forced_split": "Gezwungene Aufteilung", + "create.tunnel.selection_mode.round_robin": "Round Robin", + "create.tunnel.selection_mode.forced_round_robin": "Gezwungener Round Robin", + "create.tunnel.selection_mode.prefer_nearest": "Bevorzuge Naheliegensten", + "create.tunnel.selection_mode.randomize": "Zufällig", + "create.tunnel.selection_mode.synchronize": "Synchronisiere Eingaben", + + "create.tooltip.chute.header": "Rinnen Information", + "create.tooltip.chute.items_move_down": "Gegenstände bewegen sich nach unten", + "create.tooltip.chute.items_move_up": "Gegenstände bewegen sich nach oben", + "create.tooltip.chute.no_fans_attached": "Keine angeschlossenen Propeller", + "create.tooltip.chute.fans_push_up": "Propeller schieben von unterhalb", + "create.tooltip.chute.fans_push_down": "Propeller schieben von oberhalb", + "create.tooltip.chute.fans_pull_up": "Propeller ziehen von oberhalb", + "create.tooltip.chute.fans_pull_down": "Propeller ziehen von unterhalb", + "create.tooltip.chute.contains": "Enthält: %1$s x%2$s", + "create.tooltip.brass_tunnel.contains": "Verteilt derzeit:", + "create.tooltip.brass_tunnel.contains_entry": "> %1$s x%2$s", + "create.tooltip.brass_tunnel.retrieve": "Rechtsklicken, um zu entnehmen", + + "create.linked_controller.bind_mode": "Bindungsmodus aktiv", + "create.linked_controller.press_keybind": "Drücke %1$s, %2$s, %3$s, %4$s, %5$s oder %6$s, um diese Frequenz zum zugehörigen Schlüssel zu binden", + "create.linked_controller.key_bound": "Frequenz wurde an %1$s gebunden", + "create.linked_controller.frequency_slot_1": "Taste: %1$s, Freq. #1", + "create.linked_controller.frequency_slot_2": "Taste: %1$s, Freq. #2", + + "create.crafting_blueprint.crafting_slot": "Zutatenplatz", + "create.crafting_blueprint.filter_items_viable": "Gegenstände des erweiterten Filters sind tragfähig", + "create.crafting_blueprint.display_slot": "Anzeigeplatz", + "create.crafting_blueprint.inferred": "Abgeleitet vom Rezept", + "create.crafting_blueprint.manually_assigned": "Manuell zugewiesen", + "create.crafting_blueprint.secondary_display_slot": "Sekundärer Anzeigeplatz", + "create.crafting_blueprint.optional": "Optional", + + "create.potato_cannon.ammo.attack_damage": "%1$s Angriffsschaden", + "create.potato_cannon.ammo.reload_ticks": "%1$s Neulade-Ticks", + "create.potato_cannon.ammo.knockback": "%1$s Rückstoß", + + "create.hint.hose_pulley.title": "Endlose Versorgung", + "create.hint.hose_pulley": "Das angewählte Gewässer wird als unendlich betrachtet.", + "create.hint.mechanical_arm_no_targets.title": "Keine Ziele", + "create.hint.mechanical_arm_no_targets": "Es schein dieser _Mechanische_ _Arm_ hat keine _Ziele_. Wähle Riemen, Depots oder Trichter und andere Blöcke indem du sie _Rechts-Klickst_ während du den _Mechanischen_ _Arm_ in deiner _Hand_ _hälst_.", + "create.hint.empty_bearing.title": "Aktualisiere Lager", + "create.hint.empty_bearing": "_Rechts-Klicke_ das Lager mit einer _leeren_ _Hand_ um die Struktur die du davor gebaut hast _anzubringen_.", + "create.hint.full_deployer.title": "Einsatzgerät Gegenstand Überlauf", + "create.hint.full_deployer": "Es scheint, dieses _Einsatzgerät_ enthält _überflüssige_ _Gegenstände_ die _extrahiert_ werden müssen. Nutze _Trichter_ oder anderes um ihn von seinem Überfluss zu befreien.", + + "create.gui.config.overlay1": "Hi :)", + "create.gui.config.overlay2": "Dies ist ein Beispiel Overlay", + "create.gui.config.overlay3": "Klicke oder ziehe mit deiner Maus", + "create.gui.config.overlay4": "um diese Vorschau zu bewegen", + "create.gui.config.overlay5": "Drücke ESC um diesen Bildschirm zu verlassen", + "create.gui.config.overlay6": "und die neue Position zu speichern", + "create.gui.config.overlay7": "Benutze /create overlay reset", + "create.gui.config.overlay8": "um die Standardposition zurückzusetzen", + + "create.command.killTPSCommand": "killtps", + "create.command.killTPSCommand.status.slowed_by.0": "[Create]: Server Tick ist derzeitig um %s ms verlangsamt :o", + "create.command.killTPSCommand.status.slowed_by.1": "[Create]: Server Tick ist jetzt um %s ms verlangsamt >:)", + "create.command.killTPSCommand.status.slowed_by.2": "[Create]: Server Tick ist jetzt wieder auf normaler Geschwindigkeit :D", + "create.command.killTPSCommand.status.usage.0": "[Create]: Benutze /killtps stop um den Server Tick wieder auf normale Geschwindigkeit zu bringen", + "create.command.killTPSCommand.status.usage.1": "[Create]: Benutze /killtps start um den Server Tick künstlich zu verlangsamen", + "create.command.killTPSCommand.argument.tickTime": "tickTime", + + "create.contraption.minecart_contraption_too_big": "Dieses Lorengespann ist zu groß, um es aufzusammeln", + "create.contraption.minecart_contraption_illegal_pickup": "Eine mysteriöse Kraft hält dieses Lorengespann in dieser Welt", + + + "_": "->------------------------] Subtitles [------------------------<-", + + "create.subtitle.contraption_disassemble": "Apparat stoppt", + "create.subtitle.peculiar_bell_use": "Eigenartige Glockenschläge", + "create.subtitle.mixing": "Mix-Geräusche", + "create.subtitle.mechanical_press_activation_belt": "Mechanische Presse klingt", + "create.subtitle.fwoomp": "Kartoffel-Kanone macht fwumps", + "create.subtitle.worldshaper_place": "Geländeformer zippt", + "create.subtitle.sanding_long": "Schleifgeräusche", + "create.subtitle.crushing_1": "Zermahlgeräusche", + "create.subtitle.depot_slide": "Gegenstand gleitet", + "create.subtitle.saw_activate_stone": "Mechanische Säge wird aktiviert", + "create.subtitle.blaze_munch": "Lohe kaut glücklich", + "create.subtitle.funnel_flap": "Klappe klappert", + "create.subtitle.schematicannon_finish": "Bauplankanone endet", + "create.subtitle.haunted_bell_use": "Spukglocke läutet", + "create.subtitle.scroll_value": "Klick bei der Bildlauf-Eingabe", + "create.subtitle.crafter_craft": "Hersteller stellt her", + "create.subtitle.controller_put": "Kontroller stößt auf", + "create.subtitle.cranking": "Handkurbel dreht", + "create.subtitle.wrench_remove": "Teil entfernt", + "create.subtitle.sanding_short": "Schleifgeräusche", + "create.subtitle.cogs": "Zahnräder rattern", + "create.subtitle.slime_added": "Schleim matscht", + "create.subtitle.wrench_rotate": "Schraubenschlüssel benutzt", + "create.subtitle.potato_hit": "Gemüse schlägt ein", + "create.subtitle.saw_activate_wood": "Mechanische Säge wird aktiviert", + "create.subtitle.haunted_bell_convert": "Spukglocke erwacht", + "create.subtitle.deny": "Ablehnendes boop", + "create.subtitle.controller_click": "Kontroller klickt", + "create.subtitle.schematicannon_launch_block": "Bauplankanone schießt", + "create.subtitle.copper_armor_equip": "Taucherausrüstung klirrt", + "create.subtitle.controller_take": "Lesepult geleert", + "create.subtitle.mechanical_press_activation": "Mechanische Presse wird aktiviert", + "create.subtitle.contraption_assemble": "Apparat bewegt sich", + "create.subtitle.crafter_click": "Hersteller klickt", + "create.subtitle.depot_plop": "Gegenstand landet", + "create.subtitle.confirm": "Bestätigendes Klick", + + + "_": "->------------------------] Item Descriptions [------------------------<-", + + "item.create.example_item.tooltip": "BEISPIELGEGENSTAND (nur ein Marker, um zu zeigen, dass dieser Tooltip existiert)", + "item.create.example_item.tooltip.summary": "Eine Kurzbeschreibung eines Gegenstands. _Unterstriche_ heben einen Begriff hervor.", + "item.create.example_item.tooltip.condition1": "Wenn dies", + "item.create.example_item.tooltip.behaviour1": "dann tut dieser Gegenstand das. (Verhalten wird mit der Shift-Taste angezeigt)", + "item.create.example_item.tooltip.condition2": "Und wenn dies", + "item.create.example_item.tooltip.behaviour2": "kannst du so viele Verhaltensweisen hinzufügen wie du magst", + "item.create.example_item.tooltip.control1": "Wenn Strg gedrückt ist", + "item.create.example_item.tooltip.action1": "wird diese Steuerung gezeigt.", + + "block.create.wooden_bracket.tooltip": "Holzhalterung", + "block.create.wooden_bracket.tooltip.summary": "_Verziere_ deine _Wellen_, _Zahnräder_ und _Rohre_ mit einem gemütlichem und hölzernem Stück Verstärkung.", + + "block.create.metal_bracket.tooltip": "Metallhalterung", + "block.create.metal_bracket.tooltip.summary": "_Verziere_ deine _Wellen_, _Zahnräder_ und _Rohre_ mit einem industriellem und robustem Stück Verstärkung.", + + "block.create.seat.tooltip": "Sitz", + "block.create.seat.tooltip.summary": "Setz dich hin und genieße die Fahrt! Der Sitz verankert den Spieler an einem sich bewegendem Apparat. Hervorragend auch für statische Möbel! Kommt in verschiedensten Farben.", + "block.create.seat.tooltip.condition1": "Rechtsklick auf den Sitz", + "block.create.seat.tooltip.behaviour1": "Setzt den Spieler auf den _Sitz_. Drücke L-Shift, um den _Sitz_ wieder zu verlassen.", + + "item.create.blaze_cake.tooltip": "Lohenkuchen", + "item.create.blaze_cake.tooltip.summary": "Ein leckeres Vergnügen für deine hart arbeitenden _Lohenbrenner_. Feuert die alle an!", + + "item.create.wand_of_symmetry.tooltip": "SYMMETRIESTAB", + "item.create.wand_of_symmetry.tooltip.summary": "Spiegelt deine Blockplatzierung perfekt über die konfigurierten Ebenen.", + "item.create.wand_of_symmetry.tooltip.condition1": "Wenn in der Schnellleiste", + "item.create.wand_of_symmetry.tooltip.behaviour1": "Bleibt aktiv", + "item.create.wand_of_symmetry.tooltip.control1": "R-Klick auf Boden", + "item.create.wand_of_symmetry.tooltip.action1": "_Erstellt_ oder _Bewegt_ den Spiegel", + "item.create.wand_of_symmetry.tooltip.control2": "R-Klick in die Luft", + "item.create.wand_of_symmetry.tooltip.action2": "_Löscht_ den aktiven Spiegel", + "item.create.wand_of_symmetry.tooltip.control3": "R-Klick beim Schleichen", + "item.create.wand_of_symmetry.tooltip.action3": "Öffnet das _Konfigurationsmenü_", + + "item.create.handheld_worldshaper.tooltip": "GELÄNDEFORMER", + "item.create.handheld_worldshaper.tooltip.summary": "Cleveres Werkzeug, um _Landschaften_ und _Geländeformen_ zu erschaffen.", + "item.create.handheld_worldshaper.tooltip.control1": "L-Klick einen Block", + "item.create.handheld_worldshaper.tooltip.action1": "Setzt den ausgewählten Block als Block, welcher vom Werkzeug platziert wird.", + "item.create.handheld_worldshaper.tooltip.control2": "R-Klick einen Block", + "item.create.handheld_worldshaper.tooltip.action2": "Nutzt die ausgewählte _Einstellung_ auf den ausgewählten Block.", + "item.create.handheld_worldshaper.tooltip.control3": "R-Klick beim Schleichen", + "item.create.handheld_worldshaper.tooltip.action3": "Öffnet die _Konfigurationsoberfläche_", + + "item.create.tree_fertilizer.tooltip": "BAUMDÜNGER", + "item.create.tree_fertilizer.tooltip.summary": "Eine Mischung aus Mineralien, die sich für weit verbreitete Baumarten eignet", + "item.create.tree_fertilizer.tooltip.condition1": "Wenn auf einen Setzling angewendet", + "item.create.tree_fertilizer.tooltip.behaviour1": "Lässt Bäume unabhängig vom Platz um sie herum wachsen", + + "item.create.extendo_grip.tooltip": "Extendo Griff", + "item.create.extendo_grip.tooltip.summary": "Boioioing! _Erweitert die Reichweite_ des Anwenders enorm. Kann mit Luftdruck eines _kupfernen Rückentanks_ betrieben werden.", + "item.create.extendo_grip.tooltip.condition1": "Wenn in der zweiten Hand", + "item.create.extendo_grip.tooltip.behaviour1": "Erweitert die _maximale Reichweite_ von benutzbaren Gegenständen in der Haupthand.", + "item.create.extendo_grip.tooltip.condition2": "Während ein Kupferner Rückentank ausgerüstet ist", + "item.create.extendo_grip.tooltip.behaviour2": "Es wird _keine_ _Haltbarkeit_ verbraucht. Stattdessen wird _Luftdruck_ vom Tank genutzt", + + "item.create.potato_cannon.tooltip": "KARTOFFELKANONE", + "item.create.potato_cannon.tooltip.summary": "Fwump! Katapultiere dein selbstgewachsenes Gemüse auf deine Feinde. Kann mit Luftdruck eines _kupfernen Rückentanks_ betrieben werden.", + "item.create.potato_cannon.tooltip.condition1": "Wenn R-Klick", + "item.create.potato_cannon.tooltip.behaviour1": "_Schießt_ einen passenden Gegenstand aus deinem _Inventar_.", + "item.create.potato_cannon.tooltip.condition2": "Während ein Kupferner Rückentank ausgerüstet ist", + "item.create.potato_cannon.tooltip.behaviour2": "Es wird _keine_ _Haltbarkeit_ verbraucht. Stattdessen wird _Luftdruck_ vom Tank genutzt", + + "item.create.filter.tooltip": "Filter", + "item.create.filter.tooltip.summary": "_Kontrolliert den Ausgang_ und _Eingang_ eines logistischen Gerätes mit höherer Genauigkeit und vergleicht ein _Set von Gegenständen_ oder _vernetzten Filtern_.", + "item.create.filter.tooltip.condition1": "Wenn in gefiltertem Anzeigeplatz", + "item.create.filter.tooltip.behaviour1": "_Kontrolliert_ den Gegenstandsfluss basierend auf seiner _Konfiguration_.", + "item.create.filter.tooltip.condition2": "Wenn R-Klick", + "item.create.filter.tooltip.behaviour2": "Öffnet die _Konfigurationsoberfläche_.", + + "item.create.attribute_filter.tooltip": "Attribut Filter", + "item.create.attribute_filter.tooltip.summary": "_Kontrolliert den Ausgang_ und _Eingang_ eines logistischen Gerätes mit höherer Genauigkeit und vergleicht ein _Set von Gegenstands-Attributen_ und _-Kategorien_.", + "item.create.attribute_filter.tooltip.condition1": "Wenn in gefiltertem Anzeigeplatz", + "item.create.attribute_filter.tooltip.behaviour1": "_Kontrolliert_ den Gegenstandsfluss basierend auf seiner _Konfiguration_.", + "item.create.attribute_filter.tooltip.condition2": "Wenn R-Klick", + "item.create.attribute_filter.tooltip.behaviour2": "Öffnet die _Konfigurationsoberfläche_.", + + "item.create.empty_schematic.tooltip": "LEERER BAUPLAN", + "item.create.empty_schematic.tooltip.summary": "Wird für die Herstellung und das Schreiben auf dem _Bauplantisch_ verwendet", + + "item.create.schematic.tooltip": "BAUPLAN", + "item.create.schematic.tooltip.summary": "Beschreibt eine Struktur, die in der Welt platziert werden kann. Positioniere das Hologramm wie gewünscht und verwende eine _Bauplankanone_, um die Struktur zu bauen.", + "item.create.schematic.tooltip.condition1": "Wenn gehalten", + "item.create.schematic.tooltip.behaviour1": "Kann mit den Werkzeugen auf dem Bildschirm positioniert werden", + "item.create.schematic.tooltip.control1": "R-Klick beim Schleichen", + "item.create.schematic.tooltip.action1": "Öffnet ein Menü zur Eingabe exakter _Koordinaten_.", + + "item.create.schematic_and_quill.tooltip": "BAUPLAN UND FEDER", + "item.create.schematic_and_quill.tooltip.summary": "Wird benutzt, um eine existierende Struktur in der Welt als eine .nbt-Datei zu speichern.", + "item.create.schematic_and_quill.tooltip.condition1": "Schritt 1", + "item.create.schematic_and_quill.tooltip.behaviour1": "Wähle zwei Eckpunkte mit R-Klick aus", + "item.create.schematic_and_quill.tooltip.condition2": "Schritt 2", + "item.create.schematic_and_quill.tooltip.behaviour2": "Auf den Oberflächen _Strg-Scrollen_ um die Größe zu verändern. Nochmals R-Klick um zu speichern.", + "item.create.schematic_and_quill.tooltip.control1": "R-Klick", + "item.create.schematic_and_quill.tooltip.action1": "Einen Eckpunkt auswählen / Speichern bestätigen", + "item.create.schematic_and_quill.tooltip.control2": "Strg gedrückt halten", + "item.create.schematic_and_quill.tooltip.action2": "Wählt Punkte _mitten_ _in_ _der_ _Luft._ _Scrolle,_ um die Distanz anzupassen.", + "item.create.schematic_and_quill.tooltip.control3": "R-Klick beim Schleichen", + "item.create.schematic_and_quill.tooltip.action3": "_Setzt_ die Auswahl _zurück_ und löscht sie.", + + "block.create.schematicannon.tooltip": "BAUPLANKANONE", + "block.create.schematicannon.tooltip.summary": "Schießt Blöcke, um eine Struktur nach einem positionierten _Bauplan_ zu errichten. Benutzt Gegenstände aus benachbarten Inventaren und _Schießpulver_ als Treibstoff.", + "block.create.schematicannon.tooltip.condition1": "Wenn gerechtsklickt", + "block.create.schematicannon.tooltip.behaviour1": "Öffnet das _Interface_", + + "block.create.schematic_table.tooltip": "BAUPLANTISCH", + "block.create.schematic_table.tooltip.summary": "Schreibt gespeicherte Baupläne auf einen _Leeren_ _Bauplan_", + "block.create.schematic_table.tooltip.condition1": "Wenn ein Leerer Bauplan bereitgestellt wird", + "block.create.schematic_table.tooltip.behaviour1": "Lädt eine ausgewählte Datei von deinem Bauplan-Ordner hoch", + + "item.create.goggles.tooltip": "Ingenieursbrille", + "item.create.goggles.tooltip.summary": "Eine Brille, welche _Informationen_ zur _Kinetik_ eines Blocks zeigt.", + "item.create.goggles.tooltip.condition1": "Wenn getragen", + "item.create.goggles.tooltip.behaviour1": "Zeigt _farbige Indikatoren_ basieren auf dem _Geschwindigkeitslevel_ einer platzierten kinetischen Komponente. Auch der _Stresslevel_ und die _Kapazität_ bestimmter Komponenten werden angezeigt.", + "item.create.goggles.tooltip.condition2": "Wenn auf ein Messgerät geschaut wird", + "item.create.goggles.tooltip.behaviour2": "Zeigt detaillierte Informationen über _Geschwindigkeit_ oder _Stress_ des Netzes an, mit dem das Messgerät verbunden ist.", + "item.create.goggles.tooltip.condition3": "Wenn auf einen Flüssigkeitsbehälter geschaut wird", + "item.create.goggles.tooltip.behaviour3": "Zeigt detaillierte Informationen zur _Kapazität_ des Blocks und welche _Flüssigkeit_ darin aufbewahrt wird.", + + "item.create.wrench.tooltip": "SCHRAUBENSCHLÜSSEL", + "item.create.wrench.tooltip.summary": "Ein nützliches Werkzeug, um mit kinetischen Vorrichtungen zu arbeiten. Kann benutzt werden, um Komponenten zu _rotieren_, _zerlegen_ und sie zu _konfigurieren_.", + "item.create.wrench.tooltip.control1": "R-Klick einen kinetischen Block", + "item.create.wrench.tooltip.action1": "_Rotiert Komponenten_ in Richtung oder weg von der Fläche, mit der du mit ihr interagiert hast.", + "item.create.wrench.tooltip.control2": "R-Klick beim Schleichen", + "item.create.wrench.tooltip.action2": "_Nimmt kinetische Komponenten auseinander_ und platziert sie zurück in _dein Inventar_.", + + "block.create.nozzle.tooltip": "DÜSE", + "block.create.nozzle.tooltip.summary": "Wird an der Vorderseite eines _ummantelnden Lüfters_ angebracht, um seine Wirkung auf Entitäten in _alle Richtungen_ zu verteilen.", + + "block.create.cuckoo_clock.tooltip": "KUCKUCKSUHR", + "block.create.cuckoo_clock.tooltip.summary": "Feine Handwerkskunst, um einen Raum zu _dekorieren_ und _die Zeit im Auge zu behalten_.", + "block.create.cuckoo_clock.tooltip.condition1": "Wenn kinetisch angetrieben", + "block.create.cuckoo_clock.tooltip.behaviour1": "Zeigt die _aktuelle Zeit_ und spielt zweimal täglich eine Melodie. Wird einmal _mittags_ und einmal zur _Dämmerung_, sobald _Spieler schlafen können_, aktiviert", + + "block.create.turntable.tooltip": "DREHTISCH", + "block.create.turntable.tooltip.summary": "Wandelt _Rotationsenergie_ in starkes Schwindelgefühl um.", + + "block.create.toolbox.tooltip": "WERKZEUGKASTEN", + "block.create.toolbox.tooltip.summary": "Der liebste Begleiter jedes Erfinders. Praktischerweise _behält_ der Werkzeugkasten eine große Menge von _8 verschiedenen_ Gegenstandstypen.", + "block.create.toolbox.tooltip.condition1": "Wenn augehoben", + "block.create.toolbox.tooltip.behaviour1": "Behält _Inhalt_ des _Inventars_.", + "block.create.toolbox.tooltip.condition2": "Wenn in Reichweite platziert", + "block.create.toolbox.tooltip.behaviour2": "_Spieler_ in der _Nähe_ können die _Taste_ für den _Werkzeugkasten_ drücken, um einen Fernzugriff auf den Inhalt zu bekommen.", + "block.create.toolbox.tooltip.condition3": "Wenn R-Klick", + "block.create.toolbox.tooltip.behaviour3": "Öffnet die _Behälteroberfläche_", + + "block.create.stockpile_switch.tooltip": "VORRATSSENSOR", + "block.create.stockpile_switch.tooltip.summary": "Schaltet ein Redstone-Signal ein oder aus, basierend auf der _Speichermenge_ im verbundenen Behälter.", + "block.create.stockpile_switch.tooltip.condition1": "Wenn unter dem unteren Limit", + "block.create.stockpile_switch.tooltip.behaviour1": "Wird das Redstone-Signal ausgeschaltet.", + + "block.create.content_observer.tooltip": "INHALTSBEOBACHTER", + "block.create.content_observer.tooltip.summary": "_Erkennt Gegenstände_ oder _Flüssigkeiten_ in einem _Behälter_, einer _Röhre_ oder einem _Fließband_, die zum eingestellten _Filter_ passen.", + "block.create.content_observer.tooltip.condition1": "Bei der Beobachtung eines Containers", + "block.create.content_observer.tooltip.behaviour1": "Gibt einen _Redstone-Puls_ aus, während der beobachtete Behälter _passenden_ _Inhalt_ hat.", + "block.create.content_observer.tooltip.condition2": "Bei der Beobachtung eines Trichters", + "block.create.content_observer.tooltip.behaviour2": "Gibt einen _Redstone-Puls_ aus, wenn ein _passender_ Gegenstand _übertragen_ wird.", + + "block.create.creative_crate.tooltip": "BAUPLANKANONENMACHER", + "block.create.creative_crate.tooltip.summary": "Stellt einen unendlichen Vorrat an Blöcken für benachbarte _Bauplaenkanonen_ bereit.", + "block.create.creative_crate.tooltip.condition1": "Wenn Gegenstand in Filter Slot", + "block.create.creative_crate.tooltip.behaviour1": "Alles _extrahierende_ von diesem Container wird einen _endlosen Vorrat_ des angegebenen Gegenstands zur Verfügung stellen. In diese Kiste _eingefügte_ Gegenstände werden _entsorgt_.", + + "item.create.creative_blaze_cake.tooltip": "KREATIVER KUCHEN", + "item.create.creative_blaze_cake.tooltip.summary": "Eine sehr spezielle Behandlung, welche es erlaubt, des _Lohenbrenners_ _Hitzelevel einzustellen_. After eating this cake, Blaze Burners will _never run out of fuel_.", + "item.create.creative_blaze_cake.tooltip.condition1": "R-Klick auf einen _Lohenbrenner_", + "item.create.creative_blaze_cake.tooltip.behaviour1": "_Rastet_ das Hitzelevel des Lohenbrenners _ein_. Wenn nochmal angewandt wird, _zirkuliert_ der Lohenbrenner sein Hitzelevel.", + + "block.create.controller_rail.tooltip": "STEUERUNGSSCHIENE", + "block.create.controller_rail.tooltip.summary": "Eine _einseitige Antriebsschiene_, welche fähig ist, die _Geschwindigkeit_ von Loren _sehr genau_ einzustellen.", + "block.create.controller_rail.tooltip.condition1": "Wenn mit Redstone aktiviert", + "block.create.controller_rail.tooltip.behaviour1": "_Verschnellert_ oder _verlangsamt_ vorbeifahrende Loren basierend auf der _Signalstärke_. Überträgt Redstone-Energie auf benachbarte Steuerungsschienen. Wenn zwei Steuerungsschienen mit unterschiedlicher Signalstärke versorgt werden, interpolieren die Schienen zwischen ihnen ihr Signal.", + + "item.create.sand_paper.tooltip": "SCHMIRGELPAPIER", + "item.create.sand_paper.tooltip.summary": "Ein raues papier, welches benutzt wird, um _Materialien_ zu _polieren_. Kann automatisch von einem Einsatzgerät benutzt werden.", + "item.create.sand_paper.tooltip.condition1": "Wenn benutzt", + "item.create.sand_paper.tooltip.behaviour1": "Gibt den Gegenständen in der _Zweithand_ oder auf dem _Boden_, welches du _anguckst_, eine Politur.", + + "item.create.builders_tea.tooltip": "Baumeister-Tee", + "item.create.builders_tea.tooltip.summary": "Das perfekte Getränk, um den Tag zu starten - _Motivierend_ und _sättigend_.", + + "item.create.refined_radiance.tooltip": "RAFFINIERTER GLANZ", + "item.create.refined_radiance.tooltip.summary": "Ein chromatisches Material, das aus _absorbiertem Licht_ geschmiedet wird.", + "item.create.refined_radiance.tooltip.condition1": "In Arbeit", + "item.create.refined_radiance.tooltip.behaviour1": "Verwendungen für dieses Material werden in zukünftigen Versionen verfügbar sein.", + + "item.create.shadow_steel.tooltip": "SCHATTENSTAHL", + "item.create.shadow_steel.tooltip.summary": "Ein chromatisches Material, das _in der Leere_ geschmiedet wird.", + "item.create.shadow_steel.tooltip.condition1": "In Arbeit", + "item.create.shadow_steel.tooltip.behaviour1": "Verwendungen für dieses Material werden in zukünftigen Versionen verfügbar sein.", + + "item.create.linked_controller.tooltip": "VERBUNDENER KONTROLLER", + "item.create.linked_controller.tooltip.summary": "Erlaubt _händische_ _Kontrolle_ über _Redstone-Verbindungs-Frequenzen_, welche auf ihre _sechs_ _Knöpfe_ gebunden sind.", + "item.create.linked_controller.tooltip.condition1": "R-Klick", + "item.create.linked_controller.tooltip.behaviour1": "_Schaltet_ den Kontroller _um_. _Bewegungssteuerung_ wird übernommen, solange der Kontroller aktiv ist.", + "item.create.linked_controller.tooltip.condition2": "R-Klick beim Schleichen", + "item.create.linked_controller.tooltip.behaviour2": "Öffnet das Handbuch _Konfigurationsoberfläche_.", + "item.create.linked_controller.tooltip.condition3": "R-Klick auf einen Redstone-Verbindungs-Empfänger", + "item.create.linked_controller.tooltip.behaviour3": "Aktiviert den _Bindungsmodus_. Drücke einen der _sechs Einstellungen_, um sie auf die _Verbindungsfrequenz_ zu binden.", + "item.create.linked_controller.tooltip.condition4": "R-Klick auf ein Lesepult", + "item.create.linked_controller.tooltip.behaviour4": "Platziert einen Kontroller in das Lesepult, um es einfacher zu aktivieren. (R-Klick beim Schleichen, um es zurück zu nehmen)", + + "item.create.diving_helmet.tooltip": "TAUCHHELM", + "item.create.diving_helmet.tooltip.summary": "Mit einem _kupfernen_ _Rückentank_ kombiniert erlaubt es dem Anwender, _unter Wasser_ länger _atmen_ zu können.", + "item.create.diving_helmet.tooltip.condition1": "Wenn getragen", + "item.create.diving_helmet.tooltip.behaviour1": "Gibt den _Wasseratmungs-Effekt_, für welchen langsam _Luftdruck_ aus dem Rückentank gezogen wird.", + + "item.create.copper_backtank.tooltip": "KUPFERNER RÜCKENTANK", + "item.create.copper_backtank.tooltip.summary": "Ein _tragbarer_ _Tank_, um komprimierte Luft aufzubewahren.", + "item.create.copper_backtank.tooltip.condition1": "Wenn getragen", + "item.create.copper_backtank.tooltip.behaviour1": "Stellt _komprimierte_ _Luft_ für Ausrüstung zur Verfügung, welche es braucht.", + "item.create.copper_backtank.tooltip.condition2": "Wenn platziert und mit kinetischer Energie betrieben", + "item.create.copper_backtank.tooltip.behaviour2": "_Sammelt_ _komprimierte_ _Luft_ mit einer Geschwindigkeit basierend auf der Rotationsgeschwindigkeit.", + + "item.create.diving_boots.tooltip": "TAUCHSCHUHE", + "item.create.diving_boots.tooltip.summary": "Ein Paar _schwere_ _Schuhe_, welches es erlaubt, besser auf dem Grund des Ozenas zu reisen.", + "item.create.diving_boots.tooltip.condition1": "Wenn getragen", + "item.create.diving_boots.tooltip.behaviour1": "Anwender _sinkt_ _schneller_ und _kann nicht_ _schwimmen_. Gibt die Möglichkeit, unter Wasser zu _laufen_ und zu _springen_. Anwender wird auch nicht mehr von _mechanischen_ _Riemen_ beeinflusst.", + + "item.create.crafting_blueprint.tooltip": "HERSTELLUNGSBLAUPAUSE", + "item.create.crafting_blueprint.tooltip.summary": "Wird es auf eine Wand _platziert_, kann es genutzt werden, um _Zutatenanordnung_ für leichtere manuelle Herstellung zu _spezifizieren_. Jeder Anzeigeplatz steht für ein Rezept.", + "item.create.crafting_blueprint.condition1": "R-Klick leeren Anzeigeplatz", + "item.create.crafting_blueprint.behaviour1": "Öffnet ein _Herstellungsmenü_, damit du ein _Rezept_ _konfigurieren_ und Gegenstände darstellen kannst.", + "item.create.crafting_blueprint.condition2": "R-Klick konfigurierten Anzeigeplatz", + "item.create.crafting_blueprint.behaviour2": "Wendet das _konfigurierte_ _Rezept_ mit den passenden Zutaten aus deinem _Inventar_ an. _Schleiche_, um bis zu einem _Stapel_ von Gegenständen herzustellen.", + + "item.create.minecart_coupling.tooltip": "LORENKUPPLUNG", + "item.create.minecart_coupling.tooltip.summary": "_Verkettet_ all deine _Loren_ oder _Karosseriebauwerke_, um einen majestätischen Zug zu formen.", + "item.create.minecart_coupling.tooltip.condition1": "Wenn auf eine Lore benutzt wird", + "item.create.minecart_coupling.tooltip.behaviour1": "Koppelt zwei Loren zusammen und versucht, sie während der Bewegung auf einem _konstanten Abstand_ zu halten.", + + "item.create.experience_nugget.tooltip": "ERFAHRUNGSKLUMPEN", + "item.create.experience_nugget.tooltip.summary": "_Ding!_ Ein Stückchen _Inspiration_ von Ihren fantastischen Erfindungen.", + "item.create.experience_nugget.tooltip.condition1": "Wenn benutzt", + "item.create.experience_nugget.tooltip.behaviour1": "_Löst_ alle _Erfahrungspunkte_ ein, welche darin gespeichert sind.", + + "block.create.peculiar_bell.tooltip": "SELTSAME GLOCKE", + "block.create.peculiar_bell.tooltip.summary": "Eine dekorative _Messingglocke_. Über einem Seelenfeuer platziert, könnte es Nebenwirkungen haben...", + + "block.create.haunted_bell.tooltip": "SPUKGLOCKE", + "block.create.haunted_bell.tooltip.summary": "Eine _verfluchte Glocke_ der verlorenen Seelen aus dem Nether.", + "block.create.haunted_bell.tooltip.condition1": "Wenn getragen oder geläutet wird", + "block.create.haunted_bell.tooltip.behaviour1": "Hebt nahe _lichtlose Stellen_ hervor, auf welchen _feindliche Kreaturen_ laichen können.", "_": "Thank you for translating Create!" From 214738b72a10876206e90697e7fcda6af1104ff9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=92=80=E5=A2=83=E7=9F=B3?= Date: Sun, 22 May 2022 22:23:46 +0800 Subject: [PATCH 27/31] Updates to zh_cn.json by Demonese (#2958) --- .../resources/assets/create/lang/zh_cn.json | 1034 +++++++++-------- 1 file changed, 518 insertions(+), 516 deletions(-) diff --git a/src/main/resources/assets/create/lang/zh_cn.json b/src/main/resources/assets/create/lang/zh_cn.json index f9d9fb964..cd279ada6 100644 --- a/src/main/resources/assets/create/lang/zh_cn.json +++ b/src/main/resources/assets/create/lang/zh_cn.json @@ -54,14 +54,14 @@ "block.create.cogwheel": "齿轮", "block.create.content_observer": "物品侦测器", "block.create.controller_rail": "控制铁轨", - "block.create.copper_backtank": "铜制背罐", + "block.create.copper_backtank": "铜背罐", "block.create.copper_casing": "铜机壳", - "block.create.copper_shingle_slab": "铜砖块台阶", - "block.create.copper_shingle_stairs": "铜砖块楼梯", - "block.create.copper_shingles": "铜砖块", - "block.create.copper_tile_slab": "铜瓦块台阶", - "block.create.copper_tile_stairs": "铜瓦块楼梯", - "block.create.copper_tiles": "铜瓦块", + "block.create.copper_shingle_slab": "铜砖瓦台阶", + "block.create.copper_shingle_stairs": "铜砖瓦楼梯", + "block.create.copper_shingles": "铜砖瓦", + "block.create.copper_tile_slab": "铜瓦台阶", + "block.create.copper_tile_stairs": "铜瓦楼梯", + "block.create.copper_tiles": "铜瓦", "block.create.copper_valve_handle": "铜阀门手轮", "block.create.creative_crate": "创造板条箱", "block.create.creative_fluid_tank": "创造流体储罐", @@ -201,12 +201,12 @@ "block.create.encased_chain_drive": "链式传动箱", "block.create.encased_fan": "鼓风机", "block.create.encased_fluid_pipe": "流体管道箱", - "block.create.exposed_copper_shingle_slab": "斑驳的铜砖块台阶", - "block.create.exposed_copper_shingle_stairs": "斑驳的铜砖块楼梯", - "block.create.exposed_copper_shingles": "斑驳的铜砖块", - "block.create.exposed_copper_tile_slab": "斑驳的铜瓦块台阶", - "block.create.exposed_copper_tile_stairs": "斑驳的铜瓦块楼梯", - "block.create.exposed_copper_tiles": "斑驳的铜瓦块", + "block.create.exposed_copper_shingle_slab": "斑驳的铜砖瓦台阶", + "block.create.exposed_copper_shingle_stairs": "斑驳的铜砖瓦楼梯", + "block.create.exposed_copper_shingles": "斑驳的铜砖瓦", + "block.create.exposed_copper_tile_slab": "斑驳的铜瓦台阶", + "block.create.exposed_copper_tile_stairs": "斑驳的铜瓦楼梯", + "block.create.exposed_copper_tiles": "斑驳的铜瓦", "block.create.fluid_pipe": "流体管道", "block.create.fluid_tank": "流体储罐", "block.create.fluid_valve": "流体阀门", @@ -231,7 +231,7 @@ "block.create.green_toolbox": "绿色工具箱", "block.create.green_valve_handle": "绿色阀门手轮", "block.create.hand_crank": "手摇曲柄", - "block.create.haunted_bell": "森魂钟", + "block.create.haunted_bell": "缠魂钟", "block.create.honey": "蜂蜜", "block.create.horizontal_framed_glass": "水平边框玻璃", "block.create.horizontal_framed_glass_pane": "水平边框玻璃板", @@ -308,12 +308,12 @@ "block.create.orange_valve_handle": "橙色阀门手轮", "block.create.ornate_iron_window": "华丽铁窗户", "block.create.ornate_iron_window_pane": "华丽铁窗户板", - "block.create.oxidized_copper_shingle_slab": "氧化的铜砖块台阶", - "block.create.oxidized_copper_shingle_stairs": "氧化的铜砖块楼梯", - "block.create.oxidized_copper_shingles": "氧化的铜砖块", - "block.create.oxidized_copper_tile_slab": "氧化的铜瓦块台阶", - "block.create.oxidized_copper_tile_stairs": "氧化的铜瓦块楼梯", - "block.create.oxidized_copper_tiles": "氧化的铜瓦块", + "block.create.oxidized_copper_shingle_slab": "氧化的铜砖瓦台阶", + "block.create.oxidized_copper_shingle_stairs": "氧化的铜砖瓦楼梯", + "block.create.oxidized_copper_shingles": "氧化的铜砖瓦", + "block.create.oxidized_copper_tile_slab": "氧化的铜瓦台阶", + "block.create.oxidized_copper_tile_stairs": "氧化的铜瓦楼梯", + "block.create.oxidized_copper_tiles": "氧化的铜瓦", "block.create.peculiar_bell": "奇异钟", "block.create.pink_nixie_tube": "粉红色辉光管", "block.create.pink_sail": "粉红色风帆", @@ -477,7 +477,7 @@ "block.create.spruce_window_pane": "云杉木窗户板", "block.create.sticker": "黏着器", "block.create.sticky_mechanical_piston": "黏性动力活塞", - "block.create.stockpile_switch": "存量转换器", + "block.create.stockpile_switch": "存量转信器", "block.create.stressometer": "应力表", "block.create.tiled_glass": "十字玻璃窗", "block.create.tiled_glass_pane": "十字玻璃窗户板", @@ -490,36 +490,36 @@ "block.create.warped_window": "诡异木窗户", "block.create.warped_window_pane": "诡异木窗户板", "block.create.water_wheel": "水车", - "block.create.waxed_copper_shingle_slab": "涂蜡铜砖块台阶", - "block.create.waxed_copper_shingle_stairs": "涂蜡铜砖块楼梯", - "block.create.waxed_copper_shingles": "涂蜡铜砖块", - "block.create.waxed_copper_tile_slab": "涂蜡铜瓦块台阶", - "block.create.waxed_copper_tile_stairs": "涂蜡铜瓦块楼梯", - "block.create.waxed_copper_tiles": "涂蜡铜瓦块", - "block.create.waxed_exposed_copper_shingle_slab": "斑驳的涂蜡铜砖块台阶", - "block.create.waxed_exposed_copper_shingle_stairs": "斑驳的涂蜡铜砖块楼梯", - "block.create.waxed_exposed_copper_shingles": "斑驳的涂蜡铜砖块", - "block.create.waxed_exposed_copper_tile_slab": "斑驳的涂蜡铜瓦块台阶", - "block.create.waxed_exposed_copper_tile_stairs": "斑驳的涂蜡铜瓦块楼梯", - "block.create.waxed_exposed_copper_tiles": "斑驳的涂蜡铜瓦块", - "block.create.waxed_oxidized_copper_shingle_slab": "氧化的涂蜡铜砖块台阶", - "block.create.waxed_oxidized_copper_shingle_stairs": "氧化的涂蜡铜砖块楼梯", - "block.create.waxed_oxidized_copper_shingles": "氧化的涂蜡铜砖块", - "block.create.waxed_oxidized_copper_tile_slab": "氧化的涂蜡铜瓦块台阶", - "block.create.waxed_oxidized_copper_tile_stairs": "氧化的涂蜡铜瓦块楼梯", - "block.create.waxed_oxidized_copper_tiles": "氧化的涂蜡铜瓦块", - "block.create.waxed_weathered_copper_shingle_slab": "锈蚀的涂蜡铜砖块台阶", - "block.create.waxed_weathered_copper_shingle_stairs": "锈蚀的涂蜡铜砖块楼梯", - "block.create.waxed_weathered_copper_shingles": "锈蚀的涂蜡铜砖块", - "block.create.waxed_weathered_copper_tile_slab": "锈蚀的涂蜡铜瓦块台阶", - "block.create.waxed_weathered_copper_tile_stairs": "锈蚀的涂蜡铜瓦块楼梯", - "block.create.waxed_weathered_copper_tiles": "锈蚀的涂蜡铜瓦块", - "block.create.weathered_copper_shingle_slab": "锈蚀的铜砖块台阶", - "block.create.weathered_copper_shingle_stairs": "锈蚀的铜砖块楼梯", - "block.create.weathered_copper_shingles": "锈蚀的铜砖块", - "block.create.weathered_copper_tile_slab": "锈蚀的铜瓦块台阶", - "block.create.weathered_copper_tile_stairs": "锈蚀的铜瓦块楼梯", - "block.create.weathered_copper_tiles": "锈蚀的铜瓦块", + "block.create.waxed_copper_shingle_slab": "涂蜡铜砖瓦台阶", + "block.create.waxed_copper_shingle_stairs": "涂蜡铜砖瓦楼梯", + "block.create.waxed_copper_shingles": "涂蜡铜砖瓦", + "block.create.waxed_copper_tile_slab": "涂蜡铜瓦台阶", + "block.create.waxed_copper_tile_stairs": "涂蜡铜瓦楼梯", + "block.create.waxed_copper_tiles": "涂蜡铜瓦", + "block.create.waxed_exposed_copper_shingle_slab": "斑驳的涂蜡铜砖瓦台阶", + "block.create.waxed_exposed_copper_shingle_stairs": "斑驳的涂蜡铜砖瓦楼梯", + "block.create.waxed_exposed_copper_shingles": "斑驳的涂蜡铜砖瓦", + "block.create.waxed_exposed_copper_tile_slab": "斑驳的涂蜡铜瓦台阶", + "block.create.waxed_exposed_copper_tile_stairs": "斑驳的涂蜡铜瓦楼梯", + "block.create.waxed_exposed_copper_tiles": "斑驳的涂蜡铜瓦", + "block.create.waxed_oxidized_copper_shingle_slab": "氧化的涂蜡铜砖瓦台阶", + "block.create.waxed_oxidized_copper_shingle_stairs": "氧化的涂蜡铜砖瓦楼梯", + "block.create.waxed_oxidized_copper_shingles": "氧化的涂蜡铜砖瓦", + "block.create.waxed_oxidized_copper_tile_slab": "氧化的涂蜡铜瓦台阶", + "block.create.waxed_oxidized_copper_tile_stairs": "氧化的涂蜡铜瓦楼梯", + "block.create.waxed_oxidized_copper_tiles": "氧化的涂蜡铜瓦", + "block.create.waxed_weathered_copper_shingle_slab": "锈蚀的涂蜡铜砖瓦台阶", + "block.create.waxed_weathered_copper_shingle_stairs": "锈蚀的涂蜡铜砖瓦楼梯", + "block.create.waxed_weathered_copper_shingles": "锈蚀的涂蜡铜砖瓦", + "block.create.waxed_weathered_copper_tile_slab": "锈蚀的涂蜡铜瓦台阶", + "block.create.waxed_weathered_copper_tile_stairs": "锈蚀的涂蜡铜瓦楼梯", + "block.create.waxed_weathered_copper_tiles": "锈蚀的涂蜡铜瓦", + "block.create.weathered_copper_shingle_slab": "锈蚀的铜砖瓦台阶", + "block.create.weathered_copper_shingle_stairs": "锈蚀的铜砖瓦楼梯", + "block.create.weathered_copper_shingles": "锈蚀的铜砖瓦", + "block.create.weathered_copper_tile_slab": "锈蚀的铜瓦台阶", + "block.create.weathered_copper_tile_stairs": "锈蚀的铜瓦楼梯", + "block.create.weathered_copper_tiles": "锈蚀的铜瓦", "block.create.weighted_ejector": "弹射置物台", "block.create.white_nixie_tube": "白色辉光管", "block.create.white_sail": "白色风帆", @@ -548,7 +548,7 @@ "entity.create.super_glue": "强力胶", "fluid.create.potion": "药水", - "fluid.create.tea": "茶", + "fluid.create.tea": "建造工茶水", "item.create.andesite_alloy": "安山合金", "item.create.attribute_filter": "属性过滤器", @@ -561,17 +561,18 @@ "item.create.brass_nugget": "黄铜粒", "item.create.brass_sheet": "黄铜板", "item.create.builders_tea": "建造工茶饮", - "item.create.chest_minecart_contraption": "装配过的动力矿车", + "item.create.chest_minecart_contraption": "装配过的运输矿车", "item.create.chocolate_bucket": "巧克力桶", "item.create.chocolate_glazed_berries": "巧克力包层浆果", "item.create.chromatic_compound": "异彩化合物", - "item.create.cinder_flour": "下界面粉", - "item.create.copper_backtank": "铜制背罐", + "item.create.cinder_flour": "余烬面粉", + "item.create.copper_backtank": "铜背罐", + "item.create.copper_backtank_placeable": "可放置的铜背罐", "item.create.copper_nugget": "铜粒", "item.create.copper_sheet": "铜板", - "item.create.crafter_slot_cover": "合成器盖板", + "item.create.crafter_slot_cover": "合成槽盖板", "item.create.crafting_blueprint": "合成蓝图", - "item.create.creative_blaze_cake": "创造模式烈焰蛋糕", + "item.create.creative_blaze_cake": "创造烈焰蛋糕", "item.create.crushed_aluminum_ore": "粉碎铝矿石", "item.create.crushed_copper_ore": "粉碎铜矿石", "item.create.crushed_gold_ore": "粉碎金矿石", @@ -637,66 +638,66 @@ "advancement.create.root": "欢迎来到机械动力", "advancement.create.root.desc": "是时候来制作一些超赞的机械装置了!", "advancement.create.andesite_alloy": "头韵狂魔(Alliterations Aplenty)", - "advancement.create.andesite_alloy.desc": "机械动力的材料名字都很古怪,安山合金(Andesite Alloy)就是其中之一。", + "advancement.create.andesite_alloy.desc": "机械动力的材料名字都很古怪,安山合金(Andesite Alloy)就是其中之一", "advancement.create.its_alive": "鲜活的机械生命", - "advancement.create.its_alive.desc": "首次激活动力学组件。", + "advancement.create.its_alive.desc": "首次激活动力学组件", "advancement.create.shifting_gears": "换挡,加速,起飞!", - "advancement.create.shifting_gears.desc": "将大齿轮连接到小齿轮上,可以改变装置的转速。", + "advancement.create.shifting_gears.desc": "将大齿轮连接到小齿轮上,可以改变装置的转速", "advancement.create.overstressed": "过载", - "advancement.create.overstressed.desc": "首次使能量网络过载。", + "advancement.create.overstressed.desc": "首次使能量网络过载", "advancement.create.belt": "海带传动", "advancement.create.belt.desc": "用传送带连接两个传动杆", "advancement.create.tunnel": "躲起来!", - "advancement.create.tunnel.desc": "用隧道装饰传送带。", + "advancement.create.tunnel.desc": "用隧道装饰传送带", "advancement.create.splitter_tunnel": "分而治之", - "advancement.create.splitter_tunnel.desc": "用黄铜隧道设计一个分流器。", + "advancement.create.splitter_tunnel.desc": "用黄铜隧道设计一个分流器", "advancement.create.chute": "轰然倒塌", - "advancement.create.chute.desc": "放置一个溜槽(垂直版本的传送带)。", + "advancement.create.chute.desc": "放置一个溜槽(垂直版本的传送带)", "advancement.create.upward_chute": "空中劫持", - "advancement.create.upward_chute.desc": "目睹抛出的物品飞入带风扇的溜槽。", + "advancement.create.upward_chute.desc": "目睹抛出的物品飞入带风扇的溜槽", "advancement.create.belt_funnel": "漏斗垂帘", - "advancement.create.belt_funnel.desc": "将侧向漏斗放在传送带或置物台的顶部,并观察到特殊材质的漏斗。", + "advancement.create.belt_funnel.desc": "将侧向漏斗放在传送带或置物台的顶部,并观察到特殊变种的漏斗", "advancement.create.belt_funnel_kiss": "鹦鹉和垂翼", - "advancement.create.belt_funnel_kiss.desc": "让两个安装在传送带上的漏斗深情相吻。", + "advancement.create.belt_funnel_kiss.desc": "让两个安装在传送带上的漏斗深情相吻", "advancement.create.fan": "动力御气师", "advancement.create.fan.desc": "飘在鼓风机吹出的气流上", "advancement.create.fan_lava": "地热取暖", - "advancement.create.fan_lava.desc": "被熔炼气流烤的酥脆。", + "advancement.create.fan_lava.desc": "被熔炼气流烤的酥脆", "advancement.create.fan_water": "奇妙的洗涤流程", - "advancement.create.fan_water.desc": "在洗涤气流里洗了个澡。", + "advancement.create.fan_water.desc": "在洗涤气流里洗了个澡", "advancement.create.fan_smoke": "动力风箱", - "advancement.create.fan_smoke.desc": "被烟熏气流熏得满脸黑。", + "advancement.create.fan_smoke.desc": "被烟熏气流熏得满脸黑", "advancement.create.wrench": "细节调整", - "advancement.create.wrench.desc": "做出一个方便调整方块的扳手", + "advancement.create.wrench.desc": "做出一个方便调整装置的扳手", "advancement.create.goggles": "应力,一目了然", - "advancement.create.goggles.desc": "做出一个能看到机器动能信息的工程师护目镜", + "advancement.create.goggles.desc": "做出一个能看到机器动力学信息的工程师护目镜", "advancement.create.speedometer": "精密的速度控制", - "advancement.create.speedometer.desc": "放置一个速度表,并且带上工程师护目镜来读取速度数据", + "advancement.create.speedometer.desc": "放置一个速度表,并且戴上工程师护目镜来读取速度数据", "advancement.create.stressometer": "精密的应力控制", - "advancement.create.stressometer.desc": "放置一个应力表,并且带上工程师护目镜来读取应力数据", + "advancement.create.stressometer.desc": "放置一个应力表,并且戴上工程师护目镜来读取应力数据", "advancement.create.aesthetics": "什么叫美学,这就叫美学!", - "advancement.create.aesthetics.desc": "将支架放在传动杆,管道和齿轮上。", + "advancement.create.aesthetics.desc": "将支架放在传动杆,管道和齿轮上", "advancement.create.reinforced": "什么叫强化,这就叫强化!", - "advancement.create.reinforced.desc": "在传动杆,管道和传送带上使用机壳加固。", + "advancement.create.reinforced.desc": "在传动杆,管道和传送带上使用机壳加固", "advancement.create.water_wheel": "掌控水流", - "advancement.create.water_wheel.desc": "放置一个水车并且让它开始旋转", + "advancement.create.water_wheel.desc": "放置一个水车并且让它开始旋转!", "advancement.create.chocolate_wheel": "美味动力", - "advancement.create.chocolate_wheel.desc": "用熔融巧克力驱动水车。", + "advancement.create.chocolate_wheel.desc": "用熔融巧克力驱动水车", "advancement.create.lava_wheel": "风火轮", - "advancement.create.lava_wheel.desc": "按理说根本不可能运转得起来。", + "advancement.create.lava_wheel.desc": "按理说根本不可能运转得起来", "advancement.create.cuckoo": "到点儿了吗?", - "advancement.create.cuckoo.desc": "目睹布谷鸟钟提醒你该睡觉觉了。", + "advancement.create.cuckoo.desc": "目睹布谷鸟闹钟提醒你该睡觉觉了", "advancement.create.millstone": "便携式粉碎机", "advancement.create.millstone.desc": "放置一个石磨并且为其供能", "advancement.create.windmill": "微风吹拂", - "advancement.create.windmill.desc": "组装风车。", + "advancement.create.windmill.desc": "组装风车", "advancement.create.maxed_windmill": "强风肆虐", - "advancement.create.maxed_windmill.desc": "组装最大强度的风车。", + "advancement.create.maxed_windmill.desc": "组装最大强度的风车", "advancement.create.andesite_casing": "安山时代", "advancement.create.andesite_casing.desc": "使用安山合金和木头来合成一个安山机壳", "advancement.create.mechanical_drill": "坚如磐石,势如破竹", "advancement.create.mechanical_drill.desc": "放置一个动力钻头并且为其供能", - "advancement.create.press": "'Duang!'", + "advancement.create.press": "“Duang!”", "advancement.create.press.desc": "使用辊压机来辊压一些板子", "advancement.create.polished_rose_quartz": "粉色钻石", "advancement.create.polished_rose_quartz.desc": "用砂纸将玫瑰石英打磨至透明", @@ -707,81 +708,81 @@ "advancement.create.basin": "快到碗里来", "advancement.create.basin.desc": "放置一个工作盆,并且往里面放些东西", "advancement.create.mixer": "均匀搅拌", - "advancement.create.mixer.desc": "将搅拌机放在工作盆上方,并且使其搅拌盆内物品", + "advancement.create.mixer.desc": "将搅拌器放在工作盆上方,并且使其搅拌盆内物品", "advancement.create.blaze_burner": "活炉", - "advancement.create.blaze_burner.desc": "获得一个烈焰人燃烧室。", + "advancement.create.blaze_burner.desc": "获得一个烈焰人燃烧室", "advancement.create.compact": "快乐压缩", "advancement.create.compact.desc": "使用辊压机在工作盆中压缩一些物品", "advancement.create.brass": "真正的合金", - "advancement.create.brass.desc": "使用粉碎锌矿石和粉碎铜矿石来制作粉碎黄铜", + "advancement.create.brass.desc": "使用粉碎锌矿石和粉碎铜矿石来制作黄铜", "advancement.create.brass_casing": "黄铜时代", "advancement.create.brass_casing.desc": "用黄铜和木头制作一个黄铜机壳", "advancement.create.copper_casing": "铜器时代", - "advancement.create.copper_casing.desc": "使用铜和木头制作一个铜制机壳", + "advancement.create.copper_casing.desc": "使用铜和木头制作一个铜机壳", "advancement.create.spout": "哗啦啦", - "advancement.create.spout.desc": "观察注液器灌满物品。", + "advancement.create.spout.desc": "观察注液器灌满物品", "advancement.create.spout_potion": "环球酿造厂", - "advancement.create.spout_potion.desc": "观察注液器注入药水到玻璃瓶。", + "advancement.create.spout_potion.desc": "观察注液器注入药水到玻璃瓶", "advancement.create.chocolate": "幻想世界", - "advancement.create.chocolate.desc": "获取一桶熔融巧克力。", + "advancement.create.chocolate.desc": "获取一桶熔融巧克力", "advancement.create.item_drain": "滚筒排液", - "advancement.create.item_drain.desc": "观察流体物品被分液池抽空。", + "advancement.create.item_drain.desc": "观察流体物品被分液池抽空", "advancement.create.chained_item_drain": "翻滚吧!", - "advancement.create.chained_item_drain.desc": "观察物品穿过多个链状分布的分液池。", + "advancement.create.chained_item_drain.desc": "观察物品滚过几个相链接的分液池", "advancement.create.glass_pipe": "流之观察者", - "advancement.create.glass_pipe.desc": "透过带窗的流体管道观察流体在管道中流淌。使用扳手可打开直线流体管道的窗户。", + "advancement.create.glass_pipe.desc": "透过带窗的流体管道观察流体在管道中流淌,使用扳手可打开直线流体管道的窗户", "advancement.create.pipe_collision": "Never cross the Streams!", - "advancement.create.pipe_collision.desc": "观察两种流体在管道网络中相会。", + "advancement.create.pipe_collision.desc": "观察两种流体在管道网络中相会", "advancement.create.pipe_spill": "漏水啦!", - "advancement.create.pipe_spill.desc": "观察管道的开口端将流体排放或放置到世界中。", + "advancement.create.pipe_spill.desc": "观察管道的开口端将流体排放或放置到世界中", "advancement.create.hose_pulley": "工业泄漏", - "advancement.create.hose_pulley.desc": "放下一个软管滑轮,观察它排干或填充一大片液体。", + "advancement.create.hose_pulley.desc": "放下一个软管滑轮,观察它排干或填充一大片流体", "advancement.create.infinite_water": "抽干大海", - "advancement.create.infinite_water.desc": "从大到足以被认为是无限的水源中抽水。", + "advancement.create.infinite_water.desc": "从大到足以被认为是无限的水源中抽水", "advancement.create.infinite_lava": "汲取行星核心", - "advancement.create.infinite_lava.desc": "从广阔的熔岩湖中抽出熔岩。", + "advancement.create.infinite_lava.desc": "从广阔的熔岩湖中抽出熔岩", "advancement.create.infinite_chocolate": "美梦不饶人", - "advancement.create.infinite_chocolate.desc": "从大到足以被被视为无限的巧克力海中抽取巧克力。", + "advancement.create.infinite_chocolate.desc": "从大到足以被被视为无限的巧克力海中抽取巧克力", "advancement.create.crafter": "自动化装配", - "advancement.create.crafter.desc": "放置一些机械合成台并且为其供能", + "advancement.create.crafter.desc": "放置一些动力合成器并且为其供能", "advancement.create.clockwork_bearing": "巧械时钟", - "advancement.create.clockwork_bearing.desc": "组装安装在发条轴承上的装置。", + "advancement.create.clockwork_bearing.desc": "组装安装在发条轴承上的装置", "advancement.create.nixie_tube": "花样符号", - "advancement.create.nixie_tube.desc": "获取并放下一对辉光管。", + "advancement.create.nixie_tube.desc": "获取并放下一对辉光管", "advancement.create.deployer": "我就指着你了咋地?", - "advancement.create.deployer.desc": "放置并且功能一个机械手。这可是你右手的完美复制品", + "advancement.create.deployer.desc": "放置并且启动一个机械手,这可是你右手的完美复制品", "advancement.create.speed_controller": "工程师的眼中钉", - "advancement.create.speed_controller.desc": "放置一个转速控制器,这是换档的终极装置。", + "advancement.create.speed_controller.desc": "放置一个转速控制器,这是换档的终极装置", "advancement.create.flywheel": "工厂之心", - "advancement.create.flywheel.desc": "将引擎成功连接到飞轮。", + "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.precision_mechanism.desc": "装配一个精密构件", "advancement.create.mechanical_arm": "飞转的手!", - "advancement.create.mechanical_arm.desc": "制作机械臂,选择输入和输出,放置并给予它动力,然后看着它为你完成所有工作。", + "advancement.create.mechanical_arm.desc": "制作动力臂,选择输入和输出,放置并给予它动力,然后看着它为你完成所有工作", "advancement.create.musical_arm": "没人能在我的 BGM 里打败我!", - "advancement.create.musical_arm.desc": "使用动力臂播放唱片。", + "advancement.create.musical_arm.desc": "使用动力臂播放唱片", "advancement.create.arm_many_targets": "掌控全局", - "advancement.create.arm_many_targets.desc": "配置一个有十个或更多输出位置的机械臂。", + "advancement.create.arm_many_targets.desc": "配置一个有十个或更多输出位置的动力臂", "advancement.create.arm_blaze_burner": "熊熊燃烧", - "advancement.create.arm_blaze_burner.desc": "指导机械臂给烈焰人燃烧室投食。", + "advancement.create.arm_blaze_burner.desc": "指导动力臂给烈焰人燃烧室投食", "advancement.create.fist_bump": "来碰个拳,哥们~", "advancement.create.fist_bump.desc": "使两个机械手互相碰拳", "advancement.create.crushing_wheel": "一对大家伙", "advancement.create.crushing_wheel.desc": "制作一些能更快粉碎物品的粉碎轮", "advancement.create.blaze_cake": "糖份超标", - "advancement.create.blaze_cake.desc": "给烈焰人燃烧室烤一份特别蛋糕。", + "advancement.create.blaze_cake.desc": "给烈焰人燃烧室烤一份特别蛋糕", "advancement.create.wand_of_symmetry": "简单的镜面几何学", - "advancement.create.wand_of_symmetry.desc": "制作一个对称之杖", + "advancement.create.wand_of_symmetry.desc": "制作一根对称之杖", "advancement.create.extendo_grip": "biu biu biu!", "advancement.create.extendo_grip.desc": "获得一个伸缩机械手", "advancement.create.potato_cannon": "Fwoomp!", - "advancement.create.potato_cannon.desc": "用土豆加农炮击杀一个生物。", + "advancement.create.potato_cannon.desc": "用土豆加农炮击杀一个生物", "advancement.create.dual_extendo_grip": "biu——biu——biu——", - "advancement.create.dual_extendo_grip.desc": "双持伸缩机械手,超人般的触碰距离。", + "advancement.create.dual_extendo_grip.desc": "双持伸缩机械手,超人般的触碰距离", "advancement.create.eob": "Beta 版结束", - "advancement.create.eob.desc": "期待未来会有更多的内容。<3", + "advancement.create.eob.desc": "期待未来会有更多的内容 <3", "_": "->------------------------] UI & Messages [------------------------<-", @@ -790,29 +791,29 @@ "itemGroup.create.palettes": "机械动力丨建筑方块", "death.attack.create.crush": "%1$s被压扁了", - "death.attack.create.crush.player": "%1$s被%2$s推进了粉碎机", + "death.attack.create.crush.player": "%1$s被%2$s推进了粉碎轮", "death.attack.create.fan_fire": "%1$s试图接受热风的洗礼", "death.attack.create.fan_fire.player": "%2$s给了%1$s一次热风的洗礼", "death.attack.create.fan_lava": "%1$s在接受热风的洗礼中浴火焚身", "death.attack.create.fan_lava.player": "%1$s被%2$s火化了", "death.attack.create.mechanical_drill": "%1$s被钻头钻的坏掉了", "death.attack.create.mechanical_drill.player": "%1$s因为%2$s和钻头来了一次亲密接触", - "death.attack.create.mechanical_saw": "%1$s被圆锯切成了两截", - "death.attack.create.mechanical_saw.player": "%1$s被%2$s按在圆锯上切碎了", + "death.attack.create.mechanical_saw": "%1$s被动力锯切成了两截", + "death.attack.create.mechanical_saw.player": "%1$s被%2$s按在动力锯上切碎了", "death.attack.create.potato_cannon": "%1$s被%2$s的土豆糊了一脸", "death.attack.create.potato_cannon.item": "%1$s被%2$s用%3$s射死了", - "death.attack.create.cuckoo_clock_explosion": "%1$s被布谷鸟钟炸得粉身碎骨", - "death.attack.create.cuckoo_clock_explosion.player": "%1$s被布谷鸟钟炸得粉身碎骨", + "death.attack.create.cuckoo_clock_explosion": "%1$s被布谷鸟闹钟炸得粉身碎骨", + "death.attack.create.cuckoo_clock_explosion.player": "%1$s被布谷鸟闹钟炸得粉身碎骨", "create.block.deployer.damage_source_name": "二五仔机械手", "create.block.cart_assembler.invalid": "请将矿车装配器放置在铁轨上", - "create.menu.return": "返回上一级菜单", - "create.menu.configure": "配置...", - "create.menu.ponder_index": "思索内容清单", + "create.menu.return": "返回上级菜单", + "create.menu.configure": "配置……", + "create.menu.ponder_index": "思索索引", "create.menu.only_ingame": "仅在游戏内暂停菜单中可用", - "create.menu.project_page": "在CurseForge上查看", - "create.menu.report_bugs": "报告Create的漏洞", + "create.menu.project_page": "项目主页", + "create.menu.report_bugs": "报告问题", "create.menu.support": "支持我们", "create.recipe.crushing": "粉碎", @@ -852,7 +853,7 @@ "create.recipe.assembly.repeat": "该序列需要重复 %1$s 次", "create.recipe.assembly.junk": "随机废料", "create.recipe.processing.chance": "%1$s%%概率", - "create.recipe.deploying.not_consumed": "未消耗", + "create.recipe.deploying.not_consumed": "不消耗", "create.recipe.heat_requirement.none": "无需加热", "create.recipe.heat_requirement.heated": "加热", "create.recipe.heat_requirement.superheated": "超级加热", @@ -880,12 +881,12 @@ "create.action.saveToFile": "保存", "create.action.discard": "放弃", - "create.keyinfo.toolmenu": "工具菜单", - "create.keyinfo.toolbelt": "使用附近的工具箱", + "create.keyinfo.toolmenu": "蓝图工具菜单", + "create.keyinfo.toolbelt": "访问附近的工具箱", "create.keyinfo.scrollup": "(游戏中)向上鼠标滚轮", "create.keyinfo.scrolldown": "(游戏中)向下鼠标滚轮", - "create.gui.scrollInput.defaultTitle": "选择一个选项:", + "create.gui.scrollInput.defaultTitle": "选择一个选项:", "create.gui.scrollInput.scrollToModify": "滚动修改", "create.gui.scrollInput.scrollToAdjustAmount": "滚动修改数量", "create.gui.scrollInput.scrollToSelect": "滚动选择", @@ -909,12 +910,12 @@ "create.orientation.orthogonal": "垂直", "create.orientation.diagonal": "对角线", "create.orientation.horizontal": "水平", - "create.orientation.alongZ": "以z轴对齐", - "create.orientation.alongX": "以x轴对齐", + "create.orientation.alongZ": "以Z轴对齐", + "create.orientation.alongX": "以X轴对齐", "create.gui.terrainzapper.title": "手持式环境塑形器", "create.gui.terrainzapper.searchDiagonal": "对角线延伸", - "create.gui.terrainzapper.searchFuzzy": "忽略质料分界", + "create.gui.terrainzapper.searchFuzzy": "忽略材料分界", "create.gui.terrainzapper.patternSection": "样式", "create.gui.terrainzapper.pattern.solid": "填满", "create.gui.terrainzapper.pattern.checkered": "棋盘格", @@ -934,7 +935,7 @@ "create.gui.terrainzapper.brush.cluster": "簇状", "create.gui.terrainzapper.tool": "填充类型", "create.gui.terrainzapper.tool.fill": "填充", - "create.gui.terrainzapper.tool.place": "复写", + "create.gui.terrainzapper.tool.place": "放置", "create.gui.terrainzapper.tool.replace": "替换", "create.gui.terrainzapper.tool.clear": "清除", "create.gui.terrainzapper.tool.overlay": "覆盖", @@ -945,7 +946,7 @@ "create.terrainzapper.leftClickToSet": "鼠标左击一个方块以设置填充材料", "create.minecart_coupling.two_couplings_max": "矿车无法被连接两个以上的矿车连轴器", - "create.minecart_coupling.unloaded": "有一部分火车存在于未加载区块中", + "create.minecart_coupling.unloaded": "有一部分列车存在于未加载区块中", "create.minecart_coupling.no_loops": "矿车连轴器不能连成一个环", "create.minecart_coupling.removed": "从矿车上移除所有矿车连轴器", "create.minecart_coupling.too_far": "矿车距离你太远了", @@ -972,9 +973,9 @@ "create.logistics.fluid_filter": "流体过滤器", "create.logistics.firstFrequency": "频率 #1", "create.logistics.secondFrequency": "频率 #2", - "create.logistics.filter.apply": "已将过滤应用于%1$s。", - "create.logistics.filter.apply_click_again": "已将过滤应用于%1$s,再次点击可将手持物品数量复制到过滤器上。", - "create.logistics.filter.apply_count": "已将提取数量应用至过滤器。", + "create.logistics.filter.apply": "已将过滤应用于%1$s", + "create.logistics.filter.apply_click_again": "已将过滤应用于%1$s,再次点击可将手持物品数量复制到过滤器上", + "create.logistics.filter.apply_count": "已将提取数量应用至过滤器", "create.gui.goggles.generator_stats": "应力发生器状态:", "create.gui.goggles.kinetic_stats": "动力学状态:", @@ -983,20 +984,20 @@ "create.gui.goggles.fluid_container": "流体容器信息:", "create.gui.goggles.fluid_container.capacity": "容量:", "create.gui.assembly.exception": "无法组装该装置:", - "create.gui.assembly.exception.unmovableBlock": "无法移动的方块:(%4$s)位于 [%1$s,%2$s,%3$s]", - "create.gui.assembly.exception.chunkNotLoaded": "位于 [%1$s,%2$s,%3$s] 的方块未处于加载区块", - "create.gui.assembly.exception.structureTooLarge": "装置中的方块数量过多。\n配置的最大值为:%1$s", - "create.gui.assembly.exception.tooManyPistonPoles": "活塞加装的活塞杆数量过多。\n配置的最大值为:%1$s", + "create.gui.assembly.exception.unmovableBlock": "无法移动的方块:(%4$s)位于 [%1$s,%2$s,%3$s]", + "create.gui.assembly.exception.chunkNotLoaded": "位于 [%1$s,%2$s,%3$s] 的方块未处于加载区块", + "create.gui.assembly.exception.structureTooLarge": "装置中的方块数量过多\n配置的最大值为:%1$s", + "create.gui.assembly.exception.tooManyPistonPoles": "活塞加装的活塞杆数量过多\n配置的最大值为:%1$s", "create.gui.assembly.exception.noPistonPoles": "活塞缺失部分活塞杆", - "create.gui.assembly.exception.not_enough_sails": "相接的结构所包含的类风帆方块的数量不足:%1$s。\n至少需要 %2$s", + "create.gui.assembly.exception.not_enough_sails": "相接的结构所包含的类风帆方块的数量不足:%1$s\n至少需要 %2$s", "create.gui.gauge.info_header": "仪表信息:", "create.gui.speedometer.title": "旋转速度", "create.gui.stressometer.title": "网络应力", "create.gui.stressometer.capacity": "剩余应力量", "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.not_fast_enough": "显然%1$s_没有_达到_足够_的_工作转速_", + "create.gui.contraptions.network_overstressed": "显然装置_过载_,添加更多动力源或者_减慢_网络中高_应力影响_的组件", "create.gui.adjustable_crate.title": "板条箱", "create.gui.adjustable_crate.storageSpace": "储存空间", "create.gui.stockpile_switch.title": "储存开关", @@ -1025,10 +1026,10 @@ "create.gui.sequenced_gearshift.speed.back_fast": "两倍速,反向", "create.schematicAndQuill.dimensions": "蓝图尺寸:%1$sx%2$sx%3$s", - "create.schematicAndQuill.firstPos": "第一个位置。", - "create.schematicAndQuill.secondPos": "第二个位置。", - "create.schematicAndQuill.noTarget": "按住 Ctrl 选择空气方块。", - "create.schematicAndQuill.abort": "删除选择。", + "create.schematicAndQuill.firstPos": "第一个位置", + "create.schematicAndQuill.secondPos": "第二个位置", + "create.schematicAndQuill.noTarget": "按住 [Ctrl] 选择空气方块", + "create.schematicAndQuill.abort": "删除选择", "create.schematicAndQuill.title": "蓝图名:", "create.schematicAndQuill.convert": "立即保存并部署", "create.schematicAndQuill.fallbackName": "我的蓝图", @@ -1051,33 +1052,33 @@ "create.schematic.tool.rotate": "旋转", "create.schematic.tool.print": "打印", "create.schematic.tool.flip": "翻转", - "create.schematic.tool.deploy.description.0": "将结构移到某个位置。", - "create.schematic.tool.deploy.description.1": "在地面上单击鼠标右击以放置。", - "create.schematic.tool.deploy.description.2": "按住 Ctrl 以固定距离选择。", - "create.schematic.tool.deploy.description.3": "按住 Ctrl 鼠标滚动更改距离。", + "create.schematic.tool.deploy.description.0": "将结构移到某个位置", + "create.schematic.tool.deploy.description.1": "在地面上右击以放置", + "create.schematic.tool.deploy.description.2": "按住 [Ctrl] 以固定距离选择", + "create.schematic.tool.deploy.description.3": "按住 [Ctrl] 鼠标滚动更改距离", "create.schematic.tool.move.description.0": "水平移动蓝图", - "create.schematic.tool.move.description.1": "选定蓝图,然后按住 Ctrl 鼠标滚动移动。", + "create.schematic.tool.move.description.1": "选定蓝图,然后按住 [Ctrl] 鼠标滚动移动", "create.schematic.tool.move.description.2": "", "create.schematic.tool.move.description.3": "", "create.schematic.tool.movey.description.0": "垂直移动蓝图", - "create.schematic.tool.movey.description.1": "按住 Ctrl 鼠标滚动上下移动", + "create.schematic.tool.movey.description.1": "按住 [Ctrl] 鼠标滚动上下移动", "create.schematic.tool.movey.description.2": "", "create.schematic.tool.movey.description.3": "", - "create.schematic.tool.rotate.description.0": "围绕蓝图中心旋转蓝图。", - "create.schematic.tool.rotate.description.1": "按住 Ctrl 鼠标滚动旋转90度", + "create.schematic.tool.rotate.description.0": "围绕蓝图中心旋转蓝图", + "create.schematic.tool.rotate.description.1": "按住 [Ctrl] 鼠标滚动旋转90度", "create.schematic.tool.rotate.description.2": "", "create.schematic.tool.rotate.description.3": "", "create.schematic.tool.print.description.0": "立即将结构放置在世界上", - "create.schematic.tool.print.description.1": "右击确认当前位置。", - "create.schematic.tool.print.description.2": "该工具仅适用于创造模式。", + "create.schematic.tool.print.description.1": "[右击] 确认当前位置", + "create.schematic.tool.print.description.2": "该工具仅适用于创造模式", "create.schematic.tool.print.description.3": "", - "create.schematic.tool.flip.description.0": "沿你选择的面翻转蓝图。", - "create.schematic.tool.flip.description.1": "指向蓝图,然后按住 Ctrl 鼠标滚动将其翻转。", + "create.schematic.tool.flip.description.0": "沿你选择的面翻转蓝图", + "create.schematic.tool.flip.description.1": "指向蓝图,然后按住 [Ctrl] 鼠标滚动将其翻转", "create.schematic.tool.flip.description.2": "", "create.schematic.tool.flip.description.3": "", - "create.schematics.synchronizing": "正在同步..", - "create.schematics.uploadTooLarge": "你的蓝图超出了服务器指定的限制。", + "create.schematics.synchronizing": "正在同步……", + "create.schematics.uploadTooLarge": "你的蓝图超出了服务器指定的限制", "create.schematics.maxAllowedSize": "允许的最大蓝图文件大小为:", "create.gui.schematicTable.refresh": "刷新文件", @@ -1085,7 +1086,7 @@ "create.gui.schematicTable.title": "蓝图桌", "create.gui.schematicTable.availableSchematics": "可用蓝图", "create.gui.schematicTable.noSchematics": "没有保存的蓝图", - "create.gui.schematicTable.uploading": "正在上传...", + "create.gui.schematicTable.uploading": "正在上传……", "create.gui.schematicTable.finished": "上传完成!", "create.gui.schematicannon.title": "蓝图加农炮", "create.gui.schematicannon.listPrinter": "物品清单打印机", @@ -1103,17 +1104,17 @@ "create.gui.schematicannon.option.skipTileEntities": "保护存储方块", "create.gui.schematicannon.slot.gunpowder": "向蓝图加农炮添加火药以提供动力", "create.gui.schematicannon.slot.listPrinter": "在此处放置书以打印蓝图所需的材料清单", - "create.gui.schematicannon.slot.schematic": "在此处添加你的蓝图,务必确保其已经被部署在了特定位置", + "create.gui.schematicannon.slot.schematic": "在此处添加你的蓝图,务必确保其已经被部署在特定位置", "create.gui.schematicannon.option.skipMissing.description": "如果缺失材料,蓝图加农炮将忽略当前缺失材料并且使用其他已有材料继续工作", - "create.gui.schematicannon.option.skipTileEntities.description": "蓝图将避免更换存储方块,如箱子。", - "create.gui.schematicannon.option.dontReplaceSolid.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": "蓝图加农炮会使用任何所提供的方块来替换工作区域内的固体方块", - "create.gui.schematicannon.option.replaceWithEmpty.description": "蓝图加农炮将清理和替换工作区域内所有原本的方块。", + "create.gui.schematicannon.option.replaceWithEmpty.description": "蓝图加农炮将清理和替换工作区域内所有原本的方块", - "create.schematicannon.status.idle": "闲置中", - "create.schematicannon.status.ready": "准备中", - "create.schematicannon.status.running": "运行中", + "create.schematicannon.status.idle": "闲置", + "create.schematicannon.status.ready": "就绪", + "create.schematicannon.status.running": "正在运作", "create.schematicannon.status.finished": "已完成", "create.schematicannon.status.paused": "已暂停", "create.schematicannon.status.stopped": "已停止", @@ -1122,15 +1123,15 @@ "create.schematicannon.status.targetOutsideRange": "目标太远", "create.schematicannon.status.searching": "正在搜索", "create.schematicannon.status.skipping": "正在跳过", - "create.schematicannon.status.missingBlock": "缺少方块:", - "create.schematicannon.status.placing": "建筑中", - "create.schematicannon.status.clearing": "清除方块中", + "create.schematicannon.status.missingBlock": "缺少物品:", + "create.schematicannon.status.placing": "正在放置", + "create.schematicannon.status.clearing": "正在清除方块", "create.schematicannon.status.schematicInvalid": "蓝图无效", "create.schematicannon.status.schematicNotPlaced": "蓝图未部署", "create.schematicannon.status.schematicExpired": "蓝图文件已过期", "create.materialChecklist": "材料清单", - "create.materialChecklist.blocksNotLoaded": "*免责声明*\n\n由于相关区块没有被加载,材料列表可能不准确。", + "create.materialChecklist.blocksNotLoaded": "*免责声明*\n\n由于相关区块未被加载,材料清单可能不准确", "create.gui.filter.deny_list": "黑名单", "create.gui.filter.deny_list.description": "只通过不在黑名单中的物品,如果黑名单为空,所有物品都可以通过", @@ -1152,7 +1153,7 @@ "create.item_attributes.max_enchanted": "已达到最高附魔等级", "create.item_attributes.max_enchanted.inverted": "并未达到最高附魔等级", "create.item_attributes.renamed": "有自定义名称", - "create.item_attributes.renamed.inverted": "无自定义名称", + "create.item_attributes.renamed.inverted": "没有自定义名称", "create.item_attributes.damaged": "已损坏", "create.item_attributes.damaged.inverted": "未损坏", "create.item_attributes.badly_damaged": "严重受损", @@ -1202,8 +1203,8 @@ "create.item_attributes.book_copy_first.inverted": "不是第一代拷贝", "create.item_attributes.book_copy_second": "是第二代拷贝", "create.item_attributes.book_copy_second.inverted": "不是第二代拷贝", - "create.item_attributes.book_copy_tattered": "拷贝次数已不可查", - "create.item_attributes.book_copy_tattered.inverted": "不是拷贝次数已不可查", + "create.item_attributes.book_copy_tattered": "拷贝次数不可查", + "create.item_attributes.book_copy_tattered.inverted": "拷贝次数可查", "create.item_attributes.astralsorcery_amulet": "璀璨棱镜增强%1$s", "create.item_attributes.astralsorcery_amulet.inverted": "璀璨棱镜未增强%1$s", "create.item_attributes.astralsorcery_constellation": "与%1$s共鸣", @@ -1231,7 +1232,8 @@ "create.tooltip.keyCtrl": "Ctrl", "create.tooltip.speedRequirement": "需求转速:%1$s", "create.tooltip.speedRequirement.none": "无", - "create.tooltip.speedRequirement.medium": "适当", + "create.tooltip.speedRequirement.slow": "慢", + "create.tooltip.speedRequirement.medium": "中", "create.tooltip.speedRequirement.fast": "快", "create.tooltip.stressImpact": "应力影响:%1$s", "create.tooltip.stressImpact.low": "低", @@ -1247,16 +1249,16 @@ "create.mechanical_arm.extract_from": "从%1$s中拿取物品", "create.mechanical_arm.deposit_to": "将物品存储至%1$s", - "create.mechanical_arm.summary": "动力臂当前有 %1$s 个输入,%2$s 个输出。", - "create.mechanical_arm.points_outside_range": "由于距离限制,选定的交互点%1$s已被移除。", + "create.mechanical_arm.summary": "动力臂当前有 %1$s 个输入,%2$s 个输出", + "create.mechanical_arm.points_outside_range": "由于距离限制,选定的交互点%1$s已被移除", "create.weighted_ejector.target_set": "目标已选取", "create.weighted_ejector.target_not_valid": "弹射至临近方块(目标无效)", "create.weighted_ejector.no_target": "弹射至临近方块(未选择目标)", - "create.weighted_ejector.targeting": "弹射至 [%1$s,%2$s,%3$s]", + "create.weighted_ejector.targeting": "弹射至 [%1$s,%2$s,%3$s]", "create.weighted_ejector.stack_size": "弹射物品堆数量", - "create.logistics.when_multiple_outputs_available": "当多个输出可用时", + "create.logistics.when_multiple_outputs_available": "多个输出可用时", "create.mechanical_arm.selection_mode.round_robin": "轮询调度", "create.mechanical_arm.selection_mode.forced_round_robin": "强制轮询调度", @@ -1281,10 +1283,10 @@ "create.tooltip.chute.contains": "内含物品:%1$s x%2$s", "create.tooltip.brass_tunnel.contains": "目前分配:", "create.tooltip.brass_tunnel.contains_entry": "> %1$s x%2$s", - "create.tooltip.brass_tunnel.retrieve": "鼠标右击取出", + "create.tooltip.brass_tunnel.retrieve": "右击取出", "create.linked_controller.bind_mode": "绑定模式激活", - "create.linked_controller.press_keybind": "按下%1$s、%2$s、%3$s、%4$s、%5$s或%6$s,可以将该频率绑定到按下的按键上。", + "create.linked_controller.press_keybind": "按下%1$s、%2$s、%3$s、%4$s、%5$s或%6$s,可以将该频率绑定到按下的按键上", "create.linked_controller.key_bound": "该频率已绑定到%1$s", "create.linked_controller.frequency_slot_1": "按键绑定:%1$s, 频率 #1", "create.linked_controller.frequency_slot_2": "按键绑定:%1$s, 频率 #2", @@ -1302,33 +1304,33 @@ "create.potato_cannon.ammo.knockback": "%1$s 击退", "create.hint.hose_pulley.title": "无限供应", - "create.hint.hose_pulley": "目标液体对象被视为无限量的。", + "create.hint.hose_pulley": "目标流体对象被视为无限量的", "create.hint.mechanical_arm_no_targets.title": "没有目标", - "create.hint.mechanical_arm_no_targets": "看起来这个_动力臂_没有被分配给任何_目标_。在手持机械臂的同时,右击选取传送带、置物台、漏斗或其他设备来设置目标。", + "create.hint.mechanical_arm_no_targets": "看起来这个_动力臂_没有被分配给任何_目标_,在_手持动力臂_的同时,_右击_选取传送带、置物台、漏斗或其他设备来设置目标", "create.hint.empty_bearing.title": "更新轴承", - "create.hint.empty_bearing": "_空手右击_轴承,可以将你新建造的结构_接到_轴承上。", + "create.hint.empty_bearing": "_空手右击_轴承,可以将你新建造的结构_接到_轴承上", "create.hint.full_deployer.title": "机械手物品溢出", - "create.hint.full_deployer": "_机械手_包含_过剩的物品,_需要被_提取。你需要_使用_料斗,__漏斗_或其他方法将溢出释放出来。", + "create.hint.full_deployer": "_机械手_包含_过剩的物品_,需要被_提取_,使用_漏斗_或其他方法将其从溢出中释放出来", "create.gui.config.overlay1": "Hi :)", - "create.gui.config.overlay2": "这是一个实例层", + "create.gui.config.overlay2": "这是一个叠加层例子", "create.gui.config.overlay3": "点击拖拽你的鼠标", - "create.gui.config.overlay4": "来将它移动到前方", + "create.gui.config.overlay4": "来移动这个预览", "create.gui.config.overlay5": "ESC退出当前界面", "create.gui.config.overlay6": "并保存新的位置", - "create.gui.config.overlay7": "输入/create overlay reset", + "create.gui.config.overlay7": "输入 /create overlay reset", "create.gui.config.overlay8": "重置到默认位置", "create.command.killTPSCommand": "killtps", "create.command.killTPSCommand.status.slowed_by.0": "[Create]: 服务器现在的 TPS 速度被降低为 %s ms :o", - "create.command.killTPSCommand.status.slowed_by.1": "[Create]: 服务器现在的 TPS 速度被降低为 >:)", + "create.command.killTPSCommand.status.slowed_by.1": "[Create]: 服务器现在的 TPS 速度被降低了 %s ms >:)", "create.command.killTPSCommand.status.slowed_by.2": "[Create]: 服务器恢复到正常的 TPS 速度 :D", "create.command.killTPSCommand.status.usage.0": "[Create]: 用 /killtps stop 来让服务器的 TPS 速度变回正常", "create.command.killTPSCommand.status.usage.1": "[Create]: 用 /killtps start 来手动降低服务器 TPS 速度", "create.command.killTPSCommand.argument.tickTime": "tickTime", "create.contraption.minecart_contraption_too_big": "这一矿车装置似乎太大了,无法变为拾捡状态", - "create.contraption.minecart_contraption_illegal_pickup": "一股神秘的力量将这一装置与世界牢牢绑定在了一起。", + "create.contraption.minecart_contraption_illegal_pickup": "一股神秘的力量将这一装置与世界牢牢绑定在了一起", "_": "->------------------------] Subtitles [------------------------<-", @@ -1340,13 +1342,13 @@ "create.subtitle.fwoomp": "土豆加农炮:发射", "create.subtitle.worldshaper_place": "环境塑型器:放置方块", "create.subtitle.sanding_long": "打磨噪音", - "create.subtitle.crushing_1": "磨碎声", + "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.haunted_bell_use": "缠魂钟:鸣响", "create.subtitle.scroll_value": "拨码输入:咔哒", "create.subtitle.crafter_craft": "动力合成器:合成中", "create.subtitle.controller_put": "遥控器:放进讲台", @@ -1354,7 +1356,7 @@ "create.subtitle.wrench_remove": "组件:被破坏", "create.subtitle.sanding_short": "打磨噪音", "create.subtitle.cogs": "齿轮:嘎吱作响", - "create.subtitle.slime_added": "粘液:挤碎声", + "create.subtitle.slime_added": "黏液:压扁", "create.subtitle.wrench_rotate": "扳手:拧动", "create.subtitle.potato_hit": "土豆:击中", "create.subtitle.saw_activate_wood": "动力锯:切割", @@ -1374,9 +1376,9 @@ "_": "->------------------------] Item Descriptions [------------------------<-", "item.create.example_item.tooltip": "EXAMPLE ITEM (just a marker that this tooltip exists)", - "item.create.example_item.tooltip.summary": "A brief description of the item._Underscores_highlight a term.", + "item.create.example_item.tooltip.summary": "A brief description of the item. _Underscores_ highlight a term.", "item.create.example_item.tooltip.condition1": "When this", - "item.create.example_item.tooltip.behaviour1": "Then this item does this。(behaviours show on shift)", + "item.create.example_item.tooltip.behaviour1": "Then this item does this. (behaviours show on shift)", "item.create.example_item.tooltip.condition2": "And When this", "item.create.example_item.tooltip.behaviour2": "You can add as many behaviours as you like", "item.create.example_item.tooltip.control1": "When Ctrl pressed", @@ -1389,166 +1391,166 @@ "block.create.metal_bracket.tooltip.summary": "用这种工业风格的金属支架_装饰_你的_传动杆_,_齿轮_和_管道_吧。", "block.create.seat.tooltip": "坐垫", - "block.create.seat.tooltip.summary": "坐下来享受旅程吧!坐垫将会把玩家固定在一个移动装置上。也可以用来作为居家装饰,毕竟他有许多颜色。", - "block.create.seat.tooltip.condition1": "右击坐垫", - "block.create.seat.tooltip.behaviour1": "会使得玩家坐在_坐垫_上,按下左 Shift 可离开_坐垫_。", + "block.create.seat.tooltip.summary": "坐下来享受旅程吧!坐垫将会把玩家固定在一个移动_装置_上。也可以用来作为居家装饰,毕竟它有许多颜色。", + "block.create.seat.tooltip.condition1": "右击坐垫时", + "block.create.seat.tooltip.behaviour1": "会使得玩家坐在_坐垫_上,按下左 Shift 可离开_坐垫_", "item.create.blaze_cake.tooltip": "烈焰蛋糕", "item.create.blaze_cake.tooltip.summary": "为辛勤劳作的_烈焰人_精心准备的美味。让他们兴奋起来吧!", "item.create.wand_of_symmetry.tooltip": "对称之杖", - "item.create.wand_of_symmetry.tooltip.summary": "完美地镜面复制工作区域内的方块到另一边", - "item.create.wand_of_symmetry.tooltip.condition1": "当在快捷栏时", - "item.create.wand_of_symmetry.tooltip.behaviour1": "持续进行镜面复制。", - "item.create.wand_of_symmetry.tooltip.control1": "当右击地面时", - "item.create.wand_of_symmetry.tooltip.action1": "_创建_或_移动_镜面。", - "item.create.wand_of_symmetry.tooltip.control2": "当右击空气时", - "item.create.wand_of_symmetry.tooltip.action2": "_删除_镜面。", - "item.create.wand_of_symmetry.tooltip.control3": "当潜行右击时", - "item.create.wand_of_symmetry.tooltip.action3": "打开_配置界面_。", + "item.create.wand_of_symmetry.tooltip.summary": "完美地镜面复制工作区域内的方块到另一边。", + "item.create.wand_of_symmetry.tooltip.condition1": "在快捷栏时", + "item.create.wand_of_symmetry.tooltip.behaviour1": "持续进行镜面复制", + "item.create.wand_of_symmetry.tooltip.control1": "右击地面时", + "item.create.wand_of_symmetry.tooltip.action1": "_创建_或_移动_镜面", + "item.create.wand_of_symmetry.tooltip.control2": "右击空气时", + "item.create.wand_of_symmetry.tooltip.action2": "_删除_镜面", + "item.create.wand_of_symmetry.tooltip.control3": "潜行右击时", + "item.create.wand_of_symmetry.tooltip.action3": "打开_配置界面_", "item.create.handheld_worldshaper.tooltip": "手持式环境塑形器", - "item.create.handheld_worldshaper.tooltip.summary": "_创造_大陆和山脉的手持工具", - "item.create.handheld_worldshaper.tooltip.control1": "当左击方块时", - "item.create.handheld_worldshaper.tooltip.action1": "将工具放置的方块设置为该方块。", - "item.create.handheld_worldshaper.tooltip.control2": "当右击方块时", - "item.create.handheld_worldshaper.tooltip.action2": "_放置_或_替换_目标方块。", - "item.create.handheld_worldshaper.tooltip.control3": "当潜行右击时", - "item.create.handheld_worldshaper.tooltip.action3": "打开工具的_配置界面_。", + "item.create.handheld_worldshaper.tooltip.summary": "创造_大陆_和_山脉_的手持工具。", + "item.create.handheld_worldshaper.tooltip.control1": "左击方块时", + "item.create.handheld_worldshaper.tooltip.action1": "将工具放置的方块设置为该方块", + "item.create.handheld_worldshaper.tooltip.control2": "右击方块时", + "item.create.handheld_worldshaper.tooltip.action2": "_放置_或_替换_目标方块", + "item.create.handheld_worldshaper.tooltip.control3": "潜行右击时", + "item.create.handheld_worldshaper.tooltip.action3": "打开工具的_配置界面_", "item.create.tree_fertilizer.tooltip": "树木肥料", "item.create.tree_fertilizer.tooltip.summary": "由多种矿物质复合而成的强大生长剂,能够加速普通树种的生长速度。", "item.create.tree_fertilizer.tooltip.condition1": "在树苗上使用时", - "item.create.tree_fertilizer.tooltip.behaviour1": "使得该树_无视_它的_生长空间条件_,立刻长大。", + "item.create.tree_fertilizer.tooltip.behaviour1": "使得该树_无视_它的_生长空间条件_,立刻长大", "item.create.extendo_grip.tooltip": "伸缩机械手", - "item.create.extendo_grip.tooltip.summary": "biubiubiu! 大幅度_增加了_使用者的_触碰距离_。", - "item.create.extendo_grip.tooltip.condition1": "放置于副手栏时", - "item.create.extendo_grip.tooltip.behaviour1": "增加_主手_所使用物品的_接触距离_。", - "item.create.extendo_grip.tooltip.condition2": "当装备铜制背罐时", - "item.create.extendo_grip.tooltip.behaviour2": "使用罐中_气压_来_抵消_伸缩机械手的_耐久_损耗。", + "item.create.extendo_grip.tooltip.summary": "biubiubiu! 大幅度_增加_了使用者的_触及距离_。可以使用_铜背罐_供能。", + "item.create.extendo_grip.tooltip.condition1": "在副手时", + "item.create.extendo_grip.tooltip.behaviour1": "增加_主手_所使用物品的_触及距离_", + "item.create.extendo_grip.tooltip.condition2": "装备铜背罐时", + "item.create.extendo_grip.tooltip.behaviour2": "使用罐中_气压_来_抵消_伸缩机械手的_耐久_损耗", "item.create.potato_cannon.tooltip": "土豆加农炮", - "item.create.potato_cannon.tooltip.summary": "噗!把你亲手栽培的蔬菜砸向你的敌人。可以使用_铜制背罐_供能。", - "item.create.potato_cannon.tooltip.condition1": "当右击时", - "item.create.potato_cannon.tooltip.behaviour1": "_发射_你_物品栏_中任一可作为弹药的物品。", - "item.create.potato_cannon.tooltip.condition2": "当装备铜制背罐时", - "item.create.potato_cannon.tooltip.behaviour2": "使用罐中_气压_来_抵消_土豆加农炮的_耐久_损耗。", + "item.create.potato_cannon.tooltip.summary": "噗!把你亲手栽培的蔬菜砸向你的敌人。可以使用_铜背罐_供能。", + "item.create.potato_cannon.tooltip.condition1": "右击时", + "item.create.potato_cannon.tooltip.behaviour1": "_发射_你_物品栏_中任一可作为弹药的物品", + "item.create.potato_cannon.tooltip.condition2": "装备铜背罐时", + "item.create.potato_cannon.tooltip.behaviour2": "使用罐中_气压_来_抵消_土豆加农炮的_耐久_损耗", "item.create.filter.tooltip": "过滤器", - "item.create.filter.tooltip.summary": "可用于_精确_控制物流设备的_输出_以及_输入_,使得通过的物品流与_一组_物品或者数个_相嵌套的过滤器_相匹配。", - "item.create.filter.tooltip.condition1": "放置于过滤插槽中时", - "item.create.filter.tooltip.behaviour1": "根据_过滤器_的配置,来_决定_物品流是否能够通过。", - "item.create.filter.tooltip.condition2": "当右击时", - "item.create.filter.tooltip.behaviour2": "打开_配置面板_。", + "item.create.filter.tooltip.summary": "可用于_精确控制_物流设备的_输出_以及_输入_,使得通过的物品流与_一组_物品或者数个_相嵌套的过滤器_相匹配。", + "item.create.filter.tooltip.condition1": "放置于过滤槽时", + "item.create.filter.tooltip.behaviour1": "根据过滤器的_配置_,来_决定_物品流是否能够通过", + "item.create.filter.tooltip.condition2": "右击时", + "item.create.filter.tooltip.behaviour2": "打开_配置界面_", "item.create.attribute_filter.tooltip": "属性过滤器", - "item.create.attribute_filter.tooltip.summary": "可用于_精确_控制物流设备的_输出_以及_输入_,使得通过的物品流与_一组_物品_属性_以及_分类_相匹配。", - "item.create.attribute_filter.tooltip.condition1": "放置于过滤插槽中时", - "item.create.attribute_filter.tooltip.behaviour1": "根据_过滤器_的配置,来_决定_物品流是否能够通过。", - "item.create.attribute_filter.tooltip.condition2": "当右击时", - "item.create.attribute_filter.tooltip.behaviour2": "打开_配置面板_。", + "item.create.attribute_filter.tooltip.summary": "可用于_精确控制_物流设备的_输出_以及_输入_,使得通过的物品流与_一组_物品_属性_以及_分类_相匹配。", + "item.create.attribute_filter.tooltip.condition1": "放置于过滤槽时", + "item.create.attribute_filter.tooltip.behaviour1": "根据过滤器的_配置_,来_决定_物品流是否能够通过", + "item.create.attribute_filter.tooltip.condition2": "右击时", + "item.create.attribute_filter.tooltip.behaviour2": "打开_配置界面_", "item.create.empty_schematic.tooltip": "空白蓝图", - "item.create.empty_schematic.tooltip.summary": "可作为合成材料或在_蓝图桌_使用", + "item.create.empty_schematic.tooltip.summary": "可作为合成材料或在_蓝图桌_使用。", "item.create.schematic.tooltip": "蓝图", "item.create.schematic.tooltip.summary": "可将结构部署并放置到世界中,将蓝图全息影像部署完毕后,使用_蓝图加农炮_进行结构建造。", - "item.create.schematic.tooltip.condition1": "当手持蓝图时", + "item.create.schematic.tooltip.condition1": "手持时", "item.create.schematic.tooltip.behaviour1": "可以使用屏幕上的工具调整位置", - "item.create.schematic.tooltip.control1": "当潜行右击时", - "item.create.schematic.tooltip.action1": "打开一个用于输入_精确坐标_的界面。", + "item.create.schematic.tooltip.control1": "潜行右击时", + "item.create.schematic.tooltip.action1": "打开一个用于输入_精确坐标_的_界面_", "item.create.schematic_and_quill.tooltip": "蓝图与笔", "item.create.schematic_and_quill.tooltip.summary": "用于将世界中的结构保存到 .nbt 文件。", "item.create.schematic_and_quill.tooltip.condition1": "第一步", "item.create.schematic_and_quill.tooltip.behaviour1": "手持蓝图与笔右击选择两个对角点", "item.create.schematic_and_quill.tooltip.condition2": "第二步", - "item.create.schematic_and_quill.tooltip.behaviour2": "对准选定区域,按住 Ctrl 键并滑动鼠标滚轮,可以调整选区的大小,右击保存。", - "item.create.schematic_and_quill.tooltip.control1": "右击", - "item.create.schematic_and_quill.tooltip.action1": "选取一个对角点/确认保存。", - "item.create.schematic_and_quill.tooltip.control2": "按住 Ctrl ", - "item.create.schematic_and_quill.tooltip.action2": "可在_空中_选择点,_滑动滚轮_可调整距离。", - "item.create.schematic_and_quill.tooltip.control3": "当潜行右击时", - "item.create.schematic_and_quill.tooltip.action3": "_重置_并删除选区。", + "item.create.schematic_and_quill.tooltip.behaviour2": "对准选定区域,按住_Ctrl_并_滑动滚轮_,可以调整选区的大小,右击保存", + "item.create.schematic_and_quill.tooltip.control1": "右击时", + "item.create.schematic_and_quill.tooltip.action1": "选取一个对角点/确认保存", + "item.create.schematic_and_quill.tooltip.control2": "按住 Ctrl 时", + "item.create.schematic_and_quill.tooltip.action2": "可在_空中_选择点,_滑动滚轮_可调整距离", + "item.create.schematic_and_quill.tooltip.control3": "潜行右击时", + "item.create.schematic_and_quill.tooltip.action3": "_重置_并删除选区", "block.create.schematicannon.tooltip": "蓝图加农炮", "block.create.schematicannon.tooltip.summary": "发射方块,重新构建已在世界中部署的_蓝图_,会使用相邻箱子中的物品进行填充,_火药_作为燃料。", - "block.create.schematicannon.tooltip.condition1": "当右击时", + "block.create.schematicannon.tooltip.condition1": "右击时", "block.create.schematicannon.tooltip.behaviour1": "打开_界面_", "block.create.schematic_table.tooltip": "蓝图桌", - "block.create.schematic_table.tooltip.summary": "将保存的蓝图图写入_空白蓝图_", + "block.create.schematic_table.tooltip.summary": "将保存的蓝图写入_空白蓝图_。", "block.create.schematic_table.tooltip.condition1": "放入空白蓝图时", - "block.create.schematic_table.tooltip.behaviour1": "可从 Schematics 文件夹中上传所选文件。", + "block.create.schematic_table.tooltip.behaviour1": "可从 Schematics 文件夹中上传所选文件", "item.create.goggles.tooltip": "工程师护目镜", "item.create.goggles.tooltip.summary": "一副可以扩增显示_动力学信息_的实用眼镜。", - "item.create.goggles.tooltip.condition1": "当装备时", - "item.create.goggles.tooltip.behaviour1": "根据对应动力组件的_转速等级_,显示它的_颜色指示器_,也会显示这个组件的_应力影响_以及_应力量_。", - "item.create.goggles.tooltip.condition2": "当看向仪表时", - "item.create.goggles.tooltip.behaviour2": "将会显示与仪表相连的网络的_转速_、_应力_等详细信息。", - "item.create.goggles.tooltip.condition3": "当看向流体容器时", - "item.create.goggles.tooltip.behaviour3": "显示出方块的_容量_细节,以及其中包含的所有_流体_。", + "item.create.goggles.tooltip.condition1": "装备时", + "item.create.goggles.tooltip.behaviour1": "根据对应动力组件的_转速等级_,显示它的_颜色指示器_,也会显示这个组件的_应力影响_以及_应力量_", + "item.create.goggles.tooltip.condition2": "看向仪表时", + "item.create.goggles.tooltip.behaviour2": "会显示与仪表相连的网络的_转速_、_应力_等详细信息", + "item.create.goggles.tooltip.condition3": "看向流体容器时", + "item.create.goggles.tooltip.behaviour3": "会显示出方块的_容量_细节,以及其中包含的所有_流体_", "item.create.wrench.tooltip": "扳手", - "item.create.wrench.tooltip.summary": "操控动力组件的使用工具。可用于_旋转_,_拆除_以及_配置_组件。", - "item.create.wrench.tooltip.control1": "当右击_动力方块_时", - "item.create.wrench.tooltip.action1": "以点击的面为轴心_旋转_点击的方块", - "item.create.wrench.tooltip.control2": "当潜行右击时", - "item.create.wrench.tooltip.action2": "会_拆除动力组件_并将其移动到你的背包中。", + "item.create.wrench.tooltip.summary": "操控动力组件的实用工具。可用于_旋转_、_拆除_以及_配置_组件。", + "item.create.wrench.tooltip.control1": "右击动力方块时", + "item.create.wrench.tooltip.action1": "以点击的面为轴心_旋转_点击的_组件_", + "item.create.wrench.tooltip.control2": "潜行右击时", + "item.create.wrench.tooltip.action2": "会_拆除动力组件_并将其放回_你的背包_", "block.create.nozzle.tooltip": "分散网", "block.create.nozzle.tooltip.summary": "依附在鼓风机上,能够将鼓风机的效果分散到_各个方向_。", "block.create.cuckoo_clock.tooltip": "布谷鸟闹钟", - "block.create.cuckoo_clock.tooltip.summary": "精致的工艺品,能够记录时间", + "block.create.cuckoo_clock.tooltip.summary": "精致的工艺品,能够_记录时间_。", "block.create.cuckoo_clock.tooltip.condition1": "接入动力时", - "block.create.cuckoo_clock.tooltip.behaviour1": "显示_当前时间_并且一天会咕咕两次。_中午_咕咕一次,_黄昏可以睡觉_的时候咕咕一次 ", + "block.create.cuckoo_clock.tooltip.behaviour1": "显示_当前时间_并且一天会咕咕两次,_中午_咕咕一次,_黄昏可以睡觉_的时候咕咕一次", "block.create.turntable.tooltip": "转盘", - "block.create.turntable.tooltip.summary": "让旋转力给你带来一场刺激的旋转风车体验。", + "block.create.turntable.tooltip.summary": "让_旋转力_给你带来一场刺激的旋转风车体验。", "block.create.toolbox.tooltip": "工具箱", "block.create.toolbox.tooltip.summary": "每个发明家最亲爱的伙伴!可以方便地大量_收纳__8种_不同的物品类型。", - "block.create.toolbox.tooltip.condition1": "当拾起时", - "block.create.toolbox.tooltip.behaviour1": "_保留_库存_内容_。", - "block.create.toolbox.tooltip.condition2": "当放置在范围内时 ", - "block.create.toolbox.tooltip.behaviour2": "_附近_的_玩家_可以按下_使用附近的工具箱__快捷键_来_远程_访问它的库存。", - "block.create.toolbox.tooltip.condition3": "当右击时", - "block.create.toolbox.tooltip.behaviour3": "打开_工具箱界面_。", + "block.create.toolbox.tooltip.condition1": "拾起时", + "block.create.toolbox.tooltip.behaviour1": "_保留_库存_内容_", + "block.create.toolbox.tooltip.condition2": "放置在一定范围内时", + "block.create.toolbox.tooltip.behaviour2": "_附近_的_玩家_可以按下_访问附近的工具箱__快捷键_来_远程_访问它的库存", + "block.create.toolbox.tooltip.condition3": "右击时", + "block.create.toolbox.tooltip.behaviour3": "打开_工具箱界面_", - "block.create.stockpile_switch.tooltip": "存量转换器", - "block.create.stockpile_switch.tooltip.summary": "根据连接的容器中_储存物品_的数量切换红石信号强度。自带有过滤槽,与_比较器_不同的是,你可以配置_存量转换器_信号反转的_阈值_。", - "block.create.stockpile_switch.tooltip.condition1": "当右击时", - "block.create.stockpile_switch.tooltip.behaviour1": "打开_配置界面_。", + "block.create.stockpile_switch.tooltip": "存量转信器", + "block.create.stockpile_switch.tooltip.summary": "根据连接的容器中_已储存物品数_或_流体量_切换红石信号。自带有过滤槽,与_比较器_不同的是,你可以配置_存量转信器_信号反转的_阈值_。", + "block.create.stockpile_switch.tooltip.condition1": "右击时", + "block.create.stockpile_switch.tooltip.behaviour1": "打开_配置界面_", "block.create.content_observer.tooltip": "物品侦测器", "block.create.content_observer.tooltip.summary": "_检测_与配置过的_过滤器_匹配的_容器_、_管道_或_传送带_中的_物品_或_流体_。", - "block.create.content_observer.tooltip.condition1": "当检测容器时", - "block.create.content_observer.tooltip.behaviour1": "如果检测的容器内有_匹配_的_物品_,发出_红石信号_。", - "block.create.content_observer.tooltip.condition2": "当检测漏斗时 ", - "block.create.content_observer.tooltip.behaviour2": "如果一个_匹配_的_物品_通过,则发出一个_红石脉冲_。", + "block.create.content_observer.tooltip.condition1": "检测容器时", + "block.create.content_observer.tooltip.behaviour1": "如果检测的容器内有_匹配_的_物品_,发出_红石信号_", + "block.create.content_observer.tooltip.condition2": "检测漏斗时 ", + "block.create.content_observer.tooltip.behaviour2": "如果一个_匹配_的_物品_通过,则发出一次_红石脉冲_", "block.create.creative_crate.tooltip": "创造板条箱", - "block.create.creative_crate.tooltip.summary": "这种_储存容器_可以无限地复制任何物品。它还可以移除附近的_蓝图加农炮_的材料需求。", - "block.create.creative_crate.tooltip.condition1": "当标记了物品时", - "block.create.creative_crate.tooltip.behaviour1": "任何从容器中_提取_的物品都是_无限量的_,而任何_放置_到容器中的物品都会被_送入虚空_", + "block.create.creative_crate.tooltip.summary": "这种_储存容器_可以无限地复制任何物品。它还可以移除相邻的_蓝图加农炮_的材料需求。", + "block.create.creative_crate.tooltip.condition1": "标记了物品时", + "block.create.creative_crate.tooltip.behaviour1": "任何从容器中_提取_的物品都是_无限量_的,而任何_放置_到容器中的物品都会被_清空_", "item.create.creative_blaze_cake.tooltip": "创造蛋糕", "item.create.creative_blaze_cake.tooltip.summary": "为_烈焰人燃烧室_特制的小食,可以让你_控制燃烧室的热量等级_。吃下这个蛋糕之后,烈焰人燃烧室将_不再耗尽燃料_。", - "item.create.creative_blaze_cake.tooltip.condition1": "对着烈焰人燃烧室使用", - "item.create.creative_blaze_cake.tooltip.behaviour1": "_锁定_烈焰人燃烧室的热量等级。如果再次使用,会使得燃烧室的热量等级开始_循环_变化。", + "item.create.creative_blaze_cake.tooltip.condition1": "右击烈焰人燃烧室时", + "item.create.creative_blaze_cake.tooltip.behaviour1": "_锁定_烈焰人燃烧室的热量等级,如果再次使用,会使得燃烧室的热量等级开始_循环_变化", "block.create.controller_rail.tooltip": "控制铁轨", - "block.create.controller_rail.tooltip.summary": "一种_单向动力铁轨_,能够_精细控制_矿车的_移动速度_。", - "block.create.controller_rail.tooltip.condition1": "当接受红石信号时", - "block.create.controller_rail.tooltip.behaviour1": "根据_信号强度__加速_或_减速_通过的_矿车_。还会将红石信号传递到相邻的控制铁轨。为两个控制铁轨提供不同强度的红石信号将导致信号强度在它们之间的控制铁轨上过渡。", + "block.create.controller_rail.tooltip.summary": "一种_单向动力铁轨_,能够_精细控制_经过的矿车的_移动速度_。", + "block.create.controller_rail.tooltip.condition1": "通入红石信号时", + "block.create.controller_rail.tooltip.behaviour1": "根据_信号强度__加速_或_减速_通过的_矿车_,还会将红石信号传递到相邻的控制铁轨,为两个控制铁轨提供不同强度的红石信号,将导致信号强度在它们之间的控制铁轨上过渡", "item.create.sand_paper.tooltip": "砂纸", - "item.create.sand_paper.tooltip.summary": "用来_打磨_物品的砂纸,可以用_机械手_来实现自动化。", + "item.create.sand_paper.tooltip.summary": "用来_打磨_物品的砂纸,可以用机械手来实现自动化。", "item.create.sand_paper.tooltip.condition1": "使用时", - "item.create.sand_paper.tooltip.behaviour1": "打磨_副手_上或者_准心所指_的物品。", + "item.create.sand_paper.tooltip.behaviour1": "打磨_副手_上或者_准心所指_的物品", "item.create.builders_tea.tooltip": "建造工茶饮", "item.create.builders_tea.tooltip.summary": "饮下这杯完美茶饮,开启神清气爽的一天。可以恢复_饥饿值_并获得_急迫_效果。", @@ -1556,157 +1558,157 @@ "item.create.refined_radiance.tooltip": "光辉石", "item.create.refined_radiance.tooltip.summary": "一种用_光辉_锻造的化合物材料。", "item.create.refined_radiance.tooltip.condition1": "尚未完工", - "item.create.refined_radiance.tooltip.behaviour1": "该材料在未来可能会有更多的用途。", + "item.create.refined_radiance.tooltip.behaviour1": "该材料在未来可能会有更多的用途", "item.create.shadow_steel.tooltip": "暗影钢", "item.create.shadow_steel.tooltip.summary": "一种用_虚空_锻造的化合物材料。", "item.create.shadow_steel.tooltip.condition1": "尚未完工", - "item.create.shadow_steel.tooltip.behaviour1": "该材料在未来可能会有更多的用途。", + "item.create.shadow_steel.tooltip.behaviour1": "该材料在未来可能会有更多的用途", "item.create.linked_controller.tooltip": "无线红石遥控器", - "item.create.linked_controller.tooltip.summary": "提供_六个_可以绑定_无线红石_频道的按钮,用于_遥控_附近的_无线红石信号终端_。", + "item.create.linked_controller.tooltip.summary": "提供_六个_可以绑定_无线红石_频率的按钮,用于_遥控_附近的_无线红石信号终端_。", "item.create.linked_controller.tooltip.condition1": "右击时", - "item.create.linked_controller.tooltip.behaviour1": "_拿起_或_放下_遥控器。拿起遥控器时,_控制移动_将被用来_操作遥控器_,而不是移动玩家。", + "item.create.linked_controller.tooltip.behaviour1": "_拿起_或_放下_遥控器,拿起遥控器时,_控制移动_将被用来_操作遥控器_,而不是移动玩家", "item.create.linked_controller.tooltip.condition2": "潜行右击时", - "item.create.linked_controller.tooltip.behaviour2": "打开手动_配置界面_。", + "item.create.linked_controller.tooltip.behaviour2": "打开手动_配置界面_", "item.create.linked_controller.tooltip.condition3": "右击无线红石信号终端时", - "item.create.linked_controller.tooltip.behaviour3": "启用_绑定模式_,按下_六个按键_中的一个,即可将此按键与_无线红石信号终端的频率_绑定。", + "item.create.linked_controller.tooltip.behaviour3": "启用_绑定模式_,按下_六个按键_中的一个,即可将此按键与_无线红石信号终端的频率_绑定", "item.create.linked_controller.tooltip.condition4": "右击讲台时", - "item.create.linked_controller.tooltip.behaviour4": "将遥控器放在讲台上以便使用(潜行右击来取回遥控器)。", + "item.create.linked_controller.tooltip.behaviour4": "将遥控器放在讲台上以便使用(潜行右击来取回遥控器)", "item.create.diving_helmet.tooltip": "潜水头盔", - "item.create.diving_helmet.tooltip.summary": "与_铜制背罐_配合使用,为穿戴者提供在_水下_行动一段时间所需的_空气_。", + "item.create.diving_helmet.tooltip.summary": "与_铜背罐_配合使用,为穿戴者提供在_水下_行动一段时间所需的_空气_。", "item.create.diving_helmet.tooltip.condition1": "戴在头上时", - "item.create.diving_helmet.tooltip.behaviour1": "提供_水下呼吸_效果。缓慢消耗背罐中的_压缩空气_。", + "item.create.diving_helmet.tooltip.behaviour1": "提供_水下呼吸_效果,缓慢消耗背罐中的_压缩空气_", - "item.create.copper_backtank.tooltip": "铜制背罐", + "item.create.copper_backtank.tooltip": "铜背罐", "item.create.copper_backtank.tooltip.summary": "一个可以_背在背上_的_铜罐_,用于携带一定量的压缩空气。", "item.create.copper_backtank.tooltip.condition1": "背在背上时", - "item.create.copper_backtank.tooltip.behaviour1": "为其他需要_压缩空气_的装备提供所需的空气。", - "item.create.copper_backtank.tooltip.condition2": "当放下并接入动力时", - "item.create.copper_backtank.tooltip.behaviour2": "基于转速从周围环境中_收集_并_加压空气_。", + "item.create.copper_backtank.tooltip.behaviour1": "为其他需要_压缩空气_的装备提供所需的空气", + "item.create.copper_backtank.tooltip.condition2": "放下并接入动力时", + "item.create.copper_backtank.tooltip.behaviour2": "基于转速从周围环境中_收集_并_加压空气_", "item.create.diving_boots.tooltip": "潜水靴", "item.create.diving_boots.tooltip.summary": "一双_沉重的靴子_,让穿戴者可以更方便的探索海底。", "item.create.diving_boots.tooltip.condition1": "穿在脚上时", - "item.create.diving_boots.tooltip.behaviour1": "穿戴者_下沉更快_并_无法游泳_。穿戴者可以在水下_行走_和_跳跃_。穿戴者不会被_传送带_移走。", + "item.create.diving_boots.tooltip.behaviour1": "穿戴者_下沉更快_且_无法游泳_,穿戴者可以在水下_行走_和_跳跃_,穿戴者不会被_传送带_移走", "item.create.crafting_blueprint.tooltip": "合成蓝图", - "item.create.crafting_blueprint.tooltip.summary": "_放在_墙上,便可用它来设置特定的_原料排布_,以便更快地制作物品。每个格子都可以设定一个配方。", - "item.create.crafting_blueprint.condition1": "当右击空的格子时", - "item.create.crafting_blueprint.behaviour1": "打开一个_配方设置界面_,用于_设置_一个_合成配方_以及展示的物品。", - "item.create.crafting_blueprint.condition2": "当右击设置好的格子时", - "item.create.crafting_blueprint.behaviour2": "使用_物品栏_中的物品制作_设置的配方_。_潜行_可以一次合成_一组_。", + "item.create.crafting_blueprint.tooltip.summary": "_放在_墙上,便可用它来设置_特定的合成配方_,以便更快地制作物品。每个格子都可以设定一个配方。", + "item.create.crafting_blueprint.condition1": "右击空的格子时", + "item.create.crafting_blueprint.behaviour1": "打开一个_配方设置界面_,用于_设置_一个_合成配方_以及展示的物品", + "item.create.crafting_blueprint.condition2": "右击已设置好的格子时", + "item.create.crafting_blueprint.behaviour2": "使用_物品栏_中的物品制作_设置好的配方_,_潜行_可以一次合成_一组_", "item.create.minecart_coupling.tooltip": "矿车连轴器", - "item.create.minecart_coupling.tooltip.summary": "将多个_矿车_或_连接运输装置_链接在一起,构成雄伟的火车。", - "item.create.minecart_coupling.tooltip.condition1": "作用与矿车时", - "item.create.minecart_coupling.tooltip.behaviour1": "将两个矿车耦合在一起,在移动时将它们保持_恒定的距离_。", + "item.create.minecart_coupling.tooltip.summary": "将多个_矿车装置_或_车厢装置_链接在一起,构成雄伟的列车。", + "item.create.minecart_coupling.tooltip.condition1": "在矿车上使用时", + "item.create.minecart_coupling.tooltip.behaviour1": "将两个矿车_链接_在一起,在移动时将它们保持_恒定的距离_", "item.create.experience_nugget.tooltip": "经验颗粒", - "item.create.experience_nugget.tooltip.summary": "_叮!_从你的奇妙发明中汲取_灵感_", - "item.create.experience_nugget.tooltip.condition1": "当使用时", - "item.create.experience_nugget.tooltip.behaviour1": "_吸收_其中包含的_经验值_。", + "item.create.experience_nugget.tooltip.summary": "_叮!_从你的奇妙发明中汲取_灵感_。", + "item.create.experience_nugget.tooltip.condition1": "使用时", + "item.create.experience_nugget.tooltip.behaviour1": "_吸收_其中包含的_经验值_", "block.create.peculiar_bell.tooltip": "奇异钟", - "block.create.peculiar_bell.tooltip.summary": "装饰用的_黄铜质钟_。放在_灵魂火_的正上方可能会产生意料之外的后果......", + "block.create.peculiar_bell.tooltip.summary": "装饰用的_黄铜钟_。放在_灵魂火_的正上方可能会产生意料之外的后果……", - "block.create.haunted_bell.tooltip": "森魂钟", + "block.create.haunted_bell.tooltip": "缠魂钟", "block.create.haunted_bell.tooltip.summary": "_被诅咒_的钟,来自下界的迷失的灵魂缠绕于其上。", - "block.create.haunted_bell.tooltip.condition1": "当手持或鸣响时", - "block.create.haunted_bell.tooltip.behaviour1": "标识出附近可能生成_敌对生物_的_亮度不足_之处。", + "block.create.haunted_bell.tooltip.condition1": "手持或鸣响时", + "block.create.haunted_bell.tooltip.behaviour1": "标识出附近可能生成_敌对生物_的_亮度不足_之处", "_": "->------------------------] Ponder Content [------------------------<-", "create.ponder.hold_to_ponder": "按住 [%1$s] 开始思索", "create.ponder.subject": "情景主题", - "create.ponder.pondering": "思索...", - "create.ponder.identify_mode": "名称显示模式开,[%1$s]来继续思索", + "create.ponder.pondering": "思索……", + "create.ponder.identify_mode": "显示方块名称已启用\n按 [%1$s] 继续思索", "create.ponder.associated": "关联词条", "create.ponder.close": "思索结束", "create.ponder.identify": "显示方块名称", "create.ponder.next": "下一情景", - "create.ponder.previous": "前一情景", + "create.ponder.previous": "上一情景", "create.ponder.replay": "重放", "create.ponder.think_back": "回想", "create.ponder.slow_text": "舒适阅读", "create.ponder.exit": "退出", "create.ponder.welcome": "欢迎来到思索界面", "create.ponder.categories": "机械动力中包含的条目", - "create.ponder.index_description": "点击一个图标来查看相关的物品和方块。", + "create.ponder.index_description": "点击一个图标来查看相关的物品和方块", "create.ponder.index_title": "思索索引", "create.ponder.shared.rpm16": "16 RPM", - "create.ponder.shared.behaviour_modify_wrench": "可以用扳手调整它的行为。", - "create.ponder.shared.storage_on_contraption": "与装置相接的存储空间,会自动将装置遇到的掉落物拾取到空间内。", + "create.ponder.shared.behaviour_modify_wrench": "可以用扳手调整它的行为", + "create.ponder.shared.storage_on_contraption": "与装置相接的容器,会自动拾取装置遇到的掉落物", "create.ponder.shared.sneak_and": "潜行 +", "create.ponder.shared.rpm8": "8 RPM", "create.ponder.shared.ctrl_and": "Ctrl +", "create.ponder.shared.rpm32": "32 RPM", "create.ponder.shared.rpm16_source": "动力源:16 RPM", - "create.ponder.shared.movement_anchors": "有了底盘和强力胶,移动起大型结构轻轻松松。", + "create.ponder.shared.movement_anchors": "有了底盘和强力胶,移动起大型结构轻轻松松", "create.ponder.tag.redstone": "逻辑组件", - "create.ponder.tag.redstone.description": "这些组件会在红石工程中发挥大用处。", + "create.ponder.tag.redstone.description": "这些组件会在红石工程中发挥大用处", "create.ponder.tag.contraption_assembly": "方块连接功能", "create.ponder.tag.contraption_assembly.description": "将各个组件连接以便同时运动的工具以及组件", "create.ponder.tag.fluids": "流体操纵器械", - "create.ponder.tag.fluids.description": "这些组件可以用于传递流体,以及利用流体进行工作。", + "create.ponder.tag.fluids.description": "这些组件可以用于传递流体,以及利用流体进行工作", "create.ponder.tag.decoration": "装饰", - "create.ponder.tag.decoration.description": "装饰是这些组件的常见用法。", - "create.ponder.tag.windmill_sails": "风车轴承的帆", - "create.ponder.tag.windmill_sails.description": "在进行风车组装时会被算入风车旋转力的方块,这些方块的效能都是一样的。", - "create.ponder.tag.arm_targets": "机械臂的工作目标", - "create.ponder.tag.arm_targets.description": "该组件可做为机械臂的输入或者输出点。", + "create.ponder.tag.decoration.description": "装饰是这些组件的常见用法", + "create.ponder.tag.windmill_sails": "用于风车轴承的帆", + "create.ponder.tag.windmill_sails.description": "在进行风车组装时会被算入风车强度的方块,这些方块的效能都是一样的", + "create.ponder.tag.arm_targets": "动力臂的工作目标", + "create.ponder.tag.arm_targets.description": "该组件可做为动力臂的输入或者输出点", "create.ponder.tag.kinetic_appliances": "动力设备", - "create.ponder.tag.kinetic_appliances.description": "这些组件可以利用旋转力进行工作。", + "create.ponder.tag.kinetic_appliances.description": "这些组件可以利用旋转力进行工作", "create.ponder.tag.kinetic_sources": "动力源", - "create.ponder.tag.kinetic_sources.description": "能够发生动力的组件。", - "create.ponder.tag.movement_anchor": "运动源泉", - "create.ponder.tag.movement_anchor.description": "有了它,运动装置才得以可能,它可以以数种方式使相接的结构运动起来。", + "create.ponder.tag.kinetic_sources.description": "能够产生旋转力的组件", + "create.ponder.tag.movement_anchor": "运动锚点", + "create.ponder.tag.movement_anchor.description": "允许创建移动装置的组件,它可以以数种方式使相接的结构运动起来", "create.ponder.tag.kinetic_relays": "动力方块", - "create.ponder.tag.kinetic_relays.description": "用于传递旋转力的组件。", + "create.ponder.tag.kinetic_relays.description": "用于传递旋转力的组件", "create.ponder.tag.contraption_actor": "装置执行组件", "create.ponder.tag.contraption_actor.description": "能在移动的装置上执行特殊功能的组件", "create.ponder.tag.creative": "创造模式", - "create.ponder.tag.creative.description": "总有些东西是生存模式得不到的。", + "create.ponder.tag.creative.description": "总有些东西是生存模式得不到的", "create.ponder.tag.logistics": "物品运输", "create.ponder.tag.logistics.description": "该组件可以协助物品运输", - "create.ponder.analog_lever.header": "使用模拟拉杆控制信号发送", - "create.ponder.analog_lever.text_1": "要想使得红石信号源信号强度精确且占地面积小,模拟拉杆不可少。", - "create.ponder.analog_lever.text_2": "右击可以提升输出模拟信号的强度", - "create.ponder.analog_lever.text_3": "潜行右击将会减少输出模拟信号的强度", + "create.ponder.analog_lever.header": "使用模拟拉杆控制红石信号", + "create.ponder.analog_lever.text_1": "模拟拉杆可提供紧凑而精确的红石信号源", + "create.ponder.analog_lever.text_2": "右击会提升输出的模拟信号的强度", + "create.ponder.analog_lever.text_3": "潜行右击会减少输出的模拟信号的强度", "create.ponder.andesite_tunnel.header": "安山隧道用法", "create.ponder.andesite_tunnel.text_1": "安山隧道可用于遮掩传送带", - "create.ponder.andesite_tunnel.text_2": "只要在漏斗的侧边加装上安山隧道...", - "create.ponder.andesite_tunnel.text_3": "...路过的所有物品堆都会被精准地拣出一个物品", + "create.ponder.andesite_tunnel.text_2": "当安山隧道与侧边有连接时……", + "create.ponder.andesite_tunnel.text_3": "……经过的所有物品堆都会被精准地分出一个物品", "create.ponder.andesite_tunnel.text_4": "剩下的物品则不受影响,继续前进", "create.ponder.basin.header": "工作盆内物品处理", "create.ponder.basin.text_1": "一个可以对放入的物品以及流体进行处理的盆", - "create.ponder.basin.text_2": "处理完毕后,工作盆会尝试从它的底面进行产物输出", + "create.ponder.basin.text_2": "处理完毕后,工作盆会尝试从它下方的侧面输出", "create.ponder.basin.text_3": "若在正确的位置上放置了有效的组件,工作盆会显示出一个输出龙头", "create.ponder.basin.text_4": "有多种设备可以引发工作盆的这一行为", - "create.ponder.basin.text_5": "产物会被输出到盆下方的存储空间内", + "create.ponder.basin.text_5": "产物会被输出到盆下方的容器内", "create.ponder.basin.text_6": "如果没有显示出输出龙头,那么盆内的产物将会一直留存在盆内", "create.ponder.basin.text_7": "这在产物需要作为新一轮处理的原料时相当有用", "create.ponder.basin.text_8": "需要输出的产物仍需从盆内取出", - "create.ponder.basin.text_9": "若是加装过滤,那么你便无需担心会将未被处理的物品抽取出来了", + "create.ponder.basin.text_9": "你可能需要过滤器避免未被处理的物品被抽取出来", "create.ponder.bearing_modes.header": "动力轴承的运动模式", - "create.ponder.bearing_modes.text_1": "停止时,轴承会控制结构以特定的角度停在最近的与格相对齐之处", - "create.ponder.bearing_modes.text_2": "你可以调整整个结构永不方块化,或者仅在结构的起始位置方块化", + "create.ponder.bearing_modes.text_1": "停止时,轴承会控制结构以特定的角度停在最近的与网格相对齐之处", + "create.ponder.bearing_modes.text_2": "你可以调整使整个结构永不方块化,或者仅在结构的起始位置方块化", - "create.ponder.belt_casing.header": "带机壳的传送带", + "create.ponder.belt_casing.header": "装壳传送带", "create.ponder.belt_casing.text_1": "你可以用黄铜或者安山机壳装饰你的传送带", "create.ponder.belt_casing.text_2": "使用扳手即可移除机壳", "create.ponder.belt_connector.header": "传送带用法", - "create.ponder.belt_connector.text_1": "手持传送带右击两根传动杆,可以将两根杆连接起来。", + "create.ponder.belt_connector.text_1": "手持传送带右击两根传动杆,可以将两根杆连接起来", "create.ponder.belt_connector.text_2": "如果不小心选错了,潜行右击即可取消选择", "create.ponder.belt_connector.text_3": "你也可以在传送带的中间加装额外的传动杆", - "create.ponder.belt_connector.text_4": "通过传送带相连的传动杆,会以相同的转速以及方向进行旋转", + "create.ponder.belt_connector.text_4": "通过传送带连接的传动杆,会以相同的转速以及方向进行旋转", "create.ponder.belt_connector.text_5": "加装的传动杆可以用扳手拆下来", "create.ponder.belt_connector.text_6": "传送带亦可染色", @@ -1716,68 +1718,68 @@ "create.ponder.belt_directions.text_3": "2. 可以对角连接", "create.ponder.belt_directions.text_4": "3. 可以垂直连接", "create.ponder.belt_directions.text_5": "4. 还可以水平连接竖直放置的传动杆", - "create.ponder.belt_directions.text_6": "以上为所有可能的连接方向。传送带的连接范围为 2 到 20 格", + "create.ponder.belt_directions.text_6": "以上为所有可能的连接方向,传送带的连接范围为 2 到 20 格", "create.ponder.belt_transport.header": "在物流中使用传送带", "create.ponder.belt_transport.text_1": "运动的传送带可以运输物品以及其他实体", - "create.ponder.belt_transport.text_2": "空手右击传送带,即可将其上的物品拿下来。", + "create.ponder.belt_transport.text_2": "空手右击传送带,即可将其上的物品拿下来", "create.ponder.blaze_burner.header": "烈焰人燃烧室补喂", "create.ponder.blaze_burner.text_1": "烈焰人燃烧室可以为工作盆的物品处理提供热量", - "create.ponder.blaze_burner.text_2": "因而,你需要喂给室内的烈焰人一些可燃物品", - "create.ponder.blaze_burner.text_3": "如果喂给了它烈焰蛋糕,它还能达到更强的热力等级", - "create.ponder.blaze_burner.text_4": "你可以用机械手或者机械臂进行自动化补喂", + "create.ponder.blaze_burner.text_2": "为此,你需要喂给烈焰人一些可燃物品", + "create.ponder.blaze_burner.text_3": "如果喂给它烈焰蛋糕,它还能达到更强的热量等级", + "create.ponder.blaze_burner.text_4": "你可以用机械手或者动力臂进行自动化补喂", "create.ponder.brass_funnel.header": "黄铜漏斗", - "create.ponder.brass_funnel.text_1": "安山岩漏斗一次只能提取出一个物品。", - "create.ponder.brass_funnel.text_2": "黄铜漏斗可以一次提取一组物品。", - "create.ponder.brass_funnel.text_3": "对着过滤槽滑动滚轮,还可以精确调节黄铜漏斗的提取数量。", - "create.ponder.brass_funnel.text_4": "对着过滤槽使用某个物品,可以限制漏斗的行为,使其只传输匹配的物品。", + "create.ponder.brass_funnel.text_1": "安山岩漏斗一次只能提取出一个物品", + "create.ponder.brass_funnel.text_2": "黄铜漏斗可以一次提取一组物品", + "create.ponder.brass_funnel.text_3": "对着过滤槽滑动滚轮,还可以精确调节黄铜漏斗的提取数量", + "create.ponder.brass_funnel.text_4": "对着过滤槽使用某个物品,可以限制漏斗的行为,使其只传输匹配的物品", "create.ponder.brass_tunnel.header": "黄铜隧道用法", "create.ponder.brass_tunnel.text_1": "黄铜隧道可以遮掩住你的传送带", "create.ponder.brass_tunnel.text_2": "隧道的每一个开口面都有过滤槽", "create.ponder.brass_tunnel.text_3": "在输入处的过滤槽仅会阻挡住不匹配的物品", "create.ponder.brass_tunnel.text_4": "输出处的过滤槽可用于以种类为依据的物品整理", - "create.ponder.brass_tunnel.text_5": "如果有数种匹配的物品通过,那么隧道的分配模式将会决定这些物品何去何从", + "create.ponder.brass_tunnel.text_5": "当通过的物品有多个有效输出端时,那么隧道的分配模式将会决定这些物品何去何从", "create.ponder.brass_tunnel.text_6": "连接了平行传送带的黄铜隧道,会将隧道、传送带组成一个组", - "create.ponder.brass_tunnel.text_7": "输入组内的物品会被分配到所有组内连接的对象中", - "create.ponder.brass_tunnel.text_8": "在这一情况下,你仍可以将物品直接输入到隧道方块中", + "create.ponder.brass_tunnel.text_7": "输入的物品现在会分配到所有连接的输出端", + "create.ponder.brass_tunnel.text_8": "在这一情况下,你也可以将物品直接输入到隧道方块中", "create.ponder.brass_tunnel_modes.header": "黄铜隧道的分配模式", "create.ponder.brass_tunnel_modes.text_1": "使用扳手即可调节隧道的分配模式", "create.ponder.brass_tunnel_modes.text_10": "“同步输入”是黄铜隧道的一种特殊设定", "create.ponder.brass_tunnel_modes.text_11": "只有在组内全部的隧道都有一个等待通过的物品时,物品才能通过此隧道", "create.ponder.brass_tunnel_modes.text_12": "这确保了所有受影响的传送带能够以相同的速率进行物品补给", - "create.ponder.brass_tunnel_modes.text_2": "“分流”会尝试将物品堆分流传输到可用的输出端", - "create.ponder.brass_tunnel_modes.text_3": "如果某个输出端无法容纳更多的物品,那么此出口不纳入分流的运算中", - "create.ponder.brass_tunnel_modes.text_4": "“强制分流”不会跳过某个输出端,而是一直等待着此输出端能够容纳更多物品,才会继续物品传输", - "create.ponder.brass_tunnel_modes.text_5": "“轮询调度”会保持物品堆完整,循环检索各个输出口,满足条件后将物品堆全部送入 ", - "create.ponder.brass_tunnel_modes.text_6": "与分流类似,如果输出口无法容纳更多物品,那它会被跳过", - "create.ponder.brass_tunnel_modes.text_7": "“强制轮询调度”不会跳过输出口", - "create.ponder.brass_tunnel_modes.text_8": "“最近优先”会将物品优先送入距离输入口更近的输出口", - "create.ponder.brass_tunnel_modes.text_9": "“随机”会随机选择一个输出口,一次性送入所有物品", + "create.ponder.brass_tunnel_modes.text_2": "“分流”会尝试在可用输出端之间均匀分配物品堆", + "create.ponder.brass_tunnel_modes.text_3": "如果某个输出端无法容纳更多的物品,那它会被跳过,不参与计算", + "create.ponder.brass_tunnel_modes.text_4": "“强制分流”不会跳过某个输出端,而是一直等待此输出端能够容纳更多物品,才会继续物品传输", + "create.ponder.brass_tunnel_modes.text_5": "“轮询调度”会保持物品堆完整,循环检索各个输出端,满足条件后分配整堆物品", + "create.ponder.brass_tunnel_modes.text_6": "与分流类似,如果某个输出端无法容纳更多物品,那它会被跳过", + "create.ponder.brass_tunnel_modes.text_7": "“强制轮询调度”不会跳过某个输出端", + "create.ponder.brass_tunnel_modes.text_8": "“最近优先”会将物品优先分配到距离输入端更近的输出端", + "create.ponder.brass_tunnel_modes.text_9": "“随机”会随机选择一个输出端,一次性分配整堆物品", "create.ponder.cart_assembler.header": "使用矿车装配站控制结构移动", "create.ponder.cart_assembler.text_1": "矿车装配站会将它所连接的结构安装到矿车上", "create.ponder.cart_assembler.text_2": "若没有通入红石信号,它会将矿车装置解散为方块的形式", "create.ponder.cart_assembler.text_3": "对着矿车使用你的扳手,装置会变为可搬运的形式", - "create.ponder.cart_assembler_dual.header": "组装连接运输装置", - "create.ponder.cart_assembler_dual.text_1": "若两个装配矿车分享了同一个结构", - "create.ponder.cart_assembler_dual.text_2": "给其中的任意一方的矿车装配站通入红石信号,都会创建出连接运输装置", - "create.ponder.cart_assembler_dual.text_3": "两辆矿车的此时行为与用矿车连轴器连接在一起时十分相似", + "create.ponder.cart_assembler_dual.header": "组装车厢装置", + "create.ponder.cart_assembler_dual.text_1": "若两个矿车装配站分享了同一个结构", + "create.ponder.cart_assembler_dual.text_2": "给其中的任意一方的矿车装配站通入红石信号,都会创建出车厢装置", + "create.ponder.cart_assembler_dual.text_3": "两辆矿车此时的行为与用矿车连轴器连接在一起时十分相似", "create.ponder.cart_assembler_modes.header": "矿车装置的方向设定", "create.ponder.cart_assembler_modes.text_1": "矿车装置会随着矿车的运动而发生转向", - "create.ponder.cart_assembler_modes.text_2": "矿车装置上的箭头表明了哪一侧是“前面”", + "create.ponder.cart_assembler_modes.text_2": "该箭头指定结构的哪一侧将被视为“正面”", "create.ponder.cart_assembler_modes.text_3": "如果装配站的配置为“旋转锁定”,那么装置的方向将不会改变", "create.ponder.cart_assembler_rails.header": "另外几种矿车以及铁轨", "create.ponder.cart_assembler_rails.text_1": "放置在普通轨道上的矿车装配站并不会影响路过矿车装置的运动", - "create.ponder.cart_assembler_rails.text_2": "如果放置在充能或控制铁轨上且没有通入红石信号,那么路过的矿车将会停在此处", - "create.ponder.cart_assembler_rails.text_3": "另外的几种矿车可以当作锚来使用", - "create.ponder.cart_assembler_rails.text_4": "熔炉矿车会试图始终保持燃烧状态,并试图从路过的存储空间内抽取燃料", + "create.ponder.cart_assembler_rails.text_2": "如果放置在动力铁轨或控制铁轨上且没有通入红石信号,矿车装置将停在此处,直到再次充能", + "create.ponder.cart_assembler_rails.text_3": "另外的几种矿车可以当作锚点来使用", + "create.ponder.cart_assembler_rails.text_4": "动力矿车会试图始终保持燃烧状态,并试图从任何连接的容器内提取燃料", "create.ponder.chain_drive.header": "使用链式传动箱传动旋转力", "create.ponder.chain_drive.text_1": "同一行上的链式传动箱会相互间传递旋转", @@ -1787,20 +1789,20 @@ "create.ponder.chain_gearshift.header": "利用可调节链式传动箱进行转速调节", "create.ponder.chain_gearshift.text_1": "未充能的可调节链式传动箱与普通链式传动箱无异", "create.ponder.chain_gearshift.text_2": "当被充能时,它将会把旋转力以双倍转速传动至其他链式传动箱", - "create.ponder.chain_gearshift.text_3": "若被充能的可调节传动箱并不是动力输入端,则它会减半转速", + "create.ponder.chain_gearshift.text_3": "若被充能的可调节传动箱并不是动力输入端,则它会把转速减半", "create.ponder.chain_gearshift.text_4": "在这两种情况中,同一组的其他链式传动箱的转速都为被充能的可调节链式传动箱的两倍", "create.ponder.chain_gearshift.text_5": "转速的倍率可在 x1 和 x2 间根据红石信号的强弱来精确调整", "create.ponder.chain_gearshift.text_6": "12 RPM", "create.ponder.chute.header": "使用溜槽向下运输物品", - "create.ponder.chute.text_1": "溜槽可在两个存储空间之间垂直传送物品", + "create.ponder.chute.text_1": "溜槽可在两个容器之间垂直传输物品", "create.ponder.chute.text_2": "使用扳手右击可以在溜槽上设置观察窗", - "create.ponder.chute.text_3": "对着另一个溜槽的侧面放置另一个溜槽,将会放置下一个呈对角状的溜槽", + "create.ponder.chute.text_3": "对着另一个溜槽的侧面放置溜槽,将会放置下一个斜向的溜槽", "create.ponder.chute_upward.header": "使用溜槽向上运输物品", "create.ponder.chute_upward.text_1": "在溜槽上或下方使用鼓风机时,物品会根据风的方向向上或下移动", "create.ponder.chute_upward.text_2": "佩戴工程师护目镜时,你可以看见物品的移动方向", - "create.ponder.chute_upward.text_3": "在溜槽“被挡住的”底端,物品只能从侧边进行提取或输入", + "create.ponder.chute_upward.text_3": "在溜槽“被挡住的”末端,物品只能从侧边进行提取或输入", "create.ponder.clockwork_bearing.header": "使用发条轴承来使结构运动", "create.ponder.clockwork_bearing.text_1": "发条轴承黏附其正前方的方块", @@ -1836,9 +1838,9 @@ "create.ponder.creative_fluid_tank.text_3": "流体管道可以从中无限提取指定的流体", "create.ponder.creative_fluid_tank.text_4": "任何被输入创造流体储罐的液体都将被销毁", - "create.ponder.creative_motor.header": "使用创造马达发生旋转", - "create.ponder.creative_motor.text_1": "创造马达不仅能够手动调配输出旋转力,而且体积相当小巧", - "create.ponder.creative_motor.text_2": "对其背侧面板滚动滑轮,可以改变马达的输出旋转转速", + "create.ponder.creative_motor.header": "使用创造马达产生旋转力", + "create.ponder.creative_motor.text_1": "创造马达是一种紧凑且可配置的旋转力源", + "create.ponder.creative_motor.text_2": "对其后面板滑动滚轮,可以改变马达的输出旋转转速", "create.ponder.crushing_wheels.header": "使用粉碎轮处理物品", "create.ponder.crushing_wheels.text_1": "一对粉碎轮,磨物快又准", @@ -1851,10 +1853,10 @@ "create.ponder.deployer.text_10": "对着机械手的前部右击,即可将手上的物品给予它使用", "create.ponder.deployer.text_11": "物品也可以自动化输入到机械手内", "create.ponder.deployer.text_12": "机械手附带一个过滤槽", - "create.ponder.deployer.text_13": "当设定了过滤后,只有当它的手中物品与过滤相匹配时,它才会工作", - "create.ponder.deployer.text_14": "只有与过滤匹配的物品才可输入...", - "create.ponder.deployer.text_15": "...只有不匹配的物品方可被抽取出来", - "create.ponder.deployer.text_2": "它只会与它正前方两格处的位置进行交互", + "create.ponder.deployer.text_13": "设定了过滤后,只有它手中的物品与过滤相匹配时,它才会工作", + "create.ponder.deployer.text_14": "只有与过滤匹配的物品才可输入……", + "create.ponder.deployer.text_15": "……只有不匹配的物品可被抽取出来", + "create.ponder.deployer.text_2": "它只会与它正前方第 2 格处的位置进行交互", "create.ponder.deployer.text_3": "放在在它面前的方块不会阻拦它的工作", "create.ponder.deployer.text_4": "机械手可以:", "create.ponder.deployer.text_5": "放置方块", @@ -1864,9 +1866,9 @@ "create.ponder.deployer.text_9": "以及攻击生物", "create.ponder.deployer_contraption.header": "在装置上使用机械手", - "create.ponder.deployer_contraption.text_1": "当机械手在移动的装置上时...", + "create.ponder.deployer_contraption.text_1": "当机械手在移动的装置上时……", "create.ponder.deployer_contraption.text_2": "机械手会对每一个经过的方块使用装置中任意容器内的物品", - "create.ponder.deployer_contraption.text_3": "可以通过过滤槽来指定其从存储空间中抽取的物品", + "create.ponder.deployer_contraption.text_3": "过滤槽可用于指定要抽取的物品", "create.ponder.deployer_modes.header": "机械手的模式", "create.ponder.deployer_modes.text_1": "在默认情况下,机械手模仿玩家的右击交互", @@ -1875,8 +1877,8 @@ "create.ponder.deployer_processing.header": "使用机械手处理物品", "create.ponder.deployer_processing.text_1": "当机械手持有合适的物品时,它可以自动处理下方的物品", "create.ponder.deployer_processing.text_2": "物品可以被丢在机械手下方,或放在置物台上", - "create.ponder.deployer_processing.text_3": "当传送带上的物品经过机械手下方时...", - "create.ponder.deployer_processing.text_4": "...机械手会使物品停下,然后处理这个物品", + "create.ponder.deployer_processing.text_3": "当传送带上的物品经过机械手下方时……", + "create.ponder.deployer_processing.text_4": "……机械手会使物品停下,然后处理这个物品", "create.ponder.deployer_redstone.header": "使用红石控制机械手", "create.ponder.deployer_redstone.text_1": "当被红石充能时,机械手会停止工作", @@ -1886,25 +1888,25 @@ "create.ponder.depot.header": "使用置物台", "create.ponder.depot.text_1": "置物台可以被当成一个“静止的”传送带原件使用", "create.ponder.depot.text_2": "右击可以手动放置或取下物品", - "create.ponder.depot.text_3": "与传送带一样,它也可以将其内的物品转送到其他设备中进行加工...", - "create.ponder.depot.text_4": "...同时物品也可以被机械手存取", + "create.ponder.depot.text_3": "与传送带一样,它也可以将其内的物品转送到其他设备中进行加工……", + "create.ponder.depot.text_4": "……同时物品也可以被机械手存取", "create.ponder.empty_blaze_burner.header": "使用空的烈焰人燃烧室", "create.ponder.empty_blaze_burner.text_1": "手持空的烈焰人燃烧室右击烈焰人来抓取烈焰人", - "create.ponder.empty_blaze_burner.text_2": "或者,也可以通过右击烈焰人刷怪笼来填充激活烈焰人燃烧室", + "create.ponder.empty_blaze_burner.text_2": "或者,可以直接从烈焰人刷怪笼中收集烈焰人", "create.ponder.empty_blaze_burner.text_3": "这样,你便有了一个可供部分机器加工的热源", "create.ponder.empty_blaze_burner.text_4": "如果是为了美观,空的烈焰人燃烧室也可以被打火石点燃", "create.ponder.empty_blaze_burner.text_5": "你可以使用注入了灵魂的物品转化这种火焰", "create.ponder.empty_blaze_burner.text_6": "但是,没有烈焰人,这样的火焰并不足以用于工业级加热工作", - "create.ponder.encased_fluid_pipe.header": "流体管道箱", + "create.ponder.encased_fluid_pipe.header": "装壳流体管道", "create.ponder.encased_fluid_pipe.text_1": "铜机壳可以用于装饰流体管道", - "create.ponder.encased_fluid_pipe.text_2": "除了遮掩流体管道之外,装箱的流体管道将不会改变其连接状态", + "create.ponder.encased_fluid_pipe.text_2": "除了遮掩流体管道之外,装壳的流体管道将不会改变其连接状态", "create.ponder.encased_fluid_pipe.text_3": "它将不会对旁边新增加或移除的管道做出反应", "create.ponder.fan_direction.header": "鼓风机的气流", "create.ponder.fan_direction.text_1": "鼓风机使用旋转力来制造气流", - "create.ponder.fan_direction.text_2": "流速以及方向由所接收旋转力的强弱以及方向而定", + "create.ponder.fan_direction.text_2": "流速以及方向由所接受旋转力的强弱以及方向而定", "create.ponder.fan_processing.header": "使用鼓风机加工物品", "create.ponder.fan_processing.text_1": "当气流吹过熔岩时,气流会被加热", @@ -1926,20 +1928,20 @@ "create.ponder.fluid_pipe_flow.text_3": "带有观察窗的管道不会建立侧向管道连接", "create.ponder.fluid_pipe_flow.text_4": "使用动力泵,流体管道可以传输流体", "create.ponder.fluid_pipe_flow.text_5": "一开始,流体不会真正地被抽出", - "create.ponder.fluid_pipe_flow.text_6": "只有当管道内的液体流彻底连通之后,流体才会开始逐渐从一个容器中转移到另一个", + "create.ponder.fluid_pipe_flow.text_6": "只有当管道内的流体流彻底连通之后,流体才会开始逐渐从一个容器中转移到另一个中", "create.ponder.fluid_pipe_flow.text_7": "这意味着流体管道本身并不真正存储任何流体", "create.ponder.fluid_pipe_interaction.header": "抽取和填充流体容器", "create.ponder.fluid_pipe_interaction.text_1": "流体管道的末端可以与许多种容器连接", "create.ponder.fluid_pipe_interaction.text_2": "任何可以容纳流体的容器都可以被填充或从中抽取", - "create.ponder.fluid_pipe_interaction.text_3": "开放的管道口可以吸走流体源方块...", - "create.ponder.fluid_pipe_interaction.text_4": "...或者将流体源排放出来", + "create.ponder.fluid_pipe_interaction.text_3": "开放的管道口可以吸走流体源方块……", + "create.ponder.fluid_pipe_interaction.text_4": "……或者将流体源排放出来", "create.ponder.fluid_pipe_interaction.text_5": "管道也可以从许多种其他方块中直接抽取流体", "create.ponder.fluid_tank_sizes.header": "流体储罐的大小", "create.ponder.fluid_tank_sizes.text_1": "流体储罐可以多格连接,提供更大的存储量", - "create.ponder.fluid_tank_sizes.text_2": "流体储罐最大横截面为 3x3...", - "create.ponder.fluid_tank_sizes.text_3": "...并且可以超过 30 格高", + "create.ponder.fluid_tank_sizes.text_2": "流体储罐最大横截面为 3x3……", + "create.ponder.fluid_tank_sizes.text_3": "……并且可以超过 30 格高", "create.ponder.fluid_tank_sizes.text_4": "使用扳手可以打开或关闭观察窗", "create.ponder.fluid_tank_storage.header": "使用流体储罐存储流体", @@ -1947,7 +1949,7 @@ "create.ponder.fluid_tank_storage.text_2": "流体管道可以在流体储罐的任何一面将流体输入/输出", "create.ponder.fluid_tank_storage.text_3": "使用比较器可以检测储罐中的流体储量", "create.ponder.fluid_tank_storage.text_4": "在生存模式中,无法直接用容器向储罐中存入流体,或是取出流体", - "create.ponder.fluid_tank_storage.text_5": "要装满/倒空流体容器,可以使用工作盆,分液池或注液器。", + "create.ponder.fluid_tank_storage.text_5": "要装满/倒空流体容器,可以使用工作盆,分液池或注液器", "create.ponder.flywheel.header": "使用飞轮来产生旋转力", "create.ponder.flywheel.text_1": "飞轮和熔炉引擎必须配套使用,方可产生旋转力", @@ -1962,24 +1964,24 @@ "create.ponder.funnel_direction.header": "物流方向", "create.ponder.funnel_direction.text_1": "直接放置时,漏斗会将物品从容器中取出", - "create.ponder.funnel_direction.text_2": "潜行时放置时,漏斗会将物品置入容器中", + "create.ponder.funnel_direction.text_2": "潜行放置时,漏斗会将物品置入容器中", "create.ponder.funnel_direction.text_3": "使用扳手可以改变漏斗的存/取模式", - "create.ponder.funnel_direction.text_4": "对大多数朝向放置的漏斗都具有此特性", + "create.ponder.funnel_direction.text_4": "相同的规则适用于大多数朝向", "create.ponder.funnel_direction.text_5": "在传送带末端放置的漏斗会根据传送带的传动方向存/取物品", "create.ponder.funnel_intro.header": "使用漏斗", - "create.ponder.funnel_intro.text_1": "用漏斗来存取物品栏内的物品,可谓又快又好", + "create.ponder.funnel_intro.text_1": "用漏斗来存取容器内的物品,可谓又快又好", "create.ponder.funnel_redstone.header": "红石信号控制", "create.ponder.funnel_redstone.text_1": "红石信号会使漏斗停止工作", "create.ponder.funnel_transfer.header": "直接运输", - "create.ponder.funnel_transfer.text_1": "漏斗无法将物品传输到非开放式的物品栏中", + "create.ponder.funnel_transfer.text_1": "漏斗不能在闭合容器之间直接传输物品", "create.ponder.funnel_transfer.text_2": "溜槽和智能溜槽更适用于这样的场景", "create.ponder.funnel_transfer.text_3": "水平传输也是如此,也许传送带更方便快捷", - "create.ponder.furnace_engine.header": "使用熔炉引擎生产旋转力", - "create.ponder.furnace_engine.text_1": "熔炉引擎会在与其相连熔炉工作时生产旋转力", + "create.ponder.furnace_engine.header": "使用熔炉引擎产生旋转力", + "create.ponder.furnace_engine.text_1": "熔炉引擎会在其连接的熔炉工作时产生旋转力", "create.ponder.furnace_engine.text_2": "如此产生的旋转力具有非常大的应力值", "create.ponder.furnace_engine.text_3": "使用高炉会使得引擎的效率翻倍", @@ -1988,29 +1990,29 @@ "create.ponder.gantry_carriage.text_2": "起重机可以移动其黏附的方块", "create.ponder.gantry_cascaded.header": "串联起重机", - "create.ponder.gantry_cascaded.text_1": "无需强力胶,取物器便可与起重机杆相连", + "create.ponder.gantry_cascaded.text_1": "无需强力胶,起重机取物器便可与起重机杆相连", "create.ponder.gantry_cascaded.text_2": "即使是在移动的起重机杆上也是如此", "create.ponder.gantry_cascaded.text_3": "因此,起重机系统可以串联起来,如此可以影响到多轴向的运动", "create.ponder.gantry_direction.header": "起重机移动方向", "create.ponder.gantry_direction.text_1": "起重机杆可以有相反的方向", - "create.ponder.gantry_direction.text_2": "取物器的移动方向取决于起重机杆的方向", - "create.ponder.gantry_direction.text_3": "......以及起重机杆的旋转方向", + "create.ponder.gantry_direction.text_2": "起重机取物器的移动方向取决于起重机杆的方向", + "create.ponder.gantry_direction.text_3": "……以及起重机杆的旋转方向", "create.ponder.gantry_direction.text_4": "在旋转传递中,此规则同样适用", "create.ponder.gantry_redstone.header": "起重机的力传递", - "create.ponder.gantry_redstone.text_1": "被红石信号激活的起重机,将不会移动其上的取物器", + "create.ponder.gantry_redstone.text_1": "被红石信号激活的起重机杆,将不会移动其上的取物器", "create.ponder.gantry_redstone.text_2": "作为替代,杆上的旋转力会传递到取物器的输出杆上", "create.ponder.gantry_shaft.header": "使用起重机杆", - "create.ponder.gantry_shaft.text_1": "起重机杆组成了起重机系统的基础。与其相接的载物器可以沿着杆进行移动。", - "create.ponder.gantry_shaft.text_2": "起重机系统可以移动与其相接的方块。", + "create.ponder.gantry_shaft.text_1": "起重机杆组成了起重机系统的基础,与其相接的取物器可以沿着杆进行移动", + "create.ponder.gantry_shaft.text_2": "起重机系统可以移动与其相接的方块", "create.ponder.gearbox.header": "使用十字齿轮箱传递旋转力", - "create.ponder.gearbox.text_1": "更改旋转轴,很容易使得整个旋转体系变得臃肿不堪", - "create.ponder.gearbox.text_2": "十字齿轮箱则是替代方案,它的体积更为小巧紧", - "create.ponder.gearbox.text_3": "侧边连接的传动杆,旋转方向与输入端一致", - "create.ponder.gearbox.text_4": "直线连接的传动杆,旋转方向会被反转", + "create.ponder.gearbox.text_1": "更改旋转轴向,很容易使得整个旋转体系变得臃肿不堪", + "create.ponder.gearbox.text_2": "十字齿轮箱则是替代方案,它的体积更为小巧紧凑", + "create.ponder.gearbox.text_3": "垂直相邻的传动杆,旋转方向呈镜像", + "create.ponder.gearbox.text_4": "直线连接的传动杆,旋转方向相反", "create.ponder.gearshift.header": "使用反转齿轮箱控制旋转力", "create.ponder.gearshift.text_1": "反转齿轮箱可以直线传输旋转", @@ -2020,24 +2022,24 @@ "create.ponder.hand_crank.text_1": "玩家可以使用手摇曲柄来手动产生旋转力", "create.ponder.hand_crank.text_2": "按住右键可以逆时针旋转它", "create.ponder.hand_crank.text_3": "它产生的转速相对较高", - "create.ponder.hand_crank.text_4": "潜行长按右键可以顺时针旋转它", + "create.ponder.hand_crank.text_4": "潜行按住右键可以顺时针旋转它", "create.ponder.hose_pulley.header": "使用软管滑轮抽取或排放流体", - "create.ponder.hose_pulley.text_1": "软管滑轮可以用于方便地对一个较大区域进行抽取液体或填满液体的操作", + "create.ponder.hose_pulley.text_1": "软管滑轮可以用于方便地对一个较大区域进行抽取流体或填满流体的操作", "create.ponder.hose_pulley.text_2": "通过输入动力可以调节软管末端的高度", - "create.ponder.hose_pulley.text_3": "翻转动力输入的方向可以收起软管", + "create.ponder.hose_pulley.text_3": "反转动力输入的方向可以收起软管", "create.ponder.hose_pulley.text_4": "管道可以连接在另一侧", - "create.ponder.hose_pulley.text_5": "连接的管道可以将流体输入到软管滑轮中,软管会在下方排出口处放置流体源...", - "create.ponder.hose_pulley.text_6": "...或者提供吸力来抽取世界中的流体", + "create.ponder.hose_pulley.text_5": "连接的管道可以将流体输入到软管滑轮中,软管会在下方排出口处放置流体源……", + "create.ponder.hose_pulley.text_6": "……或者提供吸力来抽取世界中的流体", "create.ponder.hose_pulley.text_7": "软管滑轮的抽取/排放速度取决于连接管道中流体的流速", - "create.ponder.hose_pulley_infinite.header": "被动抽取或排放从大体量流体中", - "create.ponder.hose_pulley_infinite.text_1": "当软管被放进足够大的流体中时...", - "create.ponder.hose_pulley_infinite.text_2": "...它在抽取或排放液体时将不会影响流体源", + "create.ponder.hose_pulley_infinite.header": "被动抽取和排放大体量流体", + "create.ponder.hose_pulley_infinite.text_1": "当软管被放进足够大的流体中时……", + "create.ponder.hose_pulley_infinite.text_2": "……它在抽取或排放流体时将不会影响流体源", "create.ponder.hose_pulley_infinite.text_3": "可以从这些软管滑轮中无限量地抽取或向其排放流体", "create.ponder.hose_pulley_level.header": "软管滑轮的排水/抽水机制", - "create.ponder.hose_pulley_level.text_1": "当软管彻底收回时,软管滑轮无法工作。", + "create.ponder.hose_pulley_level.text_1": "当软管彻底收回时,软管滑轮无法工作", "create.ponder.hose_pulley_level.text_2": "抽取流体的顺序为从上到下", "create.ponder.hose_pulley_level.text_3": "流体表面最终将会被抽取到刚好低于软管开口", "create.ponder.hose_pulley_level.text_4": "填充流体的顺序为从下到上", @@ -2046,9 +2048,9 @@ "create.ponder.item_drain.header": "使用分液池提取物品中的流体", "create.ponder.item_drain.text_1": "分液池可以提取物品中的流体", "create.ponder.item_drain.text_2": "右击可以将手持物品中的流体倒入分液池中", - "create.ponder.item_drain.text_3": "当物品从侧面输入时...", - "create.ponder.item_drain.text_4": "...物品将会经过分液池顶部,并在此过程中将其包含的液体排入分液池内", - "create.ponder.item_drain.text_5": "流体管道可以从分液池中抽取液体", + "create.ponder.item_drain.text_3": "当物品从侧面输入时……", + "create.ponder.item_drain.text_4": "……物品将会滚过分液池顶部,并在此过程中将其包含的流体排入分液池内", + "create.ponder.item_drain.text_5": "流体管道可以从分液池中抽取流体", "create.ponder.item_vault_sizes.header": "物品保险库的尺寸", "create.ponder.item_vault_sizes.text_1": "可以组合物品保险库以增加总容量", @@ -2066,14 +2068,14 @@ "create.ponder.large_cogwheel.text_2": "可以利用大齿轮变更旋转轴向", "create.ponder.linear_chassis_attachment.header": "使用机壳底盘黏合方块", - "create.ponder.linear_chassis_attachment.text_1": "它的开放面可以变为黏性面", - "create.ponder.linear_chassis_attachment.text_2": "再次点击黏性面,可以将它的相反面也变得具有黏性", + "create.ponder.linear_chassis_attachment.text_1": "它的外露面可以变为黏性面", + "create.ponder.linear_chassis_attachment.text_2": "再次点击黏性面,可以将它的对面也变得具有黏性", "create.ponder.linear_chassis_attachment.text_3": "空手潜行右击可以移除此面的黏性物", "create.ponder.linear_chassis_attachment.text_4": "黏性面可以将此面前方的一长条方块黏住", "create.ponder.linear_chassis_attachment.text_5": "使用扳手可以精确控制底盘的影响范围", "create.ponder.linear_chassis_attachment.text_6": "按住 Ctrl 滑动滚轮,你可以一次性调节所有底盘的影响范围", "create.ponder.linear_chassis_attachment.text_7": "若想让底盘的其他面也能粘方块,你需要用到强力胶", - "create.ponder.linear_chassis_attachment.text_8": "利用这些机制,任何形状的机制都可以像装置那样移动", + "create.ponder.linear_chassis_attachment.text_8": "利用这些机制,任何形状的结构都可以作为装置移动", "create.ponder.linear_chassis_group.header": "成组移动机壳底盘", "create.ponder.linear_chassis_group.text_1": "相邻的机壳底盘可以相互连接在一起", @@ -2082,12 +2084,12 @@ "create.ponder.mechanical_arm.header": "配置动力臂", "create.ponder.mechanical_arm.text_1": "你得在放置动力臂之前就配置好它的输入以及输出端", - "create.ponder.mechanical_arm.text_2": "手持动力臂右击某个存储空间,可以将其指定为目标", + "create.ponder.mechanical_arm.text_2": "手持动力臂右击某个容器,可以将其指定为目标", "create.ponder.mechanical_arm.text_3": "再次右击可以将其在输入端(蓝色)以及输出端(橙色)之间切换", "create.ponder.mechanical_arm.text_4": "左击此组件可以移除选择", "create.ponder.mechanical_arm.text_5": "将动力臂放下来后,它会将此前选择的方块作为目标", - "create.ponder.mechanical_arm.text_6": "在有效范围内,机械臂可以有任意数量的输出以及输入端", - "create.ponder.mechanical_arm.text_7": "然而,并不是所有的存储空间可以被直接交互", + "create.ponder.mechanical_arm.text_6": "在有效范围内,动力臂可以有任意数量的输出以及输入端", + "create.ponder.mechanical_arm.text_7": "然而,并不是所有的容器可以被直接交互", "create.ponder.mechanical_arm.text_8": "在此情况下,漏斗和置物台可以解决此问题", "create.ponder.mechanical_arm_filtering.header": "过滤动力臂的输出端", @@ -2095,19 +2097,19 @@ "create.ponder.mechanical_arm_filtering.text_2": "输出", "create.ponder.mechanical_arm_filtering.text_3": "有时,你会想着利用某种过滤限制动力臂的目标", "create.ponder.mechanical_arm_filtering.text_4": "动力臂自身并不提供任何过滤选项", - "create.ponder.mechanical_arm_filtering.text_5": "然而,若将黄铜漏斗作为目标,则漏斗的过滤槽则可以应用至动力臂上", + "create.ponder.mechanical_arm_filtering.text_5": "然而,若将黄铜漏斗作为目标,则漏斗的过滤槽可以应用至动力臂上", "create.ponder.mechanical_arm_filtering.text_6": "动力臂足够智能,它不会去拿取那些它无法分配的物品", "create.ponder.mechanical_arm_modes.header": "动力臂的分配模式", "create.ponder.mechanical_arm_modes.text_1": "输入", "create.ponder.mechanical_arm_modes.text_2": "输出", - "create.ponder.mechanical_arm_modes.text_3": "若动力臂必须在数个有效的输出端之间作出选择...", - "create.ponder.mechanical_arm_modes.text_4": "...它会依照自己的设定选择特定的行为", + "create.ponder.mechanical_arm_modes.text_3": "若动力臂必须在数个有效的输出端之间作出选择……", + "create.ponder.mechanical_arm_modes.text_4": "……它会依照自己的设定选择特定的行为", "create.ponder.mechanical_arm_modes.text_5": "手持扳手对其滑动滚轮,可以改变其配置", - "create.ponder.mechanical_arm_modes.text_6": "轮询调度模式很好理解,即循环输出至所有有效的输出端", + "create.ponder.mechanical_arm_modes.text_6": "“轮询调度”模式很好理解,即循环输出至所有有效的输出端", "create.ponder.mechanical_arm_modes.text_7": "如果某个输出端无法容纳更多物品,则它会被跳过", - "create.ponder.mechanical_arm_modes.text_8": "强制轮询调度不会跳过任何输出端,动力臂会一直等待,直到输出端有空位容纳物品输入", - "create.ponder.mechanical_arm_modes.text_9": "最近优先模式会使得动力臂先将物品输出至更早被选择的输出端", + "create.ponder.mechanical_arm_modes.text_8": "“强制轮询调度”不会跳过任何输出端,动力臂会一直等待,直到输出端有空位容纳物品输入", + "create.ponder.mechanical_arm_modes.text_9": "“第一目标优先”模式会使得动力臂先将物品输出至更早被选择的输出端", "create.ponder.mechanical_arm_redstone.header": "利用红石信号控制动力臂", "create.ponder.mechanical_arm_redstone.text_1": "通入红石信号后,动力臂会停止工作", @@ -2122,32 +2124,32 @@ "create.ponder.mechanical_crafter.text_1": "动力合成器阵列可用于自动化任何合成配方的制作", "create.ponder.mechanical_crafter.text_2": "使用扳手可以调控合成器的合成通路", "create.ponder.mechanical_crafter.text_3": "所有的合成通路必须汇集到任意一侧的一个出口,整套合成器方可算是设置正确", - "create.ponder.mechanical_crafter.text_4": "输出产物会被放入位于出口的存储空间中", + "create.ponder.mechanical_crafter.text_4": "输出产物会被放入位于出口的容器中", "create.ponder.mechanical_crafter.text_5": "动力合成器的运转需要旋转力的供应", "create.ponder.mechanical_crafter.text_6": "右击合成器正面,可以手动放入物品", "create.ponder.mechanical_crafter.text_7": "一旦合成通路上的所有合成槽位都有了物品,合成就会开始", "create.ponder.mechanical_crafter.text_8": "而对于那些没有完全占满所有合成器槽位的配方,你可以通入红石信号强制开启合成", - "create.ponder.mechanical_crafter_connect.header": "为合成器连接物品栏", + "create.ponder.mechanical_crafter_connect.header": "连接动力合成器的容器", "create.ponder.mechanical_crafter_connect.text_1": "合成器可以自动接受向其输入的物品", "create.ponder.mechanical_crafter_connect.text_2": "对其背面使用扳手,可以连接合成器", "create.ponder.mechanical_crafter_connect.text_3": "所有相连的合成器可以访问同一个位置的输入", "create.ponder.mechanical_crafter_covers.header": "盖住动力合成器的合成槽", "create.ponder.mechanical_crafter_covers.text_1": "有些配方需要额外的合成器,来补足合成通路上的间隙", - "create.ponder.mechanical_crafter_covers.text_2": "使用合成槽盖板,合成器会在合成进行时的行为就如同一个空的合成槽位", - "create.ponder.mechanical_crafter_covers.text_3": "被盖住的合成器并不会阻断共享输入端的影响", + "create.ponder.mechanical_crafter_covers.text_2": "使用合成槽盖板,合成器在合成时的行为就如同一个空的合成槽位", + "create.ponder.mechanical_crafter_covers.text_3": "使用扳手在背面创建的的共享输入也可以跨越有盖的合成器", "create.ponder.mechanical_drill.header": "使用动力钻头破坏方块", - "create.ponder.mechanical_drill.text_1": "当向其通入旋转力后,动力钻头会破坏它面前的方块", - "create.ponder.mechanical_drill.text_2": "它的挖掘速度取决于通入的旋转力转速", + "create.ponder.mechanical_drill.text_1": "向其通入旋转力后,动力钻头会破坏它面前的方块", + "create.ponder.mechanical_drill.text_2": "它的挖掘速度取决于通入的旋转速度", "create.ponder.mechanical_drill_contraption.header": "在装置中使用动力钻头", - "create.ponder.mechanical_drill_contraption.text_1": "在运动装置中使用动力钻头时...", - "create.ponder.mechanical_drill_contraption.text_2": "...它会破坏掉它撞上的方块", + "create.ponder.mechanical_drill_contraption.text_1": "当钻头作为运动装置一部分移动时……", + "create.ponder.mechanical_drill_contraption.text_2": "……它会破坏掉它撞上的方块", "create.ponder.mechanical_harvester.header": "在装置中使用动力收割机", - "create.ponder.mechanical_harvester.text_1": "在运动装置中使用动力收割机时...", + "create.ponder.mechanical_harvester.text_1": "当收割机作为运动装置一部分移动时……", "create.ponder.mechanical_harvester.text_2": "它会采收其路径上的作物,并重置这些作物的生长进度", "create.ponder.mechanical_mixer.header": "使用动力搅拌器处理物品", @@ -2159,22 +2161,22 @@ "create.ponder.mechanical_piston.header": "使用动力活塞移动结构", "create.ponder.mechanical_piston.text_1": "动力活塞可以移动它前方的方块", "create.ponder.mechanical_piston.text_2": "移动速度和方向取决于通入活塞的旋转力", - "create.ponder.mechanical_piston.text_3": "黏性动力活塞可以将相接的方块拉回来", + "create.ponder.mechanical_piston.text_3": "黏性动力活塞可以将连接的方块拉回来", "create.ponder.mechanical_piston_modes.header": "动力活塞的移动模式", - "create.ponder.mechanical_piston_modes.text_1": "一旦活塞停下,被移动的结构就会回退到方块状态", + "create.ponder.mechanical_piston_modes.text_1": "一旦活塞停下,被移动的结构就会恢复到方块状态", "create.ponder.mechanical_piston_modes.text_2": "你也可以将其配置为从不方块化,或者只在起始位置方块化", "create.ponder.mechanical_plough.header": "在装置中使用动力犁", - "create.ponder.mechanical_plough.text_1": "在运动装置中使用动力犁时...", - "create.ponder.mechanical_plough.text_2": "...它会破坏掉那些不具有固体碰撞箱的方块", + "create.ponder.mechanical_plough.text_1": "当动力犁作为运动装置一部分移动时……", + "create.ponder.mechanical_plough.text_2": "……它会破坏掉那些不具有固体碰撞箱的方块", "create.ponder.mechanical_plough.text_3": "此外,动力犁可以耕地", - "create.ponder.mechanical_plough.text_4": "...它也可以在不伤害实体的情况下推动它们", + "create.ponder.mechanical_plough.text_4": "……它也可以在不伤害实体的情况下推动它们", "create.ponder.mechanical_press.header": "使用动力辊压机处理物品", "create.ponder.mechanical_press.text_1": "动力辊压机可以处理位于其下方的物品", "create.ponder.mechanical_press.text_2": "在其下方丢入物品,或者将物品放在置物台上,都算作有效的物品输入", - "create.ponder.mechanical_press.text_3": "若物品位于传送带上...", + "create.ponder.mechanical_press.text_3": "若物品位于传送带上……", "create.ponder.mechanical_press.text_4": "辊压机会使物品停下,然后自动处理这一物品", "create.ponder.mechanical_press_compacting.header": "使用动力辊压机压缩物品", @@ -2186,35 +2188,35 @@ "create.ponder.mechanical_pump_flow.header": "使用动力泵传输流体", "create.ponder.mechanical_pump_flow.text_1": "动力泵可以控制管道网络中的流体", "create.ponder.mechanical_pump_flow.text_2": "当接入动力时,其上的箭头指示流体流向", - "create.ponder.mechanical_pump_flow.text_3": "泵后的管道网络正在抽取流体...", - "create.ponder.mechanical_pump_flow.text_4": "...而泵前的网络则把这些液体排到世界当中", + "create.ponder.mechanical_pump_flow.text_3": "泵后的管道网络正在抽取流体……", + "create.ponder.mechanical_pump_flow.text_4": "……而泵前的网络则在排放流体", "create.ponder.mechanical_pump_flow.text_5": "反转动力方向将会改变流体流向", "create.ponder.mechanical_pump_flow.text_6": "使用扳手可以手动改变动力泵的朝向", "create.ponder.mechanical_pump_speed.header": "动力泵的传输机制", "create.ponder.mechanical_pump_speed.text_1": "动力泵的压力最多沿管线传递 16 格,与输入动力无关", - "create.ponder.mechanical_pump_speed.text_2": "提高输入动力,可以加快流的蔓延速度...", - "create.ponder.mechanical_pump_speed.text_3": "...以及流体的传输速度", + "create.ponder.mechanical_pump_speed.text_2": "提高输入转速,可以加快流体的蔓延速度……", + "create.ponder.mechanical_pump_speed.text_3": "……以及流体的传输速度", "create.ponder.mechanical_pump_speed.text_4": "同一管道网络中的多个并联动力泵,它们的传输量可以叠加", - "create.ponder.mechanical_pump_speed.text_5": "使泵的传输方向相互交替,可以方便地控制流体流向", + "create.ponder.mechanical_pump_speed.text_5": "使泵的朝向相互交替,可以方便地对齐流体流向", "create.ponder.mechanical_saw_breaker.header": "使用动力锯伐木", "create.ponder.mechanical_saw_breaker.text_1": "向其通入旋转力后,动力锯可以直接砍伐掉它面前的树木", "create.ponder.mechanical_saw_breaker.text_2": "想要一次性砍掉整棵树,锯子必须破坏掉树与地面连接的最后一个方块", "create.ponder.mechanical_saw_contraption.header": "在装置中使用动力锯", - "create.ponder.mechanical_saw_contraption.text_1": "若在运动装置中使用动力锯...", - "create.ponder.mechanical_saw_contraption.text_2": "...它会将撞到它的树木破坏掉", + "create.ponder.mechanical_saw_contraption.text_1": "当动力锯作为运动装置一部分移动时……", + "create.ponder.mechanical_saw_contraption.text_2": "……它会将撞到它的树木破坏掉", "create.ponder.mechanical_saw_processing.header": "使用动力锯处理物品", - "create.ponder.mechanical_saw_processing.text_1": "面向朝上的动力锯可以将物品处理为其变种", + "create.ponder.mechanical_saw_processing.text_1": "面朝上的动力锯可以处理各种物品", "create.ponder.mechanical_saw_processing.text_2": "处理过后的物品的弹出方向始终与通入锯中的旋转转向相反", "create.ponder.mechanical_saw_processing.text_3": "锯子可以与传送带放置在一条直线上,相互配合工作", "create.ponder.mechanical_saw_processing.text_4": "若输入原料有多种可能产物,你可以用动力锯上的过滤槽指定只产出某种产物", "create.ponder.mechanical_saw_processing.text_5": "若没有使用过滤槽,动力锯会在各产物中按顺序循环输出", "create.ponder.millstone.header": "使用石磨处理物品", - "create.ponder.millstone.text_1": "石磨会对输入的物品进行磨制", + "create.ponder.millstone.text_1": "石磨会对输入的物品进行研磨", "create.ponder.millstone.text_2": "在其侧边使用齿轮与其相耦合,方可为其通入动力", "create.ponder.millstone.text_3": "顶部可以丢入或者塞入物品", "create.ponder.millstone.text_4": "一段时间过后,右击石磨可以拿出其中的产物", @@ -2222,12 +2224,12 @@ "create.ponder.nixie_tube.header": "使用辉光管", "create.ponder.nixie_tube.text_1": "通入红石信号后,辉光管会显示出红石信号的强度", - "create.ponder.nixie_tube.text_2": "在着它使用更改过名称的命名牌,可以自定义它的显示文本", + "create.ponder.nixie_tube.text_2": "对着它使用更改过名称的命名牌,可以自定义它的显示文本", "create.ponder.nixie_tube.text_3": "使用染料右击,便可更改辉光管的显示颜色", "create.ponder.piston_pole.header": "活塞延长杆", - "create.ponder.piston_pole.text_1": "若无相接的延长杆,动力活塞无法移动其他方块", - "create.ponder.piston_pole.text_2": "在其背面安装的延长杆长度,决定了活塞的推动范围", + "create.ponder.piston_pole.text_1": "若无相接的活塞杆,动力活塞无法移动其他方块", + "create.ponder.piston_pole.text_2": "在其背面安装的活塞杆长度,决定了活塞的推动范围", "create.ponder.portable_fluid_interface.header": "装置流体交换", "create.ponder.portable_fluid_interface.text_1": "管道无法与运动装置内的流体储罐直接交互", @@ -2235,18 +2237,18 @@ "create.ponder.portable_fluid_interface.text_3": "放置第二个接口时,记得要与装置接口相隔 1 格或者 2 格的距离", "create.ponder.portable_fluid_interface.text_4": "当它们彼此经过时,它们会连接在一起", "create.ponder.portable_fluid_interface.text_5": "连接状态下,固定侧接口便会作为整个装置的流体存储代理", - "create.ponder.portable_fluid_interface.text_6": "流体可被泵入到装置内....", - "create.ponder.portable_fluid_interface.text_7": "...或是从装置中抽取出来", + "create.ponder.portable_fluid_interface.text_6": "流体可被泵入到装置内……", + "create.ponder.portable_fluid_interface.text_7": "……或是从装置中抽取出来", "create.ponder.portable_fluid_interface.text_8": "如果一小段时间内没有流体交换,接口将会断开连接,然后装置重新开始运动", "create.ponder.portable_storage_interface.header": "装置存储交换", - "create.ponder.portable_storage_interface.text_1": "玩家无法与运动装置内的存储空间进行交互", - "create.ponder.portable_storage_interface.text_2": "这一组件可以在不停止装置的情况下与装置内的存储空间进行交互", + "create.ponder.portable_storage_interface.text_1": "玩家无法与运动装置内的容器进行交互", + "create.ponder.portable_storage_interface.text_2": "这一组件可以在不停止装置的情况下与装置内的容器进行交互", "create.ponder.portable_storage_interface.text_3": "放置第二个接口时,记得要与装置接口相隔 1 格或者 2 格的距离", "create.ponder.portable_storage_interface.text_4": "当它们彼此经过时,它们会连接在一起", "create.ponder.portable_storage_interface.text_5": "连接状态下,固定侧接口便会作为整个装置的存储空间代理", - "create.ponder.portable_storage_interface.text_6": "物品可被输入到装置内...", - "create.ponder.portable_storage_interface.text_7": "...或是从装置中提取出来", + "create.ponder.portable_storage_interface.text_6": "物品可被输入到装置内……", + "create.ponder.portable_storage_interface.text_7": "……或是从装置中提取出来", "create.ponder.portable_storage_interface.text_8": "如果一小段时间内没有物品交换,接口将会断开连接,然后装置重新开始运动", "create.ponder.portable_storage_interface_redstone.header": "红石控制", @@ -2260,8 +2262,8 @@ "create.ponder.powered_toggle_latch.header": "使用转换锁存器控制信号", "create.ponder.powered_toggle_latch.text_1": "转换锁存器是一种可以用红石信号控制的拉杆", - "create.ponder.powered_toggle_latch.text_2": "后方信号输入可以改变它的状态", - "create.ponder.powered_toggle_latch.text_3": "...开启或者是关闭", + "create.ponder.powered_toggle_latch.text_2": "后方信号输入可以将其更改为", + "create.ponder.powered_toggle_latch.text_3": "……开启或者是关闭状态", "create.ponder.powered_toggle_latch.text_4": "你也可以手动切换其状态", "create.ponder.pulse_extender.header": "使用脉冲延长器控制信号", @@ -2277,15 +2279,15 @@ "create.ponder.pulse_repeater.text_3": "配置的延迟范围最长可达 30 分钟", "create.ponder.radial_chassis.header": "使用旋转底盘黏着方块", - "create.ponder.radial_chassis.text_1": "同一行上的旋转底盘会相互连接在一起", + "create.ponder.radial_chassis.text_1": "相同的旋转底盘会连续连接成一排", "create.ponder.radial_chassis.text_2": "当其中的一个底盘被装置带动时,其余的底盘也会被带动", "create.ponder.radial_chassis.text_3": "底盘的侧边可以变为黏性面", "create.ponder.radial_chassis.text_4": "再次点击黏性面,可以让其所有面都变得带黏性", "create.ponder.radial_chassis.text_5": "空手潜行右击可以移除其上的黏性物", - "create.ponder.radial_chassis.text_6": "若有物品与底盘的黏性面相接触...", - "create.ponder.radial_chassis.text_7": "...底盘便会与同层且位于半径内的所有可及方块黏着在一起", - "create.ponder.radial_chassis.text_8": "使用扳手可以精确指定底盘的影响范围", - "create.ponder.radial_chassis.text_9": "黏性面一侧的不可及方块不会被黏着", + "create.ponder.radial_chassis.text_6": "若有物品与底盘的黏性面相接触……", + "create.ponder.radial_chassis.text_7": "……底盘便会与同层且位于半径内的所有可到达方块黏着在一起", + "create.ponder.radial_chassis.text_8": "使用扳手可以精确指定底盘的影响半径", + "create.ponder.radial_chassis.text_9": "任何黏性面都不可到达的方块不会被黏着", "create.ponder.redstone_contact.header": "接触式红石信号发生器", "create.ponder.redstone_contact.text_1": "当两个接触式红石信号发生器面对面时,它们会发出红石信号", @@ -2293,24 +2295,24 @@ "create.ponder.redstone_link.header": "使用无线红石信号终端", "create.ponder.redstone_link.text_1": "无线红石信号终端可以无线传输红石信号", - "create.ponder.redstone_link.text_2": "潜行右击可以改变其接收模式", + "create.ponder.redstone_link.text_2": "潜行右击可以切换接收模式", "create.ponder.redstone_link.text_3": "手持扳手右击也可以", "create.ponder.redstone_link.text_4": "接收端会发出由传输端发来的信号,有效距离为 128 格", - "create.ponder.redstone_link.text_5": "在它们所带的槽位中放上物品,可以为它们指定频道", - "create.ponder.redstone_link.text_6": "只有频道相互匹配的终端方可互通", + "create.ponder.redstone_link.text_5": "在它们所带的槽位中放上物品,可以为它们指定频率", + "create.ponder.redstone_link.text_6": "只有频率相互匹配的终端方可互通", "create.ponder.rope_pulley.header": "使用绳索滑轮移动结构", "create.ponder.rope_pulley.text_1": "绳索滑轮在接受旋转力时可以垂直移动方块结构", "create.ponder.rope_pulley.text_2": "移动的方向及速度取决于提供的转速", "create.ponder.rope_pulley_attachment.header": "绳索滑轮与装置一同运动", - "create.ponder.rope_pulley_attachment.text_1": "当绳索滑轮本身在装置中被带动时...", - "create.ponder.rope_pulley_attachment.text_2": "...它附着在滑轮上的结构会被滑轮拉着一同移动", + "create.ponder.rope_pulley_attachment.text_1": "当绳索滑轮本身在装置中被带动时……", + "create.ponder.rope_pulley_attachment.text_2": "……附着在滑轮上的结构会被滑轮拉着一同移动", "create.ponder.rope_pulley_attachment.text_3": "注意,只有绳索滑轮停止工作时才能被移动", "create.ponder.rope_pulley_modes.header": "绳索滑轮的运动模式", - "create.ponder.rope_pulley_modes.text_1": "当绳索滑轮停止运动时,它所附属的移动结构便会方块化", - "create.ponder.rope_pulley_modes.text_2": "你可以调整整个结构永不方块化,或者仅在结构的初始位置方块化", + "create.ponder.rope_pulley_modes.text_1": "当绳索滑轮停止运动时,它所附着的移动结构便会方块化", + "create.ponder.rope_pulley_modes.text_2": "你可以调整使整个结构永不方块化,或者仅在结构的初始位置方块化", "create.ponder.rotation_speed_controller.header": "使用转速控制器", "create.ponder.rotation_speed_controller.text_1": "转速控制器将旋转力从其转轴传递至它上方的大齿轮", @@ -2336,14 +2338,14 @@ "create.ponder.shaft.header": "使用传动杆传递旋转力", "create.ponder.shaft.text_1": "传动杆能直线传递旋转力", - "create.ponder.shaft_casing.header": "传动杆箱", + "create.ponder.shaft_casing.header": "装壳传动杆", "create.ponder.shaft_casing.text_1": "安山或黄铜机壳,装饰传动杆的好伙伴", "create.ponder.smart_chute.header": "使用智能溜槽过滤物品", "create.ponder.smart_chute.text_1": "智能溜槽是垂直溜槽的升级控制版", "create.ponder.smart_chute.text_2": "当在其过滤槽内指定了物品后,溜槽只会传输这一指定标记的物品", "create.ponder.smart_chute.text_3": "使用鼠标滚轮可以指定被过滤的物品数量", - "create.ponder.smart_chute.text_4": "通入红石信号,智能溜槽将会完全暂停工作", + "create.ponder.smart_chute.text_4": "通入红石信号可以使智能溜槽停止工作", "create.ponder.smart_pipe.header": "使用智能流体管道控制流体流动", "create.ponder.smart_pipe.text_1": "智能流体管道可以限制通过它的流体种类", @@ -2358,15 +2360,15 @@ "create.ponder.spout_filling.header": "使用注液器填充物品", "create.ponder.spout_filling.text_1": "注液器可以将流体装入下方经过且可以接受该流体的物品", - "create.ponder.spout_filling.text_2": "注液器的流体存储无法直接手动交互", + "create.ponder.spout_filling.text_2": "注液器的流体容器无法直接手动交互", "create.ponder.spout_filling.text_3": "使用管道可以将流体输入到注液器内", "create.ponder.spout_filling.text_4": "输入的物品可以被放置在其下方的置物台上", - "create.ponder.spout_filling.text_5": "当传送带上的物品经过注液器下方时...", + "create.ponder.spout_filling.text_5": "当传送带上的物品经过注液器下方时……", "create.ponder.spout_filling.text_6": "注液器会使物品停下,然后自动处理这一物品", "create.ponder.stabilized_bearings.header": "装置固定朝向", - "create.ponder.stabilized_bearings.text_1": "当动力轴承在结构被带动时...", - "create.ponder.stabilized_bearings.text_2": "...它会确保它转盘的垂直朝向不变", + "create.ponder.stabilized_bearings.text_1": "当动力轴承在结构被带动时……", + "create.ponder.stabilized_bearings.text_2": "……它会确保它转盘的垂直朝向不变", "create.ponder.stabilized_bearings.text_3": "跟默认的一样,动力轴承会黏着它前方的方块", "create.ponder.stabilized_bearings.text_4": "这种情况下,它所黏着的子装置的垂直朝向也不会改变", @@ -2377,15 +2379,15 @@ "create.ponder.sticker.text_4": "再次接受红石信号时,它会断开与方块的黏连", "create.ponder.stressometer.header": "使用应力表来监测应力", - "create.ponder.stressometer.text_1": "应力表能显示当前动能网络内的应力信息", + "create.ponder.stressometer.text_1": "应力表能显示当前动力网络内的应力信息", "create.ponder.stressometer.text_2": "当佩戴工程师护目镜时,可以看到仪表所显示的更详细的数据", "create.ponder.stressometer.text_3": "红石比较器可以根据应力表的数值输出不同强弱的红石信号", "create.ponder.super_glue.header": "使用强力胶来黏附方块", "create.ponder.super_glue.text_1": "强力胶可以在任意两个方块间使用", "create.ponder.super_glue.text_2": "当被粘合的方块被组装为装置时,他们会一起运动", - "create.ponder.super_glue.text_3": "当强力胶在副手时...", - "create.ponder.super_glue.text_4": "...新放置的方块会自动被黏附在所放置方块的面上", + "create.ponder.super_glue.text_3": "当强力胶在副手时……", + "create.ponder.super_glue.text_4": "……新放置的方块会自动被黏附在所放置方块的面上", "create.ponder.super_glue.text_5": "左击可以清除强力胶", "create.ponder.valve_handle.header": "使用阀门手轮产生旋转力", @@ -2395,20 +2397,20 @@ "create.ponder.valve_handle.text_4": "潜行右击可使它顺时针旋转", "create.ponder.valve_handle.text_5": "可以通过染色来美化阀门手轮", - "create.ponder.valve_pipe.header": "使用阀门管道控制液体流", - "create.ponder.valve_pipe.text_1": "阀门管道可以控制管道网络中流体的蔓延", + "create.ponder.valve_pipe.header": "使用流体阀门控制液体流", + "create.ponder.valve_pipe.text_1": "流体阀门可以控制管道网络中流体的蔓延", "create.ponder.valve_pipe.text_2": "通过其上的传动杆输入动力可以控制它的开关", "create.ponder.valve_pipe.text_3": "提供向“打开”方向的旋转力会打开阀门,使得流体可以通过", "create.ponder.valve_pipe.text_4": "提供另一方向的旋转力可以关闭阀门,阻止流体通过", "create.ponder.water_wheel.header": "使用水车产生旋转力", - "create.ponder.water_wheel.text_1": "水车利用临近的水流来进行应力发生", + "create.ponder.water_wheel.text_1": "水车利用相邻的水流来产生应力", "create.ponder.water_wheel.text_2": "水车接触水流的面越多,它的转速越高", "create.ponder.water_wheel.text_3": "水车叶片应逆着水流方向摆放", "create.ponder.water_wheel.text_4": "如果顺着水流摆放,它的效率则会降低", "create.ponder.weighted_ejector.header": "使用弹射置物台", - "create.ponder.weighted_ejector.text_1": "手持弹射置物台时,潜行时右击可以设置弹射目标位置", + "create.ponder.weighted_ejector.text_1": "手持弹射置物台时,潜行右击可以设置弹射目标位置", "create.ponder.weighted_ejector.text_10": "现在,只有等被放置的物品数量等于所设定数量时,弹射置物台才会弹射物品", "create.ponder.weighted_ejector.text_11": "当其他实体站在弹射置物台上时会被直接弹射", "create.ponder.weighted_ejector.text_2": "现在,放置下的弹射置物台会将物品弹射至目标位置", @@ -2428,19 +2430,19 @@ "create.ponder.weighted_ejector_tunnel.text_1": "与黄铜隧道搭配使用时,弹射置物台可以将物品以特定数量进行分流", "create.ponder.weighted_ejector_tunnel.text_2": "首先,将黄铜隧道调整为“最近优先”模式,从而让它优先侧面输出", "create.ponder.weighted_ejector_tunnel.text_3": "置物台上所设置的物品数量则为被分流出去的物品数量", - "create.ponder.weighted_ejector_tunnel.text_4": "当所设置的物品数量被分流出去后...", - "create.ponder.weighted_ejector_tunnel.text_5": "...剩余的物品则会继续前进", + "create.ponder.weighted_ejector_tunnel.text_4": "当所设置的物品数量被分流出去后……", + "create.ponder.weighted_ejector_tunnel.text_5": "……剩余的物品则会继续前进", "create.ponder.windmill_source.header": "使用风车轴承产生旋转力", - "create.ponder.windmill_source.text_1": "在风车轴承会黏附它前方的方块", - "create.ponder.windmill_source.text_2": "如果有足够多的风帆方块黏附于其上,那么整体结构便可被视为风车", + "create.ponder.windmill_source.text_1": "风车轴承会黏附它前方的方块", + "create.ponder.windmill_source.text_2": "如果有足够多的类风帆方块黏附于其上,那么整体结构便可被视为风车", "create.ponder.windmill_source.text_3": "右击启动后,风车轴承会开始产生旋转力", - "create.ponder.windmill_source.text_4": "产生的转速取决于风帆方块的数量", + "create.ponder.windmill_source.text_4": "风帆方块的数量决定了它的旋转速度", "create.ponder.windmill_source.text_5": "使用扳手可以调整风车的旋转方向", - "create.ponder.windmill_source.text_6": "任何时候右击轴承,都可以将其停止,这样方便于你修改风车的结构", + "create.ponder.windmill_source.text_6": "任何时候右击轴承,都可以将其停止,这样你就能再次修改风车的结构", "create.ponder.windmill_structure.header": "风车装置", - "create.ponder.windmill_structure.text_1": "任何有至少 8 个风帆方块的结构,都被视为一个有效的风车", + "create.ponder.windmill_structure.text_1": "任何有至少 8 个类风帆方块的结构,都被视为一个有效的风车", "_": "Thank you for translating Create!" From 24fc36335e800a20603603de3e6337965687bb94 Mon Sep 17 00:00:00 2001 From: muriplz <46825658+muriplz@users.noreply.github.com> Date: Sun, 22 May 2022 16:26:40 +0200 Subject: [PATCH 28/31] Updates to es_es.json by muriplz (#2973) --- .../assets/create/lang/unfinished/es_es.json | 14 +++++++------- src/main/resources/assets/create/lang/es_es.json | 13 +++++++++---- 2 files changed, 16 insertions(+), 11 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 23244a9c2..eeb101491 100644 --- a/src/generated/resources/assets/create/lang/unfinished/es_es.json +++ b/src/generated/resources/assets/create/lang/unfinished/es_es.json @@ -572,7 +572,7 @@ "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.creative_blaze_cake": "Pastel de blaze creativo", "item.create.crushed_aluminum_ore": "Mineral de aluminio molido", "item.create.crushed_copper_ore": "Mineral de cobre molido", "item.create.crushed_gold_ore": "Mineral de oro molido", @@ -637,7 +637,7 @@ "advancement.create.root": "Bienvenido a Create", "advancement.create.root.desc": "¡Es hora de empezar a construir increíbles artefactos animados!", - "advancement.create.andesite_alloy": "UNLOCALIZED: Alliterations Aplenty", + "advancement.create.andesite_alloy": "Aliteraciones a montones", "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.", @@ -822,8 +822,8 @@ "create.recipe.fan_washing.fan": "Ventilador detrás del agua fluyente", "create.recipe.fan_smoking": "Ahumador a granel", "create.recipe.fan_smoking.fan": "Ventilador detrás del fuego", - "create.recipe.fan_haunting": "UNLOCALIZED: Bulk Haunting", - "create.recipe.fan_haunting.fan": "UNLOCALIZED: Fan behind Soul Fire", + "create.recipe.fan_haunting": "Maldecidor a granel", + "create.recipe.fan_haunting.fan": "Ventilador detrás del fuego de alma", "create.recipe.fan_blasting": "Voladuras a granel", "create.recipe.fan_blasting.fan": "Ventilador detrás de la lava", "create.recipe.pressing": "Prensando", @@ -1166,8 +1166,8 @@ "create.item_attributes.furnace_fuel.inverted": "no es combustible para hornos", "create.item_attributes.washable": "se puede lavar", "create.item_attributes.washable.inverted": "no se puede lavar", - "create.item_attributes.hauntable": "UNLOCALIZED: can be Haunted", - "create.item_attributes.hauntable.inverted": "UNLOCALIZED: cannot be Haunted", + "create.item_attributes.hauntable": "puede ser maldito", + "create.item_attributes.hauntable.inverted": "no puede ser maldito", "create.item_attributes.crushable": "puede ser molido", "create.item_attributes.crushable.inverted": "no puede ser molido", "create.item_attributes.smeltable": "se puede fundir", @@ -1232,7 +1232,7 @@ "create.tooltip.keyCtrl": "Ctrl", "create.tooltip.speedRequirement": "Requisitos de velocidad: %1$s", "create.tooltip.speedRequirement.none": "Ninguno", - "create.tooltip.speedRequirement.slow": "UNLOCALIZED: Slow", + "create.tooltip.speedRequirement.slow": "Lento", "create.tooltip.speedRequirement.medium": "Moderado", "create.tooltip.speedRequirement.fast": "Rápido", "create.tooltip.stressImpact": "Impacto de estrés: %1$s", diff --git a/src/main/resources/assets/create/lang/es_es.json b/src/main/resources/assets/create/lang/es_es.json index 36cc90c85..c6247d51e 100644 --- a/src/main/resources/assets/create/lang/es_es.json +++ b/src/main/resources/assets/create/lang/es_es.json @@ -1,5 +1,4 @@ { - "_": "Missing Localizations: 330", "_": "->------------------------] Game Elements [------------------------<-", @@ -567,11 +566,12 @@ "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": "Depósito de cobre colocable", "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.creative_blaze_cake": "Pastel de blaze creativo", "item.create.crushed_aluminum_ore": "Mineral de aluminio molido", "item.create.crushed_copper_ore": "Mineral de cobre molido", "item.create.crushed_gold_ore": "Mineral de oro molido", @@ -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": "Aliteraciones a montones", "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.", @@ -821,6 +821,8 @@ "create.recipe.fan_washing.fan": "Ventilador detrás del agua fluyente", "create.recipe.fan_smoking": "Ahumador a granel", "create.recipe.fan_smoking.fan": "Ventilador detrás del fuego", + "create.recipe.fan_haunting": "Maldecidor a granel", + "create.recipe.fan_haunting.fan": "Ventilador detrás del fuego de alma", "create.recipe.fan_blasting": "Voladuras a granel", "create.recipe.fan_blasting.fan": "Ventilador detrás de la lava", "create.recipe.pressing": "Prensando", @@ -1163,6 +1165,8 @@ "create.item_attributes.furnace_fuel.inverted": "no es combustible para hornos", "create.item_attributes.washable": "se puede lavar", "create.item_attributes.washable.inverted": "no se puede lavar", + "create.item_attributes.hauntable": "puede ser maldito", + "create.item_attributes.hauntable.inverted": "no puede ser maldito", "create.item_attributes.crushable": "puede ser molido", "create.item_attributes.crushable.inverted": "no puede ser molido", "create.item_attributes.smeltable": "se puede fundir", @@ -1227,6 +1231,7 @@ "create.tooltip.keyCtrl": "Ctrl", "create.tooltip.speedRequirement": "Requisitos de velocidad: %1$s", "create.tooltip.speedRequirement.none": "Ninguno", + "create.tooltip.speedRequirement.slow": "Lento", "create.tooltip.speedRequirement.medium": "Moderado", "create.tooltip.speedRequirement.fast": "Rápido", "create.tooltip.stressImpact": "Impacto de estrés: %1$s", @@ -2438,6 +2443,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 From cf2d607881ddd4b9727ed5b0ddc5ecbcc91431a0 Mon Sep 17 00:00:00 2001 From: vyhi <75101424+vyhi@users.noreply.github.com> Date: Sun, 22 May 2022 11:45:45 -0300 Subject: [PATCH 29/31] Updates to pt_br.json by vyhi (#2999) Translated completely the subtitles, translated mostly the ui & messages and fixed few things. --- .../resources/assets/create/lang/pt_br.json | 338 +++++++++++++++++- 1 file changed, 332 insertions(+), 6 deletions(-) diff --git a/src/main/resources/assets/create/lang/pt_br.json b/src/main/resources/assets/create/lang/pt_br.json index 69a2eecaa..b2248aa2e 100644 --- a/src/main/resources/assets/create/lang/pt_br.json +++ b/src/main/resources/assets/create/lang/pt_br.json @@ -803,6 +803,16 @@ "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.block.deployer.damage_source_name": "Implantador rebelde", + "create.block.cart_assembler.invalid": "Coloque o seu montador de carrinho de minas num trilho", + + "create.menu.return": "Retornar ao menu", + "create.menu.configure": "Configurar...", + "create.menu.ponder_index": "Tabela do ponderamento", + "create.menu.only_ingame": "Disponível no menu de pausa", + "create.menu.project_page": "Página do projeto", + "create.menu.report_bugs": "Informar um erro", + "create.menu.support": "Suporte nós", "create.recipe.crushing": "Triturando", "create.recipe.milling": "Moendo", @@ -818,6 +828,7 @@ "create.recipe.mixing": "Misturando", "create.recipe.deploying": "Implantando", "create.recipe.automatic_shapeless": "Fabricação sem forma automático", + "create.recipe.automatic_brewing": "Produção de poções", "create.recipe.packing": "Compactando", "create.recipe.automatic_packing": "Compactamento automático", "create.recipe.sawing": "Serrando", @@ -869,18 +880,22 @@ "create.action.discard": "Descartar", "create.keyinfo.toolmenu": "Menu Focal da Ferramenta", + "create.keyinfo.toolbelt": "Acessa caixas de ferramenta próximas", + "create.keyinfo.scrollup": "Simular a roda do mouse (para cima) (no mundo)", + "create.keyinfo.scrolldown": "Simular a roda do mouse (para baixo) (no mundo)", "create.gui.scrollInput.defaultTitle": "Escolha uma Opção:", "create.gui.scrollInput.scrollToModify": "Role o mouse para Modificar", "create.gui.scrollInput.scrollToAdjustAmount": "Role o mouse para ajustar a quantidade", "create.gui.scrollInput.scrollToSelect": "Role o mouse para Selecionar", + "create.gui.scrollInput.shiftScrollsFaster": "Shift para rolar o mouse mais rapido", "create.gui.toolmenu.focusKey": "Segure [%1$s] para Focar", "create.gui.toolmenu.cycle": "[SCROLL] para Circular", "create.toolbox.unequip": "Desequipar: %1$s", "create.toolbox.outOfRange": "Caixa de ferramentas do item segurado fora de alcance", "create.toolbox.detach": "Parar de rastrear e manter item", - "create.toolbox.depositAll": "Retornar itens para caixa de ferramenta próxima", + "create.toolbox.depositAll": "Retorna itens para caixa de ferramenta próxima", "create.toolbox.depositBox": "Retornar itens para caixa de ferramenta", "create.gui.symmetryWand.mirrorType": "Espelhar", @@ -895,17 +910,90 @@ "create.orientation.horizontal": "Horizontal", "create.orientation.alongZ": "Através de Z", "create.orientation.alongX": "Através de X", + "create.minecart_coupling.two_couplings_max": "Carrinhos de mina não podem ter mais de dois acoplamentos cada", + "create.minecart_coupling.unloaded": "Partes do seu trem aparentam estar em um chunk descarregado", + "create.minecart_coupling.no_loops": "Acoplamentos não podem formar um loop", + "create.minecart_coupling.removed": "Removeu todos os acoplamentos do carrinho de mina", + "create.minecart_coupling.too_far": "Carrinhos de mina estão muito distanciados", + "create.contraptions.movement_mode": "Modo de movimento", + "create.contraptions.movement_mode.move_place": "Sempre colocar quando parado", + "create.contraptions.movement_mode.move_place_returned": "Colocar apenas na posição inicial", + "create.contraptions.movement_mode.move_never_place": "Colocar apenas caso a âncora seja destruída", + "create.contraptions.movement_mode.rotate_place": "Sempre colocar quando parado", + "create.contraptions.movement_mode.rotate_place_returned": "Apenas colocar perto do angulo inicial", + "create.contraptions.movement_mode.rotate_never_place": "Colocar apenas caso a âncora seja destruída", + "create.contraptions.cart_movement_mode": "Modo de movimento do carrinho", + "create.contraptions.cart_movement_mode.rotate": "Sempre apontar para a direção do movimento", + "create.contraptions.cart_movement_mode.rotate_paused": "Pausar atores quando girando", + "create.contraptions.cart_movement_mode.rotation_locked": "Travar a rotação", + "create.contraptions.windmill.rotation_direction": "Direção da rotação", + "create.contraptions.clockwork.clock_hands": "Ponteiros do relogio", + "create.contraptions.clockwork.hour_first": "Ponteiro da hora primeiro", + "create.contraptions.clockwork.minute_first": "Ponteiro do minuto primeiro", + "create.contraptions.clockwork.hour_first_24": "Ponteiro das 24 horas primeiro", + + "create.logistics.filter": "Filtro", + "create.logistics.recipe_filter": "Filtro de receitas", + "create.logistics.fluid_filter": "Filtro de fluido", + "create.logistics.firstFrequency": "Freq. #1", + "create.logistics.secondFrequency": "Freq. #2", + "create.logistics.filter.apply": "Aplicou filtro para %1$s.", + "create.logistics.filter.apply_click_again": "Aplicou filtro para %1$s, Clique denovo para copiar quantidade.", + "create.logistics.filter.apply_count": "Aplicou quantidade de extração para o filtro.", "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", "create.gui.goggles.pole_length": "Comprimento da vara:", + "create.gui.goggles.fluid_container": "Informação do recipiente de fluido:", + "create.gui.goggles.fluid_container.capacity": "Capacidade: ", + "create.gui.assembly.exception": "Não foi possível montar essa engenhoca:", + "create.gui.assembly.exception.unmovableBlock": "Bloco imovel (%4$s) em [%1$s,%2$s,%3$s]", + "create.gui.assembly.exception.chunkNotLoaded": "O bloco em [%1$s,%2$s,%3$s] não estava em um chunk carregado", + "create.gui.assembly.exception.structureTooLarge": "Tem muitos blocos incluídos na engenhoca. O limite configurado é: %1$s", + "create.gui.assembly.exception.tooManyPistonPoles": "Tem muitas varetas de extensão colocadas nesse pistão. O limite configurado é: %1$s", + "create.gui.assembly.exception.noPistonPoles": "O pistão esta faltando algumas varetas de extensão", + "create.gui.assembly.exception.not_enough_sails": "A estrutura conectada não possui o número suficiente de blocos tipo vela: %1$s\nUm mínimo de %2$s são requeridos", + "create.gui.gauge.info_header": "Informação do medidor:", + "create.gui.speedometer.title": "Velocidade de rotação", + "create.gui.stressometer.title": "Estresse do sistema", + "create.gui.stressometer.capacity": "Capacidade restante", + "create.gui.stressometer.overstressed": "Sobre estressado", + "create.gui.stressometer.no_rotation": "Nenhuma rotação", + "create.gui.contraptions.not_fast_enough": "Aparenta que esse %1$s não _está_ girando com _a velocidade_ _necessária_.", + "create.gui.contraptions.network_overstressed": "Aparenta que essa engenhoca está _sobre estressada_. Adicione mais fontes ou _desacelere_ __ os componentes que tem um _impacto de_ _stress alto_.", + "create.gui.adjustable_crate.title": "UNLOCALIZED: Adjustable Crate", + "create.gui.adjustable_crate.storageSpace": "UNLOCALIZED: Storage Space", + "create.gui.stockpile_switch.title": "Dijuntor de armazenamento", + "create.gui.stockpile_switch.invert_signal": "Inverter sinal", + "create.gui.stockpile_switch.move_to_lower_at": "Mover para a faixa mais baixa %1$s%%", + "create.gui.stockpile_switch.move_to_upper_at": "Mover para a faixa mais alta %1$s%%", + "create.gui.sequenced_gearshift.title": "Câmbio sequenciado", + "create.gui.sequenced_gearshift.instruction": "Instruções", + "create.gui.sequenced_gearshift.instruction.turn_angle.descriptive": "Rotacionar por angulo", + "create.gui.sequenced_gearshift.instruction.turn_angle": "Giro", + "create.gui.sequenced_gearshift.instruction.turn_angle.angle": "Angulo", + "create.gui.sequenced_gearshift.instruction.turn_distance.descriptive": "Rotacionar par mover Pistão/Polia/Portico", + "create.gui.sequenced_gearshift.instruction.turn_distance": "Pistão", + "create.gui.sequenced_gearshift.instruction.turn_distance.distance": "Distancia", + "create.gui.sequenced_gearshift.instruction.delay.descriptive": "Espera", + "create.gui.sequenced_gearshift.instruction.delay": "Esperar", + "create.gui.sequenced_gearshift.instruction.delay.duration": "Duração", + "create.gui.sequenced_gearshift.instruction.end.descriptive": "Terminar", + "create.gui.sequenced_gearshift.instruction.end": "Termino", + "create.gui.sequenced_gearshift.instruction.await.descriptive": "Esperar novo pulso de redstone", + "create.gui.sequenced_gearshift.instruction.await": "Espera", + "create.gui.sequenced_gearshift.speed": "Velocidade, Direção", + "create.gui.sequenced_gearshift.speed.forward": "Velocidade inicial, Para frente", + "create.gui.sequenced_gearshift.speed.forward_fast": "Dobro da velocidade, Para frente", + "create.gui.sequenced_gearshift.speed.back": "Velocidade inicial, Para trás", + "create.gui.sequenced_gearshift.speed.back_fast": "Dobro da velocidade, Para trás", "create.schematicAndQuill.dimensions": "Tamanho Esquema: %1$sx%2$sx%3$s", "create.schematicAndQuill.firstPos": "Primeira posição feita.", "create.schematicAndQuill.secondPos": "Segunda posição feita.", - "create.schematicAndQuill.noTarget": "Seguro [Ctrl] para selecionar Blocos de Ar.", + "create.schematicAndQuill.noTarget": "Seguro [Ctrl] para seleccionar Blocos de Ar.", "create.schematicAndQuill.abort": "Seleção removida.", "create.schematicAndQuill.title": "Nome do esquema:", "create.schematicAndQuill.convert": "Salvar e carregar arquivo imediatamente", @@ -945,7 +1033,7 @@ "create.schematic.tool.rotate.description.1": "[CTRL]-Rolar para rolar 90 Graus", "create.schematic.tool.rotate.description.2": "", "create.schematic.tool.rotate.description.3": "", - "create.schematic.tool.print.description.0": "Coloca estrutura no mundo instantaneamente", + "create.schematic.tool.print.description.0": "Colocá estrutura no mundo instantaneamente", "create.schematic.tool.print.description.1": "[Botão-Direito] para confirmar a posição atual.", "create.schematic.tool.print.description.2": "Esta ferramenta é para o Modo Criativo apenas.", "create.schematic.tool.print.description.3": "", @@ -957,7 +1045,12 @@ "create.schematics.synchronizing": "Sincronizando...", "create.schematics.uploadTooLarge": "Seu esquema é muito grande", "create.schematics.maxAllowedSize": "O tamanho máximo permitido para o esquema é:", + + "create.gui.schematicTable.refresh": "atualizar arquivos", + "create.gui.schematicTable.open_folder": "Abrir pasta", "create.gui.schematicTable.title": "Mesa de Desenho", + "create.gui.schematicTable.availableSchematics": "Esquema disponíveis", + "create.gui.schematicTable.noSchematics": "Nenhum esquema salvo", "create.gui.schematicTable.uploading": "Importando...", "create.gui.schematicTable.finished": "Envio Concluído!", "create.gui.schematicannon.title": "Canhão de esquema", @@ -967,14 +1060,18 @@ "create.gui.schematicannon.shotsRemainingWithBackup": "Com backup: %1$s", "create.gui.schematicannon.optionEnabled": "Habilitado Atualmente", "create.gui.schematicannon.optionDisabled": "Desabilitado Atualmente", + "create.gui.schematicannon.showOptions": "Mostrar as configurações da impressora", "create.gui.schematicannon.option.dontReplaceSolid": "Não Substituir Blocos Sólidos", "create.gui.schematicannon.option.replaceWithSolid": "Substituir Blocos Sólidos", "create.gui.schematicannon.option.replaceWithAny": "Substituir Sólidos com Qualquer", "create.gui.schematicannon.option.replaceWithEmpty": "Substituir Sólidos com Vazio", "create.gui.schematicannon.option.skipMissing": "Pulando Blocos faltantes", - "create.gui.schematicannon.option.skipTileEntities": "Proteger Entidades Entalhadas", - "create.gui.schematicannon.option.skipMissing.description": "Se o Canhão de esquema não encontrar o Bloco para colocar, ele irá continuar para a próx. Posição.", - "create.gui.schematicannon.option.skipTileEntities.description": "O Canhão de esquema vai evitar substituir blocos que contêm dados como Baus.", + "create.gui.schematicannon.option.skipTileEntities": "Proteger tile entities", + "create.gui.schematicannon.slot.gunpowder": "Adicionar pólvora para carregar o canhão", + "create.gui.schematicannon.slot.listPrinter": "Coloque livros aqui para imprimir uma lista para o seu esquema", + "create.gui.schematicannon.slot.schematic": "Adicione o seu esquema aqui. Tenha certeza que ele está colocado em um lugar especifico.", + "create.gui.schematicannon.option.skipMissing.description": "Se o Canhão de esquema não encontrar o Bloco para colocar, ele irá continuar para a próxima. Posição.", + "create.gui.schematicannon.option.skipTileEntities.description": "O Canhão de esquema vai evitar substituir blocos que contêm dados como Baús.", "create.gui.schematicannon.option.dontReplaceSolid.description": "O Canhão de esquema nunca irá substituir Blocos sólidos na área em trabalho, apenas não-Sólidos e Ar.", "create.gui.schematicannon.option.replaceWithSolid.description": "O Canhão de esquema irá apenas substituir Blocos sólidos na área de trabalho, se o Esquema conter um bloco Sólido naquela posição.", "create.gui.schematicannon.option.replaceWithAny.description": "O Canhão de esquema irá substituir Blocos sólidos na área de trabalho, se o Esquema conter qualquer Bloco naquela posição.", @@ -998,10 +1095,239 @@ "create.schematicannon.status.schematicNotPlaced": "Esquema não Colocado", "create.schematicannon.status.schematicExpired": "Arquivo de Esquema Expirado", + "create.materialChecklist": "Lista de materiais", + "create.gui.filter.deny_list": "Lista de negação", + "create.gui.filter.deny_list.description": "Itens passam se eles não encaixam em nenhum dos acima. Uma lista de negação vazia aceita tudo.", + "create.gui.filter.allow_list": "Lista de permissão", + "create.gui.filter.allow_list.description": "Itens passam se eles se encaixam em algum dos acima. Uma lista de permissão vazia rejeita tudo.", + "create.gui.filter.respect_data": "Respeitar informação", + "create.gui.filter.respect_data.description": "Itens apenas se encaixam caso a durabilidade, encantamentos e outros atributos se encaixam também.", + "create.gui.filter.ignore_data": "Ignorar informação", + "create.gui.filter.ignore_data.description": "Itens se enquadram não importa os seus atributos.", + + "create.item_attributes.placeable": "É colocavel", + "create.item_attributes.placeable.inverted": "Não é colocavel", + "create.item_attributes.consumable": "É comestivel", + "create.item_attributes.consumable.inverted": "Não é comestivel", + "create.item_attributes.fluid_container": "Pode armazenar fluidos", + "create.item_attributes.fluid_container.inverted": "Não pode armazenar fluidos", + "create.item_attributes.enchanted": "Está encantado", + "create.item_attributes.enchanted.inverted": "Não está encantado", + "create.item_attributes.max_enchanted": "Está encantado no nível máximo", + "create.item_attributes.max_enchanted.inverted": "Não está encantado no nível maximo", + "create.item_attributes.renamed": "Tem nome customizado", + "create.item_attributes.renamed.inverted": "Não tem nome customizado", + "create.item_attributes.damaged": "Está danificado", + "create.item_attributes.damaged.inverted": "Não está danificado", + "create.item_attributes.badly_damaged": "Está severamente danificado", + "create.item_attributes.badly_damaged.inverted": "Não esta severamente danificado", + "create.item_attributes.not_stackable": "Não pode ser empilhado", + "create.item_attributes.not_stackable.inverted": "Pode ser empilhado", + "create.item_attributes.equipable": "Pode ser equipado", + "create.item_attributes.equipable.inverted": "Não pode ser equipado", + "create.item_attributes.furnace_fuel": "è combustivel", + "create.item_attributes.furnace_fuel.inverted": "Não é combustivel", + "create.item_attributes.washable": "Pode ser lavado", + "create.item_attributes.washable.inverted": "Não pode ser lavado", + "create.item_attributes.hauntable": "Pode ser amaldiçoado", + "create.item_attributes.hauntable.inverted": "Não pode ser amaldiçoado", + "create.item_attributes.crushable": "Pode ser triturado", + "create.item_attributes.crushable.inverted": "Não pode ser triturado", + "create.item_attributes.smeltable": "Pode ser fundido", + "create.item_attributes.smeltable.inverted": "Não pode ser fundido", + "create.item_attributes.smokable": "Pode ser defumado", + "create.item_attributes.smokable.inverted": "Não pode ser defumado", + "create.item_attributes.blastable": "È fundível no alto-forno", + "create.item_attributes.blastable.inverted": "Não é fundível no alto-forno", + "create.item_attributes.shulker_level": "O shulker é %1$s", + "create.item_attributes.shulker_level.inverted": "O shulker não é %1$s", + "create.item_attributes.shulker_level.full": "Cheio", + "create.item_attributes.shulker_level.empty": "Vazio", + "create.item_attributes.shulker_level.partial": "Parcialmente cheio", + "create.item_attributes.in_tag": "è marcado %1$s", + "create.item_attributes.in_tag.inverted": "Não é marcado %1$s", + "create.item_attributes.in_item_group": "Está no grupo '%1$s'", + "create.item_attributes.in_item_group.inverted": "Não esta no grupo '%1$s'", + "create.item_attributes.added_by": "Foi adicionado por %1$s", + "create.item_attributes.added_by.inverted": "Não foi adicionado por %1$s", + "create.item_attributes.has_enchant": "Está encantado com %1$s", + "create.item_attributes.has_enchant.inverted": "Não esta encantado com %1$s", + "create.item_attributes.color": "Esta tingido de %1$s", + "create.item_attributes.color.inverted": "Não está tingido de %1$s", + "create.item_attributes.has_fluid": "Contem %1$s", + "create.item_attributes.has_fluid.inverted": "Não contem %1$s", + "create.item_attributes.has_name": "Tem o nome %1$s", + "create.item_attributes.has_name.inverted": "Não tem o nome %1$s", + "create.item_attributes.book_author": "Tem a autoria de %1$s", + "create.item_attributes.book_author.inverted": "Não tem a autoria de %1$s", + "create.item_attributes.book_copy_original": "É original", + "create.item_attributes.book_copy_original.inverted": "Não é original", + "create.item_attributes.book_copy_first": "É uma cópia da primeira geração", + "create.item_attributes.book_copy_first.inverted": "Não é uma copia de primeira geração", + "create.item_attributes.book_copy_second": "É uma cópia de segunda geração", + "create.item_attributes.book_copy_second.inverted": "Não é uma copia de segunda geração", + "create.item_attributes.book_copy_tattered": "É uma bagunça esfarrapada", + "create.item_attributes.book_copy_tattered.inverted": "Não é uma bagunça esfarrapada", + "create.item_attributes.astralsorcery_amulet": "Melhora %1$s", + "create.item_attributes.astralsorcery_amulet.inverted": "Não melhora %1$s", + "create.item_attributes.astralsorcery_constellation": "Esta sintonizado a %1$s", + "create.item_attributes.astralsorcery_constellation.inverted": "Não esta sintonizado a %1$s", + "create.item_attributes.astralsorcery_crystal": "Tem atributos de cristais %1$s", + "create.item_attributes.astralsorcery_crystal.inverted": "Não tem atributos de cristais %1$s", + "create.item_attributes.astralsorcery_perk_gem": " %1$s Tem um atributo de benefio", + "create.item_attributes.astralsorcery_perk_gem.inverted": "%1$s Não tem um atributo de benefio", + + "create.gui.attribute_filter.no_selected_attributes": "Nenhum atributo selecionado", + "create.gui.attribute_filter.selected_attributes": "Atributos selecionados:", + "create.gui.attribute_filter.add_attribute": "Adicionar atributo a lista", + "create.gui.attribute_filter.add_inverted_attribute": "Adicionar atributo oposto a lista", + "create.gui.attribute_filter.allow_list_disjunctive": "Lista de permissão (Qualquer)", + "create.gui.attribute_filter.allow_list_disjunctive.description": "Itens passam se eles tiverem qualquer atributo selecionado.", + "create.gui.attribute_filter.allow_list_conjunctive": "Lista de permissão (Todos)", + "create.gui.attribute_filter.allow_list_conjunctive.description": "Itens passam se eles tiverem TODOS atributos selecionados.", + "create.gui.attribute_filter.deny_list": "lista de negação", + "create.gui.attribute_filter.deny_list.description": "Itens passam se eles NÃO tiverem qualquer atributo selecionado.", + "create.gui.attribute_filter.add_reference_item": "Adicionar item referência", + + "create.tooltip.holdForDescription": "Segure [%1$s] para o sumário", + "create.tooltip.holdForControls": "Segure [%1$s] para os controles", + "create.tooltip.keyShift": "Shift", + "create.tooltip.keyCtrl": "Ctrl", + "create.tooltip.speedRequirement": "Requerimento de velocidade: %1$s", + "create.tooltip.speedRequirement.none": "Nenhum", + "create.tooltip.speedRequirement.slow": "Devagar", + "create.tooltip.speedRequirement.medium": "Modereado", + "create.tooltip.speedRequirement.fast": "Rapido", + "create.tooltip.stressImpact": "Impacto de stress: %1$s", + "create.tooltip.stressImpact.low": " Baixo", + "create.tooltip.stressImpact.medium": " Moderado", + "create.tooltip.stressImpact.high": " Alto", + "create.tooltip.stressImpact.overstressed": ": Sobre estresse", + "create.tooltip.capacityProvided": "Capacidade de stress cinético: %1$s", + "create.tooltip.capacityProvided.low": " Pequeno", + "create.tooltip.capacityProvided.medium": " Médio", + "create.tooltip.capacityProvided.high": " Grande", + "create.tooltip.generationSpeed": " Gera em %1$s %2$s", + "create.tooltip.analogStrength": " Força analogica: %1$s/15", + + "create.mechanical_arm.extract_from": " Pegar itens de %1$s", + "create.mechanical_arm.deposit_to": " Depositar itens para %1$s", + "create.mechanical_arm.summary": "Braço mecânico tem %1$s entrada(s) e %2$s saida(s).", + "create.mechanical_arm.points_outside_range": "%1$s Ponto(s) de interação removidos pelas limitações de alcance.", + + "create.weighted_ejector.target_set": "Alvo selecionado", + "create.weighted_ejector.target_not_valid": "Ejetando para o bloco adjacente (Alvo não foi valido)", + "create.weighted_ejector.no_target": "Ejetando para o bloco adjacente (Nenhum alvo foi selecionado)", + "create.weighted_ejector.targeting": "Ejetando para [%1$s,%2$s,%3$s]", + "create.weighted_ejector.stack_size": "Tamanho da pilha ejetada", + + "create.logistics.when_multiple_outputs_available": "Quando multiplas saidas selecionadas", + + "create.mechanical_arm.selection_mode.round_robin": "Rodízio", + "create.mechanical_arm.selection_mode.forced_round_robin": "Rodízio forçado", + "create.mechanical_arm.selection_mode.prefer_first": "Preferir primeiro alvo", + + "create.tunnel.selection_mode.split": "Dividir", + "create.tunnel.selection_mode.forced_split": "Divisão forçada", + "create.tunnel.selection_mode.round_robin": "Rodízio", + "create.tunnel.selection_mode.forced_round_robin": "Rodízio forçado", + "create.tunnel.selection_mode.prefer_nearest": "Preferir o mais perto", + "create.tunnel.selection_mode.randomize": "Aleatorizar", + "create.tunnel.selection_mode.synchronize": "Sincronizar as entradas", + + "create.tooltip.chute.header": "Informação da calha", + "create.tooltip.chute.items_move_down": "Itens movimentam para baixo", + "create.tooltip.chute.items_move_up": "Itens movem para cima", + "create.tooltip.chute.no_fans_attached": "Não conectado com um ventilador", + "create.tooltip.chute.fans_push_up": "Ventiladores sopram de baixo", + "create.tooltip.chute.fans_push_down": "Ventiladores sopram de cima", + "create.tooltip.chute.fans_pull_up": "Ventiladores sugam de cima", + "create.tooltip.chute.fans_pull_down": "Ventiladores sugam de baixo", + "create.tooltip.chute.contains": "Contem: %1$s x%2$s", + "create.tooltip.brass_tunnel.contains": "Distribuindo:", + "create.tooltip.brass_tunnel.contains_entry": " > %1$s x%2$s", + "create.tooltip.brass_tunnel.retrieve": "Clique direito para recuperar item", + + "create.linked_controller.bind_mode": "Modo de vinculação", + "create.linked_controller.press_keybind": "Aperte %1$s, %2$s, %3$s, %4$s, %5$s or %6$s, para vincular essa frequencia para tecla respectiva", + "create.linked_controller.key_bound": "Frequência vinculada com %1$s", + "create.linked_controller.frequency_slot_1": "Tecla: %1$s, Freq. #1", + "create.linked_controller.frequency_slot_2": "Tecla: %1$s, Freq. #2", + + "create.crafting_blueprint.crafting_slot": "Slot de ingrediente", + "create.crafting_blueprint.filter_items_viable": "Filtros avançados são viaveis", + "create.crafting_blueprint.display_slot": "Slot de exibição", + "create.crafting_blueprint.inferred": "Deduzido pela receita", + "create.crafting_blueprint.manually_assigned": "Designado manualmente", + "create.crafting_blueprint.secondary_display_slot": "Slot de exibição secundario", + "create.crafting_blueprint.optional": "Opcional", + + "create.potato_cannon.ammo.attack_damage": " %1$s Dano de ataque", + "create.potato_cannon.ammo.reload_ticks": " %1$s Velocidade de recarregamento", + "create.potato_cannon.ammo.knockback": " %1$s Repulsão do projetil", + + "create.hint.hose_pulley.title": "Abastecimento sem fundo", + "create.hint.hose_pulley": "O corpo de fluido selecionado é considerado infinito.", + "create.hint.mechanical_arm_no_targets.title": "Sem alvos", + "create.hint.mechanical_arm_no_targets": "Aparentemente esse _Braço_ _Mecânico_ não foi designado nenhum _alvo._ Selecione esteiras, depósitos, funis e outros blocos com o _botão direito do mouse_ enquanto _segurando_ o _Braço_ _Mecanico_ na sua _mão_.", + "create.hint.empty_bearing.title": "Atualizar o rolamento", + "create.hint.empty_bearing": " _clique com o botão direito_ o rolamento com a _mão_ _vazia_ para _conectar_ a estrutura que você construiu não frente disso.", + "create.hint.full_deployer.title": "Implantador transbordando de itens", + "create.hint.full_deployer": "Aparenta que esse _inplantador_ contém _itens_ em _excesso_ que precisam ser _extraídos._ Use um _funil,_ _funil de andesito/latão_ ou outros meios para extrair os itens excedentes.", + + "create.gui.config.overlay1": "Oi :)", + + "create.command.killTPSCommand": " killtps", + "create.command.killTPSCommand.status.slowed_by.0": " [Create]: Server tick is currently slowed by %s ms :o", + "create.command.killTPSCommand.status.slowed_by.1": " [Create]: Server tick is slowed by %s ms now >:)", + "create.command.killTPSCommand.status.slowed_by.2": " [Create]: Server tick is back to regular speed :D", + "create.command.killTPSCommand.status.usage.0": " [Create]: use /killtps stop to bring back server tick to regular speed", + "create.command.killTPSCommand.status.usage.1": " [Create]: use /killtps start to artificially slow down the server tick", + "create.command.killTPSCommand.argument.tickTime": "tickTime", + + "create.contraption.minecart_contraption_too_big": "Essa engenhoca de carrinho aparenta ser muita grande para pegar", + "create.contraption.minecart_contraption_illegal_pickup": "Uma força mistica esta segurando esta engenhoca de carrinho", "_": "->------------------------] Subtitles [------------------------<-", + "create.subtitle.contraption_disassemble": "Engenhoca para", + "create.subtitle.peculiar_bell_use": "Sino peculiar toca", + "create.subtitle.mixing": "Sons de mistura", + "create.subtitle.mechanical_press_activation_belt": "Bonks da prensa mecanica", + "create.subtitle.fwoomp": "Fwoomps do canhão de batata", + "create.subtitle.worldshaper_place": "Zaps do terraformador", + "create.subtitle.sanding_long": "Sons de lixa", + "create.subtitle.crushing_1": "Sons de trituração", + "create.subtitle.depot_slide": "Item escorrega", + "create.subtitle.saw_activate_stone": "Serra mecânica ativa", + "create.subtitle.blaze_munch": "Queimador de blazer mastiga", + "create.subtitle.funnel_flap": "Abas do funil batendo", + "create.subtitle.schematicannon_finish": "Ding do canhão de esquema", + "create.subtitle.haunted_bell_use": "Sino assombrado toca", + "create.subtitle.scroll_value": "click do scroll", + "create.subtitle.crafter_craft": "Fabricador fábrica", + "create.subtitle.controller_put": "Thumps do controle", + "create.subtitle.cranking": "Manivela gira", + "create.subtitle.wrench_remove": "Componente quebra", + "create.subtitle.sanding_short": "Sons de lixa", + "create.subtitle.cogs": "tremer da rodas dentadas", + "create.subtitle.slime_added": "Slime sendo espremido", + "create.subtitle.wrench_rotate": "Chave inglesa usada", + "create.subtitle.potato_hit": "Impacto vegetal", + "create.subtitle.saw_activate_wood": "Serra mecânica ativa", + "create.subtitle.haunted_bell_convert": "Sino assombrado acorda", + "create.subtitle.deny": "Boop de negação", + "create.subtitle.controller_click": "Clicks do controle", + "create.subtitle.schematicannon_launch_block": "Canhão de esquema atira", + "create.subtitle.copper_armor_equip": "Tilintar dos equipamentos de mergulho", + "create.subtitle.controller_take": "Atril esvaziado", + "create.subtitle.mechanical_press_activation": "Clang da prensa mecânica", + "create.subtitle.contraption_assemble": "Engenhoca move", + "create.subtitle.crafter_click": "Clicks do fabricador", + "create.subtitle.depot_plop": "Item pousa", + "create.subtitle.confirm": "Ding afirmativo", + "_": "->------------------------] Item Descriptions [------------------------<-", From 5264885654dfd6d240beed2b700a6250b46533a9 Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Sun, 22 May 2022 17:06:22 +0200 Subject: [PATCH 30/31] PR Datagen --- src/generated/resources/.cache/cache | 8 +- .../assets/create/lang/unfinished/de_de.json | 1280 ++++++++--------- .../assets/create/lang/unfinished/es_es.json | 4 +- .../assets/create/lang/unfinished/pt_br.json | 622 ++++---- .../assets/create/lang/unfinished/zh_cn.json | 1038 ++++++------- .../api/connectivity/ConnectivityHandler.java | 233 +-- .../BlockMovementChecks.java | 6 +- 7 files changed, 1629 insertions(+), 1562 deletions(-) diff --git a/src/generated/resources/.cache/cache b/src/generated/resources/.cache/cache index 684ccbaf6..9692f8b06 100644 --- a/src/generated/resources/.cache/cache +++ b/src/generated/resources/.cache/cache @@ -532,20 +532,20 @@ bf2b0310500213ff853c748c236eb5d01f61658e assets/create/blockstates/yellow_toolbo b7181bcd8182b2f17088e5aa881f374c9c65470c assets/create/blockstates/zinc_ore.json 7880ce16e8b649e26d01cecee271648027f26651 assets/create/lang/en_ud.json 194fbc2c94d07a5fc1712c8b579973e92fafa5d8 assets/create/lang/en_us.json -a711143e849fdc488e43e8eb284248955bbf1ceb assets/create/lang/unfinished/de_de.json +048f1e93f548cc17c3656a7fc3421cb3374aae7a assets/create/lang/unfinished/de_de.json f5218855767129457b3e10ae1d7c254b5af29f27 assets/create/lang/unfinished/es_cl.json -92882d65db2ee109a3e79d4156277f925f4a387c assets/create/lang/unfinished/es_es.json +c8094db50269e75fbd10991965867ce6127f7133 assets/create/lang/unfinished/es_es.json 02f3a6a3a281d59489cb0c02db249aaff7aaa433 assets/create/lang/unfinished/fr_fr.json fd2eb2cc4987ae9ddadd6452fc853091b6a93982 assets/create/lang/unfinished/it_it.json 64d40f6fb9a873b8c107b82236f0b8fddc010c72 assets/create/lang/unfinished/ja_jp.json 7b680aca19dd1b015e72c1af91f388313eabcfac assets/create/lang/unfinished/ko_kr.json bae90b8439e02d2f97f0eb65f2261e4e0d80aea5 assets/create/lang/unfinished/nl_nl.json d640931ab5f23128910228880a4beccd45af3cce assets/create/lang/unfinished/pl_pl.json -44fd39ea905ef4f7c425c006bce24aa174186585 assets/create/lang/unfinished/pt_br.json +b85352b6822875337028f3d0a4e4131a5a812ef9 assets/create/lang/unfinished/pt_br.json 0baffa79e99e78a81d9933c44aeefe6282e634ea assets/create/lang/unfinished/pt_pt.json 319db22bc0bc5ed556d83dafcae5ac11b3034ae6 assets/create/lang/unfinished/ro_ro.json c77ae5ebbbd4ead7a641b9a2bf8b17073e73ecb9 assets/create/lang/unfinished/ru_ru.json -9acc0e92774c0e4b6207f08d3a85a81b1a7a0734 assets/create/lang/unfinished/zh_cn.json +786a3a38691ea66d52b005b560c1937087f4f64e assets/create/lang/unfinished/zh_cn.json 60b348950274d79f267ae8e6283e5a23a6c65720 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 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 babfd23bf..3bb2357a6 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: 1325", + "_": "Missing Localizations: 697", "_": "->------------------------] Game Elements [------------------------<-", @@ -9,43 +9,43 @@ "block.create.analog_lever": "Analoger Schalter", "block.create.andesite_belt_funnel": "Riementrichter aus Andesit", "block.create.andesite_casing": "Andesitrahmen", - "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": "Andesit-Zahnrad", + "block.create.andesite_encased_large_cogwheel": "Großes Andesit-Zahnrad", "block.create.andesite_encased_shaft": "Andesitummantelte Welle", "block.create.andesite_funnel": "Andesittrichter", "block.create.andesite_pillar": "Andesitsäule", "block.create.andesite_tunnel": "Andesittunnel", - "block.create.asurine": "UNLOCALIZED: Asurine", - "block.create.asurine_pillar": "UNLOCALIZED: Asurine Pillar", + "block.create.asurine": "Asurin", + "block.create.asurine_pillar": "Asurinsäule", "block.create.basin": "Behälter", "block.create.belt": "Mechanischer Riemen", "block.create.birch_window": "Birkenholzfenster", "block.create.birch_window_pane": "Birkenholzfensterscheibe", - "block.create.black_nixie_tube": "UNLOCALIZED: Black Nixie Tube", + "block.create.black_nixie_tube": "Schwarze Nixie-Röhre", "block.create.black_sail": "Schwarzes Segel", "block.create.black_seat": "Schwarzer Sitz", - "block.create.black_toolbox": "UNLOCALIZED: Black Toolbox", + "block.create.black_toolbox": "Schwarzer Werkzeugkasten", "block.create.black_valve_handle": "Schwarzer Ventilgriff", "block.create.blaze_burner": "Lohenbrenner", - "block.create.blue_nixie_tube": "UNLOCALIZED: Blue Nixie Tube", + "block.create.blue_nixie_tube": "Blaue Nixie-Röhre", "block.create.blue_sail": "Blaues Segel", "block.create.blue_seat": "Blauer Sitz", - "block.create.blue_toolbox": "UNLOCALIZED: Blue Toolbox", + "block.create.blue_toolbox": "Blauer Werkzeugkasten", "block.create.blue_valve_handle": "Blauer Ventilgriff", "block.create.brass_belt_funnel": "Riementrichter aus Messing", "block.create.brass_block": "Messing Block", "block.create.brass_casing": "Messingrahmen", - "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": "Messing-Zahnrad", + "block.create.brass_encased_large_cogwheel": "Großes Messing-Zahnrad", "block.create.brass_encased_shaft": "Messingummantelte Welle", "block.create.brass_funnel": "Messingtrichter", "block.create.brass_tunnel": "Messingtunnel", - "block.create.brown_nixie_tube": "UNLOCALIZED: Brown Nixie Tube", + "block.create.brown_nixie_tube": "Braune Nixie-Röhre", "block.create.brown_sail": "Braunes Segel", "block.create.brown_seat": "Brauner Sitz", - "block.create.brown_toolbox": "UNLOCALIZED: Brown Toolbox", + "block.create.brown_toolbox": "Brauner Werkzeugkasten", "block.create.brown_valve_handle": "Brauner Ventilgriff", - "block.create.calcite_pillar": "UNLOCALIZED: Calcite Pillar", + "block.create.calcite_pillar": "Kalzitsäule", "block.create.cart_assembler": "Lorenmonteur", "block.create.chocolate": "Schokolade", "block.create.chute": "Rinne", @@ -54,159 +54,159 @@ "block.create.cogwheel": "Zahnrad", "block.create.content_observer": "Inhaltsbeobachter", "block.create.controller_rail": "Steuerungsschiene", - "block.create.copper_backtank": "UNLOCALIZED: Copper Backtank", + "block.create.copper_backtank": "Kupferner Rückentank", "block.create.copper_casing": "Kupferrahmen", - "block.create.copper_shingle_slab": "UNLOCALIZED: Copper Shingle Slab", - "block.create.copper_shingle_stairs": "UNLOCALIZED: Copper Shingle Stairs", + "block.create.copper_shingle_slab": "Kupferschindelstufe", + "block.create.copper_shingle_stairs": "Kupferschindeltreppe", "block.create.copper_shingles": "Kupferschindeln", - "block.create.copper_tile_slab": "UNLOCALIZED: Copper Tile Slab", - "block.create.copper_tile_stairs": "UNLOCALIZED: Copper Tile Stairs", + "block.create.copper_tile_slab": "Kupferfliesenstufe", + "block.create.copper_tile_stairs": "Kupferfliesentreppe", "block.create.copper_tiles": "Kupferfliesen", "block.create.copper_valve_handle": "Kupfer Ventilgriff", "block.create.creative_crate": "Kreative anpassbare Kiste", "block.create.creative_fluid_tank": "Kreativer Flüssigkeitstank", "block.create.creative_motor": "Kreativer Motor", - "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": "Karmesit", + "block.create.crimsite_pillar": "Karmesitsäule", + "block.create.crimson_window": "Karmesinfenster", + "block.create.crimson_window_pane": "Karmesinfensterscheibe", "block.create.crushing_wheel": "Mahlwerkrad", "block.create.crushing_wheel_controller": "Mahlwerkrad Steurung", "block.create.cuckoo_clock": "Kuckucksuhr", - "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.cyan_nixie_tube": "UNLOCALIZED: Cyan Nixie Tube", + "block.create.cut_andesite": "Geschnittener Andesit", + "block.create.cut_andesite_brick_slab": "Geschnittene Andesitziegelstufe", + "block.create.cut_andesite_brick_stairs": "Geschnittene Andesitziegeltreppe", + "block.create.cut_andesite_brick_wall": "Geschnittene Andesitziegelmauer", + "block.create.cut_andesite_bricks": "Geschnittene Andesitziegelsteine", + "block.create.cut_andesite_slab": "Geschnittene Andesitstufe", + "block.create.cut_andesite_stairs": "Geschnittene Andesittreppe", + "block.create.cut_andesite_wall": "Geschnittene Andesitmauer", + "block.create.cut_asurine": "Geschnittenes Asurin", + "block.create.cut_asurine_brick_slab": "Geschnittene Asurinziegelstufe", + "block.create.cut_asurine_brick_stairs": "Geschnittene Asurinziegeltreppe", + "block.create.cut_asurine_brick_wall": "Geschnittene Asurinziegelmauer", + "block.create.cut_asurine_bricks": "Geschnittene Asurinziegelsteine", + "block.create.cut_asurine_slab": "Geschnittene Asurinstufe", + "block.create.cut_asurine_stairs": "Geschnittene Asurintreppe", + "block.create.cut_asurine_wall": "Geschnittene Asurinmauer", + "block.create.cut_calcite": "Geschnittener Kalzit", + "block.create.cut_calcite_brick_slab": "Geschnittene Kalzitziegelstufe", + "block.create.cut_calcite_brick_stairs": "Geschnittene Kalzitziegeltreppe", + "block.create.cut_calcite_brick_wall": "Geschnittene Kalzitziegelmauer", + "block.create.cut_calcite_bricks": "Geschnittene Kalzitziegelsteine", + "block.create.cut_calcite_slab": "Geschnittene Kalzitstufe", + "block.create.cut_calcite_stairs": "Geschnittene Kalzittreppe", + "block.create.cut_calcite_wall": "Geschnittene Kalzitmauer", + "block.create.cut_crimsite": "Geschnittenes Karmesit", + "block.create.cut_crimsite_brick_slab": "Geschnittene Karmesitziegelstufe", + "block.create.cut_crimsite_brick_stairs": "Geschnittene Karmesitziegeltreppe", + "block.create.cut_crimsite_brick_wall": "Geschnittene Karmesitziegelmauer", + "block.create.cut_crimsite_bricks": "Geschnittene Karmesitziegelsteine", + "block.create.cut_crimsite_slab": "Geschnittene Karmesitstufe", + "block.create.cut_crimsite_stairs": "Geschnittene Karmesittreppe", + "block.create.cut_crimsite_wall": "Geschnittene Karmesitmauer", + "block.create.cut_deepslate": "Geschnittener Tiefenschiefer", + "block.create.cut_deepslate_brick_slab": "Geschnittene Tiefenschieferziegelstufe", + "block.create.cut_deepslate_brick_stairs": "Geschnittene Tiefenschieferziegeltreppe", + "block.create.cut_deepslate_brick_wall": "Geschnittene Tiefenschieferziegelmauer", + "block.create.cut_deepslate_bricks": "Geschnittene Tiefenschiefersteine", + "block.create.cut_deepslate_slab": "Geschnittene Tiefenschieferstufe", + "block.create.cut_deepslate_stairs": "Geschnittene Tiefenschiefertreppe", + "block.create.cut_deepslate_wall": "Geschnittene Tiefenschiefermauer", + "block.create.cut_diorite": "Gescnittener Diorit", + "block.create.cut_diorite_brick_slab": "Geschnittene Dioritziegelstufe", + "block.create.cut_diorite_brick_stairs": "Geschnittene Dioritziegeltreppe", + "block.create.cut_diorite_brick_wall": "Geschnittene Dioritziegelmauer", + "block.create.cut_diorite_bricks": "Geschnittene Dioritziegelsteine", + "block.create.cut_diorite_slab": "Geschnittene Dioritstufe", + "block.create.cut_diorite_stairs": "Geschnittene Diorittreppe", + "block.create.cut_diorite_wall": "Geschnittene Dioritmauer", + "block.create.cut_dripstone": "Geschnittener Tropfstein", + "block.create.cut_dripstone_brick_slab": "Geschnittene Tropfsteinziegelstufe", + "block.create.cut_dripstone_brick_stairs": "Geschnittene Tropfsteinziegeltreppe", + "block.create.cut_dripstone_brick_wall": "Geschnittene Tropfsteinziegelmauer", + "block.create.cut_dripstone_bricks": "Geschnittener Tropfsteinziegelsteine", + "block.create.cut_dripstone_slab": "Geschnittene Tropfsteinstufe", + "block.create.cut_dripstone_stairs": "Geschnittene Tropfsteintreppe", + "block.create.cut_dripstone_wall": "Geschnittene Tropfsteinmauer", + "block.create.cut_granite": "Geschnittener Granit", + "block.create.cut_granite_brick_slab": "Geschnittene Granitziegelstufe", + "block.create.cut_granite_brick_stairs": "Geschnittene Granitziegeltreppe", + "block.create.cut_granite_brick_wall": "Geschnittene Granitziegelmauer", + "block.create.cut_granite_bricks": "Geschnittene Granitziegelsteine", + "block.create.cut_granite_slab": "Geschnittene Granitstufe", + "block.create.cut_granite_stairs": "Geschnittene Granittreppe", + "block.create.cut_granite_wall": "Geschnittene Granitmauer", + "block.create.cut_limestone": "Geschnittener Kalkstein", + "block.create.cut_limestone_brick_slab": "Geschnittene Kalksteinziegelstufe", + "block.create.cut_limestone_brick_stairs": "Geschnittene Kalksteinziegeltreppe", + "block.create.cut_limestone_brick_wall": "Geschnittene Kalksteinziegelmauer", + "block.create.cut_limestone_bricks": "Geschnittene Kalksteinziegelsteine", + "block.create.cut_limestone_slab": "Geschnittene Kalksteinstufe", + "block.create.cut_limestone_stairs": "Geschnittene Kalksteintreppe", + "block.create.cut_limestone_wall": "Geschnittene Kalksteinmauer", + "block.create.cut_ochrum": "Geschnittenes Ockrum", + "block.create.cut_ochrum_brick_slab": "Geschnittene Ockrumziegelstufe", + "block.create.cut_ochrum_brick_stairs": "Geschnittene Ockrumziegeltreppe", + "block.create.cut_ochrum_brick_wall": "Geschnittene Ockrumziegelmauer", + "block.create.cut_ochrum_bricks": "Geschnittene Ockrumziegelsteine", + "block.create.cut_ochrum_slab": "Geschnittene Ockrumstufe", + "block.create.cut_ochrum_stairs": "Geschnittene Ockrumtreppe", + "block.create.cut_ochrum_wall": "Geschnittene Ockrummauer", + "block.create.cut_scorchia": "Geschnittenes Scorchia", + "block.create.cut_scorchia_brick_slab": "Geschnittene Scorchiaziegelstufe", + "block.create.cut_scorchia_brick_stairs": "Geschnittene Scorchiaziegeltreppe", + "block.create.cut_scorchia_brick_wall": "Geschnittene Scorchiaziegelmauer", + "block.create.cut_scorchia_bricks": "Geschnittene Scorchiaziegelsteine", + "block.create.cut_scorchia_slab": "Geschnittene Scorchiaziegelstufe", + "block.create.cut_scorchia_stairs": "Geschnittene Scorchiaziegeltreppe", + "block.create.cut_scorchia_wall": "Geschnittene Scorchiaziegelmauer", + "block.create.cut_scoria": "Geschnittenes Scoria", + "block.create.cut_scoria_brick_slab": "Geschnittene Scoriaziegelstufe", + "block.create.cut_scoria_brick_stairs": "Geschnittene Scoriaziegeltreppe", + "block.create.cut_scoria_brick_wall": "Geschnittene Scoriaziegelmauer", + "block.create.cut_scoria_bricks": "Geschnittene Scoriaziegelsteine", + "block.create.cut_scoria_slab": "Geschnittene Scoriaziegelstufe", + "block.create.cut_scoria_stairs": "Geschnittene Scoriaziegeltreppe", + "block.create.cut_scoria_wall": "Geschnittene Scoriaziegelmauer", + "block.create.cut_tuff": "Geschnittener Tuffstein", + "block.create.cut_tuff_brick_slab": "Geschnittene Tuffsteinziegelstufe", + "block.create.cut_tuff_brick_stairs": "Geschnittene Tuffsteinziegeltreppe", + "block.create.cut_tuff_brick_wall": "Geschnittene Tuffsteinziegelmauer", + "block.create.cut_tuff_bricks": "Geschnittene Tuffsteinziegelsteine", + "block.create.cut_tuff_slab": "Geschnittene Tuffsteinstufe", + "block.create.cut_tuff_stairs": "Geschnittene Tuffsteintreppe", + "block.create.cut_tuff_wall": "Geschnittene Tuffsteinmauer", + "block.create.cut_veridium": "Geschnittenes Veridium", + "block.create.cut_veridium_brick_slab": "Geschnittene Veridiumziegelstufe", + "block.create.cut_veridium_brick_stairs": "Geschnittene Veridiumziegeltreppe", + "block.create.cut_veridium_brick_wall": "Geschnittene Veridiumziegelmauer", + "block.create.cut_veridium_bricks": "Geschnittene Veridiumziegelsteine", + "block.create.cut_veridium_slab": "Geschnittene Veridiumziegelstufe", + "block.create.cut_veridium_stairs": "Geschnittene Veridiumziegeltreppe", + "block.create.cut_veridium_wall": "Geschnittene Veridiumziegelmauer", + "block.create.cyan_nixie_tube": "Türkise Nixie-Röhre", "block.create.cyan_sail": "Türkises Segel", "block.create.cyan_seat": "Türkiser Sitz", - "block.create.cyan_toolbox": "UNLOCALIZED: Cyan Toolbox", + "block.create.cyan_toolbox": "Türkiser Werkzeugkasten", "block.create.cyan_valve_handle": "Türkiser Ventilgriff", "block.create.dark_oak_window": "Schwarzeichenholzfenster", "block.create.dark_oak_window_pane": "Schwarzeichenholzfensterscheibe", - "block.create.deepslate_pillar": "UNLOCALIZED: Deepslate Pillar", - "block.create.deepslate_zinc_ore": "UNLOCALIZED: Deepslate Zinc Ore", + "block.create.deepslate_pillar": "Tiefenschiefer-Säule", + "block.create.deepslate_zinc_ore": "Tiefenschiefer-Zinkerz", "block.create.deployer": "Einsatzgerät", "block.create.depot": "Depot", "block.create.diorite_pillar": "Dioritsäule", - "block.create.dripstone_pillar": "UNLOCALIZED: Dripstone Pillar", + "block.create.dripstone_pillar": "Tropfstein-Säule", "block.create.encased_chain_drive": "Ummantelter Kettenriemen", "block.create.encased_fan": "Ummantelter Lüfter", "block.create.encased_fluid_pipe": "Ummanteltes Rohr", - "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": "Angelaufene Kupferschindelstufe", + "block.create.exposed_copper_shingle_stairs": "Angelaufene Kupferschindeltreppe", + "block.create.exposed_copper_shingles": "Angelaufene Kupferschindel", + "block.create.exposed_copper_tile_slab": "Angelaufene Kupferfliesenstufe", + "block.create.exposed_copper_tile_stairs": "Angelaufene Kupferfliesentreppe", + "block.create.exposed_copper_tiles": "Angelaufene Kupferfliesen", "block.create.fluid_pipe": "Flüssigkeitsrohr", "block.create.fluid_tank": "Flüssigkeitstank", "block.create.fluid_valve": "Flüssigkeitsventil", @@ -220,65 +220,65 @@ "block.create.gearshift": "Gangschaltung", "block.create.glass_fluid_pipe": "Glasrohr", "block.create.granite_pillar": "Granitsäule", - "block.create.gray_nixie_tube": "UNLOCALIZED: Gray Nixie Tube", + "block.create.gray_nixie_tube": "Graue Nixie-Röhre", "block.create.gray_sail": "Graues Segel", "block.create.gray_seat": "Grauer Sitz", - "block.create.gray_toolbox": "UNLOCALIZED: Gray Toolbox", + "block.create.gray_toolbox": "Grauer Werkzeugkasten", "block.create.gray_valve_handle": "Grauer Ventilgriff", - "block.create.green_nixie_tube": "UNLOCALIZED: Green Nixie Tube", + "block.create.green_nixie_tube": "Grüne Nixie-Röhre", "block.create.green_sail": "Grünes Segel", "block.create.green_seat": "Grüner Sitz", - "block.create.green_toolbox": "UNLOCALIZED: Green Toolbox", + "block.create.green_toolbox": "Grüner Werkzeugkasten", "block.create.green_valve_handle": "Grüner Ventilgriff", "block.create.hand_crank": "Handkurbel", - "block.create.haunted_bell": "UNLOCALIZED: Haunted Bell", + "block.create.haunted_bell": "Spukglocke", "block.create.honey": "Honig", "block.create.horizontal_framed_glass": "Horizontal Gerahmtes Glas", "block.create.horizontal_framed_glass_pane": "Horizontal Gerahmte Glasscheibe", "block.create.hose_pulley": "Umlenkrolle", "block.create.item_drain": "Abfluss", - "block.create.item_vault": "UNLOCALIZED: Item Vault", + "block.create.item_vault": "Gegenstandstresor", "block.create.jungle_window": "Tropenholzfenster", "block.create.jungle_window_pane": "Tropenholzfensterscheibe", "block.create.large_cogwheel": "Großes Zahnrad", "block.create.layered_andesite": "Geschichteter Andesit", - "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": "Geschichtetes Asurin", + "block.create.layered_calcite": "Geschichtetes Kalzit", + "block.create.layered_crimsite": "Geschichtetes Karmesit", + "block.create.layered_deepslate": "Geschichteter Tiefenschiefer", "block.create.layered_diorite": "Geschichteter Diorit", - "block.create.layered_dripstone": "UNLOCALIZED: Layered Dripstone", + "block.create.layered_dripstone": "Geschichteter Tropfstein", "block.create.layered_granite": "Geschichteter Granit", "block.create.layered_limestone": "Geschichteter Kalkstein", - "block.create.layered_ochrum": "UNLOCALIZED: Layered Ochrum", - "block.create.layered_scorchia": "UNLOCALIZED: Layered Scorchia", + "block.create.layered_ochrum": "Geschichtetes Ockrum", + "block.create.layered_scorchia": "Geschichtetes Scorchia", "block.create.layered_scoria": "Geschichtete Schlacke", - "block.create.layered_tuff": "UNLOCALIZED: Layered Tuff", - "block.create.layered_veridium": "UNLOCALIZED: Layered Veridium", - "block.create.lectern_controller": "UNLOCALIZED: Lectern Controller", - "block.create.light_blue_nixie_tube": "UNLOCALIZED: Light Blue Nixie Tube", + "block.create.layered_tuff": "Geschichteter Tuffstein", + "block.create.layered_veridium": "Geschichtetes Veridium", + "block.create.lectern_controller": "Lesepult-Kontroller", + "block.create.light_blue_nixie_tube": "Hellblaue Nixie-Röhre", "block.create.light_blue_sail": "Hellblaues Segel", "block.create.light_blue_seat": "Hellblauer Sitz", - "block.create.light_blue_toolbox": "UNLOCALIZED: Light Blue Toolbox", + "block.create.light_blue_toolbox": "Hellblauer Werkzeugkasten", "block.create.light_blue_valve_handle": "Hellblauer Ventilgriff", - "block.create.light_gray_nixie_tube": "UNLOCALIZED: Light Gray Nixie Tube", + "block.create.light_gray_nixie_tube": "Hellgraue Nixie-Röhre", "block.create.light_gray_sail": "Hellgraues Segel", "block.create.light_gray_seat": "Hellgrauer Sitz", - "block.create.light_gray_toolbox": "UNLOCALIZED: Light Gray Toolbox", + "block.create.light_gray_toolbox": "Hellgrauer Werkzeugkasten", "block.create.light_gray_valve_handle": "Hellgrauer Ventilgriff", - "block.create.lime_nixie_tube": "UNLOCALIZED: Lime Nixie Tube", + "block.create.lime_nixie_tube": "Hellgrüne Nixie-Röhre", "block.create.lime_sail": "Hellgrünes Segel", "block.create.lime_seat": "Hellgrüner Sitz", - "block.create.lime_toolbox": "UNLOCALIZED: Lime Toolbox", + "block.create.lime_toolbox": "Hellgrüner Werkzeugkasten", "block.create.lime_valve_handle": "Hellgrüner Ventilgriff", "block.create.limestone": "Kalkstein", "block.create.limestone_pillar": "Kalksteinsäule", "block.create.linear_chassis": "Schubgerüst", "block.create.lit_blaze_burner": "Aktiver Lohenbrenner", - "block.create.magenta_nixie_tube": "UNLOCALIZED: Magenta Nixie Tube", + "block.create.magenta_nixie_tube": "Magenta Nixie-Röhre", "block.create.magenta_sail": "Magenta Segel", "block.create.magenta_seat": "Magenta Sitz", - "block.create.magenta_toolbox": "UNLOCALIZED: Magenta Toolbox", + "block.create.magenta_toolbox": "Magenta Werkzeugkasten", "block.create.magenta_valve_handle": "Magenta Ventilgriff", "block.create.mechanical_arm": "Mechanischer Arm", "block.create.mechanical_bearing": "Mechanisches Lager", @@ -300,101 +300,101 @@ "block.create.nozzle": "Düse", "block.create.oak_window": "Eichenfenster", "block.create.oak_window_pane": "Eichenfensterscheibe", - "block.create.ochrum": "UNLOCALIZED: Ochrum", - "block.create.ochrum_pillar": "UNLOCALIZED: Ochrum Pillar", + "block.create.ochrum": "Ockrum", + "block.create.ochrum_pillar": "Ockrum-Säule", "block.create.orange_sail": "Oranges Segel", "block.create.orange_seat": "Oranger Sitz", - "block.create.orange_toolbox": "UNLOCALIZED: Orange Toolbox", + "block.create.orange_toolbox": "Oranger Werkzeugkasten", "block.create.orange_valve_handle": "Oranger Ventilgriff", "block.create.ornate_iron_window": "Kunstvolles Eisenfenster", "block.create.ornate_iron_window_pane": "Kunstvolle Eisenfensterscheibe", - "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.peculiar_bell": "UNLOCALIZED: Peculiar Bell", - "block.create.pink_nixie_tube": "UNLOCALIZED: Pink Nixie Tube", + "block.create.oxidized_copper_shingle_slab": "Oxidierte Kupferschindelstufe", + "block.create.oxidized_copper_shingle_stairs": "Oxidierte Kupfertreppe", + "block.create.oxidized_copper_shingles": "Oxidierte Kupferschindel", + "block.create.oxidized_copper_tile_slab": "Oxidierte Kupferfliesenstufe", + "block.create.oxidized_copper_tile_stairs": "Oxidierte Kupferfliesentreppe", + "block.create.oxidized_copper_tiles": "Oxidierte Kupferfliesen", + "block.create.peculiar_bell": "Seltsame Glocke", + "block.create.pink_nixie_tube": "Rosa Nixie-Röhre", "block.create.pink_sail": "Rosa Segel", "block.create.pink_seat": "Rosa Sitz", - "block.create.pink_toolbox": "UNLOCALIZED: Pink Toolbox", + "block.create.pink_toolbox": "Rosa Werkzeugkasten", "block.create.pink_valve_handle": "Rosa Ventilgriff", "block.create.piston_extension_pole": "Kolben-Pleuelverlängerung", - "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": "Polierter geschnittener Andesit", + "block.create.polished_cut_andesite_slab": "Polierte geschnittene Andesitstufe", + "block.create.polished_cut_andesite_stairs": "Polierte geschnittene Andesittreppe", + "block.create.polished_cut_andesite_wall": "Polierte geschnittene Andesitmauer", + "block.create.polished_cut_asurine": "Poliertes geschnittenes Asurin", + "block.create.polished_cut_asurine_slab": "Polierte geschnittene Asurinstufe", + "block.create.polished_cut_asurine_stairs": "Polierte geschnittene Asurintreppe", + "block.create.polished_cut_asurine_wall": "Polierte geschnittene Asurinmauer", + "block.create.polished_cut_calcite": "Polierter geschnittener Kalzit", + "block.create.polished_cut_calcite_slab": "Polierte geschnittene Kalzitstufe", + "block.create.polished_cut_calcite_stairs": "Polierte geschnittene Kalzittreppe", + "block.create.polished_cut_calcite_wall": "Polierte geschnittene Kalzitmauer", + "block.create.polished_cut_crimsite": "Poliertes geschnittenes Karmesit", + "block.create.polished_cut_crimsite_slab": "Polierte geschnittene Karmesitstufe", + "block.create.polished_cut_crimsite_stairs": "Polierte geschnittene Karmesittreppe", + "block.create.polished_cut_crimsite_wall": "Polierte geschnittene Karmesitmauer", + "block.create.polished_cut_deepslate": "Polierter geschnittener Tiefschiefer", + "block.create.polished_cut_deepslate_slab": "Polierte geschnittene Tiefschieferstufe", + "block.create.polished_cut_deepslate_stairs": "Polierte geschnittene Tiefschiefertreppe", + "block.create.polished_cut_deepslate_wall": "Polierte geschnittene Tiefschiefermauer", + "block.create.polished_cut_diorite": "Polierter geschnittener Diorit", + "block.create.polished_cut_diorite_slab": "Polierte geschnittene Dioritstufe", + "block.create.polished_cut_diorite_stairs": "Polierte geschnittene Diorittreppe", + "block.create.polished_cut_diorite_wall": "Polierte geschnittene Dioritmauer", + "block.create.polished_cut_dripstone": "Polierter geschnittener Tropfstein", + "block.create.polished_cut_dripstone_slab": "Polierte geschnittene Tropfsteinstufe", + "block.create.polished_cut_dripstone_stairs": "Polierte geschnittene Tropfsteintreppe", + "block.create.polished_cut_dripstone_wall": "Polierte geschnittene Tropfsteinmauer", + "block.create.polished_cut_granite": "Polierter geschnittener Granit", + "block.create.polished_cut_granite_slab": "Polierte geschnittene Granitstufe", + "block.create.polished_cut_granite_stairs": "Polierte geschnittene Granittreppe", + "block.create.polished_cut_granite_wall": "Polierte geschnittene Granitmauer", + "block.create.polished_cut_limestone": "Polierter geschnittener Kalkstein", + "block.create.polished_cut_limestone_slab": "Polierte geschnittene Kalksteinstufe", + "block.create.polished_cut_limestone_stairs": "Polierte geschnittene Kalksteintreppe", + "block.create.polished_cut_limestone_wall": "Polierte geschnittene Kalksteinmauer", + "block.create.polished_cut_ochrum": "Poliertes geschnittenes Ockrum", + "block.create.polished_cut_ochrum_slab": "Polierte geschnittene Ockrumstufe", + "block.create.polished_cut_ochrum_stairs": "Polierte geschnittene Ockrumtreppe", + "block.create.polished_cut_ochrum_wall": "Polierte geschnittene Ockrummauer", + "block.create.polished_cut_scorchia": "Poliertes geschnittenes Scorchia", + "block.create.polished_cut_scorchia_slab": "Polierte geschnittene Scorchiastufe", + "block.create.polished_cut_scorchia_stairs": "Polierte geschnittene Scorchiatreppe", + "block.create.polished_cut_scorchia_wall": "Polierte geschnittene Scorchiamauer", + "block.create.polished_cut_scoria": "Polierte geschnittene Schlacke", + "block.create.polished_cut_scoria_slab": "Polierte geschnittene Schlackenstufe", + "block.create.polished_cut_scoria_stairs": "Polierte geschnittene Schlackentreppe", + "block.create.polished_cut_scoria_wall": "Polierte geschnittene Schlackenmauer", + "block.create.polished_cut_tuff": "Polierter geschnittener Tuffstein", + "block.create.polished_cut_tuff_slab": "Polierte geschnittene Tuffsteinstufe", + "block.create.polished_cut_tuff_stairs": "Polierte geschnittene Tuffsteintreppe", + "block.create.polished_cut_tuff_wall": "Polierte geschnittene Tuffsteinmauer", + "block.create.polished_cut_veridium": "Poliertes geschnittenes Veridium", + "block.create.polished_cut_veridium_slab": "Polierte geschnittene Veridiumstufe", + "block.create.polished_cut_veridium_stairs": "Polierte geschnittene Veridiumtreppe", + "block.create.polished_cut_veridium_wall": "Polierte geschnittene Veridiummauer", "block.create.portable_fluid_interface": "Portable Flüssigkeitsschnittstelle", "block.create.portable_storage_interface": "Portable Lagerschnittstelle", "block.create.powered_latch": "RS-Flipflop", "block.create.powered_toggle_latch": "T-Flipflop", "block.create.pulley_magnet": "Rollenmagnet", - "block.create.pulse_extender": "UNLOCALIZED: Pulse Extender", + "block.create.pulse_extender": "Pulsverlängerer", "block.create.pulse_repeater": "Pulsierender Verstärker", - "block.create.purple_nixie_tube": "UNLOCALIZED: Purple Nixie Tube", - "block.create.purple_sail": "Lila Segel", - "block.create.purple_seat": "Lila Sitz", - "block.create.purple_toolbox": "UNLOCALIZED: Purple Toolbox", - "block.create.purple_valve_handle": "Lila Ventilgriff", + "block.create.purple_nixie_tube": "Violette Nixie-Röhre", + "block.create.purple_sail": "Violettes Segel", + "block.create.purple_seat": "Violetter Sitz", + "block.create.purple_toolbox": "Violetter Werkzeugkasten", + "block.create.purple_valve_handle": "Violetter Ventilgriff", "block.create.radial_chassis": "Drehgerüst", - "block.create.raw_zinc_block": "UNLOCALIZED: Block of Raw Zinc", - "block.create.red_nixie_tube": "UNLOCALIZED: Red Nixie Tube", + "block.create.raw_zinc_block": "Rohzinkblock", + "block.create.red_nixie_tube": "Rote Nixie-Röhre", "block.create.red_sail": "Rote Segel", "block.create.red_seat": "Roter Sitz", - "block.create.red_toolbox": "UNLOCALIZED: Red Toolbox", + "block.create.red_toolbox": "Roter Werkzeugkasten", "block.create.red_valve_handle": "Roter Ventilgriff", "block.create.redstone_contact": "Redstone-Kontakt", "block.create.redstone_link": "Redstone-Verbindung", @@ -405,70 +405,70 @@ "block.create.sail_frame": "Segelrahmen", "block.create.schematic_table": "Bauplantisch", "block.create.schematicannon": "Bauplankanone", - "block.create.scorchia": "UNLOCALIZED: Scorchia", - "block.create.scorchia_pillar": "UNLOCALIZED: Scorchia Pillar", + "block.create.scorchia": "Scorchia", + "block.create.scorchia_pillar": "Scorchia-Säule", "block.create.scoria": "Schlacke", "block.create.scoria_pillar": "Schlackensäule", "block.create.secondary_linear_chassis": "Sekundäres Schubgerüst", "block.create.sequenced_gearshift": "Sequenzielle Gangschaltung", "block.create.shadow_steel_casing": "Schattengehäuse", "block.create.shaft": "Welle", - "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": "Kleine Andesitziegelstufe", + "block.create.small_andesite_brick_stairs": "Kleine Andesitziegeltreppe", + "block.create.small_andesite_brick_wall": "Kleine Andesitziegelmauer", + "block.create.small_andesite_bricks": "Kleine Andesitziegelsteine", + "block.create.small_asurine_brick_slab": "Kleine Asurinziegelstufe", + "block.create.small_asurine_brick_stairs": "Kleine Asurinziegeltreppe", + "block.create.small_asurine_brick_wall": "Kleine Asurinziegelmauer", + "block.create.small_asurine_bricks": "Kleine Asurinziegelsteine", + "block.create.small_calcite_brick_slab": "Kleine Kalzitziegelstufe", + "block.create.small_calcite_brick_stairs": "Kleine Kalzitziegeltreppe", + "block.create.small_calcite_brick_wall": "Kleine Kalzitziegelmauer", + "block.create.small_calcite_bricks": "Kleine Kalzitziegelsteine", + "block.create.small_crimsite_brick_slab": "Kleine Karmesitziegelstufe", + "block.create.small_crimsite_brick_stairs": "Kleine Karmesitziegeltreppe", + "block.create.small_crimsite_brick_wall": "Kleine Karmesitziegelmauer", + "block.create.small_crimsite_bricks": "Kleine Karmesitziegelsteine", + "block.create.small_deepslate_brick_slab": "Kleine Tiefenschieferziegelstufe", + "block.create.small_deepslate_brick_stairs": "Kleine Tiefenschieferziegeltreppe", + "block.create.small_deepslate_brick_wall": "Kleine Tiefenschieferziegelmauer", + "block.create.small_deepslate_bricks": "Kleine Tiefenschieferziegelsteine", + "block.create.small_diorite_brick_slab": "Kleine Dioritziegelstufe", + "block.create.small_diorite_brick_stairs": "Kleine Dioritziegeltreppe", + "block.create.small_diorite_brick_wall": "Kleine Dioritziegelmauer", + "block.create.small_diorite_bricks": "Kleine Dioritziegelsteine", + "block.create.small_dripstone_brick_slab": "Kleine Tropfsteinziegelstufe", + "block.create.small_dripstone_brick_stairs": "Kleine Tropfsteinziegeltreppe", + "block.create.small_dripstone_brick_wall": "Kleine Tropfsteinziegelmauer", + "block.create.small_dripstone_bricks": "Kleine Tropfsteinziegelsteine", + "block.create.small_granite_brick_slab": "Kleine Granitziegelstufe", + "block.create.small_granite_brick_stairs": "Kleine Granitziegeltreppe", + "block.create.small_granite_brick_wall": "Kleine Granitziegelmauer", + "block.create.small_granite_bricks": "Kleine Granitziegelsteine", + "block.create.small_limestone_brick_slab": "Kleine Kalksteinziegelstufe", + "block.create.small_limestone_brick_stairs": "Kleine Kalksteinziegeltreppe", + "block.create.small_limestone_brick_wall": "Kleine Kalksteinziegelmauer", + "block.create.small_limestone_bricks": "Kleine Kalksteinziegelsteine", + "block.create.small_ochrum_brick_slab": "Kleine Ockrumziegelstufe", + "block.create.small_ochrum_brick_stairs": "Kleine Ockrumziegeltreppe", + "block.create.small_ochrum_brick_wall": "Kleine Ockrumziegelmauer", + "block.create.small_ochrum_bricks": "Kleine Ockrumziegelsteine", + "block.create.small_scorchia_brick_slab": "Kleine Scorchiaziegelstufe", + "block.create.small_scorchia_brick_stairs": "Kleine Scorchiaziegeltreppe", + "block.create.small_scorchia_brick_wall": "Kleine Scorchiaziegelmauer", + "block.create.small_scorchia_bricks": "Kleine Scorchiaziegelsteine", + "block.create.small_scoria_brick_slab": "Kleine Scoriaziegelstufe", + "block.create.small_scoria_brick_stairs": "Kleine Scoriaziegeltreppe", + "block.create.small_scoria_brick_wall": "Kleine Scoriaziegelmauer", + "block.create.small_scoria_bricks": "Kleine Scoriaziegelsteine", + "block.create.small_tuff_brick_slab": "Kleine Tuffsteinziegelstufe", + "block.create.small_tuff_brick_stairs": "Kleine Tuffsteinziegeltreppe", + "block.create.small_tuff_brick_wall": "Kleine Tuffsteinziegelmauer", + "block.create.small_tuff_bricks": "Kleine Tuffsteinziegelsteine", + "block.create.small_veridium_brick_slab": "Kleine Veridiumziegelstufe", + "block.create.small_veridium_brick_stairs": "Kleine Veridiumziegeltreppe", + "block.create.small_veridium_brick_wall": "Kleine Veridiumziegelmauer", + "block.create.small_veridium_bricks": "Kleine Veridiumziegelsteine", "block.create.smart_chute": "Schlaue Rinne", "block.create.smart_fluid_pipe": "Schlaues Flüssigkeitsrohr", "block.create.speedometer": "Tachometer", @@ -481,68 +481,68 @@ "block.create.stressometer": "Stressometer", "block.create.tiled_glass": "Glasfliesen", "block.create.tiled_glass_pane": "Glasfliesenscheibe", - "block.create.tuff_pillar": "UNLOCALIZED: Tuff Pillar", + "block.create.tuff_pillar": "Tuffstein-Säule", "block.create.turntable": "Drehtisch", - "block.create.veridium": "UNLOCALIZED: Veridium", - "block.create.veridium_pillar": "UNLOCALIZED: Veridium Pillar", + "block.create.veridium": "Veridium", + "block.create.veridium_pillar": "Veridium-Säule", "block.create.vertical_framed_glass": "Vertikal Gerahmtes Glas", "block.create.vertical_framed_glass_pane": "Vertikal Gerahmte Glasscheibe", - "block.create.warped_window": "UNLOCALIZED: Warped Window", - "block.create.warped_window_pane": "UNLOCALIZED: Warped Window Pane", + "block.create.warped_window": "Wirrfenster", + "block.create.warped_window_pane": "Wirrfensterscheibe", "block.create.water_wheel": "Wasserrad", - "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": "Gewachste Kupferschindelstufe", + "block.create.waxed_copper_shingle_stairs": "Gewachste Kupferschindeltreppe", + "block.create.waxed_copper_shingles": "Gewachste Kupferschindel", + "block.create.waxed_copper_tile_slab": "Gewachste Kupferfliesenstufe", + "block.create.waxed_copper_tile_stairs": "Gewachste Kupferfliesentreppe", + "block.create.waxed_copper_tiles": "Gewachste Kupferfliesen", + "block.create.waxed_exposed_copper_shingle_slab": "Gewachste angelaufene Kupferschindelstufe", + "block.create.waxed_exposed_copper_shingle_stairs": "Gewachste angelaufene Kupferschindeltreppe", + "block.create.waxed_exposed_copper_shingles": "Gewachste angelaufene Kupferschindel", + "block.create.waxed_exposed_copper_tile_slab": "Gewachste angelaufene Kupferfliesenstufe", + "block.create.waxed_exposed_copper_tile_stairs": "Gewachste angelaufene Kupferfliesentreppe", + "block.create.waxed_exposed_copper_tiles": "Gewachste angelaufene Kupferfliesen", + "block.create.waxed_oxidized_copper_shingle_slab": "Gewachste oxidierte Kupferschindelstufe", + "block.create.waxed_oxidized_copper_shingle_stairs": "Gewachste oxidierte Kupferschindeltreppe", + "block.create.waxed_oxidized_copper_shingles": "Gewachste oxidierte Kupferschindel", + "block.create.waxed_oxidized_copper_tile_slab": "Gewachste oxidierte Kupferfliesenstufe", + "block.create.waxed_oxidized_copper_tile_stairs": "Gewachste oxidierte Kupferfliesentreppe", + "block.create.waxed_oxidized_copper_tiles": "Gewachste oxidierte Kupferfliesen", + "block.create.waxed_weathered_copper_shingle_slab": "Gewachste verwittere Kupferschindelstufe", + "block.create.waxed_weathered_copper_shingle_stairs": "Gewachste verwitterte Kupferschindeltreppe", + "block.create.waxed_weathered_copper_shingles": "Gewachste verwitterte Kupferschindel", + "block.create.waxed_weathered_copper_tile_slab": "Gewachste verwitterte Kupferfliesenstufe", + "block.create.waxed_weathered_copper_tile_stairs": "Gewachste verwitterte Kupferfliesentreppe", + "block.create.waxed_weathered_copper_tiles": "Gewachste verwitterte Kupferfliesen", + "block.create.weathered_copper_shingle_slab": "Verwitterte Kupferschindelstufe", + "block.create.weathered_copper_shingle_stairs": "Verwitterte Kupferschindeltreppe", + "block.create.weathered_copper_shingles": "Verwitterte Kupferschindel", + "block.create.weathered_copper_tile_slab": "Verwitterte Kupferfliesenstufe", + "block.create.weathered_copper_tile_stairs": "Verwitterte Kupferfliesentreppe", + "block.create.weathered_copper_tiles": "Verwitterte Kupferfliesen", "block.create.weighted_ejector": "Gewichteter Werfer", - "block.create.white_nixie_tube": "UNLOCALIZED: White Nixie Tube", + "block.create.white_nixie_tube": "Weiße Nixie-Röhre", "block.create.white_sail": "Weiße Segel", "block.create.white_seat": "Weißer Sitz", - "block.create.white_toolbox": "UNLOCALIZED: White Toolbox", + "block.create.white_toolbox": "Weißer Werkzeugkasten", "block.create.white_valve_handle": "Weißer Ventilgriff", "block.create.windmill_bearing": "Windmühlenlager", "block.create.wooden_bracket": "Holzhalterung", - "block.create.yellow_nixie_tube": "UNLOCALIZED: Yellow Nixie Tube", + "block.create.yellow_nixie_tube": "Gelbe Nixie-Röhre", "block.create.yellow_sail": "Gelbes Segel", "block.create.yellow_seat": "Gelber Sitz", - "block.create.yellow_toolbox": "UNLOCALIZED: Yellow Toolbox", + "block.create.yellow_toolbox": "Gelber Werkzeugkasten", "block.create.yellow_valve_handle": "Gelber Ventilgriff", "block.create.zinc_block": "Zinkblock", "block.create.zinc_ore": "Zinkerz", - "enchantment.create.capacity": "UNLOCALIZED: Capacity", - "enchantment.create.potato_recovery": "UNLOCALIZED: Potato Recovery", + "enchantment.create.capacity": "Kapazität", + "enchantment.create.potato_recovery": "Kartoffel-Wiederherstellung", "entity.create.contraption": "Vorrichtung", - "entity.create.crafting_blueprint": "UNLOCALIZED: Crafting Blueprint", + "entity.create.crafting_blueprint": "Herstellungsblaupause", "entity.create.gantry_contraption": "Portalkran Vorrichtung", - "entity.create.potato_projectile": "UNLOCALIZED: Potato Projectile", + "entity.create.potato_projectile": "Kartoffel-Projektil", "entity.create.seat": "Sitz", "entity.create.stationary_contraption": "Stationäre Vorrichtung", "entity.create.super_glue": "Superkleber", @@ -560,19 +560,19 @@ "item.create.brass_ingot": "Messingbarren", "item.create.brass_nugget": "Messingklumpen", "item.create.brass_sheet": "Messingblech", - "item.create.builders_tea": "Baumeisters Tee", + "item.create.builders_tea": "Baumeister-Tee", "item.create.chest_minecart_contraption": "Güterloren Vorrichtung", "item.create.chocolate_bucket": "Schokoladeneimer", "item.create.chocolate_glazed_berries": "Schokoladenglasierte Beeren", "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_backtank": "Kupferner Rückentank", + "item.create.copper_backtank_placeable": "Platzierbarer Kupferner Rückentank", "item.create.copper_nugget": "Kupferklumpen", "item.create.copper_sheet": "Kupferblech", "item.create.crafter_slot_cover": "Handwerkseinheit Slot Abdeckung", - "item.create.crafting_blueprint": "UNLOCALIZED: Crafting Blueprint", - "item.create.creative_blaze_cake": "UNLOCALIZED: Creative Blaze Cake", + "item.create.crafting_blueprint": "Herstellungsblaupause", + "item.create.creative_blaze_cake": "Kreativer Lohenkuchen", "item.create.crushed_aluminum_ore": "Zerkleinertes Aluminiumerz", "item.create.crushed_copper_ore": "Zerkleinertes Kupfererz", "item.create.crushed_gold_ore": "Zerkleinertes Golderz", @@ -586,13 +586,13 @@ "item.create.crushed_tin_ore": "Zerkleinertes Zinnerz", "item.create.crushed_uranium_ore": "Zerkleinertes Uranerz", "item.create.crushed_zinc_ore": "Zerkleinertes Zinkerz", - "item.create.diving_boots": "UNLOCALIZED: Diving Boots", - "item.create.diving_helmet": "UNLOCALIZED: Diving Helmet", + "item.create.diving_boots": "Tauchstiefel", + "item.create.diving_helmet": "Tauchhelm", "item.create.dough": "Teig", "item.create.electron_tube": "Elektronenröhre", "item.create.empty_blaze_burner": "Leerer Lohenbrenner", "item.create.empty_schematic": "Leerer Bauplan", - "item.create.experience_nugget": "UNLOCALIZED: Nugget of Experience", + "item.create.experience_nugget": "Erfahrungsklumpen", "item.create.extendo_grip": "Extendo Griff", "item.create.filter": "Filter", "item.create.furnace_minecart_contraption": "Antriebsloren Vorrichtung", @@ -601,19 +601,19 @@ "item.create.handheld_worldshaper": "Geländeformer", "item.create.honey_bucket": "Honigeimer", "item.create.honeyed_apple": "Honigapfel", - "item.create.incomplete_cogwheel": "UNLOCALIZED: Incomplete Cogwheel", - "item.create.incomplete_large_cogwheel": "UNLOCALIZED: Incomplete Large Cogwheel", - "item.create.incomplete_precision_mechanism": "UNLOCALIZED: Incomplete Precision Mechanism", + "item.create.incomplete_cogwheel": "Unfertiges Zahnrad", + "item.create.incomplete_large_cogwheel": "Unfertiges großes Zahnrad", + "item.create.incomplete_precision_mechanism": "Unfertiges Präzisionsgetriebe", "item.create.iron_sheet": "Eisenblech", - "item.create.linked_controller": "UNLOCALIZED: Linked Controller", + "item.create.linked_controller": "Verbundener Kontroller", "item.create.minecart_contraption": "Loren Vorrichtung", "item.create.minecart_coupling": "Lorenkupplung", "item.create.polished_rose_quartz": "Polierter Rosenquarz", - "item.create.potato_cannon": "UNLOCALIZED: Potato Cannon", + "item.create.potato_cannon": "Kartoffelkanone", "item.create.powdered_obsidian": "Pulverisierter Obsidian", - "item.create.precision_mechanism": "UNLOCALIZED: Precision Mechanism", + "item.create.precision_mechanism": "Präzisionsgetriebe", "item.create.propeller": "Propeller", - "item.create.raw_zinc": "UNLOCALIZED: Raw Zinc", + "item.create.raw_zinc": "Rohzink", "item.create.red_sand_paper": "Rotes Schmirgelpapier", "item.create.refined_radiance": "Raffinierter Glanz", "item.create.rose_quartz": "Rosenquarz", @@ -661,12 +661,12 @@ "advancement.create.belt_funnel_kiss.desc": "Lasse zwei an Mechanischen Riemen befestigte Riementrichter sich küssen.", "advancement.create.fan": "Mechanischer Luftbändiger", "advancement.create.fan.desc": "Reite den Luftstrom eines eingeschlossenen Propellers.", - "advancement.create.fan_lava": "geothermische Heizung", + "advancement.create.fan_lava": "Geothermische Heizung", "advancement.create.fan_lava.desc": "Bleibe in einem Luftzug, der Dinge schmilzt, hängen.", "advancement.create.fan_water": "Verrücktes Waschen", "advancement.create.fan_water.desc": "Bleibe in einem Luftzug, der Dinge wäscht, hängen.", "advancement.create.fan_smoke": "Mechanischer Balg", - "advancement.create.fan_smoke.desc": "Bleibe in einem Luftzug, der Items räuchert, hängen.", + "advancement.create.fan_smoke.desc": "Bleibe in einem Luftzug, der Dinge räuchert, hängen.", "advancement.create.wrench": "Komfortabel Einstellen", "advancement.create.wrench.desc": "Stelle einen Schraubenschlüssel her, der beim Bauen von Vorrichtungen hilft. ", "advancement.create.goggles": "Stress-O-Vision", @@ -706,13 +706,13 @@ "advancement.create.mechanical_saw": "Stationäres Hacken", "advancement.create.mechanical_saw.desc": "Plaziere und verwende eine Mechanische Säge.", "advancement.create.basin": "Beckenbetrieb", - "advancement.create.basin.desc": "Stelle ein Behälter auf und versuche Items reinzuwerfen.", + "advancement.create.basin.desc": "Stelle ein Behälter auf und versuche Gegenstände reinzuwerfen.", "advancement.create.mixer": "Misch es zusammen", "advancement.create.mixer.desc": "Plaziere einen mechanischen Mixer über dem Behälter, treibe ihn an und starte mit dem Mixen von Zutaten.", "advancement.create.blaze_burner": "Ein lebender Kamin", "advancement.create.blaze_burner.desc": "Bekomme einen Lohenbrenner.", "advancement.create.compact": "Automatische Verdichtunge", - "advancement.create.compact.desc": "Verwende eine Presse und einen Behälter um ein paar Items zu verdichten.", + "advancement.create.compact.desc": "Verwende eine Presse und einen Behälter um ein paar Gegenstände zu verdichten.", "advancement.create.brass": "Tatsächliche Legierungen", "advancement.create.brass.desc": "Verwende zerkleinertes Kupfererz und zerkleinertes Zinkerz um messing herzustellen.", "advancement.create.brass_casing": "Das Messingzeitalter", @@ -720,13 +720,13 @@ "advancement.create.copper_casing": "Das Kupferzeitalter", "advancement.create.copper_casing.desc": "Verwende Kupferbleche und Holz, um Kupferrahmen herzustellen.", "advancement.create.spout": "Platsch", - "advancement.create.spout.desc": "Schaue einem Flüssigkeitsitem zu, wie es von einem Ausguss gefüllt wird.", + "advancement.create.spout.desc": "Schaue einem Flüssigkeitsgegenstand zu, wie es von einem Ausguss gefüllt wird.", "advancement.create.spout_potion": "Globale Brauerei", "advancement.create.spout_potion.desc": "Schaue einem Ausguss zu, wie er eine Flasche mit einem Trank füllt.", "advancement.create.chocolate": "Eine Welt der Fantasie", "advancement.create.chocolate.desc": "Bekomme einen Schokoladeneimer", "advancement.create.item_drain": "Entwässerung", - "advancement.create.item_drain.desc": "Schaue einem mit Flüssigkeit gefülltem Item zu, wie es in einem Abfluss getrocknet wird.", + "advancement.create.item_drain.desc": "Schaue einem mit Flüssigkeit gefülltem Gegenstand zu, wie es in einem Abfluss getrocknet wird.", "advancement.create.chained_item_drain": "Lass es rollen!", "advancement.create.chained_item_drain.desc": "Schaue einem Gegenstand zu, wie er über mehrere verbundene Abflüsse rollt.", "advancement.create.glass_pipe": "Flussspion", @@ -744,41 +744,41 @@ "advancement.create.infinite_chocolate": "In Fantasie ertrinken", "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.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.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 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.", - "advancement.create.mechanical_arm": "UNLOCALIZED: Busy Hands!", - "advancement.create.mechanical_arm.desc": "UNLOCALIZED: Craft a Mechanical Arm, select in- and outputs, place it down and give it power; then watch as it does all the work for you.", - "advancement.create.musical_arm": "UNLOCALIZED: Play Me My Theme Tune!", - "advancement.create.musical_arm.desc": "UNLOCALIZED: Watch a Mechanical Arm operate your Jukebox.", - "advancement.create.arm_many_targets": "UNLOCALIZED: Organize-o-Tron", - "advancement.create.arm_many_targets.desc": "UNLOCALIZED: Program a Mechanical Arm with ten or more output locations.", - "advancement.create.arm_blaze_burner": "UNLOCALIZED: Combust-o-Tron", - "advancement.create.arm_blaze_burner.desc": "UNLOCALIZED: Instruct a Mechanical Arm to feed your Blaze Burner.", - "advancement.create.fist_bump": "UNLOCALIZED: Pound It, Bro!", - "advancement.create.fist_bump.desc": "UNLOCALIZED: Make two Deployers fist-bump.", - "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.wand_of_symmetry": "UNLOCALIZED: Radiant Mirrors", - "advancement.create.wand_of_symmetry.desc": "UNLOCALIZED: Craft a Staff of Symmetry.", + "advancement.create.crafter.desc": "Platziere und aktiviere ein paar Mechanische Handwerkseinheiten.", + "advancement.create.clockwork_bearing": "Uhr-Apparat", + "advancement.create.clockwork_bearing.desc": "Montiere eine Struktur auf einem Uhrwerk-Lager.", + "advancement.create.nixie_tube": "Ein Zeichen von Stil", + "advancement.create.nixie_tube.desc": "Erhalte und platziere ein Paar Nixie-Röhren.", + "advancement.create.deployer": "Stupse, platziere und attackiere!", + "advancement.create.deployer.desc": "Platziere und betreibe ein Einsatzgerät, die perfekte Reflektion deiner selbst.", + "advancement.create.speed_controller": "Ingenieure hassen ihn!", + "advancement.create.speed_controller.desc": "Platziere einen Rotationsgeschwindigkeitsregler, das ultimative Gerät, um Zahnräder zu ändern.", + "advancement.create.flywheel": "Herz der Fabrik", + "advancement.create.flywheel.desc": "Verbinde einen Ofenmotor erfolgreich mit einem Schwungrad.", + "advancement.create.overstress_flywheel": "Hohe Stresslevel", + "advancement.create.overstress_flywheel.desc": "Überstresse einen Ofenmotor.", + "advancement.create.precision_mechanism": "Komplexe Kuriositäten", + "advancement.create.precision_mechanism.desc": "Montiere ein Präzisionsgetriebe.", + "advancement.create.mechanical_arm": "Beschäftigte Hände!", + "advancement.create.mechanical_arm.desc": "Stelle einen mechanischen Arm her, wähle Ein- und Ausgang, platziere ihn und gib ihm Energie; beobachte dann, wie es für dich all die Arbeit macht.", + "advancement.create.musical_arm": "Spiel mir meine Erkennungsmelodie!", + "advancement.create.musical_arm.desc": "Beobachte einen mechanischen Arm dabei, wie er einen Plattenspieler bedient.", + "advancement.create.arm_many_targets": "Organisiertron", + "advancement.create.arm_many_targets.desc": "Programmiere einen mechanischen Arm so, dass er zehn oder mehr Ausgänge hat.", + "advancement.create.arm_blaze_burner": "Verbrennertron", + "advancement.create.arm_blaze_burner.desc": "Weise einen mechanischen Arm an, einen Lohenbrenner zu befeuern.", + "advancement.create.fist_bump": "Verstampf es, Bro!", + "advancement.create.fist_bump.desc": "Lass zwei Einsatzgeräte aufeinander treffen.", + "advancement.create.crushing_wheel": "Ein gigantisches Paar", + "advancement.create.crushing_wheel.desc": "Stelle Mahlwerkräder her, um mehr Materialien effizienter zu zermahlen.", + "advancement.create.blaze_cake": "Zuckerrausch", + "advancement.create.blaze_cake.desc": "Backe deinem Lohenbrenner einen speziellen Kuchen.", + "advancement.create.wand_of_symmetry": "Strahlende Spiegel", + "advancement.create.wand_of_symmetry.desc": "Stelle einen Symmetriestab her.", "advancement.create.extendo_grip": "Boioioing!", "advancement.create.extendo_grip.desc": "Beschaffe einen Extendo Griff.", - "advancement.create.potato_cannon": "UNLOCALIZED: Fwoomp!", - "advancement.create.potato_cannon.desc": "UNLOCALIZED: Defeat an enemy with your Potato Cannon.", + "advancement.create.potato_cannon": "Fwump!", + "advancement.create.potato_cannon.desc": "Besiege einen Gegner mit deiner Kartoffelkanone.", "advancement.create.dual_extendo_grip": "Ultimatives Boing-Zeitalter", "advancement.create.dual_extendo_grip.desc": "Schwinge zwei Extendo Griffe gleichzeitig für eine übermenschliche Reichweite.", "advancement.create.eob": "Ende der Beta", @@ -791,30 +791,30 @@ "itemGroup.create.palettes": "Create Paletten", "death.attack.create.crush": "%1$s stolperte in ein Mahlwerk", - "death.attack.create.crush.player": "UNLOCALIZED: %1$s was thrown into Crushing Wheels by %2$s", + "death.attack.create.crush.player": "%1$s wurde von %2$s in ein Mahlwerk gestoßen", "death.attack.create.fan_fire": "%1$s hat heiße Luft eingeatmet", - "death.attack.create.fan_fire.player": "UNLOCALIZED: %1$s was thrown into a smoker by %2$s", + "death.attack.create.fan_fire.player": "%1$s wurde von %2$s in einen Räucherofen gestoßen", "death.attack.create.fan_lava": "%1$s wurde von Lava verweht", - "death.attack.create.fan_lava.player": "UNLOCALIZED: %1$s was thrown into a smelter by %2$s", + "death.attack.create.fan_lava.player": "%1$s wurde von %2$s in einen Schmelzer geworfen", "death.attack.create.mechanical_drill": "%1$s wurde von einem Bohrer durchlöchert", - "death.attack.create.mechanical_drill.player": "UNLOCALIZED: %1$s was thrown in front of a Drill by %2$s", + "death.attack.create.mechanical_drill.player": "%1$s wurde von %2$s vor einen Bohrer gestoßen", "death.attack.create.mechanical_saw": "%1$s wurde zersägt", - "death.attack.create.mechanical_saw.player": "UNLOCALIZED: %1$s was thrown into a Saw by %2$s", - "death.attack.create.potato_cannon": "UNLOCALIZED: %1$s was shot by %2$s's Potato Cannon", - "death.attack.create.potato_cannon.item": "UNLOCALIZED: %1$s was shot by %2$s using %3$s", + "death.attack.create.mechanical_saw.player": "%1$s wurde von %2$s in eine Säge gestoßen", + "death.attack.create.potato_cannon": "%1$s wurde von %2$s's Kartoffelkanone erschossen", + "death.attack.create.potato_cannon.item": "%1$s wurde von %2$s's %3$s erschossen", "death.attack.create.cuckoo_clock_explosion": "%1$s wurde durch eine falsche Kuckucksuhr gesprengt", - "death.attack.create.cuckoo_clock_explosion.player": "UNLOCALIZED: %1$s was blown up by tampered cuckoo clock", + "death.attack.create.cuckoo_clock_explosion.player": "%1$s wurde von einer manipulierten Kuckucksuhr in die Luft gejagt", "create.block.deployer.damage_source_name": "einem Finger", "create.block.cart_assembler.invalid": "Platziere deinen Lorenmonteur auf einer Schiene.", - "create.menu.return": "UNLOCALIZED: Return to Menu", - "create.menu.configure": "UNLOCALIZED: Configure...", - "create.menu.ponder_index": "UNLOCALIZED: Ponder Index", - "create.menu.only_ingame": "UNLOCALIZED: Available in the Pause Menu", - "create.menu.project_page": "UNLOCALIZED: Project Page", - "create.menu.report_bugs": "UNLOCALIZED: Report Issues", - "create.menu.support": "UNLOCALIZED: Support Us", + "create.menu.return": "Zurück zum vorherigen Menü", + "create.menu.configure": "Konfigurieren...", + "create.menu.ponder_index": "Ponder-Verzeichnis", + "create.menu.only_ingame": "Im Pause-Menü verfügbar", + "create.menu.project_page": "Projektseite", + "create.menu.report_bugs": "Fehler melden", + "create.menu.support": "Unterstütze uns", "create.recipe.crushing": "Mahlen (Mahlwerk)", "create.recipe.milling": "Mahlen (Mahlstein)", @@ -822,13 +822,13 @@ "create.recipe.fan_washing.fan": "Propeller hinter fließendem Wasser", "create.recipe.fan_smoking": "Sammelräuchern", "create.recipe.fan_smoking.fan": "Propeller hinter Feuer", - "create.recipe.fan_haunting": "UNLOCALIZED: Bulk Haunting", - "create.recipe.fan_haunting.fan": "UNLOCALIZED: Fan behind Soul Fire", + "create.recipe.fan_haunting": "Sammelspuken", + "create.recipe.fan_haunting.fan": "Propeller hinter Seelenfeuer", "create.recipe.fan_blasting": "Sammelschmelzen", "create.recipe.fan_blasting.fan": "Propeller hinter Lava", "create.recipe.pressing": "Mechanische Presse", "create.recipe.mixing": "Mixen", - "create.recipe.deploying": "UNLOCALIZED: Deploying", + "create.recipe.deploying": "Einsetzen", "create.recipe.automatic_shapeless": "Automatisiertes Formloses Bauen", "create.recipe.automatic_brewing": "Automatisiertes Brauen", "create.recipe.packing": "Komprimieren", @@ -842,18 +842,18 @@ "create.recipe.mystery_conversion": "Mysteriöse Konvertierung", "create.recipe.spout_filling": "Befüllung per Ausguss", "create.recipe.draining": "Gegenstandsablassung", - "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.sequenced_assembly": "Sequentielles Bauen", + "create.recipe.assembly.next": "Danach: %1$s", + "create.recipe.assembly.step": "Schritt %1$s:", + "create.recipe.assembly.progress": "Fortschritt: %1$s/%2$s", + "create.recipe.assembly.pressing": "Verarbeite in einer Presse", + "create.recipe.assembly.spout_filling_fluid": "Gieße %1$s aus", + "create.recipe.assembly.deploying_item": "Setze %1$s ein", + "create.recipe.assembly.cutting": "Zerteile mit einer Säge", + "create.recipe.assembly.repeat": "Wiederhole die Sequenz %1$s mal", + "create.recipe.assembly.junk": "Zufälliges Nebenprodukt", "create.recipe.processing.chance": "Chance: %1$s%%", - "create.recipe.deploying.not_consumed": "UNLOCALIZED: Not Consumed", + "create.recipe.deploying.not_consumed": "Nicht verbraucht", "create.recipe.heat_requirement.none": "Keine Hitze benötigt", "create.recipe.heat_requirement.heated": "Wenig Hitze benötigt", "create.recipe.heat_requirement.superheated": "Viel Hitze benötigt", @@ -882,7 +882,7 @@ "create.action.discard": "Löschen", "create.keyinfo.toolmenu": "Werkzeugmenü", - "create.keyinfo.toolbelt": "UNLOCALIZED: Access Nearby Toolboxes", + "create.keyinfo.toolbelt": "Erreiche naheliegende Werkzeugkästen", "create.keyinfo.scrollup": "Simuliere Mausrad hoch (In der Welt)", "create.keyinfo.scrolldown": "Simuliere Mausrad runter (In der Welt)", @@ -894,11 +894,11 @@ "create.gui.toolmenu.focusKey": "Halte [%1$s] zum Fokussieren", "create.gui.toolmenu.cycle": "[Mausrad] zum Wechseln", - "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.toolbox.unequip": "Entfernen: %1$s", + "create.toolbox.outOfRange": "Werkzeugkasten des gehaltenen Gegenstands nicht in Reichweite", + "create.toolbox.detach": "Verfolgung stoppen und Gegenstand behalten", + "create.toolbox.depositAll": "Lege Gegenstände in nahegelegenen Werkzeugkasten zurück", + "create.toolbox.depositBox": "Lege Gegenstand in Werkzeugkasten zurück", "create.gui.symmetryWand.mirrorType": "Spiegeln", "create.gui.symmetryWand.orientation": "Orientierung", @@ -914,15 +914,15 @@ "create.orientation.alongX": "Entlang X", "create.gui.terrainzapper.title": "Tragbarer Geländeformer", - "create.gui.terrainzapper.searchDiagonal": "UNLOCALIZED: Follow Diagonals", - "create.gui.terrainzapper.searchFuzzy": "UNLOCALIZED: Ignore Material Borders", - "create.gui.terrainzapper.patternSection": "UNLOCALIZED: Pattern", - "create.gui.terrainzapper.pattern.solid": "UNLOCALIZED: Solid", - "create.gui.terrainzapper.pattern.checkered": "UNLOCALIZED: Checkerboard", - "create.gui.terrainzapper.pattern.inversecheckered": "UNLOCALIZED: Inverted Checkerboard", - "create.gui.terrainzapper.pattern.chance25": "UNLOCALIZED: 25% Roll", - "create.gui.terrainzapper.pattern.chance50": "UNLOCALIZED: 50% Roll", - "create.gui.terrainzapper.pattern.chance75": "UNLOCALIZED: 75% Roll", + "create.gui.terrainzapper.searchDiagonal": "Folge Diagonalen", + "create.gui.terrainzapper.searchFuzzy": "Ignoriere Kantenmaterial", + "create.gui.terrainzapper.patternSection": "Muster", + "create.gui.terrainzapper.pattern.solid": "Ausgefüllt", + "create.gui.terrainzapper.pattern.checkered": "Schachbrett", + "create.gui.terrainzapper.pattern.inversecheckered": "Invertiertes Schachbrett", + "create.gui.terrainzapper.pattern.chance25": "25% ausgefüllt", + "create.gui.terrainzapper.pattern.chance50": "50% ausgefüllt", + "create.gui.terrainzapper.pattern.chance75": "75% ausgefüllt", "create.gui.terrainzapper.placement": "Platzierung", "create.gui.terrainzapper.placement.merged": "Zusammengeführt", "create.gui.terrainzapper.placement.attached": "Angefügt", @@ -931,8 +931,8 @@ "create.gui.terrainzapper.brush.cuboid": "Quader", "create.gui.terrainzapper.brush.sphere": "Kugel", "create.gui.terrainzapper.brush.cylinder": "Zylinder", - "create.gui.terrainzapper.brush.surface": "UNLOCALIZED: Surface", - "create.gui.terrainzapper.brush.cluster": "UNLOCALIZED: Cluster", + "create.gui.terrainzapper.brush.surface": "Fläche", + "create.gui.terrainzapper.brush.cluster": "Haufen", "create.gui.terrainzapper.tool": "Werkzeug", "create.gui.terrainzapper.tool.fill": "Füllen", "create.gui.terrainzapper.tool.place": "Platzieren", @@ -942,8 +942,8 @@ "create.gui.terrainzapper.tool.flatten": "Abflachen", "create.terrainzapper.shiftRightClickToSet": "Shift-Rechts-Klick um eine Form auszuwählen", - "create.terrainzapper.usingBlock": "UNLOCALIZED: Using: %1$s", - "create.terrainzapper.leftClickToSet": "UNLOCALIZED: Left-Click a Block to set Material", + "create.terrainzapper.usingBlock": "Nutze: %1$s", + "create.terrainzapper.leftClickToSet": "Linksklicke einen Block, um ein Material auszuwählen", "create.minecart_coupling.two_couplings_max": "Jede Lore kann nicht mehr als zwei Kupplungen haben", "create.minecart_coupling.unloaded": "Teile des Zuges scheinen in nicht geladenen Chunks zu sein", @@ -1125,7 +1125,7 @@ "create.schematicannon.status.skipping": "Überspringen", "create.schematicannon.status.missingBlock": "Fehlender Block:", "create.schematicannon.status.placing": "Platzieren", - "create.schematicannon.status.clearing": "UNLOCALIZED: Clearing Blocks", + "create.schematicannon.status.clearing": "Blöcke löschen", "create.schematicannon.status.schematicInvalid": "Bauplan ungültig", "create.schematicannon.status.schematicNotPlaced": "Bauplan nicht positioniert", "create.schematicannon.status.schematicExpired": "Bauplandatei abgelaufen", @@ -1146,14 +1146,14 @@ "create.item_attributes.placeable.inverted": "ist nicht plazierbar", "create.item_attributes.consumable": "kann man essen", "create.item_attributes.consumable.inverted": "kann man nicht essen", - "create.item_attributes.fluid_container": "UNLOCALIZED: can store fluids", - "create.item_attributes.fluid_container.inverted": "UNLOCALIZED: cannot store fluids", + "create.item_attributes.fluid_container": "kann Flüssigkeiten speichern", + "create.item_attributes.fluid_container.inverted": "kann Flüssigkeiten nicht speichern", "create.item_attributes.enchanted": "ist verzaubert", "create.item_attributes.enchanted.inverted": "ist nicht verzaubert", "create.item_attributes.max_enchanted": "ist mit dem maximalen Level verzaubert", "create.item_attributes.max_enchanted.inverted": "ist nicht mit dem maximalen Level verzaubert", - "create.item_attributes.renamed": "UNLOCALIZED: has a custom name", - "create.item_attributes.renamed.inverted": "UNLOCALIZED: does not have a custom name", + "create.item_attributes.renamed": "hat einen benutzerdefinierten Namen", + "create.item_attributes.renamed.inverted": "hat keinen benutzerdefinierten Namen", "create.item_attributes.damaged": "ist beschädigt", "create.item_attributes.damaged.inverted": "ist nicht beschädigt", "create.item_attributes.badly_damaged": "ist stark beschädigt", @@ -1166,8 +1166,8 @@ "create.item_attributes.furnace_fuel.inverted": "ist nicht Brennstoff", "create.item_attributes.washable": "kann gewaschen werden", "create.item_attributes.washable.inverted": "kann nicht gewaschen werden", - "create.item_attributes.hauntable": "UNLOCALIZED: can be Haunted", - "create.item_attributes.hauntable.inverted": "UNLOCALIZED: cannot be Haunted", + "create.item_attributes.hauntable": "kann gespenstisch sein", + "create.item_attributes.hauntable.inverted": "kann nicht gespenstisch sein", "create.item_attributes.crushable": "kann zerkleinert werden", "create.item_attributes.crushable.inverted": "kann nicht zerkleinert werden", "create.item_attributes.smeltable": "kann geschmolzen werden", @@ -1178,9 +1178,9 @@ "create.item_attributes.blastable.inverted": "ist nicht im Schmelzofen schmelzbar", "create.item_attributes.shulker_level": "UNLOCALIZED: is shulker %1$s", "create.item_attributes.shulker_level.inverted": "UNLOCALIZED: is shulker not %1$s", - "create.item_attributes.shulker_level.full": "UNLOCALIZED: full", - "create.item_attributes.shulker_level.empty": "UNLOCALIZED: empty", - "create.item_attributes.shulker_level.partial": "UNLOCALIZED: partially filled", + "create.item_attributes.shulker_level.full": "voll", + "create.item_attributes.shulker_level.empty": "leer", + "create.item_attributes.shulker_level.partial": "teilweise gefüllt", "create.item_attributes.in_tag": "ist mit %1$s makiert", "create.item_attributes.in_tag.inverted": "ist nicht mit %1$s markoiert", "create.item_attributes.in_item_group": "ist in der Gruppe '%1$s'", @@ -1232,7 +1232,7 @@ "create.tooltip.keyCtrl": "Strg", "create.tooltip.speedRequirement": "Geschwindigkeitsanforderung: %1$s", "create.tooltip.speedRequirement.none": "Keine", - "create.tooltip.speedRequirement.slow": "UNLOCALIZED: Slow", + "create.tooltip.speedRequirement.slow": "Langsam", "create.tooltip.speedRequirement.medium": "Moderat", "create.tooltip.speedRequirement.fast": "Schnell", "create.tooltip.stressImpact": "Kinetische Belastungsauswirkung: %1$s", @@ -1281,27 +1281,27 @@ "create.tooltip.chute.fans_pull_up": "Propeller ziehen von oberhalb", "create.tooltip.chute.fans_pull_down": "Propeller ziehen von unterhalb", "create.tooltip.chute.contains": "Enthält: %1$s x%2$s", - "create.tooltip.brass_tunnel.contains": "UNLOCALIZED: Currently distributing:", - "create.tooltip.brass_tunnel.contains_entry": "UNLOCALIZED: > %1$s x%2$s", - "create.tooltip.brass_tunnel.retrieve": "UNLOCALIZED: Right-Click to retrieve", + "create.tooltip.brass_tunnel.contains": "Verteilt derzeit:", + "create.tooltip.brass_tunnel.contains_entry": "> %1$s x%2$s", + "create.tooltip.brass_tunnel.retrieve": "Rechtsklicken, um zu entnehmen", - "create.linked_controller.bind_mode": "UNLOCALIZED: Bind mode active", - "create.linked_controller.press_keybind": "UNLOCALIZED: Press %1$s, %2$s, %3$s, %4$s, %5$s or %6$s, to bind this frequency to the respective key", - "create.linked_controller.key_bound": "UNLOCALIZED: Frequency bound to %1$s", - "create.linked_controller.frequency_slot_1": "UNLOCALIZED: Keybind: %1$s, Freq. #1", - "create.linked_controller.frequency_slot_2": "UNLOCALIZED: Keybind: %1$s, Freq. #2", + "create.linked_controller.bind_mode": "Bindungsmodus aktiv", + "create.linked_controller.press_keybind": "Drücke %1$s, %2$s, %3$s, %4$s, %5$s oder %6$s, um diese Frequenz zum zugehörigen Schlüssel zu binden", + "create.linked_controller.key_bound": "Frequenz wurde an %1$s gebunden", + "create.linked_controller.frequency_slot_1": "Taste: %1$s, Freq. #1", + "create.linked_controller.frequency_slot_2": "Taste: %1$s, Freq. #2", - "create.crafting_blueprint.crafting_slot": "UNLOCALIZED: Ingredient Slot", - "create.crafting_blueprint.filter_items_viable": "UNLOCALIZED: Advanced filter items are viable", - "create.crafting_blueprint.display_slot": "UNLOCALIZED: Display Slot", - "create.crafting_blueprint.inferred": "UNLOCALIZED: Inferred from recipe", - "create.crafting_blueprint.manually_assigned": "UNLOCALIZED: Manually assigned", - "create.crafting_blueprint.secondary_display_slot": "UNLOCALIZED: Secondary Display Slot", - "create.crafting_blueprint.optional": "UNLOCALIZED: Optional", + "create.crafting_blueprint.crafting_slot": "Zutatenplatz", + "create.crafting_blueprint.filter_items_viable": "Gegenstände des erweiterten Filters sind tragfähig", + "create.crafting_blueprint.display_slot": "Anzeigeplatz", + "create.crafting_blueprint.inferred": "Abgeleitet vom Rezept", + "create.crafting_blueprint.manually_assigned": "Manuell zugewiesen", + "create.crafting_blueprint.secondary_display_slot": "Sekundärer Anzeigeplatz", + "create.crafting_blueprint.optional": "Optional", - "create.potato_cannon.ammo.attack_damage": "UNLOCALIZED: %1$s Attack Damage", - "create.potato_cannon.ammo.reload_ticks": "UNLOCALIZED: %1$s Reload Ticks", - "create.potato_cannon.ammo.knockback": "UNLOCALIZED: %1$s Knockback", + "create.potato_cannon.ammo.attack_damage": "%1$s Angriffsschaden", + "create.potato_cannon.ammo.reload_ticks": "%1$s Neulade-Ticks", + "create.potato_cannon.ammo.knockback": "%1$s Rückstoß", "create.hint.hose_pulley.title": "Endlose Versorgung", "create.hint.hose_pulley": "Das angewählte Gewässer wird als unendlich betrachtet.", @@ -1329,48 +1329,48 @@ "create.command.killTPSCommand.status.usage.1": "[Create]: Benutze /killtps start um den Server Tick künstlich zu verlangsamen", "create.command.killTPSCommand.argument.tickTime": "tickTime", - "create.contraption.minecart_contraption_too_big": "UNLOCALIZED: This Cart Contraption seems too big to pick up", - "create.contraption.minecart_contraption_illegal_pickup": "UNLOCALIZED: A mystical force is binding this Cart Contraption to the world", + "create.contraption.minecart_contraption_too_big": "Dieses Lorengespann ist zu groß, um es aufzusammeln", + "create.contraption.minecart_contraption_illegal_pickup": "Eine mysteriöse Kraft hält dieses Lorengespann in dieser Welt", "_": "->------------------------] Subtitles [------------------------<-", - "create.subtitle.contraption_disassemble": "UNLOCALIZED: Contraption stops", - "create.subtitle.peculiar_bell_use": "UNLOCALIZED: Peculiar Bell tolls", - "create.subtitle.mixing": "UNLOCALIZED: Mixing noises", - "create.subtitle.mechanical_press_activation_belt": "UNLOCALIZED: Mechanical Press bonks", - "create.subtitle.fwoomp": "UNLOCALIZED: Potato Launcher fwoomps", - "create.subtitle.worldshaper_place": "UNLOCALIZED: Worldshaper zaps", - "create.subtitle.sanding_long": "UNLOCALIZED: Sanding noises", - "create.subtitle.crushing_1": "UNLOCALIZED: Crushing noises", - "create.subtitle.depot_slide": "UNLOCALIZED: Item slides", - "create.subtitle.saw_activate_stone": "UNLOCALIZED: Mechanical Saw activates", + "create.subtitle.contraption_disassemble": "Apparat stoppt", + "create.subtitle.peculiar_bell_use": "Eigenartige Glockenschläge", + "create.subtitle.mixing": "Mix-Geräusche", + "create.subtitle.mechanical_press_activation_belt": "Mechanische Presse klingt", + "create.subtitle.fwoomp": "Kartoffel-Kanone macht fwumps", + "create.subtitle.worldshaper_place": "Geländeformer zippt", + "create.subtitle.sanding_long": "Schleifgeräusche", + "create.subtitle.crushing_1": "Zermahlgeräusche", + "create.subtitle.depot_slide": "Gegenstand gleitet", + "create.subtitle.saw_activate_stone": "Mechanische Säge wird aktiviert", "create.subtitle.blaze_munch": "Lohe kaut glücklich", - "create.subtitle.funnel_flap": "UNLOCALIZED: Funnel flaps", + "create.subtitle.funnel_flap": "Klappe klappert", "create.subtitle.schematicannon_finish": "Bauplankanone endet", - "create.subtitle.haunted_bell_use": "UNLOCALIZED: Haunted Bell tolls", - "create.subtitle.scroll_value": "UNLOCALIZED: Scroll-input clicks", - "create.subtitle.crafter_craft": "UNLOCALIZED: Crafter crafts", - "create.subtitle.controller_put": "UNLOCALIZED: Controller thumps", - "create.subtitle.cranking": "UNLOCALIZED: Hand Crank turns", - "create.subtitle.wrench_remove": "UNLOCALIZED: Component breaks", - "create.subtitle.sanding_short": "UNLOCALIZED: Sanding noises", - "create.subtitle.cogs": "UNLOCALIZED: Cogwheels rumble", + "create.subtitle.haunted_bell_use": "Spukglocke läutet", + "create.subtitle.scroll_value": "Klick bei der Bildlauf-Eingabe", + "create.subtitle.crafter_craft": "Hersteller stellt her", + "create.subtitle.controller_put": "Kontroller stößt auf", + "create.subtitle.cranking": "Handkurbel dreht", + "create.subtitle.wrench_remove": "Teil entfernt", + "create.subtitle.sanding_short": "Schleifgeräusche", + "create.subtitle.cogs": "Zahnräder rattern", "create.subtitle.slime_added": "Schleim matscht", - "create.subtitle.wrench_rotate": "UNLOCALIZED: Wrench used", - "create.subtitle.potato_hit": "UNLOCALIZED: Vegetable impacts", - "create.subtitle.saw_activate_wood": "UNLOCALIZED: Mechanical Saw activates", - "create.subtitle.haunted_bell_convert": "UNLOCALIZED: Haunted Bell awakens", - "create.subtitle.deny": "UNLOCALIZED: Declining boop", - "create.subtitle.controller_click": "UNLOCALIZED: Controller clicks", + "create.subtitle.wrench_rotate": "Schraubenschlüssel benutzt", + "create.subtitle.potato_hit": "Gemüse schlägt ein", + "create.subtitle.saw_activate_wood": "Mechanische Säge wird aktiviert", + "create.subtitle.haunted_bell_convert": "Spukglocke erwacht", + "create.subtitle.deny": "Ablehnendes boop", + "create.subtitle.controller_click": "Kontroller klickt", "create.subtitle.schematicannon_launch_block": "Bauplankanone schießt", - "create.subtitle.copper_armor_equip": "UNLOCALIZED: Diving equipment clinks", - "create.subtitle.controller_take": "UNLOCALIZED: Lectern empties", + "create.subtitle.copper_armor_equip": "Taucherausrüstung klirrt", + "create.subtitle.controller_take": "Lesepult geleert", "create.subtitle.mechanical_press_activation": "Mechanische Presse wird aktiviert", - "create.subtitle.contraption_assemble": "UNLOCALIZED: Contraption moves", - "create.subtitle.crafter_click": "UNLOCALIZED: Crafter clicks", - "create.subtitle.depot_plop": "UNLOCALIZED: Item lands", - "create.subtitle.confirm": "UNLOCALIZED: Affirmative ding", + "create.subtitle.contraption_assemble": "Apparat bewegt sich", + "create.subtitle.crafter_click": "Hersteller klickt", + "create.subtitle.depot_plop": "Gegenstand landet", + "create.subtitle.confirm": "Bestätigendes Klick", "_": "->------------------------] Item Descriptions [------------------------<-", @@ -1409,14 +1409,14 @@ "item.create.wand_of_symmetry.tooltip.control3": "R-Klick beim Schleichen", "item.create.wand_of_symmetry.tooltip.action3": "Öffnet das _Konfigurationsmenü_", - "item.create.handheld_worldshaper.tooltip": "UNLOCALIZED: HANDHELD WORLDSHAPER", - "item.create.handheld_worldshaper.tooltip.summary": "UNLOCALIZED: Handy tool for creating _landscapes_ and _terrain features_.", - "item.create.handheld_worldshaper.tooltip.control1": "UNLOCALIZED: L-Click at Block", - "item.create.handheld_worldshaper.tooltip.action1": "UNLOCALIZED: Sets blocks placed by the tool to the targeted block.", - "item.create.handheld_worldshaper.tooltip.control2": "UNLOCALIZED: R-Click at Block", - "item.create.handheld_worldshaper.tooltip.action2": "UNLOCALIZED: Applies the currently selected _Brush_ and _Tool_ at the targeted location.", - "item.create.handheld_worldshaper.tooltip.control3": "UNLOCALIZED: R-Click while Sneaking", - "item.create.handheld_worldshaper.tooltip.action3": "UNLOCALIZED: Opens the _Configuration Interface_", + "item.create.handheld_worldshaper.tooltip": "GELÄNDEFORMER", + "item.create.handheld_worldshaper.tooltip.summary": "Cleveres Werkzeug, um _Landschaften_ und _Geländeformen_ zu erschaffen.", + "item.create.handheld_worldshaper.tooltip.control1": "L-Klick einen Block", + "item.create.handheld_worldshaper.tooltip.action1": "Setzt den ausgewählten Block als Block, welcher vom Werkzeug platziert wird.", + "item.create.handheld_worldshaper.tooltip.control2": "R-Klick einen Block", + "item.create.handheld_worldshaper.tooltip.action2": "Nutzt die ausgewählte _Einstellung_ auf den ausgewählten Block.", + "item.create.handheld_worldshaper.tooltip.control3": "R-Klick beim Schleichen", + "item.create.handheld_worldshaper.tooltip.action3": "Öffnet die _Konfigurationsoberfläche_", "item.create.tree_fertilizer.tooltip": "BAUMDÜNGER", "item.create.tree_fertilizer.tooltip.summary": "Eine Mischung aus Mineralien, die sich für weit verbreitete Baumarten eignet", @@ -1424,32 +1424,32 @@ "item.create.tree_fertilizer.tooltip.behaviour1": "Lässt Bäume unabhängig vom Platz um sie herum wachsen", "item.create.extendo_grip.tooltip": "Extendo Griff", - "item.create.extendo_grip.tooltip.summary": "UNLOCALIZED: Boioioing! Greatly _increases reach distance_ of the wielder. Can be powered with Air Pressure from a _Copper_ _Backtank_", - "item.create.extendo_grip.tooltip.condition1": "UNLOCALIZED: When in Off-Hand", - "item.create.extendo_grip.tooltip.behaviour1": "UNLOCALIZED: Increases _reach distance_ of items used in the _Main-Hand_.", - "item.create.extendo_grip.tooltip.condition2": "UNLOCALIZED: While wearing Copper Backtank", - "item.create.extendo_grip.tooltip.behaviour2": "UNLOCALIZED: _No_ _Durability_ will be used. Instead, _Air_ _pressure_ is drained from the Tank", + "item.create.extendo_grip.tooltip.summary": "Boioioing! _Erweitert die Reichweite_ des Anwenders enorm. Kann mit Luftdruck eines _kupfernen Rückentanks_ betrieben werden.", + "item.create.extendo_grip.tooltip.condition1": "Wenn in der zweiten Hand", + "item.create.extendo_grip.tooltip.behaviour1": "Erweitert die _maximale Reichweite_ von benutzbaren Gegenständen in der Haupthand.", + "item.create.extendo_grip.tooltip.condition2": "Während ein Kupferner Rückentank ausgerüstet ist", + "item.create.extendo_grip.tooltip.behaviour2": "Es wird _keine_ _Haltbarkeit_ verbraucht. Stattdessen wird _Luftdruck_ vom Tank genutzt", - "item.create.potato_cannon.tooltip": "UNLOCALIZED: POTATO CANNON", - "item.create.potato_cannon.tooltip.summary": "UNLOCALIZED: Fwoomp! Launch your home-grown vegetables at your Enemies. Can be powered with Air Pressure from a _Copper_ _Backtank_", - "item.create.potato_cannon.tooltip.condition1": "UNLOCALIZED: When R-Clicked", - "item.create.potato_cannon.tooltip.behaviour1": "UNLOCALIZED: _Shoots_ a suitable item from your _Inventory_.", - "item.create.potato_cannon.tooltip.condition2": "UNLOCALIZED: While wearing Copper Backtank", - "item.create.potato_cannon.tooltip.behaviour2": "UNLOCALIZED: _No_ _Durability_ will be used. Instead, _Air_ _pressure_ is drained from the Tank", + "item.create.potato_cannon.tooltip": "KARTOFFELKANONE", + "item.create.potato_cannon.tooltip.summary": "Fwump! Katapultiere dein selbstgewachsenes Gemüse auf deine Feinde. Kann mit Luftdruck eines _kupfernen Rückentanks_ betrieben werden.", + "item.create.potato_cannon.tooltip.condition1": "Wenn R-Klick", + "item.create.potato_cannon.tooltip.behaviour1": "_Schießt_ einen passenden Gegenstand aus deinem _Inventar_.", + "item.create.potato_cannon.tooltip.condition2": "Während ein Kupferner Rückentank ausgerüstet ist", + "item.create.potato_cannon.tooltip.behaviour2": "Es wird _keine_ _Haltbarkeit_ verbraucht. Stattdessen wird _Luftdruck_ vom Tank genutzt", "item.create.filter.tooltip": "Filter", - "item.create.filter.tooltip.summary": "UNLOCALIZED: _Controls outputs_ and _inputs_ of logistical devices with more _precision_, matching them against a _set of items_ or several _nested filters_.", - "item.create.filter.tooltip.condition1": "UNLOCALIZED: When in filter slot", - "item.create.filter.tooltip.behaviour1": "UNLOCALIZED: _Controls_ item flow according to its _configuration_.", - "item.create.filter.tooltip.condition2": "UNLOCALIZED: When R-Clicked", - "item.create.filter.tooltip.behaviour2": "UNLOCALIZED: Opens the _configuration interface_.", + "item.create.filter.tooltip.summary": "_Kontrolliert den Ausgang_ und _Eingang_ eines logistischen Gerätes mit höherer Genauigkeit und vergleicht ein _Set von Gegenständen_ oder _vernetzten Filtern_.", + "item.create.filter.tooltip.condition1": "Wenn in gefiltertem Anzeigeplatz", + "item.create.filter.tooltip.behaviour1": "_Kontrolliert_ den Gegenstandsfluss basierend auf seiner _Konfiguration_.", + "item.create.filter.tooltip.condition2": "Wenn R-Klick", + "item.create.filter.tooltip.behaviour2": "Öffnet die _Konfigurationsoberfläche_.", "item.create.attribute_filter.tooltip": "Attribut Filter", - "item.create.attribute_filter.tooltip.summary": "UNLOCALIZED: _Controls outputs_ and _inputs_ of logistical devices with more _precision_, matching them against a _set of_ item _attributes_ and _categories_.", - "item.create.attribute_filter.tooltip.condition1": "UNLOCALIZED: When in filter slot", - "item.create.attribute_filter.tooltip.behaviour1": "UNLOCALIZED: _Controls_ item flow according to its _configuration_.", - "item.create.attribute_filter.tooltip.condition2": "UNLOCALIZED: When R-Clicked", - "item.create.attribute_filter.tooltip.behaviour2": "UNLOCALIZED: Opens the _configuration interface_.", + "item.create.attribute_filter.tooltip.summary": "_Kontrolliert den Ausgang_ und _Eingang_ eines logistischen Gerätes mit höherer Genauigkeit und vergleicht ein _Set von Gegenstands-Attributen_ und _-Kategorien_.", + "item.create.attribute_filter.tooltip.condition1": "Wenn in gefiltertem Anzeigeplatz", + "item.create.attribute_filter.tooltip.behaviour1": "_Kontrolliert_ den Gegenstandsfluss basierend auf seiner _Konfiguration_.", + "item.create.attribute_filter.tooltip.condition2": "Wenn R-Klick", + "item.create.attribute_filter.tooltip.behaviour2": "Öffnet die _Konfigurationsoberfläche_.", "item.create.empty_schematic.tooltip": "LEERER BAUPLAN", "item.create.empty_schematic.tooltip.summary": "Wird für die Herstellung und das Schreiben auf dem _Bauplantisch_ verwendet", @@ -1485,138 +1485,138 @@ "block.create.schematic_table.tooltip.behaviour1": "Lädt eine ausgewählte Datei von deinem Bauplan-Ordner hoch", "item.create.goggles.tooltip": "Ingenieursbrille", - "item.create.goggles.tooltip.summary": "UNLOCALIZED: A pair of glasses to augment your vision with useful _kinetic information_.", - "item.create.goggles.tooltip.condition1": "UNLOCALIZED: When worn", - "item.create.goggles.tooltip.behaviour1": "UNLOCALIZED: Shows _colored indicators_ corresponding to the _Speed Level_ of a placed kinetic component as well as _Stress Impact_ and _Capacity_ of individual components.", - "item.create.goggles.tooltip.condition2": "UNLOCALIZED: When looking at gauge", - "item.create.goggles.tooltip.behaviour2": "UNLOCALIZED: Shows detailed information about _Speed_ or _Stress_ of the network to which the gauge is connected.", - "item.create.goggles.tooltip.condition3": "UNLOCALIZED: When looking at fluid containers", - "item.create.goggles.tooltip.behaviour3": "UNLOCALIZED: Shows detailed information about the _Capacity_ of the block and any _Fluids_ stored within.", + "item.create.goggles.tooltip.summary": "Eine Brille, welche _Informationen_ zur _Kinetik_ eines Blocks zeigt.", + "item.create.goggles.tooltip.condition1": "Wenn getragen", + "item.create.goggles.tooltip.behaviour1": "Zeigt _farbige Indikatoren_ basieren auf dem _Geschwindigkeitslevel_ einer platzierten kinetischen Komponente. Auch der _Stresslevel_ und die _Kapazität_ bestimmter Komponenten werden angezeigt.", + "item.create.goggles.tooltip.condition2": "Wenn auf ein Messgerät geschaut wird", + "item.create.goggles.tooltip.behaviour2": "Zeigt detaillierte Informationen über _Geschwindigkeit_ oder _Stress_ des Netzes an, mit dem das Messgerät verbunden ist.", + "item.create.goggles.tooltip.condition3": "Wenn auf einen Flüssigkeitsbehälter geschaut wird", + "item.create.goggles.tooltip.behaviour3": "Zeigt detaillierte Informationen zur _Kapazität_ des Blocks und welche _Flüssigkeit_ darin aufbewahrt wird.", - "item.create.wrench.tooltip": "UNLOCALIZED: WRENCH", - "item.create.wrench.tooltip.summary": "UNLOCALIZED: A useful tool for working on kinetic contraptions. Can be used to _Rotate_, _Dismantle_ and to _Configure_ components.", - "item.create.wrench.tooltip.control1": "UNLOCALIZED: Right-Click a kinetic block", - "item.create.wrench.tooltip.action1": "UNLOCALIZED: _Rotates components_ toward or away from the face with which you interacted.", - "item.create.wrench.tooltip.control2": "UNLOCALIZED: R-Click while Sneaking", - "item.create.wrench.tooltip.action2": "UNLOCALIZED: _Disassembles Kinetic components_ and places them back in _your inventory_.", + "item.create.wrench.tooltip": "SCHRAUBENSCHLÜSSEL", + "item.create.wrench.tooltip.summary": "Ein nützliches Werkzeug, um mit kinetischen Vorrichtungen zu arbeiten. Kann benutzt werden, um Komponenten zu _rotieren_, _zerlegen_ und sie zu _konfigurieren_.", + "item.create.wrench.tooltip.control1": "R-Klick einen kinetischen Block", + "item.create.wrench.tooltip.action1": "_Rotiert Komponenten_ in Richtung oder weg von der Fläche, mit der du mit ihr interagiert hast.", + "item.create.wrench.tooltip.control2": "R-Klick beim Schleichen", + "item.create.wrench.tooltip.action2": "_Nimmt kinetische Komponenten auseinander_ und platziert sie zurück in _dein Inventar_.", - "block.create.nozzle.tooltip": "UNLOCALIZED: NOZZLE", - "block.create.nozzle.tooltip.summary": "UNLOCALIZED: Attach to the front of an _Encased Fan_ to distribute its effect on Entities in _all directions_.", + "block.create.nozzle.tooltip": "DÜSE", + "block.create.nozzle.tooltip.summary": "Wird an der Vorderseite eines _ummantelnden Lüfters_ angebracht, um seine Wirkung auf Entitäten in _alle Richtungen_ zu verteilen.", - "block.create.cuckoo_clock.tooltip": "UNLOCALIZED: CUCKOO CLOCK", - "block.create.cuckoo_clock.tooltip.summary": "UNLOCALIZED: Fine craftsmanship for _decorating_ a space and _keeping track of time_.", - "block.create.cuckoo_clock.tooltip.condition1": "UNLOCALIZED: When Powered by Kinetics", - "block.create.cuckoo_clock.tooltip.behaviour1": "UNLOCALIZED: Shows the _current time_ and plays a tune twice a day. _Activates_ once at _noon_ and at dusk, as soon as _players can sleep_.", + "block.create.cuckoo_clock.tooltip": "KUCKUCKSUHR", + "block.create.cuckoo_clock.tooltip.summary": "Feine Handwerkskunst, um einen Raum zu _dekorieren_ und _die Zeit im Auge zu behalten_.", + "block.create.cuckoo_clock.tooltip.condition1": "Wenn kinetisch angetrieben", + "block.create.cuckoo_clock.tooltip.behaviour1": "Zeigt die _aktuelle Zeit_ und spielt zweimal täglich eine Melodie. Wird einmal _mittags_ und einmal zur _Dämmerung_, sobald _Spieler schlafen können_, aktiviert", "block.create.turntable.tooltip": "DREHTISCH", "block.create.turntable.tooltip.summary": "Wandelt _Rotationsenergie_ in starkes Schwindelgefühl um.", - "block.create.toolbox.tooltip": "UNLOCALIZED: TOOLBOX", - "block.create.toolbox.tooltip.summary": "UNLOCALIZED: Every Inventors' dearest Companion. Conveniently _holds_ a large amount of _8 Different_ item types.", - "block.create.toolbox.tooltip.condition1": "UNLOCALIZED: When Picked Up", - "block.create.toolbox.tooltip.behaviour1": "UNLOCALIZED: _Retains_ Inventory _Contents_.", - "block.create.toolbox.tooltip.condition2": "UNLOCALIZED: When placed in Range", - "block.create.toolbox.tooltip.behaviour2": "UNLOCALIZED: _Nearby_ _Players_ can hold the _Toolbox_ _Keybind_ to access its contents _Remotely_.", - "block.create.toolbox.tooltip.condition3": "UNLOCALIZED: When R-Clicked", - "block.create.toolbox.tooltip.behaviour3": "UNLOCALIZED: Opens the _Container Interface_.", + "block.create.toolbox.tooltip": "WERKZEUGKASTEN", + "block.create.toolbox.tooltip.summary": "Der liebste Begleiter jedes Erfinders. Praktischerweise _behält_ der Werkzeugkasten eine große Menge von _8 verschiedenen_ Gegenstandstypen.", + "block.create.toolbox.tooltip.condition1": "Wenn augehoben", + "block.create.toolbox.tooltip.behaviour1": "Behält _Inhalt_ des _Inventars_.", + "block.create.toolbox.tooltip.condition2": "Wenn in Reichweite platziert", + "block.create.toolbox.tooltip.behaviour2": "_Spieler_ in der _Nähe_ können die _Taste_ für den _Werkzeugkasten_ drücken, um einen Fernzugriff auf den Inhalt zu bekommen.", + "block.create.toolbox.tooltip.condition3": "Wenn R-Klick", + "block.create.toolbox.tooltip.behaviour3": "Öffnet die _Behälteroberfläche_", "block.create.stockpile_switch.tooltip": "VORRATSSENSOR", "block.create.stockpile_switch.tooltip.summary": "Schaltet ein Redstone-Signal ein oder aus, basierend auf der _Speichermenge_ im verbundenen Behälter.", "block.create.stockpile_switch.tooltip.condition1": "Wenn unter dem unteren Limit", "block.create.stockpile_switch.tooltip.behaviour1": "Wird das Redstone-Signal ausgeschaltet.", - "block.create.content_observer.tooltip": "UNLOCALIZED: CONTENT OBSERVER", - "block.create.content_observer.tooltip.summary": "UNLOCALIZED: _Detects Items_ or _Fluids_ inside _containers_, _pipes_ or _conveyors_ matching a configured _filter_.", - "block.create.content_observer.tooltip.condition1": "UNLOCALIZED: When observing a Container", - "block.create.content_observer.tooltip.behaviour1": "UNLOCALIZED: Emits a _Redstone Signal_ while the observed container has _matching_ _content_.", - "block.create.content_observer.tooltip.condition2": "UNLOCALIZED: When observing a Funnel", - "block.create.content_observer.tooltip.behaviour2": "UNLOCALIZED: Emits a _Redstone Pulse_ when a _matching_ Item is _transferred_.", + "block.create.content_observer.tooltip": "INHALTSBEOBACHTER", + "block.create.content_observer.tooltip.summary": "_Erkennt Gegenstände_ oder _Flüssigkeiten_ in einem _Behälter_, einer _Röhre_ oder einem _Fließband_, die zum eingestellten _Filter_ passen.", + "block.create.content_observer.tooltip.condition1": "Bei der Beobachtung eines Containers", + "block.create.content_observer.tooltip.behaviour1": "Gibt einen _Redstone-Puls_ aus, während der beobachtete Behälter _passenden_ _Inhalt_ hat.", + "block.create.content_observer.tooltip.condition2": "Bei der Beobachtung eines Trichters", + "block.create.content_observer.tooltip.behaviour2": "Gibt einen _Redstone-Puls_ aus, wenn ein _passender_ Gegenstand _übertragen_ wird.", "block.create.creative_crate.tooltip": "BAUPLANKANONENMACHER", "block.create.creative_crate.tooltip.summary": "Stellt einen unendlichen Vorrat an Blöcken für benachbarte _Bauplaenkanonen_ bereit.", "block.create.creative_crate.tooltip.condition1": "Wenn Gegenstand in Filter Slot", "block.create.creative_crate.tooltip.behaviour1": "Alles _extrahierende_ von diesem Container wird einen _endlosen Vorrat_ des angegebenen Gegenstands zur Verfügung stellen. In diese Kiste _eingefügte_ Gegenstände werden _entsorgt_.", - "item.create.creative_blaze_cake.tooltip": "UNLOCALIZED: CREATIVE CAKE", - "item.create.creative_blaze_cake.tooltip.summary": "UNLOCALIZED: A very special treat for _Blaze Burners_ that allows _controlling their heat level_. After eating this cake, Blaze Burners will _never run out of fuel_.", - "item.create.creative_blaze_cake.tooltip.condition1": "UNLOCALIZED: R-Click on Blaze Burner", - "item.create.creative_blaze_cake.tooltip.behaviour1": "UNLOCALIZED: _Locks_ the Blaze Burner's heat level. If used again, _cycles_ the Blaze Burner's heat level.", + "item.create.creative_blaze_cake.tooltip": "KREATIVER KUCHEN", + "item.create.creative_blaze_cake.tooltip.summary": "Eine sehr spezielle Behandlung, welche es erlaubt, des _Lohenbrenners_ _Hitzelevel einzustellen_. After eating this cake, Blaze Burners will _never run out of fuel_.", + "item.create.creative_blaze_cake.tooltip.condition1": "R-Klick auf einen _Lohenbrenner_", + "item.create.creative_blaze_cake.tooltip.behaviour1": "_Rastet_ das Hitzelevel des Lohenbrenners _ein_. Wenn nochmal angewandt wird, _zirkuliert_ der Lohenbrenner sein Hitzelevel.", - "block.create.controller_rail.tooltip": "UNLOCALIZED: CONTROLLER RAIL", - "block.create.controller_rail.tooltip.summary": "UNLOCALIZED: A _uni-directional powered rail_ capable of _fine control_ over a minecarts' _movement speed_.", - "block.create.controller_rail.tooltip.condition1": "UNLOCALIZED: When Powered by Redstone", - "block.create.controller_rail.tooltip.behaviour1": "UNLOCALIZED: _Accelerates_ or _Decelerates_ passing _minecarts_ corresponding to the _signal strength_. Propagates redstone power to adjacent controller rails. Powering two controller rails with different strengths will cause tracks between them to interpolate their signal.", + "block.create.controller_rail.tooltip": "STEUERUNGSSCHIENE", + "block.create.controller_rail.tooltip.summary": "Eine _einseitige Antriebsschiene_, welche fähig ist, die _Geschwindigkeit_ von Loren _sehr genau_ einzustellen.", + "block.create.controller_rail.tooltip.condition1": "Wenn mit Redstone aktiviert", + "block.create.controller_rail.tooltip.behaviour1": "_Verschnellert_ oder _verlangsamt_ vorbeifahrende Loren basierend auf der _Signalstärke_. Überträgt Redstone-Energie auf benachbarte Steuerungsschienen. Wenn zwei Steuerungsschienen mit unterschiedlicher Signalstärke versorgt werden, interpolieren die Schienen zwischen ihnen ihr Signal.", - "item.create.sand_paper.tooltip": "UNLOCALIZED: SAND PAPER", - "item.create.sand_paper.tooltip.summary": "UNLOCALIZED: A rough paper that can be used to _polish materials_. Can be automatically applied using the Deployer.", - "item.create.sand_paper.tooltip.condition1": "UNLOCALIZED: When Used", - "item.create.sand_paper.tooltip.behaviour1": "UNLOCALIZED: Applies polish to items held in the _offhand_ or lying on the _floor_ when _looking at them_", + "item.create.sand_paper.tooltip": "SCHMIRGELPAPIER", + "item.create.sand_paper.tooltip.summary": "Ein raues papier, welches benutzt wird, um _Materialien_ zu _polieren_. Kann automatisch von einem Einsatzgerät benutzt werden.", + "item.create.sand_paper.tooltip.condition1": "Wenn benutzt", + "item.create.sand_paper.tooltip.behaviour1": "Gibt den Gegenständen in der _Zweithand_ oder auf dem _Boden_, welches du _anguckst_, eine Politur.", - "item.create.builders_tea.tooltip": "UNLOCALIZED: BUILDERS TEA", - "item.create.builders_tea.tooltip.summary": "UNLOCALIZED: The perfect drink to get the day started- _Motivating_ and _Saturating._", + "item.create.builders_tea.tooltip": "Baumeister-Tee", + "item.create.builders_tea.tooltip.summary": "Das perfekte Getränk, um den Tag zu starten - _Motivierend_ und _sättigend_.", - "item.create.refined_radiance.tooltip": "UNLOCALIZED: REFINED RADIANCE", - "item.create.refined_radiance.tooltip.summary": "UNLOCALIZED: A Chromatic material forged from _absorbed light_.", - "item.create.refined_radiance.tooltip.condition1": "UNLOCALIZED: Work In Progress", - "item.create.refined_radiance.tooltip.behaviour1": "UNLOCALIZED: Usages for this material will be available in a future release.", + "item.create.refined_radiance.tooltip": "RAFFINIERTER GLANZ", + "item.create.refined_radiance.tooltip.summary": "Ein chromatisches Material, das aus _absorbiertem Licht_ geschmiedet wird.", + "item.create.refined_radiance.tooltip.condition1": "In Arbeit", + "item.create.refined_radiance.tooltip.behaviour1": "Verwendungen für dieses Material werden in zukünftigen Versionen verfügbar sein.", - "item.create.shadow_steel.tooltip": "UNLOCALIZED: SHADOW STEEL", - "item.create.shadow_steel.tooltip.summary": "UNLOCALIZED: A Chromatic material forged _in the void_.", - "item.create.shadow_steel.tooltip.condition1": "UNLOCALIZED: Work In Progress", - "item.create.shadow_steel.tooltip.behaviour1": "UNLOCALIZED: Usages for this material will be available in a future release.", + "item.create.shadow_steel.tooltip": "SCHATTENSTAHL", + "item.create.shadow_steel.tooltip.summary": "Ein chromatisches Material, das _in der Leere_ geschmiedet wird.", + "item.create.shadow_steel.tooltip.condition1": "In Arbeit", + "item.create.shadow_steel.tooltip.behaviour1": "Verwendungen für dieses Material werden in zukünftigen Versionen verfügbar sein.", - "item.create.linked_controller.tooltip": "UNLOCALIZED: LINKED CONTROLLER", - "item.create.linked_controller.tooltip.summary": "UNLOCALIZED: Grants _handheld_ _control_ over _Redstone Link_ frequencies assigned to its _six_ _buttons_.", - "item.create.linked_controller.tooltip.condition1": "UNLOCALIZED: R-Click", - "item.create.linked_controller.tooltip.behaviour1": "UNLOCALIZED: _Toggles_ the controller. _Movement_ _controls_ are taken over while its active.", - "item.create.linked_controller.tooltip.condition2": "UNLOCALIZED: R-Click while Sneaking", - "item.create.linked_controller.tooltip.behaviour2": "UNLOCALIZED: Opens the manual _Configuration Interface_.", - "item.create.linked_controller.tooltip.condition3": "UNLOCALIZED: R-Click on Redstone Link Receiver", - "item.create.linked_controller.tooltip.behaviour3": "UNLOCALIZED: Enables _Bind Mode_, press one of the _six controls_ to bind it to the _Links' Frequency_.", - "item.create.linked_controller.tooltip.condition4": "UNLOCALIZED: R-Click on Lectern", - "item.create.linked_controller.tooltip.behaviour4": "UNLOCALIZED: Places the Controller into the Lectern for easy activation. (R-Click while Sneaking to retrieve it)", + "item.create.linked_controller.tooltip": "VERBUNDENER KONTROLLER", + "item.create.linked_controller.tooltip.summary": "Erlaubt _händische_ _Kontrolle_ über _Redstone-Verbindungs-Frequenzen_, welche auf ihre _sechs_ _Knöpfe_ gebunden sind.", + "item.create.linked_controller.tooltip.condition1": "R-Klick", + "item.create.linked_controller.tooltip.behaviour1": "_Schaltet_ den Kontroller _um_. _Bewegungssteuerung_ wird übernommen, solange der Kontroller aktiv ist.", + "item.create.linked_controller.tooltip.condition2": "R-Klick beim Schleichen", + "item.create.linked_controller.tooltip.behaviour2": "Öffnet das Handbuch _Konfigurationsoberfläche_.", + "item.create.linked_controller.tooltip.condition3": "R-Klick auf einen Redstone-Verbindungs-Empfänger", + "item.create.linked_controller.tooltip.behaviour3": "Aktiviert den _Bindungsmodus_. Drücke einen der _sechs Einstellungen_, um sie auf die _Verbindungsfrequenz_ zu binden.", + "item.create.linked_controller.tooltip.condition4": "R-Klick auf ein Lesepult", + "item.create.linked_controller.tooltip.behaviour4": "Platziert einen Kontroller in das Lesepult, um es einfacher zu aktivieren. (R-Klick beim Schleichen, um es zurück zu nehmen)", - "item.create.diving_helmet.tooltip": "UNLOCALIZED: DIVING HELMET", - "item.create.diving_helmet.tooltip.summary": "UNLOCALIZED: Together with a _Copper_ _Backtank_, allows the wielder to _breathe_ _underwater_ for an extended amount of time.", - "item.create.diving_helmet.tooltip.condition1": "UNLOCALIZED: When Worn", - "item.create.diving_helmet.tooltip.behaviour1": "UNLOCALIZED: Provides the _Water Breathing_ effect, slowly draining _Air Pressure_ from the Backtank.", + "item.create.diving_helmet.tooltip": "TAUCHHELM", + "item.create.diving_helmet.tooltip.summary": "Mit einem _kupfernen_ _Rückentank_ kombiniert erlaubt es dem Anwender, _unter Wasser_ länger _atmen_ zu können.", + "item.create.diving_helmet.tooltip.condition1": "Wenn getragen", + "item.create.diving_helmet.tooltip.behaviour1": "Gibt den _Wasseratmungs-Effekt_, für welchen langsam _Luftdruck_ aus dem Rückentank gezogen wird.", - "item.create.copper_backtank.tooltip": "UNLOCALIZED: COPPER BACKTANK", - "item.create.copper_backtank.tooltip.summary": "UNLOCALIZED: A _Wearable_ _Tank_ for carrying Pressurized Air.", - "item.create.copper_backtank.tooltip.condition1": "UNLOCALIZED: When Worn", - "item.create.copper_backtank.tooltip.behaviour1": "UNLOCALIZED: Provides _Pressurized_ _Air_ to Equipment that requires it.", - "item.create.copper_backtank.tooltip.condition2": "UNLOCALIZED: When placed, Powered by Kinetics", - "item.create.copper_backtank.tooltip.behaviour2": "UNLOCALIZED: _Collects_ _Pressurized_ _Air_ at a rate depending on the Rotational Speed.", + "item.create.copper_backtank.tooltip": "KUPFERNER RÜCKENTANK", + "item.create.copper_backtank.tooltip.summary": "Ein _tragbarer_ _Tank_, um komprimierte Luft aufzubewahren.", + "item.create.copper_backtank.tooltip.condition1": "Wenn getragen", + "item.create.copper_backtank.tooltip.behaviour1": "Stellt _komprimierte_ _Luft_ für Ausrüstung zur Verfügung, welche es braucht.", + "item.create.copper_backtank.tooltip.condition2": "Wenn platziert und mit kinetischer Energie betrieben", + "item.create.copper_backtank.tooltip.behaviour2": "_Sammelt_ _komprimierte_ _Luft_ mit einer Geschwindigkeit basierend auf der Rotationsgeschwindigkeit.", - "item.create.diving_boots.tooltip": "UNLOCALIZED: DIVING BOOTS", - "item.create.diving_boots.tooltip.summary": "UNLOCALIZED: A pair of _heavy_ _boots_, allowing for better traversal of the Ocean floor.", - "item.create.diving_boots.tooltip.condition1": "UNLOCALIZED: When Worn", - "item.create.diving_boots.tooltip.behaviour1": "UNLOCALIZED: Wielder _sinks_ _faster_ and _cannot_ _swim_. Grants the ability to _walk_ and _jump_ underwater. Wielder also is no longer affected by _Mechanical_ _Belts_.", + "item.create.diving_boots.tooltip": "TAUCHSCHUHE", + "item.create.diving_boots.tooltip.summary": "Ein Paar _schwere_ _Schuhe_, welches es erlaubt, besser auf dem Grund des Ozenas zu reisen.", + "item.create.diving_boots.tooltip.condition1": "Wenn getragen", + "item.create.diving_boots.tooltip.behaviour1": "Anwender _sinkt_ _schneller_ und _kann nicht_ _schwimmen_. Gibt die Möglichkeit, unter Wasser zu _laufen_ und zu _springen_. Anwender wird auch nicht mehr von _mechanischen_ _Riemen_ beeinflusst.", - "item.create.crafting_blueprint.tooltip": "UNLOCALIZED: CRAFTING BLUEPRINT", - "item.create.crafting_blueprint.tooltip.summary": "UNLOCALIZED: _Placed_ on a wall, it can be used to _specify_ _ingredient_ _arrangements_ for easier manual crafting. Each slot represents a Recipe.", - "item.create.crafting_blueprint.condition1": "UNLOCALIZED: R-Click empty Slot", - "item.create.crafting_blueprint.behaviour1": "UNLOCALIZED: Opens a _Crafting_ _menu_ allowing you to _configure_ a _recipe_ and items to display.", - "item.create.crafting_blueprint.condition2": "UNLOCALIZED: R-Click configured Slot", - "item.create.crafting_blueprint.behaviour2": "UNLOCALIZED: _Applies_ the _configured_ _recipe_ with matching Ingredients found in your _Inventory_. _Sneak_ to craft up to a _Stack_ of items.", + "item.create.crafting_blueprint.tooltip": "HERSTELLUNGSBLAUPAUSE", + "item.create.crafting_blueprint.tooltip.summary": "Wird es auf eine Wand _platziert_, kann es genutzt werden, um _Zutatenanordnung_ für leichtere manuelle Herstellung zu _spezifizieren_. Jeder Anzeigeplatz steht für ein Rezept.", + "item.create.crafting_blueprint.condition1": "R-Klick leeren Anzeigeplatz", + "item.create.crafting_blueprint.behaviour1": "Öffnet ein _Herstellungsmenü_, damit du ein _Rezept_ _konfigurieren_ und Gegenstände darstellen kannst.", + "item.create.crafting_blueprint.condition2": "R-Klick konfigurierten Anzeigeplatz", + "item.create.crafting_blueprint.behaviour2": "Wendet das _konfigurierte_ _Rezept_ mit den passenden Zutaten aus deinem _Inventar_ an. _Schleiche_, um bis zu einem _Stapel_ von Gegenständen herzustellen.", - "item.create.minecart_coupling.tooltip": "UNLOCALIZED: MINECART COUPLING", - "item.create.minecart_coupling.tooltip.summary": "UNLOCALIZED: _Chains_ all your _Minecarts_ or _Carriage Contraptions_ together to form a majestic Train.", - "item.create.minecart_coupling.tooltip.condition1": "UNLOCALIZED: When Used on Minecart", - "item.create.minecart_coupling.tooltip.behaviour1": "UNLOCALIZED: _Couples_ two Minecarts together, attempting to keep them at a _constant distance_ while moving.", + "item.create.minecart_coupling.tooltip": "LORENKUPPLUNG", + "item.create.minecart_coupling.tooltip.summary": "_Verkettet_ all deine _Loren_ oder _Karosseriebauwerke_, um einen majestätischen Zug zu formen.", + "item.create.minecart_coupling.tooltip.condition1": "Wenn auf eine Lore benutzt wird", + "item.create.minecart_coupling.tooltip.behaviour1": "Koppelt zwei Loren zusammen und versucht, sie während der Bewegung auf einem _konstanten Abstand_ zu halten.", - "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": "ERFAHRUNGSKLUMPEN", + "item.create.experience_nugget.tooltip.summary": "_Ding!_ Ein Stückchen _Inspiration_ von Ihren fantastischen Erfindungen.", + "item.create.experience_nugget.tooltip.condition1": "Wenn benutzt", + "item.create.experience_nugget.tooltip.behaviour1": "_Löst_ alle _Erfahrungspunkte_ ein, welche darin gespeichert sind.", - "block.create.peculiar_bell.tooltip": "UNLOCALIZED: PECULIAR BELL", - "block.create.peculiar_bell.tooltip.summary": "UNLOCALIZED: A decorative _Brass Bell_. Placing it right above open _Soul Fire_ may cause side-effects...", + "block.create.peculiar_bell.tooltip": "SELTSAME GLOCKE", + "block.create.peculiar_bell.tooltip.summary": "Eine dekorative _Messingglocke_. Über einem Seelenfeuer platziert, könnte es Nebenwirkungen haben...", - "block.create.haunted_bell.tooltip": "UNLOCALIZED: HAUNTED BELL", - "block.create.haunted_bell.tooltip.summary": "UNLOCALIZED: A _Cursed Bell_ haunted by lost souls of the Nether.", - "block.create.haunted_bell.tooltip.condition1": "UNLOCALIZED: When Held or Rang", - "block.create.haunted_bell.tooltip.behaviour1": "UNLOCALIZED: Highlights nearby _Lightless Spots_ on which _Hostile Mobs_ can spawn.", + "block.create.haunted_bell.tooltip": "SPUKGLOCKE", + "block.create.haunted_bell.tooltip.summary": "Eine _verfluchte Glocke_ der verlorenen Seelen aus dem Nether.", + "block.create.haunted_bell.tooltip.condition1": "Wenn getragen oder geläutet wird", + "block.create.haunted_bell.tooltip.behaviour1": "Hebt nahe _lichtlose Stellen_ hervor, auf welchen _feindliche Kreaturen_ laichen können.", "_": "->------------------------] Ponder Content [------------------------<-", 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 eeb101491..6e6d5f7b9 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: 7", + "_": "Missing Localizations: 0", "_": "->------------------------] Game Elements [------------------------<-", @@ -567,7 +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_backtank_placeable": "Depósito de cobre colocable", "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/pt_br.json b/src/generated/resources/assets/create/lang/unfinished/pt_br.json index 544424e54..2f449d891 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: 1187", + "_": "Missing Localizations: 881", "_": "->------------------------] Game Elements [------------------------<-", @@ -805,16 +805,16 @@ "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.block.deployer.damage_source_name": "UNLOCALIZED: a rogue Deployer", - "create.block.cart_assembler.invalid": "UNLOCALIZED: Place your Cart Assembler on a rail block", + "create.block.deployer.damage_source_name": "Implantador rebelde", + "create.block.cart_assembler.invalid": "Coloque o seu montador de carrinho de minas num trilho", - "create.menu.return": "UNLOCALIZED: Return to Menu", - "create.menu.configure": "UNLOCALIZED: Configure...", - "create.menu.ponder_index": "UNLOCALIZED: Ponder Index", - "create.menu.only_ingame": "UNLOCALIZED: Available in the Pause Menu", - "create.menu.project_page": "UNLOCALIZED: Project Page", - "create.menu.report_bugs": "UNLOCALIZED: Report Issues", - "create.menu.support": "UNLOCALIZED: Support Us", + "create.menu.return": "Retornar ao menu", + "create.menu.configure": "Configurar...", + "create.menu.ponder_index": "Tabela do ponderamento", + "create.menu.only_ingame": "Disponível no menu de pausa", + "create.menu.project_page": "Página do projeto", + "create.menu.report_bugs": "Informar um erro", + "create.menu.support": "Suporte nós", "create.recipe.crushing": "Triturando", "create.recipe.milling": "Moendo", @@ -830,7 +830,7 @@ "create.recipe.mixing": "Misturando", "create.recipe.deploying": "Implantando", "create.recipe.automatic_shapeless": "Fabricação sem forma automático", - "create.recipe.automatic_brewing": "UNLOCALIZED: Automated Brewing", + "create.recipe.automatic_brewing": "Produção de poções", "create.recipe.packing": "Compactando", "create.recipe.automatic_packing": "Compactamento automático", "create.recipe.sawing": "Serrando", @@ -882,22 +882,22 @@ "create.action.discard": "Descartar", "create.keyinfo.toolmenu": "Menu Focal da Ferramenta", - "create.keyinfo.toolbelt": "UNLOCALIZED: Access Nearby Toolboxes", - "create.keyinfo.scrollup": "UNLOCALIZED: Simulate Mousewheel Up (inworld)", - "create.keyinfo.scrolldown": "UNLOCALIZED: Simulate Mousewheel Down (inworld)", + "create.keyinfo.toolbelt": "Acessa caixas de ferramenta próximas", + "create.keyinfo.scrollup": "Simular a roda do mouse (para cima) (no mundo)", + "create.keyinfo.scrolldown": "Simular a roda do mouse (para baixo) (no mundo)", "create.gui.scrollInput.defaultTitle": "Escolha uma Opção:", "create.gui.scrollInput.scrollToModify": "Role o mouse para Modificar", "create.gui.scrollInput.scrollToAdjustAmount": "Role o mouse para ajustar a quantidade", "create.gui.scrollInput.scrollToSelect": "Role o mouse para Selecionar", - "create.gui.scrollInput.shiftScrollsFaster": "UNLOCALIZED: Shift to Scroll Faster", + "create.gui.scrollInput.shiftScrollsFaster": "Shift para rolar o mouse mais rapido", "create.gui.toolmenu.focusKey": "Segure [%1$s] para Focar", "create.gui.toolmenu.cycle": "[SCROLL] para Circular", "create.toolbox.unequip": "Desequipar: %1$s", "create.toolbox.outOfRange": "Caixa de ferramentas do item segurado fora de alcance", "create.toolbox.detach": "Parar de rastrear e manter item", - "create.toolbox.depositAll": "Retornar itens para caixa de ferramenta próxima", + "create.toolbox.depositAll": "Retorna itens para caixa de ferramenta próxima", "create.toolbox.depositBox": "Retornar itens para caixa de ferramenta", "create.gui.symmetryWand.mirrorType": "Espelhar", @@ -945,90 +945,90 @@ "create.terrainzapper.usingBlock": "UNLOCALIZED: Using: %1$s", "create.terrainzapper.leftClickToSet": "UNLOCALIZED: Left-Click a Block to set Material", - "create.minecart_coupling.two_couplings_max": "UNLOCALIZED: Minecarts cannot have more than two couplings each", - "create.minecart_coupling.unloaded": "UNLOCALIZED: Parts of your train seem to be in unloaded chunks", - "create.minecart_coupling.no_loops": "UNLOCALIZED: Couplings cannot form a loop", - "create.minecart_coupling.removed": "UNLOCALIZED: Removed all couplings from minecart", - "create.minecart_coupling.too_far": "UNLOCALIZED: Minecarts are too far apart", + "create.minecart_coupling.two_couplings_max": "Carrinhos de mina não podem ter mais de dois acoplamentos cada", + "create.minecart_coupling.unloaded": "Partes do seu trem aparentam estar em um chunk descarregado", + "create.minecart_coupling.no_loops": "Acoplamentos não podem formar um loop", + "create.minecart_coupling.removed": "Removeu todos os acoplamentos do carrinho de mina", + "create.minecart_coupling.too_far": "Carrinhos de mina estão muito distanciados", - "create.contraptions.movement_mode": "UNLOCALIZED: Movement Mode", - "create.contraptions.movement_mode.move_place": "UNLOCALIZED: Always Place when Stopped", - "create.contraptions.movement_mode.move_place_returned": "UNLOCALIZED: Place only in Starting Position", - "create.contraptions.movement_mode.move_never_place": "UNLOCALIZED: Place only when Anchor Destroyed", - "create.contraptions.movement_mode.rotate_place": "UNLOCALIZED: Always Place when Stopped", - "create.contraptions.movement_mode.rotate_place_returned": "UNLOCALIZED: Only Place near Initial Angle", - "create.contraptions.movement_mode.rotate_never_place": "UNLOCALIZED: Only Place when Anchor Destroyed", - "create.contraptions.cart_movement_mode": "UNLOCALIZED: Cart Movement Mode", - "create.contraptions.cart_movement_mode.rotate": "UNLOCALIZED: Always face toward motion", - "create.contraptions.cart_movement_mode.rotate_paused": "UNLOCALIZED: Pause actors while rotating", - "create.contraptions.cart_movement_mode.rotation_locked": "UNLOCALIZED: Lock rotation", - "create.contraptions.windmill.rotation_direction": "UNLOCALIZED: Rotation Direction", - "create.contraptions.clockwork.clock_hands": "UNLOCALIZED: Clock Hands", - "create.contraptions.clockwork.hour_first": "UNLOCALIZED: Hour hand first", - "create.contraptions.clockwork.minute_first": "UNLOCALIZED: Minute hand first", - "create.contraptions.clockwork.hour_first_24": "UNLOCALIZED: 24-Hour hand first", + "create.contraptions.movement_mode": "Modo de movimento", + "create.contraptions.movement_mode.move_place": "Sempre colocar quando parado", + "create.contraptions.movement_mode.move_place_returned": "Colocar apenas na posição inicial", + "create.contraptions.movement_mode.move_never_place": "Colocar apenas caso a âncora seja destruída", + "create.contraptions.movement_mode.rotate_place": "Sempre colocar quando parado", + "create.contraptions.movement_mode.rotate_place_returned": "Apenas colocar perto do angulo inicial", + "create.contraptions.movement_mode.rotate_never_place": "Colocar apenas caso a âncora seja destruída", + "create.contraptions.cart_movement_mode": "Modo de movimento do carrinho", + "create.contraptions.cart_movement_mode.rotate": "Sempre apontar para a direção do movimento", + "create.contraptions.cart_movement_mode.rotate_paused": "Pausar atores quando girando", + "create.contraptions.cart_movement_mode.rotation_locked": "Travar a rotação", + "create.contraptions.windmill.rotation_direction": "Direção da rotação", + "create.contraptions.clockwork.clock_hands": "Ponteiros do relogio", + "create.contraptions.clockwork.hour_first": "Ponteiro da hora primeiro", + "create.contraptions.clockwork.minute_first": "Ponteiro do minuto primeiro", + "create.contraptions.clockwork.hour_first_24": "Ponteiro das 24 horas primeiro", - "create.logistics.filter": "UNLOCALIZED: Filter", - "create.logistics.recipe_filter": "UNLOCALIZED: Recipe Filter", - "create.logistics.fluid_filter": "UNLOCALIZED: Fluid Filter", - "create.logistics.firstFrequency": "UNLOCALIZED: Freq. #1", - "create.logistics.secondFrequency": "UNLOCALIZED: Freq. #2", - "create.logistics.filter.apply": "UNLOCALIZED: Applied filter to %1$s.", - "create.logistics.filter.apply_click_again": "UNLOCALIZED: Applied filter to %1$s, click again to copy the amount.", - "create.logistics.filter.apply_count": "UNLOCALIZED: Applied extraction count to filter.", + "create.logistics.filter": "Filtro", + "create.logistics.recipe_filter": "Filtro de receitas", + "create.logistics.fluid_filter": "Filtro de fluido", + "create.logistics.firstFrequency": "Freq. #1", + "create.logistics.secondFrequency": "Freq. #2", + "create.logistics.filter.apply": "Aplicou filtro para %1$s.", + "create.logistics.filter.apply_click_again": "Aplicou filtro para %1$s, Clique denovo para copiar quantidade.", + "create.logistics.filter.apply_count": "Aplicou quantidade de extração para o filtro.", "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", "create.gui.goggles.pole_length": "Comprimento da vara:", - "create.gui.goggles.fluid_container": "UNLOCALIZED: Fluid Container Info:", - "create.gui.goggles.fluid_container.capacity": "UNLOCALIZED: Capacity: ", - "create.gui.assembly.exception": "UNLOCALIZED: This Contraption was unable to assemble:", - "create.gui.assembly.exception.unmovableBlock": "UNLOCALIZED: Unmovable Block (%4$s) at [%1$s,%2$s,%3$s]", - "create.gui.assembly.exception.chunkNotLoaded": "UNLOCALIZED: The Block at [%1$s,%2$s,%3$s] was not in a loaded chunk", - "create.gui.assembly.exception.structureTooLarge": "UNLOCALIZED: There are too many Blocks included in the contraption.\nThe configured maximum is: %1$s", - "create.gui.assembly.exception.tooManyPistonPoles": "UNLOCALIZED: There are too many extension Poles attached to this Piston.\nThe configured maximum is: %1$s", - "create.gui.assembly.exception.noPistonPoles": "UNLOCALIZED: The Piston is missing some extension Poles", - "create.gui.assembly.exception.not_enough_sails": "UNLOCALIZED: Attached structure does not include enough sail-like blocks: %1$s\nA minimum of %2$s are required", - "create.gui.gauge.info_header": "UNLOCALIZED: Gauge Information:", - "create.gui.speedometer.title": "UNLOCALIZED: Rotation Speed", - "create.gui.stressometer.title": "UNLOCALIZED: Network Stress", - "create.gui.stressometer.capacity": "UNLOCALIZED: Remaining Capacity", - "create.gui.stressometer.overstressed": "UNLOCALIZED: Overstressed", - "create.gui.stressometer.no_rotation": "UNLOCALIZED: No Rotation", - "create.gui.contraptions.not_fast_enough": "UNLOCALIZED: It appears that this %1$s is _not_ rotating with _enough_ _speed_.", - "create.gui.contraptions.network_overstressed": "UNLOCALIZED: It appears that this contraption is _overstressed_. Add more sources or _slow_ _down_ the components with a high _stress_ _impact_.", + "create.gui.goggles.fluid_container": "Informação do recipiente de fluido:", + "create.gui.goggles.fluid_container.capacity": "Capacidade: ", + "create.gui.assembly.exception": "Não foi possível montar essa engenhoca:", + "create.gui.assembly.exception.unmovableBlock": "Bloco imovel (%4$s) em [%1$s,%2$s,%3$s]", + "create.gui.assembly.exception.chunkNotLoaded": "O bloco em [%1$s,%2$s,%3$s] não estava em um chunk carregado", + "create.gui.assembly.exception.structureTooLarge": "Tem muitos blocos incluídos na engenhoca. O limite configurado é: %1$s", + "create.gui.assembly.exception.tooManyPistonPoles": "Tem muitas varetas de extensão colocadas nesse pistão. O limite configurado é: %1$s", + "create.gui.assembly.exception.noPistonPoles": "O pistão esta faltando algumas varetas de extensão", + "create.gui.assembly.exception.not_enough_sails": "A estrutura conectada não possui o número suficiente de blocos tipo vela: %1$s\nUm mínimo de %2$s são requeridos", + "create.gui.gauge.info_header": "Informação do medidor:", + "create.gui.speedometer.title": "Velocidade de rotação", + "create.gui.stressometer.title": "Estresse do sistema", + "create.gui.stressometer.capacity": "Capacidade restante", + "create.gui.stressometer.overstressed": "Sobre estressado", + "create.gui.stressometer.no_rotation": "Nenhuma rotação", + "create.gui.contraptions.not_fast_enough": "Aparenta que esse %1$s não _está_ girando com _a velocidade_ _necessária_.", + "create.gui.contraptions.network_overstressed": "Aparenta que essa engenhoca está _sobre estressada_. Adicione mais fontes ou _desacelere_ __ os componentes que tem um _impacto de_ _stress alto_.", "create.gui.adjustable_crate.title": "UNLOCALIZED: Adjustable Crate", "create.gui.adjustable_crate.storageSpace": "UNLOCALIZED: Storage Space", - "create.gui.stockpile_switch.title": "UNLOCALIZED: Stockpile Switch", - "create.gui.stockpile_switch.invert_signal": "UNLOCALIZED: Invert Signal", - "create.gui.stockpile_switch.move_to_lower_at": "UNLOCALIZED: Move to lower lane at %1$s%%", - "create.gui.stockpile_switch.move_to_upper_at": "UNLOCALIZED: Move to upper lane at %1$s%%", - "create.gui.sequenced_gearshift.title": "UNLOCALIZED: Sequenced Gearshift", - "create.gui.sequenced_gearshift.instruction": "UNLOCALIZED: Instruction", - "create.gui.sequenced_gearshift.instruction.turn_angle.descriptive": "UNLOCALIZED: Turn by angle", - "create.gui.sequenced_gearshift.instruction.turn_angle": "UNLOCALIZED: Turn", - "create.gui.sequenced_gearshift.instruction.turn_angle.angle": "UNLOCALIZED: Angle", - "create.gui.sequenced_gearshift.instruction.turn_distance.descriptive": "UNLOCALIZED: Turn to move Piston/Pulley/Gantry", - "create.gui.sequenced_gearshift.instruction.turn_distance": "UNLOCALIZED: Piston", - "create.gui.sequenced_gearshift.instruction.turn_distance.distance": "UNLOCALIZED: Distance", - "create.gui.sequenced_gearshift.instruction.delay.descriptive": "UNLOCALIZED: Timed Delay", - "create.gui.sequenced_gearshift.instruction.delay": "UNLOCALIZED: Delay", - "create.gui.sequenced_gearshift.instruction.delay.duration": "UNLOCALIZED: Duration", - "create.gui.sequenced_gearshift.instruction.end.descriptive": "UNLOCALIZED: End", - "create.gui.sequenced_gearshift.instruction.end": "UNLOCALIZED: End", - "create.gui.sequenced_gearshift.instruction.await.descriptive": "UNLOCALIZED: Await new Redstone Pulse", - "create.gui.sequenced_gearshift.instruction.await": "UNLOCALIZED: Await", - "create.gui.sequenced_gearshift.speed": "UNLOCALIZED: Speed, Direction", - "create.gui.sequenced_gearshift.speed.forward": "UNLOCALIZED: Input speed, Forwards", - "create.gui.sequenced_gearshift.speed.forward_fast": "UNLOCALIZED: Double speed, Forwards", - "create.gui.sequenced_gearshift.speed.back": "UNLOCALIZED: Input speed, Reversed", - "create.gui.sequenced_gearshift.speed.back_fast": "UNLOCALIZED: Double speed, Reversed", + "create.gui.stockpile_switch.title": "Dijuntor de armazenamento", + "create.gui.stockpile_switch.invert_signal": "Inverter sinal", + "create.gui.stockpile_switch.move_to_lower_at": "Mover para a faixa mais baixa %1$s%%", + "create.gui.stockpile_switch.move_to_upper_at": "Mover para a faixa mais alta %1$s%%", + "create.gui.sequenced_gearshift.title": "Câmbio sequenciado", + "create.gui.sequenced_gearshift.instruction": "Instruções", + "create.gui.sequenced_gearshift.instruction.turn_angle.descriptive": "Rotacionar por angulo", + "create.gui.sequenced_gearshift.instruction.turn_angle": "Giro", + "create.gui.sequenced_gearshift.instruction.turn_angle.angle": "Angulo", + "create.gui.sequenced_gearshift.instruction.turn_distance.descriptive": "Rotacionar par mover Pistão/Polia/Portico", + "create.gui.sequenced_gearshift.instruction.turn_distance": "Pistão", + "create.gui.sequenced_gearshift.instruction.turn_distance.distance": "Distancia", + "create.gui.sequenced_gearshift.instruction.delay.descriptive": "Espera", + "create.gui.sequenced_gearshift.instruction.delay": "Esperar", + "create.gui.sequenced_gearshift.instruction.delay.duration": "Duração", + "create.gui.sequenced_gearshift.instruction.end.descriptive": "Terminar", + "create.gui.sequenced_gearshift.instruction.end": "Termino", + "create.gui.sequenced_gearshift.instruction.await.descriptive": "Esperar novo pulso de redstone", + "create.gui.sequenced_gearshift.instruction.await": "Espera", + "create.gui.sequenced_gearshift.speed": "Velocidade, Direção", + "create.gui.sequenced_gearshift.speed.forward": "Velocidade inicial, Para frente", + "create.gui.sequenced_gearshift.speed.forward_fast": "Dobro da velocidade, Para frente", + "create.gui.sequenced_gearshift.speed.back": "Velocidade inicial, Para trás", + "create.gui.sequenced_gearshift.speed.back_fast": "Dobro da velocidade, Para trás", "create.schematicAndQuill.dimensions": "Tamanho Esquema: %1$sx%2$sx%3$s", "create.schematicAndQuill.firstPos": "Primeira posição feita.", "create.schematicAndQuill.secondPos": "Segunda posição feita.", - "create.schematicAndQuill.noTarget": "Seguro [Ctrl] para selecionar Blocos de Ar.", + "create.schematicAndQuill.noTarget": "Seguro [Ctrl] para seleccionar Blocos de Ar.", "create.schematicAndQuill.abort": "Seleção removida.", "create.schematicAndQuill.title": "Nome do esquema:", "create.schematicAndQuill.convert": "Salvar e carregar arquivo imediatamente", @@ -1068,7 +1068,7 @@ "create.schematic.tool.rotate.description.1": "[CTRL]-Rolar para rolar 90 Graus", "create.schematic.tool.rotate.description.2": "", "create.schematic.tool.rotate.description.3": "", - "create.schematic.tool.print.description.0": "Coloca estrutura no mundo instantaneamente", + "create.schematic.tool.print.description.0": "Colocá estrutura no mundo instantaneamente", "create.schematic.tool.print.description.1": "[Botão-Direito] para confirmar a posição atual.", "create.schematic.tool.print.description.2": "Esta ferramenta é para o Modo Criativo apenas.", "create.schematic.tool.print.description.3": "", @@ -1081,11 +1081,11 @@ "create.schematics.uploadTooLarge": "Seu esquema é muito grande", "create.schematics.maxAllowedSize": "O tamanho máximo permitido para o esquema é:", - "create.gui.schematicTable.refresh": "UNLOCALIZED: Refresh Files", - "create.gui.schematicTable.open_folder": "UNLOCALIZED: Open Folder", + "create.gui.schematicTable.refresh": "atualizar arquivos", + "create.gui.schematicTable.open_folder": "Abrir pasta", "create.gui.schematicTable.title": "Mesa de Desenho", - "create.gui.schematicTable.availableSchematics": "UNLOCALIZED: Available Schematics", - "create.gui.schematicTable.noSchematics": "UNLOCALIZED: No Schematics Saved", + "create.gui.schematicTable.availableSchematics": "Esquema disponíveis", + "create.gui.schematicTable.noSchematics": "Nenhum esquema salvo", "create.gui.schematicTable.uploading": "Importando...", "create.gui.schematicTable.finished": "Envio Concluído!", "create.gui.schematicannon.title": "Canhão de esquema", @@ -1095,18 +1095,18 @@ "create.gui.schematicannon.shotsRemainingWithBackup": "Com backup: %1$s", "create.gui.schematicannon.optionEnabled": "Habilitado Atualmente", "create.gui.schematicannon.optionDisabled": "Desabilitado Atualmente", - "create.gui.schematicannon.showOptions": "UNLOCALIZED: Show Printer Settings", + "create.gui.schematicannon.showOptions": "Mostrar as configurações da impressora", "create.gui.schematicannon.option.dontReplaceSolid": "Não Substituir Blocos Sólidos", "create.gui.schematicannon.option.replaceWithSolid": "Substituir Blocos Sólidos", "create.gui.schematicannon.option.replaceWithAny": "Substituir Sólidos com Qualquer", "create.gui.schematicannon.option.replaceWithEmpty": "Substituir Sólidos com Vazio", "create.gui.schematicannon.option.skipMissing": "Pulando Blocos faltantes", - "create.gui.schematicannon.option.skipTileEntities": "Proteger Entidades Entalhadas", - "create.gui.schematicannon.slot.gunpowder": "UNLOCALIZED: Add gunpowder to fuel the cannon", - "create.gui.schematicannon.slot.listPrinter": "UNLOCALIZED: Place books here to print a Checklist for your Schematic", - "create.gui.schematicannon.slot.schematic": "UNLOCALIZED: Add your Schematic here. Make sure it is deployed at a specific location.", - "create.gui.schematicannon.option.skipMissing.description": "Se o Canhão de esquema não encontrar o Bloco para colocar, ele irá continuar para a próx. Posição.", - "create.gui.schematicannon.option.skipTileEntities.description": "O Canhão de esquema vai evitar substituir blocos que contêm dados como Baus.", + "create.gui.schematicannon.option.skipTileEntities": "Proteger tile entities", + "create.gui.schematicannon.slot.gunpowder": "Adicionar pólvora para carregar o canhão", + "create.gui.schematicannon.slot.listPrinter": "Coloque livros aqui para imprimir uma lista para o seu esquema", + "create.gui.schematicannon.slot.schematic": "Adicione o seu esquema aqui. Tenha certeza que ele está colocado em um lugar especifico.", + "create.gui.schematicannon.option.skipMissing.description": "Se o Canhão de esquema não encontrar o Bloco para colocar, ele irá continuar para a próxima. Posição.", + "create.gui.schematicannon.option.skipTileEntities.description": "O Canhão de esquema vai evitar substituir blocos que contêm dados como Baús.", "create.gui.schematicannon.option.dontReplaceSolid.description": "O Canhão de esquema nunca irá substituir Blocos sólidos na área em trabalho, apenas não-Sólidos e Ar.", "create.gui.schematicannon.option.replaceWithSolid.description": "O Canhão de esquema irá apenas substituir Blocos sólidos na área de trabalho, se o Esquema conter um bloco Sólido naquela posição.", "create.gui.schematicannon.option.replaceWithAny.description": "O Canhão de esquema irá substituir Blocos sólidos na área de trabalho, se o Esquema conter qualquer Bloco naquela posição.", @@ -1130,189 +1130,189 @@ "create.schematicannon.status.schematicNotPlaced": "Esquema não Colocado", "create.schematicannon.status.schematicExpired": "Arquivo de Esquema Expirado", - "create.materialChecklist": "UNLOCALIZED: Material Checklist", + "create.materialChecklist": "Lista de materiais", "create.materialChecklist.blocksNotLoaded": "UNLOCALIZED: * Disclaimer *\n\nMaterial List may be inaccurate due to relevant chunks not being loaded.", - "create.gui.filter.deny_list": "UNLOCALIZED: Deny-List", - "create.gui.filter.deny_list.description": "UNLOCALIZED: Items pass if they do NOT match any of the above. An empty Deny-List accepts everything.", - "create.gui.filter.allow_list": "UNLOCALIZED: Allow-List", - "create.gui.filter.allow_list.description": "UNLOCALIZED: Items pass if they match any of the above. An empty Allow-List rejects everything.", - "create.gui.filter.respect_data": "UNLOCALIZED: Respect Data", - "create.gui.filter.respect_data.description": "UNLOCALIZED: Items only match if their durability, enchantments, and other attributes match as well.", - "create.gui.filter.ignore_data": "UNLOCALIZED: Ignore Data", - "create.gui.filter.ignore_data.description": "UNLOCALIZED: Items match regardless of their attributes.", + "create.gui.filter.deny_list": "Lista de negação", + "create.gui.filter.deny_list.description": "Itens passam se eles não encaixam em nenhum dos acima. Uma lista de negação vazia aceita tudo.", + "create.gui.filter.allow_list": "Lista de permissão", + "create.gui.filter.allow_list.description": "Itens passam se eles se encaixam em algum dos acima. Uma lista de permissão vazia rejeita tudo.", + "create.gui.filter.respect_data": "Respeitar informação", + "create.gui.filter.respect_data.description": "Itens apenas se encaixam caso a durabilidade, encantamentos e outros atributos se encaixam também.", + "create.gui.filter.ignore_data": "Ignorar informação", + "create.gui.filter.ignore_data.description": "Itens se enquadram não importa os seus atributos.", - "create.item_attributes.placeable": "UNLOCALIZED: is placeable", - "create.item_attributes.placeable.inverted": "UNLOCALIZED: is not placeable", - "create.item_attributes.consumable": "UNLOCALIZED: can be eaten", - "create.item_attributes.consumable.inverted": "UNLOCALIZED: cannot be eaten", - "create.item_attributes.fluid_container": "UNLOCALIZED: can store fluids", - "create.item_attributes.fluid_container.inverted": "UNLOCALIZED: cannot store fluids", - "create.item_attributes.enchanted": "UNLOCALIZED: is enchanted", - "create.item_attributes.enchanted.inverted": "UNLOCALIZED: is unenchanted", - "create.item_attributes.max_enchanted": "UNLOCALIZED: is enchanted at max level", - "create.item_attributes.max_enchanted.inverted": "UNLOCALIZED: is not enchanted at max level", - "create.item_attributes.renamed": "UNLOCALIZED: has a custom name", - "create.item_attributes.renamed.inverted": "UNLOCALIZED: does not have a custom name", - "create.item_attributes.damaged": "UNLOCALIZED: is damaged", - "create.item_attributes.damaged.inverted": "UNLOCALIZED: is not damaged", - "create.item_attributes.badly_damaged": "UNLOCALIZED: is heavily damaged", - "create.item_attributes.badly_damaged.inverted": "UNLOCALIZED: is not heavily damaged", - "create.item_attributes.not_stackable": "UNLOCALIZED: cannot stack", - "create.item_attributes.not_stackable.inverted": "UNLOCALIZED: can be stacked", - "create.item_attributes.equipable": "UNLOCALIZED: can be equipped", - "create.item_attributes.equipable.inverted": "UNLOCALIZED: cannot be equipped", - "create.item_attributes.furnace_fuel": "UNLOCALIZED: is furnace fuel", - "create.item_attributes.furnace_fuel.inverted": "UNLOCALIZED: is not furnace fuel", - "create.item_attributes.washable": "UNLOCALIZED: can be Washed", - "create.item_attributes.washable.inverted": "UNLOCALIZED: cannot be Washed", - "create.item_attributes.hauntable": "UNLOCALIZED: can be Haunted", - "create.item_attributes.hauntable.inverted": "UNLOCALIZED: cannot be Haunted", - "create.item_attributes.crushable": "UNLOCALIZED: can be Crushed", - "create.item_attributes.crushable.inverted": "UNLOCALIZED: cannot be Crushed", - "create.item_attributes.smeltable": "UNLOCALIZED: can be Smelted", - "create.item_attributes.smeltable.inverted": "UNLOCALIZED: cannot be Smelted", - "create.item_attributes.smokable": "UNLOCALIZED: can be Smoked", - "create.item_attributes.smokable.inverted": "UNLOCALIZED: cannot be Smoked", - "create.item_attributes.blastable": "UNLOCALIZED: is smeltable in Blast Furnace", - "create.item_attributes.blastable.inverted": "UNLOCALIZED: is not smeltable in Blast Furnace", - "create.item_attributes.shulker_level": "UNLOCALIZED: is shulker %1$s", - "create.item_attributes.shulker_level.inverted": "UNLOCALIZED: is shulker not %1$s", - "create.item_attributes.shulker_level.full": "UNLOCALIZED: full", - "create.item_attributes.shulker_level.empty": "UNLOCALIZED: empty", - "create.item_attributes.shulker_level.partial": "UNLOCALIZED: partially filled", - "create.item_attributes.in_tag": "UNLOCALIZED: is tagged %1$s", - "create.item_attributes.in_tag.inverted": "UNLOCALIZED: is not tagged %1$s", - "create.item_attributes.in_item_group": "UNLOCALIZED: is in group '%1$s'", - "create.item_attributes.in_item_group.inverted": "UNLOCALIZED: is not in group '%1$s'", - "create.item_attributes.added_by": "UNLOCALIZED: was added by %1$s", - "create.item_attributes.added_by.inverted": "UNLOCALIZED: was not added by %1$s", - "create.item_attributes.has_enchant": "UNLOCALIZED: is enchanted with %1$s", - "create.item_attributes.has_enchant.inverted": "UNLOCALIZED: is not enchanted with %1$s", - "create.item_attributes.color": "UNLOCALIZED: is dyed %1$s", - "create.item_attributes.color.inverted": "UNLOCALIZED: is not dyed %1$s", - "create.item_attributes.has_fluid": "UNLOCALIZED: contains %1$s", - "create.item_attributes.has_fluid.inverted": "UNLOCALIZED: does not contain %1$s", - "create.item_attributes.has_name": "UNLOCALIZED: has the custom name %1$s", - "create.item_attributes.has_name.inverted": "UNLOCALIZED: does not have the custom name %1$s", - "create.item_attributes.book_author": "UNLOCALIZED: was authored by %1$s", - "create.item_attributes.book_author.inverted": "UNLOCALIZED: was not authored by %1$s", - "create.item_attributes.book_copy_original": "UNLOCALIZED: is an original", - "create.item_attributes.book_copy_original.inverted": "UNLOCALIZED: is not an original", - "create.item_attributes.book_copy_first": "UNLOCALIZED: is a first-generation copy", - "create.item_attributes.book_copy_first.inverted": "UNLOCALIZED: is not a first-generation copy", - "create.item_attributes.book_copy_second": "UNLOCALIZED: is a second-generation copy", - "create.item_attributes.book_copy_second.inverted": "UNLOCALIZED: is not a second-generation copy", - "create.item_attributes.book_copy_tattered": "UNLOCALIZED: is a tattered mess", - "create.item_attributes.book_copy_tattered.inverted": "UNLOCALIZED: is not a tattered mess", - "create.item_attributes.astralsorcery_amulet": "UNLOCALIZED: improves %1$s", - "create.item_attributes.astralsorcery_amulet.inverted": "UNLOCALIZED: does not improve %1$s", - "create.item_attributes.astralsorcery_constellation": "UNLOCALIZED: is attuned to %1$s", - "create.item_attributes.astralsorcery_constellation.inverted": "UNLOCALIZED: is not attuned to %1$s", - "create.item_attributes.astralsorcery_crystal": "UNLOCALIZED: has crystal attribute %1$s", - "create.item_attributes.astralsorcery_crystal.inverted": "UNLOCALIZED: does not have crystal attribute %1$s", - "create.item_attributes.astralsorcery_perk_gem": "UNLOCALIZED: has perk attribute %1$s", - "create.item_attributes.astralsorcery_perk_gem.inverted": "UNLOCALIZED: does not have perk attribute %1$s", + "create.item_attributes.placeable": "É colocavel", + "create.item_attributes.placeable.inverted": "Não é colocavel", + "create.item_attributes.consumable": "É comestivel", + "create.item_attributes.consumable.inverted": "Não é comestivel", + "create.item_attributes.fluid_container": "Pode armazenar fluidos", + "create.item_attributes.fluid_container.inverted": "Não pode armazenar fluidos", + "create.item_attributes.enchanted": "Está encantado", + "create.item_attributes.enchanted.inverted": "Não está encantado", + "create.item_attributes.max_enchanted": "Está encantado no nível máximo", + "create.item_attributes.max_enchanted.inverted": "Não está encantado no nível maximo", + "create.item_attributes.renamed": "Tem nome customizado", + "create.item_attributes.renamed.inverted": "Não tem nome customizado", + "create.item_attributes.damaged": "Está danificado", + "create.item_attributes.damaged.inverted": "Não está danificado", + "create.item_attributes.badly_damaged": "Está severamente danificado", + "create.item_attributes.badly_damaged.inverted": "Não esta severamente danificado", + "create.item_attributes.not_stackable": "Não pode ser empilhado", + "create.item_attributes.not_stackable.inverted": "Pode ser empilhado", + "create.item_attributes.equipable": "Pode ser equipado", + "create.item_attributes.equipable.inverted": "Não pode ser equipado", + "create.item_attributes.furnace_fuel": "è combustivel", + "create.item_attributes.furnace_fuel.inverted": "Não é combustivel", + "create.item_attributes.washable": "Pode ser lavado", + "create.item_attributes.washable.inverted": "Não pode ser lavado", + "create.item_attributes.hauntable": "Pode ser amaldiçoado", + "create.item_attributes.hauntable.inverted": "Não pode ser amaldiçoado", + "create.item_attributes.crushable": "Pode ser triturado", + "create.item_attributes.crushable.inverted": "Não pode ser triturado", + "create.item_attributes.smeltable": "Pode ser fundido", + "create.item_attributes.smeltable.inverted": "Não pode ser fundido", + "create.item_attributes.smokable": "Pode ser defumado", + "create.item_attributes.smokable.inverted": "Não pode ser defumado", + "create.item_attributes.blastable": "È fundível no alto-forno", + "create.item_attributes.blastable.inverted": "Não é fundível no alto-forno", + "create.item_attributes.shulker_level": "O shulker é %1$s", + "create.item_attributes.shulker_level.inverted": "O shulker não é %1$s", + "create.item_attributes.shulker_level.full": "Cheio", + "create.item_attributes.shulker_level.empty": "Vazio", + "create.item_attributes.shulker_level.partial": "Parcialmente cheio", + "create.item_attributes.in_tag": "è marcado %1$s", + "create.item_attributes.in_tag.inverted": "Não é marcado %1$s", + "create.item_attributes.in_item_group": "Está no grupo '%1$s'", + "create.item_attributes.in_item_group.inverted": "Não esta no grupo '%1$s'", + "create.item_attributes.added_by": "Foi adicionado por %1$s", + "create.item_attributes.added_by.inverted": "Não foi adicionado por %1$s", + "create.item_attributes.has_enchant": "Está encantado com %1$s", + "create.item_attributes.has_enchant.inverted": "Não esta encantado com %1$s", + "create.item_attributes.color": "Esta tingido de %1$s", + "create.item_attributes.color.inverted": "Não está tingido de %1$s", + "create.item_attributes.has_fluid": "Contem %1$s", + "create.item_attributes.has_fluid.inverted": "Não contem %1$s", + "create.item_attributes.has_name": "Tem o nome %1$s", + "create.item_attributes.has_name.inverted": "Não tem o nome %1$s", + "create.item_attributes.book_author": "Tem a autoria de %1$s", + "create.item_attributes.book_author.inverted": "Não tem a autoria de %1$s", + "create.item_attributes.book_copy_original": "É original", + "create.item_attributes.book_copy_original.inverted": "Não é original", + "create.item_attributes.book_copy_first": "É uma cópia da primeira geração", + "create.item_attributes.book_copy_first.inverted": "Não é uma copia de primeira geração", + "create.item_attributes.book_copy_second": "É uma cópia de segunda geração", + "create.item_attributes.book_copy_second.inverted": "Não é uma copia de segunda geração", + "create.item_attributes.book_copy_tattered": "É uma bagunça esfarrapada", + "create.item_attributes.book_copy_tattered.inverted": "Não é uma bagunça esfarrapada", + "create.item_attributes.astralsorcery_amulet": "Melhora %1$s", + "create.item_attributes.astralsorcery_amulet.inverted": "Não melhora %1$s", + "create.item_attributes.astralsorcery_constellation": "Esta sintonizado a %1$s", + "create.item_attributes.astralsorcery_constellation.inverted": "Não esta sintonizado a %1$s", + "create.item_attributes.astralsorcery_crystal": "Tem atributos de cristais %1$s", + "create.item_attributes.astralsorcery_crystal.inverted": "Não tem atributos de cristais %1$s", + "create.item_attributes.astralsorcery_perk_gem": " %1$s Tem um atributo de benefio", + "create.item_attributes.astralsorcery_perk_gem.inverted": "%1$s Não tem um atributo de benefio", - "create.gui.attribute_filter.no_selected_attributes": "UNLOCALIZED: No attributes selected", - "create.gui.attribute_filter.selected_attributes": "UNLOCALIZED: Selected attributes:", - "create.gui.attribute_filter.add_attribute": "UNLOCALIZED: Add attribute to List", - "create.gui.attribute_filter.add_inverted_attribute": "UNLOCALIZED: Add opposite attribute to List", - "create.gui.attribute_filter.allow_list_disjunctive": "UNLOCALIZED: Allow-List (Any)", - "create.gui.attribute_filter.allow_list_disjunctive.description": "UNLOCALIZED: Items pass if they have any of the selected attributes.", - "create.gui.attribute_filter.allow_list_conjunctive": "UNLOCALIZED: Allow-List (All)", - "create.gui.attribute_filter.allow_list_conjunctive.description": "UNLOCALIZED: Items pass only if they have ALL of the selected attributes.", - "create.gui.attribute_filter.deny_list": "UNLOCALIZED: Deny-List", - "create.gui.attribute_filter.deny_list.description": "UNLOCALIZED: Items pass if they do NOT have any of the selected attributes.", - "create.gui.attribute_filter.add_reference_item": "UNLOCALIZED: Add Reference Item", + "create.gui.attribute_filter.no_selected_attributes": "Nenhum atributo selecionado", + "create.gui.attribute_filter.selected_attributes": "Atributos selecionados:", + "create.gui.attribute_filter.add_attribute": "Adicionar atributo a lista", + "create.gui.attribute_filter.add_inverted_attribute": "Adicionar atributo oposto a lista", + "create.gui.attribute_filter.allow_list_disjunctive": "Lista de permissão (Qualquer)", + "create.gui.attribute_filter.allow_list_disjunctive.description": "Itens passam se eles tiverem qualquer atributo selecionado.", + "create.gui.attribute_filter.allow_list_conjunctive": "Lista de permissão (Todos)", + "create.gui.attribute_filter.allow_list_conjunctive.description": "Itens passam se eles tiverem TODOS atributos selecionados.", + "create.gui.attribute_filter.deny_list": "lista de negação", + "create.gui.attribute_filter.deny_list.description": "Itens passam se eles NÃO tiverem qualquer atributo selecionado.", + "create.gui.attribute_filter.add_reference_item": "Adicionar item referência", - "create.tooltip.holdForDescription": "UNLOCALIZED: Hold [%1$s] for Summary", - "create.tooltip.holdForControls": "UNLOCALIZED: Hold [%1$s] for Controls", - "create.tooltip.keyShift": "UNLOCALIZED: Shift", - "create.tooltip.keyCtrl": "UNLOCALIZED: Ctrl", - "create.tooltip.speedRequirement": "UNLOCALIZED: Speed Requirement: %1$s", - "create.tooltip.speedRequirement.none": "UNLOCALIZED: None", - "create.tooltip.speedRequirement.slow": "UNLOCALIZED: Slow", - "create.tooltip.speedRequirement.medium": "UNLOCALIZED: Moderate", - "create.tooltip.speedRequirement.fast": "UNLOCALIZED: Fast", - "create.tooltip.stressImpact": "UNLOCALIZED: Kinetic Stress Impact: %1$s", - "create.tooltip.stressImpact.low": "UNLOCALIZED: Low", - "create.tooltip.stressImpact.medium": "UNLOCALIZED: Moderate", - "create.tooltip.stressImpact.high": "UNLOCALIZED: High", - "create.tooltip.stressImpact.overstressed": "UNLOCALIZED: Overstressed", - "create.tooltip.capacityProvided": "UNLOCALIZED: Kinetic Stress Capacity: %1$s", - "create.tooltip.capacityProvided.low": "UNLOCALIZED: Small", - "create.tooltip.capacityProvided.medium": "UNLOCALIZED: Medium", - "create.tooltip.capacityProvided.high": "UNLOCALIZED: Large", - "create.tooltip.generationSpeed": "UNLOCALIZED: Generates at %1$s %2$s", - "create.tooltip.analogStrength": "UNLOCALIZED: Analog Strength: %1$s/15", + "create.tooltip.holdForDescription": "Segure [%1$s] para o sumário", + "create.tooltip.holdForControls": "Segure [%1$s] para os controles", + "create.tooltip.keyShift": "Shift", + "create.tooltip.keyCtrl": "Ctrl", + "create.tooltip.speedRequirement": "Requerimento de velocidade: %1$s", + "create.tooltip.speedRequirement.none": "Nenhum", + "create.tooltip.speedRequirement.slow": "Devagar", + "create.tooltip.speedRequirement.medium": "Modereado", + "create.tooltip.speedRequirement.fast": "Rapido", + "create.tooltip.stressImpact": "Impacto de stress: %1$s", + "create.tooltip.stressImpact.low": " Baixo", + "create.tooltip.stressImpact.medium": " Moderado", + "create.tooltip.stressImpact.high": " Alto", + "create.tooltip.stressImpact.overstressed": ": Sobre estresse", + "create.tooltip.capacityProvided": "Capacidade de stress cinético: %1$s", + "create.tooltip.capacityProvided.low": " Pequeno", + "create.tooltip.capacityProvided.medium": " Médio", + "create.tooltip.capacityProvided.high": " Grande", + "create.tooltip.generationSpeed": " Gera em %1$s %2$s", + "create.tooltip.analogStrength": " Força analogica: %1$s/15", - "create.mechanical_arm.extract_from": "UNLOCALIZED: Take items from %1$s", - "create.mechanical_arm.deposit_to": "UNLOCALIZED: Deposit items to %1$s", - "create.mechanical_arm.summary": "UNLOCALIZED: Mechanical Arm has %1$s input(s) and %2$s output(s).", - "create.mechanical_arm.points_outside_range": "UNLOCALIZED: %1$s selected interaction point(s) removed due to range limitations.", + "create.mechanical_arm.extract_from": " Pegar itens de %1$s", + "create.mechanical_arm.deposit_to": " Depositar itens para %1$s", + "create.mechanical_arm.summary": "Braço mecânico tem %1$s entrada(s) e %2$s saida(s).", + "create.mechanical_arm.points_outside_range": "%1$s Ponto(s) de interação removidos pelas limitações de alcance.", - "create.weighted_ejector.target_set": "UNLOCALIZED: Target Selected", - "create.weighted_ejector.target_not_valid": "UNLOCALIZED: Ejecting to Adjacent block (Target was not Valid)", - "create.weighted_ejector.no_target": "UNLOCALIZED: Ejecting to Adjacent block (No Target was Selected)", - "create.weighted_ejector.targeting": "UNLOCALIZED: Ejecting to [%1$s,%2$s,%3$s]", - "create.weighted_ejector.stack_size": "UNLOCALIZED: Ejected Stack Size", + "create.weighted_ejector.target_set": "Alvo selecionado", + "create.weighted_ejector.target_not_valid": "Ejetando para o bloco adjacente (Alvo não foi valido)", + "create.weighted_ejector.no_target": "Ejetando para o bloco adjacente (Nenhum alvo foi selecionado)", + "create.weighted_ejector.targeting": "Ejetando para [%1$s,%2$s,%3$s]", + "create.weighted_ejector.stack_size": "Tamanho da pilha ejetada", - "create.logistics.when_multiple_outputs_available": "UNLOCALIZED: When Multiple Outputs Available", + "create.logistics.when_multiple_outputs_available": "Quando multiplas saidas selecionadas", - "create.mechanical_arm.selection_mode.round_robin": "UNLOCALIZED: Round Robin", - "create.mechanical_arm.selection_mode.forced_round_robin": "UNLOCALIZED: Forced Round Robin", - "create.mechanical_arm.selection_mode.prefer_first": "UNLOCALIZED: Prefer First Target", + "create.mechanical_arm.selection_mode.round_robin": "Rodízio", + "create.mechanical_arm.selection_mode.forced_round_robin": "Rodízio forçado", + "create.mechanical_arm.selection_mode.prefer_first": "Preferir primeiro alvo", - "create.tunnel.selection_mode.split": "UNLOCALIZED: Split", - "create.tunnel.selection_mode.forced_split": "UNLOCALIZED: Forced Split", - "create.tunnel.selection_mode.round_robin": "UNLOCALIZED: Round Robin", - "create.tunnel.selection_mode.forced_round_robin": "UNLOCALIZED: Forced Round Robin", - "create.tunnel.selection_mode.prefer_nearest": "UNLOCALIZED: Prefer Nearest", - "create.tunnel.selection_mode.randomize": "UNLOCALIZED: Randomize", - "create.tunnel.selection_mode.synchronize": "UNLOCALIZED: Synchronize Inputs", + "create.tunnel.selection_mode.split": "Dividir", + "create.tunnel.selection_mode.forced_split": "Divisão forçada", + "create.tunnel.selection_mode.round_robin": "Rodízio", + "create.tunnel.selection_mode.forced_round_robin": "Rodízio forçado", + "create.tunnel.selection_mode.prefer_nearest": "Preferir o mais perto", + "create.tunnel.selection_mode.randomize": "Aleatorizar", + "create.tunnel.selection_mode.synchronize": "Sincronizar as entradas", - "create.tooltip.chute.header": "UNLOCALIZED: Chute Information", - "create.tooltip.chute.items_move_down": "UNLOCALIZED: Items move Downward", - "create.tooltip.chute.items_move_up": "UNLOCALIZED: Items move Upward", - "create.tooltip.chute.no_fans_attached": "UNLOCALIZED: No attached fans", - "create.tooltip.chute.fans_push_up": "UNLOCALIZED: Fans push from Below", - "create.tooltip.chute.fans_push_down": "UNLOCALIZED: Fans push from Above", - "create.tooltip.chute.fans_pull_up": "UNLOCALIZED: Fans pull from Above", - "create.tooltip.chute.fans_pull_down": "UNLOCALIZED: Fans pull from Below", - "create.tooltip.chute.contains": "UNLOCALIZED: Contains: %1$s x%2$s", - "create.tooltip.brass_tunnel.contains": "UNLOCALIZED: Currently distributing:", - "create.tooltip.brass_tunnel.contains_entry": "UNLOCALIZED: > %1$s x%2$s", - "create.tooltip.brass_tunnel.retrieve": "UNLOCALIZED: Right-Click to retrieve", + "create.tooltip.chute.header": "Informação da calha", + "create.tooltip.chute.items_move_down": "Itens movimentam para baixo", + "create.tooltip.chute.items_move_up": "Itens movem para cima", + "create.tooltip.chute.no_fans_attached": "Não conectado com um ventilador", + "create.tooltip.chute.fans_push_up": "Ventiladores sopram de baixo", + "create.tooltip.chute.fans_push_down": "Ventiladores sopram de cima", + "create.tooltip.chute.fans_pull_up": "Ventiladores sugam de cima", + "create.tooltip.chute.fans_pull_down": "Ventiladores sugam de baixo", + "create.tooltip.chute.contains": "Contem: %1$s x%2$s", + "create.tooltip.brass_tunnel.contains": "Distribuindo:", + "create.tooltip.brass_tunnel.contains_entry": " > %1$s x%2$s", + "create.tooltip.brass_tunnel.retrieve": "Clique direito para recuperar item", - "create.linked_controller.bind_mode": "UNLOCALIZED: Bind mode active", - "create.linked_controller.press_keybind": "UNLOCALIZED: Press %1$s, %2$s, %3$s, %4$s, %5$s or %6$s, to bind this frequency to the respective key", - "create.linked_controller.key_bound": "UNLOCALIZED: Frequency bound to %1$s", - "create.linked_controller.frequency_slot_1": "UNLOCALIZED: Keybind: %1$s, Freq. #1", - "create.linked_controller.frequency_slot_2": "UNLOCALIZED: Keybind: %1$s, Freq. #2", + "create.linked_controller.bind_mode": "Modo de vinculação", + "create.linked_controller.press_keybind": "Aperte %1$s, %2$s, %3$s, %4$s, %5$s or %6$s, para vincular essa frequencia para tecla respectiva", + "create.linked_controller.key_bound": "Frequência vinculada com %1$s", + "create.linked_controller.frequency_slot_1": "Tecla: %1$s, Freq. #1", + "create.linked_controller.frequency_slot_2": "Tecla: %1$s, Freq. #2", - "create.crafting_blueprint.crafting_slot": "UNLOCALIZED: Ingredient Slot", - "create.crafting_blueprint.filter_items_viable": "UNLOCALIZED: Advanced filter items are viable", - "create.crafting_blueprint.display_slot": "UNLOCALIZED: Display Slot", - "create.crafting_blueprint.inferred": "UNLOCALIZED: Inferred from recipe", - "create.crafting_blueprint.manually_assigned": "UNLOCALIZED: Manually assigned", - "create.crafting_blueprint.secondary_display_slot": "UNLOCALIZED: Secondary Display Slot", - "create.crafting_blueprint.optional": "UNLOCALIZED: Optional", + "create.crafting_blueprint.crafting_slot": "Slot de ingrediente", + "create.crafting_blueprint.filter_items_viable": "Filtros avançados são viaveis", + "create.crafting_blueprint.display_slot": "Slot de exibição", + "create.crafting_blueprint.inferred": "Deduzido pela receita", + "create.crafting_blueprint.manually_assigned": "Designado manualmente", + "create.crafting_blueprint.secondary_display_slot": "Slot de exibição secundario", + "create.crafting_blueprint.optional": "Opcional", - "create.potato_cannon.ammo.attack_damage": "UNLOCALIZED: %1$s Attack Damage", - "create.potato_cannon.ammo.reload_ticks": "UNLOCALIZED: %1$s Reload Ticks", - "create.potato_cannon.ammo.knockback": "UNLOCALIZED: %1$s Knockback", + "create.potato_cannon.ammo.attack_damage": " %1$s Dano de ataque", + "create.potato_cannon.ammo.reload_ticks": " %1$s Velocidade de recarregamento", + "create.potato_cannon.ammo.knockback": " %1$s Repulsão do projetil", - "create.hint.hose_pulley.title": "UNLOCALIZED: Bottomless Supply", - "create.hint.hose_pulley": "UNLOCALIZED: The targeted body of fluid is considered infinite.", - "create.hint.mechanical_arm_no_targets.title": "UNLOCALIZED: No Targets", - "create.hint.mechanical_arm_no_targets": "UNLOCALIZED: It appears this _Mechanical_ _Arm_ has not been assigned any _targets._ Select belts, depots, funnels and other blocks by _right-clicking_ them while _holding_ the _Mechanical_ _Arm_ in your _hand_.", - "create.hint.empty_bearing.title": "UNLOCALIZED: Update Bearing", - "create.hint.empty_bearing": "UNLOCALIZED: _Right-click_ the bearing with an _empty_ _hand_ to _attach_ the structure you just built in front of it.", - "create.hint.full_deployer.title": "UNLOCALIZED: Deployer Item Overflow", - "create.hint.full_deployer": "UNLOCALIZED: It appears this _Deployer_ contains _excess_ _items_ that need to be _extracted._ Use a _hopper,_ _funnel_ or other means to free it from its overflow.", + "create.hint.hose_pulley.title": "Abastecimento sem fundo", + "create.hint.hose_pulley": "O corpo de fluido selecionado é considerado infinito.", + "create.hint.mechanical_arm_no_targets.title": "Sem alvos", + "create.hint.mechanical_arm_no_targets": "Aparentemente esse _Braço_ _Mecânico_ não foi designado nenhum _alvo._ Selecione esteiras, depósitos, funis e outros blocos com o _botão direito do mouse_ enquanto _segurando_ o _Braço_ _Mecanico_ na sua _mão_.", + "create.hint.empty_bearing.title": "Atualizar o rolamento", + "create.hint.empty_bearing": " _clique com o botão direito_ o rolamento com a _mão_ _vazia_ para _conectar_ a estrutura que você construiu não frente disso.", + "create.hint.full_deployer.title": "Implantador transbordando de itens", + "create.hint.full_deployer": "Aparenta que esse _inplantador_ contém _itens_ em _excesso_ que precisam ser _extraídos._ Use um _funil,_ _funil de andesito/latão_ ou outros meios para extrair os itens excedentes.", - "create.gui.config.overlay1": "UNLOCALIZED: Hi :)", + "create.gui.config.overlay1": "Oi :)", "create.gui.config.overlay2": "UNLOCALIZED: This is a sample overlay", "create.gui.config.overlay3": "UNLOCALIZED: Click or drag with your mouse", "create.gui.config.overlay4": "UNLOCALIZED: to move this preview", @@ -1321,56 +1321,56 @@ "create.gui.config.overlay7": "UNLOCALIZED: Run /create overlay reset", "create.gui.config.overlay8": "UNLOCALIZED: to reset to the default position", - "create.command.killTPSCommand": "UNLOCALIZED: killtps", - "create.command.killTPSCommand.status.slowed_by.0": "UNLOCALIZED: [Create]: Server tick is currently slowed by %s ms :o", - "create.command.killTPSCommand.status.slowed_by.1": "UNLOCALIZED: [Create]: Server tick is slowed by %s ms now >:)", - "create.command.killTPSCommand.status.slowed_by.2": "UNLOCALIZED: [Create]: Server tick is back to regular speed :D", - "create.command.killTPSCommand.status.usage.0": "UNLOCALIZED: [Create]: use /killtps stop to bring back server tick to regular speed", - "create.command.killTPSCommand.status.usage.1": "UNLOCALIZED: [Create]: use /killtps start to artificially slow down the server tick", - "create.command.killTPSCommand.argument.tickTime": "UNLOCALIZED: tickTime", + "create.command.killTPSCommand": " killtps", + "create.command.killTPSCommand.status.slowed_by.0": " [Create]: Server tick is currently slowed by %s ms :o", + "create.command.killTPSCommand.status.slowed_by.1": " [Create]: Server tick is slowed by %s ms now >:)", + "create.command.killTPSCommand.status.slowed_by.2": " [Create]: Server tick is back to regular speed :D", + "create.command.killTPSCommand.status.usage.0": " [Create]: use /killtps stop to bring back server tick to regular speed", + "create.command.killTPSCommand.status.usage.1": " [Create]: use /killtps start to artificially slow down the server tick", + "create.command.killTPSCommand.argument.tickTime": "tickTime", - "create.contraption.minecart_contraption_too_big": "UNLOCALIZED: This Cart Contraption seems too big to pick up", - "create.contraption.minecart_contraption_illegal_pickup": "UNLOCALIZED: A mystical force is binding this Cart Contraption to the world", + "create.contraption.minecart_contraption_too_big": "Essa engenhoca de carrinho aparenta ser muita grande para pegar", + "create.contraption.minecart_contraption_illegal_pickup": "Uma força mistica esta segurando esta engenhoca de carrinho", "_": "->------------------------] Subtitles [------------------------<-", - "create.subtitle.contraption_disassemble": "UNLOCALIZED: Contraption stops", - "create.subtitle.peculiar_bell_use": "UNLOCALIZED: Peculiar Bell tolls", - "create.subtitle.mixing": "UNLOCALIZED: Mixing noises", - "create.subtitle.mechanical_press_activation_belt": "UNLOCALIZED: Mechanical Press bonks", - "create.subtitle.fwoomp": "UNLOCALIZED: Potato Launcher fwoomps", - "create.subtitle.worldshaper_place": "UNLOCALIZED: Worldshaper zaps", - "create.subtitle.sanding_long": "UNLOCALIZED: Sanding noises", - "create.subtitle.crushing_1": "UNLOCALIZED: Crushing noises", - "create.subtitle.depot_slide": "UNLOCALIZED: Item slides", - "create.subtitle.saw_activate_stone": "UNLOCALIZED: Mechanical Saw activates", - "create.subtitle.blaze_munch": "UNLOCALIZED: Blaze Burner munches", - "create.subtitle.funnel_flap": "UNLOCALIZED: Funnel flaps", - "create.subtitle.schematicannon_finish": "UNLOCALIZED: Schematicannon dings", - "create.subtitle.haunted_bell_use": "UNLOCALIZED: Haunted Bell tolls", - "create.subtitle.scroll_value": "UNLOCALIZED: Scroll-input clicks", - "create.subtitle.crafter_craft": "UNLOCALIZED: Crafter crafts", - "create.subtitle.controller_put": "UNLOCALIZED: Controller thumps", - "create.subtitle.cranking": "UNLOCALIZED: Hand Crank turns", - "create.subtitle.wrench_remove": "UNLOCALIZED: Component breaks", - "create.subtitle.sanding_short": "UNLOCALIZED: Sanding noises", - "create.subtitle.cogs": "UNLOCALIZED: Cogwheels rumble", - "create.subtitle.slime_added": "UNLOCALIZED: Slime squishes", - "create.subtitle.wrench_rotate": "UNLOCALIZED: Wrench used", - "create.subtitle.potato_hit": "UNLOCALIZED: Vegetable impacts", - "create.subtitle.saw_activate_wood": "UNLOCALIZED: Mechanical Saw activates", - "create.subtitle.haunted_bell_convert": "UNLOCALIZED: Haunted Bell awakens", - "create.subtitle.deny": "UNLOCALIZED: Declining boop", - "create.subtitle.controller_click": "UNLOCALIZED: Controller clicks", - "create.subtitle.schematicannon_launch_block": "UNLOCALIZED: Schematicannon fires", - "create.subtitle.copper_armor_equip": "UNLOCALIZED: Diving equipment clinks", - "create.subtitle.controller_take": "UNLOCALIZED: Lectern empties", - "create.subtitle.mechanical_press_activation": "UNLOCALIZED: Mechanical Press clangs", - "create.subtitle.contraption_assemble": "UNLOCALIZED: Contraption moves", - "create.subtitle.crafter_click": "UNLOCALIZED: Crafter clicks", - "create.subtitle.depot_plop": "UNLOCALIZED: Item lands", - "create.subtitle.confirm": "UNLOCALIZED: Affirmative ding", + "create.subtitle.contraption_disassemble": "Engenhoca para", + "create.subtitle.peculiar_bell_use": "Sino peculiar toca", + "create.subtitle.mixing": "Sons de mistura", + "create.subtitle.mechanical_press_activation_belt": "Bonks da prensa mecanica", + "create.subtitle.fwoomp": "Fwoomps do canhão de batata", + "create.subtitle.worldshaper_place": "Zaps do terraformador", + "create.subtitle.sanding_long": "Sons de lixa", + "create.subtitle.crushing_1": "Sons de trituração", + "create.subtitle.depot_slide": "Item escorrega", + "create.subtitle.saw_activate_stone": "Serra mecânica ativa", + "create.subtitle.blaze_munch": "Queimador de blazer mastiga", + "create.subtitle.funnel_flap": "Abas do funil batendo", + "create.subtitle.schematicannon_finish": "Ding do canhão de esquema", + "create.subtitle.haunted_bell_use": "Sino assombrado toca", + "create.subtitle.scroll_value": "click do scroll", + "create.subtitle.crafter_craft": "Fabricador fábrica", + "create.subtitle.controller_put": "Thumps do controle", + "create.subtitle.cranking": "Manivela gira", + "create.subtitle.wrench_remove": "Componente quebra", + "create.subtitle.sanding_short": "Sons de lixa", + "create.subtitle.cogs": "tremer da rodas dentadas", + "create.subtitle.slime_added": "Slime sendo espremido", + "create.subtitle.wrench_rotate": "Chave inglesa usada", + "create.subtitle.potato_hit": "Impacto vegetal", + "create.subtitle.saw_activate_wood": "Serra mecânica ativa", + "create.subtitle.haunted_bell_convert": "Sino assombrado acorda", + "create.subtitle.deny": "Boop de negação", + "create.subtitle.controller_click": "Clicks do controle", + "create.subtitle.schematicannon_launch_block": "Canhão de esquema atira", + "create.subtitle.copper_armor_equip": "Tilintar dos equipamentos de mergulho", + "create.subtitle.controller_take": "Atril esvaziado", + "create.subtitle.mechanical_press_activation": "Clang da prensa mecânica", + "create.subtitle.contraption_assemble": "Engenhoca move", + "create.subtitle.crafter_click": "Clicks do fabricador", + "create.subtitle.depot_plop": "Item pousa", + "create.subtitle.confirm": "Ding afirmativo", "_": "->------------------------] Item Descriptions [------------------------<-", 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 17caaa59a..cd279ada6 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: 2", + "_": "Missing Localizations: 0", "_": "->------------------------] Game Elements [------------------------<-", @@ -54,14 +54,14 @@ "block.create.cogwheel": "齿轮", "block.create.content_observer": "物品侦测器", "block.create.controller_rail": "控制铁轨", - "block.create.copper_backtank": "铜制背罐", + "block.create.copper_backtank": "铜背罐", "block.create.copper_casing": "铜机壳", - "block.create.copper_shingle_slab": "铜砖块台阶", - "block.create.copper_shingle_stairs": "铜砖块楼梯", - "block.create.copper_shingles": "铜砖块", - "block.create.copper_tile_slab": "铜瓦块台阶", - "block.create.copper_tile_stairs": "铜瓦块楼梯", - "block.create.copper_tiles": "铜瓦块", + "block.create.copper_shingle_slab": "铜砖瓦台阶", + "block.create.copper_shingle_stairs": "铜砖瓦楼梯", + "block.create.copper_shingles": "铜砖瓦", + "block.create.copper_tile_slab": "铜瓦台阶", + "block.create.copper_tile_stairs": "铜瓦楼梯", + "block.create.copper_tiles": "铜瓦", "block.create.copper_valve_handle": "铜阀门手轮", "block.create.creative_crate": "创造板条箱", "block.create.creative_fluid_tank": "创造流体储罐", @@ -201,12 +201,12 @@ "block.create.encased_chain_drive": "链式传动箱", "block.create.encased_fan": "鼓风机", "block.create.encased_fluid_pipe": "流体管道箱", - "block.create.exposed_copper_shingle_slab": "斑驳的铜砖块台阶", - "block.create.exposed_copper_shingle_stairs": "斑驳的铜砖块楼梯", - "block.create.exposed_copper_shingles": "斑驳的铜砖块", - "block.create.exposed_copper_tile_slab": "斑驳的铜瓦块台阶", - "block.create.exposed_copper_tile_stairs": "斑驳的铜瓦块楼梯", - "block.create.exposed_copper_tiles": "斑驳的铜瓦块", + "block.create.exposed_copper_shingle_slab": "斑驳的铜砖瓦台阶", + "block.create.exposed_copper_shingle_stairs": "斑驳的铜砖瓦楼梯", + "block.create.exposed_copper_shingles": "斑驳的铜砖瓦", + "block.create.exposed_copper_tile_slab": "斑驳的铜瓦台阶", + "block.create.exposed_copper_tile_stairs": "斑驳的铜瓦楼梯", + "block.create.exposed_copper_tiles": "斑驳的铜瓦", "block.create.fluid_pipe": "流体管道", "block.create.fluid_tank": "流体储罐", "block.create.fluid_valve": "流体阀门", @@ -231,7 +231,7 @@ "block.create.green_toolbox": "绿色工具箱", "block.create.green_valve_handle": "绿色阀门手轮", "block.create.hand_crank": "手摇曲柄", - "block.create.haunted_bell": "森魂钟", + "block.create.haunted_bell": "缠魂钟", "block.create.honey": "蜂蜜", "block.create.horizontal_framed_glass": "水平边框玻璃", "block.create.horizontal_framed_glass_pane": "水平边框玻璃板", @@ -308,12 +308,12 @@ "block.create.orange_valve_handle": "橙色阀门手轮", "block.create.ornate_iron_window": "华丽铁窗户", "block.create.ornate_iron_window_pane": "华丽铁窗户板", - "block.create.oxidized_copper_shingle_slab": "氧化的铜砖块台阶", - "block.create.oxidized_copper_shingle_stairs": "氧化的铜砖块楼梯", - "block.create.oxidized_copper_shingles": "氧化的铜砖块", - "block.create.oxidized_copper_tile_slab": "氧化的铜瓦块台阶", - "block.create.oxidized_copper_tile_stairs": "氧化的铜瓦块楼梯", - "block.create.oxidized_copper_tiles": "氧化的铜瓦块", + "block.create.oxidized_copper_shingle_slab": "氧化的铜砖瓦台阶", + "block.create.oxidized_copper_shingle_stairs": "氧化的铜砖瓦楼梯", + "block.create.oxidized_copper_shingles": "氧化的铜砖瓦", + "block.create.oxidized_copper_tile_slab": "氧化的铜瓦台阶", + "block.create.oxidized_copper_tile_stairs": "氧化的铜瓦楼梯", + "block.create.oxidized_copper_tiles": "氧化的铜瓦", "block.create.peculiar_bell": "奇异钟", "block.create.pink_nixie_tube": "粉红色辉光管", "block.create.pink_sail": "粉红色风帆", @@ -477,7 +477,7 @@ "block.create.spruce_window_pane": "云杉木窗户板", "block.create.sticker": "黏着器", "block.create.sticky_mechanical_piston": "黏性动力活塞", - "block.create.stockpile_switch": "存量转换器", + "block.create.stockpile_switch": "存量转信器", "block.create.stressometer": "应力表", "block.create.tiled_glass": "十字玻璃窗", "block.create.tiled_glass_pane": "十字玻璃窗户板", @@ -490,36 +490,36 @@ "block.create.warped_window": "诡异木窗户", "block.create.warped_window_pane": "诡异木窗户板", "block.create.water_wheel": "水车", - "block.create.waxed_copper_shingle_slab": "涂蜡铜砖块台阶", - "block.create.waxed_copper_shingle_stairs": "涂蜡铜砖块楼梯", - "block.create.waxed_copper_shingles": "涂蜡铜砖块", - "block.create.waxed_copper_tile_slab": "涂蜡铜瓦块台阶", - "block.create.waxed_copper_tile_stairs": "涂蜡铜瓦块楼梯", - "block.create.waxed_copper_tiles": "涂蜡铜瓦块", - "block.create.waxed_exposed_copper_shingle_slab": "斑驳的涂蜡铜砖块台阶", - "block.create.waxed_exposed_copper_shingle_stairs": "斑驳的涂蜡铜砖块楼梯", - "block.create.waxed_exposed_copper_shingles": "斑驳的涂蜡铜砖块", - "block.create.waxed_exposed_copper_tile_slab": "斑驳的涂蜡铜瓦块台阶", - "block.create.waxed_exposed_copper_tile_stairs": "斑驳的涂蜡铜瓦块楼梯", - "block.create.waxed_exposed_copper_tiles": "斑驳的涂蜡铜瓦块", - "block.create.waxed_oxidized_copper_shingle_slab": "氧化的涂蜡铜砖块台阶", - "block.create.waxed_oxidized_copper_shingle_stairs": "氧化的涂蜡铜砖块楼梯", - "block.create.waxed_oxidized_copper_shingles": "氧化的涂蜡铜砖块", - "block.create.waxed_oxidized_copper_tile_slab": "氧化的涂蜡铜瓦块台阶", - "block.create.waxed_oxidized_copper_tile_stairs": "氧化的涂蜡铜瓦块楼梯", - "block.create.waxed_oxidized_copper_tiles": "氧化的涂蜡铜瓦块", - "block.create.waxed_weathered_copper_shingle_slab": "锈蚀的涂蜡铜砖块台阶", - "block.create.waxed_weathered_copper_shingle_stairs": "锈蚀的涂蜡铜砖块楼梯", - "block.create.waxed_weathered_copper_shingles": "锈蚀的涂蜡铜砖块", - "block.create.waxed_weathered_copper_tile_slab": "锈蚀的涂蜡铜瓦块台阶", - "block.create.waxed_weathered_copper_tile_stairs": "锈蚀的涂蜡铜瓦块楼梯", - "block.create.waxed_weathered_copper_tiles": "锈蚀的涂蜡铜瓦块", - "block.create.weathered_copper_shingle_slab": "锈蚀的铜砖块台阶", - "block.create.weathered_copper_shingle_stairs": "锈蚀的铜砖块楼梯", - "block.create.weathered_copper_shingles": "锈蚀的铜砖块", - "block.create.weathered_copper_tile_slab": "锈蚀的铜瓦块台阶", - "block.create.weathered_copper_tile_stairs": "锈蚀的铜瓦块楼梯", - "block.create.weathered_copper_tiles": "锈蚀的铜瓦块", + "block.create.waxed_copper_shingle_slab": "涂蜡铜砖瓦台阶", + "block.create.waxed_copper_shingle_stairs": "涂蜡铜砖瓦楼梯", + "block.create.waxed_copper_shingles": "涂蜡铜砖瓦", + "block.create.waxed_copper_tile_slab": "涂蜡铜瓦台阶", + "block.create.waxed_copper_tile_stairs": "涂蜡铜瓦楼梯", + "block.create.waxed_copper_tiles": "涂蜡铜瓦", + "block.create.waxed_exposed_copper_shingle_slab": "斑驳的涂蜡铜砖瓦台阶", + "block.create.waxed_exposed_copper_shingle_stairs": "斑驳的涂蜡铜砖瓦楼梯", + "block.create.waxed_exposed_copper_shingles": "斑驳的涂蜡铜砖瓦", + "block.create.waxed_exposed_copper_tile_slab": "斑驳的涂蜡铜瓦台阶", + "block.create.waxed_exposed_copper_tile_stairs": "斑驳的涂蜡铜瓦楼梯", + "block.create.waxed_exposed_copper_tiles": "斑驳的涂蜡铜瓦", + "block.create.waxed_oxidized_copper_shingle_slab": "氧化的涂蜡铜砖瓦台阶", + "block.create.waxed_oxidized_copper_shingle_stairs": "氧化的涂蜡铜砖瓦楼梯", + "block.create.waxed_oxidized_copper_shingles": "氧化的涂蜡铜砖瓦", + "block.create.waxed_oxidized_copper_tile_slab": "氧化的涂蜡铜瓦台阶", + "block.create.waxed_oxidized_copper_tile_stairs": "氧化的涂蜡铜瓦楼梯", + "block.create.waxed_oxidized_copper_tiles": "氧化的涂蜡铜瓦", + "block.create.waxed_weathered_copper_shingle_slab": "锈蚀的涂蜡铜砖瓦台阶", + "block.create.waxed_weathered_copper_shingle_stairs": "锈蚀的涂蜡铜砖瓦楼梯", + "block.create.waxed_weathered_copper_shingles": "锈蚀的涂蜡铜砖瓦", + "block.create.waxed_weathered_copper_tile_slab": "锈蚀的涂蜡铜瓦台阶", + "block.create.waxed_weathered_copper_tile_stairs": "锈蚀的涂蜡铜瓦楼梯", + "block.create.waxed_weathered_copper_tiles": "锈蚀的涂蜡铜瓦", + "block.create.weathered_copper_shingle_slab": "锈蚀的铜砖瓦台阶", + "block.create.weathered_copper_shingle_stairs": "锈蚀的铜砖瓦楼梯", + "block.create.weathered_copper_shingles": "锈蚀的铜砖瓦", + "block.create.weathered_copper_tile_slab": "锈蚀的铜瓦台阶", + "block.create.weathered_copper_tile_stairs": "锈蚀的铜瓦楼梯", + "block.create.weathered_copper_tiles": "锈蚀的铜瓦", "block.create.weighted_ejector": "弹射置物台", "block.create.white_nixie_tube": "白色辉光管", "block.create.white_sail": "白色风帆", @@ -548,7 +548,7 @@ "entity.create.super_glue": "强力胶", "fluid.create.potion": "药水", - "fluid.create.tea": "茶", + "fluid.create.tea": "建造工茶水", "item.create.andesite_alloy": "安山合金", "item.create.attribute_filter": "属性过滤器", @@ -561,18 +561,18 @@ "item.create.brass_nugget": "黄铜粒", "item.create.brass_sheet": "黄铜板", "item.create.builders_tea": "建造工茶饮", - "item.create.chest_minecart_contraption": "装配过的动力矿车", + "item.create.chest_minecart_contraption": "装配过的运输矿车", "item.create.chocolate_bucket": "巧克力桶", "item.create.chocolate_glazed_berries": "巧克力包层浆果", "item.create.chromatic_compound": "异彩化合物", - "item.create.cinder_flour": "下界面粉", - "item.create.copper_backtank": "铜制背罐", - "item.create.copper_backtank_placeable": "UNLOCALIZED: Copper Backtank Placeable", + "item.create.cinder_flour": "余烬面粉", + "item.create.copper_backtank": "铜背罐", + "item.create.copper_backtank_placeable": "可放置的铜背罐", "item.create.copper_nugget": "铜粒", "item.create.copper_sheet": "铜板", - "item.create.crafter_slot_cover": "合成器盖板", + "item.create.crafter_slot_cover": "合成槽盖板", "item.create.crafting_blueprint": "合成蓝图", - "item.create.creative_blaze_cake": "创造模式烈焰蛋糕", + "item.create.creative_blaze_cake": "创造烈焰蛋糕", "item.create.crushed_aluminum_ore": "粉碎铝矿石", "item.create.crushed_copper_ore": "粉碎铜矿石", "item.create.crushed_gold_ore": "粉碎金矿石", @@ -638,66 +638,66 @@ "advancement.create.root": "欢迎来到机械动力", "advancement.create.root.desc": "是时候来制作一些超赞的机械装置了!", "advancement.create.andesite_alloy": "头韵狂魔(Alliterations Aplenty)", - "advancement.create.andesite_alloy.desc": "机械动力的材料名字都很古怪,安山合金(Andesite Alloy)就是其中之一。", + "advancement.create.andesite_alloy.desc": "机械动力的材料名字都很古怪,安山合金(Andesite Alloy)就是其中之一", "advancement.create.its_alive": "鲜活的机械生命", - "advancement.create.its_alive.desc": "首次激活动力学组件。", + "advancement.create.its_alive.desc": "首次激活动力学组件", "advancement.create.shifting_gears": "换挡,加速,起飞!", - "advancement.create.shifting_gears.desc": "将大齿轮连接到小齿轮上,可以改变装置的转速。", + "advancement.create.shifting_gears.desc": "将大齿轮连接到小齿轮上,可以改变装置的转速", "advancement.create.overstressed": "过载", - "advancement.create.overstressed.desc": "首次使能量网络过载。", + "advancement.create.overstressed.desc": "首次使能量网络过载", "advancement.create.belt": "海带传动", "advancement.create.belt.desc": "用传送带连接两个传动杆", "advancement.create.tunnel": "躲起来!", - "advancement.create.tunnel.desc": "用隧道装饰传送带。", + "advancement.create.tunnel.desc": "用隧道装饰传送带", "advancement.create.splitter_tunnel": "分而治之", - "advancement.create.splitter_tunnel.desc": "用黄铜隧道设计一个分流器。", + "advancement.create.splitter_tunnel.desc": "用黄铜隧道设计一个分流器", "advancement.create.chute": "轰然倒塌", - "advancement.create.chute.desc": "放置一个溜槽(垂直版本的传送带)。", + "advancement.create.chute.desc": "放置一个溜槽(垂直版本的传送带)", "advancement.create.upward_chute": "空中劫持", - "advancement.create.upward_chute.desc": "目睹抛出的物品飞入带风扇的溜槽。", + "advancement.create.upward_chute.desc": "目睹抛出的物品飞入带风扇的溜槽", "advancement.create.belt_funnel": "漏斗垂帘", - "advancement.create.belt_funnel.desc": "将侧向漏斗放在传送带或置物台的顶部,并观察到特殊材质的漏斗。", + "advancement.create.belt_funnel.desc": "将侧向漏斗放在传送带或置物台的顶部,并观察到特殊变种的漏斗", "advancement.create.belt_funnel_kiss": "鹦鹉和垂翼", - "advancement.create.belt_funnel_kiss.desc": "让两个安装在传送带上的漏斗深情相吻。", + "advancement.create.belt_funnel_kiss.desc": "让两个安装在传送带上的漏斗深情相吻", "advancement.create.fan": "动力御气师", "advancement.create.fan.desc": "飘在鼓风机吹出的气流上", "advancement.create.fan_lava": "地热取暖", - "advancement.create.fan_lava.desc": "被熔炼气流烤的酥脆。", + "advancement.create.fan_lava.desc": "被熔炼气流烤的酥脆", "advancement.create.fan_water": "奇妙的洗涤流程", - "advancement.create.fan_water.desc": "在洗涤气流里洗了个澡。", + "advancement.create.fan_water.desc": "在洗涤气流里洗了个澡", "advancement.create.fan_smoke": "动力风箱", - "advancement.create.fan_smoke.desc": "被烟熏气流熏得满脸黑。", + "advancement.create.fan_smoke.desc": "被烟熏气流熏得满脸黑", "advancement.create.wrench": "细节调整", - "advancement.create.wrench.desc": "做出一个方便调整方块的扳手", + "advancement.create.wrench.desc": "做出一个方便调整装置的扳手", "advancement.create.goggles": "应力,一目了然", - "advancement.create.goggles.desc": "做出一个能看到机器动能信息的工程师护目镜", + "advancement.create.goggles.desc": "做出一个能看到机器动力学信息的工程师护目镜", "advancement.create.speedometer": "精密的速度控制", - "advancement.create.speedometer.desc": "放置一个速度表,并且带上工程师护目镜来读取速度数据", + "advancement.create.speedometer.desc": "放置一个速度表,并且戴上工程师护目镜来读取速度数据", "advancement.create.stressometer": "精密的应力控制", - "advancement.create.stressometer.desc": "放置一个应力表,并且带上工程师护目镜来读取应力数据", + "advancement.create.stressometer.desc": "放置一个应力表,并且戴上工程师护目镜来读取应力数据", "advancement.create.aesthetics": "什么叫美学,这就叫美学!", - "advancement.create.aesthetics.desc": "将支架放在传动杆,管道和齿轮上。", + "advancement.create.aesthetics.desc": "将支架放在传动杆,管道和齿轮上", "advancement.create.reinforced": "什么叫强化,这就叫强化!", - "advancement.create.reinforced.desc": "在传动杆,管道和传送带上使用机壳加固。", + "advancement.create.reinforced.desc": "在传动杆,管道和传送带上使用机壳加固", "advancement.create.water_wheel": "掌控水流", - "advancement.create.water_wheel.desc": "放置一个水车并且让它开始旋转", + "advancement.create.water_wheel.desc": "放置一个水车并且让它开始旋转!", "advancement.create.chocolate_wheel": "美味动力", - "advancement.create.chocolate_wheel.desc": "用熔融巧克力驱动水车。", + "advancement.create.chocolate_wheel.desc": "用熔融巧克力驱动水车", "advancement.create.lava_wheel": "风火轮", - "advancement.create.lava_wheel.desc": "按理说根本不可能运转得起来。", + "advancement.create.lava_wheel.desc": "按理说根本不可能运转得起来", "advancement.create.cuckoo": "到点儿了吗?", - "advancement.create.cuckoo.desc": "目睹布谷鸟钟提醒你该睡觉觉了。", + "advancement.create.cuckoo.desc": "目睹布谷鸟闹钟提醒你该睡觉觉了", "advancement.create.millstone": "便携式粉碎机", "advancement.create.millstone.desc": "放置一个石磨并且为其供能", "advancement.create.windmill": "微风吹拂", - "advancement.create.windmill.desc": "组装风车。", + "advancement.create.windmill.desc": "组装风车", "advancement.create.maxed_windmill": "强风肆虐", - "advancement.create.maxed_windmill.desc": "组装最大强度的风车。", + "advancement.create.maxed_windmill.desc": "组装最大强度的风车", "advancement.create.andesite_casing": "安山时代", "advancement.create.andesite_casing.desc": "使用安山合金和木头来合成一个安山机壳", "advancement.create.mechanical_drill": "坚如磐石,势如破竹", "advancement.create.mechanical_drill.desc": "放置一个动力钻头并且为其供能", - "advancement.create.press": "'Duang!'", + "advancement.create.press": "“Duang!”", "advancement.create.press.desc": "使用辊压机来辊压一些板子", "advancement.create.polished_rose_quartz": "粉色钻石", "advancement.create.polished_rose_quartz.desc": "用砂纸将玫瑰石英打磨至透明", @@ -708,81 +708,81 @@ "advancement.create.basin": "快到碗里来", "advancement.create.basin.desc": "放置一个工作盆,并且往里面放些东西", "advancement.create.mixer": "均匀搅拌", - "advancement.create.mixer.desc": "将搅拌机放在工作盆上方,并且使其搅拌盆内物品", + "advancement.create.mixer.desc": "将搅拌器放在工作盆上方,并且使其搅拌盆内物品", "advancement.create.blaze_burner": "活炉", - "advancement.create.blaze_burner.desc": "获得一个烈焰人燃烧室。", + "advancement.create.blaze_burner.desc": "获得一个烈焰人燃烧室", "advancement.create.compact": "快乐压缩", "advancement.create.compact.desc": "使用辊压机在工作盆中压缩一些物品", "advancement.create.brass": "真正的合金", - "advancement.create.brass.desc": "使用粉碎锌矿石和粉碎铜矿石来制作粉碎黄铜", + "advancement.create.brass.desc": "使用粉碎锌矿石和粉碎铜矿石来制作黄铜", "advancement.create.brass_casing": "黄铜时代", "advancement.create.brass_casing.desc": "用黄铜和木头制作一个黄铜机壳", "advancement.create.copper_casing": "铜器时代", - "advancement.create.copper_casing.desc": "使用铜和木头制作一个铜制机壳", + "advancement.create.copper_casing.desc": "使用铜和木头制作一个铜机壳", "advancement.create.spout": "哗啦啦", - "advancement.create.spout.desc": "观察注液器灌满物品。", + "advancement.create.spout.desc": "观察注液器灌满物品", "advancement.create.spout_potion": "环球酿造厂", - "advancement.create.spout_potion.desc": "观察注液器注入药水到玻璃瓶。", + "advancement.create.spout_potion.desc": "观察注液器注入药水到玻璃瓶", "advancement.create.chocolate": "幻想世界", - "advancement.create.chocolate.desc": "获取一桶熔融巧克力。", + "advancement.create.chocolate.desc": "获取一桶熔融巧克力", "advancement.create.item_drain": "滚筒排液", - "advancement.create.item_drain.desc": "观察流体物品被分液池抽空。", + "advancement.create.item_drain.desc": "观察流体物品被分液池抽空", "advancement.create.chained_item_drain": "翻滚吧!", - "advancement.create.chained_item_drain.desc": "观察物品穿过多个链状分布的分液池。", + "advancement.create.chained_item_drain.desc": "观察物品滚过几个相链接的分液池", "advancement.create.glass_pipe": "流之观察者", - "advancement.create.glass_pipe.desc": "透过带窗的流体管道观察流体在管道中流淌。使用扳手可打开直线流体管道的窗户。", + "advancement.create.glass_pipe.desc": "透过带窗的流体管道观察流体在管道中流淌,使用扳手可打开直线流体管道的窗户", "advancement.create.pipe_collision": "Never cross the Streams!", - "advancement.create.pipe_collision.desc": "观察两种流体在管道网络中相会。", + "advancement.create.pipe_collision.desc": "观察两种流体在管道网络中相会", "advancement.create.pipe_spill": "漏水啦!", - "advancement.create.pipe_spill.desc": "观察管道的开口端将流体排放或放置到世界中。", + "advancement.create.pipe_spill.desc": "观察管道的开口端将流体排放或放置到世界中", "advancement.create.hose_pulley": "工业泄漏", - "advancement.create.hose_pulley.desc": "放下一个软管滑轮,观察它排干或填充一大片液体。", + "advancement.create.hose_pulley.desc": "放下一个软管滑轮,观察它排干或填充一大片流体", "advancement.create.infinite_water": "抽干大海", - "advancement.create.infinite_water.desc": "从大到足以被认为是无限的水源中抽水。", + "advancement.create.infinite_water.desc": "从大到足以被认为是无限的水源中抽水", "advancement.create.infinite_lava": "汲取行星核心", - "advancement.create.infinite_lava.desc": "从广阔的熔岩湖中抽出熔岩。", + "advancement.create.infinite_lava.desc": "从广阔的熔岩湖中抽出熔岩", "advancement.create.infinite_chocolate": "美梦不饶人", - "advancement.create.infinite_chocolate.desc": "从大到足以被被视为无限的巧克力海中抽取巧克力。", + "advancement.create.infinite_chocolate.desc": "从大到足以被被视为无限的巧克力海中抽取巧克力", "advancement.create.crafter": "自动化装配", - "advancement.create.crafter.desc": "放置一些机械合成台并且为其供能", + "advancement.create.crafter.desc": "放置一些动力合成器并且为其供能", "advancement.create.clockwork_bearing": "巧械时钟", - "advancement.create.clockwork_bearing.desc": "组装安装在发条轴承上的装置。", + "advancement.create.clockwork_bearing.desc": "组装安装在发条轴承上的装置", "advancement.create.nixie_tube": "花样符号", - "advancement.create.nixie_tube.desc": "获取并放下一对辉光管。", + "advancement.create.nixie_tube.desc": "获取并放下一对辉光管", "advancement.create.deployer": "我就指着你了咋地?", - "advancement.create.deployer.desc": "放置并且功能一个机械手。这可是你右手的完美复制品", + "advancement.create.deployer.desc": "放置并且启动一个机械手,这可是你右手的完美复制品", "advancement.create.speed_controller": "工程师的眼中钉", - "advancement.create.speed_controller.desc": "放置一个转速控制器,这是换档的终极装置。", + "advancement.create.speed_controller.desc": "放置一个转速控制器,这是换档的终极装置", "advancement.create.flywheel": "工厂之心", - "advancement.create.flywheel.desc": "将引擎成功连接到飞轮。", + "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.precision_mechanism.desc": "装配一个精密构件", "advancement.create.mechanical_arm": "飞转的手!", - "advancement.create.mechanical_arm.desc": "制作机械臂,选择输入和输出,放置并给予它动力,然后看着它为你完成所有工作。", + "advancement.create.mechanical_arm.desc": "制作动力臂,选择输入和输出,放置并给予它动力,然后看着它为你完成所有工作", "advancement.create.musical_arm": "没人能在我的 BGM 里打败我!", - "advancement.create.musical_arm.desc": "使用动力臂播放唱片。", + "advancement.create.musical_arm.desc": "使用动力臂播放唱片", "advancement.create.arm_many_targets": "掌控全局", - "advancement.create.arm_many_targets.desc": "配置一个有十个或更多输出位置的机械臂。", + "advancement.create.arm_many_targets.desc": "配置一个有十个或更多输出位置的动力臂", "advancement.create.arm_blaze_burner": "熊熊燃烧", - "advancement.create.arm_blaze_burner.desc": "指导机械臂给烈焰人燃烧室投食。", + "advancement.create.arm_blaze_burner.desc": "指导动力臂给烈焰人燃烧室投食", "advancement.create.fist_bump": "来碰个拳,哥们~", "advancement.create.fist_bump.desc": "使两个机械手互相碰拳", "advancement.create.crushing_wheel": "一对大家伙", "advancement.create.crushing_wheel.desc": "制作一些能更快粉碎物品的粉碎轮", "advancement.create.blaze_cake": "糖份超标", - "advancement.create.blaze_cake.desc": "给烈焰人燃烧室烤一份特别蛋糕。", + "advancement.create.blaze_cake.desc": "给烈焰人燃烧室烤一份特别蛋糕", "advancement.create.wand_of_symmetry": "简单的镜面几何学", - "advancement.create.wand_of_symmetry.desc": "制作一个对称之杖", + "advancement.create.wand_of_symmetry.desc": "制作一根对称之杖", "advancement.create.extendo_grip": "biu biu biu!", "advancement.create.extendo_grip.desc": "获得一个伸缩机械手", "advancement.create.potato_cannon": "Fwoomp!", - "advancement.create.potato_cannon.desc": "用土豆加农炮击杀一个生物。", + "advancement.create.potato_cannon.desc": "用土豆加农炮击杀一个生物", "advancement.create.dual_extendo_grip": "biu——biu——biu——", - "advancement.create.dual_extendo_grip.desc": "双持伸缩机械手,超人般的触碰距离。", + "advancement.create.dual_extendo_grip.desc": "双持伸缩机械手,超人般的触碰距离", "advancement.create.eob": "Beta 版结束", - "advancement.create.eob.desc": "期待未来会有更多的内容。<3", + "advancement.create.eob.desc": "期待未来会有更多的内容 <3", "_": "->------------------------] UI & Messages [------------------------<-", @@ -791,29 +791,29 @@ "itemGroup.create.palettes": "机械动力丨建筑方块", "death.attack.create.crush": "%1$s被压扁了", - "death.attack.create.crush.player": "%1$s被%2$s推进了粉碎机", + "death.attack.create.crush.player": "%1$s被%2$s推进了粉碎轮", "death.attack.create.fan_fire": "%1$s试图接受热风的洗礼", "death.attack.create.fan_fire.player": "%2$s给了%1$s一次热风的洗礼", "death.attack.create.fan_lava": "%1$s在接受热风的洗礼中浴火焚身", "death.attack.create.fan_lava.player": "%1$s被%2$s火化了", "death.attack.create.mechanical_drill": "%1$s被钻头钻的坏掉了", "death.attack.create.mechanical_drill.player": "%1$s因为%2$s和钻头来了一次亲密接触", - "death.attack.create.mechanical_saw": "%1$s被圆锯切成了两截", - "death.attack.create.mechanical_saw.player": "%1$s被%2$s按在圆锯上切碎了", + "death.attack.create.mechanical_saw": "%1$s被动力锯切成了两截", + "death.attack.create.mechanical_saw.player": "%1$s被%2$s按在动力锯上切碎了", "death.attack.create.potato_cannon": "%1$s被%2$s的土豆糊了一脸", "death.attack.create.potato_cannon.item": "%1$s被%2$s用%3$s射死了", - "death.attack.create.cuckoo_clock_explosion": "%1$s被布谷鸟钟炸得粉身碎骨", - "death.attack.create.cuckoo_clock_explosion.player": "%1$s被布谷鸟钟炸得粉身碎骨", + "death.attack.create.cuckoo_clock_explosion": "%1$s被布谷鸟闹钟炸得粉身碎骨", + "death.attack.create.cuckoo_clock_explosion.player": "%1$s被布谷鸟闹钟炸得粉身碎骨", "create.block.deployer.damage_source_name": "二五仔机械手", "create.block.cart_assembler.invalid": "请将矿车装配器放置在铁轨上", - "create.menu.return": "返回上一级菜单", - "create.menu.configure": "配置...", - "create.menu.ponder_index": "思索内容清单", + "create.menu.return": "返回上级菜单", + "create.menu.configure": "配置……", + "create.menu.ponder_index": "思索索引", "create.menu.only_ingame": "仅在游戏内暂停菜单中可用", - "create.menu.project_page": "在CurseForge上查看", - "create.menu.report_bugs": "报告Create的漏洞", + "create.menu.project_page": "项目主页", + "create.menu.report_bugs": "报告问题", "create.menu.support": "支持我们", "create.recipe.crushing": "粉碎", @@ -853,7 +853,7 @@ "create.recipe.assembly.repeat": "该序列需要重复 %1$s 次", "create.recipe.assembly.junk": "随机废料", "create.recipe.processing.chance": "%1$s%%概率", - "create.recipe.deploying.not_consumed": "未消耗", + "create.recipe.deploying.not_consumed": "不消耗", "create.recipe.heat_requirement.none": "无需加热", "create.recipe.heat_requirement.heated": "加热", "create.recipe.heat_requirement.superheated": "超级加热", @@ -881,12 +881,12 @@ "create.action.saveToFile": "保存", "create.action.discard": "放弃", - "create.keyinfo.toolmenu": "工具菜单", - "create.keyinfo.toolbelt": "使用附近的工具箱", + "create.keyinfo.toolmenu": "蓝图工具菜单", + "create.keyinfo.toolbelt": "访问附近的工具箱", "create.keyinfo.scrollup": "(游戏中)向上鼠标滚轮", "create.keyinfo.scrolldown": "(游戏中)向下鼠标滚轮", - "create.gui.scrollInput.defaultTitle": "选择一个选项:", + "create.gui.scrollInput.defaultTitle": "选择一个选项:", "create.gui.scrollInput.scrollToModify": "滚动修改", "create.gui.scrollInput.scrollToAdjustAmount": "滚动修改数量", "create.gui.scrollInput.scrollToSelect": "滚动选择", @@ -910,12 +910,12 @@ "create.orientation.orthogonal": "垂直", "create.orientation.diagonal": "对角线", "create.orientation.horizontal": "水平", - "create.orientation.alongZ": "以z轴对齐", - "create.orientation.alongX": "以x轴对齐", + "create.orientation.alongZ": "以Z轴对齐", + "create.orientation.alongX": "以X轴对齐", "create.gui.terrainzapper.title": "手持式环境塑形器", "create.gui.terrainzapper.searchDiagonal": "对角线延伸", - "create.gui.terrainzapper.searchFuzzy": "忽略质料分界", + "create.gui.terrainzapper.searchFuzzy": "忽略材料分界", "create.gui.terrainzapper.patternSection": "样式", "create.gui.terrainzapper.pattern.solid": "填满", "create.gui.terrainzapper.pattern.checkered": "棋盘格", @@ -935,7 +935,7 @@ "create.gui.terrainzapper.brush.cluster": "簇状", "create.gui.terrainzapper.tool": "填充类型", "create.gui.terrainzapper.tool.fill": "填充", - "create.gui.terrainzapper.tool.place": "复写", + "create.gui.terrainzapper.tool.place": "放置", "create.gui.terrainzapper.tool.replace": "替换", "create.gui.terrainzapper.tool.clear": "清除", "create.gui.terrainzapper.tool.overlay": "覆盖", @@ -946,7 +946,7 @@ "create.terrainzapper.leftClickToSet": "鼠标左击一个方块以设置填充材料", "create.minecart_coupling.two_couplings_max": "矿车无法被连接两个以上的矿车连轴器", - "create.minecart_coupling.unloaded": "有一部分火车存在于未加载区块中", + "create.minecart_coupling.unloaded": "有一部分列车存在于未加载区块中", "create.minecart_coupling.no_loops": "矿车连轴器不能连成一个环", "create.minecart_coupling.removed": "从矿车上移除所有矿车连轴器", "create.minecart_coupling.too_far": "矿车距离你太远了", @@ -973,9 +973,9 @@ "create.logistics.fluid_filter": "流体过滤器", "create.logistics.firstFrequency": "频率 #1", "create.logistics.secondFrequency": "频率 #2", - "create.logistics.filter.apply": "已将过滤应用于%1$s。", - "create.logistics.filter.apply_click_again": "已将过滤应用于%1$s,再次点击可将手持物品数量复制到过滤器上。", - "create.logistics.filter.apply_count": "已将提取数量应用至过滤器。", + "create.logistics.filter.apply": "已将过滤应用于%1$s", + "create.logistics.filter.apply_click_again": "已将过滤应用于%1$s,再次点击可将手持物品数量复制到过滤器上", + "create.logistics.filter.apply_count": "已将提取数量应用至过滤器", "create.gui.goggles.generator_stats": "应力发生器状态:", "create.gui.goggles.kinetic_stats": "动力学状态:", @@ -984,20 +984,20 @@ "create.gui.goggles.fluid_container": "流体容器信息:", "create.gui.goggles.fluid_container.capacity": "容量:", "create.gui.assembly.exception": "无法组装该装置:", - "create.gui.assembly.exception.unmovableBlock": "无法移动的方块:(%4$s)位于 [%1$s,%2$s,%3$s]", - "create.gui.assembly.exception.chunkNotLoaded": "位于 [%1$s,%2$s,%3$s] 的方块未处于加载区块", - "create.gui.assembly.exception.structureTooLarge": "装置中的方块数量过多。\n配置的最大值为:%1$s", - "create.gui.assembly.exception.tooManyPistonPoles": "活塞加装的活塞杆数量过多。\n配置的最大值为:%1$s", + "create.gui.assembly.exception.unmovableBlock": "无法移动的方块:(%4$s)位于 [%1$s,%2$s,%3$s]", + "create.gui.assembly.exception.chunkNotLoaded": "位于 [%1$s,%2$s,%3$s] 的方块未处于加载区块", + "create.gui.assembly.exception.structureTooLarge": "装置中的方块数量过多\n配置的最大值为:%1$s", + "create.gui.assembly.exception.tooManyPistonPoles": "活塞加装的活塞杆数量过多\n配置的最大值为:%1$s", "create.gui.assembly.exception.noPistonPoles": "活塞缺失部分活塞杆", - "create.gui.assembly.exception.not_enough_sails": "相接的结构所包含的类风帆方块的数量不足:%1$s。\n至少需要 %2$s", + "create.gui.assembly.exception.not_enough_sails": "相接的结构所包含的类风帆方块的数量不足:%1$s\n至少需要 %2$s", "create.gui.gauge.info_header": "仪表信息:", "create.gui.speedometer.title": "旋转速度", "create.gui.stressometer.title": "网络应力", "create.gui.stressometer.capacity": "剩余应力量", "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.not_fast_enough": "显然%1$s_没有_达到_足够_的_工作转速_", + "create.gui.contraptions.network_overstressed": "显然装置_过载_,添加更多动力源或者_减慢_网络中高_应力影响_的组件", "create.gui.adjustable_crate.title": "板条箱", "create.gui.adjustable_crate.storageSpace": "储存空间", "create.gui.stockpile_switch.title": "储存开关", @@ -1026,10 +1026,10 @@ "create.gui.sequenced_gearshift.speed.back_fast": "两倍速,反向", "create.schematicAndQuill.dimensions": "蓝图尺寸:%1$sx%2$sx%3$s", - "create.schematicAndQuill.firstPos": "第一个位置。", - "create.schematicAndQuill.secondPos": "第二个位置。", - "create.schematicAndQuill.noTarget": "按住 Ctrl 选择空气方块。", - "create.schematicAndQuill.abort": "删除选择。", + "create.schematicAndQuill.firstPos": "第一个位置", + "create.schematicAndQuill.secondPos": "第二个位置", + "create.schematicAndQuill.noTarget": "按住 [Ctrl] 选择空气方块", + "create.schematicAndQuill.abort": "删除选择", "create.schematicAndQuill.title": "蓝图名:", "create.schematicAndQuill.convert": "立即保存并部署", "create.schematicAndQuill.fallbackName": "我的蓝图", @@ -1052,33 +1052,33 @@ "create.schematic.tool.rotate": "旋转", "create.schematic.tool.print": "打印", "create.schematic.tool.flip": "翻转", - "create.schematic.tool.deploy.description.0": "将结构移到某个位置。", - "create.schematic.tool.deploy.description.1": "在地面上单击鼠标右击以放置。", - "create.schematic.tool.deploy.description.2": "按住 Ctrl 以固定距离选择。", - "create.schematic.tool.deploy.description.3": "按住 Ctrl 鼠标滚动更改距离。", + "create.schematic.tool.deploy.description.0": "将结构移到某个位置", + "create.schematic.tool.deploy.description.1": "在地面上右击以放置", + "create.schematic.tool.deploy.description.2": "按住 [Ctrl] 以固定距离选择", + "create.schematic.tool.deploy.description.3": "按住 [Ctrl] 鼠标滚动更改距离", "create.schematic.tool.move.description.0": "水平移动蓝图", - "create.schematic.tool.move.description.1": "选定蓝图,然后按住 Ctrl 鼠标滚动移动。", + "create.schematic.tool.move.description.1": "选定蓝图,然后按住 [Ctrl] 鼠标滚动移动", "create.schematic.tool.move.description.2": "", "create.schematic.tool.move.description.3": "", "create.schematic.tool.movey.description.0": "垂直移动蓝图", - "create.schematic.tool.movey.description.1": "按住 Ctrl 鼠标滚动上下移动", + "create.schematic.tool.movey.description.1": "按住 [Ctrl] 鼠标滚动上下移动", "create.schematic.tool.movey.description.2": "", "create.schematic.tool.movey.description.3": "", - "create.schematic.tool.rotate.description.0": "围绕蓝图中心旋转蓝图。", - "create.schematic.tool.rotate.description.1": "按住 Ctrl 鼠标滚动旋转90度", + "create.schematic.tool.rotate.description.0": "围绕蓝图中心旋转蓝图", + "create.schematic.tool.rotate.description.1": "按住 [Ctrl] 鼠标滚动旋转90度", "create.schematic.tool.rotate.description.2": "", "create.schematic.tool.rotate.description.3": "", "create.schematic.tool.print.description.0": "立即将结构放置在世界上", - "create.schematic.tool.print.description.1": "右击确认当前位置。", - "create.schematic.tool.print.description.2": "该工具仅适用于创造模式。", + "create.schematic.tool.print.description.1": "[右击] 确认当前位置", + "create.schematic.tool.print.description.2": "该工具仅适用于创造模式", "create.schematic.tool.print.description.3": "", - "create.schematic.tool.flip.description.0": "沿你选择的面翻转蓝图。", - "create.schematic.tool.flip.description.1": "指向蓝图,然后按住 Ctrl 鼠标滚动将其翻转。", + "create.schematic.tool.flip.description.0": "沿你选择的面翻转蓝图", + "create.schematic.tool.flip.description.1": "指向蓝图,然后按住 [Ctrl] 鼠标滚动将其翻转", "create.schematic.tool.flip.description.2": "", "create.schematic.tool.flip.description.3": "", - "create.schematics.synchronizing": "正在同步..", - "create.schematics.uploadTooLarge": "你的蓝图超出了服务器指定的限制。", + "create.schematics.synchronizing": "正在同步……", + "create.schematics.uploadTooLarge": "你的蓝图超出了服务器指定的限制", "create.schematics.maxAllowedSize": "允许的最大蓝图文件大小为:", "create.gui.schematicTable.refresh": "刷新文件", @@ -1086,7 +1086,7 @@ "create.gui.schematicTable.title": "蓝图桌", "create.gui.schematicTable.availableSchematics": "可用蓝图", "create.gui.schematicTable.noSchematics": "没有保存的蓝图", - "create.gui.schematicTable.uploading": "正在上传...", + "create.gui.schematicTable.uploading": "正在上传……", "create.gui.schematicTable.finished": "上传完成!", "create.gui.schematicannon.title": "蓝图加农炮", "create.gui.schematicannon.listPrinter": "物品清单打印机", @@ -1104,17 +1104,17 @@ "create.gui.schematicannon.option.skipTileEntities": "保护存储方块", "create.gui.schematicannon.slot.gunpowder": "向蓝图加农炮添加火药以提供动力", "create.gui.schematicannon.slot.listPrinter": "在此处放置书以打印蓝图所需的材料清单", - "create.gui.schematicannon.slot.schematic": "在此处添加你的蓝图,务必确保其已经被部署在了特定位置", + "create.gui.schematicannon.slot.schematic": "在此处添加你的蓝图,务必确保其已经被部署在特定位置", "create.gui.schematicannon.option.skipMissing.description": "如果缺失材料,蓝图加农炮将忽略当前缺失材料并且使用其他已有材料继续工作", - "create.gui.schematicannon.option.skipTileEntities.description": "蓝图将避免更换存储方块,如箱子。", - "create.gui.schematicannon.option.dontReplaceSolid.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": "蓝图加农炮会使用任何所提供的方块来替换工作区域内的固体方块", - "create.gui.schematicannon.option.replaceWithEmpty.description": "蓝图加农炮将清理和替换工作区域内所有原本的方块。", + "create.gui.schematicannon.option.replaceWithEmpty.description": "蓝图加农炮将清理和替换工作区域内所有原本的方块", - "create.schematicannon.status.idle": "闲置中", - "create.schematicannon.status.ready": "准备中", - "create.schematicannon.status.running": "运行中", + "create.schematicannon.status.idle": "闲置", + "create.schematicannon.status.ready": "就绪", + "create.schematicannon.status.running": "正在运作", "create.schematicannon.status.finished": "已完成", "create.schematicannon.status.paused": "已暂停", "create.schematicannon.status.stopped": "已停止", @@ -1123,15 +1123,15 @@ "create.schematicannon.status.targetOutsideRange": "目标太远", "create.schematicannon.status.searching": "正在搜索", "create.schematicannon.status.skipping": "正在跳过", - "create.schematicannon.status.missingBlock": "缺少方块:", - "create.schematicannon.status.placing": "建筑中", - "create.schematicannon.status.clearing": "清除方块中", + "create.schematicannon.status.missingBlock": "缺少物品:", + "create.schematicannon.status.placing": "正在放置", + "create.schematicannon.status.clearing": "正在清除方块", "create.schematicannon.status.schematicInvalid": "蓝图无效", "create.schematicannon.status.schematicNotPlaced": "蓝图未部署", "create.schematicannon.status.schematicExpired": "蓝图文件已过期", "create.materialChecklist": "材料清单", - "create.materialChecklist.blocksNotLoaded": "*免责声明*\n\n由于相关区块没有被加载,材料列表可能不准确。", + "create.materialChecklist.blocksNotLoaded": "*免责声明*\n\n由于相关区块未被加载,材料清单可能不准确", "create.gui.filter.deny_list": "黑名单", "create.gui.filter.deny_list.description": "只通过不在黑名单中的物品,如果黑名单为空,所有物品都可以通过", @@ -1153,7 +1153,7 @@ "create.item_attributes.max_enchanted": "已达到最高附魔等级", "create.item_attributes.max_enchanted.inverted": "并未达到最高附魔等级", "create.item_attributes.renamed": "有自定义名称", - "create.item_attributes.renamed.inverted": "无自定义名称", + "create.item_attributes.renamed.inverted": "没有自定义名称", "create.item_attributes.damaged": "已损坏", "create.item_attributes.damaged.inverted": "未损坏", "create.item_attributes.badly_damaged": "严重受损", @@ -1203,8 +1203,8 @@ "create.item_attributes.book_copy_first.inverted": "不是第一代拷贝", "create.item_attributes.book_copy_second": "是第二代拷贝", "create.item_attributes.book_copy_second.inverted": "不是第二代拷贝", - "create.item_attributes.book_copy_tattered": "拷贝次数已不可查", - "create.item_attributes.book_copy_tattered.inverted": "不是拷贝次数已不可查", + "create.item_attributes.book_copy_tattered": "拷贝次数不可查", + "create.item_attributes.book_copy_tattered.inverted": "拷贝次数可查", "create.item_attributes.astralsorcery_amulet": "璀璨棱镜增强%1$s", "create.item_attributes.astralsorcery_amulet.inverted": "璀璨棱镜未增强%1$s", "create.item_attributes.astralsorcery_constellation": "与%1$s共鸣", @@ -1232,8 +1232,8 @@ "create.tooltip.keyCtrl": "Ctrl", "create.tooltip.speedRequirement": "需求转速:%1$s", "create.tooltip.speedRequirement.none": "无", - "create.tooltip.speedRequirement.slow": "UNLOCALIZED: Slow", - "create.tooltip.speedRequirement.medium": "适当", + "create.tooltip.speedRequirement.slow": "慢", + "create.tooltip.speedRequirement.medium": "中", "create.tooltip.speedRequirement.fast": "快", "create.tooltip.stressImpact": "应力影响:%1$s", "create.tooltip.stressImpact.low": "低", @@ -1249,16 +1249,16 @@ "create.mechanical_arm.extract_from": "从%1$s中拿取物品", "create.mechanical_arm.deposit_to": "将物品存储至%1$s", - "create.mechanical_arm.summary": "动力臂当前有 %1$s 个输入,%2$s 个输出。", - "create.mechanical_arm.points_outside_range": "由于距离限制,选定的交互点%1$s已被移除。", + "create.mechanical_arm.summary": "动力臂当前有 %1$s 个输入,%2$s 个输出", + "create.mechanical_arm.points_outside_range": "由于距离限制,选定的交互点%1$s已被移除", "create.weighted_ejector.target_set": "目标已选取", "create.weighted_ejector.target_not_valid": "弹射至临近方块(目标无效)", "create.weighted_ejector.no_target": "弹射至临近方块(未选择目标)", - "create.weighted_ejector.targeting": "弹射至 [%1$s,%2$s,%3$s]", + "create.weighted_ejector.targeting": "弹射至 [%1$s,%2$s,%3$s]", "create.weighted_ejector.stack_size": "弹射物品堆数量", - "create.logistics.when_multiple_outputs_available": "当多个输出可用时", + "create.logistics.when_multiple_outputs_available": "多个输出可用时", "create.mechanical_arm.selection_mode.round_robin": "轮询调度", "create.mechanical_arm.selection_mode.forced_round_robin": "强制轮询调度", @@ -1283,10 +1283,10 @@ "create.tooltip.chute.contains": "内含物品:%1$s x%2$s", "create.tooltip.brass_tunnel.contains": "目前分配:", "create.tooltip.brass_tunnel.contains_entry": "> %1$s x%2$s", - "create.tooltip.brass_tunnel.retrieve": "鼠标右击取出", + "create.tooltip.brass_tunnel.retrieve": "右击取出", "create.linked_controller.bind_mode": "绑定模式激活", - "create.linked_controller.press_keybind": "按下%1$s、%2$s、%3$s、%4$s、%5$s或%6$s,可以将该频率绑定到按下的按键上。", + "create.linked_controller.press_keybind": "按下%1$s、%2$s、%3$s、%4$s、%5$s或%6$s,可以将该频率绑定到按下的按键上", "create.linked_controller.key_bound": "该频率已绑定到%1$s", "create.linked_controller.frequency_slot_1": "按键绑定:%1$s, 频率 #1", "create.linked_controller.frequency_slot_2": "按键绑定:%1$s, 频率 #2", @@ -1304,33 +1304,33 @@ "create.potato_cannon.ammo.knockback": "%1$s 击退", "create.hint.hose_pulley.title": "无限供应", - "create.hint.hose_pulley": "目标液体对象被视为无限量的。", + "create.hint.hose_pulley": "目标流体对象被视为无限量的", "create.hint.mechanical_arm_no_targets.title": "没有目标", - "create.hint.mechanical_arm_no_targets": "看起来这个_动力臂_没有被分配给任何_目标_。在手持机械臂的同时,右击选取传送带、置物台、漏斗或其他设备来设置目标。", + "create.hint.mechanical_arm_no_targets": "看起来这个_动力臂_没有被分配给任何_目标_,在_手持动力臂_的同时,_右击_选取传送带、置物台、漏斗或其他设备来设置目标", "create.hint.empty_bearing.title": "更新轴承", - "create.hint.empty_bearing": "_空手右击_轴承,可以将你新建造的结构_接到_轴承上。", + "create.hint.empty_bearing": "_空手右击_轴承,可以将你新建造的结构_接到_轴承上", "create.hint.full_deployer.title": "机械手物品溢出", - "create.hint.full_deployer": "_机械手_包含_过剩的物品,_需要被_提取。你需要_使用_料斗,__漏斗_或其他方法将溢出释放出来。", + "create.hint.full_deployer": "_机械手_包含_过剩的物品_,需要被_提取_,使用_漏斗_或其他方法将其从溢出中释放出来", "create.gui.config.overlay1": "Hi :)", - "create.gui.config.overlay2": "这是一个实例层", + "create.gui.config.overlay2": "这是一个叠加层例子", "create.gui.config.overlay3": "点击拖拽你的鼠标", - "create.gui.config.overlay4": "来将它移动到前方", + "create.gui.config.overlay4": "来移动这个预览", "create.gui.config.overlay5": "ESC退出当前界面", "create.gui.config.overlay6": "并保存新的位置", - "create.gui.config.overlay7": "输入/create overlay reset", + "create.gui.config.overlay7": "输入 /create overlay reset", "create.gui.config.overlay8": "重置到默认位置", "create.command.killTPSCommand": "killtps", "create.command.killTPSCommand.status.slowed_by.0": "[Create]: 服务器现在的 TPS 速度被降低为 %s ms :o", - "create.command.killTPSCommand.status.slowed_by.1": "[Create]: 服务器现在的 TPS 速度被降低为 >:)", + "create.command.killTPSCommand.status.slowed_by.1": "[Create]: 服务器现在的 TPS 速度被降低了 %s ms >:)", "create.command.killTPSCommand.status.slowed_by.2": "[Create]: 服务器恢复到正常的 TPS 速度 :D", "create.command.killTPSCommand.status.usage.0": "[Create]: 用 /killtps stop 来让服务器的 TPS 速度变回正常", "create.command.killTPSCommand.status.usage.1": "[Create]: 用 /killtps start 来手动降低服务器 TPS 速度", "create.command.killTPSCommand.argument.tickTime": "tickTime", "create.contraption.minecart_contraption_too_big": "这一矿车装置似乎太大了,无法变为拾捡状态", - "create.contraption.minecart_contraption_illegal_pickup": "一股神秘的力量将这一装置与世界牢牢绑定在了一起。", + "create.contraption.minecart_contraption_illegal_pickup": "一股神秘的力量将这一装置与世界牢牢绑定在了一起", "_": "->------------------------] Subtitles [------------------------<-", @@ -1342,13 +1342,13 @@ "create.subtitle.fwoomp": "土豆加农炮:发射", "create.subtitle.worldshaper_place": "环境塑型器:放置方块", "create.subtitle.sanding_long": "打磨噪音", - "create.subtitle.crushing_1": "磨碎声", + "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.haunted_bell_use": "缠魂钟:鸣响", "create.subtitle.scroll_value": "拨码输入:咔哒", "create.subtitle.crafter_craft": "动力合成器:合成中", "create.subtitle.controller_put": "遥控器:放进讲台", @@ -1356,7 +1356,7 @@ "create.subtitle.wrench_remove": "组件:被破坏", "create.subtitle.sanding_short": "打磨噪音", "create.subtitle.cogs": "齿轮:嘎吱作响", - "create.subtitle.slime_added": "粘液:挤碎声", + "create.subtitle.slime_added": "黏液:压扁", "create.subtitle.wrench_rotate": "扳手:拧动", "create.subtitle.potato_hit": "土豆:击中", "create.subtitle.saw_activate_wood": "动力锯:切割", @@ -1376,9 +1376,9 @@ "_": "->------------------------] Item Descriptions [------------------------<-", "item.create.example_item.tooltip": "EXAMPLE ITEM (just a marker that this tooltip exists)", - "item.create.example_item.tooltip.summary": "A brief description of the item._Underscores_highlight a term.", + "item.create.example_item.tooltip.summary": "A brief description of the item. _Underscores_ highlight a term.", "item.create.example_item.tooltip.condition1": "When this", - "item.create.example_item.tooltip.behaviour1": "Then this item does this。(behaviours show on shift)", + "item.create.example_item.tooltip.behaviour1": "Then this item does this. (behaviours show on shift)", "item.create.example_item.tooltip.condition2": "And When this", "item.create.example_item.tooltip.behaviour2": "You can add as many behaviours as you like", "item.create.example_item.tooltip.control1": "When Ctrl pressed", @@ -1391,166 +1391,166 @@ "block.create.metal_bracket.tooltip.summary": "用这种工业风格的金属支架_装饰_你的_传动杆_,_齿轮_和_管道_吧。", "block.create.seat.tooltip": "坐垫", - "block.create.seat.tooltip.summary": "坐下来享受旅程吧!坐垫将会把玩家固定在一个移动装置上。也可以用来作为居家装饰,毕竟他有许多颜色。", - "block.create.seat.tooltip.condition1": "右击坐垫", - "block.create.seat.tooltip.behaviour1": "会使得玩家坐在_坐垫_上,按下左 Shift 可离开_坐垫_。", + "block.create.seat.tooltip.summary": "坐下来享受旅程吧!坐垫将会把玩家固定在一个移动_装置_上。也可以用来作为居家装饰,毕竟它有许多颜色。", + "block.create.seat.tooltip.condition1": "右击坐垫时", + "block.create.seat.tooltip.behaviour1": "会使得玩家坐在_坐垫_上,按下左 Shift 可离开_坐垫_", "item.create.blaze_cake.tooltip": "烈焰蛋糕", "item.create.blaze_cake.tooltip.summary": "为辛勤劳作的_烈焰人_精心准备的美味。让他们兴奋起来吧!", "item.create.wand_of_symmetry.tooltip": "对称之杖", - "item.create.wand_of_symmetry.tooltip.summary": "完美地镜面复制工作区域内的方块到另一边", - "item.create.wand_of_symmetry.tooltip.condition1": "当在快捷栏时", - "item.create.wand_of_symmetry.tooltip.behaviour1": "持续进行镜面复制。", - "item.create.wand_of_symmetry.tooltip.control1": "当右击地面时", - "item.create.wand_of_symmetry.tooltip.action1": "_创建_或_移动_镜面。", - "item.create.wand_of_symmetry.tooltip.control2": "当右击空气时", - "item.create.wand_of_symmetry.tooltip.action2": "_删除_镜面。", - "item.create.wand_of_symmetry.tooltip.control3": "当潜行右击时", - "item.create.wand_of_symmetry.tooltip.action3": "打开_配置界面_。", + "item.create.wand_of_symmetry.tooltip.summary": "完美地镜面复制工作区域内的方块到另一边。", + "item.create.wand_of_symmetry.tooltip.condition1": "在快捷栏时", + "item.create.wand_of_symmetry.tooltip.behaviour1": "持续进行镜面复制", + "item.create.wand_of_symmetry.tooltip.control1": "右击地面时", + "item.create.wand_of_symmetry.tooltip.action1": "_创建_或_移动_镜面", + "item.create.wand_of_symmetry.tooltip.control2": "右击空气时", + "item.create.wand_of_symmetry.tooltip.action2": "_删除_镜面", + "item.create.wand_of_symmetry.tooltip.control3": "潜行右击时", + "item.create.wand_of_symmetry.tooltip.action3": "打开_配置界面_", "item.create.handheld_worldshaper.tooltip": "手持式环境塑形器", - "item.create.handheld_worldshaper.tooltip.summary": "_创造_大陆和山脉的手持工具", - "item.create.handheld_worldshaper.tooltip.control1": "当左击方块时", - "item.create.handheld_worldshaper.tooltip.action1": "将工具放置的方块设置为该方块。", - "item.create.handheld_worldshaper.tooltip.control2": "当右击方块时", - "item.create.handheld_worldshaper.tooltip.action2": "_放置_或_替换_目标方块。", - "item.create.handheld_worldshaper.tooltip.control3": "当潜行右击时", - "item.create.handheld_worldshaper.tooltip.action3": "打开工具的_配置界面_。", + "item.create.handheld_worldshaper.tooltip.summary": "创造_大陆_和_山脉_的手持工具。", + "item.create.handheld_worldshaper.tooltip.control1": "左击方块时", + "item.create.handheld_worldshaper.tooltip.action1": "将工具放置的方块设置为该方块", + "item.create.handheld_worldshaper.tooltip.control2": "右击方块时", + "item.create.handheld_worldshaper.tooltip.action2": "_放置_或_替换_目标方块", + "item.create.handheld_worldshaper.tooltip.control3": "潜行右击时", + "item.create.handheld_worldshaper.tooltip.action3": "打开工具的_配置界面_", "item.create.tree_fertilizer.tooltip": "树木肥料", "item.create.tree_fertilizer.tooltip.summary": "由多种矿物质复合而成的强大生长剂,能够加速普通树种的生长速度。", "item.create.tree_fertilizer.tooltip.condition1": "在树苗上使用时", - "item.create.tree_fertilizer.tooltip.behaviour1": "使得该树_无视_它的_生长空间条件_,立刻长大。", + "item.create.tree_fertilizer.tooltip.behaviour1": "使得该树_无视_它的_生长空间条件_,立刻长大", "item.create.extendo_grip.tooltip": "伸缩机械手", - "item.create.extendo_grip.tooltip.summary": "biubiubiu! 大幅度_增加了_使用者的_触碰距离_。", - "item.create.extendo_grip.tooltip.condition1": "放置于副手栏时", - "item.create.extendo_grip.tooltip.behaviour1": "增加_主手_所使用物品的_接触距离_。", - "item.create.extendo_grip.tooltip.condition2": "当装备铜制背罐时", - "item.create.extendo_grip.tooltip.behaviour2": "使用罐中_气压_来_抵消_伸缩机械手的_耐久_损耗。", + "item.create.extendo_grip.tooltip.summary": "biubiubiu! 大幅度_增加_了使用者的_触及距离_。可以使用_铜背罐_供能。", + "item.create.extendo_grip.tooltip.condition1": "在副手时", + "item.create.extendo_grip.tooltip.behaviour1": "增加_主手_所使用物品的_触及距离_", + "item.create.extendo_grip.tooltip.condition2": "装备铜背罐时", + "item.create.extendo_grip.tooltip.behaviour2": "使用罐中_气压_来_抵消_伸缩机械手的_耐久_损耗", "item.create.potato_cannon.tooltip": "土豆加农炮", - "item.create.potato_cannon.tooltip.summary": "噗!把你亲手栽培的蔬菜砸向你的敌人。可以使用_铜制背罐_供能。", - "item.create.potato_cannon.tooltip.condition1": "当右击时", - "item.create.potato_cannon.tooltip.behaviour1": "_发射_你_物品栏_中任一可作为弹药的物品。", - "item.create.potato_cannon.tooltip.condition2": "当装备铜制背罐时", - "item.create.potato_cannon.tooltip.behaviour2": "使用罐中_气压_来_抵消_土豆加农炮的_耐久_损耗。", + "item.create.potato_cannon.tooltip.summary": "噗!把你亲手栽培的蔬菜砸向你的敌人。可以使用_铜背罐_供能。", + "item.create.potato_cannon.tooltip.condition1": "右击时", + "item.create.potato_cannon.tooltip.behaviour1": "_发射_你_物品栏_中任一可作为弹药的物品", + "item.create.potato_cannon.tooltip.condition2": "装备铜背罐时", + "item.create.potato_cannon.tooltip.behaviour2": "使用罐中_气压_来_抵消_土豆加农炮的_耐久_损耗", "item.create.filter.tooltip": "过滤器", - "item.create.filter.tooltip.summary": "可用于_精确_控制物流设备的_输出_以及_输入_,使得通过的物品流与_一组_物品或者数个_相嵌套的过滤器_相匹配。", - "item.create.filter.tooltip.condition1": "放置于过滤插槽中时", - "item.create.filter.tooltip.behaviour1": "根据_过滤器_的配置,来_决定_物品流是否能够通过。", - "item.create.filter.tooltip.condition2": "当右击时", - "item.create.filter.tooltip.behaviour2": "打开_配置面板_。", + "item.create.filter.tooltip.summary": "可用于_精确控制_物流设备的_输出_以及_输入_,使得通过的物品流与_一组_物品或者数个_相嵌套的过滤器_相匹配。", + "item.create.filter.tooltip.condition1": "放置于过滤槽时", + "item.create.filter.tooltip.behaviour1": "根据过滤器的_配置_,来_决定_物品流是否能够通过", + "item.create.filter.tooltip.condition2": "右击时", + "item.create.filter.tooltip.behaviour2": "打开_配置界面_", "item.create.attribute_filter.tooltip": "属性过滤器", - "item.create.attribute_filter.tooltip.summary": "可用于_精确_控制物流设备的_输出_以及_输入_,使得通过的物品流与_一组_物品_属性_以及_分类_相匹配。", - "item.create.attribute_filter.tooltip.condition1": "放置于过滤插槽中时", - "item.create.attribute_filter.tooltip.behaviour1": "根据_过滤器_的配置,来_决定_物品流是否能够通过。", - "item.create.attribute_filter.tooltip.condition2": "当右击时", - "item.create.attribute_filter.tooltip.behaviour2": "打开_配置面板_。", + "item.create.attribute_filter.tooltip.summary": "可用于_精确控制_物流设备的_输出_以及_输入_,使得通过的物品流与_一组_物品_属性_以及_分类_相匹配。", + "item.create.attribute_filter.tooltip.condition1": "放置于过滤槽时", + "item.create.attribute_filter.tooltip.behaviour1": "根据过滤器的_配置_,来_决定_物品流是否能够通过", + "item.create.attribute_filter.tooltip.condition2": "右击时", + "item.create.attribute_filter.tooltip.behaviour2": "打开_配置界面_", "item.create.empty_schematic.tooltip": "空白蓝图", - "item.create.empty_schematic.tooltip.summary": "可作为合成材料或在_蓝图桌_使用", + "item.create.empty_schematic.tooltip.summary": "可作为合成材料或在_蓝图桌_使用。", "item.create.schematic.tooltip": "蓝图", "item.create.schematic.tooltip.summary": "可将结构部署并放置到世界中,将蓝图全息影像部署完毕后,使用_蓝图加农炮_进行结构建造。", - "item.create.schematic.tooltip.condition1": "当手持蓝图时", + "item.create.schematic.tooltip.condition1": "手持时", "item.create.schematic.tooltip.behaviour1": "可以使用屏幕上的工具调整位置", - "item.create.schematic.tooltip.control1": "当潜行右击时", - "item.create.schematic.tooltip.action1": "打开一个用于输入_精确坐标_的界面。", + "item.create.schematic.tooltip.control1": "潜行右击时", + "item.create.schematic.tooltip.action1": "打开一个用于输入_精确坐标_的_界面_", "item.create.schematic_and_quill.tooltip": "蓝图与笔", "item.create.schematic_and_quill.tooltip.summary": "用于将世界中的结构保存到 .nbt 文件。", "item.create.schematic_and_quill.tooltip.condition1": "第一步", "item.create.schematic_and_quill.tooltip.behaviour1": "手持蓝图与笔右击选择两个对角点", "item.create.schematic_and_quill.tooltip.condition2": "第二步", - "item.create.schematic_and_quill.tooltip.behaviour2": "对准选定区域,按住 Ctrl 键并滑动鼠标滚轮,可以调整选区的大小,右击保存。", - "item.create.schematic_and_quill.tooltip.control1": "右击", - "item.create.schematic_and_quill.tooltip.action1": "选取一个对角点/确认保存。", - "item.create.schematic_and_quill.tooltip.control2": "按住 Ctrl ", - "item.create.schematic_and_quill.tooltip.action2": "可在_空中_选择点,_滑动滚轮_可调整距离。", - "item.create.schematic_and_quill.tooltip.control3": "当潜行右击时", - "item.create.schematic_and_quill.tooltip.action3": "_重置_并删除选区。", + "item.create.schematic_and_quill.tooltip.behaviour2": "对准选定区域,按住_Ctrl_并_滑动滚轮_,可以调整选区的大小,右击保存", + "item.create.schematic_and_quill.tooltip.control1": "右击时", + "item.create.schematic_and_quill.tooltip.action1": "选取一个对角点/确认保存", + "item.create.schematic_and_quill.tooltip.control2": "按住 Ctrl 时", + "item.create.schematic_and_quill.tooltip.action2": "可在_空中_选择点,_滑动滚轮_可调整距离", + "item.create.schematic_and_quill.tooltip.control3": "潜行右击时", + "item.create.schematic_and_quill.tooltip.action3": "_重置_并删除选区", "block.create.schematicannon.tooltip": "蓝图加农炮", "block.create.schematicannon.tooltip.summary": "发射方块,重新构建已在世界中部署的_蓝图_,会使用相邻箱子中的物品进行填充,_火药_作为燃料。", - "block.create.schematicannon.tooltip.condition1": "当右击时", + "block.create.schematicannon.tooltip.condition1": "右击时", "block.create.schematicannon.tooltip.behaviour1": "打开_界面_", "block.create.schematic_table.tooltip": "蓝图桌", - "block.create.schematic_table.tooltip.summary": "将保存的蓝图图写入_空白蓝图_", + "block.create.schematic_table.tooltip.summary": "将保存的蓝图写入_空白蓝图_。", "block.create.schematic_table.tooltip.condition1": "放入空白蓝图时", - "block.create.schematic_table.tooltip.behaviour1": "可从 Schematics 文件夹中上传所选文件。", + "block.create.schematic_table.tooltip.behaviour1": "可从 Schematics 文件夹中上传所选文件", "item.create.goggles.tooltip": "工程师护目镜", "item.create.goggles.tooltip.summary": "一副可以扩增显示_动力学信息_的实用眼镜。", - "item.create.goggles.tooltip.condition1": "当装备时", - "item.create.goggles.tooltip.behaviour1": "根据对应动力组件的_转速等级_,显示它的_颜色指示器_,也会显示这个组件的_应力影响_以及_应力量_。", - "item.create.goggles.tooltip.condition2": "当看向仪表时", - "item.create.goggles.tooltip.behaviour2": "将会显示与仪表相连的网络的_转速_、_应力_等详细信息。", - "item.create.goggles.tooltip.condition3": "当看向流体容器时", - "item.create.goggles.tooltip.behaviour3": "显示出方块的_容量_细节,以及其中包含的所有_流体_。", + "item.create.goggles.tooltip.condition1": "装备时", + "item.create.goggles.tooltip.behaviour1": "根据对应动力组件的_转速等级_,显示它的_颜色指示器_,也会显示这个组件的_应力影响_以及_应力量_", + "item.create.goggles.tooltip.condition2": "看向仪表时", + "item.create.goggles.tooltip.behaviour2": "会显示与仪表相连的网络的_转速_、_应力_等详细信息", + "item.create.goggles.tooltip.condition3": "看向流体容器时", + "item.create.goggles.tooltip.behaviour3": "会显示出方块的_容量_细节,以及其中包含的所有_流体_", "item.create.wrench.tooltip": "扳手", - "item.create.wrench.tooltip.summary": "操控动力组件的使用工具。可用于_旋转_,_拆除_以及_配置_组件。", - "item.create.wrench.tooltip.control1": "当右击_动力方块_时", - "item.create.wrench.tooltip.action1": "以点击的面为轴心_旋转_点击的方块", - "item.create.wrench.tooltip.control2": "当潜行右击时", - "item.create.wrench.tooltip.action2": "会_拆除动力组件_并将其移动到你的背包中。", + "item.create.wrench.tooltip.summary": "操控动力组件的实用工具。可用于_旋转_、_拆除_以及_配置_组件。", + "item.create.wrench.tooltip.control1": "右击动力方块时", + "item.create.wrench.tooltip.action1": "以点击的面为轴心_旋转_点击的_组件_", + "item.create.wrench.tooltip.control2": "潜行右击时", + "item.create.wrench.tooltip.action2": "会_拆除动力组件_并将其放回_你的背包_", "block.create.nozzle.tooltip": "分散网", "block.create.nozzle.tooltip.summary": "依附在鼓风机上,能够将鼓风机的效果分散到_各个方向_。", "block.create.cuckoo_clock.tooltip": "布谷鸟闹钟", - "block.create.cuckoo_clock.tooltip.summary": "精致的工艺品,能够记录时间", + "block.create.cuckoo_clock.tooltip.summary": "精致的工艺品,能够_记录时间_。", "block.create.cuckoo_clock.tooltip.condition1": "接入动力时", - "block.create.cuckoo_clock.tooltip.behaviour1": "显示_当前时间_并且一天会咕咕两次。_中午_咕咕一次,_黄昏可以睡觉_的时候咕咕一次 ", + "block.create.cuckoo_clock.tooltip.behaviour1": "显示_当前时间_并且一天会咕咕两次,_中午_咕咕一次,_黄昏可以睡觉_的时候咕咕一次", "block.create.turntable.tooltip": "转盘", - "block.create.turntable.tooltip.summary": "让旋转力给你带来一场刺激的旋转风车体验。", + "block.create.turntable.tooltip.summary": "让_旋转力_给你带来一场刺激的旋转风车体验。", "block.create.toolbox.tooltip": "工具箱", "block.create.toolbox.tooltip.summary": "每个发明家最亲爱的伙伴!可以方便地大量_收纳__8种_不同的物品类型。", - "block.create.toolbox.tooltip.condition1": "当拾起时", - "block.create.toolbox.tooltip.behaviour1": "_保留_库存_内容_。", - "block.create.toolbox.tooltip.condition2": "当放置在范围内时 ", - "block.create.toolbox.tooltip.behaviour2": "_附近_的_玩家_可以按下_使用附近的工具箱__快捷键_来_远程_访问它的库存。", - "block.create.toolbox.tooltip.condition3": "当右击时", - "block.create.toolbox.tooltip.behaviour3": "打开_工具箱界面_。", + "block.create.toolbox.tooltip.condition1": "拾起时", + "block.create.toolbox.tooltip.behaviour1": "_保留_库存_内容_", + "block.create.toolbox.tooltip.condition2": "放置在一定范围内时", + "block.create.toolbox.tooltip.behaviour2": "_附近_的_玩家_可以按下_访问附近的工具箱__快捷键_来_远程_访问它的库存", + "block.create.toolbox.tooltip.condition3": "右击时", + "block.create.toolbox.tooltip.behaviour3": "打开_工具箱界面_", - "block.create.stockpile_switch.tooltip": "存量转换器", - "block.create.stockpile_switch.tooltip.summary": "根据连接的容器中_储存物品_的数量切换红石信号强度。自带有过滤槽,与_比较器_不同的是,你可以配置_存量转换器_信号反转的_阈值_。", - "block.create.stockpile_switch.tooltip.condition1": "当右击时", - "block.create.stockpile_switch.tooltip.behaviour1": "打开_配置界面_。", + "block.create.stockpile_switch.tooltip": "存量转信器", + "block.create.stockpile_switch.tooltip.summary": "根据连接的容器中_已储存物品数_或_流体量_切换红石信号。自带有过滤槽,与_比较器_不同的是,你可以配置_存量转信器_信号反转的_阈值_。", + "block.create.stockpile_switch.tooltip.condition1": "右击时", + "block.create.stockpile_switch.tooltip.behaviour1": "打开_配置界面_", "block.create.content_observer.tooltip": "物品侦测器", "block.create.content_observer.tooltip.summary": "_检测_与配置过的_过滤器_匹配的_容器_、_管道_或_传送带_中的_物品_或_流体_。", - "block.create.content_observer.tooltip.condition1": "当检测容器时", - "block.create.content_observer.tooltip.behaviour1": "如果检测的容器内有_匹配_的_物品_,发出_红石信号_。", - "block.create.content_observer.tooltip.condition2": "当检测漏斗时 ", - "block.create.content_observer.tooltip.behaviour2": "如果一个_匹配_的_物品_通过,则发出一个_红石脉冲_。", + "block.create.content_observer.tooltip.condition1": "检测容器时", + "block.create.content_observer.tooltip.behaviour1": "如果检测的容器内有_匹配_的_物品_,发出_红石信号_", + "block.create.content_observer.tooltip.condition2": "检测漏斗时 ", + "block.create.content_observer.tooltip.behaviour2": "如果一个_匹配_的_物品_通过,则发出一次_红石脉冲_", "block.create.creative_crate.tooltip": "创造板条箱", - "block.create.creative_crate.tooltip.summary": "这种_储存容器_可以无限地复制任何物品。它还可以移除附近的_蓝图加农炮_的材料需求。", - "block.create.creative_crate.tooltip.condition1": "当标记了物品时", - "block.create.creative_crate.tooltip.behaviour1": "任何从容器中_提取_的物品都是_无限量的_,而任何_放置_到容器中的物品都会被_送入虚空_", + "block.create.creative_crate.tooltip.summary": "这种_储存容器_可以无限地复制任何物品。它还可以移除相邻的_蓝图加农炮_的材料需求。", + "block.create.creative_crate.tooltip.condition1": "标记了物品时", + "block.create.creative_crate.tooltip.behaviour1": "任何从容器中_提取_的物品都是_无限量_的,而任何_放置_到容器中的物品都会被_清空_", "item.create.creative_blaze_cake.tooltip": "创造蛋糕", "item.create.creative_blaze_cake.tooltip.summary": "为_烈焰人燃烧室_特制的小食,可以让你_控制燃烧室的热量等级_。吃下这个蛋糕之后,烈焰人燃烧室将_不再耗尽燃料_。", - "item.create.creative_blaze_cake.tooltip.condition1": "对着烈焰人燃烧室使用", - "item.create.creative_blaze_cake.tooltip.behaviour1": "_锁定_烈焰人燃烧室的热量等级。如果再次使用,会使得燃烧室的热量等级开始_循环_变化。", + "item.create.creative_blaze_cake.tooltip.condition1": "右击烈焰人燃烧室时", + "item.create.creative_blaze_cake.tooltip.behaviour1": "_锁定_烈焰人燃烧室的热量等级,如果再次使用,会使得燃烧室的热量等级开始_循环_变化", "block.create.controller_rail.tooltip": "控制铁轨", - "block.create.controller_rail.tooltip.summary": "一种_单向动力铁轨_,能够_精细控制_矿车的_移动速度_。", - "block.create.controller_rail.tooltip.condition1": "当接受红石信号时", - "block.create.controller_rail.tooltip.behaviour1": "根据_信号强度__加速_或_减速_通过的_矿车_。还会将红石信号传递到相邻的控制铁轨。为两个控制铁轨提供不同强度的红石信号将导致信号强度在它们之间的控制铁轨上过渡。", + "block.create.controller_rail.tooltip.summary": "一种_单向动力铁轨_,能够_精细控制_经过的矿车的_移动速度_。", + "block.create.controller_rail.tooltip.condition1": "通入红石信号时", + "block.create.controller_rail.tooltip.behaviour1": "根据_信号强度__加速_或_减速_通过的_矿车_,还会将红石信号传递到相邻的控制铁轨,为两个控制铁轨提供不同强度的红石信号,将导致信号强度在它们之间的控制铁轨上过渡", "item.create.sand_paper.tooltip": "砂纸", - "item.create.sand_paper.tooltip.summary": "用来_打磨_物品的砂纸,可以用_机械手_来实现自动化。", + "item.create.sand_paper.tooltip.summary": "用来_打磨_物品的砂纸,可以用机械手来实现自动化。", "item.create.sand_paper.tooltip.condition1": "使用时", - "item.create.sand_paper.tooltip.behaviour1": "打磨_副手_上或者_准心所指_的物品。", + "item.create.sand_paper.tooltip.behaviour1": "打磨_副手_上或者_准心所指_的物品", "item.create.builders_tea.tooltip": "建造工茶饮", "item.create.builders_tea.tooltip.summary": "饮下这杯完美茶饮,开启神清气爽的一天。可以恢复_饥饿值_并获得_急迫_效果。", @@ -1558,157 +1558,157 @@ "item.create.refined_radiance.tooltip": "光辉石", "item.create.refined_radiance.tooltip.summary": "一种用_光辉_锻造的化合物材料。", "item.create.refined_radiance.tooltip.condition1": "尚未完工", - "item.create.refined_radiance.tooltip.behaviour1": "该材料在未来可能会有更多的用途。", + "item.create.refined_radiance.tooltip.behaviour1": "该材料在未来可能会有更多的用途", "item.create.shadow_steel.tooltip": "暗影钢", "item.create.shadow_steel.tooltip.summary": "一种用_虚空_锻造的化合物材料。", "item.create.shadow_steel.tooltip.condition1": "尚未完工", - "item.create.shadow_steel.tooltip.behaviour1": "该材料在未来可能会有更多的用途。", + "item.create.shadow_steel.tooltip.behaviour1": "该材料在未来可能会有更多的用途", "item.create.linked_controller.tooltip": "无线红石遥控器", - "item.create.linked_controller.tooltip.summary": "提供_六个_可以绑定_无线红石_频道的按钮,用于_遥控_附近的_无线红石信号终端_。", + "item.create.linked_controller.tooltip.summary": "提供_六个_可以绑定_无线红石_频率的按钮,用于_遥控_附近的_无线红石信号终端_。", "item.create.linked_controller.tooltip.condition1": "右击时", - "item.create.linked_controller.tooltip.behaviour1": "_拿起_或_放下_遥控器。拿起遥控器时,_控制移动_将被用来_操作遥控器_,而不是移动玩家。", + "item.create.linked_controller.tooltip.behaviour1": "_拿起_或_放下_遥控器,拿起遥控器时,_控制移动_将被用来_操作遥控器_,而不是移动玩家", "item.create.linked_controller.tooltip.condition2": "潜行右击时", - "item.create.linked_controller.tooltip.behaviour2": "打开手动_配置界面_。", + "item.create.linked_controller.tooltip.behaviour2": "打开手动_配置界面_", "item.create.linked_controller.tooltip.condition3": "右击无线红石信号终端时", - "item.create.linked_controller.tooltip.behaviour3": "启用_绑定模式_,按下_六个按键_中的一个,即可将此按键与_无线红石信号终端的频率_绑定。", + "item.create.linked_controller.tooltip.behaviour3": "启用_绑定模式_,按下_六个按键_中的一个,即可将此按键与_无线红石信号终端的频率_绑定", "item.create.linked_controller.tooltip.condition4": "右击讲台时", - "item.create.linked_controller.tooltip.behaviour4": "将遥控器放在讲台上以便使用(潜行右击来取回遥控器)。", + "item.create.linked_controller.tooltip.behaviour4": "将遥控器放在讲台上以便使用(潜行右击来取回遥控器)", "item.create.diving_helmet.tooltip": "潜水头盔", - "item.create.diving_helmet.tooltip.summary": "与_铜制背罐_配合使用,为穿戴者提供在_水下_行动一段时间所需的_空气_。", + "item.create.diving_helmet.tooltip.summary": "与_铜背罐_配合使用,为穿戴者提供在_水下_行动一段时间所需的_空气_。", "item.create.diving_helmet.tooltip.condition1": "戴在头上时", - "item.create.diving_helmet.tooltip.behaviour1": "提供_水下呼吸_效果。缓慢消耗背罐中的_压缩空气_。", + "item.create.diving_helmet.tooltip.behaviour1": "提供_水下呼吸_效果,缓慢消耗背罐中的_压缩空气_", - "item.create.copper_backtank.tooltip": "铜制背罐", + "item.create.copper_backtank.tooltip": "铜背罐", "item.create.copper_backtank.tooltip.summary": "一个可以_背在背上_的_铜罐_,用于携带一定量的压缩空气。", "item.create.copper_backtank.tooltip.condition1": "背在背上时", - "item.create.copper_backtank.tooltip.behaviour1": "为其他需要_压缩空气_的装备提供所需的空气。", - "item.create.copper_backtank.tooltip.condition2": "当放下并接入动力时", - "item.create.copper_backtank.tooltip.behaviour2": "基于转速从周围环境中_收集_并_加压空气_。", + "item.create.copper_backtank.tooltip.behaviour1": "为其他需要_压缩空气_的装备提供所需的空气", + "item.create.copper_backtank.tooltip.condition2": "放下并接入动力时", + "item.create.copper_backtank.tooltip.behaviour2": "基于转速从周围环境中_收集_并_加压空气_", "item.create.diving_boots.tooltip": "潜水靴", "item.create.diving_boots.tooltip.summary": "一双_沉重的靴子_,让穿戴者可以更方便的探索海底。", "item.create.diving_boots.tooltip.condition1": "穿在脚上时", - "item.create.diving_boots.tooltip.behaviour1": "穿戴者_下沉更快_并_无法游泳_。穿戴者可以在水下_行走_和_跳跃_。穿戴者不会被_传送带_移走。", + "item.create.diving_boots.tooltip.behaviour1": "穿戴者_下沉更快_且_无法游泳_,穿戴者可以在水下_行走_和_跳跃_,穿戴者不会被_传送带_移走", "item.create.crafting_blueprint.tooltip": "合成蓝图", - "item.create.crafting_blueprint.tooltip.summary": "_放在_墙上,便可用它来设置特定的_原料排布_,以便更快地制作物品。每个格子都可以设定一个配方。", - "item.create.crafting_blueprint.condition1": "当右击空的格子时", - "item.create.crafting_blueprint.behaviour1": "打开一个_配方设置界面_,用于_设置_一个_合成配方_以及展示的物品。", - "item.create.crafting_blueprint.condition2": "当右击设置好的格子时", - "item.create.crafting_blueprint.behaviour2": "使用_物品栏_中的物品制作_设置的配方_。_潜行_可以一次合成_一组_。", + "item.create.crafting_blueprint.tooltip.summary": "_放在_墙上,便可用它来设置_特定的合成配方_,以便更快地制作物品。每个格子都可以设定一个配方。", + "item.create.crafting_blueprint.condition1": "右击空的格子时", + "item.create.crafting_blueprint.behaviour1": "打开一个_配方设置界面_,用于_设置_一个_合成配方_以及展示的物品", + "item.create.crafting_blueprint.condition2": "右击已设置好的格子时", + "item.create.crafting_blueprint.behaviour2": "使用_物品栏_中的物品制作_设置好的配方_,_潜行_可以一次合成_一组_", "item.create.minecart_coupling.tooltip": "矿车连轴器", - "item.create.minecart_coupling.tooltip.summary": "将多个_矿车_或_连接运输装置_链接在一起,构成雄伟的火车。", - "item.create.minecart_coupling.tooltip.condition1": "作用与矿车时", - "item.create.minecart_coupling.tooltip.behaviour1": "将两个矿车耦合在一起,在移动时将它们保持_恒定的距离_。", + "item.create.minecart_coupling.tooltip.summary": "将多个_矿车装置_或_车厢装置_链接在一起,构成雄伟的列车。", + "item.create.minecart_coupling.tooltip.condition1": "在矿车上使用时", + "item.create.minecart_coupling.tooltip.behaviour1": "将两个矿车_链接_在一起,在移动时将它们保持_恒定的距离_", "item.create.experience_nugget.tooltip": "经验颗粒", - "item.create.experience_nugget.tooltip.summary": "_叮!_从你的奇妙发明中汲取_灵感_", - "item.create.experience_nugget.tooltip.condition1": "当使用时", - "item.create.experience_nugget.tooltip.behaviour1": "_吸收_其中包含的_经验值_。", + "item.create.experience_nugget.tooltip.summary": "_叮!_从你的奇妙发明中汲取_灵感_。", + "item.create.experience_nugget.tooltip.condition1": "使用时", + "item.create.experience_nugget.tooltip.behaviour1": "_吸收_其中包含的_经验值_", "block.create.peculiar_bell.tooltip": "奇异钟", - "block.create.peculiar_bell.tooltip.summary": "装饰用的_黄铜质钟_。放在_灵魂火_的正上方可能会产生意料之外的后果......", + "block.create.peculiar_bell.tooltip.summary": "装饰用的_黄铜钟_。放在_灵魂火_的正上方可能会产生意料之外的后果……", - "block.create.haunted_bell.tooltip": "森魂钟", + "block.create.haunted_bell.tooltip": "缠魂钟", "block.create.haunted_bell.tooltip.summary": "_被诅咒_的钟,来自下界的迷失的灵魂缠绕于其上。", - "block.create.haunted_bell.tooltip.condition1": "当手持或鸣响时", - "block.create.haunted_bell.tooltip.behaviour1": "标识出附近可能生成_敌对生物_的_亮度不足_之处。", + "block.create.haunted_bell.tooltip.condition1": "手持或鸣响时", + "block.create.haunted_bell.tooltip.behaviour1": "标识出附近可能生成_敌对生物_的_亮度不足_之处", "_": "->------------------------] Ponder Content [------------------------<-", "create.ponder.hold_to_ponder": "按住 [%1$s] 开始思索", "create.ponder.subject": "情景主题", - "create.ponder.pondering": "思索...", - "create.ponder.identify_mode": "名称显示模式开,[%1$s]来继续思索", + "create.ponder.pondering": "思索……", + "create.ponder.identify_mode": "显示方块名称已启用\n按 [%1$s] 继续思索", "create.ponder.associated": "关联词条", "create.ponder.close": "思索结束", "create.ponder.identify": "显示方块名称", "create.ponder.next": "下一情景", - "create.ponder.previous": "前一情景", + "create.ponder.previous": "上一情景", "create.ponder.replay": "重放", "create.ponder.think_back": "回想", "create.ponder.slow_text": "舒适阅读", "create.ponder.exit": "退出", "create.ponder.welcome": "欢迎来到思索界面", "create.ponder.categories": "机械动力中包含的条目", - "create.ponder.index_description": "点击一个图标来查看相关的物品和方块。", + "create.ponder.index_description": "点击一个图标来查看相关的物品和方块", "create.ponder.index_title": "思索索引", "create.ponder.shared.rpm16": "16 RPM", - "create.ponder.shared.behaviour_modify_wrench": "可以用扳手调整它的行为。", - "create.ponder.shared.storage_on_contraption": "与装置相接的存储空间,会自动将装置遇到的掉落物拾取到空间内。", + "create.ponder.shared.behaviour_modify_wrench": "可以用扳手调整它的行为", + "create.ponder.shared.storage_on_contraption": "与装置相接的容器,会自动拾取装置遇到的掉落物", "create.ponder.shared.sneak_and": "潜行 +", "create.ponder.shared.rpm8": "8 RPM", "create.ponder.shared.ctrl_and": "Ctrl +", "create.ponder.shared.rpm32": "32 RPM", "create.ponder.shared.rpm16_source": "动力源:16 RPM", - "create.ponder.shared.movement_anchors": "有了底盘和强力胶,移动起大型结构轻轻松松。", + "create.ponder.shared.movement_anchors": "有了底盘和强力胶,移动起大型结构轻轻松松", "create.ponder.tag.redstone": "逻辑组件", - "create.ponder.tag.redstone.description": "这些组件会在红石工程中发挥大用处。", + "create.ponder.tag.redstone.description": "这些组件会在红石工程中发挥大用处", "create.ponder.tag.contraption_assembly": "方块连接功能", "create.ponder.tag.contraption_assembly.description": "将各个组件连接以便同时运动的工具以及组件", "create.ponder.tag.fluids": "流体操纵器械", - "create.ponder.tag.fluids.description": "这些组件可以用于传递流体,以及利用流体进行工作。", + "create.ponder.tag.fluids.description": "这些组件可以用于传递流体,以及利用流体进行工作", "create.ponder.tag.decoration": "装饰", - "create.ponder.tag.decoration.description": "装饰是这些组件的常见用法。", - "create.ponder.tag.windmill_sails": "风车轴承的帆", - "create.ponder.tag.windmill_sails.description": "在进行风车组装时会被算入风车旋转力的方块,这些方块的效能都是一样的。", - "create.ponder.tag.arm_targets": "机械臂的工作目标", - "create.ponder.tag.arm_targets.description": "该组件可做为机械臂的输入或者输出点。", + "create.ponder.tag.decoration.description": "装饰是这些组件的常见用法", + "create.ponder.tag.windmill_sails": "用于风车轴承的帆", + "create.ponder.tag.windmill_sails.description": "在进行风车组装时会被算入风车强度的方块,这些方块的效能都是一样的", + "create.ponder.tag.arm_targets": "动力臂的工作目标", + "create.ponder.tag.arm_targets.description": "该组件可做为动力臂的输入或者输出点", "create.ponder.tag.kinetic_appliances": "动力设备", - "create.ponder.tag.kinetic_appliances.description": "这些组件可以利用旋转力进行工作。", + "create.ponder.tag.kinetic_appliances.description": "这些组件可以利用旋转力进行工作", "create.ponder.tag.kinetic_sources": "动力源", - "create.ponder.tag.kinetic_sources.description": "能够发生动力的组件。", - "create.ponder.tag.movement_anchor": "运动源泉", - "create.ponder.tag.movement_anchor.description": "有了它,运动装置才得以可能,它可以以数种方式使相接的结构运动起来。", + "create.ponder.tag.kinetic_sources.description": "能够产生旋转力的组件", + "create.ponder.tag.movement_anchor": "运动锚点", + "create.ponder.tag.movement_anchor.description": "允许创建移动装置的组件,它可以以数种方式使相接的结构运动起来", "create.ponder.tag.kinetic_relays": "动力方块", - "create.ponder.tag.kinetic_relays.description": "用于传递旋转力的组件。", + "create.ponder.tag.kinetic_relays.description": "用于传递旋转力的组件", "create.ponder.tag.contraption_actor": "装置执行组件", "create.ponder.tag.contraption_actor.description": "能在移动的装置上执行特殊功能的组件", "create.ponder.tag.creative": "创造模式", - "create.ponder.tag.creative.description": "总有些东西是生存模式得不到的。", + "create.ponder.tag.creative.description": "总有些东西是生存模式得不到的", "create.ponder.tag.logistics": "物品运输", "create.ponder.tag.logistics.description": "该组件可以协助物品运输", - "create.ponder.analog_lever.header": "使用模拟拉杆控制信号发送", - "create.ponder.analog_lever.text_1": "要想使得红石信号源信号强度精确且占地面积小,模拟拉杆不可少。", - "create.ponder.analog_lever.text_2": "右击可以提升输出模拟信号的强度", - "create.ponder.analog_lever.text_3": "潜行右击将会减少输出模拟信号的强度", + "create.ponder.analog_lever.header": "使用模拟拉杆控制红石信号", + "create.ponder.analog_lever.text_1": "模拟拉杆可提供紧凑而精确的红石信号源", + "create.ponder.analog_lever.text_2": "右击会提升输出的模拟信号的强度", + "create.ponder.analog_lever.text_3": "潜行右击会减少输出的模拟信号的强度", "create.ponder.andesite_tunnel.header": "安山隧道用法", "create.ponder.andesite_tunnel.text_1": "安山隧道可用于遮掩传送带", - "create.ponder.andesite_tunnel.text_2": "只要在漏斗的侧边加装上安山隧道...", - "create.ponder.andesite_tunnel.text_3": "...路过的所有物品堆都会被精准地拣出一个物品", + "create.ponder.andesite_tunnel.text_2": "当安山隧道与侧边有连接时……", + "create.ponder.andesite_tunnel.text_3": "……经过的所有物品堆都会被精准地分出一个物品", "create.ponder.andesite_tunnel.text_4": "剩下的物品则不受影响,继续前进", "create.ponder.basin.header": "工作盆内物品处理", "create.ponder.basin.text_1": "一个可以对放入的物品以及流体进行处理的盆", - "create.ponder.basin.text_2": "处理完毕后,工作盆会尝试从它的底面进行产物输出", + "create.ponder.basin.text_2": "处理完毕后,工作盆会尝试从它下方的侧面输出", "create.ponder.basin.text_3": "若在正确的位置上放置了有效的组件,工作盆会显示出一个输出龙头", "create.ponder.basin.text_4": "有多种设备可以引发工作盆的这一行为", - "create.ponder.basin.text_5": "产物会被输出到盆下方的存储空间内", + "create.ponder.basin.text_5": "产物会被输出到盆下方的容器内", "create.ponder.basin.text_6": "如果没有显示出输出龙头,那么盆内的产物将会一直留存在盆内", "create.ponder.basin.text_7": "这在产物需要作为新一轮处理的原料时相当有用", "create.ponder.basin.text_8": "需要输出的产物仍需从盆内取出", - "create.ponder.basin.text_9": "若是加装过滤,那么你便无需担心会将未被处理的物品抽取出来了", + "create.ponder.basin.text_9": "你可能需要过滤器避免未被处理的物品被抽取出来", "create.ponder.bearing_modes.header": "动力轴承的运动模式", - "create.ponder.bearing_modes.text_1": "停止时,轴承会控制结构以特定的角度停在最近的与格相对齐之处", - "create.ponder.bearing_modes.text_2": "你可以调整整个结构永不方块化,或者仅在结构的起始位置方块化", + "create.ponder.bearing_modes.text_1": "停止时,轴承会控制结构以特定的角度停在最近的与网格相对齐之处", + "create.ponder.bearing_modes.text_2": "你可以调整使整个结构永不方块化,或者仅在结构的起始位置方块化", - "create.ponder.belt_casing.header": "带机壳的传送带", + "create.ponder.belt_casing.header": "装壳传送带", "create.ponder.belt_casing.text_1": "你可以用黄铜或者安山机壳装饰你的传送带", "create.ponder.belt_casing.text_2": "使用扳手即可移除机壳", "create.ponder.belt_connector.header": "传送带用法", - "create.ponder.belt_connector.text_1": "手持传送带右击两根传动杆,可以将两根杆连接起来。", + "create.ponder.belt_connector.text_1": "手持传送带右击两根传动杆,可以将两根杆连接起来", "create.ponder.belt_connector.text_2": "如果不小心选错了,潜行右击即可取消选择", "create.ponder.belt_connector.text_3": "你也可以在传送带的中间加装额外的传动杆", - "create.ponder.belt_connector.text_4": "通过传送带相连的传动杆,会以相同的转速以及方向进行旋转", + "create.ponder.belt_connector.text_4": "通过传送带连接的传动杆,会以相同的转速以及方向进行旋转", "create.ponder.belt_connector.text_5": "加装的传动杆可以用扳手拆下来", "create.ponder.belt_connector.text_6": "传送带亦可染色", @@ -1718,68 +1718,68 @@ "create.ponder.belt_directions.text_3": "2. 可以对角连接", "create.ponder.belt_directions.text_4": "3. 可以垂直连接", "create.ponder.belt_directions.text_5": "4. 还可以水平连接竖直放置的传动杆", - "create.ponder.belt_directions.text_6": "以上为所有可能的连接方向。传送带的连接范围为 2 到 20 格", + "create.ponder.belt_directions.text_6": "以上为所有可能的连接方向,传送带的连接范围为 2 到 20 格", "create.ponder.belt_transport.header": "在物流中使用传送带", "create.ponder.belt_transport.text_1": "运动的传送带可以运输物品以及其他实体", - "create.ponder.belt_transport.text_2": "空手右击传送带,即可将其上的物品拿下来。", + "create.ponder.belt_transport.text_2": "空手右击传送带,即可将其上的物品拿下来", "create.ponder.blaze_burner.header": "烈焰人燃烧室补喂", "create.ponder.blaze_burner.text_1": "烈焰人燃烧室可以为工作盆的物品处理提供热量", - "create.ponder.blaze_burner.text_2": "因而,你需要喂给室内的烈焰人一些可燃物品", - "create.ponder.blaze_burner.text_3": "如果喂给了它烈焰蛋糕,它还能达到更强的热力等级", - "create.ponder.blaze_burner.text_4": "你可以用机械手或者机械臂进行自动化补喂", + "create.ponder.blaze_burner.text_2": "为此,你需要喂给烈焰人一些可燃物品", + "create.ponder.blaze_burner.text_3": "如果喂给它烈焰蛋糕,它还能达到更强的热量等级", + "create.ponder.blaze_burner.text_4": "你可以用机械手或者动力臂进行自动化补喂", "create.ponder.brass_funnel.header": "黄铜漏斗", - "create.ponder.brass_funnel.text_1": "安山岩漏斗一次只能提取出一个物品。", - "create.ponder.brass_funnel.text_2": "黄铜漏斗可以一次提取一组物品。", - "create.ponder.brass_funnel.text_3": "对着过滤槽滑动滚轮,还可以精确调节黄铜漏斗的提取数量。", - "create.ponder.brass_funnel.text_4": "对着过滤槽使用某个物品,可以限制漏斗的行为,使其只传输匹配的物品。", + "create.ponder.brass_funnel.text_1": "安山岩漏斗一次只能提取出一个物品", + "create.ponder.brass_funnel.text_2": "黄铜漏斗可以一次提取一组物品", + "create.ponder.brass_funnel.text_3": "对着过滤槽滑动滚轮,还可以精确调节黄铜漏斗的提取数量", + "create.ponder.brass_funnel.text_4": "对着过滤槽使用某个物品,可以限制漏斗的行为,使其只传输匹配的物品", "create.ponder.brass_tunnel.header": "黄铜隧道用法", "create.ponder.brass_tunnel.text_1": "黄铜隧道可以遮掩住你的传送带", "create.ponder.brass_tunnel.text_2": "隧道的每一个开口面都有过滤槽", "create.ponder.brass_tunnel.text_3": "在输入处的过滤槽仅会阻挡住不匹配的物品", "create.ponder.brass_tunnel.text_4": "输出处的过滤槽可用于以种类为依据的物品整理", - "create.ponder.brass_tunnel.text_5": "如果有数种匹配的物品通过,那么隧道的分配模式将会决定这些物品何去何从", + "create.ponder.brass_tunnel.text_5": "当通过的物品有多个有效输出端时,那么隧道的分配模式将会决定这些物品何去何从", "create.ponder.brass_tunnel.text_6": "连接了平行传送带的黄铜隧道,会将隧道、传送带组成一个组", - "create.ponder.brass_tunnel.text_7": "输入组内的物品会被分配到所有组内连接的对象中", - "create.ponder.brass_tunnel.text_8": "在这一情况下,你仍可以将物品直接输入到隧道方块中", + "create.ponder.brass_tunnel.text_7": "输入的物品现在会分配到所有连接的输出端", + "create.ponder.brass_tunnel.text_8": "在这一情况下,你也可以将物品直接输入到隧道方块中", "create.ponder.brass_tunnel_modes.header": "黄铜隧道的分配模式", "create.ponder.brass_tunnel_modes.text_1": "使用扳手即可调节隧道的分配模式", "create.ponder.brass_tunnel_modes.text_10": "“同步输入”是黄铜隧道的一种特殊设定", "create.ponder.brass_tunnel_modes.text_11": "只有在组内全部的隧道都有一个等待通过的物品时,物品才能通过此隧道", "create.ponder.brass_tunnel_modes.text_12": "这确保了所有受影响的传送带能够以相同的速率进行物品补给", - "create.ponder.brass_tunnel_modes.text_2": "“分流”会尝试将物品堆分流传输到可用的输出端", - "create.ponder.brass_tunnel_modes.text_3": "如果某个输出端无法容纳更多的物品,那么此出口不纳入分流的运算中", - "create.ponder.brass_tunnel_modes.text_4": "“强制分流”不会跳过某个输出端,而是一直等待着此输出端能够容纳更多物品,才会继续物品传输", - "create.ponder.brass_tunnel_modes.text_5": "“轮询调度”会保持物品堆完整,循环检索各个输出口,满足条件后将物品堆全部送入 ", - "create.ponder.brass_tunnel_modes.text_6": "与分流类似,如果输出口无法容纳更多物品,那它会被跳过", - "create.ponder.brass_tunnel_modes.text_7": "“强制轮询调度”不会跳过输出口", - "create.ponder.brass_tunnel_modes.text_8": "“最近优先”会将物品优先送入距离输入口更近的输出口", - "create.ponder.brass_tunnel_modes.text_9": "“随机”会随机选择一个输出口,一次性送入所有物品", + "create.ponder.brass_tunnel_modes.text_2": "“分流”会尝试在可用输出端之间均匀分配物品堆", + "create.ponder.brass_tunnel_modes.text_3": "如果某个输出端无法容纳更多的物品,那它会被跳过,不参与计算", + "create.ponder.brass_tunnel_modes.text_4": "“强制分流”不会跳过某个输出端,而是一直等待此输出端能够容纳更多物品,才会继续物品传输", + "create.ponder.brass_tunnel_modes.text_5": "“轮询调度”会保持物品堆完整,循环检索各个输出端,满足条件后分配整堆物品", + "create.ponder.brass_tunnel_modes.text_6": "与分流类似,如果某个输出端无法容纳更多物品,那它会被跳过", + "create.ponder.brass_tunnel_modes.text_7": "“强制轮询调度”不会跳过某个输出端", + "create.ponder.brass_tunnel_modes.text_8": "“最近优先”会将物品优先分配到距离输入端更近的输出端", + "create.ponder.brass_tunnel_modes.text_9": "“随机”会随机选择一个输出端,一次性分配整堆物品", "create.ponder.cart_assembler.header": "使用矿车装配站控制结构移动", "create.ponder.cart_assembler.text_1": "矿车装配站会将它所连接的结构安装到矿车上", "create.ponder.cart_assembler.text_2": "若没有通入红石信号,它会将矿车装置解散为方块的形式", "create.ponder.cart_assembler.text_3": "对着矿车使用你的扳手,装置会变为可搬运的形式", - "create.ponder.cart_assembler_dual.header": "组装连接运输装置", - "create.ponder.cart_assembler_dual.text_1": "若两个装配矿车分享了同一个结构", - "create.ponder.cart_assembler_dual.text_2": "给其中的任意一方的矿车装配站通入红石信号,都会创建出连接运输装置", - "create.ponder.cart_assembler_dual.text_3": "两辆矿车的此时行为与用矿车连轴器连接在一起时十分相似", + "create.ponder.cart_assembler_dual.header": "组装车厢装置", + "create.ponder.cart_assembler_dual.text_1": "若两个矿车装配站分享了同一个结构", + "create.ponder.cart_assembler_dual.text_2": "给其中的任意一方的矿车装配站通入红石信号,都会创建出车厢装置", + "create.ponder.cart_assembler_dual.text_3": "两辆矿车此时的行为与用矿车连轴器连接在一起时十分相似", "create.ponder.cart_assembler_modes.header": "矿车装置的方向设定", "create.ponder.cart_assembler_modes.text_1": "矿车装置会随着矿车的运动而发生转向", - "create.ponder.cart_assembler_modes.text_2": "矿车装置上的箭头表明了哪一侧是“前面”", + "create.ponder.cart_assembler_modes.text_2": "该箭头指定结构的哪一侧将被视为“正面”", "create.ponder.cart_assembler_modes.text_3": "如果装配站的配置为“旋转锁定”,那么装置的方向将不会改变", "create.ponder.cart_assembler_rails.header": "另外几种矿车以及铁轨", "create.ponder.cart_assembler_rails.text_1": "放置在普通轨道上的矿车装配站并不会影响路过矿车装置的运动", - "create.ponder.cart_assembler_rails.text_2": "如果放置在充能或控制铁轨上且没有通入红石信号,那么路过的矿车将会停在此处", - "create.ponder.cart_assembler_rails.text_3": "另外的几种矿车可以当作锚来使用", - "create.ponder.cart_assembler_rails.text_4": "熔炉矿车会试图始终保持燃烧状态,并试图从路过的存储空间内抽取燃料", + "create.ponder.cart_assembler_rails.text_2": "如果放置在动力铁轨或控制铁轨上且没有通入红石信号,矿车装置将停在此处,直到再次充能", + "create.ponder.cart_assembler_rails.text_3": "另外的几种矿车可以当作锚点来使用", + "create.ponder.cart_assembler_rails.text_4": "动力矿车会试图始终保持燃烧状态,并试图从任何连接的容器内提取燃料", "create.ponder.chain_drive.header": "使用链式传动箱传动旋转力", "create.ponder.chain_drive.text_1": "同一行上的链式传动箱会相互间传递旋转", @@ -1789,20 +1789,20 @@ "create.ponder.chain_gearshift.header": "利用可调节链式传动箱进行转速调节", "create.ponder.chain_gearshift.text_1": "未充能的可调节链式传动箱与普通链式传动箱无异", "create.ponder.chain_gearshift.text_2": "当被充能时,它将会把旋转力以双倍转速传动至其他链式传动箱", - "create.ponder.chain_gearshift.text_3": "若被充能的可调节传动箱并不是动力输入端,则它会减半转速", + "create.ponder.chain_gearshift.text_3": "若被充能的可调节传动箱并不是动力输入端,则它会把转速减半", "create.ponder.chain_gearshift.text_4": "在这两种情况中,同一组的其他链式传动箱的转速都为被充能的可调节链式传动箱的两倍", "create.ponder.chain_gearshift.text_5": "转速的倍率可在 x1 和 x2 间根据红石信号的强弱来精确调整", "create.ponder.chain_gearshift.text_6": "12 RPM", "create.ponder.chute.header": "使用溜槽向下运输物品", - "create.ponder.chute.text_1": "溜槽可在两个存储空间之间垂直传送物品", + "create.ponder.chute.text_1": "溜槽可在两个容器之间垂直传输物品", "create.ponder.chute.text_2": "使用扳手右击可以在溜槽上设置观察窗", - "create.ponder.chute.text_3": "对着另一个溜槽的侧面放置另一个溜槽,将会放置下一个呈对角状的溜槽", + "create.ponder.chute.text_3": "对着另一个溜槽的侧面放置溜槽,将会放置下一个斜向的溜槽", "create.ponder.chute_upward.header": "使用溜槽向上运输物品", "create.ponder.chute_upward.text_1": "在溜槽上或下方使用鼓风机时,物品会根据风的方向向上或下移动", "create.ponder.chute_upward.text_2": "佩戴工程师护目镜时,你可以看见物品的移动方向", - "create.ponder.chute_upward.text_3": "在溜槽“被挡住的”底端,物品只能从侧边进行提取或输入", + "create.ponder.chute_upward.text_3": "在溜槽“被挡住的”末端,物品只能从侧边进行提取或输入", "create.ponder.clockwork_bearing.header": "使用发条轴承来使结构运动", "create.ponder.clockwork_bearing.text_1": "发条轴承黏附其正前方的方块", @@ -1838,9 +1838,9 @@ "create.ponder.creative_fluid_tank.text_3": "流体管道可以从中无限提取指定的流体", "create.ponder.creative_fluid_tank.text_4": "任何被输入创造流体储罐的液体都将被销毁", - "create.ponder.creative_motor.header": "使用创造马达发生旋转", - "create.ponder.creative_motor.text_1": "创造马达不仅能够手动调配输出旋转力,而且体积相当小巧", - "create.ponder.creative_motor.text_2": "对其背侧面板滚动滑轮,可以改变马达的输出旋转转速", + "create.ponder.creative_motor.header": "使用创造马达产生旋转力", + "create.ponder.creative_motor.text_1": "创造马达是一种紧凑且可配置的旋转力源", + "create.ponder.creative_motor.text_2": "对其后面板滑动滚轮,可以改变马达的输出旋转转速", "create.ponder.crushing_wheels.header": "使用粉碎轮处理物品", "create.ponder.crushing_wheels.text_1": "一对粉碎轮,磨物快又准", @@ -1853,10 +1853,10 @@ "create.ponder.deployer.text_10": "对着机械手的前部右击,即可将手上的物品给予它使用", "create.ponder.deployer.text_11": "物品也可以自动化输入到机械手内", "create.ponder.deployer.text_12": "机械手附带一个过滤槽", - "create.ponder.deployer.text_13": "当设定了过滤后,只有当它的手中物品与过滤相匹配时,它才会工作", - "create.ponder.deployer.text_14": "只有与过滤匹配的物品才可输入...", - "create.ponder.deployer.text_15": "...只有不匹配的物品方可被抽取出来", - "create.ponder.deployer.text_2": "它只会与它正前方两格处的位置进行交互", + "create.ponder.deployer.text_13": "设定了过滤后,只有它手中的物品与过滤相匹配时,它才会工作", + "create.ponder.deployer.text_14": "只有与过滤匹配的物品才可输入……", + "create.ponder.deployer.text_15": "……只有不匹配的物品可被抽取出来", + "create.ponder.deployer.text_2": "它只会与它正前方第 2 格处的位置进行交互", "create.ponder.deployer.text_3": "放在在它面前的方块不会阻拦它的工作", "create.ponder.deployer.text_4": "机械手可以:", "create.ponder.deployer.text_5": "放置方块", @@ -1866,9 +1866,9 @@ "create.ponder.deployer.text_9": "以及攻击生物", "create.ponder.deployer_contraption.header": "在装置上使用机械手", - "create.ponder.deployer_contraption.text_1": "当机械手在移动的装置上时...", + "create.ponder.deployer_contraption.text_1": "当机械手在移动的装置上时……", "create.ponder.deployer_contraption.text_2": "机械手会对每一个经过的方块使用装置中任意容器内的物品", - "create.ponder.deployer_contraption.text_3": "可以通过过滤槽来指定其从存储空间中抽取的物品", + "create.ponder.deployer_contraption.text_3": "过滤槽可用于指定要抽取的物品", "create.ponder.deployer_modes.header": "机械手的模式", "create.ponder.deployer_modes.text_1": "在默认情况下,机械手模仿玩家的右击交互", @@ -1877,8 +1877,8 @@ "create.ponder.deployer_processing.header": "使用机械手处理物品", "create.ponder.deployer_processing.text_1": "当机械手持有合适的物品时,它可以自动处理下方的物品", "create.ponder.deployer_processing.text_2": "物品可以被丢在机械手下方,或放在置物台上", - "create.ponder.deployer_processing.text_3": "当传送带上的物品经过机械手下方时...", - "create.ponder.deployer_processing.text_4": "...机械手会使物品停下,然后处理这个物品", + "create.ponder.deployer_processing.text_3": "当传送带上的物品经过机械手下方时……", + "create.ponder.deployer_processing.text_4": "……机械手会使物品停下,然后处理这个物品", "create.ponder.deployer_redstone.header": "使用红石控制机械手", "create.ponder.deployer_redstone.text_1": "当被红石充能时,机械手会停止工作", @@ -1888,25 +1888,25 @@ "create.ponder.depot.header": "使用置物台", "create.ponder.depot.text_1": "置物台可以被当成一个“静止的”传送带原件使用", "create.ponder.depot.text_2": "右击可以手动放置或取下物品", - "create.ponder.depot.text_3": "与传送带一样,它也可以将其内的物品转送到其他设备中进行加工...", - "create.ponder.depot.text_4": "...同时物品也可以被机械手存取", + "create.ponder.depot.text_3": "与传送带一样,它也可以将其内的物品转送到其他设备中进行加工……", + "create.ponder.depot.text_4": "……同时物品也可以被机械手存取", "create.ponder.empty_blaze_burner.header": "使用空的烈焰人燃烧室", "create.ponder.empty_blaze_burner.text_1": "手持空的烈焰人燃烧室右击烈焰人来抓取烈焰人", - "create.ponder.empty_blaze_burner.text_2": "或者,也可以通过右击烈焰人刷怪笼来填充激活烈焰人燃烧室", + "create.ponder.empty_blaze_burner.text_2": "或者,可以直接从烈焰人刷怪笼中收集烈焰人", "create.ponder.empty_blaze_burner.text_3": "这样,你便有了一个可供部分机器加工的热源", "create.ponder.empty_blaze_burner.text_4": "如果是为了美观,空的烈焰人燃烧室也可以被打火石点燃", "create.ponder.empty_blaze_burner.text_5": "你可以使用注入了灵魂的物品转化这种火焰", "create.ponder.empty_blaze_burner.text_6": "但是,没有烈焰人,这样的火焰并不足以用于工业级加热工作", - "create.ponder.encased_fluid_pipe.header": "流体管道箱", + "create.ponder.encased_fluid_pipe.header": "装壳流体管道", "create.ponder.encased_fluid_pipe.text_1": "铜机壳可以用于装饰流体管道", - "create.ponder.encased_fluid_pipe.text_2": "除了遮掩流体管道之外,装箱的流体管道将不会改变其连接状态", + "create.ponder.encased_fluid_pipe.text_2": "除了遮掩流体管道之外,装壳的流体管道将不会改变其连接状态", "create.ponder.encased_fluid_pipe.text_3": "它将不会对旁边新增加或移除的管道做出反应", "create.ponder.fan_direction.header": "鼓风机的气流", "create.ponder.fan_direction.text_1": "鼓风机使用旋转力来制造气流", - "create.ponder.fan_direction.text_2": "流速以及方向由所接收旋转力的强弱以及方向而定", + "create.ponder.fan_direction.text_2": "流速以及方向由所接受旋转力的强弱以及方向而定", "create.ponder.fan_processing.header": "使用鼓风机加工物品", "create.ponder.fan_processing.text_1": "当气流吹过熔岩时,气流会被加热", @@ -1928,20 +1928,20 @@ "create.ponder.fluid_pipe_flow.text_3": "带有观察窗的管道不会建立侧向管道连接", "create.ponder.fluid_pipe_flow.text_4": "使用动力泵,流体管道可以传输流体", "create.ponder.fluid_pipe_flow.text_5": "一开始,流体不会真正地被抽出", - "create.ponder.fluid_pipe_flow.text_6": "只有当管道内的液体流彻底连通之后,流体才会开始逐渐从一个容器中转移到另一个", + "create.ponder.fluid_pipe_flow.text_6": "只有当管道内的流体流彻底连通之后,流体才会开始逐渐从一个容器中转移到另一个中", "create.ponder.fluid_pipe_flow.text_7": "这意味着流体管道本身并不真正存储任何流体", "create.ponder.fluid_pipe_interaction.header": "抽取和填充流体容器", "create.ponder.fluid_pipe_interaction.text_1": "流体管道的末端可以与许多种容器连接", "create.ponder.fluid_pipe_interaction.text_2": "任何可以容纳流体的容器都可以被填充或从中抽取", - "create.ponder.fluid_pipe_interaction.text_3": "开放的管道口可以吸走流体源方块...", - "create.ponder.fluid_pipe_interaction.text_4": "...或者将流体源排放出来", + "create.ponder.fluid_pipe_interaction.text_3": "开放的管道口可以吸走流体源方块……", + "create.ponder.fluid_pipe_interaction.text_4": "……或者将流体源排放出来", "create.ponder.fluid_pipe_interaction.text_5": "管道也可以从许多种其他方块中直接抽取流体", "create.ponder.fluid_tank_sizes.header": "流体储罐的大小", "create.ponder.fluid_tank_sizes.text_1": "流体储罐可以多格连接,提供更大的存储量", - "create.ponder.fluid_tank_sizes.text_2": "流体储罐最大横截面为 3x3...", - "create.ponder.fluid_tank_sizes.text_3": "...并且可以超过 30 格高", + "create.ponder.fluid_tank_sizes.text_2": "流体储罐最大横截面为 3x3……", + "create.ponder.fluid_tank_sizes.text_3": "……并且可以超过 30 格高", "create.ponder.fluid_tank_sizes.text_4": "使用扳手可以打开或关闭观察窗", "create.ponder.fluid_tank_storage.header": "使用流体储罐存储流体", @@ -1949,7 +1949,7 @@ "create.ponder.fluid_tank_storage.text_2": "流体管道可以在流体储罐的任何一面将流体输入/输出", "create.ponder.fluid_tank_storage.text_3": "使用比较器可以检测储罐中的流体储量", "create.ponder.fluid_tank_storage.text_4": "在生存模式中,无法直接用容器向储罐中存入流体,或是取出流体", - "create.ponder.fluid_tank_storage.text_5": "要装满/倒空流体容器,可以使用工作盆,分液池或注液器。", + "create.ponder.fluid_tank_storage.text_5": "要装满/倒空流体容器,可以使用工作盆,分液池或注液器", "create.ponder.flywheel.header": "使用飞轮来产生旋转力", "create.ponder.flywheel.text_1": "飞轮和熔炉引擎必须配套使用,方可产生旋转力", @@ -1964,24 +1964,24 @@ "create.ponder.funnel_direction.header": "物流方向", "create.ponder.funnel_direction.text_1": "直接放置时,漏斗会将物品从容器中取出", - "create.ponder.funnel_direction.text_2": "潜行时放置时,漏斗会将物品置入容器中", + "create.ponder.funnel_direction.text_2": "潜行放置时,漏斗会将物品置入容器中", "create.ponder.funnel_direction.text_3": "使用扳手可以改变漏斗的存/取模式", - "create.ponder.funnel_direction.text_4": "对大多数朝向放置的漏斗都具有此特性", + "create.ponder.funnel_direction.text_4": "相同的规则适用于大多数朝向", "create.ponder.funnel_direction.text_5": "在传送带末端放置的漏斗会根据传送带的传动方向存/取物品", "create.ponder.funnel_intro.header": "使用漏斗", - "create.ponder.funnel_intro.text_1": "用漏斗来存取物品栏内的物品,可谓又快又好", + "create.ponder.funnel_intro.text_1": "用漏斗来存取容器内的物品,可谓又快又好", "create.ponder.funnel_redstone.header": "红石信号控制", "create.ponder.funnel_redstone.text_1": "红石信号会使漏斗停止工作", "create.ponder.funnel_transfer.header": "直接运输", - "create.ponder.funnel_transfer.text_1": "漏斗无法将物品传输到非开放式的物品栏中", + "create.ponder.funnel_transfer.text_1": "漏斗不能在闭合容器之间直接传输物品", "create.ponder.funnel_transfer.text_2": "溜槽和智能溜槽更适用于这样的场景", "create.ponder.funnel_transfer.text_3": "水平传输也是如此,也许传送带更方便快捷", - "create.ponder.furnace_engine.header": "使用熔炉引擎生产旋转力", - "create.ponder.furnace_engine.text_1": "熔炉引擎会在与其相连熔炉工作时生产旋转力", + "create.ponder.furnace_engine.header": "使用熔炉引擎产生旋转力", + "create.ponder.furnace_engine.text_1": "熔炉引擎会在其连接的熔炉工作时产生旋转力", "create.ponder.furnace_engine.text_2": "如此产生的旋转力具有非常大的应力值", "create.ponder.furnace_engine.text_3": "使用高炉会使得引擎的效率翻倍", @@ -1990,29 +1990,29 @@ "create.ponder.gantry_carriage.text_2": "起重机可以移动其黏附的方块", "create.ponder.gantry_cascaded.header": "串联起重机", - "create.ponder.gantry_cascaded.text_1": "无需强力胶,取物器便可与起重机杆相连", + "create.ponder.gantry_cascaded.text_1": "无需强力胶,起重机取物器便可与起重机杆相连", "create.ponder.gantry_cascaded.text_2": "即使是在移动的起重机杆上也是如此", "create.ponder.gantry_cascaded.text_3": "因此,起重机系统可以串联起来,如此可以影响到多轴向的运动", "create.ponder.gantry_direction.header": "起重机移动方向", "create.ponder.gantry_direction.text_1": "起重机杆可以有相反的方向", - "create.ponder.gantry_direction.text_2": "取物器的移动方向取决于起重机杆的方向", - "create.ponder.gantry_direction.text_3": "......以及起重机杆的旋转方向", + "create.ponder.gantry_direction.text_2": "起重机取物器的移动方向取决于起重机杆的方向", + "create.ponder.gantry_direction.text_3": "……以及起重机杆的旋转方向", "create.ponder.gantry_direction.text_4": "在旋转传递中,此规则同样适用", "create.ponder.gantry_redstone.header": "起重机的力传递", - "create.ponder.gantry_redstone.text_1": "被红石信号激活的起重机,将不会移动其上的取物器", + "create.ponder.gantry_redstone.text_1": "被红石信号激活的起重机杆,将不会移动其上的取物器", "create.ponder.gantry_redstone.text_2": "作为替代,杆上的旋转力会传递到取物器的输出杆上", "create.ponder.gantry_shaft.header": "使用起重机杆", - "create.ponder.gantry_shaft.text_1": "起重机杆组成了起重机系统的基础。与其相接的载物器可以沿着杆进行移动。", - "create.ponder.gantry_shaft.text_2": "起重机系统可以移动与其相接的方块。", + "create.ponder.gantry_shaft.text_1": "起重机杆组成了起重机系统的基础,与其相接的取物器可以沿着杆进行移动", + "create.ponder.gantry_shaft.text_2": "起重机系统可以移动与其相接的方块", "create.ponder.gearbox.header": "使用十字齿轮箱传递旋转力", - "create.ponder.gearbox.text_1": "更改旋转轴,很容易使得整个旋转体系变得臃肿不堪", - "create.ponder.gearbox.text_2": "十字齿轮箱则是替代方案,它的体积更为小巧紧", - "create.ponder.gearbox.text_3": "侧边连接的传动杆,旋转方向与输入端一致", - "create.ponder.gearbox.text_4": "直线连接的传动杆,旋转方向会被反转", + "create.ponder.gearbox.text_1": "更改旋转轴向,很容易使得整个旋转体系变得臃肿不堪", + "create.ponder.gearbox.text_2": "十字齿轮箱则是替代方案,它的体积更为小巧紧凑", + "create.ponder.gearbox.text_3": "垂直相邻的传动杆,旋转方向呈镜像", + "create.ponder.gearbox.text_4": "直线连接的传动杆,旋转方向相反", "create.ponder.gearshift.header": "使用反转齿轮箱控制旋转力", "create.ponder.gearshift.text_1": "反转齿轮箱可以直线传输旋转", @@ -2022,24 +2022,24 @@ "create.ponder.hand_crank.text_1": "玩家可以使用手摇曲柄来手动产生旋转力", "create.ponder.hand_crank.text_2": "按住右键可以逆时针旋转它", "create.ponder.hand_crank.text_3": "它产生的转速相对较高", - "create.ponder.hand_crank.text_4": "潜行长按右键可以顺时针旋转它", + "create.ponder.hand_crank.text_4": "潜行按住右键可以顺时针旋转它", "create.ponder.hose_pulley.header": "使用软管滑轮抽取或排放流体", - "create.ponder.hose_pulley.text_1": "软管滑轮可以用于方便地对一个较大区域进行抽取液体或填满液体的操作", + "create.ponder.hose_pulley.text_1": "软管滑轮可以用于方便地对一个较大区域进行抽取流体或填满流体的操作", "create.ponder.hose_pulley.text_2": "通过输入动力可以调节软管末端的高度", - "create.ponder.hose_pulley.text_3": "翻转动力输入的方向可以收起软管", + "create.ponder.hose_pulley.text_3": "反转动力输入的方向可以收起软管", "create.ponder.hose_pulley.text_4": "管道可以连接在另一侧", - "create.ponder.hose_pulley.text_5": "连接的管道可以将流体输入到软管滑轮中,软管会在下方排出口处放置流体源...", - "create.ponder.hose_pulley.text_6": "...或者提供吸力来抽取世界中的流体", + "create.ponder.hose_pulley.text_5": "连接的管道可以将流体输入到软管滑轮中,软管会在下方排出口处放置流体源……", + "create.ponder.hose_pulley.text_6": "……或者提供吸力来抽取世界中的流体", "create.ponder.hose_pulley.text_7": "软管滑轮的抽取/排放速度取决于连接管道中流体的流速", - "create.ponder.hose_pulley_infinite.header": "被动抽取或排放从大体量流体中", - "create.ponder.hose_pulley_infinite.text_1": "当软管被放进足够大的流体中时...", - "create.ponder.hose_pulley_infinite.text_2": "...它在抽取或排放液体时将不会影响流体源", + "create.ponder.hose_pulley_infinite.header": "被动抽取和排放大体量流体", + "create.ponder.hose_pulley_infinite.text_1": "当软管被放进足够大的流体中时……", + "create.ponder.hose_pulley_infinite.text_2": "……它在抽取或排放流体时将不会影响流体源", "create.ponder.hose_pulley_infinite.text_3": "可以从这些软管滑轮中无限量地抽取或向其排放流体", "create.ponder.hose_pulley_level.header": "软管滑轮的排水/抽水机制", - "create.ponder.hose_pulley_level.text_1": "当软管彻底收回时,软管滑轮无法工作。", + "create.ponder.hose_pulley_level.text_1": "当软管彻底收回时,软管滑轮无法工作", "create.ponder.hose_pulley_level.text_2": "抽取流体的顺序为从上到下", "create.ponder.hose_pulley_level.text_3": "流体表面最终将会被抽取到刚好低于软管开口", "create.ponder.hose_pulley_level.text_4": "填充流体的顺序为从下到上", @@ -2048,9 +2048,9 @@ "create.ponder.item_drain.header": "使用分液池提取物品中的流体", "create.ponder.item_drain.text_1": "分液池可以提取物品中的流体", "create.ponder.item_drain.text_2": "右击可以将手持物品中的流体倒入分液池中", - "create.ponder.item_drain.text_3": "当物品从侧面输入时...", - "create.ponder.item_drain.text_4": "...物品将会经过分液池顶部,并在此过程中将其包含的液体排入分液池内", - "create.ponder.item_drain.text_5": "流体管道可以从分液池中抽取液体", + "create.ponder.item_drain.text_3": "当物品从侧面输入时……", + "create.ponder.item_drain.text_4": "……物品将会滚过分液池顶部,并在此过程中将其包含的流体排入分液池内", + "create.ponder.item_drain.text_5": "流体管道可以从分液池中抽取流体", "create.ponder.item_vault_sizes.header": "物品保险库的尺寸", "create.ponder.item_vault_sizes.text_1": "可以组合物品保险库以增加总容量", @@ -2068,14 +2068,14 @@ "create.ponder.large_cogwheel.text_2": "可以利用大齿轮变更旋转轴向", "create.ponder.linear_chassis_attachment.header": "使用机壳底盘黏合方块", - "create.ponder.linear_chassis_attachment.text_1": "它的开放面可以变为黏性面", - "create.ponder.linear_chassis_attachment.text_2": "再次点击黏性面,可以将它的相反面也变得具有黏性", + "create.ponder.linear_chassis_attachment.text_1": "它的外露面可以变为黏性面", + "create.ponder.linear_chassis_attachment.text_2": "再次点击黏性面,可以将它的对面也变得具有黏性", "create.ponder.linear_chassis_attachment.text_3": "空手潜行右击可以移除此面的黏性物", "create.ponder.linear_chassis_attachment.text_4": "黏性面可以将此面前方的一长条方块黏住", "create.ponder.linear_chassis_attachment.text_5": "使用扳手可以精确控制底盘的影响范围", "create.ponder.linear_chassis_attachment.text_6": "按住 Ctrl 滑动滚轮,你可以一次性调节所有底盘的影响范围", "create.ponder.linear_chassis_attachment.text_7": "若想让底盘的其他面也能粘方块,你需要用到强力胶", - "create.ponder.linear_chassis_attachment.text_8": "利用这些机制,任何形状的机制都可以像装置那样移动", + "create.ponder.linear_chassis_attachment.text_8": "利用这些机制,任何形状的结构都可以作为装置移动", "create.ponder.linear_chassis_group.header": "成组移动机壳底盘", "create.ponder.linear_chassis_group.text_1": "相邻的机壳底盘可以相互连接在一起", @@ -2084,12 +2084,12 @@ "create.ponder.mechanical_arm.header": "配置动力臂", "create.ponder.mechanical_arm.text_1": "你得在放置动力臂之前就配置好它的输入以及输出端", - "create.ponder.mechanical_arm.text_2": "手持动力臂右击某个存储空间,可以将其指定为目标", + "create.ponder.mechanical_arm.text_2": "手持动力臂右击某个容器,可以将其指定为目标", "create.ponder.mechanical_arm.text_3": "再次右击可以将其在输入端(蓝色)以及输出端(橙色)之间切换", "create.ponder.mechanical_arm.text_4": "左击此组件可以移除选择", "create.ponder.mechanical_arm.text_5": "将动力臂放下来后,它会将此前选择的方块作为目标", - "create.ponder.mechanical_arm.text_6": "在有效范围内,机械臂可以有任意数量的输出以及输入端", - "create.ponder.mechanical_arm.text_7": "然而,并不是所有的存储空间可以被直接交互", + "create.ponder.mechanical_arm.text_6": "在有效范围内,动力臂可以有任意数量的输出以及输入端", + "create.ponder.mechanical_arm.text_7": "然而,并不是所有的容器可以被直接交互", "create.ponder.mechanical_arm.text_8": "在此情况下,漏斗和置物台可以解决此问题", "create.ponder.mechanical_arm_filtering.header": "过滤动力臂的输出端", @@ -2097,19 +2097,19 @@ "create.ponder.mechanical_arm_filtering.text_2": "输出", "create.ponder.mechanical_arm_filtering.text_3": "有时,你会想着利用某种过滤限制动力臂的目标", "create.ponder.mechanical_arm_filtering.text_4": "动力臂自身并不提供任何过滤选项", - "create.ponder.mechanical_arm_filtering.text_5": "然而,若将黄铜漏斗作为目标,则漏斗的过滤槽则可以应用至动力臂上", + "create.ponder.mechanical_arm_filtering.text_5": "然而,若将黄铜漏斗作为目标,则漏斗的过滤槽可以应用至动力臂上", "create.ponder.mechanical_arm_filtering.text_6": "动力臂足够智能,它不会去拿取那些它无法分配的物品", "create.ponder.mechanical_arm_modes.header": "动力臂的分配模式", "create.ponder.mechanical_arm_modes.text_1": "输入", "create.ponder.mechanical_arm_modes.text_2": "输出", - "create.ponder.mechanical_arm_modes.text_3": "若动力臂必须在数个有效的输出端之间作出选择...", - "create.ponder.mechanical_arm_modes.text_4": "...它会依照自己的设定选择特定的行为", + "create.ponder.mechanical_arm_modes.text_3": "若动力臂必须在数个有效的输出端之间作出选择……", + "create.ponder.mechanical_arm_modes.text_4": "……它会依照自己的设定选择特定的行为", "create.ponder.mechanical_arm_modes.text_5": "手持扳手对其滑动滚轮,可以改变其配置", - "create.ponder.mechanical_arm_modes.text_6": "轮询调度模式很好理解,即循环输出至所有有效的输出端", + "create.ponder.mechanical_arm_modes.text_6": "“轮询调度”模式很好理解,即循环输出至所有有效的输出端", "create.ponder.mechanical_arm_modes.text_7": "如果某个输出端无法容纳更多物品,则它会被跳过", - "create.ponder.mechanical_arm_modes.text_8": "强制轮询调度不会跳过任何输出端,动力臂会一直等待,直到输出端有空位容纳物品输入", - "create.ponder.mechanical_arm_modes.text_9": "最近优先模式会使得动力臂先将物品输出至更早被选择的输出端", + "create.ponder.mechanical_arm_modes.text_8": "“强制轮询调度”不会跳过任何输出端,动力臂会一直等待,直到输出端有空位容纳物品输入", + "create.ponder.mechanical_arm_modes.text_9": "“第一目标优先”模式会使得动力臂先将物品输出至更早被选择的输出端", "create.ponder.mechanical_arm_redstone.header": "利用红石信号控制动力臂", "create.ponder.mechanical_arm_redstone.text_1": "通入红石信号后,动力臂会停止工作", @@ -2124,32 +2124,32 @@ "create.ponder.mechanical_crafter.text_1": "动力合成器阵列可用于自动化任何合成配方的制作", "create.ponder.mechanical_crafter.text_2": "使用扳手可以调控合成器的合成通路", "create.ponder.mechanical_crafter.text_3": "所有的合成通路必须汇集到任意一侧的一个出口,整套合成器方可算是设置正确", - "create.ponder.mechanical_crafter.text_4": "输出产物会被放入位于出口的存储空间中", + "create.ponder.mechanical_crafter.text_4": "输出产物会被放入位于出口的容器中", "create.ponder.mechanical_crafter.text_5": "动力合成器的运转需要旋转力的供应", "create.ponder.mechanical_crafter.text_6": "右击合成器正面,可以手动放入物品", "create.ponder.mechanical_crafter.text_7": "一旦合成通路上的所有合成槽位都有了物品,合成就会开始", "create.ponder.mechanical_crafter.text_8": "而对于那些没有完全占满所有合成器槽位的配方,你可以通入红石信号强制开启合成", - "create.ponder.mechanical_crafter_connect.header": "为合成器连接物品栏", + "create.ponder.mechanical_crafter_connect.header": "连接动力合成器的容器", "create.ponder.mechanical_crafter_connect.text_1": "合成器可以自动接受向其输入的物品", "create.ponder.mechanical_crafter_connect.text_2": "对其背面使用扳手,可以连接合成器", "create.ponder.mechanical_crafter_connect.text_3": "所有相连的合成器可以访问同一个位置的输入", "create.ponder.mechanical_crafter_covers.header": "盖住动力合成器的合成槽", "create.ponder.mechanical_crafter_covers.text_1": "有些配方需要额外的合成器,来补足合成通路上的间隙", - "create.ponder.mechanical_crafter_covers.text_2": "使用合成槽盖板,合成器会在合成进行时的行为就如同一个空的合成槽位", - "create.ponder.mechanical_crafter_covers.text_3": "被盖住的合成器并不会阻断共享输入端的影响", + "create.ponder.mechanical_crafter_covers.text_2": "使用合成槽盖板,合成器在合成时的行为就如同一个空的合成槽位", + "create.ponder.mechanical_crafter_covers.text_3": "使用扳手在背面创建的的共享输入也可以跨越有盖的合成器", "create.ponder.mechanical_drill.header": "使用动力钻头破坏方块", - "create.ponder.mechanical_drill.text_1": "当向其通入旋转力后,动力钻头会破坏它面前的方块", - "create.ponder.mechanical_drill.text_2": "它的挖掘速度取决于通入的旋转力转速", + "create.ponder.mechanical_drill.text_1": "向其通入旋转力后,动力钻头会破坏它面前的方块", + "create.ponder.mechanical_drill.text_2": "它的挖掘速度取决于通入的旋转速度", "create.ponder.mechanical_drill_contraption.header": "在装置中使用动力钻头", - "create.ponder.mechanical_drill_contraption.text_1": "在运动装置中使用动力钻头时...", - "create.ponder.mechanical_drill_contraption.text_2": "...它会破坏掉它撞上的方块", + "create.ponder.mechanical_drill_contraption.text_1": "当钻头作为运动装置一部分移动时……", + "create.ponder.mechanical_drill_contraption.text_2": "……它会破坏掉它撞上的方块", "create.ponder.mechanical_harvester.header": "在装置中使用动力收割机", - "create.ponder.mechanical_harvester.text_1": "在运动装置中使用动力收割机时...", + "create.ponder.mechanical_harvester.text_1": "当收割机作为运动装置一部分移动时……", "create.ponder.mechanical_harvester.text_2": "它会采收其路径上的作物,并重置这些作物的生长进度", "create.ponder.mechanical_mixer.header": "使用动力搅拌器处理物品", @@ -2161,22 +2161,22 @@ "create.ponder.mechanical_piston.header": "使用动力活塞移动结构", "create.ponder.mechanical_piston.text_1": "动力活塞可以移动它前方的方块", "create.ponder.mechanical_piston.text_2": "移动速度和方向取决于通入活塞的旋转力", - "create.ponder.mechanical_piston.text_3": "黏性动力活塞可以将相接的方块拉回来", + "create.ponder.mechanical_piston.text_3": "黏性动力活塞可以将连接的方块拉回来", "create.ponder.mechanical_piston_modes.header": "动力活塞的移动模式", - "create.ponder.mechanical_piston_modes.text_1": "一旦活塞停下,被移动的结构就会回退到方块状态", + "create.ponder.mechanical_piston_modes.text_1": "一旦活塞停下,被移动的结构就会恢复到方块状态", "create.ponder.mechanical_piston_modes.text_2": "你也可以将其配置为从不方块化,或者只在起始位置方块化", "create.ponder.mechanical_plough.header": "在装置中使用动力犁", - "create.ponder.mechanical_plough.text_1": "在运动装置中使用动力犁时...", - "create.ponder.mechanical_plough.text_2": "...它会破坏掉那些不具有固体碰撞箱的方块", + "create.ponder.mechanical_plough.text_1": "当动力犁作为运动装置一部分移动时……", + "create.ponder.mechanical_plough.text_2": "……它会破坏掉那些不具有固体碰撞箱的方块", "create.ponder.mechanical_plough.text_3": "此外,动力犁可以耕地", - "create.ponder.mechanical_plough.text_4": "...它也可以在不伤害实体的情况下推动它们", + "create.ponder.mechanical_plough.text_4": "……它也可以在不伤害实体的情况下推动它们", "create.ponder.mechanical_press.header": "使用动力辊压机处理物品", "create.ponder.mechanical_press.text_1": "动力辊压机可以处理位于其下方的物品", "create.ponder.mechanical_press.text_2": "在其下方丢入物品,或者将物品放在置物台上,都算作有效的物品输入", - "create.ponder.mechanical_press.text_3": "若物品位于传送带上...", + "create.ponder.mechanical_press.text_3": "若物品位于传送带上……", "create.ponder.mechanical_press.text_4": "辊压机会使物品停下,然后自动处理这一物品", "create.ponder.mechanical_press_compacting.header": "使用动力辊压机压缩物品", @@ -2188,35 +2188,35 @@ "create.ponder.mechanical_pump_flow.header": "使用动力泵传输流体", "create.ponder.mechanical_pump_flow.text_1": "动力泵可以控制管道网络中的流体", "create.ponder.mechanical_pump_flow.text_2": "当接入动力时,其上的箭头指示流体流向", - "create.ponder.mechanical_pump_flow.text_3": "泵后的管道网络正在抽取流体...", - "create.ponder.mechanical_pump_flow.text_4": "...而泵前的网络则把这些液体排到世界当中", + "create.ponder.mechanical_pump_flow.text_3": "泵后的管道网络正在抽取流体……", + "create.ponder.mechanical_pump_flow.text_4": "……而泵前的网络则在排放流体", "create.ponder.mechanical_pump_flow.text_5": "反转动力方向将会改变流体流向", "create.ponder.mechanical_pump_flow.text_6": "使用扳手可以手动改变动力泵的朝向", "create.ponder.mechanical_pump_speed.header": "动力泵的传输机制", "create.ponder.mechanical_pump_speed.text_1": "动力泵的压力最多沿管线传递 16 格,与输入动力无关", - "create.ponder.mechanical_pump_speed.text_2": "提高输入动力,可以加快流的蔓延速度...", - "create.ponder.mechanical_pump_speed.text_3": "...以及流体的传输速度", + "create.ponder.mechanical_pump_speed.text_2": "提高输入转速,可以加快流体的蔓延速度……", + "create.ponder.mechanical_pump_speed.text_3": "……以及流体的传输速度", "create.ponder.mechanical_pump_speed.text_4": "同一管道网络中的多个并联动力泵,它们的传输量可以叠加", - "create.ponder.mechanical_pump_speed.text_5": "使泵的传输方向相互交替,可以方便地控制流体流向", + "create.ponder.mechanical_pump_speed.text_5": "使泵的朝向相互交替,可以方便地对齐流体流向", "create.ponder.mechanical_saw_breaker.header": "使用动力锯伐木", "create.ponder.mechanical_saw_breaker.text_1": "向其通入旋转力后,动力锯可以直接砍伐掉它面前的树木", "create.ponder.mechanical_saw_breaker.text_2": "想要一次性砍掉整棵树,锯子必须破坏掉树与地面连接的最后一个方块", "create.ponder.mechanical_saw_contraption.header": "在装置中使用动力锯", - "create.ponder.mechanical_saw_contraption.text_1": "若在运动装置中使用动力锯...", - "create.ponder.mechanical_saw_contraption.text_2": "...它会将撞到它的树木破坏掉", + "create.ponder.mechanical_saw_contraption.text_1": "当动力锯作为运动装置一部分移动时……", + "create.ponder.mechanical_saw_contraption.text_2": "……它会将撞到它的树木破坏掉", "create.ponder.mechanical_saw_processing.header": "使用动力锯处理物品", - "create.ponder.mechanical_saw_processing.text_1": "面向朝上的动力锯可以将物品处理为其变种", + "create.ponder.mechanical_saw_processing.text_1": "面朝上的动力锯可以处理各种物品", "create.ponder.mechanical_saw_processing.text_2": "处理过后的物品的弹出方向始终与通入锯中的旋转转向相反", "create.ponder.mechanical_saw_processing.text_3": "锯子可以与传送带放置在一条直线上,相互配合工作", "create.ponder.mechanical_saw_processing.text_4": "若输入原料有多种可能产物,你可以用动力锯上的过滤槽指定只产出某种产物", "create.ponder.mechanical_saw_processing.text_5": "若没有使用过滤槽,动力锯会在各产物中按顺序循环输出", "create.ponder.millstone.header": "使用石磨处理物品", - "create.ponder.millstone.text_1": "石磨会对输入的物品进行磨制", + "create.ponder.millstone.text_1": "石磨会对输入的物品进行研磨", "create.ponder.millstone.text_2": "在其侧边使用齿轮与其相耦合,方可为其通入动力", "create.ponder.millstone.text_3": "顶部可以丢入或者塞入物品", "create.ponder.millstone.text_4": "一段时间过后,右击石磨可以拿出其中的产物", @@ -2224,12 +2224,12 @@ "create.ponder.nixie_tube.header": "使用辉光管", "create.ponder.nixie_tube.text_1": "通入红石信号后,辉光管会显示出红石信号的强度", - "create.ponder.nixie_tube.text_2": "在着它使用更改过名称的命名牌,可以自定义它的显示文本", + "create.ponder.nixie_tube.text_2": "对着它使用更改过名称的命名牌,可以自定义它的显示文本", "create.ponder.nixie_tube.text_3": "使用染料右击,便可更改辉光管的显示颜色", "create.ponder.piston_pole.header": "活塞延长杆", - "create.ponder.piston_pole.text_1": "若无相接的延长杆,动力活塞无法移动其他方块", - "create.ponder.piston_pole.text_2": "在其背面安装的延长杆长度,决定了活塞的推动范围", + "create.ponder.piston_pole.text_1": "若无相接的活塞杆,动力活塞无法移动其他方块", + "create.ponder.piston_pole.text_2": "在其背面安装的活塞杆长度,决定了活塞的推动范围", "create.ponder.portable_fluid_interface.header": "装置流体交换", "create.ponder.portable_fluid_interface.text_1": "管道无法与运动装置内的流体储罐直接交互", @@ -2237,18 +2237,18 @@ "create.ponder.portable_fluid_interface.text_3": "放置第二个接口时,记得要与装置接口相隔 1 格或者 2 格的距离", "create.ponder.portable_fluid_interface.text_4": "当它们彼此经过时,它们会连接在一起", "create.ponder.portable_fluid_interface.text_5": "连接状态下,固定侧接口便会作为整个装置的流体存储代理", - "create.ponder.portable_fluid_interface.text_6": "流体可被泵入到装置内....", - "create.ponder.portable_fluid_interface.text_7": "...或是从装置中抽取出来", + "create.ponder.portable_fluid_interface.text_6": "流体可被泵入到装置内……", + "create.ponder.portable_fluid_interface.text_7": "……或是从装置中抽取出来", "create.ponder.portable_fluid_interface.text_8": "如果一小段时间内没有流体交换,接口将会断开连接,然后装置重新开始运动", "create.ponder.portable_storage_interface.header": "装置存储交换", - "create.ponder.portable_storage_interface.text_1": "玩家无法与运动装置内的存储空间进行交互", - "create.ponder.portable_storage_interface.text_2": "这一组件可以在不停止装置的情况下与装置内的存储空间进行交互", + "create.ponder.portable_storage_interface.text_1": "玩家无法与运动装置内的容器进行交互", + "create.ponder.portable_storage_interface.text_2": "这一组件可以在不停止装置的情况下与装置内的容器进行交互", "create.ponder.portable_storage_interface.text_3": "放置第二个接口时,记得要与装置接口相隔 1 格或者 2 格的距离", "create.ponder.portable_storage_interface.text_4": "当它们彼此经过时,它们会连接在一起", "create.ponder.portable_storage_interface.text_5": "连接状态下,固定侧接口便会作为整个装置的存储空间代理", - "create.ponder.portable_storage_interface.text_6": "物品可被输入到装置内...", - "create.ponder.portable_storage_interface.text_7": "...或是从装置中提取出来", + "create.ponder.portable_storage_interface.text_6": "物品可被输入到装置内……", + "create.ponder.portable_storage_interface.text_7": "……或是从装置中提取出来", "create.ponder.portable_storage_interface.text_8": "如果一小段时间内没有物品交换,接口将会断开连接,然后装置重新开始运动", "create.ponder.portable_storage_interface_redstone.header": "红石控制", @@ -2262,8 +2262,8 @@ "create.ponder.powered_toggle_latch.header": "使用转换锁存器控制信号", "create.ponder.powered_toggle_latch.text_1": "转换锁存器是一种可以用红石信号控制的拉杆", - "create.ponder.powered_toggle_latch.text_2": "后方信号输入可以改变它的状态", - "create.ponder.powered_toggle_latch.text_3": "...开启或者是关闭", + "create.ponder.powered_toggle_latch.text_2": "后方信号输入可以将其更改为", + "create.ponder.powered_toggle_latch.text_3": "……开启或者是关闭状态", "create.ponder.powered_toggle_latch.text_4": "你也可以手动切换其状态", "create.ponder.pulse_extender.header": "使用脉冲延长器控制信号", @@ -2279,15 +2279,15 @@ "create.ponder.pulse_repeater.text_3": "配置的延迟范围最长可达 30 分钟", "create.ponder.radial_chassis.header": "使用旋转底盘黏着方块", - "create.ponder.radial_chassis.text_1": "同一行上的旋转底盘会相互连接在一起", + "create.ponder.radial_chassis.text_1": "相同的旋转底盘会连续连接成一排", "create.ponder.radial_chassis.text_2": "当其中的一个底盘被装置带动时,其余的底盘也会被带动", "create.ponder.radial_chassis.text_3": "底盘的侧边可以变为黏性面", "create.ponder.radial_chassis.text_4": "再次点击黏性面,可以让其所有面都变得带黏性", "create.ponder.radial_chassis.text_5": "空手潜行右击可以移除其上的黏性物", - "create.ponder.radial_chassis.text_6": "若有物品与底盘的黏性面相接触...", - "create.ponder.radial_chassis.text_7": "...底盘便会与同层且位于半径内的所有可及方块黏着在一起", - "create.ponder.radial_chassis.text_8": "使用扳手可以精确指定底盘的影响范围", - "create.ponder.radial_chassis.text_9": "黏性面一侧的不可及方块不会被黏着", + "create.ponder.radial_chassis.text_6": "若有物品与底盘的黏性面相接触……", + "create.ponder.radial_chassis.text_7": "……底盘便会与同层且位于半径内的所有可到达方块黏着在一起", + "create.ponder.radial_chassis.text_8": "使用扳手可以精确指定底盘的影响半径", + "create.ponder.radial_chassis.text_9": "任何黏性面都不可到达的方块不会被黏着", "create.ponder.redstone_contact.header": "接触式红石信号发生器", "create.ponder.redstone_contact.text_1": "当两个接触式红石信号发生器面对面时,它们会发出红石信号", @@ -2295,24 +2295,24 @@ "create.ponder.redstone_link.header": "使用无线红石信号终端", "create.ponder.redstone_link.text_1": "无线红石信号终端可以无线传输红石信号", - "create.ponder.redstone_link.text_2": "潜行右击可以改变其接收模式", + "create.ponder.redstone_link.text_2": "潜行右击可以切换接收模式", "create.ponder.redstone_link.text_3": "手持扳手右击也可以", "create.ponder.redstone_link.text_4": "接收端会发出由传输端发来的信号,有效距离为 128 格", - "create.ponder.redstone_link.text_5": "在它们所带的槽位中放上物品,可以为它们指定频道", - "create.ponder.redstone_link.text_6": "只有频道相互匹配的终端方可互通", + "create.ponder.redstone_link.text_5": "在它们所带的槽位中放上物品,可以为它们指定频率", + "create.ponder.redstone_link.text_6": "只有频率相互匹配的终端方可互通", "create.ponder.rope_pulley.header": "使用绳索滑轮移动结构", "create.ponder.rope_pulley.text_1": "绳索滑轮在接受旋转力时可以垂直移动方块结构", "create.ponder.rope_pulley.text_2": "移动的方向及速度取决于提供的转速", "create.ponder.rope_pulley_attachment.header": "绳索滑轮与装置一同运动", - "create.ponder.rope_pulley_attachment.text_1": "当绳索滑轮本身在装置中被带动时...", - "create.ponder.rope_pulley_attachment.text_2": "...它附着在滑轮上的结构会被滑轮拉着一同移动", + "create.ponder.rope_pulley_attachment.text_1": "当绳索滑轮本身在装置中被带动时……", + "create.ponder.rope_pulley_attachment.text_2": "……附着在滑轮上的结构会被滑轮拉着一同移动", "create.ponder.rope_pulley_attachment.text_3": "注意,只有绳索滑轮停止工作时才能被移动", "create.ponder.rope_pulley_modes.header": "绳索滑轮的运动模式", - "create.ponder.rope_pulley_modes.text_1": "当绳索滑轮停止运动时,它所附属的移动结构便会方块化", - "create.ponder.rope_pulley_modes.text_2": "你可以调整整个结构永不方块化,或者仅在结构的初始位置方块化", + "create.ponder.rope_pulley_modes.text_1": "当绳索滑轮停止运动时,它所附着的移动结构便会方块化", + "create.ponder.rope_pulley_modes.text_2": "你可以调整使整个结构永不方块化,或者仅在结构的初始位置方块化", "create.ponder.rotation_speed_controller.header": "使用转速控制器", "create.ponder.rotation_speed_controller.text_1": "转速控制器将旋转力从其转轴传递至它上方的大齿轮", @@ -2338,14 +2338,14 @@ "create.ponder.shaft.header": "使用传动杆传递旋转力", "create.ponder.shaft.text_1": "传动杆能直线传递旋转力", - "create.ponder.shaft_casing.header": "传动杆箱", + "create.ponder.shaft_casing.header": "装壳传动杆", "create.ponder.shaft_casing.text_1": "安山或黄铜机壳,装饰传动杆的好伙伴", "create.ponder.smart_chute.header": "使用智能溜槽过滤物品", "create.ponder.smart_chute.text_1": "智能溜槽是垂直溜槽的升级控制版", "create.ponder.smart_chute.text_2": "当在其过滤槽内指定了物品后,溜槽只会传输这一指定标记的物品", "create.ponder.smart_chute.text_3": "使用鼠标滚轮可以指定被过滤的物品数量", - "create.ponder.smart_chute.text_4": "通入红石信号,智能溜槽将会完全暂停工作", + "create.ponder.smart_chute.text_4": "通入红石信号可以使智能溜槽停止工作", "create.ponder.smart_pipe.header": "使用智能流体管道控制流体流动", "create.ponder.smart_pipe.text_1": "智能流体管道可以限制通过它的流体种类", @@ -2360,15 +2360,15 @@ "create.ponder.spout_filling.header": "使用注液器填充物品", "create.ponder.spout_filling.text_1": "注液器可以将流体装入下方经过且可以接受该流体的物品", - "create.ponder.spout_filling.text_2": "注液器的流体存储无法直接手动交互", + "create.ponder.spout_filling.text_2": "注液器的流体容器无法直接手动交互", "create.ponder.spout_filling.text_3": "使用管道可以将流体输入到注液器内", "create.ponder.spout_filling.text_4": "输入的物品可以被放置在其下方的置物台上", - "create.ponder.spout_filling.text_5": "当传送带上的物品经过注液器下方时...", + "create.ponder.spout_filling.text_5": "当传送带上的物品经过注液器下方时……", "create.ponder.spout_filling.text_6": "注液器会使物品停下,然后自动处理这一物品", "create.ponder.stabilized_bearings.header": "装置固定朝向", - "create.ponder.stabilized_bearings.text_1": "当动力轴承在结构被带动时...", - "create.ponder.stabilized_bearings.text_2": "...它会确保它转盘的垂直朝向不变", + "create.ponder.stabilized_bearings.text_1": "当动力轴承在结构被带动时……", + "create.ponder.stabilized_bearings.text_2": "……它会确保它转盘的垂直朝向不变", "create.ponder.stabilized_bearings.text_3": "跟默认的一样,动力轴承会黏着它前方的方块", "create.ponder.stabilized_bearings.text_4": "这种情况下,它所黏着的子装置的垂直朝向也不会改变", @@ -2379,15 +2379,15 @@ "create.ponder.sticker.text_4": "再次接受红石信号时,它会断开与方块的黏连", "create.ponder.stressometer.header": "使用应力表来监测应力", - "create.ponder.stressometer.text_1": "应力表能显示当前动能网络内的应力信息", + "create.ponder.stressometer.text_1": "应力表能显示当前动力网络内的应力信息", "create.ponder.stressometer.text_2": "当佩戴工程师护目镜时,可以看到仪表所显示的更详细的数据", "create.ponder.stressometer.text_3": "红石比较器可以根据应力表的数值输出不同强弱的红石信号", "create.ponder.super_glue.header": "使用强力胶来黏附方块", "create.ponder.super_glue.text_1": "强力胶可以在任意两个方块间使用", "create.ponder.super_glue.text_2": "当被粘合的方块被组装为装置时,他们会一起运动", - "create.ponder.super_glue.text_3": "当强力胶在副手时...", - "create.ponder.super_glue.text_4": "...新放置的方块会自动被黏附在所放置方块的面上", + "create.ponder.super_glue.text_3": "当强力胶在副手时……", + "create.ponder.super_glue.text_4": "……新放置的方块会自动被黏附在所放置方块的面上", "create.ponder.super_glue.text_5": "左击可以清除强力胶", "create.ponder.valve_handle.header": "使用阀门手轮产生旋转力", @@ -2397,20 +2397,20 @@ "create.ponder.valve_handle.text_4": "潜行右击可使它顺时针旋转", "create.ponder.valve_handle.text_5": "可以通过染色来美化阀门手轮", - "create.ponder.valve_pipe.header": "使用阀门管道控制液体流", - "create.ponder.valve_pipe.text_1": "阀门管道可以控制管道网络中流体的蔓延", + "create.ponder.valve_pipe.header": "使用流体阀门控制液体流", + "create.ponder.valve_pipe.text_1": "流体阀门可以控制管道网络中流体的蔓延", "create.ponder.valve_pipe.text_2": "通过其上的传动杆输入动力可以控制它的开关", "create.ponder.valve_pipe.text_3": "提供向“打开”方向的旋转力会打开阀门,使得流体可以通过", "create.ponder.valve_pipe.text_4": "提供另一方向的旋转力可以关闭阀门,阻止流体通过", "create.ponder.water_wheel.header": "使用水车产生旋转力", - "create.ponder.water_wheel.text_1": "水车利用临近的水流来进行应力发生", + "create.ponder.water_wheel.text_1": "水车利用相邻的水流来产生应力", "create.ponder.water_wheel.text_2": "水车接触水流的面越多,它的转速越高", "create.ponder.water_wheel.text_3": "水车叶片应逆着水流方向摆放", "create.ponder.water_wheel.text_4": "如果顺着水流摆放,它的效率则会降低", "create.ponder.weighted_ejector.header": "使用弹射置物台", - "create.ponder.weighted_ejector.text_1": "手持弹射置物台时,潜行时右击可以设置弹射目标位置", + "create.ponder.weighted_ejector.text_1": "手持弹射置物台时,潜行右击可以设置弹射目标位置", "create.ponder.weighted_ejector.text_10": "现在,只有等被放置的物品数量等于所设定数量时,弹射置物台才会弹射物品", "create.ponder.weighted_ejector.text_11": "当其他实体站在弹射置物台上时会被直接弹射", "create.ponder.weighted_ejector.text_2": "现在,放置下的弹射置物台会将物品弹射至目标位置", @@ -2430,19 +2430,19 @@ "create.ponder.weighted_ejector_tunnel.text_1": "与黄铜隧道搭配使用时,弹射置物台可以将物品以特定数量进行分流", "create.ponder.weighted_ejector_tunnel.text_2": "首先,将黄铜隧道调整为“最近优先”模式,从而让它优先侧面输出", "create.ponder.weighted_ejector_tunnel.text_3": "置物台上所设置的物品数量则为被分流出去的物品数量", - "create.ponder.weighted_ejector_tunnel.text_4": "当所设置的物品数量被分流出去后...", - "create.ponder.weighted_ejector_tunnel.text_5": "...剩余的物品则会继续前进", + "create.ponder.weighted_ejector_tunnel.text_4": "当所设置的物品数量被分流出去后……", + "create.ponder.weighted_ejector_tunnel.text_5": "……剩余的物品则会继续前进", "create.ponder.windmill_source.header": "使用风车轴承产生旋转力", - "create.ponder.windmill_source.text_1": "在风车轴承会黏附它前方的方块", - "create.ponder.windmill_source.text_2": "如果有足够多的风帆方块黏附于其上,那么整体结构便可被视为风车", + "create.ponder.windmill_source.text_1": "风车轴承会黏附它前方的方块", + "create.ponder.windmill_source.text_2": "如果有足够多的类风帆方块黏附于其上,那么整体结构便可被视为风车", "create.ponder.windmill_source.text_3": "右击启动后,风车轴承会开始产生旋转力", - "create.ponder.windmill_source.text_4": "产生的转速取决于风帆方块的数量", + "create.ponder.windmill_source.text_4": "风帆方块的数量决定了它的旋转速度", "create.ponder.windmill_source.text_5": "使用扳手可以调整风车的旋转方向", - "create.ponder.windmill_source.text_6": "任何时候右击轴承,都可以将其停止,这样方便于你修改风车的结构", + "create.ponder.windmill_source.text_6": "任何时候右击轴承,都可以将其停止,这样你就能再次修改风车的结构", "create.ponder.windmill_structure.header": "风车装置", - "create.ponder.windmill_structure.text_1": "任何有至少 8 个风帆方块的结构,都被视为一个有效的风车", + "create.ponder.windmill_structure.text_1": "任何有至少 8 个类风帆方块的结构,都被视为一个有效的风车", "_": "Thank you for translating Create!" diff --git a/src/main/java/com/simibubi/create/api/connectivity/ConnectivityHandler.java b/src/main/java/com/simibubi/create/api/connectivity/ConnectivityHandler.java index fbf9c4dc3..023c1f21b 100644 --- a/src/main/java/com/simibubi/create/api/connectivity/ConnectivityHandler.java +++ b/src/main/java/com/simibubi/create/api/connectivity/ConnectivityHandler.java @@ -42,12 +42,15 @@ public class ConnectivityHandler { formMulti(be.getType(), be.getLevel(), cache, frontier); } - private static void formMulti(BlockEntityType type, BlockGetter level, SearchCache cache, List frontier) { + private static void formMulti(BlockEntityType type, + BlockGetter level, SearchCache cache, List frontier) { PriorityQueue> creationQueue = makeCreationQueue(); Set visited = new HashSet<>(); - Direction.Axis mainAxis = frontier.get(0).getMainConnectionAxis(); + Direction.Axis mainAxis = frontier.get(0) + .getMainConnectionAxis(); - // essentially, if it's a vertical multi then the search won't be restricted by Y + // essentially, if it's a vertical multi then the search won't be restricted by + // Y // alternately, a horizontal multi search shouldn't be restricted by X or Z int minX = (mainAxis == Direction.Axis.Y ? Integer.MAX_VALUE : Integer.MIN_VALUE); int minY = (mainAxis != Direction.Axis.Y ? Integer.MAX_VALUE : Integer.MIN_VALUE); @@ -59,14 +62,21 @@ public class ConnectivityHandler { minY = Math.min(pos.getY(), minY); minZ = Math.min(pos.getZ(), minZ); } - if (mainAxis == Direction.Axis.Y) minX -= frontier.get(0).getMaxWidth(); - if (mainAxis != Direction.Axis.Y) minY -= frontier.get(0).getMaxWidth(); - if (mainAxis == Direction.Axis.Y) minZ -= frontier.get(0).getMaxWidth(); + if (mainAxis == Direction.Axis.Y) + minX -= frontier.get(0) + .getMaxWidth(); + if (mainAxis != Direction.Axis.Y) + minY -= frontier.get(0) + .getMaxWidth(); + if (mainAxis == Direction.Axis.Y) + minZ -= frontier.get(0) + .getMaxWidth(); while (!frontier.isEmpty()) { T part = frontier.remove(0); BlockPos partPos = part.getBlockPos(); - if (visited.contains(partPos)) continue; + if (visited.contains(partPos)) + continue; visited.add(partPos); @@ -79,11 +89,15 @@ public class ConnectivityHandler { Direction dir = Direction.get(Direction.AxisDirection.NEGATIVE, axis); BlockPos next = partPos.relative(dir); - if (next.getX() <= minX || next.getY() <= minY || next.getZ() <= minZ) continue; - if (visited.contains(next)) continue; + if (next.getX() <= minX || next.getY() <= minY || next.getZ() <= minZ) + continue; + if (visited.contains(next)) + continue; T nextBe = partAt(type, level, next); - if (nextBe == null) continue; - if (nextBe.isRemoved()) continue; + if (nextBe == null) + continue; + if (nextBe.isRemoved()) + continue; frontier.add(nextBe); } } @@ -92,32 +106,38 @@ public class ConnectivityHandler { while (!creationQueue.isEmpty()) { Pair next = creationQueue.poll(); T toCreate = next.getValue(); - if (visited.contains(toCreate.getBlockPos())) continue; + if (visited.contains(toCreate.getBlockPos())) + continue; visited.add(toCreate.getBlockPos()); tryToFormNewMulti(toCreate, cache, false); } } - private static int tryToFormNewMulti(T be, SearchCache cache, boolean simulate) { - int bestWidth = 1; + private static int tryToFormNewMulti(T be, SearchCache cache, + boolean simulate) { + int bestWidth = 1; int bestAmount = -1; - if (!be.isController()) return 0; + if (!be.isController()) + return 0; int radius = be.getMaxWidth(); for (int w = 1; w <= radius; w++) { int amount = tryToFormNewMultiOfWidth(be, w, cache, true); - if (amount < bestAmount) continue; + if (amount < bestAmount) + continue; bestWidth = w; bestAmount = amount; } if (!simulate) { int beWidth = be.getWidth(); - if (beWidth == bestWidth && beWidth*beWidth * be.getHeight() == bestAmount) return bestAmount; + if (beWidth == bestWidth && beWidth * beWidth * be.getHeight() == bestAmount) + return bestAmount; splitMultiAndInvalidate(be, cache, false); - if (be instanceof IMultiTileContainer.Fluid ifluid && ifluid.hasTank()) ifluid.setTankSize(0, bestAmount); + if (be instanceof IMultiTileContainer.Fluid ifluid && ifluid.hasTank()) + ifluid.setTankSize(0, bestAmount); tryToFormNewMultiOfWidth(be, bestWidth, cache, false); @@ -129,12 +149,14 @@ public class ConnectivityHandler { return bestAmount; } - private static int tryToFormNewMultiOfWidth(T be, int width, SearchCache cache, boolean simulate) { + private static int tryToFormNewMultiOfWidth(T be, int width, + SearchCache cache, boolean simulate) { int amount = 0; int height = 0; BlockEntityType type = be.getType(); Level level = be.getLevel(); - if (level == null) return 0; + if (level == null) + return 0; BlockPos origin = be.getBlockPos(); // optional fluid handling @@ -142,49 +164,63 @@ public class ConnectivityHandler { FluidStack fluid = FluidStack.EMPTY; if (be instanceof IMultiTileContainer.Fluid ifluid && ifluid.hasTank()) { beTank = ifluid.getTank(0); - fluid = beTank.getFluid(); + fluid = beTank.getFluid(); } Direction.Axis axis = be.getMainConnectionAxis(); - Search: - for (int yOffset = 0; yOffset < be.getMaxLength(axis, width); yOffset++) { + Search: for (int yOffset = 0; yOffset < be.getMaxLength(axis, width); yOffset++) { for (int xOffset = 0; xOffset < width; xOffset++) { for (int zOffset = 0; zOffset < width; zOffset++) { BlockPos pos = switch (axis) { - case X -> origin.offset(yOffset, xOffset, zOffset); - case Y -> origin.offset(xOffset, yOffset, zOffset); - case Z -> origin.offset(xOffset, zOffset, yOffset); + case X -> origin.offset(yOffset, xOffset, zOffset); + case Y -> origin.offset(xOffset, yOffset, zOffset); + case Z -> origin.offset(xOffset, zOffset, yOffset); }; Optional part = cache.getOrCache(type, level, pos); - if (part.isEmpty()) break Search; + if (part.isEmpty()) + break Search; T controller = part.get(); int otherWidth = controller.getWidth(); - if (otherWidth > width) break Search; - if (otherWidth == width && controller.getHeight() == be.getMaxLength(axis, width)) break Search; + if (otherWidth > width) + break Search; + if (otherWidth == width && controller.getHeight() == be.getMaxLength(axis, width)) + break Search; Direction.Axis conAxis = controller.getMainConnectionAxis(); - if (axis != conAxis) break Search; + if (axis != conAxis) + break Search; BlockPos conPos = controller.getBlockPos(); if (!conPos.equals(origin)) { if (axis == Direction.Axis.Y) { // vertical multi, like a FluidTank - if (conPos.getX() < origin.getX()) break Search; - if (conPos.getZ() < origin.getZ()) break Search; - if (conPos.getX() + otherWidth > origin.getX() + width) break Search; - if (conPos.getZ() + otherWidth > origin.getZ() + width) break Search; + if (conPos.getX() < origin.getX()) + break Search; + if (conPos.getZ() < origin.getZ()) + break Search; + if (conPos.getX() + otherWidth > origin.getX() + width) + break Search; + if (conPos.getZ() + otherWidth > origin.getZ() + width) + break Search; } else { // horizontal multi, like an ItemVault - if (axis == Direction.Axis.Z && conPos.getX() < origin.getX()) break Search; - if (conPos.getY() < origin.getY()) break Search; - if (axis == Direction.Axis.X && conPos.getZ() < origin.getZ()) break Search; - if (axis == Direction.Axis.Z && conPos.getX() + otherWidth > origin.getX() + width) break Search; - if (conPos.getY() + otherWidth > origin.getY() + width) break Search; - if (axis == Direction.Axis.X && conPos.getZ() + otherWidth > origin.getZ() + width) break Search; + if (axis == Direction.Axis.Z && conPos.getX() < origin.getX()) + break Search; + if (conPos.getY() < origin.getY()) + break Search; + if (axis == Direction.Axis.X && conPos.getZ() < origin.getZ()) + break Search; + if (axis == Direction.Axis.Z && conPos.getX() + otherWidth > origin.getX() + width) + break Search; + if (conPos.getY() + otherWidth > origin.getY() + width) + break Search; + if (axis == Direction.Axis.X && conPos.getZ() + otherWidth > origin.getZ() + width) + break Search; } } if (controller instanceof IMultiTileContainer.Fluid ifluidCon && ifluidCon.hasTank()) { FluidStack otherFluid = ifluidCon.getFluid(0); - if (!fluid.isEmpty() && !otherFluid.isEmpty() && !fluid.isFluidEqual(otherFluid)) break Search; + if (!fluid.isEmpty() && !otherFluid.isEmpty() && !fluid.isFluidEqual(otherFluid)) + break Search; } } } @@ -192,7 +228,8 @@ public class ConnectivityHandler { height++; } - if (simulate) return amount; + if (simulate) + return amount; Object extraData = be.getExtraData(); @@ -200,25 +237,30 @@ public class ConnectivityHandler { for (int xOffset = 0; xOffset < width; xOffset++) { for (int zOffset = 0; zOffset < width; zOffset++) { BlockPos pos = switch (axis) { - case X -> origin.offset(yOffset, xOffset, zOffset); - case Y -> origin.offset(xOffset, yOffset, zOffset); - case Z -> origin.offset(xOffset, zOffset, yOffset); + case X -> origin.offset(yOffset, xOffset, zOffset); + case Y -> origin.offset(xOffset, yOffset, zOffset); + case Z -> origin.offset(xOffset, zOffset, yOffset); }; T part = partAt(type, level, pos); - if (part == null) continue; - if (part == be) continue; + if (part == null) + continue; + if (part == be) + continue; extraData = be.modifyExtraData(extraData); if (part instanceof IMultiTileContainer.Fluid ifluidPart && ifluidPart.hasTank()) { - IFluidTank tankAt = ifluidPart.getTank(0); + IFluidTank tankAt = ifluidPart.getTank(0); FluidStack fluidAt = tankAt.getFluid(); if (!fluidAt.isEmpty()) { // making this generic would be a rather large mess, unfortunately - if (beTank != null && fluid.isEmpty() && beTank instanceof CreativeFluidTankTileEntity.CreativeSmartFluidTank) { - ((CreativeFluidTankTileEntity.CreativeSmartFluidTank)beTank).setContainedFluid(fluidAt); + if (beTank != null && fluid.isEmpty() + && beTank instanceof CreativeFluidTankTileEntity.CreativeSmartFluidTank) { + ((CreativeFluidTankTileEntity.CreativeSmartFluidTank) beTank) + .setContainedFluid(fluidAt); } - if (be instanceof IMultiTileContainer.Fluid ifluidBE && ifluidBE.hasTank() && beTank != null) { + if (be instanceof IMultiTileContainer.Fluid ifluidBE && ifluidBE.hasTank() + && beTank != null) { beTank.fill(fluidAt, IFluidHandler.FluidAction.EXECUTE); } } @@ -245,18 +287,22 @@ public class ConnectivityHandler { } // tryReconnect helps whenever only a few tanks have been removed - private static void splitMultiAndInvalidate(T be, @Nullable SearchCache cache, boolean tryReconnect) { + private static void splitMultiAndInvalidate(T be, + @Nullable SearchCache cache, boolean tryReconnect) { Level level = be.getLevel(); - if (level == null) return; + if (level == null) + return; be = be.getControllerTE(); - if (be == null) return; + if (be == null) + return; int height = be.getHeight(); - int width = be.getWidth(); - if (width == 1 && height == 1) return; + int width = be.getWidth(); + if (width == 1 && height == 1) + return; - BlockPos origin = be.getBlockPos(); + BlockPos origin = be.getBlockPos(); List frontier = new ArrayList<>(); Direction.Axis axis = be.getMainConnectionAxis(); @@ -265,8 +311,9 @@ public class ConnectivityHandler { int maxCapacity = 0; if (be instanceof IMultiTileContainer.Fluid ifluidBE && ifluidBE.hasTank()) { toDistribute = ifluidBE.getFluid(0); - maxCapacity = ifluidBE.getTankSize(0); - if (!toDistribute.isEmpty() && !be.isRemoved()) toDistribute.shrink(maxCapacity); + maxCapacity = ifluidBE.getTankSize(0); + if (!toDistribute.isEmpty() && !be.isRemoved()) + toDistribute.shrink(maxCapacity); ifluidBE.setTankSize(0, 1); } @@ -274,13 +321,16 @@ public class ConnectivityHandler { for (int xOffset = 0; xOffset < width; xOffset++) { for (int zOffset = 0; zOffset < width; zOffset++) { BlockPos pos = switch (axis) { - case X -> origin.offset(yOffset, xOffset, zOffset); - case Y -> origin.offset(xOffset, yOffset, zOffset); - case Z -> origin.offset(xOffset, zOffset, yOffset); + case X -> origin.offset(yOffset, xOffset, zOffset); + case Y -> origin.offset(xOffset, yOffset, zOffset); + case Z -> origin.offset(xOffset, zOffset, yOffset); }; T partAt = partAt(be.getType(), level, pos); - if (partAt == null) continue; - if (!partAt.getController().equals(origin)) continue; + if (partAt == null) + continue; + if (!partAt.getController() + .equals(origin)) + continue; T controllerBE = partAt.getControllerTE(); partAt.setExtraData((controllerBE == null ? null : controllerBE.getExtraData())); @@ -288,16 +338,18 @@ public class ConnectivityHandler { if (!toDistribute.isEmpty() && partAt != be) { FluidStack copy = toDistribute.copy(); - IFluidTank tank = (partAt instanceof IMultiTileContainer.Fluid ifluidPart ? ifluidPart.getTank(0) : null); + IFluidTank tank = + (partAt instanceof IMultiTileContainer.Fluid ifluidPart ? ifluidPart.getTank(0) : null); // making this generic would be a rather large mess, unfortunately if (tank instanceof CreativeFluidTankTileEntity.CreativeSmartFluidTank creativeTank) { - if (creativeTank.isEmpty()) creativeTank.setContainedFluid(toDistribute); - } - else { + if (creativeTank.isEmpty()) + creativeTank.setContainedFluid(toDistribute); + } else { int split = Math.min(maxCapacity, toDistribute.getAmount()); copy.setAmount(split); toDistribute.shrink(split); - if (tank != null) tank.fill(copy, IFluidHandler.FluidAction.EXECUTE); + if (tank != null) + tank.fill(copy, IFluidHandler.FluidAction.EXECUTE); } } if (tryReconnect) { @@ -311,10 +363,12 @@ public class ConnectivityHandler { } } if (be instanceof IMultiTileContainer.Inventory iinv && iinv.hasInventory()) { - be.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY).invalidate(); + be.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) + .invalidate(); } if (be instanceof IMultiTileContainer.Fluid ifluid && ifluid.hasTank()) { - be.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY).invalidate(); + be.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY) + .invalidate(); } if (tryReconnect) { formMulti(be.getType(), level, cache == null ? new SearchCache<>() : cache, frontier); @@ -326,40 +380,55 @@ public class ConnectivityHandler { } @Nullable - public static T partAt(BlockEntityType type, BlockGetter level, BlockPos pos) { + public static T partAt(BlockEntityType type, BlockGetter level, + BlockPos pos) { BlockEntity be = level.getBlockEntity(pos); - if (be != null && be.getType() == type) return checked(be); + if (be != null && be.getType() == type) + return checked(be); return null; } - public static boolean isConnected(BlockGetter level, BlockPos pos, BlockPos other) { + public static boolean isConnected(BlockGetter level, BlockPos pos, + BlockPos other) { T one = checked(level.getBlockEntity(pos)); T two = checked(level.getBlockEntity(other)); - if (one == null || two == null) return false; - return one.getController().equals(two.getController()); + if (one == null || two == null) + return false; + return one.getController() + .equals(two.getController()); } @Nullable @SuppressWarnings("unchecked") private static T checked(BlockEntity be) { - if (be instanceof IMultiTileContainer) return (T)be; + if (be instanceof IMultiTileContainer) + return (T) be; return null; } private static class SearchCache { Map> controllerMap; - public SearchCache() { controllerMap = new HashMap<>(); } + public SearchCache() { + controllerMap = new HashMap<>(); + } - void put(BlockPos pos, T target) { controllerMap.put(pos, Optional.of(target)); } + void put(BlockPos pos, T target) { + controllerMap.put(pos, Optional.of(target)); + } - void putEmpty(BlockPos pos) { controllerMap.put(pos, Optional.empty()); } + void putEmpty(BlockPos pos) { + controllerMap.put(pos, Optional.empty()); + } - boolean hasVisited(BlockPos pos) { return controllerMap.containsKey(pos); } + boolean hasVisited(BlockPos pos) { + return controllerMap.containsKey(pos); + } Optional getOrCache(BlockEntityType type, BlockGetter level, BlockPos pos) { - if (hasVisited(pos)) return controllerMap.get(pos); + if (hasVisited(pos)) + return controllerMap.get(pos); T partAt = partAt(type, level, pos); if (partAt == null) { 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 5832da41a..ff414369a 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 @@ -28,10 +28,8 @@ import com.simibubi.create.content.contraptions.components.structureMovement.pis import com.simibubi.create.content.contraptions.components.structureMovement.pulley.PulleyBlock; import com.simibubi.create.content.contraptions.components.structureMovement.pulley.PulleyTileEntity; import com.simibubi.create.content.contraptions.fluids.tank.FluidTankBlock; -import com.simibubi.create.content.contraptions.fluids.tank.FluidTankConnectivityHandler; import com.simibubi.create.content.logistics.block.redstone.RedstoneLinkBlock; import com.simibubi.create.content.logistics.block.vault.ItemVaultBlock; -import com.simibubi.create.content.logistics.block.vault.ItemVaultConnectivityHandler; import com.simibubi.create.foundation.config.ContraptionMovementSetting; import net.minecraft.core.BlockPos; @@ -331,9 +329,9 @@ public class BlockMovementChecks { return direction.getAxis() != state.getValue(SailBlock.FACING) .getAxis(); if (state.getBlock() instanceof FluidTankBlock) - return ConnectivityHandler.isConnected(world, pos, pos.relative(direction)); //FluidTankConnectivityHandler.isConnected(world, pos, pos.relative(direction)); + return ConnectivityHandler.isConnected(world, pos, pos.relative(direction)); if (state.getBlock() instanceof ItemVaultBlock) - return ConnectivityHandler.isConnected(world, pos, pos.relative(direction)); //ItemVaultConnectivityHandler.isConnected(world, pos, pos.relative(direction)); + return ConnectivityHandler.isConnected(world, pos, pos.relative(direction)); if (AllBlocks.STICKER.has(state) && state.getValue(StickerBlock.EXTENDED)) { return direction == state.getValue(StickerBlock.FACING) && !isNotSupportive(world.getBlockState(pos.relative(direction)), direction.getOpposite()); From 329be0d948504536beb9f3c303795ee08d27d8ac Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Sun, 22 May 2022 17:34:18 +0200 Subject: [PATCH 31/31] Switch to forge RB --- gradle.properties | 2 +- src/main/resources/META-INF/mods.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle.properties b/gradle.properties index fa671c50f..2822ee3d3 100644 --- a/gradle.properties +++ b/gradle.properties @@ -6,7 +6,7 @@ org.gradle.daemon = false # mod version info mod_version = 0.4.1 minecraft_version = 1.18.2 -forge_version = 40.0.34 +forge_version = 40.1.0 # build dependency versions forgegradle_version = 5.1.+ diff --git a/src/main/resources/META-INF/mods.toml b/src/main/resources/META-INF/mods.toml index 5d823cc34..96a30a866 100644 --- a/src/main/resources/META-INF/mods.toml +++ b/src/main/resources/META-INF/mods.toml @@ -18,7 +18,7 @@ Technology that empowers the player.''' [[dependencies.create]] modId="forge" mandatory=true - versionRange="[40.0.0,)" + versionRange="[40.1.0,)" ordering="NONE" side="BOTH"